diff --git a/.betterer.results b/.betterer.results index cb5461faa3536..b36e5fc6856d6 100644 --- a/.betterer.results +++ b/.betterer.results @@ -9,8 +9,7 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"] ], "packages/grafana-data/src/dataframe/ArrayDataFrame.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "packages/grafana-data/src/dataframe/CircularDataFrame.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -34,14 +33,10 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], + [0, 0, 0, "Do not use any type assertions.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], [0, 0, 0, "Do not use any type assertions.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Do not use any type assertions.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Do not use any type assertions.", "15"] + [0, 0, 0, "Do not use any type assertions.", "11"] ], "packages/grafana-data/src/dataframe/StreamingDataFrame.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -293,17 +288,14 @@ exports[`better eslint`] = { ], "packages/grafana-data/src/types/fieldOverrides.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"] + [0, 0, 0, "Unexpected any. Specify a different type.", "8"] ], "packages/grafana-data/src/types/flot.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -328,9 +320,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "7"], [0, 0, 0, "Do not use any type assertions.", "8"] ], - "packages/grafana-data/src/types/logs.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "packages/grafana-data/src/types/options.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] @@ -376,11 +365,6 @@ exports[`better eslint`] = { "packages/grafana-data/src/types/variables.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-data/src/types/vector.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "packages/grafana-data/src/utils/OptionsUIBuilders.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -435,8 +419,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "packages/grafana-data/src/utils/location.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "packages/grafana-data/src/utils/url.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -456,25 +439,9 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"] ], - "packages/grafana-data/src/vector/AppendedVectors.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] - ], - "packages/grafana-data/src/vector/ArrayVector.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "packages/grafana-data/src/vector/CircularVector.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-data/src/vector/ConstantVector.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "packages/grafana-data/src/vector/FormattedVector.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "packages/grafana-data/src/vector/FunctionalVector.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -484,11 +451,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"] - ], - "packages/grafana-data/src/vector/SortedVector.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + [0, 0, 0, "Unexpected any. Specify a different type.", "8"] ], "packages/grafana-data/test/__mocks__/pluginMocks.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -533,6 +496,232 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], + "packages/grafana-o11y-ds-frontend/src/utils.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "packages/grafana-prometheus/src/components/PromExemplarField.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"] + ], + "packages/grafana-prometheus/src/components/PromExploreExtraField.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] + ], + "packages/grafana-prometheus/src/components/PromQueryField.test.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "packages/grafana-prometheus/src/components/PromQueryField.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "packages/grafana-prometheus/src/components/PrometheusMetricsBrowser.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"], + [0, 0, 0, "Styles should be written using objects.", "5"], + [0, 0, 0, "Styles should be written using objects.", "6"], + [0, 0, 0, "Styles should be written using objects.", "7"], + [0, 0, 0, "Styles should be written using objects.", "8"], + [0, 0, 0, "Styles should be written using objects.", "9"], + [0, 0, 0, "Styles should be written using objects.", "10"], + [0, 0, 0, "Styles should be written using objects.", "11"] + ], + "packages/grafana-prometheus/src/components/monaco-query-field/MonacoQueryField.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] + ], + "packages/grafana-prometheus/src/configuration/ConfigEditor.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"], + [0, 0, 0, "Styles should be written using objects.", "5"], + [0, 0, 0, "Styles should be written using objects.", "6"], + [0, 0, 0, "Styles should be written using objects.", "7"], + [0, 0, 0, "Styles should be written using objects.", "8"], + [0, 0, 0, "Styles should be written using objects.", "9"], + [0, 0, 0, "Styles should be written using objects.", "10"], + [0, 0, 0, "Styles should be written using objects.", "11"], + [0, 0, 0, "Styles should be written using objects.", "12"], + [0, 0, 0, "Styles should be written using objects.", "13"], + [0, 0, 0, "Styles should be written using objects.", "14"], + [0, 0, 0, "Styles should be written using objects.", "15"] + ], + "packages/grafana-prometheus/src/configuration/ExemplarsSettings.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"] + ], + "packages/grafana-prometheus/src/datasource.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"], + [0, 0, 0, "Unexpected any. Specify a different type.", "5"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "7"], + [0, 0, 0, "Unexpected any. Specify a different type.", "8"], + [0, 0, 0, "Unexpected any. Specify a different type.", "9"], + [0, 0, 0, "Unexpected any. Specify a different type.", "10"], + [0, 0, 0, "Unexpected any. Specify a different type.", "11"], + [0, 0, 0, "Unexpected any. Specify a different type.", "12"] + ], + "packages/grafana-prometheus/src/gcopypaste/app/features/live/data/amendTimeSeries.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Do not use any type assertions.", "3"], + [0, 0, 0, "Do not use any type assertions.", "4"] + ], + "packages/grafana-prometheus/src/gcopypaste/public/test/matchers/index.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "packages/grafana-prometheus/src/gcopypaste/public/test/matchers/toEmitValuesWith.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + ], + "packages/grafana-prometheus/src/gcopypaste/public/test/matchers/utils.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "packages/grafana-prometheus/src/gcopypaste/test/helpers/selectOptionInTest.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "packages/grafana-prometheus/src/language_provider.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"] + ], + "packages/grafana-prometheus/src/language_utils.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"] + ], + "packages/grafana-prometheus/src/metric_find_query.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"] + ], + "packages/grafana-prometheus/src/query_hints.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "packages/grafana-prometheus/src/querybuilder/QueryPattern.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"] + ], + "packages/grafana-prometheus/src/querybuilder/QueryPatternsModal.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] + ], + "packages/grafana-prometheus/src/querybuilder/binaryScalarOperations.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "packages/grafana-prometheus/src/querybuilder/components/LabelFilterItem.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Do not use any type assertions.", "3"] + ], + "packages/grafana-prometheus/src/querybuilder/components/LabelFilters.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"] + ], + "packages/grafana-prometheus/src/querybuilder/components/LabelParamEditor.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "packages/grafana-prometheus/src/querybuilder/components/MetricSelect.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"], + [0, 0, 0, "Styles should be written using objects.", "5"], + [0, 0, 0, "Styles should be written using objects.", "6"], + [0, 0, 0, "Styles should be written using objects.", "7"], + [0, 0, 0, "Styles should be written using objects.", "8"], + [0, 0, 0, "Styles should be written using objects.", "9"], + [0, 0, 0, "Styles should be written using objects.", "10"], + [0, 0, 0, "Styles should be written using objects.", "11"], + [0, 0, 0, "Styles should be written using objects.", "12"] + ], + "packages/grafana-prometheus/src/querybuilder/components/PromQueryBuilder.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditor.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"] + ], + "packages/grafana-prometheus/src/querybuilder/components/metrics-modal/AdditionalSettings.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"] + ], + "packages/grafana-prometheus/src/querybuilder/components/metrics-modal/ResultsTable.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"], + [0, 0, 0, "Styles should be written using objects.", "5"], + [0, 0, 0, "Styles should be written using objects.", "6"], + [0, 0, 0, "Styles should be written using objects.", "7"], + [0, 0, 0, "Styles should be written using objects.", "8"], + [0, 0, 0, "Styles should be written using objects.", "9"], + [0, 0, 0, "Styles should be written using objects.", "10"], + [0, 0, 0, "Styles should be written using objects.", "11"], + [0, 0, 0, "Styles should be written using objects.", "12"] + ], + "packages/grafana-prometheus/src/querybuilder/components/metrics-modal/styles.ts:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"], + [0, 0, 0, "Styles should be written using objects.", "5"], + [0, 0, 0, "Styles should be written using objects.", "6"], + [0, 0, 0, "Styles should be written using objects.", "7"], + [0, 0, 0, "Styles should be written using objects.", "8"], + [0, 0, 0, "Styles should be written using objects.", "9"], + [0, 0, 0, "Styles should be written using objects.", "10"], + [0, 0, 0, "Styles should be written using objects.", "11"], + [0, 0, 0, "Styles should be written using objects.", "12"], + [0, 0, 0, "Styles should be written using objects.", "13"], + [0, 0, 0, "Styles should be written using objects.", "14"], + [0, 0, 0, "Styles should be written using objects.", "15"], + [0, 0, 0, "Styles should be written using objects.", "16"], + [0, 0, 0, "Styles should be written using objects.", "17"], + [0, 0, 0, "Styles should be written using objects.", "18"] + ], + "packages/grafana-prometheus/src/querybuilder/operationUtils.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "packages/grafana-prometheus/src/querybuilder/shared/OperationEditor.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "packages/grafana-prometheus/src/querybuilder/shared/OperationParamEditor.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"] + ], + "packages/grafana-prometheus/src/querybuilder/shared/QueryBuilderHints.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] + ], + "packages/grafana-prometheus/src/querybuilder/shared/types.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + ], + "packages/grafana-prometheus/src/types.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + ], "packages/grafana-runtime/src/analytics/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -576,12 +765,12 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "11"], [0, 0, 0, "Unexpected any. Specify a different type.", "12"] ], + "packages/grafana-runtime/src/services/pluginExtensions/getPluginExtensions.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], "packages/grafana-runtime/src/utils/DataSourceWithBackend.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "packages/grafana-runtime/src/utils/queryResponse.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -598,19 +787,38 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "5"], [0, 0, 0, "Do not use any type assertions.", "6"] ], - "packages/grafana-ui/src/components/ColorPicker/ColorPicker.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + "packages/grafana-sql/src/components/query-editor-raw/QueryToolbox.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"] ], - "packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + "packages/grafana-sql/src/components/query-editor-raw/QueryValidator.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"] ], - "packages/grafana-ui/src/components/DataSourceSettings/CustomHeadersSettings.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + "packages/grafana-sql/src/components/query-editor-raw/RawEditor.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] + ], + "packages/grafana-sql/src/components/visual-query-builder/AwesomeQueryBuilder.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "packages/grafana-sql/src/components/visual-query-builder/SQLWhereRow.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "packages/grafana-ui/src/components/ColorPicker/ColorPicker.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] + "packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "packages/grafana-ui/src/components/DataSourceSettings/CustomHeadersSettings.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "packages/grafana-ui/src/components/DataSourceSettings/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -622,9 +830,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"] ], - "packages/grafana-ui/src/components/DateTimePickers/TimeRangeInput.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], "packages/grafana-ui/src/components/Forms/Legacy/Input/Input.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], @@ -656,12 +861,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], - "packages/grafana-ui/src/components/PageLayout/PageToolbar.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], - "packages/grafana-ui/src/components/PanelChrome/LoadingIndicator.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], "packages/grafana-ui/src/components/PanelChrome/PanelContext.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] @@ -750,7 +949,8 @@ exports[`better eslint`] = { ], "packages/grafana-ui/src/components/Table/Table.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"] ], "packages/grafana-ui/src/components/Table/TableCell.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -936,9 +1136,6 @@ exports[`better eslint`] = { "packages/grafana-ui/src/utils/useAsyncDependency.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "plugins-bundled/internal/input-datasource/src/InputDatasource.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/core/TableModel.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -948,12 +1145,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "6"] ], - "public/app/core/components/AppChrome/SectionNav/SectionNavItem.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], "public/app/core/components/AppChrome/TopBar/TopSearchBarCommandPaletteTrigger.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], @@ -968,11 +1159,9 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "4"], [0, 0, 0, "Do not use any type assertions.", "5"], [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Do not use any type assertions.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Do not use any type assertions.", "9"], - [0, 0, 0, "Do not use any type assertions.", "10"], - [0, 0, 0, "Do not use any type assertions.", "11"] + [0, 0, 0, "Unexpected any. Specify a different type.", "7"], + [0, 0, 0, "Do not use any type assertions.", "8"], + [0, 0, 0, "Do not use any type assertions.", "9"] ], "public/app/core/components/GraphNG/hooks.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -990,15 +1179,13 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"] + [0, 0, 0, "Unexpected any. Specify a different type.", "9"], + [0, 0, 0, "Unexpected any. Specify a different type.", "10"] ], "public/app/core/components/PageHeader/PageHeader.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/core/components/PageHeader/PanelHeaderMenuItem.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], "public/app/core/components/PanelTypeFilter/PanelTypeFilter.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] @@ -1006,11 +1193,6 @@ exports[`better eslint`] = { "public/app/core/components/QueryOperationRow/OperationRowHelp.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/core/components/QueryOperationRow/QueryOperationAction.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], "public/app/core/components/QueryOperationRow/QueryOperationRow.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] @@ -1036,18 +1218,6 @@ exports[`better eslint`] = { "public/app/core/components/RolePicker/ValueContainer.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/core/components/Select/OldFolderPicker.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/core/components/SharedPreferences/SharedPreferences.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/core/components/SplitPaneWrapper/SplitPaneWrapper.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], "public/app/core/components/TagFilter/TagFilter.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -1067,14 +1237,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "public/app/core/components/TraceToLogs/TagMappingInput.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], - "public/app/core/components/TraceToMetrics/TraceToMetricsSettings.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], "public/app/core/components/Upgrade/ProBadge.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], @@ -1102,16 +1264,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], - "public/app/core/components/help/HelpModal.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"] - ], "public/app/core/navigation/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -1150,9 +1302,6 @@ exports[`better eslint`] = { "public/app/core/specs/backend_srv.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/core/specs/time_series.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/core/time_series2.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -1193,23 +1342,13 @@ exports[`better eslint`] = { "public/app/core/utils/deferred.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/core/utils/explore.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "public/app/core/utils/fetch.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Do not use any type assertions.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Do not use any type assertions.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"] + [0, 0, 0, "Unexpected any. Specify a different type.", "5"] ], "public/app/core/utils/flatten.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -1225,15 +1364,8 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/core/utils/ticks.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"] - ], - "public/app/core/utils/tracing.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/admin/LicenseChrome.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -1291,78 +1423,12 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"] ], - "public/app/features/alerting/AlertTab.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "public/app/features/alerting/AlertTabCtrl.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"], - [0, 0, 0, "Unexpected any. Specify a different type.", "19"], - [0, 0, 0, "Unexpected any. Specify a different type.", "20"], - [0, 0, 0, "Unexpected any. Specify a different type.", "21"], - [0, 0, 0, "Unexpected any. Specify a different type.", "22"], - [0, 0, 0, "Do not use any type assertions.", "23"], - [0, 0, 0, "Unexpected any. Specify a different type.", "24"], - [0, 0, 0, "Unexpected any. Specify a different type.", "25"], - [0, 0, 0, "Unexpected any. Specify a different type.", "26"], - [0, 0, 0, "Unexpected any. Specify a different type.", "27"], - [0, 0, 0, "Unexpected any. Specify a different type.", "28"], - [0, 0, 0, "Unexpected any. Specify a different type.", "29"], - [0, 0, 0, "Unexpected any. Specify a different type.", "30"], - [0, 0, 0, "Unexpected any. Specify a different type.", "31"], - [0, 0, 0, "Unexpected any. Specify a different type.", "32"], - [0, 0, 0, "Unexpected any. Specify a different type.", "33"] - ], - "public/app/features/alerting/EditNotificationChannelPage.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/features/alerting/StateHistory.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/features/alerting/TestRuleResult.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], - "public/app/features/alerting/components/NotificationChannelForm.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/features/alerting/components/NotificationChannelOptions.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], - "public/app/features/alerting/components/OptionElement.tsx:5381": [ + "public/app/features/alerting/routes.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/alerting/state/ThresholdMapper.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/alerting/state/actions.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "public/app/features/alerting/state/alertDef.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -1392,9 +1458,6 @@ exports[`better eslint`] = { "public/app/features/alerting/unified/AlertWarning.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/alerting/unified/AlertsFolderView.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/alerting/unified/AlertsFolderView.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -1417,11 +1480,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "11"], [0, 0, 0, "Styles should be written using objects.", "12"], [0, 0, 0, "Styles should be written using objects.", "13"], - [0, 0, 0, "Styles should be written using objects.", "14"], - [0, 0, 0, "Styles should be written using objects.", "15"], - [0, 0, 0, "Styles should be written using objects.", "16"], - [0, 0, 0, "Styles should be written using objects.", "17"], - [0, 0, 0, "Styles should be written using objects.", "18"] + [0, 0, 0, "Styles should be written using objects.", "14"] ], "public/app/features/alerting/unified/NotificationPolicies.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] @@ -1455,10 +1514,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/features/alerting/unified/components/AlertStateDot.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] + [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/features/alerting/unified/components/AnnotationDetailsField.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -1505,13 +1561,6 @@ exports[`better eslint`] = { "public/app/features/alerting/unified/components/GrafanaAlertmanagerDeliveryWarning.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/alerting/unified/components/HoverCard.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] - ], "public/app/features/alerting/unified/components/Label.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -1581,22 +1630,17 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] + [0, 0, 0, "Styles should be written using objects.", "3"] ], "public/app/features/alerting/unified/components/alert-groups/AlertGroupHeader.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], - "public/app/features/alerting/unified/components/alert-groups/AlertStateFilter.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/alerting/unified/components/alert-groups/GroupBy.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/alerting/unified/components/alert-groups/MatcherFilter.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/alerting/unified/components/contact-points/ContactPoints.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -1663,23 +1707,12 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "2"], [0, 0, 0, "Styles should be written using objects.", "3"] ], - "public/app/features/alerting/unified/components/notification-policies/Filters.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/alerting/unified/components/notification-policies/Matchers.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], "public/app/features/alerting/unified/components/notification-policies/Policy.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/alerting/unified/components/notification-policies/PromDurationDocs.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -2012,41 +2045,16 @@ exports[`better eslint`] = { "public/app/features/alerting/unified/components/rule-editor/rule-types/RuleTypePicker.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/alerting/unified/components/rule-viewer/RuleViewer.v1.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"], - [0, 0, 0, "Styles should be written using objects.", "12"] - ], "public/app/features/alerting/unified/components/rule-viewer/RuleViewerLayout.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/features/alerting/unified/components/rule-viewer/RuleViewerVisualization.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] - ], "public/app/features/alerting/unified/components/rules/ActionButton.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/features/alerting/unified/components/rules/AlertInstanceStateFilter.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/alerting/unified/components/rules/CloneRule.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/alerting/unified/components/rules/CloudRules.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -2107,8 +2115,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"], [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] + [0, 0, 0, "Styles should be written using objects.", "4"] ], "public/app/features/alerting/unified/components/rules/RuleHealth.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] @@ -2126,13 +2133,6 @@ exports[`better eslint`] = { "public/app/features/alerting/unified/components/rules/RuleState.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/alerting/unified/components/rules/RulesFilter.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] - ], "public/app/features/alerting/unified/components/rules/RulesGroup.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -2225,23 +2225,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "3"], [0, 0, 0, "Styles should be written using objects.", "4"] ], - "public/app/features/alerting/unified/home/GettingStarted.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"], - [0, 0, 0, "Styles should be written using objects.", "12"], - [0, 0, 0, "Styles should be written using objects.", "13"], - [0, 0, 0, "Styles should be written using objects.", "14"] - ], "public/app/features/alerting/unified/hooks/useAlertmanagerConfig.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -2259,11 +2242,9 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Do not use any type assertions.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Do not use any type assertions.", "10"] + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "7"], + [0, 0, 0, "Do not use any type assertions.", "8"] ], "public/app/features/alerting/unified/state/actions.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -2293,6 +2274,9 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], + "public/app/features/alerting/unified/utils/misc.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], "public/app/features/alerting/unified/utils/receiver-form.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], @@ -2319,9 +2303,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Do not use any type assertions.", "3"] ], - "public/app/features/annotations/components/StandardAnnotationQueryEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/annotations/events_processing.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -2383,11 +2364,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/features/connections/tabs/ConnectData/ConnectData.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], "public/app/features/connections/tabs/ConnectData/NoAccessModal/NoAccessModal.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -2402,9 +2378,6 @@ exports[`better eslint`] = { "public/app/features/connections/tabs/ConnectData/NoResults/NoResults.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/connections/tabs/ConnectData/Search/Search.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/correlations/CorrelationsPage.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -2423,36 +2396,46 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], + "public/app/features/dashboard-scene/inspect/HelpWizard/utils.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], "public/app/features/dashboard-scene/inspect/InspectJsonTab.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] ], - "public/app/features/dashboard-scene/panel-edit/VizPanelManager.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"] - ], - "public/app/features/dashboard-scene/panel-edit/VizPanelManager.tsx:5381": [ + "public/app/features/dashboard-scene/pages/DashboardScenePage.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"] ], - "public/app/features/dashboard-scene/scene/DashboardScene.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + "public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataPane.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/dashboard-scene/scene/PanelMenuBehavior.tsx:5381": [ + "public/app/features/dashboard-scene/saving/DashboardPrompt.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "public/app/features/dashboard-scene/saving/DetectChangesWorker.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/features/dashboard-scene/scene/setDashboardPanelContext.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + "public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx:5381": [ + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"] + ], + "public/app/features/dashboard-scene/saving/getDashboardChanges.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"] + ], + "public/app/features/dashboard-scene/saving/getSaveDashboardChange.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"] ], - "public/app/features/dashboard-scene/serialization/angularMigration.test.ts:5381": [ + "public/app/features/dashboard-scene/saving/shared.tsx:5381": [ + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] + ], + "public/app/features/dashboard-scene/scene/PanelMenuBehavior.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"] ], "public/app/features/dashboard-scene/serialization/transformSaveModelToScene.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -2469,7 +2452,8 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"] + [0, 0, 0, "Unexpected any. Specify a different type.", "8"], + [0, 0, 0, "Unexpected any. Specify a different type.", "9"] ], "public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -2477,29 +2461,26 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Do not use any type assertions.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"] + [0, 0, 0, "Do not use any type assertions.", "5"], + [0, 0, 0, "Do not use any type assertions.", "6"] + ], + "public/app/features/dashboard-scene/settings/variables/components/VariableSelectField.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "public/app/features/dashboard-scene/settings/variables/utils.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "public/app/features/dashboard-scene/utils/DashboardModelCompatibilityWrapper.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "public/app/features/dashboard-scene/utils/PanelModelCompatibilityWrapper.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/dashboard-scene/utils/test-utils.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"] ], - "public/app/features/dashboard/components/AddPanelWidget/AddPanelWidget.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/features/dashboard/components/AddPanelWidget/AddPanelWidget.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "3"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"] - ], "public/app/features/dashboard/components/AddWidgetModal/AddWidgetModal.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -2521,22 +2502,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"], - [0, 0, 0, "Unexpected any. Specify a different type.", "19"], - [0, 0, 0, "Unexpected any. Specify a different type.", "20"] + [0, 0, 0, "Unexpected any. Specify a different type.", "5"] ], "public/app/features/dashboard/components/DashExportModal/DashboardExporter.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -2591,10 +2557,6 @@ exports[`better eslint`] = { "public/app/features/dashboard/components/Inspector/PanelInspector.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/dashboard/components/LinksSettings/LinkSettingsList.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], "public/app/features/dashboard/components/PanelEditor/DynamicConfigValueEditor.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] @@ -2608,16 +2570,7 @@ exports[`better eslint`] = { ], "public/app/features/dashboard/components/PanelEditor/OptionsPaneCategory.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"] + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"] ], "public/app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -2711,9 +2664,6 @@ exports[`better eslint`] = { [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"] ], - "public/app/features/dashboard/components/SaveDashboard/SaveDashboardDiff.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/dashboard/components/SaveDashboard/SaveDashboardErrorProxy.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -2799,54 +2749,14 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "9"], [0, 0, 0, "Styles should be written using objects.", "10"] ], - "public/app/features/dashboard/components/TransformationsEditor/TransformationFilter.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/dashboard/components/TransformationsEditor/TransformationsEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], - "public/app/features/dashboard/components/VersionHistory/DiffGroup.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/features/dashboard/components/VersionHistory/DiffTitle.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"] - ], - "public/app/features/dashboard/components/VersionHistory/DiffValues.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/dashboard/components/VersionHistory/DiffViewer.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/dashboard/components/VersionHistory/VersionHistoryComparison.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/features/dashboard/components/VersionHistory/VersionHistoryHeader.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/dashboard/components/VersionHistory/VersionHistoryTable.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/dashboard/components/VersionHistory/useDashboardRestore.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/features/dashboard/components/VersionHistory/utils.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/features/dashboard/containers/DashboardPage.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -2854,6 +2764,9 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "4"] ], + "public/app/features/dashboard/containers/DashboardPageProxy.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], "public/app/features/dashboard/dashgrid/PanelStateWrapper.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -2877,14 +2790,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"] + [0, 0, 0, "Unexpected any. Specify a different type.", "11"] ], "public/app/features/dashboard/state/DashboardMigrator.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -2923,10 +2829,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"] + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], "public/app/features/dashboard/state/DashboardModel.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -2958,14 +2861,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "23"] ], "public/app/features/dashboard/state/PanelModel.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/dashboard/state/PanelModel.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -3001,16 +2897,10 @@ exports[`better eslint`] = { "public/app/features/dashboard/state/actions.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/dashboard/state/initDashboard.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"] + "public/app/features/dashboard/state/getPanelPluginToMigrateTo.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/dashboard/state/initDashboard.ts:5381": [ + "public/app/features/dashboard/state/initDashboard.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/dashboard/utils/getPanelMenu.test.ts:5381": [ @@ -3040,9 +2930,6 @@ exports[`better eslint`] = { "public/app/features/datasources/components/DataSourceTypeCardList.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/datasources/components/EditDataSource.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/features/datasources/components/picker/DataSourceCard.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -3054,16 +2941,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "7"], [0, 0, 0, "Styles should be written using objects.", "8"] ], - "public/app/features/datasources/components/picker/DataSourceDropdown.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"] - ], "public/app/features/datasources/components/picker/DataSourceList.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -3087,11 +2964,7 @@ exports[`better eslint`] = { ], "public/app/features/datasources/state/actions.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/features/datasources/state/actions.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -3190,26 +3063,6 @@ exports[`better eslint`] = { "public/app/features/explore/ContentOutline/ContentOutline.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/explore/ExploreDrawer.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/features/explore/ExplorePaneContainer.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/explore/FeatureTogglePage.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/explore/FlameGraph/FlameGraphExploreContainer.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/explore/LiveTailButton.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], "public/app/features/explore/Logs/LiveLogs.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -3218,19 +3071,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "4"] ], "public/app/features/explore/Logs/Logs.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"], - [0, 0, 0, "Styles should be written using objects.", "12"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/explore/Logs/LogsMetaRow.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -3252,8 +3093,7 @@ exports[`better eslint`] = { "public/app/features/explore/Logs/LogsSamplePanel.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] + [0, 0, 0, "Styles should be written using objects.", "2"] ], "public/app/features/explore/Logs/LogsVolumePanel.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -3272,19 +3112,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "2"], [0, 0, 0, "Styles should be written using objects.", "3"] ], - "public/app/features/explore/MetaInfoText.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], - "public/app/features/explore/NoData.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/features/explore/NoDataSourceCallToAction.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/explore/NodeGraph/NodeGraphContainer.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], @@ -3317,9 +3144,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"] ], - "public/app/features/explore/QueryRows.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/explore/RichHistory/RichHistoryCard.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -3368,13 +3192,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "5"], [0, 0, 0, "Styles should be written using objects.", "6"] ], - "public/app/features/explore/SecondaryActions.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/explore/SupplementaryResultError.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], "public/app/features/explore/TraceView/TraceView.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], @@ -3383,10 +3200,6 @@ exports[`better eslint`] = { "public/app/features/explore/TraceView/components/TracePageHeader/Actions/ActionButton.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/explore/TraceView/components/TracePageHeader/Actions/TracePageActions.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], "public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -3408,8 +3221,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "2"], [0, 0, 0, "Styles should be written using objects.", "3"], [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"] + [0, 0, 0, "Styles should be written using objects.", "5"] ], "public/app/features/explore/TraceView/components/TracePageHeader/SpanGraph/CanvasSpanGraph.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] @@ -3447,11 +3259,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "5"], [0, 0, 0, "Styles should be written using objects.", "6"], [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"], - [0, 0, 0, "Styles should be written using objects.", "12"] + [0, 0, 0, "Styles should be written using objects.", "8"] ], "public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanBarRow.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -3593,9 +3401,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "6"], [0, 0, 0, "Styles should be written using objects.", "7"] ], - "public/app/features/explore/TraceView/components/TraceTimelineViewer/TimelineRow.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/explore/TraceView/components/TraceTimelineViewer/VirtualizedTraceView.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -3610,11 +3415,6 @@ exports[`better eslint`] = { "public/app/features/explore/TraceView/components/common/CopyIcon.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/explore/TraceView/components/common/Divider.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], "public/app/features/explore/TraceView/components/common/LabeledList.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -3630,10 +3430,6 @@ exports[`better eslint`] = { "public/app/features/explore/TraceView/components/demo/trace-generators.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/explore/TraceView/components/model/link-patterns.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/features/explore/TraceView/components/model/link-patterns.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -3646,8 +3442,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Do not use any type assertions.", "9"], [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Do not use any type assertions.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"] + [0, 0, 0, "Do not use any type assertions.", "11"] ], "public/app/features/explore/TraceView/components/model/transform-trace-data.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -3659,25 +3454,6 @@ exports[`better eslint`] = { "public/app/features/explore/TraceView/components/types/trace.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/explore/TraceView/components/uberUtilityStyles.ts:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"], - [0, 0, 0, "Styles should be written using objects.", "12"], - [0, 0, 0, "Styles should be written using objects.", "13"], - [0, 0, 0, "Styles should be written using objects.", "14"], - [0, 0, 0, "Styles should be written using objects.", "15"], - [0, 0, 0, "Styles should be written using objects.", "16"] - ], "public/app/features/explore/TraceView/createSpanLink.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] @@ -3686,12 +3462,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/features/explore/spec/interpolation.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/features/explore/spec/queryHistory.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/explore/state/time.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -3721,10 +3491,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "5"], [0, 0, 0, "Styles should be written using objects.", "6"] ], - "public/app/features/expressions/components/Threshold.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], "public/app/features/expressions/guards.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -3739,9 +3505,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], - "public/app/features/geo/gazetteer/worldmap.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/geo/utils/frameVectorSource.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] @@ -3794,17 +3557,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"] ], - "public/app/features/library-panels/components/LibraryPanelsSearch/LibraryPanelsSearch.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"] - ], "public/app/features/library-panels/components/LibraryPanelsView/actions.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -3845,6 +3597,9 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"] ], + "public/app/features/logs/components/LoadingIndicator.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"] + ], "public/app/features/logs/components/LogDetailsRow.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -3917,9 +3672,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "34"], [0, 0, 0, "Styles should be written using objects.", "35"] ], - "public/app/features/logs/components/log-context/LoadingIndicator.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/logs/components/log-context/LogRowContextModal.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -3960,9 +3712,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "4"], [0, 0, 0, "Styles should be written using objects.", "5"] ], - "public/app/features/manage-dashboards/state/actions.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/manage-dashboards/state/actions.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -3970,7 +3719,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], @@ -3978,9 +3727,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "11"], [0, 0, 0, "Unexpected any. Specify a different type.", "12"], [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"] + [0, 0, 0, "Unexpected any. Specify a different type.", "14"] ], "public/app/features/manage-dashboards/state/reducers.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -4046,9 +3793,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/features/plugins/admin/components/PluginDetailsBody.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/plugins/admin/components/PluginDetailsHeaderDependencies.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -4121,33 +3866,10 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"] ], - "public/app/features/plugins/sql/components/query-editor-raw/QueryToolbox.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] - ], - "public/app/features/plugins/sql/components/query-editor-raw/QueryValidator.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/features/plugins/sql/components/query-editor-raw/RawEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/features/plugins/sql/components/visual-query-builder/AwesomeQueryBuilder.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/features/plugins/sql/components/visual-query-builder/SQLWhereRow.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/features/plugins/tests/datasource_srv.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], "public/app/features/plugins/utils.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -4155,9 +3877,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Do not use any type assertions.", "3"] ], - "public/app/features/profile/ChangePasswordForm.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/query/components/QueryEditorRow.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], @@ -4190,14 +3909,6 @@ exports[`better eslint`] = { "public/app/features/query/components/QueryGroupOptions.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/query/state/DashboardQueryRunner/AlertStatesWorker.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], - "public/app/features/query/state/DashboardQueryRunner/AnnotationsQueryRunner.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/query/state/DashboardQueryRunner/AnnotationsQueryRunner.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -4220,8 +3931,7 @@ exports[`better eslint`] = { ], "public/app/features/query/state/PanelQueryRunner.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/query/state/runRequest.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -4237,11 +3947,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"] - ], - "public/app/features/sandbox/TestStuffPage.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + [0, 0, 0, "Unexpected any. Specify a different type.", "10"] ], "public/app/features/search/page/components/ActionRow.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -4284,12 +3990,6 @@ exports[`better eslint`] = { "public/app/features/search/utils.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/serviceaccounts/components/CreateTokenModal.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], "public/app/features/serviceaccounts/components/ServiceAccountProfile.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], @@ -4344,9 +4044,7 @@ exports[`better eslint`] = { ], "public/app/features/storage/storage.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/features/teams/TeamGroupSync.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -4366,14 +4064,14 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "public/app/features/templating/macroRegistry.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/templating/templateProxies.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/templating/template_srv.mock.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Do not use any type assertions.", "3"] ], "public/app/features/templating/template_srv.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -4386,16 +4084,9 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Do not use any type assertions.", "12"], - [0, 0, 0, "Do not use any type assertions.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Do not use any type assertions.", "15"] - ], - "public/app/features/trails/SelectMetricTrailView.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Do not use any type assertions.", "10"], + [0, 0, 0, "Do not use any type assertions.", "11"], + [0, 0, 0, "Do not use any type assertions.", "12"] ], "public/app/features/transformers/FilterByValueTransformer/ValueMatchers/BasicMatcherEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -4424,8 +4115,7 @@ exports[`better eslint`] = { ], "public/app/features/transformers/calculateHeatmap/heatmap.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/transformers/configFromQuery/ConfigFromQueryTransformerEditor.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] @@ -4437,9 +4127,7 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/transformers/editors/CalculateFieldTransformerEditor/WindowOptionsEditor.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/transformers/editors/ConvertFieldTypeTransformerEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -4502,8 +4190,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/features/transformers/prepareTimeSeries/prepareTimeSeries.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/transformers/prepareTimeSeries/prepareTimeSeries.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -4534,9 +4221,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "public/app/features/variables/adhoc/actions.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/features/variables/adhoc/picker/AdHocFilterRenderer.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -4549,16 +4233,12 @@ exports[`better eslint`] = { "public/app/features/variables/datasource/actions.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/variables/editor/LegacyVariableQueryEditor.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], "public/app/features/variables/editor/VariableEditorContainer.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/variables/editor/VariableEditorEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/variables/editor/VariableEditorList.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], @@ -4578,16 +4258,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "9"], [0, 0, 0, "Styles should be written using objects.", "10"] ], - "public/app/features/variables/editor/VariableSelectField.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/features/variables/editor/VariableTextAreaField.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/variables/editor/VariableValuesPreview.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], "public/app/features/variables/editor/getVariableQueryEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] @@ -4634,32 +4304,13 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/features/variables/pickers/OptionsPicker/reducer.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"] - ], "public/app/features/variables/pickers/shared/VariableLink.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] ], "public/app/features/variables/pickers/shared/VariableOptions.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] ], - "public/app/features/variables/query/QueryVariableEditor.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/variables/query/QueryVariableEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] @@ -4669,11 +4320,7 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/variables/query/actions.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/variables/query/actions.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -4687,24 +4334,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/features/variables/query/queryRunners.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/variables/query/queryRunners.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -4742,21 +4372,11 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/features/variables/state/reducers.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/features/variables/state/sharedReducer.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "public/app/features/variables/state/transactionReducer.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] - ], "public/app/features/variables/state/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -4794,14 +4414,6 @@ exports[`better eslint`] = { "public/app/features/visualization/data-hover/DataHoverRows.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/visualization/data-hover/DataHoverView.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] - ], "public/app/plugins/datasource/alertmanager/DataSource.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -4813,10 +4425,6 @@ exports[`better eslint`] = { "public/app/plugins/datasource/azuremonitor/azure_monitor/azure_monitor_datasource.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/QueryField.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] - ], "public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -4866,9 +4474,6 @@ exports[`better eslint`] = { "public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryEditor.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryFieldOld.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/plugins/datasource/cloudwatch/components/QueryEditor/MetricsQueryEditor/DynamicLabelsField.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], @@ -4906,9 +4511,6 @@ exports[`better eslint`] = { "public/app/plugins/datasource/cloudwatch/utils/logsRetry.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/plugins/datasource/dashboard/DashboardQueryEditor.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/plugins/datasource/dashboard/runSharedRequest.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] @@ -4961,9 +4563,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], - "public/app/plugins/datasource/elasticsearch/QueryBuilder.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/datasource/elasticsearch/QueryBuilder.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -5074,6 +4673,9 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], + "public/app/plugins/datasource/grafana-pyroscope-datasource/utils.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], "public/app/plugins/datasource/grafana-testdata-datasource/QueryEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], @@ -5100,9 +4702,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/plugins/datasource/grafana-testdata-datasource/nodeGraphUtils.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/datasource/grafana-testdata-datasource/runStreams.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -5110,14 +4709,11 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/plugins/datasource/grafana/components/QueryEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"] + [0, 0, 0, "Styles should be written using objects.", "4"] ], "public/app/plugins/datasource/grafana/components/TimePickerInput.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -5129,9 +4725,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/plugins/datasource/grafana/datasource.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/datasource/grafana/datasource.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], @@ -5180,11 +4773,7 @@ exports[`better eslint`] = { "public/app/plugins/datasource/graphite/datasource.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"] + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], "public/app/plugins/datasource/graphite/datasource.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -5419,9 +5008,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/plugins/datasource/jaeger/components/QueryEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/plugins/datasource/jaeger/configuration/ConfigEditor.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], @@ -5476,10 +5062,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "12"], [0, 0, 0, "Styles should be written using objects.", "13"] ], - "public/app/plugins/datasource/loki/components/LokiOptionFields.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], "public/app/plugins/datasource/loki/components/monaco-query-field/MonacoQueryField.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] @@ -5487,10 +5069,6 @@ exports[`better eslint`] = { "public/app/plugins/datasource/loki/configuration/ConfigEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/plugins/datasource/loki/configuration/DebugSection.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/plugins/datasource/loki/configuration/DerivedField.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -5700,11 +5278,6 @@ exports[`better eslint`] = { "public/app/plugins/datasource/prometheus/configuration/ExemplarsSettings.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/plugins/datasource/prometheus/datasource.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "public/app/plugins/datasource/prometheus/datasource.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -5732,9 +5305,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"] ], - "public/app/plugins/datasource/prometheus/metric_find_query.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/datasource/prometheus/metric_find_query.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -5865,87 +5435,38 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "public/app/plugins/datasource/prometheus/result_transformer.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/datasource/prometheus/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "public/app/plugins/datasource/tempo/LokiSearch.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] - ], - "public/app/plugins/datasource/tempo/NativeSearch/NativeSearch.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/plugins/datasource/tempo/NativeSearch/TagsField/TagsField.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/plugins/datasource/tempo/SearchTraceQLEditor/DurationInput.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/plugins/datasource/tempo/SearchTraceQLEditor/GroupByField.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] + "public/app/plugins/datasource/tempo/ServiceGraphSection.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/datasource/tempo/SearchTraceQLEditor/SearchField.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] + "public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterRenderer.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/plugins/datasource/tempo/SearchTraceQLEditor/TagsInput.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] + "public/app/plugins/datasource/tempo/_importedDependencies/datasources/prometheus/language_utils.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/datasource/tempo/SearchTraceQLEditor/TraceQLSearch.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] + "public/app/plugins/datasource/tempo/_importedDependencies/datasources/prometheus/types.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "public/app/plugins/datasource/tempo/ServiceGraphSection.tsx:5381": [ + "public/app/plugins/datasource/tempo/_importedDependencies/test/helpers/createFetchResponse.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/plugins/datasource/tempo/configuration/ConfigEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/plugins/datasource/tempo/configuration/QuerySettings.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/plugins/datasource/tempo/configuration/TraceQLSearchSettings.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/datasource/tempo/datasource.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"] - ], "public/app/plugins/datasource/tempo/datasource.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"] + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"] ], "public/app/plugins/datasource/tempo/language_provider.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -5960,31 +5481,16 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"] ], - "public/app/plugins/datasource/tempo/traceql/QueryEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/plugins/datasource/tempo/traceql/TraceQLEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/plugins/datasource/tempo/traceql/autocomplete.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/plugins/datasource/zipkin/ConfigEditor.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/plugins/datasource/zipkin/QueryField.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/datasource/zipkin/datasource.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/datasource/zipkin/utils/testResponse.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -5993,39 +5499,10 @@ exports[`better eslint`] = { "public/app/plugins/datasource/zipkin/utils/transforms.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/plugins/panel/alertGroups/AlertGroup.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"] - ], "public/app/plugins/panel/alertlist/AlertInstances.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/plugins/panel/alertlist/AlertList.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"], - [0, 0, 0, "Styles should be written using objects.", "12"] - ], - "public/app/plugins/panel/alertlist/AlertListMigrationHandler.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "public/app/plugins/panel/alertlist/UnifiedAlertList.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -6054,20 +5531,9 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "5"], [0, 0, 0, "Styles should be written using objects.", "6"] ], - "public/app/plugins/panel/annolist/AnnoListPanel.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] - ], "public/app/plugins/panel/annolist/AnnoListPanel.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], - "public/app/plugins/panel/annolist/module.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] ], "public/app/plugins/panel/barchart/BarChartPanel.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -6114,9 +5580,6 @@ exports[`better eslint`] = { "public/app/plugins/panel/canvas/globalStyles.ts:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/plugins/panel/dashlist/migrations.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/panel/dashlist/styles.ts:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -6137,8 +5600,7 @@ exports[`better eslint`] = { ], "public/app/plugins/panel/debug/EventBusLogger.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/panel/gauge/GaugeMigrations.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -6188,25 +5650,11 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/panel/geomap/utils/layers.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/plugins/panel/geomap/utils/tooltip.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/panel/gettingstarted/GettingStarted.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"] - ], "public/app/plugins/panel/gettingstarted/components/DocsCard.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -6214,12 +5662,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "3"], [0, 0, 0, "Styles should be written using objects.", "4"] ], - "public/app/plugins/panel/gettingstarted/components/Step.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], "public/app/plugins/panel/gettingstarted/components/TutorialCard.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -6229,8 +5671,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "5"] ], "public/app/plugins/panel/gettingstarted/components/sharedStyles.ts:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] + [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/plugins/panel/heatmap/HeatmapPanel.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -6266,9 +5707,7 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "16"] ], "public/app/plugins/panel/histogram/Histogram.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/plugins/panel/live/LiveChannelEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -6284,9 +5723,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "6"], [0, 0, 0, "Styles should be written using objects.", "7"] ], - "public/app/plugins/panel/live/types.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/panel/logs/LogsPanel.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -6350,13 +5786,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/plugins/panel/nodeGraph/usePanning.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], - "public/app/plugins/panel/nodeGraph/utils.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/plugins/panel/piechart/PieChart.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -6368,110 +5797,12 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/plugins/panel/stat/StatMigrations.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "public/app/plugins/panel/state-timeline/migrations.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "public/app/plugins/panel/table-old/column_options.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"], - [0, 0, 0, "Unexpected any. Specify a different type.", "19"], - [0, 0, 0, "Unexpected any. Specify a different type.", "20"], - [0, 0, 0, "Unexpected any. Specify a different type.", "21"] - ], - "public/app/plugins/panel/table-old/editor.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"] - ], - "public/app/plugins/panel/table-old/module.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"] - ], - "public/app/plugins/panel/table-old/renderer.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"] - ], - "public/app/plugins/panel/table-old/transformers.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"] - ], - "public/app/plugins/panel/table-old/types.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"] + "public/app/plugins/panel/stat/StatMigrations.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "public/app/plugins/panel/state-timeline/migrations.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/panel/table/TablePanel.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -6505,30 +5836,18 @@ exports[`better eslint`] = { ], "public/app/plugins/panel/timeseries/migrations.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Do not use any type assertions.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"] + [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Do not use any type assertions.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"], + [0, 0, 0, "Do not use any type assertions.", "5"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], + [0, 0, 0, "Do not use any type assertions.", "7"], + [0, 0, 0, "Unexpected any. Specify a different type.", "8"], + [0, 0, 0, "Unexpected any. Specify a different type.", "9"] ], - "public/app/plugins/panel/timeseries/plugins/ExemplarMarker.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"] + "public/app/plugins/panel/timeseries/plugins/AnnotationsPlugin2.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/plugins/panel/timeseries/plugins/ThresholdDragHandle.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -6540,12 +5859,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "6"] ], "public/app/plugins/panel/timeseries/plugins/annotations/AnnotationEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/plugins/panel/timeseries/plugins/annotations/AnnotationEditorForm.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -6556,11 +5870,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "5"], [0, 0, 0, "Styles should be written using objects.", "6"] ], - "public/app/plugins/panel/timeseries/plugins/annotations/AnnotationMarker.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], "public/app/plugins/panel/timeseries/plugins/annotations/AnnotationTooltip.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -6572,6 +5881,15 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "7"], [0, 0, 0, "Styles should be written using objects.", "8"] ], + "public/app/plugins/panel/timeseries/plugins/annotations2/AnnotationEditor2.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "public/app/plugins/panel/timeseries/plugins/annotations2/AnnotationMarker2.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "public/app/plugins/panel/timeseries/plugins/annotations2/AnnotationTooltip2.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], "public/app/plugins/panel/timeseries/plugins/styles.ts:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] @@ -6596,24 +5914,11 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/plugins/panel/xychart/TooltipView.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/panel/xychart/XYChartPanel2.tsx:5381": [ + "public/app/plugins/panel/xychart/XYChartPanel.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/plugins/panel/xychart/dims.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/plugins/panel/xychart/scatter.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -6731,8 +6036,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"] + [0, 0, 0, "Unexpected any. Specify a different type.", "10"] ] }` }; @@ -6810,6 +6114,58 @@ exports[`no gf-form usage`] = { "packages/grafana-e2e/src/flows/addDataSource.ts:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], + "packages/grafana-prometheus/src/components/PromExploreExtraField.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-prometheus/src/components/PromQueryField.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-prometheus/src/configuration/AlertingSettingsOverhaul.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-prometheus/src/configuration/ExemplarSetting.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-prometheus/src/configuration/PromSettings.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], "packages/grafana-ui/src/components/DataSourceSettings/AlertingSettings.tsx:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], @@ -6911,9 +6267,6 @@ exports[`no gf-form usage`] = { [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], - "plugins-bundled/internal/input-datasource/src/InputConfigEditor.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], "public/app/angular/components/code_editor/code_editor.ts:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], @@ -6996,9 +6349,6 @@ exports[`no gf-form usage`] = { "public/app/core/components/AccessControl/PermissionList.tsx:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], - "public/app/core/components/AccessControl/Permissions.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], "public/app/core/components/PageHeader/PageHeader.tsx:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] @@ -7008,35 +6358,6 @@ exports[`no gf-form usage`] = { [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], - "public/app/features/admin/ldap/LdapConnectionStatus.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], - "public/app/features/admin/ldap/LdapSyncInfo.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], - "public/app/features/admin/ldap/LdapUserGroups.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], - "public/app/features/admin/ldap/LdapUserInfo.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], - "public/app/features/admin/ldap/LdapUserMappingInfo.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], - "public/app/features/admin/ldap/LdapUserPermissions.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], - "public/app/features/admin/ldap/LdapUserTeams.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], "public/app/features/admin/partials/edit_org.html:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], @@ -7053,85 +6374,6 @@ exports[`no gf-form usage`] = { [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], - "public/app/features/alerting/AlertRuleList.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], - "public/app/features/alerting/partials/alert_tab.html:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], "public/app/features/annotations/partials/event_editor.html:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], @@ -7148,15 +6390,9 @@ exports[`no gf-form usage`] = { [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], - "public/app/features/dashboard/components/SubMenu/DashboardLinks.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], "public/app/features/dashboard/components/SubMenu/SubMenuItems.tsx:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], - "public/app/features/dashboard/components/VersionHistory/VersionHistoryTable.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], "public/app/features/datasources/components/BasicSettings.tsx:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], @@ -7180,9 +6416,6 @@ exports[`no gf-form usage`] = { "public/app/features/plugins/admin/components/AppConfigWrapper.tsx:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], - "public/app/features/plugins/admin/components/PluginDashboards.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], "public/app/features/query/components/QueryEditorRow.tsx:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], @@ -7285,9 +6518,6 @@ exports[`no gf-form usage`] = { [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], - "public/app/plugins/datasource/cloud-monitoring/components/AnnotationsHelp.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], "public/app/plugins/datasource/cloudwatch/components/ConfigEditor/ConfigEditor.tsx:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], @@ -7295,7 +6525,6 @@ exports[`no gf-form usage`] = { [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], "public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryEditor.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], "public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryField.tsx:5381": [ @@ -7303,12 +6532,6 @@ exports[`no gf-form usage`] = { [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], - "public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryFieldOld.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], "public/app/plugins/datasource/cloudwatch/components/shared/LogGroups/LegacyLogGroupNamesSelection.tsx:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] @@ -7377,14 +6600,6 @@ exports[`no gf-form usage`] = { [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], - "public/app/plugins/datasource/loki/components/AnnotationsQueryEditor.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], - "public/app/plugins/datasource/loki/components/LokiOptionFields.tsx:5381": [ - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] - ], "public/app/plugins/datasource/loki/components/LokiQueryField.tsx:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], @@ -7481,6 +6696,24 @@ exports[`no gf-form usage`] = { "public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryCodeEditor.tsx:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], + "public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilter.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterKey.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterRenderer.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterValue.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/ConditionSegment.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], "public/app/plugins/datasource/zipkin/QueryField.tsx:5381": [ [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] diff --git a/.betterer.results.json b/.betterer.results.json new file mode 100644 index 0000000000000..d5db475d6b14b --- /dev/null +++ b/.betterer.results.json @@ -0,0 +1,8166 @@ +{ + "better eslint": { + "/e2e/utils/support/types.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/dataframe/ArrayDataFrame.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/dataframe/CircularDataFrame.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/dataframe/DataFrameJSON.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/dataframe/DataFrameView.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/dataframe/MutableDataFrame.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 13 + }, + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/packages/grafana-data/src/dataframe/StreamingDataFrame.ts": [ + { + "message": "Do not use any type assertions.", + "count": 6 + } + ], + "/packages/grafana-data/src/dataframe/dimensions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/dataframe/processDataFrame.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/dataframe/processDataFrame.ts": [ + { + "message": "Do not use any type assertions.", + "count": 18 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/packages/grafana-data/src/datetime/datemath.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/datetime/durationutil.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/datetime/formatter.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/datetime/moment_wrapper.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 8 + } + ], + "/packages/grafana-data/src/datetime/parser.ts": [ + { + "message": "Do not use any type assertions.", + "count": 9 + } + ], + "/packages/grafana-data/src/datetime/rangeutil.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/events/EventBus.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/events/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/packages/grafana-data/src/field/displayProcessor.ts": [ + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/packages/grafana-data/src/field/overrides/processors.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + }, + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/packages/grafana-data/src/field/standardFieldConfigEditorRegistry.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/packages/grafana-data/src/geo/layer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/panel/PanelPlugin.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/panel/registryFactories.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/themes/colorManipulator.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-data/src/themes/createColors.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/transformations/matchers/valueMatchers/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/transformations/standardTransformersRegistry.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/transformations/transformDataFrame.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/transformations/transformers/joinDataFrames.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/transformations/transformers/nulls/nullInsertThreshold.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-data/src/transformations/transformers/reduce.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/transformations/transformers/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/types/OptionsUIRegistryBuilder.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/packages/grafana-data/src/types/ScopedVars.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/types/annotations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + } + ], + "/packages/grafana-data/src/types/app.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/types/config.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/types/dashboard.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-data/src/types/data.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/packages/grafana-data/src/types/dataFrame.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/packages/grafana-data/src/types/dataLink.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/packages/grafana-data/src/types/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 25 + } + ], + "/packages/grafana-data/src/types/explore.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/types/fieldOverrides.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 9 + } + ], + "/packages/grafana-data/src/types/flot.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/types/graph.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-data/src/types/legacyEvents.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/types/live.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/types/options.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/types/panel.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 14 + } + ], + "/packages/grafana-data/src/types/plugin.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/types/select.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/types/templateVars.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/types/trace.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/types/transformations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/packages/grafana-data/src/types/variables.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/types/vector.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-data/src/utils/OptionsUIBuilders.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 27 + } + ], + "/packages/grafana-data/src/utils/Registry.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/utils/arrayUtils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/utils/csv.ts": [ + { + "message": "Do not use any type assertions.", + "count": 3 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/utils/dataLinks.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/utils/datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/utils/flotPairs.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/utils/location.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/utils/url.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/utils/valueMappings.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/vector/AppendedVectors.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/vector/ArrayVector.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-data/src/vector/CircularVector.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/vector/ConstantVector.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/vector/FormattedVector.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/vector/FunctionalVector.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 10 + } + ], + "/packages/grafana-data/src/vector/SortedVector.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/test/__mocks__/pluginMocks.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-flamegraph/src/FlameGraph/FlameGraph.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/packages/grafana-flamegraph/src/FlameGraph/FlameGraphMetadata.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/packages/grafana-flamegraph/src/FlameGraph/FlameGraphTooltip.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/packages/grafana-flamegraph/src/FlameGraphHeader.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 13 + } + ], + "/packages/grafana-flamegraph/src/TopTable/FlameGraphTopTableContainer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/packages/grafana-o11y-ds-frontend/src/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/components/PromExemplarField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/packages/grafana-prometheus/src/components/PromExploreExtraField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/packages/grafana-prometheus/src/components/PromQueryField.test.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/components/PromQueryField.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/components/PrometheusMetricsBrowser.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 12 + } + ], + "/packages/grafana-prometheus/src/components/monaco-query-field/MonacoQueryField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/packages/grafana-prometheus/src/configuration/ConfigEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 16 + } + ], + "/packages/grafana-prometheus/src/configuration/ExemplarsSettings.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 13 + } + ], + "/packages/grafana-prometheus/src/gcopypaste/app/features/live/data/amendTimeSeries.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/packages/grafana-prometheus/src/gcopypaste/public/test/matchers/index.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/gcopypaste/public/test/matchers/toEmitValuesWith.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-prometheus/src/gcopypaste/public/test/matchers/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/gcopypaste/test/helpers/selectOptionInTest.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/language_provider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/packages/grafana-prometheus/src/language_utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/metric_find_query.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/packages/grafana-prometheus/src/query_hints.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/QueryPattern.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/packages/grafana-prometheus/src/querybuilder/QueryPatternsModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/packages/grafana-prometheus/src/querybuilder/binaryScalarOperations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/LabelFilterItem.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/LabelFilters.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/LabelParamEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/MetricSelect.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + }, + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/PromQueryBuilder.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/metrics-modal/AdditionalSettings.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/metrics-modal/ResultsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 13 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/metrics-modal/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 19 + } + ], + "/packages/grafana-prometheus/src/querybuilder/operationUtils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/shared/OperationEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/shared/OperationParamEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-prometheus/src/querybuilder/shared/QueryBuilderHints.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/packages/grafana-prometheus/src/querybuilder/shared/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-prometheus/src/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-runtime/src/analytics/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-runtime/src/config.ts": [ + { + "message": "Do not use any type assertions.", + "count": 3 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-runtime/src/services/AngularLoader.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-runtime/src/services/EchoSrv.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/packages/grafana-runtime/src/services/LocationService.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-runtime/src/services/backendSrv.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 13 + } + ], + "/packages/grafana-runtime/src/utils/DataSourceWithBackend.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-runtime/src/utils/queryResponse.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-schema/src/veneer/common.types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-schema/src/veneer/dashboard.types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 5 + } + ], + "/packages/grafana-sql/src/components/query-editor-raw/QueryToolbox.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/packages/grafana-sql/src/components/query-editor-raw/QueryValidator.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/packages/grafana-sql/src/components/query-editor-raw/RawEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/packages/grafana-sql/src/components/visual-query-builder/AwesomeQueryBuilder.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-sql/src/components/visual-query-builder/SQLWhereRow.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/ColorPicker/ColorPicker.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/CustomHeadersSettings.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 8 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Input/Input.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Select/Select.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Select/SelectOption.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/InfoBox/InfoBox.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/JSONFormatter/json_explorer/json_explorer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/MatchersUI/FieldValueMatcher.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/MatchersUI/fieldMatchersUI.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Modal/ModalsContext.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/packages/grafana-ui/src/components/PanelChrome/PanelContext.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/PanelChrome/index.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Segment/SegmentSelect.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Select/SelectBase.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 8 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/packages/grafana-ui/src/components/Select/SelectOptionGroup.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/Select/ValueContainer.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Select/resetSelectStyles.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/packages/grafana-ui/src/components/Select/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + } + ], + "/packages/grafana-ui/src/components/SingleStatShared/SingleStatBaseOptions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 15 + }, + { + "message": "Do not use any type assertions.", + "count": 5 + } + ], + "/packages/grafana-ui/src/components/StatsPicker/StatsPicker.story.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/Table/Filter.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/FilterPopup.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/FooterRow.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/HeaderRow.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/Table.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/TableCell.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 3 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/TableCellInspectModal.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/reducer.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/Table/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + } + ], + "/packages/grafana-ui/src/components/Tags/Tag.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/ValuePicker/ValuePicker.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/VizLegend/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/VizRepeater/VizRepeater.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/packages/grafana-ui/src/components/VizTooltip/VizTooltip.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/uPlot/Plot.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/uPlot/PlotLegend.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/uPlot/config/UPlotAxisBuilder.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/uPlot/config/UPlotConfigBuilder.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/uPlot/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/uPlot/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-ui/src/graveyard/Graph/GraphContextMenu.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/graveyard/Graph/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/graveyard/GraphNG/GraphNG.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + }, + { + "message": "Do not use any type assertions.", + "count": 6 + } + ], + "/packages/grafana-ui/src/graveyard/GraphNG/hooks.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/graveyard/GraphNG/nullInsertThreshold.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-ui/src/graveyard/GraphNG/nullToUndefThreshold.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/graveyard/TimeSeries/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/options/builder/axis.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/options/builder/hideSeries.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/slate-plugins/braces.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/slate-plugins/slate-prism/index.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-ui/src/slate-plugins/slate-prism/options.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/slate-plugins/suggestions.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/themes/ThemeContext.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/packages/grafana-ui/src/themes/stylesFactory.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/types/forms.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/types/jquery.d.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 9 + } + ], + "/packages/grafana-ui/src/types/mdx.d.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/types/react-table-config.d.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/utils/debug.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/utils/dom.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-ui/src/utils/logger.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-ui/src/utils/storybook/withTheme.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/utils/useAsyncDependency.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/plugins-bundled/internal/input-datasource/src/InputDatasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/TableModel.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/public/app/core/components/AppChrome/TopBar/TopSearchBarCommandPaletteTrigger.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/core/components/DynamicImports/SafeDynamicImport.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/components/GraphNG/GraphNG.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + }, + { + "message": "Do not use any type assertions.", + "count": 6 + } + ], + "/public/app/core/components/GraphNG/hooks.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/core/components/NestedFolderPicker/Trigger.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/core/components/OptionsUI/registry.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 11 + } + ], + "/public/app/core/components/PageHeader/PageHeader.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/core/components/PanelTypeFilter/PanelTypeFilter.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/core/components/QueryOperationRow/OperationRowHelp.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/core/components/QueryOperationRow/QueryOperationRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/core/components/QueryOperationRow/QueryOperationRowHeader.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/core/components/RolePicker/RolePickerInput.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/core/components/RolePicker/ValueContainer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/core/components/TagFilter/TagFilter.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + }, + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/core/components/TagFilter/TagOption.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/core/components/TimeSeries/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/core/components/Upgrade/ProBadge.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/core/components/Upgrade/UpgradeBox.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 18 + } + ], + "/public/app/core/components/connectWithCleanUp.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/core/navigation/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/reducers/root.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/services/ResponseQueue.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/services/backend_srv.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 9 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/core/services/context_srv.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/services/echo/backends/analytics/ApplicationInsightsBackend.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/services/echo/backends/analytics/RudderstackBackend.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/core/specs/backend_srv.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/time_series2.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 19 + } + ], + "/public/app/core/utils/ConfigProvider.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/core/utils/connectWithReduxStore.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 8 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/core/utils/deferred.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/utils/fetch.ts": [ + { + "message": "Do not use any type assertions.", + "count": 5 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/utils/flatten.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/utils/object.ts": [ + { + "message": "Do not use any type assertions.", + "count": 3 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/core/utils/richHistory.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/utils/ticks.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/admin/LicenseChrome.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/admin/OrgRolePicker.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/admin/UpgradePage.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/admin/UserListPublicDashboardPage/DashboardsListModalButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/admin/UserListPublicDashboardPage/DeleteUserModalButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/admin/UserOrgs.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 17 + } + ], + "/public/app/features/admin/UserPermissions.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/admin/UserProfile.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/AlertTab.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/alerting/AlertTabCtrl.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 33 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/EditNotificationChannelPage.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/alerting/StateHistory.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/TestRuleResult.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/alerting/components/NotificationChannelForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/components/NotificationChannelOptions.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/components/OptionElement.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/alerting/state/ThresholdMapper.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/alerting/state/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/alerting/state/alertDef.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/state/query_part.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 11 + } + ], + "/public/app/features/alerting/state/reducers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/AlertGroups.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/AlertWarning.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/AlertsFolderView.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/GrafanaRuleQueryViewer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 19 + } + ], + "/public/app/features/alerting/unified/NotificationPolicies.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/PanelAlertTabContent.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/RedirectToRuleViewer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/RuleList.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/AlertLabel.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/AlertLabels.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/AlertManagerPicker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/AlertStateDot.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/AnnotationDetailsField.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/Authorize.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/DetailsField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/DynamicTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/alerting/unified/components/DynamicTableWithGuidelines.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/alerting/unified/components/EmptyArea.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/EmptyAreaWithCTA.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/Expression.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/GrafanaAlertmanagerDeliveryWarning.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/HoverCard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/Label.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/MetaText.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/Spacer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/StateColoredText.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/StateTag.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/features/alerting/unified/components/Tokenize.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/Well.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/admin/AlertmanagerConfig.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/admin/AlertmanagerConfigSelector.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/admin/ExternalAlertmanagerDataSources.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/admin/ExternalAlertmanagers.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/alert-groups/AlertDetails.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/alert-groups/AlertGroupAlertsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/alert-groups/AlertGroupFilter.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/alert-groups/AlertGroupHeader.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/alert-groups/GroupBy.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/alert-groups/MatcherFilter.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/contact-points/ContactPoints.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/export/FileExportPreview.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/expressions/Expression.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 25 + } + ], + "/public/app/features/alerting/unified/components/expressions/ExpressionStatusIndicator.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/mute-timings/MuteTimingForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeInterval.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeRange.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/mute-timings/MuteTimingsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/notification-policies/EditNotificationPolicyForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/notification-policies/Matchers.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/notification-policies/Policy.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/notification-policies/PromDurationDocs.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/notification-policies/formStyles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/alerting/unified/components/receivers/AlertInstanceModalSelector.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 18 + } + ], + "/public/app/features/alerting/unified/components/receivers/PayloadEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/features/alerting/unified/components/receivers/ReceiversSection.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/receivers/TemplateDataDocs.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/receivers/TemplateForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 13 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/ChannelOptions.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/ChannelSubForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/CollapsibleSection.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/GenerateAlertDataModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/ReceiverForm.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/TestContactPointModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/fields/KeyValueMapInput.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/fields/OptionField.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/fields/StringArrayInput.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/fields/SubformArrayField.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/fields/SubformField.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/fields/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/AnnotationKeyInput.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/AnnotationsStep.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 11 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/CloudAlertPreview.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/CloudEvaluationBehavior.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/CustomAnnotationHeaderField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/DashboardAnnotationField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/DashboardPicker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 15 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/ExpressionEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/ExpressionsEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/FolderAndGroup.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/GrafanaEvaluationBehavior.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 11 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/GroupAndNamespaceFields.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/NeedHelpInfo.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/PreviewRule.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/PreviewRuleResult.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/QueryEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/QueryOptions.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/QueryWrapper.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/RecordingRuleEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/RuleEditorSection.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/RuleFolderPicker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/RuleInspector.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/VizWrapper.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/notificaton-preview/NotificationPolicyMatchers.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/notificaton-preview/NotificationPreview.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/notificaton-preview/NotificationPreviewByAlertManager.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/notificaton-preview/NotificationRoute.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/notificaton-preview/NotificationRouteDetailsModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 11 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/CloudDataSourceSelector.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/QueryAndExpressionsStep.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/rule-types/RuleType.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/rule-types/RuleTypePicker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rule-viewer/RuleViewer.v1.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 13 + } + ], + "/public/app/features/alerting/unified/components/rule-viewer/RuleViewerLayout.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-viewer/RuleViewerVisualization.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/rules/ActionButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/AlertInstanceStateFilter.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/CloudRules.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/rules/EditRuleGroupModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/rules/GrafanaRules.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/rules/NoRulesCTA.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/ReorderRuleGroupModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleActionsButtons.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleConfigStatus.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleDetails.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleDetailsActionButtons.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleDetailsAnnotations.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleDetailsDataSources.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleDetailsExpression.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleDetailsMatchingInstances.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleHealth.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleListErrors.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleListStateSection.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleState.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/RulesGroup.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 12 + } + ], + "/public/app/features/alerting/unified/components/rules/RulesTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/rules/state-history/LogRecordViewer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/rules/state-history/LokiStateHistory.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/alerting/unified/components/rules/state-history/StateHistory.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/silences/Matchers.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/silences/MatchersField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/silences/SilenceDetails.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/silences/SilencePeriod.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/silences/SilencedAlertsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/silences/SilencedInstancesPreview.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/silences/SilencesEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/silences/SilencesFilter.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/silences/SilencesTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/home/GettingStarted.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 15 + } + ], + "/public/app/features/alerting/unified/hooks/useAlertmanagerConfig.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/hooks/useControlledFieldArray.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/hooks/useStateHistoryModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/mocks.ts": [ + { + "message": "Do not use any type assertions.", + "count": 5 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/state/actions.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/styles/notifications.ts": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/styles/pagination.ts": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/styles/table.ts": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/types/receiver-form.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/utils/misc.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/utils/misc.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/utils/receiver-form.ts": [ + { + "message": "Do not use any type assertions.", + "count": 3 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/utils/redux.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 7 + } + ], + "/public/app/features/alerting/unified/utils/rulerClient.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/utils/rules.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/public/app/features/annotations/components/StandardAnnotationQueryEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/annotations/events_processing.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/annotations/standardAnnotationSupport.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/api-keys/ApiKeysTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/api-keys/MigrateToServiceAccountsCard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/auth-config/utils/data.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/canvas/element.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/public/app/features/canvas/elements/ellipse.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/canvas/runtime/element.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/features/canvas/runtime/frame.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/canvas/runtime/root.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/canvas/runtime/scene.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/connections/components/ConnectionsRedirectNotice/ConnectionsRedirectNotice.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/connections/tabs/ConnectData/CategoryHeader/CategoryHeader.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/connections/tabs/ConnectData/NoAccessModal/NoAccessModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/features/connections/tabs/ConnectData/NoResults/NoResults.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/correlations/CorrelationsPage.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/correlations/Forms/AddCorrelationForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/correlations/Forms/ConfigureCorrelationBasicInfoForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/correlations/Forms/ConfigureCorrelationSourceForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dashboard-scene/inspect/HelpWizard/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/inspect/InspectJsonTab.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/pages/DashboardScenePage.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataPane.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 2 + } + ], + "/public/app/features/dashboard-scene/saving/getSaveDashboardChange.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/dashboard-scene/saving/shared.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/scene/PanelMenuBehavior.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 10 + } + ], + "/public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.ts": [ + { + "message": "Do not use any type assertions.", + "count": 7 + } + ], + "/public/app/features/dashboard-scene/settings/variables/components/VariableSelectField.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/settings/variables/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/utils/DashboardModelCompatibilityWrapper.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/utils/PanelModelCompatibilityWrapper.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/utils/test-utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/AddWidgetModal/AddWidgetModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/AnnotationSettings/AnnotationSettingsEdit.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 4 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/AnnotationSettings/AnnotationSettingsList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/DashExportModal/DashboardExporter.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + } + ], + "/public/app/features/dashboard/components/DashExportModal/DashboardExporter.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + }, + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/DashNav/DashNavButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/DashboardLoading/DashboardFailed.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/DashboardLoading/DashboardLoading.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/DashboardPrompt/DashboardPrompt.test.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/DashboardPrompt/DashboardPrompt.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 7 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/DashboardRow/DashboardRow.test.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/DashboardSettings/ListNewButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/DeleteDashboard/DeleteDashboardModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/HelpWizard/HelpWizard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/Inspector/PanelInspector.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/PanelEditor/DynamicConfigValueEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/PanelEditor/OptionsPane.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/dashboard/components/PanelEditor/OptionsPaneCategory.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 2 + } + ], + "/public/app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/PanelEditor/OptionsPaneOptions.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 10 + } + ], + "/public/app/features/dashboard/components/PanelEditor/OverrideCategoryTitle.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/dashboard/components/PanelEditor/PanelEditor.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 10 + } + ], + "/public/app/features/dashboard/components/PanelEditor/PanelEditorTabs.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/PanelEditor/VisualizationButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/PanelEditor/VisualizationSelectPane.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 10 + } + ], + "/public/app/features/dashboard/components/PanelEditor/getFieldOverrideElements.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/PanelEditor/getVisualizationOptions.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/PanelEditor/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/PublicDashboardNotAvailable/PublicDashboardNotAvailable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/dashboard/components/RowOptions/RowOptionsModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/SaveDashboardButton.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 2 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/SaveDashboardErrorProxy.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/UnsavedChangesModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/forms/SaveDashboardAsForm.test.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/forms/SaveDashboardForm.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 3 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/forms/SaveProvisionedDashboardForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/useDashboardSave.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/ShareModal/ShareExport.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/ConfigPublicDashboard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/EmailSharingConfiguration.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/SettingsSummary.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/CreatePublicDashboard/AcknowledgeCheckboxes.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/CreatePublicDashboard/CreatePublicDashboard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/UnsupportedDataSourcesAlert.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SubMenu/AnnotationPicker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/SubMenu/DashboardLinksDashboard.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SubMenu/SubMenu.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/TransformationsEditor/TransformationEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 10 + } + ], + "/public/app/features/dashboard/components/TransformationsEditor/TransformationsEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/VersionHistory/useDashboardRestore.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/containers/DashboardPage.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/dashboard/containers/DashboardPageProxy.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard/dashgrid/PanelStateWrapper.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/dashgrid/SeriesVisibilityConfigFactory.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard/services/DashboardLoaderSrv.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/dashboard/state/DashboardMigrator.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 12 + } + ], + "/public/app/features/dashboard/state/DashboardMigrator.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 27 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/features/dashboard/state/DashboardModel.repeat.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/features/dashboard/state/DashboardModel.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/state/DashboardModel.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 23 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard/state/PanelModel.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/state/PanelModel.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 20 + }, + { + "message": "Do not use any type assertions.", + "count": 5 + } + ], + "/public/app/features/dashboard/state/TimeModel.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/dashboard/state/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/state/initDashboard.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/utils/getPanelMenu.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/utils/getPanelMenu.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/utils/panelMerge.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/datasources/components/BasicSettings.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/datasources/components/DataSourceTestingStatus.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/datasources/components/DataSourceTypeCard.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/datasources/components/DataSourceTypeCardList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/datasources/components/EditDataSource.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/datasources/components/picker/DataSourceCard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/features/datasources/components/picker/DataSourceList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/datasources/components/picker/DataSourceLogo.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/datasources/components/picker/DataSourceModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 10 + } + ], + "/public/app/features/datasources/state/actions.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/datasources/state/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/datasources/state/navModel.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/datasources/state/reducers.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/datasources/state/selectors.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/dimensions/editors/ColorDimensionEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dimensions/editors/FileUploader.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/dimensions/editors/FolderPickerTab.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dimensions/editors/ResourceCards.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/dimensions/editors/ResourceDimensionEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dimensions/editors/ResourcePicker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dimensions/editors/ResourcePickerPopover.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/dimensions/editors/ScalarDimensionEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dimensions/editors/ScaleDimensionEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dimensions/editors/TextDimensionEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/dimensions/editors/ThresholdsEditor/ThresholdsEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/dimensions/editors/URLPickerTab.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/dimensions/editors/ValueMappingsEditor/ValueMappingsEditorModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dimensions/scale.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dimensions/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dimensions/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/explore/ContentOutline/ContentOutline.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/explore/Logs/LiveLogs.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/explore/Logs/Logs.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/explore/Logs/LogsMetaRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/explore/Logs/LogsNavigation.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/Logs/LogsNavigationPages.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/explore/Logs/LogsSamplePanel.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/Logs/LogsVolumePanel.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/Logs/LogsVolumePanelList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/Logs/utils/LogsCrossFadeTransition.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/NodeGraph/NodeGraphContainer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/PrometheusListView/ItemLabels.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/PrometheusListView/ItemValues.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/PrometheusListView/RawListContainer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/explore/PrometheusListView/RawListItem.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/PrometheusListView/RawListItemAttributes.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/RichHistory/RichHistoryCard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 14 + } + ], + "/public/app/features/explore/RichHistory/RichHistoryQueriesTab.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 14 + } + ], + "/public/app/features/explore/RichHistory/RichHistorySettingsTab.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/explore/RichHistory/RichHistoryStarredTab.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/explore/TraceView/TraceView.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/Actions/ActionButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/TracePageSearchBar.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SpanFilters/SpanFilters.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SpanGraph/CanvasSpanGraph.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SpanGraph/GraphTicks.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SpanGraph/Scrubber.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SpanGraph/TickLabels.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SpanGraph/ViewingLayer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/TracePageHeader.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanBarRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 22 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/AccordianKeyValues.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/AccordianLogs.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/AccordianReferences.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 14 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/AccordianText.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/KeyValuesTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/SpanFlameGraph.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/TextList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/index.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 11 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetailRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanLinks.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanTreeOffset.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/Ticks.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/TimelineHeaderRow/TimelineCollapser.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/TimelineHeaderRow/TimelineColumnResizer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/TimelineHeaderRow/TimelineHeaderRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/TimelineHeaderRow/TimelineViewingLayer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/VirtualizedTraceView.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/index.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/common/BreakableText.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/common/CopyIcon.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/common/LabeledList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/TraceView/components/common/NewWindowIcon.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/common/TraceName.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/demo/trace-generators.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/model/link-patterns.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 10 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/explore/TraceView/components/model/transform-trace-data.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/settings/SpanBarSettings.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/explore/TraceView/components/types/trace.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/createSpanLink.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/explore/spec/helper/setup.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/explore/state/time.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/explore/state/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 4 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/expressions/ExpressionDatasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/expressions/components/Condition.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/expressions/components/Math.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/expressions/guards.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/geo/editor/GazetteerPathEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/geo/editor/locationModeEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/geo/gazetteer/gazetteer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/geo/utils/frameVectorSource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/inspector/DetailText.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/inspector/InspectDataOptions.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/inspector/InspectDataTab.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/inspector/InspectJSONTab.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/inspector/InspectStatsTab.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/inspector/InspectStatsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/inspector/InspectStatsTraceIdsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/inspector/QueryInspector.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + }, + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 2 + } + ], + "/public/app/features/inspector/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 11 + } + ], + "/public/app/features/library-panels/components/LibraryPanelInfo/LibraryPanelInfo.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/library-panels/components/LibraryPanelsSearch/LibraryPanelsSearch.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/features/library-panels/components/LibraryPanelsView/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/library-panels/components/OpenLibraryPanelModal/OpenLibraryPanelModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/library-panels/components/PanelLibraryOptionsGroup/PanelLibraryOptionsGroup.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/library-panels/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/library-panels/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/live/LiveConnectionWarning.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/live/centrifuge/LiveDataStream.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/live/centrifuge/channel.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/live/centrifuge/serviceWorkerProxy.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/live/data/amendTimeSeries.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/features/logs/components/LoadingIndicator.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/logs/components/LogDetailsRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/logs/components/LogLabelStats.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/logs/components/LogLabelStatsRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/logs/components/LogLabels.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/logs/components/LogRowMessageDisplayedFields.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/logs/components/getLogRowStyles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 36 + } + ], + "/public/app/features/logs/components/log-context/LogRowContextModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 13 + } + ], + "/public/app/features/logs/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/manage-dashboards/DashboardImportPage.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/manage-dashboards/components/ImportDashboardLibraryPanelsList.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/manage-dashboards/components/PublicDashboardListTable/DeletePublicDashboardModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/manage-dashboards/components/PublicDashboardListTable/PublicDashboardListTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/manage-dashboards/state/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 14 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/manage-dashboards/state/reducers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/org/state/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/org/state/reducers.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/panel/components/VizTypePicker/PanelTypeCard.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/panel/components/VizTypePicker/VisualizationSuggestionCard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/panel/panellinks/linkSuppliers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/panel/panellinks/link_srv.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/features/playlist/EmptyQueryListBanner.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/playlist/PlaylistForm.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 2 + } + ], + "/public/app/features/playlist/PlaylistTableRows.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/plugins/admin/components/Badges/PluginUpdateAvailableBadge.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/Badges/sharedStyles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/GetStartedWithPlugin/GetStartedWithDataSource.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/HorizontalGroup.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/InstallControls/InstallControlsWarning.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/PluginActions.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/PluginDetailsBody.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/PluginDetailsHeaderDependencies.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/plugins/admin/components/PluginDetailsHeaderSignature.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/plugins/admin/components/PluginDetailsPage.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/plugins/admin/components/PluginSignatureDetailsBadge.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/plugins/admin/components/PluginSubtitle.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/PluginUsage.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/plugins/admin/components/VersionList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/plugins/admin/hooks/useHistory.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/hooks/usePluginInfo.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/pages/Browse.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/plugins/admin/state/actions.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/plugins/datasource_srv.ts": [ + { + "message": "Do not use any type assertions.", + "count": 5 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 8 + } + ], + "/public/app/features/plugins/sandbox/distortion_map.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/plugins/sandbox/sandbox_plugin_loader.ts": [ + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/public/app/features/plugins/tests/datasource_srv.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/plugins/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/features/profile/ChangePasswordForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/query/components/QueryEditorRow.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 4 + }, + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/query/components/QueryEditorRowHeader.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/query/components/QueryGroup.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/query/components/QueryGroupOptions.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/query/state/DashboardQueryRunner/AnnotationsQueryRunner.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/query/state/DashboardQueryRunner/DashboardQueryRunner.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/query/state/DashboardQueryRunner/PublicAnnotationsDataSource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/query/state/DashboardQueryRunner/testHelpers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/query/state/DashboardQueryRunner/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/features/query/state/PanelQueryRunner.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/query/state/runRequest.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/query/state/updateQueries.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 11 + } + ], + "/public/app/features/search/page/components/ActionRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/search/page/components/SearchResultsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 13 + } + ], + "/public/app/features/search/page/components/columns.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/search/service/bluge.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/search/service/sql.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/search/service/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/search/state/SearchStateManager.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/search/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/search/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/serviceaccounts/components/CreateTokenModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/serviceaccounts/components/ServiceAccountProfile.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/serviceaccounts/components/ServiceAccountProfileRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/serviceaccounts/components/ServiceAccountTokensTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/serviceaccounts/state/reducers.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/storage/Breadcrumb.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/storage/FileView.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/storage/FolderView.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/storage/RootView.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/storage/StoragePage.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/storage/UploadButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/storage/storage.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/teams/TeamGroupSync.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/teams/state/reducers.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/teams/state/selectors.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/templating/fieldAccessorCache.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/templating/formatVariableValue.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/templating/templateProxies.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/templating/template_srv.mock.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/templating/template_srv.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 10 + }, + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/BasicMatcherEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/NoopMatcherEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/RangeMatcherEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/valueMatchersUI.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/calculateHeatmap/editor/helper.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/calculateHeatmap/heatmap.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/transformers/configFromQuery/ConfigFromQueryTransformerEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/transformers/editors/CalculateFieldTransformerEditor/CumulativeOptionsEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/editors/CalculateFieldTransformerEditor/ReduceRowOptionsEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/editors/CalculateFieldTransformerEditor/WindowOptionsEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/editors/ConvertFieldTypeTransformerEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/editors/GroupByTransformerEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/transformers/editors/OrganizeFieldsTransformerEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/transformers/editors/ReduceTransformerEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/editors/SortByTransformerEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/extractFields/ExtractFieldsTransformerEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/transformers/extractFields/components/JSONPathEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/transformers/extractFields/extractFields.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/extractFields/fieldExtractors.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/fieldToConfigMapping/FieldToConfigMappingEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/transformers/fieldToConfigMapping/fieldToConfigMapping.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/features/transformers/lookupGazetteer/FieldLookupTransformerEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/lookupGazetteer/fieldLookup.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/prepareTimeSeries/PrepareTimeSeriesEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/transformers/prepareTimeSeries/prepareTimeSeries.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/prepareTimeSeries/prepareTimeSeries.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/transformers/spatial/SpatialTransformerEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/transformers/spatial/optionsHelper.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/public/app/features/transformers/standardTransformers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/users/TokenRevokedModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/variables/adapters.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/variables/adhoc/picker/AdHocFilterRenderer.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/constant/reducer.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/variables/custom/reducer.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/variables/datasource/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/editor/VariableEditorContainer.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/variables/editor/VariableEditorEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/editor/VariableEditorList.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/variables/editor/VariableEditorListRow.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 4 + }, + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/variables/editor/getVariableQueryEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/editor/reducer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/editor/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/guard.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/inspect/NetworkGraph.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/public/app/features/variables/inspect/VariablesUnknownTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/variables/inspect/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 8 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/variables/pickers/OptionsPicker/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/pickers/shared/VariableLink.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/variables/pickers/shared/VariableOptions.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/variables/query/QueryVariableEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/query/VariableQueryRunner.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/variables/query/actions.test.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/query/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/public/app/features/variables/query/operators.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/query/queryRunners.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/query/queryRunners.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/query/reducer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/query/variableQueryObserver.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/shared/formatVariable.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/variables/shared/testing/optionsVariableBuilder.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/variables/shared/testing/variableBuilder.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/variables/state/actions.ts": [ + { + "message": "Do not use any type assertions.", + "count": 7 + } + ], + "/public/app/features/variables/state/keyedVariablesReducer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/state/sharedReducer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/variables/state/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/state/upgradeLegacyQueries.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/system/adapter.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/features/variables/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/public/app/features/variables/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/visualization/data-hover/DataHoverRows.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/alertmanager/DataSource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/alertmanager/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/plugins/datasource/azuremonitor/azure_monitor/azure_monitor_datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/QueryField.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/azuremonitor/utils/messageFromError.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/CloudMonitoringMetricFindQuery.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/annotationSupport.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/components/CloudMonitoringCheatSheet.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/components/VariableQueryEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/components/VisualMetricQueryEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/functions.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/types/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/CheatSheet/LogsCheatSheet.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/ConfigEditor/XrayLinkConfig.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryFieldOld.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/QueryEditor/MetricsQueryEditor/DynamicLabelsField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/shared/LogGroups/LegacyLogGroupNamesSelection.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/guards.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/language/cloudwatch-logs/CloudWatchLogsLanguageProvider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/plugins/datasource/cloudwatch/memoizedDebounce.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloudwatch/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/public/app/plugins/datasource/cloudwatch/utils/datalinks.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloudwatch/utils/logsRetry.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/dashboard/runSharedRequest.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/elasticsearch/ElasticResponse.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 32 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/elasticsearch/LanguageProvider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/plugins/datasource/elasticsearch/LegacyQueryRunner.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/QueryBuilder.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 8 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/AddRemove.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/MetricPicker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/BucketAggregationEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/SettingsEditor/DateHistogramSettingsEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/SettingsEditor/FiltersSettingsEditor/index.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/SettingsEditor/TermsSettingsEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/aggregations.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/state/reducer.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/MetricEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/SettingsEditor/BucketScriptSettingsEditor/index.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/SettingsEditor/SettingField.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/SettingsEditor/TopMetricsSettingsEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/aggregations.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/state/reducer.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/QueryEditorRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/SettingsEditorContainer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/index.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/configuration/DataLink.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/plugins/datasource/elasticsearch/configuration/DataLinks.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/elasticsearch/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/public/app/plugins/datasource/elasticsearch/hooks/useStatelessReducer.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/test-helpers/render.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana-pyroscope-datasource/QueryEditor/LabelsEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/grafana-pyroscope-datasource/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana-testdata-datasource/QueryEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/public/app/plugins/datasource/grafana-testdata-datasource/components/RandomWalkEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana-testdata-datasource/components/SimulationQueryEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/grafana-testdata-datasource/components/SimulationSchemaForm.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana-testdata-datasource/datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana-testdata-datasource/nodeGraphUtils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana-testdata-datasource/runStreams.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana/components/AnnotationQueryEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana/components/QueryEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana/components/TimePickerInput.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/plugins/datasource/grafana/components/TimeRegionEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/grafana/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 7 + } + ], + "/public/app/plugins/datasource/graphite/components/AddGraphiteFunction.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/components/FunctionParamEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/components/GraphiteFunctionEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/components/GraphiteQueryEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/graphite/components/MetricTankMetaInspector.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 10 + } + ], + "/public/app/plugins/datasource/graphite/components/TagsSection.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/components/helpers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/datasource.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/plugins/datasource/graphite/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 51 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/plugins/datasource/graphite/gfunc.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 9 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/graphite/graphite_query.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 19 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/lexer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/public/app/plugins/datasource/graphite/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/specs/graphite_query.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/specs/store.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/graphite/state/context.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/graphite/state/helpers.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/state/store.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/graphite/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/graphite/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/config/ConfigEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/flux/FluxQueryEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/fsql/FSQLEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/influxql/visual/VisualInfluxQLEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/influxdb/datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 14 + } + ], + "/public/app/plugins/datasource/influxdb/influx_query_model.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 13 + } + ], + "/public/app/plugins/datasource/influxdb/influx_series.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 19 + } + ], + "/public/app/plugins/datasource/influxdb/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/influxdb/mocks.ts": [ + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/plugins/datasource/influxdb/query_part.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 16 + } + ], + "/public/app/plugins/datasource/influxdb/response_parser.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/jaeger/CheatSheet.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/jaeger/configuration/ConfigEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/jaeger/configuration/TraceIdTimeParams.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/jaeger/datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/jaeger/testResponse.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/jaeger/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/LanguageProvider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/loki/LiveStreams.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/components/LokiContextUi.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 11 + } + ], + "/public/app/plugins/datasource/loki/components/LokiLabelBrowser.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 14 + } + ], + "/public/app/plugins/datasource/loki/components/LokiOptionFields.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/loki/components/monaco-query-field/MonacoQueryField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/loki/configuration/ConfigEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/configuration/DerivedField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/plugins/datasource/loki/configuration/DerivedFields.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/plugins/datasource/loki/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + } + ], + "/public/app/plugins/datasource/loki/queryUtils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/querybuilder/binaryScalarOperations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/querybuilder/components/LabelBrowserModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryBuilder.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryCodeEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/loki/querybuilder/components/QueryPattern.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/plugins/datasource/loki/querybuilder/components/QueryPatternsModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/loki/streaming.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/opentsdb/components/OpenTsdbQueryEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/opentsdb/datasource.d.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/opentsdb/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 57 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/opentsdb/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/parca/QueryEditor/LabelsEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/prometheus/components/PromExemplarField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/prometheus/components/PromExploreExtraField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/prometheus/components/PromQueryField.test.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/components/PromQueryField.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/components/PrometheusMetricsBrowser.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 12 + } + ], + "/public/app/plugins/datasource/prometheus/components/monaco-query-field/MonacoQueryField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/AzureCredentialsConfig.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 18 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/ConfigEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + }, + { + "message": "Styles should be written using objects.", + "count": 16 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/ExemplarsSettings.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 13 + } + ], + "/public/app/plugins/datasource/prometheus/language_provider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/public/app/plugins/datasource/prometheus/language_utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/metric_find_query.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/public/app/plugins/datasource/prometheus/query_hints.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/QueryPattern.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/QueryPatternsModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/binaryScalarOperations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilterItem.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilters.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/LabelParamEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/MetricSelect.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + }, + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilder.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryCodeEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/metrics-modal/AdditionalSettings.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/metrics-modal/ResultsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 13 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/metrics-modal/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 19 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/operationUtils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/shared/LabelFilterItem.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 8 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/shared/LabelFilters.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationParamEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/shared/QueryBuilderHints.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/shared/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/plugins/datasource/prometheus/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/plugins/datasource/tempo/LokiSearch.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/tempo/ServiceGraphSection.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterRenderer.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/loki/LanguageProvider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/loki/monaco-query-field/MonacoQueryField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + }, + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/loki/monaco-query-field/monaco-completion-provider/CompletionDataProvider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/loki/monaco-query-field/monaco-completion-provider/index.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/loki/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/prometheus/language_utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/prometheus/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/store.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/test/helpers/createFetchResponse.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/tempo/configuration/TraceQLSearchSettings.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/plugins/datasource/tempo/language_provider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/resultTransformer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/plugins/datasource/zipkin/ConfigEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/zipkin/QueryField.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/zipkin/datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/zipkin/utils/testResponse.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/zipkin/utils/transforms.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/alertGroups/AlertGroup.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/plugins/panel/alertlist/AlertInstances.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/alertlist/AlertList.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Styles should be written using objects.", + "count": 10 + } + ], + "/public/app/plugins/panel/alertlist/AlertListMigrationHandler.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/panel/alertlist/UnifiedAlertList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 17 + } + ], + "/public/app/plugins/panel/alertlist/unified-alerting/UngroupedView.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/plugins/panel/annolist/AnnoListPanel.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/barchart/BarChartPanel.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/panel/barchart/bars.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/barchart/module.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/barchart/quadtree.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/candlestick/CandlestickPanel.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/canvas/editor/element/APIEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/canvas/editor/element/PlacementEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/canvas/editor/element/elementEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/canvas/editor/inline/InlineEditBody.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/canvas/editor/layer/TreeNavigationEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/canvas/editor/layer/layerEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/panel/canvas/globalStyles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/dashlist/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/plugins/panel/datagrid/utils.ts": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/panel/debug/CursorView.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/debug/EventBusLogger.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/panel/gauge/GaugeMigrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/components/MarkersLegend.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/editor/GeomapStyleRulesEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/editor/StyleEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 12 + } + ], + "/public/app/plugins/panel/geomap/editor/StyleRuleEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/layers/basemaps/esri.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/layers/data/geojsonDynamic.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/layers/data/routeLayer.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/layers/registry.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/panel/geomap/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/panel/geomap/utils/layers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/utils/tooltip.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/gettingstarted/components/DocsCard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/plugins/panel/gettingstarted/components/Step.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/plugins/panel/gettingstarted/components/TutorialCard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/plugins/panel/gettingstarted/components/sharedStyles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/heatmap/HeatmapPanel.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/heatmap/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/heatmap/palettes.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/heatmap/types.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/heatmap/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 17 + } + ], + "/public/app/plugins/panel/histogram/Histogram.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/live/LiveChannelEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/live/LivePanel.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/plugins/panel/live/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/logs/LogsPanel.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/nodeGraph/Edge.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/nodeGraph/EdgeLabel.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/nodeGraph/Legend.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/nodeGraph/Marker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/panel/nodeGraph/Node.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/plugins/panel/nodeGraph/NodeGraph.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 10 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/plugins/panel/nodeGraph/ViewControls.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/nodeGraph/editor/ArcOptionsEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/nodeGraph/layout.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/panel/nodeGraph/useContextMenu.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/piechart/PieChart.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/plugins/panel/piechart/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/panel/stat/StatMigrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/state-timeline/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/panel/table/TablePanel.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/table/cells/SparklineCellOptionsEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/table/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + } + ], + "/public/app/plugins/panel/text/TextPanel.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/text/TextPanelEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/text/textPanelMigrationHandler.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/timeseries/TimezonesEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/timeseries/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/plugins/panel/timeseries/plugins/AnnotationsPlugin2.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/timeseries/plugins/ThresholdDragHandle.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationEditorForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationTooltip.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/plugins/panel/timeseries/plugins/annotations2/AnnotationEditor2.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/timeseries/plugins/annotations2/AnnotationMarker2.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/timeseries/plugins/annotations2/AnnotationTooltip2.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/timeseries/plugins/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/traces/TracesPanel.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/welcome/Welcome.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/plugins/panel/xychart/AutoEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/xychart/ManualEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/xychart/TooltipView.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/xychart/XYChartPanel.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/xychart/scatter.ts": [ + { + "message": "Do not use any type assertions.", + "count": 7 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/store/configureStore.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/store/store.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/types/alerting.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/public/app/types/appEvent.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/public/app/types/dashboard.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/types/events.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 13 + } + ], + "/public/app/types/jquery/jquery.d.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 9 + } + ], + "/public/app/types/store.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/types/unified-alerting-dto.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/test/core/redux/reduxTester.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + } + ], + "/public/test/core/thunk/thunkTester.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 8 + } + ], + "/public/test/global-jquery-shim.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/test/helpers/getDashboardModel.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/test/helpers/initTemplateSrv.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/test/jest-setup.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/test/lib/common.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/test/specs/helpers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 11 + } + ] + }, + "no undocumented stories": { + "/packages/grafana-ui/src/components/ButtonCascader/ButtonCascader.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/ColorPicker/ColorPickerPopover.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/DateTimePickers/RelativeTimeRangePicker/RelativeTimeRangePicker.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/DateTimePickers/TimeOfDayPicker.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/DateTimePickers/TimeZonePicker.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/DateTimePickers/WeekStartPicker.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/PageLayout/PageToolbar.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/QueryField/QueryField.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/SecretTextArea/SecretTextArea.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Segment/Segment.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Segment/SegmentAsync.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Segment/SegmentInput.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Slider/RangeSlider.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Slider/Slider.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/StatsPicker/StatsPicker.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/ThemeDemos/ThemeDemo.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/VizLayout/VizLayout.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/VizLegend/VizLegend.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/VizTooltip/SeriesTable.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ] + }, + "no gf-form usage": { + "/e2e/utils/flows/addDataSource.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/packages/grafana-e2e/src/flows/addDataSource.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/components/PromExploreExtraField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/packages/grafana-prometheus/src/components/PromQueryField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 6 + } + ], + "/packages/grafana-prometheus/src/configuration/AlertingSettingsOverhaul.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/packages/grafana-prometheus/src/configuration/ExemplarSetting.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/configuration/PromSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 25 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/AlertingSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/CustomHeadersSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 16 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/HttpProxySettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/SecureSocksProxySettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/TLSAuthSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/FormField/FormField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/FormLabel/FormLabel.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Input/Input.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Select/NoOptionsMessage.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Select/Select.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 6 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Select/SelectOption.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Switch/Switch.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 8 + } + ], + "/packages/grafana-ui/src/components/SecretFormField/SecretFormField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/Segment/Segment.story.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/Segment/SegmentAsync.story.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/Segment/SegmentInput.story.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Segment/SegmentInput.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/plugins-bundled/internal/input-datasource/src/InputConfigEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/angular/components/code_editor/code_editor.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/angular/components/form_dropdown/form_dropdown.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/angular/components/info_popover.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/angular/components/switch.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 8 + } + ], + "/public/app/angular/dropdown_typeahead.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/angular/metric_segment.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/angular/misc.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/angular/panel/partials/query_editor_row.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/angular/partials/tls_auth_settings.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 35 + } + ], + "/public/app/core/components/AccessControl/PermissionList.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/core/components/PageHeader/PageHeader.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/features/admin/UserLdapSyncInfo.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/features/admin/partials/edit_org.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 8 + } + ], + "/public/app/features/admin/partials/styleguide.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/features/alerting/AlertRuleList.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/features/alerting/partials/alert_tab.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 71 + } + ], + "/public/app/features/annotations/partials/event_editor.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 7 + } + ], + "/public/app/features/dashboard-scene/sharing/ShareLinkTab.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SubMenu/AnnotationPicker.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/SubMenu/SubMenuItems.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/datasources/components/BasicSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/features/datasources/components/ButtonRow.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/datasources/components/DataSourceLoadError.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/datasources/components/DataSourcePluginState.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/features/datasources/components/DataSourceTestingStatus.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/AppConfigWrapper.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/query/components/QueryEditorRow.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/query/components/QueryGroupOptions.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 17 + } + ], + "/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/RangeMatcherEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/features/transformers/editors/OrganizeFieldsTransformerEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 5 + } + ], + "/public/app/features/variables/adhoc/picker/AdHocFilter.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/variables/adhoc/picker/AdHocFilterKey.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/features/variables/adhoc/picker/AdHocFilterRenderer.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/variables/adhoc/picker/AdHocFilterValue.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/variables/adhoc/picker/ConditionSegment.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/features/variables/pickers/PickerRenderer.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 5 + } + ], + "/public/app/features/variables/pickers/shared/VariableInput.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/partials/confirm_modal.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/partials/reset_password.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 13 + } + ], + "/public/app/partials/signup_invited.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 14 + } + ], + "/public/app/plugins/datasource/alertmanager/ConfigEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/components/AnnotationsHelp.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/ConfigEditor/ConfigEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/ConfigEditor/XrayLinkConfig.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryFieldOld.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/shared/LogGroups/LegacyLogGroupNamesSelection.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/shared/LogGroups/LogGroupsField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/SettingsEditorContainer.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/configuration/DataLinks.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana-pyroscope-datasource/ConfigEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/graphite/components/AnnotationsEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/graphite/configuration/MappingsConfiguration.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/annotation/AnnotationEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 8 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/QueryEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/flux/FluxQueryEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 5 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/fsql/FSQLEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 5 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/influxql/visual/PartListSection.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/influxql/visual/TagsSection.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/variable/VariableQueryEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/plugins/datasource/loki/components/AnnotationsQueryEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/components/LokiOptionFields.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/loki/components/LokiQueryField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/loki/configuration/DerivedField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryCodeEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/opentsdb/components/AnnotationEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/prometheus/components/PromExploreExtraField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/plugins/datasource/prometheus/components/PromQueryField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 6 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/AlertingSettingsOverhaul.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/AzureAuthSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/AzureCredentialsForm.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 21 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/ExemplarSetting.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/PromSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 25 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryCodeEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilter.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterKey.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterRenderer.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterValue.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/ConditionSegment.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/loki/LokiQueryField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/zipkin/QueryField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/plugins/panel/graph/axes_editor.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 50 + } + ], + "/public/app/plugins/panel/graph/tab_display.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 56 + } + ], + "/public/app/plugins/panel/graph/tab_legend.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 42 + } + ], + "/public/app/plugins/panel/graph/tab_series_overrides.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 10 + } + ], + "/public/app/plugins/panel/graph/thresholds_form.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 31 + } + ], + "/public/app/plugins/panel/graph/time_regions_form.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 32 + } + ], + "/public/app/plugins/panel/heatmap/partials/axes_editor.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 53 + } + ], + "/public/app/plugins/panel/heatmap/partials/display_editor.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 51 + } + ], + "/public/app/plugins/panel/table-old/column_options.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 91 + } + ], + "/public/app/plugins/panel/table-old/editor.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 22 + } + ] + } +} diff --git a/.betterer.ts b/.betterer.ts index e6e3a0667771f..019979e7e9405 100644 --- a/.betterer.ts +++ b/.betterer.ts @@ -5,11 +5,12 @@ import path from 'path'; import { glob } from 'glob'; // Why are we ignoring these? -// They're all deprecated/being removed soon so doesn't make sense to fix types +// They're all deprecated/being removed so doesn't make sense to fix types const eslintPathsToIgnore = [ 'packages/grafana-e2e', // deprecated. 'public/app/angular', // will be removed in Grafana 11 'public/app/plugins/panel/graph', // will be removed alongside angular + 'public/app/plugins/panel/table-old', // will be removed alongside angular ]; // Avoid using functions that report the position of the issues, as this causes a lot of merge conflicts @@ -31,9 +32,16 @@ function countUndocumentedStories() { await Promise.all( filePaths.map(async (filePath) => { // look for .mdx import in the story file - const regex = new RegExp("^import.*.mdx';$", 'gm'); + const mdxImportRegex = new RegExp("^import.*\\.mdx';$", 'gm'); + // Looks for the "autodocs" string in the file + const autodocsStringRegex = /autodocs/; + const fileText = await fs.readFile(filePath, 'utf8'); - if (!regex.test(fileText)) { + + const hasMdxImport = mdxImportRegex.test(fileText); + const hasAutodocsString = autodocsStringRegex.test(fileText); + // If both .mdx import and autodocs string are missing, add an issue + if (!hasMdxImport && !hasAutodocsString) { // In this case the file contents don't matter: const file = fileTestResult.addFile(filePath, ''); // Add the issue to the first character of the file: diff --git a/.bingo/Variables.mk b/.bingo/Variables.mk index 2c9eb124234e3..363c8b2cd3082 100644 --- a/.bingo/Variables.mk +++ b/.bingo/Variables.mk @@ -1,13 +1,8 @@ -# Auto generated binary variables helper managed by https://github.com/bwplotka/bingo v0.8. DO NOT EDIT. +# Auto generated binary variables helper managed by https://github.com/bwplotka/bingo v0.9. DO NOT EDIT. # All tools are designed to be build inside $GOBIN. BINGO_DIR := $(dir $(lastword $(MAKEFILE_LIST))) GOPATH ?= $(shell go env GOPATH) -ifeq ($(OS),Windows_NT) - PATHSEP := $(if $(COMSPEC),;,:) - GOBIN ?= $(firstword $(subst $(PATHSEP), ,$(subst \,/,${GOPATH})))/bin -else - GOBIN ?= $(firstword $(subst :, ,${GOPATH}))/bin -endif +GOBIN ?= $(firstword $(subst :, ,${GOPATH}))/bin GO ?= $(shell which go) # Below generated variables ensure that every time a tool under each variable is invoked, the correct version @@ -64,9 +59,9 @@ $(SWAGGER): $(BINGO_DIR)/swagger.mod @echo "(re)installing $(GOBIN)/swagger-v0.30.2" @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=swagger.mod -o=$(GOBIN)/swagger-v0.30.2 "github.com/go-swagger/go-swagger/cmd/swagger" -WIRE := $(GOBIN)/wire-v0.5.0 +WIRE := $(GOBIN)/wire-v0.6.0 $(WIRE): $(BINGO_DIR)/wire.mod @# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies. - @echo "(re)installing $(GOBIN)/wire-v0.5.0" - @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=wire.mod -o=$(GOBIN)/wire-v0.5.0 "github.com/google/wire/cmd/wire" + @echo "(re)installing $(GOBIN)/wire-v0.6.0" + @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=wire.mod -o=$(GOBIN)/wire-v0.6.0 "github.com/google/wire/cmd/wire" diff --git a/.bingo/variables.env b/.bingo/variables.env index cf844231b928d..dc64e5f430bc0 100644 --- a/.bingo/variables.env +++ b/.bingo/variables.env @@ -1,4 +1,4 @@ -# Auto generated binary variables helper managed by https://github.com/bwplotka/bingo v0.8. DO NOT EDIT. +# Auto generated binary variables helper managed by https://github.com/bwplotka/bingo v0.9. DO NOT EDIT. # All tools are designed to be build inside $GOBIN. # Those variables will work only until 'bingo get' was invoked, or if tools were installed via Makefile's Variables.mk. GOBIN=${GOBIN:=$(go env GOBIN)} @@ -22,5 +22,5 @@ LEFTHOOK="${GOBIN}/lefthook-v1.4.8" SWAGGER="${GOBIN}/swagger-v0.30.2" -WIRE="${GOBIN}/wire-v0.5.0" +WIRE="${GOBIN}/wire-v0.6.0" diff --git a/.bingo/wire.mod b/.bingo/wire.mod index fc39b30da167c..fdfc21a466ffd 100644 --- a/.bingo/wire.mod +++ b/.bingo/wire.mod @@ -2,4 +2,4 @@ module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT go 1.16 -require github.com/google/wire v0.5.0 // cmd/wire +require github.com/google/wire v0.6.0 // cmd/wire diff --git a/.bingo/wire.sum b/.bingo/wire.sum index 6d4b4b386440f..be6e646d063d6 100644 --- a/.bingo/wire.sum +++ b/.bingo/wire.sum @@ -1,13 +1,66 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/subcommands v1.0.1 h1:/eqq+otEXm5vhfBrbREPCSVQbvofip6kIz+mX5TUH7k= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/wire v0.5.0 h1:I7ELFeVBr3yfPIcc8+MWvrjk+3VjbcSzoXm3JVa+jD8= github.com/google/wire v0.5.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= +github.com/google/wire v0.6.0 h1:HBkoIh4BdSxoyo9PveV8giw7ZsaBOvzWKfcg/6MrVwI= +github.com/google/wire v0.6.0/go.mod h1:F4QhpQ9EDIdJ1Mbop/NZBRB+5yrR6qg3BnctaoUk6NA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b h1:NVD8gBK33xpdqCaZVVtd6OFJp+3dxkXuz7+U7KaVN6s= golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= +golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/.bra.toml b/.bra.toml index b57cf283edcf9..e76c9fd62095a 100644 --- a/.bra.toml +++ b/.bra.toml @@ -1,5 +1,6 @@ [run] init_cmds = [ + ["GO_BUILD_DEV=1", "make", "gen-go"], ["GO_BUILD_DEV=1", "make", "build-go"], ["make", "gen-jsonnet"], ["./bin/grafana", "server", "-packaging=dev", "cfg:app_mode=development"] @@ -16,6 +17,7 @@ watch_exts = [".go", ".ini", ".toml", ".template.html"] ignore_files = [".*_gen.go"] build_delay = 1500 cmds = [ + ["GO_BUILD_DEV=1", "make", "gen-go"], ["GO_BUILD_DEV=1", "make", "build-go"], ["make", "gen-jsonnet"], ["./bin/grafana", "server", "-packaging=dev", "cfg:app_mode=development"] diff --git a/.changelog-archive/CHANGELOG.2.md b/.changelog-archive/CHANGELOG.2.md index 34491f2731f88..7fc14a683dc40 100644 --- a/.changelog-archive/CHANGELOG.2.md +++ b/.changelog-archive/CHANGELOG.2.md @@ -105,7 +105,7 @@ - Notice to makers/users of custom data sources, there is a minor breaking change in 2.2 that require an update to custom data sources for them to work in 2.2. [Read this doc](https://github.com/grafana/grafana/tree/master/docs/sources/datasources/plugin_api.md) for more on the data source api change. -- Data source api changes, [PLUGIN_CHANGES.md](https://github.com/grafana/grafana/blob/master/public/app/plugins/PLUGIN_CHANGES.md) +- Data source api changes, [PLUGIN_CHANGES.md](https://github.com/grafana/grafana/blob/main/public/app/plugins/PLUGIN_CHANGES.md) - The duplicate query function used in data source editors is changed, and moveMetricQuery function was renamed **Tech (Note for devs)** diff --git a/.changelog-archive/CHANGELOG.3.md b/.changelog-archive/CHANGELOG.3.md index 12f18c3128765..258aa1ce2e432 100644 --- a/.changelog-archive/CHANGELOG.3.md +++ b/.changelog-archive/CHANGELOG.3.md @@ -198,7 +198,7 @@ slack channel (link to slack channel in readme). ### Breaking changes -- **Plugin API**: Both data source and panel plugin api (and plugin.json schema) have been updated, requiring an update to plugins. See [plugin api](https://github.com/grafana/grafana/blob/master/public/app/plugins/plugin_api.md) for more info. +- **Plugin API**: Both data source and panel plugin api (and plugin.json schema) have been updated, requiring an update to plugins. See [plugin api](https://github.com/grafana/grafana/blob/main/public/app/plugins/plugin_api.md) for more info. - **InfluxDB 0.8.x** The data source for the old version of influxdb (0.8.x) is no longer included in default builds, but can easily be installed via improved plugin system, closes [#3523](https://github.com/grafana/grafana/issues/3523) - **KairosDB** The data source is no longer included in default builds, but can easily be installed via improved plugin system, closes [#3524](https://github.com/grafana/grafana/issues/3524) - **Templating**: Templating value formats (glob/regex/pipe etc) are now handled automatically and not specified by the user, this makes variable values possible to reuse in many contexts. It can in some edge cases break existing dashboards that have template variables that do not reload on dashboard load. To fix any issue just go into template variable options and update the variable (so it's values are reloaded.). diff --git a/.changelog-archive/CHANGELOG.4.md b/.changelog-archive/CHANGELOG.4.md index bb93963a2b443..e919c0c51e3e9 100644 --- a/.changelog-archive/CHANGELOG.4.md +++ b/.changelog-archive/CHANGELOG.4.md @@ -100,7 +100,7 @@ See [security announcement](https://community.grafana.com/t/grafana-5-2-3-and-4- ## Tech - **Go**: Grafana is now built using golang 1.9 -- **Webpack**: Changed from systemjs to webpack (see readme or building from source guide for new build instructions). Systemjs is still used to load plugins but now plugins can only import a limited set of dependencies. See [PLUGIN_DEV.md](https://github.com/grafana/grafana/blob/master/PLUGIN_DEV.md) for more details on how this can effect some plugins. +- **Webpack**: Changed from systemjs to webpack (see readme or building from source guide for new build instructions). Systemjs is still used to load plugins but now plugins can only import a limited set of dependencies. See [PLUGIN_DEV.md](https://github.com/grafana/grafana/blob/main/PLUGIN_DEV.md) for more details on how this can effect some plugins. # 4.5.2 (2017-09-22) diff --git a/.changelog-archive/CHANGELOG.6.md b/.changelog-archive/CHANGELOG.6.md index 4cfbded16cab1..6d4ddfe0086de 100644 --- a/.changelog-archive/CHANGELOG.6.md +++ b/.changelog-archive/CHANGELOG.6.md @@ -1291,4 +1291,4 @@ repo on July 1st. Make sure you have switched to the new repo by then. The new r - **Text Panel**: The text panel does no longer by default allow unsanitized HTML. [#4117](https://github.com/grafana/grafana/issues/4117). This means that if you have text panels with scripts tags they will no longer work as before. To enable unsafe javascript execution in text panels enable the settings `disable_sanitize_html` under the section `[panels]` in your Grafana ini file, or set env variable `GF_PANELS_DISABLE_SANITIZE_HTML=true`. - **Dashboard**: Panel property `minSpan` replaced by `maxPerRow`. Dashboard migration will automatically migrate all dashboard panels using the `minSpan` property to the new `maxPerRow` property [#12991](https://github.com/grafana/grafana/pull/12991) -For older release notes, refer to the [CHANGELOG_ARCHIVE.md](https://github.com/grafana/grafana/blob/master/CHANGELOG_ARCHIVE.md) +For older release notes, refer to the [CHANGELOG_ARCHIVE.md](https://github.com/grafana/grafana/blob/main/CHANGELOG_ARCHIVE.md) diff --git a/.changelog-archive/CHANGELOG.7.md b/.changelog-archive/CHANGELOG.7.md index baa857fcdfc88..504788b7481e4 100644 --- a/.changelog-archive/CHANGELOG.7.md +++ b/.changelog-archive/CHANGELOG.7.md @@ -544,7 +544,7 @@ Issue [#29407](https://github.com/grafana/grafana/issues/29407) We have upgraded AngularJS from version 1.6.6 to 1.8.2. Due to this upgrade some old angular plugins might stop working and will require a small update. This is due to the deprecation and removal of pre-assigned bindings. So if your custom angular controllers expect component bindings in the controller constructor you need to move this code to an `$onInit` function. For more details on how to migrate AngularJS code open the [migration guide](https://docs.angularjs.org/guide/migration) and search for **pre-assigning bindings**. -In order not to break all angular panel plugins and data sources we have some custom [angular inject behavior](https://github.com/grafana/grafana/blob/master/public/app/core/injectorMonkeyPatch.ts) that makes sure that bindings for these controllers are still set before constructor is called so many old angular panels and data source plugins will still work. Issue [#28736](https://github.com/grafana/grafana/issues/28736) +In order not to break all angular panel plugins and data sources we have some custom [angular inject behavior](https://github.com/grafana/grafana/blob/main/public/app/core/injectorMonkeyPatch.ts) that makes sure that bindings for these controllers are still set before constructor is called so many old angular panels and data source plugins will still work. Issue [#28736](https://github.com/grafana/grafana/issues/28736) ### Deprecations @@ -1288,8 +1288,8 @@ This option to group query variable values into groups by tags has been an exper - **Datasource/Loki**: Support for [deprecated Loki endpoints](https://github.com/grafana/loki/blob/master/docs/api.md#lokis-http-api) has been removed. - **Backend plugins**: Grafana now requires backend plugins to be signed, otherwise Grafana will not load/start them. This is an additional security measure to make sure backend plugin binaries and files haven't been tampered with. Refer to [Upgrade Grafana](https://grafana.com/docs/grafana/latest/installation/upgrading/#upgrading-to-v7-0) for more information. - **Docker**: Our Ubuntu based images have been upgraded to Ubuntu [20.04 LTS](https://releases.ubuntu.com/20.04/). -- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md) -- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md) +- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md) +- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md) **Deprecation warnings** @@ -1304,7 +1304,7 @@ Not just visualizing data from anywhere, in Grafana 7 you can transform it too. Data transformations will provide a common set of data operations that were previously duplicated as custom features in many panels or data sources but are now an integral part of the Grafana data processing pipeline and something all data sources and panels can take advantage of. -In Grafana 7.0 we have a shared data model for both time series and table data that we call [DataFrame](https://github.com/grafana/grafana/blob/master/docs/sources/plugins/developing/dataframe.md). A DataFrame is like a table with columns but we refer to columns as fields. A time series is simply a DataFrame with two fields (time & value). +In Grafana 7.0 we have a shared data model for both time series and table data that we call [DataFrame](https://github.com/grafana/grafana/blob/main/docs/sources/plugins/developing/dataframe.md). A DataFrame is like a table with columns but we refer to columns as fields. A time series is simply a DataFrame with two fields (time & value). **Transformations shipping in 7.0** @@ -1414,7 +1414,7 @@ We have also extended the time zone options so you can select any of the standar ### Features / Enhancements - **Docker**: Upgrade to Alpine 3.11. [#24056](https://github.com/grafana/grafana/pull/24056), [@aknuds1](https://github.com/aknuds1) -- **Forms**: Remove Forms namespace [BREAKING]. Will cause all `Forms` imports to stop working. See migration guide in [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md)[#24378](https://github.com/grafana/grafana/pull/24378), [@tskarhed](https://github.com/tskarhed) +- **Forms**: Remove Forms namespace [BREAKING]. Will cause all `Forms` imports to stop working. See migration guide in [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md)[#24378](https://github.com/grafana/grafana/pull/24378), [@tskarhed](https://github.com/tskarhed) ### Bug Fixes @@ -1429,7 +1429,7 @@ We have also extended the time zone options so you can select any of the standar - **Removed PhantomJS**: PhantomJS was deprecated in [Grafana v6.4](https://grafana.com/docs/grafana/latest/guides/whats-new-in-v6-4/#phantomjs-deprecation) and starting from Grafana v7.0.0, all PhantomJS support has been removed. This means that Grafana no longer ships with a built-in image renderer, and we advise you to install the [Grafana Image Renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer). - **Docker**: Our Ubuntu based images have been upgraded to Ubuntu [20.04 LTS](https://releases.ubuntu.com/20.04/). - **Dashboard**: A global minimum dashboard refresh interval is now enforced and defaults to 5 seconds. -- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md) +- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md) - **Interval calculation**: There is now a new option `Max data points` that controls the auto interval `$__interval` calculation. Interval was previously calculated by dividing the panel width by the time range. With the new max data points option it is now easy to set `$__interval` to a dynamic value that is time range agnostic. For example if you set `Max data points` to 10 Grafana will dynamically set `$__interval` by dividing the current time range by 10. - **Datasource/Loki**: Support for [deprecated Loki endpoints](https://github.com/grafana/loki/blob/master/docs/api.md#lokis-http-api) has been removed. @@ -1484,8 +1484,8 @@ We have also extended the time zone options so you can select any of the standar - **Removed PhantomJS**: PhantomJS was deprecated in [Grafana v6.4](https://grafana.com/docs/grafana/latest/guides/whats-new-in-v6-4/#phantomjs-deprecation) and starting from Grafana v7.0.0, all PhantomJS support has been removed. This means that Grafana no longer ships with a built-in image renderer, and we advise you to install the [Grafana Image Renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer). - **Docker**: Our Ubuntu based images have been upgraded to Ubuntu [20.04 LTS](https://releases.ubuntu.com/20.04/). - **Dashboard**: A global minimum dashboard refresh interval is now enforced and defaults to 5 seconds. -- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md) -- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md) +- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md) +- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md) - **Interval calculation**: There is now a new option `Max data points` that controls the auto interval `$__interval` calculation. Interval was previously calculated by dividing the panel width by the time range. With the new max data points option it is now easy to set `$__interval` to a dynamic value that is time range agnostic. For example if you set `Max data points` to 10 Grafana will dynamically set `$__interval` by dividing the current time range by 10. - **Datasource/Loki**: Support for [deprecated Loki endpoints](https://github.com/grafana/loki/blob/master/docs/api.md#lokis-http-api) has been removed. diff --git a/.drone.yml b/.drone.yml index 2b571a50617cc..4443759a20a77 100644 --- a/.drone.yml +++ b/.drone.yml @@ -5,7 +5,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-verify-drone node: @@ -17,14 +18,14 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - go build -o ./bin/build -ldflags '-extldflags -static' ./pkg/build/cmd depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - commands: - ./bin/build verify-drone @@ -55,7 +56,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-verify-starlark node: @@ -67,21 +69,21 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - go build -o ./bin/build -ldflags '-extldflags -static' ./pkg/build/cmd depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - commands: - go install github.com/bazelbuild/buildtools/buildifier@latest - buildifier --lint=warn -mode=check -r . depends_on: - compile-build-cmd - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: lint-starlark trigger: event: @@ -105,7 +107,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-test-frontend node: @@ -117,10 +120,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -184,7 +188,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-lint-frontend node: @@ -217,10 +222,11 @@ steps: name: clone-enterprise - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -244,9 +250,9 @@ steps: \"\nTranslation extraction has not been committed. Please run 'yarn i18n:extract', commit the changes and push again.\"\n exit 1\n fi\n \ " - - yarn run i18n:compile depends_on: - yarn-install + failure: ignore image: node:20.9.0-alpine name: verify-i18n trigger: @@ -273,7 +279,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-test-backend node: @@ -306,7 +313,7 @@ steps: name: clone-enterprise - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -316,7 +323,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -325,21 +332,22 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: wire-install - commands: - apk add --update build-base shared-mime-info shared-mime-info-lang - - go test -tags requires_buildifer -short -covermode=atomic -timeout=5m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -tags requires_buildifer -short -covermode=atomic + -timeout=5m depends_on: - wire-install - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: test-backend - commands: - apk add --update build-base @@ -348,7 +356,7 @@ steps: | grep -o '\(.*\)/' | sort -u) depends_on: - wire-install - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: test-backend-integration trigger: event: @@ -358,6 +366,7 @@ trigger: - docs/** - '*.md' include: + - Makefile - pkg/** - packaging/** - .drone.yml @@ -379,7 +388,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-lint-backend node: @@ -391,14 +401,14 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - go build -o ./bin/build -ldflags '-extldflags -static' ./pkg/build/cmd depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - commands: - apk add --update curl jq bash @@ -425,7 +435,7 @@ steps: - apk add --update make - make gen-go depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: wire-install - commands: - apk add --update make build-base @@ -434,16 +444,16 @@ steps: - wire-install environment: CGO_ENABLED: "1" - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: lint-backend - commands: - go run scripts/modowners/modowners.go check go.mod - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: validate-modfile - commands: - apk add --update make - make swagger-validate - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: validate-openapi-spec trigger: event: @@ -453,6 +463,7 @@ trigger: - docs/** - '*.md' include: + - Makefile - pkg/** - packaging/** - .drone.yml @@ -474,7 +485,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-build-e2e node: @@ -486,11 +498,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.47/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -499,7 +511,7 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -509,7 +521,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -518,17 +530,18 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: wire-install - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -558,10 +571,13 @@ steps: from_secret: drone_token - commands: - /src/grafana-build artifacts -a targz:grafana:linux/amd64 -a targz:grafana:linux/arm64 - -a targz:grafana:linux/arm/v7 --go-version=1.21.5 --yarn-cache=$$YARN_CACHE_FOLDER + -a targz:grafana:linux/arm/v7 --go-version=1.21.8 --yarn-cache=$$YARN_CACHE_FOLDER --build-id=$$DRONE_BUILD_NUMBER --grafana-dir=$$PWD > packages.txt depends_on: - yarn-install + environment: + _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: + from_secret: dagger_token image: grafana/grafana-build:main name: rgm-package pull: always @@ -580,7 +596,7 @@ steps: GF_APP_MODE: development GF_SERVER_HTTP_PORT: "3001" GF_SERVER_ROUTER_LOGGING: "1" - image: alpine:3.18.4 + image: alpine:3.19.1 name: grafana-server - commands: - ./bin/build e2e-tests --port 3001 --suite dashboards-suite @@ -641,6 +657,61 @@ steps: repo: - grafana/grafana - commands: + - sleep 10s + - yarn e2e:playwright + depends_on: + - grafana-server + environment: + HOST: grafana-server + PORT: "3001" + PROV_DIR: /grafana/scripts/grafana-server/tmp/conf/provisioning + image: mcr.microsoft.com/playwright:v1.42.1-jammy + name: playwright-plugin-e2e +- commands: + - apt-get update + - apt-get install -yq zip + - printenv GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY > /tmp/gcpkey_upload_artifacts.json + - gcloud auth activate-service-account --key-file=/tmp/gcpkey_upload_artifacts.json + - gsutil cp -r ./playwright-report/. gs://releng-pipeline-artifacts-dev/${DRONE_BUILD_NUMBER}/playwright-report + - export E2E_PLAYWRIGHT_REPORT_URL=https://storage.googleapis.com/releng-pipeline-artifacts-dev/${DRONE_BUILD_NUMBER}/playwright-report/index.html + - "echo \"E2E Playwright report uploaded to: \n $${E2E_PLAYWRIGHT_REPORT_URL}\"" + depends_on: + - playwright-plugin-e2e + environment: + GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY: + from_secret: gcp_upload_artifacts_key + failure: ignore + image: google/cloud-sdk:431.0.0 + name: playwright-e2e-report-upload + when: + status: + - success + - failure +- commands: + - if [ ! -d ./playwright-report/trace ]; then echo 'all tests passed'; exit 0; fi + - export E2E_PLAYWRIGHT_REPORT_URL=https://storage.googleapis.com/releng-pipeline-artifacts-dev/${DRONE_BUILD_NUMBER}/playwright-report/index.html + - 'curl -L -X POST https://api.github.com/repos/grafana/grafana/issues/${DRONE_PULL_REQUEST}/comments + -H "Accept: application/vnd.github+json" -H "Authorization: Bearer $${GITHUB_TOKEN}" + -H "X-GitHub-Api-Version: 2022-11-28" -d "{\"body\":\"❌ Failed to run Playwright + plugin e2e tests.

Click [here]($${E2E_PLAYWRIGHT_REPORT_URL}) to + browse the Playwright report and trace viewer.
For information on how to + run Playwright tests locally, refer to the [Developer guide](https://github.com/grafana/grafana/blob/main/contribute/developer-guide.md#to-run-the-playwright-tests). + \"}"' + depends_on: + - playwright-e2e-report-upload + environment: + GITHUB_TOKEN: + from_secret: github_token + failure: ignore + image: byrnedo/alpine-curl:0.1.8 + name: playwright-e2e-report-post-link + when: + status: + - success + - failure +- commands: + - if [ -z `find ./e2e -type f -name *spec.ts.mp4` ]; then echo 'missing videos'; + false; fi - apt-get update - apt-get install -yq zip - printenv GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY > /tmp/gcpkey_upload_artifacts.json @@ -703,12 +774,15 @@ steps: - /src/grafana-build artifacts -a docker:grafana:linux/amd64 -a docker:grafana:linux/amd64:ubuntu -a docker:grafana:linux/arm64 -a docker:grafana:linux/arm64:ubuntu -a docker:grafana:linux/arm/v7 -a docker:grafana:linux/arm/v7:ubuntu --yarn-cache=$$YARN_CACHE_FOLDER --build-id=$$DRONE_BUILD_NUMBER - --ubuntu-base=ubuntu:22.04 --alpine-base=alpine:3.18.4 --tag-format='{{ .version_base - }}-{{ .buildID }}-{{ .arch }}' --grafana-dir=$$PWD --ubuntu-tag-format='{{ .version_base - }}-{{ .buildID }}-ubuntu-{{ .arch }}' > docker.txt + --go-version=1.21.8 --ubuntu-base=ubuntu:22.04 --alpine-base=alpine:3.19.1 --tag-format='{{ + .version_base }}-{{ .buildID }}-{{ .arch }}' --grafana-dir=$$PWD --ubuntu-tag-format='{{ + .version_base }}-{{ .buildID }}-ubuntu-{{ .arch }}' > docker.txt - find ./dist -name '*docker*.tar.gz' -type f | xargs -n1 docker load -i depends_on: - yarn-install + environment: + _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: + from_secret: dagger_token image: grafana/grafana-build:main name: rgm-build-docker pull: always @@ -756,7 +830,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-integration-tests node: @@ -800,9 +875,9 @@ services: - name: mysql80 path: /var/lib/mysql - commands: - - /bin/mimir -target=backend + - /bin/mimir -target=backend -alertmanager.grafana-alertmanager-compatibility-enabled environment: {} - image: us.gcr.io/kubernetes-dev/mimir:gotjosh-state-config-grafana-663a0ae78 + image: grafana/mimir:r274-1780c50 name: mimir_backend - environment: {} image: redis:6.2.11-alpine @@ -834,7 +909,7 @@ steps: name: clone-enterprise - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.47/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -843,11 +918,11 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -857,7 +932,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -866,14 +941,14 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: wire-install - commands: - dockerize -wait tcp://postgres:5432 -timeout 120s @@ -894,7 +969,7 @@ steps: GRAFANA_TEST_DB: postgres PGPASSWORD: grafanatest POSTGRES_HOST: postgres - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: postgres-integration-tests - commands: - dockerize -wait tcp://mysql57:3306 -timeout 120s @@ -915,7 +990,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql57 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: mysql-5.7-integration-tests - commands: - dockerize -wait tcp://mysql80:3306 -timeout 120s @@ -936,7 +1011,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql80 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: mysql-8.0-integration-tests - commands: - dockerize -wait tcp://redis:6379 -timeout 120s @@ -945,13 +1020,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run IntegrationRedis -covermode=atomic -timeout=2m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -run IntegrationRedis -covermode=atomic + -timeout=2m depends_on: - wire-install - wait-for-redis environment: REDIS_URL: redis://redis:6379/0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: redis-integration-tests - commands: - dockerize -wait tcp://memcached:11211 -timeout 120s @@ -960,13 +1036,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run IntegrationMemcached -covermode=atomic -timeout=2m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -run IntegrationMemcached -covermode=atomic + -timeout=2m depends_on: - wire-install - wait-for-memcached environment: MEMCACHED_HOSTS: memcached:11211 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: memcached-integration-tests - commands: - dockerize -wait tcp://mimir_backend:8080 -timeout 120s @@ -982,7 +1059,7 @@ steps: environment: AM_TENANT_ID: test AM_URL: http://mimir_backend:8080 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: remote-alertmanager-integration-tests trigger: event: @@ -1020,7 +1097,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-docs node: @@ -1032,16 +1110,17 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install - commands: - pip3 install codespell - - codespell -I .codespellignore docs/ + - codespell -I docs/.codespellignore docs/ image: python:3.8 name: codespell - commands: @@ -1069,7 +1148,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-cue trigger: event: @@ -1094,7 +1173,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-shellcheck node: @@ -1109,7 +1189,7 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - commands: - apt-get update -yq && apt-get install shellcheck @@ -1136,7 +1216,8 @@ clone: retries: 3 depends_on: [] image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-swagger-gen node: @@ -1152,11 +1233,15 @@ steps: | jq .head.repo.fork) - if [ "$is_fork" != false ]; then return 1; fi - git clone "https://$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git" - grafana-enterprise - - cd grafana-enterprise + ../grafana-enterprise + - cd ../grafana-enterprise - if git checkout ${DRONE_SOURCE_BRANCH}; then echo "checked out ${DRONE_SOURCE_BRANCH}"; - elif git checkout main; then echo "git checkout main"; else git checkout main; - fi + elif git checkout ${DRONE_TARGET_BRANCH}; then echo "git checkout ${DRONE_TARGET_BRANCH}"; + else git checkout main; fi + - cd ../ + - ln -s src grafana + - cd ./grafana-enterprise + - ./build.sh environment: GITHUB_TOKEN: from_secret: github_token @@ -1168,25 +1253,19 @@ steps: - make swagger-clean && make openapi3-gen - for f in public/api-merged.json public/openapi3.json; do git add $f; done - if [ -z "$(git diff --name-only --cached)" ]; then echo "Everything seems up to - date!"; else echo "Please ensure the branch is up-to-date, then regenerate the - specification by running make swagger-clean && make openapi3-gen" && return 1; - fi + date!"; else git diff --cached && echo "Please ensure the branch is up-to-date, + then regenerate the specification by running make swagger-clean && make openapi3-gen" + && return 1; fi depends_on: - clone-enterprise environment: GITHUB_TOKEN: from_secret: github_token - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: swagger-gen trigger: event: - pull_request - paths: - exclude: - - docs/** - - '*.md' - include: - - pkg/** type: docker volumes: - host: @@ -1199,7 +1278,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-integration-benchmarks node: @@ -1243,9 +1323,9 @@ services: - name: mysql80 path: /var/lib/mysql - commands: - - /bin/mimir -target=backend + - /bin/mimir -target=backend -alertmanager.grafana-alertmanager-compatibility-enabled environment: {} - image: us.gcr.io/kubernetes-dev/mimir:gotjosh-state-config-grafana-663a0ae78 + image: grafana/mimir:r274-1780c50 name: mimir_backend - environment: {} image: redis:6.2.11-alpine @@ -1277,7 +1357,7 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -1288,7 +1368,7 @@ steps: - CODEGEN_VERIFY=1 make gen-cue depends_on: - clone-enterprise - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -1298,14 +1378,14 @@ steps: - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: - clone-enterprise - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: wire-install - commands: - apk add --update build-base @@ -1313,7 +1393,7 @@ steps: - go test -v -run=^$ -benchmem -timeout=1h -count=8 -bench=. ${GO_PACKAGES} depends_on: - wire-install - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: sqlite-benchmark-integration-tests - commands: - apk add --update build-base @@ -1325,7 +1405,7 @@ steps: GRAFANA_TEST_DB: postgres PGPASSWORD: grafanatest POSTGRES_HOST: postgres - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: postgres-benchmark-integration-tests - commands: - apk add --update build-base @@ -1336,7 +1416,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql57 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: mysql-5.7-benchmark-integration-tests - commands: - apk add --update build-base @@ -1347,7 +1427,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql80 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: mysql-8.0-benchmark-integration-tests trigger: event: @@ -1375,7 +1455,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-docs node: @@ -1387,16 +1468,17 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install - commands: - pip3 install codespell - - codespell -I .codespellignore docs/ + - codespell -I docs/.codespellignore docs/ image: python:3.8 name: codespell - commands: @@ -1424,7 +1506,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-cue trigger: branch: main @@ -1450,7 +1532,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-test-frontend node: @@ -1462,10 +1545,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -1507,7 +1591,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-lint-frontend node: @@ -1519,10 +1604,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -1546,9 +1632,9 @@ steps: \"\nTranslation extraction has not been committed. Please run 'yarn i18n:extract', commit the changes and push again.\"\n exit 1\n fi\n \ " - - yarn run i18n:compile depends_on: - yarn-install + failure: ignore image: node:20.9.0-alpine name: verify-i18n trigger: @@ -1574,7 +1660,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-test-backend node: @@ -1586,7 +1673,7 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -1596,7 +1683,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -1605,21 +1692,22 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: wire-install - commands: - apk add --update build-base shared-mime-info shared-mime-info-lang - - go test -tags requires_buildifer -short -covermode=atomic -timeout=5m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -tags requires_buildifer -short -covermode=atomic + -timeout=5m depends_on: - wire-install - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: test-backend - commands: - apk add --update build-base @@ -1628,7 +1716,7 @@ steps: | grep -o '\(.*\)/' | sort -u) depends_on: - wire-install - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: test-backend-integration trigger: branch: main @@ -1653,7 +1741,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-lint-backend node: @@ -1665,20 +1754,20 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - go build -o ./bin/build -ldflags '-extldflags -static' ./pkg/build/cmd depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - commands: - apk add --update make - make gen-go depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: wire-install - commands: - apk add --update make build-base @@ -1687,16 +1776,16 @@ steps: - wire-install environment: CGO_ENABLED: "1" - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: lint-backend - commands: - go run scripts/modowners/modowners.go check go.mod - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: validate-modfile - commands: - apk add --update make - make swagger-validate - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: validate-openapi-spec - commands: - ./bin/build verify-drone @@ -1727,7 +1816,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-build-e2e-publish node: @@ -1739,11 +1829,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.47/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1752,7 +1842,7 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -1762,7 +1852,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -1771,23 +1861,24 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: wire-install - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install - commands: - apk add --update jq - - new_version=$(cat package.json | jq .version | sed s/pre/${DRONE_BUILD_NUMBER}/g) + - new_version=$(cat package.json | jq -r .version | sed s/pre/${DRONE_BUILD_NUMBER}/g) - 'echo "New version: $new_version"' - yarn run lerna version $new_version --exact --no-git-tag-version --no-push --force-publish -y @@ -1810,10 +1901,13 @@ steps: name: build-frontend-packages - commands: - /src/grafana-build artifacts -a targz:grafana:linux/amd64 -a targz:grafana:linux/arm64 - -a targz:grafana:linux/arm/v7 --go-version=1.21.5 --yarn-cache=$$YARN_CACHE_FOLDER + -a targz:grafana:linux/arm/v7 --go-version=1.21.8 --yarn-cache=$$YARN_CACHE_FOLDER --build-id=$$DRONE_BUILD_NUMBER --grafana-dir=$$PWD > packages.txt depends_on: - update-package-json-version + environment: + _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: + from_secret: dagger_token image: grafana/grafana-build:main name: rgm-package pull: always @@ -1832,7 +1926,7 @@ steps: GF_APP_MODE: development GF_SERVER_HTTP_PORT: "3001" GF_SERVER_ROUTER_LOGGING: "1" - image: alpine:3.18.4 + image: alpine:3.19.1 name: grafana-server - commands: - ./bin/build e2e-tests --port 3001 --suite dashboards-suite @@ -1893,6 +1987,61 @@ steps: repo: - grafana/grafana - commands: + - sleep 10s + - yarn e2e:playwright + depends_on: + - grafana-server + environment: + HOST: grafana-server + PORT: "3001" + PROV_DIR: /grafana/scripts/grafana-server/tmp/conf/provisioning + image: mcr.microsoft.com/playwright:v1.42.1-jammy + name: playwright-plugin-e2e +- commands: + - apt-get update + - apt-get install -yq zip + - printenv GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY > /tmp/gcpkey_upload_artifacts.json + - gcloud auth activate-service-account --key-file=/tmp/gcpkey_upload_artifacts.json + - gsutil cp -r ./playwright-report/. gs://releng-pipeline-artifacts-dev/${DRONE_BUILD_NUMBER}/playwright-report + - export E2E_PLAYWRIGHT_REPORT_URL=https://storage.googleapis.com/releng-pipeline-artifacts-dev/${DRONE_BUILD_NUMBER}/playwright-report/index.html + - "echo \"E2E Playwright report uploaded to: \n $${E2E_PLAYWRIGHT_REPORT_URL}\"" + depends_on: + - playwright-plugin-e2e + environment: + GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY: + from_secret: gcp_upload_artifacts_key + failure: ignore + image: google/cloud-sdk:431.0.0 + name: playwright-e2e-report-upload + when: + status: + - success + - failure +- commands: + - if [ ! -d ./playwright-report/trace ]; then echo 'all tests passed'; exit 0; fi + - export E2E_PLAYWRIGHT_REPORT_URL=https://storage.googleapis.com/releng-pipeline-artifacts-dev/${DRONE_BUILD_NUMBER}/playwright-report/index.html + - 'curl -L -X POST https://api.github.com/repos/grafana/grafana/issues/${DRONE_PULL_REQUEST}/comments + -H "Accept: application/vnd.github+json" -H "Authorization: Bearer $${GITHUB_TOKEN}" + -H "X-GitHub-Api-Version: 2022-11-28" -d "{\"body\":\"❌ Failed to run Playwright + plugin e2e tests.

Click [here]($${E2E_PLAYWRIGHT_REPORT_URL}) to + browse the Playwright report and trace viewer.
For information on how to + run Playwright tests locally, refer to the [Developer guide](https://github.com/grafana/grafana/blob/main/contribute/developer-guide.md#to-run-the-playwright-tests). + \"}"' + depends_on: + - playwright-e2e-report-upload + environment: + GITHUB_TOKEN: + from_secret: github_token + failure: ignore + image: byrnedo/alpine-curl:0.1.8 + name: playwright-e2e-report-post-link + when: + status: + - success + - failure +- commands: + - if [ -z `find ./e2e -type f -name *spec.ts.mp4` ]; then echo 'missing videos'; + false; fi - apt-get update - apt-get install -yq zip - printenv GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY > /tmp/gcpkey_upload_artifacts.json @@ -1991,12 +2140,15 @@ steps: - /src/grafana-build artifacts -a docker:grafana:linux/amd64 -a docker:grafana:linux/amd64:ubuntu -a docker:grafana:linux/arm64 -a docker:grafana:linux/arm64:ubuntu -a docker:grafana:linux/arm/v7 -a docker:grafana:linux/arm/v7:ubuntu --yarn-cache=$$YARN_CACHE_FOLDER --build-id=$$DRONE_BUILD_NUMBER - --ubuntu-base=ubuntu:22.04 --alpine-base=alpine:3.18.4 --tag-format='{{ .version_base - }}-{{ .buildID }}-{{ .arch }}' --grafana-dir=$$PWD --ubuntu-tag-format='{{ .version_base - }}-{{ .buildID }}-ubuntu-{{ .arch }}' > docker.txt + --go-version=1.21.8 --ubuntu-base=ubuntu:22.04 --alpine-base=alpine:3.19.1 --tag-format='{{ + .version_base }}-{{ .buildID }}-{{ .arch }}' --grafana-dir=$$PWD --ubuntu-tag-format='{{ + .version_base }}-{{ .buildID }}-ubuntu-{{ .arch }}' > docker.txt - find ./dist -name '*docker*.tar.gz' -type f | xargs -n1 docker load -i depends_on: - update-package-json-version + environment: + _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: + from_secret: dagger_token image: grafana/grafana-build:main name: rgm-build-docker pull: always @@ -2127,7 +2279,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-integration-tests node: @@ -2171,9 +2324,9 @@ services: - name: mysql80 path: /var/lib/mysql - commands: - - /bin/mimir -target=backend + - /bin/mimir -target=backend -alertmanager.grafana-alertmanager-compatibility-enabled environment: {} - image: us.gcr.io/kubernetes-dev/mimir:gotjosh-state-config-grafana-663a0ae78 + image: grafana/mimir:r274-1780c50 name: mimir_backend - environment: {} image: redis:6.2.11-alpine @@ -2184,7 +2337,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.47/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2193,11 +2346,11 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -2207,7 +2360,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -2216,14 +2369,14 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: wire-install - commands: - dockerize -wait tcp://postgres:5432 -timeout 120s @@ -2244,7 +2397,7 @@ steps: GRAFANA_TEST_DB: postgres PGPASSWORD: grafanatest POSTGRES_HOST: postgres - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: postgres-integration-tests - commands: - dockerize -wait tcp://mysql57:3306 -timeout 120s @@ -2265,7 +2418,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql57 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: mysql-5.7-integration-tests - commands: - dockerize -wait tcp://mysql80:3306 -timeout 120s @@ -2286,7 +2439,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql80 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: mysql-8.0-integration-tests - commands: - dockerize -wait tcp://redis:6379 -timeout 120s @@ -2295,13 +2448,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run IntegrationRedis -covermode=atomic -timeout=2m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -run IntegrationRedis -covermode=atomic + -timeout=2m depends_on: - wire-install - wait-for-redis environment: REDIS_URL: redis://redis:6379/0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: redis-integration-tests - commands: - dockerize -wait tcp://memcached:11211 -timeout 120s @@ -2310,13 +2464,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run IntegrationMemcached -covermode=atomic -timeout=2m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -run IntegrationMemcached -covermode=atomic + -timeout=2m depends_on: - wire-install - wait-for-memcached environment: MEMCACHED_HOSTS: memcached:11211 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: memcached-integration-tests - commands: - dockerize -wait tcp://mimir_backend:8080 -timeout 120s @@ -2332,7 +2487,7 @@ steps: environment: AM_TENANT_ID: test AM_URL: http://mimir_backend:8080 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: remote-alertmanager-integration-tests trigger: branch: main @@ -2370,7 +2525,8 @@ depends_on: environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-windows platform: @@ -2385,7 +2541,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.47/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/windows/grabpl.exe -OutFile grabpl.exe image: grafana/ci-wix:0.1.1 name: windows-init @@ -2414,7 +2570,8 @@ depends_on: environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-trigger-downstream node: @@ -2445,7 +2602,7 @@ trigger: - docs/** - latest.json repo: - - grafana/grafana-security-mirror + - grafana/grafana type: docker volumes: - host: @@ -2497,7 +2654,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: publish-docker-public node: @@ -2509,11 +2667,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.47/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2522,7 +2680,7 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - commands: - ./bin/build artifacts docker fetch --edition oss @@ -2603,7 +2761,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: publish-artifacts-public node: @@ -2618,7 +2777,7 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - commands: - ./bin/build artifacts packages --tag $${DRONE_TAG} --src-bucket $${PRERELEASE_BUCKET} @@ -2672,7 +2831,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: publish-npm-packages-public node: @@ -2687,10 +2847,11 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -2737,7 +2898,8 @@ depends_on: environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: publish-packages node: @@ -2752,7 +2914,7 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - depends_on: - compile-build-cmd @@ -2825,7 +2987,8 @@ depends_on: - main-test-backend - main-test-frontend image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-main-prerelease node: @@ -2841,7 +3004,7 @@ steps: environment: _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: from_secret: dagger_token - ALPINE_BASE: alpine:3.18.4 + ALPINE_BASE: alpine:3.19.1 CDN_DESTINATION: from_secret: rgm_cdn_destination DESTINATION: @@ -2858,7 +3021,7 @@ steps: from_secret: gcp_key_base64 GITHUB_TOKEN: from_secret: github_token - GO_VERSION: 1.21.5 + GO_VERSION: 1.21.8 GPG_PASSPHRASE: from_secret: packages_gpg_passphrase GPG_PRIVATE_KEY: @@ -2900,7 +3063,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: release-whatsnew-checker node: @@ -2915,13 +3079,13 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: compile-build-cmd - commands: - ./bin/build whatsnew-checker depends_on: - compile-build-cmd - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: whats-new-checker trigger: event: @@ -2944,7 +3108,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: release-test-frontend node: @@ -2956,10 +3121,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -2999,7 +3165,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: release-test-backend node: @@ -3011,7 +3178,7 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -3021,7 +3188,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -3030,21 +3197,22 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: wire-install - commands: - apk add --update build-base shared-mime-info shared-mime-info-lang - - go test -tags requires_buildifer -short -covermode=atomic -timeout=5m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -tags requires_buildifer -short -covermode=atomic + -timeout=5m depends_on: - wire-install - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: test-backend - commands: - apk add --update build-base @@ -3053,7 +3221,7 @@ steps: | grep -o '\(.*\)/' | sort -u) depends_on: - wire-install - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: test-backend-integration trigger: event: @@ -3076,7 +3244,8 @@ depends_on: - release-test-backend - release-test-frontend image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-tag-prerelease node: @@ -3092,7 +3261,7 @@ steps: environment: _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: from_secret: dagger_token - ALPINE_BASE: alpine:3.18.4 + ALPINE_BASE: alpine:3.19.1 CDN_DESTINATION: from_secret: rgm_cdn_destination DESTINATION: @@ -3109,7 +3278,7 @@ steps: from_secret: gcp_key_base64 GITHUB_TOKEN: from_secret: github_token - GO_VERSION: 1.21.5 + GO_VERSION: 1.21.8 GPG_PASSPHRASE: from_secret: packages_gpg_passphrase GPG_PRIVATE_KEY: @@ -3147,7 +3316,8 @@ clone: depends_on: - rgm-tag-prerelease image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-tag-prerelease-windows platform: @@ -3162,7 +3332,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.47/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/windows/grabpl.exe -OutFile grabpl.exe image: grafana/ci-wix:0.1.1 name: windows-init @@ -3211,7 +3381,8 @@ depends_on: - rgm-tag-prerelease - rgm-tag-prerelease-windows image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-tag-verify-prerelease-assets node: @@ -3256,7 +3427,8 @@ depends_on: - release-test-backend - release-test-frontend image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-version-branch-prerelease node: @@ -3272,7 +3444,7 @@ steps: environment: _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: from_secret: dagger_token - ALPINE_BASE: alpine:3.18.4 + ALPINE_BASE: alpine:3.19.1 CDN_DESTINATION: from_secret: rgm_cdn_destination DESTINATION: @@ -3289,7 +3461,7 @@ steps: from_secret: gcp_key_base64 GITHUB_TOKEN: from_secret: github_token - GO_VERSION: 1.21.5 + GO_VERSION: 1.21.8 GPG_PASSPHRASE: from_secret: packages_gpg_passphrase GPG_PRIVATE_KEY: @@ -3321,7 +3493,8 @@ clone: depends_on: - rgm-version-branch-prerelease image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-prerelease-verify-prerelease-assets node: @@ -3360,7 +3533,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: nightly-test-frontend node: @@ -3372,10 +3546,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -3413,7 +3588,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: nightly-test-backend node: @@ -3425,7 +3601,7 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -3435,7 +3611,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -3444,21 +3620,22 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: wire-install - commands: - apk add --update build-base shared-mime-info shared-mime-info-lang - - go test -tags requires_buildifer -short -covermode=atomic -timeout=5m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -tags requires_buildifer -short -covermode=atomic + -timeout=5m depends_on: - wire-install - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: test-backend - commands: - apk add --update build-base @@ -3467,7 +3644,7 @@ steps: | grep -o '\(.*\)/' | sort -u) depends_on: - wire-install - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: test-backend-integration trigger: cron: @@ -3488,7 +3665,8 @@ depends_on: - nightly-test-backend - nightly-test-frontend image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-nightly-build node: @@ -3504,7 +3682,7 @@ steps: environment: _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: from_secret: dagger_token - ALPINE_BASE: alpine:3.18.4 + ALPINE_BASE: alpine:3.19.1 CDN_DESTINATION: from_secret: rgm_cdn_destination DESTINATION: @@ -3521,7 +3699,7 @@ steps: from_secret: gcp_key_base64 GITHUB_TOKEN: from_secret: github_token - GO_VERSION: 1.21.5 + GO_VERSION: 1.21.8 GPG_PASSPHRASE: from_secret: packages_gpg_passphrase GPG_PRIVATE_KEY: @@ -3595,7 +3773,8 @@ clone: depends_on: - rgm-nightly-build image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-nightly-publish node: @@ -3650,7 +3829,7 @@ steps: environment: _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: from_secret: dagger_token - ALPINE_BASE: alpine:3.18.4 + ALPINE_BASE: alpine:3.19.1 CDN_DESTINATION: from_secret: rgm_cdn_destination DESTINATION: @@ -3667,7 +3846,7 @@ steps: from_secret: gcp_key_base64 GITHUB_TOKEN: from_secret: github_token - GO_VERSION: 1.21.5 + GO_VERSION: 1.21.8 GPG_PASSPHRASE: from_secret: packages_gpg_passphrase GPG_PRIVATE_KEY: @@ -3738,13 +3917,115 @@ volumes: path: /var/run/docker.sock name: docker --- +clone: + retries: 3 +depends_on: [] +image_pull_secrets: +- gcr +- gar +kind: pipeline +name: rgm-promotion +node: + type: no-parallel +platform: + arch: amd64 + os: linux +services: [] +steps: +- commands: + - 'dagger run --silent /src/grafana-build artifacts -a $${ARTIFACTS} --grafana-ref=$${GRAFANA_REF} + --enterprise-ref=$${ENTERPRISE_REF} --grafana-repo=$${GRAFANA_REPO} --version=$${VERSION} ' + environment: + _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: + from_secret: dagger_token + ALPINE_BASE: alpine:3.19.1 + CDN_DESTINATION: + from_secret: rgm_cdn_destination + DESTINATION: + from_secret: destination + DOCKER_PASSWORD: + from_secret: docker_password + DOCKER_USERNAME: + from_secret: docker_username + DOWNLOADS_DESTINATION: + from_secret: rgm_downloads_destination + GCOM_API_KEY: + from_secret: grafana_api_key + GCP_KEY_BASE64: + from_secret: gcp_key_base64 + GITHUB_TOKEN: + from_secret: github_token + GO_VERSION: 1.21.8 + GPG_PASSPHRASE: + from_secret: packages_gpg_passphrase + GPG_PRIVATE_KEY: + from_secret: packages_gpg_private_key + GPG_PUBLIC_KEY: + from_secret: packages_gpg_public_key + NPM_TOKEN: + from_secret: npm_token + STORYBOOK_DESTINATION: + from_secret: rgm_storybook_destination + UBUNTU_BASE: ubuntu:22.04 + image: grafana/grafana-build:main + name: rgm-build + pull: always + volumes: + - name: docker + path: /var/run/docker.sock +- commands: + - printenv GCP_KEY_BASE64 | base64 -d > /tmp/key.json + - gcloud auth activate-service-account --key-file=/tmp/key.json + - gcloud storage cp -r dist/* $${UPLOAD_TO} + environment: + _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: + from_secret: dagger_token + CDN_DESTINATION: + from_secret: rgm_cdn_destination + DESTINATION: + from_secret: destination + DOCKER_PASSWORD: + from_secret: docker_password + DOCKER_USERNAME: + from_secret: docker_username + DOWNLOADS_DESTINATION: + from_secret: rgm_downloads_destination + GCOM_API_KEY: + from_secret: grafana_api_key + GCP_KEY_BASE64: + from_secret: gcp_key_base64 + GITHUB_TOKEN: + from_secret: github_token + GPG_PASSPHRASE: + from_secret: packages_gpg_passphrase + GPG_PRIVATE_KEY: + from_secret: packages_gpg_private_key + GPG_PUBLIC_KEY: + from_secret: packages_gpg_public_key + NPM_TOKEN: + from_secret: npm_token + STORYBOOK_DESTINATION: + from_secret: rgm_storybook_destination + image: google/cloud-sdk:alpine + name: rgm-copy +trigger: + event: + - promote + target: upload-packages +type: docker +volumes: +- host: + path: /var/run/docker.sock + name: docker +--- clone: disable: true depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: testing-test-backend-windows platform: @@ -3764,20 +4045,20 @@ steps: - commands: [] depends_on: - clone - image: golang:1.21.5-windowsservercore-1809 + image: golang:1.21.8-windowsservercore-1809 name: windows-init - commands: - go install github.com/google/wire/cmd/wire@v0.5.0 - wire gen -tags oss ./pkg/server depends_on: - windows-init - image: golang:1.21.5-windowsservercore-1809 + image: golang:1.21.8-windowsservercore-1809 name: wire-install - commands: - go test -tags requires_buildifer -short -covermode=atomic -timeout=5m ./pkg/... depends_on: - wire-install - image: golang:1.21.5-windowsservercore-1809 + image: golang:1.21.8-windowsservercore-1809 name: test-backend trigger: event: @@ -3796,7 +4077,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: integration-tests node: @@ -3840,9 +4122,9 @@ services: - name: mysql80 path: /var/lib/mysql - commands: - - /bin/mimir -target=backend + - /bin/mimir -target=backend -alertmanager.grafana-alertmanager-compatibility-enabled environment: {} - image: us.gcr.io/kubernetes-dev/mimir:gotjosh-state-config-grafana-663a0ae78 + image: grafana/mimir:r274-1780c50 name: mimir_backend - environment: {} image: redis:6.2.11-alpine @@ -3853,13 +4135,13 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.47/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.4 + image: alpine:3.19.1 name: identify-runner - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -3869,7 +4151,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -3878,14 +4160,14 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: wire-install - commands: - dockerize -wait tcp://postgres:5432 -timeout 120s @@ -3906,7 +4188,7 @@ steps: GRAFANA_TEST_DB: postgres PGPASSWORD: grafanatest POSTGRES_HOST: postgres - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: postgres-integration-tests - commands: - dockerize -wait tcp://mysql57:3306 -timeout 120s @@ -3927,7 +4209,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql57 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: mysql-5.7-integration-tests - commands: - dockerize -wait tcp://mysql80:3306 -timeout 120s @@ -3948,7 +4230,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql80 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: mysql-8.0-integration-tests - commands: - dockerize -wait tcp://redis:6379 -timeout 120s @@ -3957,13 +4239,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run IntegrationRedis -covermode=atomic -timeout=2m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -run IntegrationRedis -covermode=atomic + -timeout=2m depends_on: - wire-install - wait-for-redis environment: REDIS_URL: redis://redis:6379/0 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: redis-integration-tests - commands: - dockerize -wait tcp://memcached:11211 -timeout 120s @@ -3972,13 +4255,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run IntegrationMemcached -covermode=atomic -timeout=2m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -run IntegrationMemcached -covermode=atomic + -timeout=2m depends_on: - wire-install - wait-for-memcached environment: MEMCACHED_HOSTS: memcached:11211 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: memcached-integration-tests - commands: - dockerize -wait tcp://mimir_backend:8080 -timeout 120s @@ -3994,7 +4278,7 @@ steps: environment: AM_TENANT_ID: test AM_URL: http://mimir_backend:8080 - image: golang:1.21.5-alpine3.18 + image: golang:1.21.8-alpine name: remote-alertmanager-integration-tests trigger: event: @@ -4019,7 +4303,8 @@ clone: disable: true depends_on: [] image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: publish-ci-windows-test-image platform: @@ -4347,17 +4632,17 @@ steps: path: /root/.docker/ - commands: - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM alpine/git:2.40.1 - - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM golang:1.21.5-alpine3.18 + - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM golang:1.21.8-alpine - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM node:20.9.0-alpine - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM google/cloud-sdk:431.0.0 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM grafana/grafana-ci-deploy:1.3.3 - - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM alpine:3.18.4 + - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM alpine:3.19.1 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM ubuntu:22.04 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM byrnedo/alpine-curl:0.1.8 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM plugins/slack - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM python:3.8 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM postgres:12.3-alpine - - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM us.gcr.io/kubernetes-dev/mimir:gotjosh-state-config-grafana-663a0ae78 + - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM grafana/mimir:r274-1780c50 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM mysql:5.7.39 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM mysql:8.0.32 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM redis:6.2.11-alpine @@ -4370,6 +4655,7 @@ steps: - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM cypress/included:13.1.0 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM jwilder/dockerize:0.6.1 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM koalaman/shellcheck:stable + - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM mcr.microsoft.com/playwright:v1.42.1-jammy depends_on: - authenticate-gcr image: aquasec/trivy:0.21.0 @@ -4381,17 +4667,17 @@ steps: path: /root/.docker/ - commands: - trivy --exit-code 1 --severity HIGH,CRITICAL alpine/git:2.40.1 - - trivy --exit-code 1 --severity HIGH,CRITICAL golang:1.21.5-alpine3.18 + - trivy --exit-code 1 --severity HIGH,CRITICAL golang:1.21.8-alpine - trivy --exit-code 1 --severity HIGH,CRITICAL node:20.9.0-alpine - trivy --exit-code 1 --severity HIGH,CRITICAL google/cloud-sdk:431.0.0 - trivy --exit-code 1 --severity HIGH,CRITICAL grafana/grafana-ci-deploy:1.3.3 - - trivy --exit-code 1 --severity HIGH,CRITICAL alpine:3.18.4 + - trivy --exit-code 1 --severity HIGH,CRITICAL alpine:3.19.1 - trivy --exit-code 1 --severity HIGH,CRITICAL ubuntu:22.04 - trivy --exit-code 1 --severity HIGH,CRITICAL byrnedo/alpine-curl:0.1.8 - trivy --exit-code 1 --severity HIGH,CRITICAL plugins/slack - trivy --exit-code 1 --severity HIGH,CRITICAL python:3.8 - trivy --exit-code 1 --severity HIGH,CRITICAL postgres:12.3-alpine - - trivy --exit-code 1 --severity HIGH,CRITICAL us.gcr.io/kubernetes-dev/mimir:gotjosh-state-config-grafana-663a0ae78 + - trivy --exit-code 1 --severity HIGH,CRITICAL grafana/mimir:r274-1780c50 - trivy --exit-code 1 --severity HIGH,CRITICAL mysql:5.7.39 - trivy --exit-code 1 --severity HIGH,CRITICAL mysql:8.0.32 - trivy --exit-code 1 --severity HIGH,CRITICAL redis:6.2.11-alpine @@ -4404,6 +4690,7 @@ steps: - trivy --exit-code 1 --severity HIGH,CRITICAL cypress/included:13.1.0 - trivy --exit-code 1 --severity HIGH,CRITICAL jwilder/dockerize:0.6.1 - trivy --exit-code 1 --severity HIGH,CRITICAL koalaman/shellcheck:stable + - trivy --exit-code 1 --severity HIGH,CRITICAL mcr.microsoft.com/playwright:v1.42.1-jammy depends_on: - authenticate-gcr environment: @@ -4458,7 +4745,13 @@ get: name: .dockerconfigjson path: secret/data/common/gcr kind: secret -name: dockerconfigjson +name: gcr +--- +get: + name: .dockerconfigjson + path: secret/data/common/gar +kind: secret +name: gar --- get: name: pat @@ -4629,6 +4922,6 @@ kind: secret name: gcr_credentials --- kind: signature -hmac: d7e383e4bf37190a97d695ef8f91755cb8cb70fb8088a5c1f63262adcf8e4f5e +hmac: feb0603ccd1169c54e142a4b0105bc6d2805e5e0f4d8f0e1b0edd95d41d450b9 ... diff --git a/.eslintrc b/.eslintrc index 1403b7bc7d716..07e7cfc40645d 100644 --- a/.eslintrc +++ b/.eslintrc @@ -96,10 +96,30 @@ }, { "files": [ + "public/app/plugins/datasource/grafana-postgresql-datasource/*.{ts,tsx}", + "public/app/plugins/datasource/grafana-postgresql-datasource/**/*.{ts,tsx}", + "public/app/plugins/datasource/grafana-pyroscope-datasource/*.{ts,tsx}", + "public/app/plugins/datasource/grafana-pyroscope-datasource/**/*.{ts,tsx}", "public/app/plugins/datasource/grafana-testdata-datasource/*.{ts,tsx}", "public/app/plugins/datasource/grafana-testdata-datasource/**/*.{ts,tsx}", + "public/app/plugins/datasource/azuremonitor/*.{ts,tsx}", + "public/app/plugins/datasource/azuremonitor/**/*.{ts,tsx}", + "public/app/plugins/datasource/cloud-monitoring/*.{ts,tsx}", + "public/app/plugins/datasource/cloud-monitoring/**/*.{ts,tsx}", + "public/app/plugins/datasource/mysql/*.{ts,tsx}", + "public/app/plugins/datasource/mysql/**/*.{ts,tsx}", "public/app/plugins/datasource/parca/*.{ts,tsx}", - "public/app/plugins/datasource/parca/**/*.{ts,tsx}" + "public/app/plugins/datasource/parca/**/*.{ts,tsx}", + "public/app/plugins/datasource/tempo/*.{ts,tsx}", + "public/app/plugins/datasource/tempo/**/*.{ts,tsx}", + "public/app/plugins/datasource/loki/*.{ts,tsx}", + "public/app/plugins/datasource/loki/**/*.{ts,tsx}", + "public/app/plugins/datasource/elasticsearch/*.{ts,tsx}", + "public/app/plugins/datasource/elasticsearch/**/*.{ts,tsx}", + "public/app/plugins/datasource/cloudwatch/*.{ts,tsx}", + "public/app/plugins/datasource/cloudwatch/**/*.{ts,tsx}", + "public/app/plugins/datasource/zipkin/*.{ts,tsx}", + "public/app/plugins/datasource/zipkin/**/*.{ts,tsx}" ], "settings": { "import/resolver": { @@ -115,8 +135,8 @@ "zones": [ { "target": "./public/app/plugins", - "from": "./public/app", - "except": ["./plugins"], + "from": "./public", + "except": ["./app/plugins"], "message": "Core plugins are not allowed to depend on Grafana core packages" } ] diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b9e0ee5c1fb64..7ce2a910e6d80 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -13,13 +13,11 @@ # Documentation /.changelog-archive @grafana/grafana-release-guild -/.codespellignore @grafana/docs-tooling /CHANGELOG.md @grafana/grafana-release-guild /CODE_OF_CONDUCT.md @grafana/grafana-community-support /CONTRIBUTING.md @grafana/grafana-community-support /GOVERNANCE.md @RichiH /HALL_OF_FAME.md @grafana/grafana-community-support -/ISSUE_TRIAGE.md @grafana/grafana-community-support /LICENSE @torkelo /LICENSING.md @torkelo /MAINTAINERS.md @RichiH @@ -28,36 +26,42 @@ /ROADMAP.md @torkelo /SECURITY.md @grafana/security-team /SUPPORT.md @torkelo -/UPGRADING_DEPENDENCIES.md @grafana/docs-grafana /WORKFLOW.md @torkelo /contribute/ @grafana/grafana-community-support +/contribute/UPGRADING_DEPENDENCIES.md @grafana/docs-grafana /devenv/README.md @grafana/docs-grafana -# Technical documentation +# START Technical documentation # `make docs` procedure and related workflows are owned @grafana/docs-tooling. Slack #docs. -# Documentation sources might have different owners. -/docs/ @grafana/docs-tooling -/docs/sources/ @Eve832 -/docs/sources/administration/ @jdbaldry -/docs/sources/alerting/ @brendamuir -/docs/sources/dashboards/ @imatwawana -/docs/sources/datasources/ @lwandz13 -/docs/sources/explore/ @grafana/explore-squad -/docs/sources/fundamentals @chri2547 -/docs/sources/getting-started/ @chri2547 -/docs/sources/introduction/ @chri2547 -/docs/sources/old-alerting/ @brendamuir -/docs/sources/panels-visualizations/ @imatwawana +/docs/ @grafana/docs-tooling + +/docs/.codespellignore @grafana/docs-tooling +/docs/sources/ @Eve832 + +/docs/sources/administration/ @jdbaldry @lwandz13 +/docs/sources/alerting/ @brendamuir +/docs/sources/dashboards/ @imatwawana +/docs/sources/datasources/ @jdbaldry +/docs/sources/explore/ @grafana/explore-squad +/docs/sources/fundamentals @chri2547 +/docs/sources/getting-started/ @chri2547 +/docs/sources/introduction/ @chri2547 +/docs/sources/panels-visualizations/ @imatwawana +/docs/sources/release-notes/ @Eve832 @GrafanaWriter +/docs/sources/setup-grafana/ @chri2547 +/docs/sources/upgrade-guide/ @imatwawana +/docs/sources/whatsnew/ @imatwawana + +/docs/sources/developers/plugins/ @Eve832 @josmperez @grafana/plugins-platform-frontend @grafana/plugins-platform-backend + /docs/sources/panels-visualizations/query-transform-data/transform-data/index.md @imatwawana @baldm0mma -/docs/sources/release-notes/ @Eve832 @GrafanaWriter -/docs/sources/setup-grafana/ @chri2547 -/docs/sources/upgrade-guide/ @imatwawana -/docs/sources/whatsnew/ @imatwawana -/docs/sources/developers/plugins/ @Eve832 @josmperez @grafana/plugins-platform-frontend @grafana/plugins-platform-backend +# END Technical documentation # Backend code /go.mod @grafana/backend-platform /go.sum @grafana/backend-platform +/go.work @grafana/grafana-app-platform-squad +/go.work.sum @grafana/grafana-app-platform-squad /.bingo/ @grafana/backend-platform /pkg/README.md @grafana/backend-platform /pkg/ruleguard.rules.go @grafana/backend-platform @@ -98,6 +102,9 @@ /pkg/mocks/ @grafana/backend-platform /pkg/models/ @grafana/backend-platform /pkg/server/ @grafana/backend-platform +/pkg/apiserver @grafana/grafana-app-platform-squad +/pkg/apimachinery @grafana/grafana-app-platform-squad +/pkg/promlib @grafana/observability-metrics /pkg/services/annotations/ @grafana/backend-platform /pkg/services/apikey/ @grafana/identity-access-team /pkg/services/cleanup/ @grafana/backend-platform @@ -108,7 +115,7 @@ /pkg/services/dashboardversion/ @grafana/backend-platform /pkg/services/encryption/ @grafana/backend-platform /pkg/services/folder/ @grafana/backend-platform -/pkg/services/grafana-apiserver @grafana/grafana-app-platform-squad +/pkg/services/apiserver @grafana/grafana-app-platform-squad /pkg/services/hooks/ @grafana/backend-platform /pkg/services/kmsproviders/ @grafana/backend-platform /pkg/services/licensing/ @grafana/backend-platform @@ -142,11 +149,9 @@ /pkg/tests/apis/ @grafana/grafana-app-platform-squad /pkg/tests/api/correlations/ @grafana/explore-squad /pkg/tsdb/grafanads/ @grafana/backend-platform -/pkg/tsdb/intervalv2/ @grafana/backend-platform /pkg/tsdb/legacydata/ @grafana/backend-platform /pkg/tsdb/opentsdb/ @grafana/backend-platform /pkg/tsdb/sqleng/ @grafana/partner-datasources @grafana/oss-big-tent -/pkg/tsdb/sqleng/proxyutil @grafana/hosted-grafana-team /pkg/util/ @grafana/backend-platform /pkg/web/ @grafana/backend-platform @@ -166,7 +171,6 @@ /devenv/bulk-dashboards/ @grafana/dashboards-squad /devenv/bulk-folders/ @grafana/grafana-frontend-platform -/devenv/bulk_alerting_dashboards/ @grafana/alerting-backend-product /devenv/create_docker_compose.sh @grafana/backend-platform /devenv/dashboards.yaml @grafana/dashboards-squad /devenv/datasources.yaml @grafana/backend-platform @@ -185,13 +189,13 @@ /devenv/docker/blocks/influxdb1/ @grafana/observability-metrics /devenv/docker/blocks/jaeger/ @grafana/observability-traces-and-profiling /devenv/docker/blocks/maildev/ @grafana/alerting-frontend -/devenv/docker/blocks/mariadb/ @grafana/grafana-bi-squad +/devenv/docker/blocks/mariadb/ @grafana/oss-big-tent /devenv/docker/blocks/memcached/ @grafana/backend-platform /devenv/docker/blocks/mimir_backend/ @grafana/alerting-backend-product -/devenv/docker/blocks/mssql/ @grafana/grafana-bi-squad -/devenv/docker/blocks/mssql_arm64/ @grafana/grafana-bi-squad -/devenv/docker/blocks/mssql_tests/ @grafana/grafana-bi-squad -/devenv/docker/blocks/mssql_tls/ @grafana/grafana-bi-squad +/devenv/docker/blocks/mssql/ @grafana/partner-datasources +/devenv/docker/blocks/mssql_arm64/ @grafana/partner-datasources +/devenv/docker/blocks/mssql_tests/ @grafana/partner-datasources +/devenv/docker/blocks/mssql_tls/ @grafana/partner-datasources /devenv/docker/blocks/mysql/ @grafana/oss-big-tent /devenv/docker/blocks/mysql_exporter/ @grafana/oss-big-tent /devenv/docker/blocks/mysql_opendata/ @grafana/oss-big-tent @@ -271,21 +275,19 @@ /pkg/services/searchV2/ @grafana/grafana-app-platform-squad /pkg/services/store/ @grafana/grafana-app-platform-squad /pkg/infra/filestorage/ @grafana/grafana-app-platform-squad -/pkg/util/converter/ @grafana/grafana-app-platform-squad /pkg/modules/ @grafana/grafana-app-platform-squad -/pkg/kindsysreport/ @grafana/grafana-app-platform-squad /pkg/services/grpcserver/ @grafana/grafana-app-platform-squad +/pkg/generated @grafana/grafana-app-platform-squad # Alerting /pkg/services/ngalert/ @grafana/alerting-backend-product /pkg/services/sqlstore/migrations/ualert/ @grafana/alerting-backend-product -/pkg/services/alerting/ @grafana/alerting-backend-product /pkg/tests/api/alerting/ @grafana/alerting-backend-product /public/app/features/alerting/ @grafana/alerting-frontend # Library Services -/pkg/services/libraryelements/ @grafana/grafana-frontend-platform -/pkg/services/librarypanels/ @grafana/grafana-frontend-platform +/pkg/services/libraryelements/ @grafana/dashboards-squad +/pkg/services/librarypanels/ @grafana/dashboards-squad # Plugins /pkg/api/pluginproxy/ @grafana/plugins-platform-backend @@ -309,14 +311,15 @@ /public/app/core/internationalization/ @grafana/grafana-frontend-platform /e2e/ @grafana/grafana-frontend-platform /e2e/cloud-plugins-suite/ @grafana/partner-datasources +/e2e/plugin-e2e/plugin-e2e-api-tests/ @grafana/plugins-platform-frontend /packages/ @grafana/grafana-frontend-platform @grafana/plugins-platform-frontend /packages/grafana-e2e-selectors/ @grafana/grafana-frontend-platform /packages/grafana-e2e/ @grafana/grafana-frontend-platform /packages/grafana-ui/.storybook/ @grafana/plugins-platform-frontend /packages/grafana-ui/src/components/ @grafana/grafana-frontend-platform /packages/grafana-ui/src/components/DateTimePickers/ @grafana/grafana-frontend-platform -/packages/grafana-ui/src/components/Table/ @grafana/grafana-bi-squad -/packages/grafana-ui/src/components/Table/SparklineCell.tsx @grafana/grafana-bi-squad @grafana/app-o11y-visualizations +/packages/grafana-ui/src/components/Table/ @grafana/dataviz-squad +/packages/grafana-ui/src/components/Table/SparklineCell.tsx @grafana/dataviz-squad @grafana/app-o11y-visualizations /packages/grafana-ui/src/components/Gauge/ @grafana/dataviz-squad /packages/grafana-ui/src/components/BarGauge/ @grafana/dataviz-squad /packages/grafana-ui/src/components/uPlot/ @grafana/dataviz-squad @@ -331,19 +334,23 @@ /packages/grafana-ui/src/graveyard/GraphNG/ @grafana/dataviz-squad /packages/grafana-ui/src/graveyard/TimeSeries/ @grafana/dataviz-squad /packages/grafana-ui/src/utils/storybook/ @grafana/plugins-platform-frontend -/packages/grafana-data/src/transformations/ @grafana/grafana-bi-squad +/packages/grafana-data/src/transformations/ @grafana/dataviz-squad /packages/grafana-data/src/**/*logs* @grafana/observability-logs /packages/grafana-schema/src/**/*tempo* @grafana/observability-traces-and-profiling /packages/grafana-schema/src/**/*canvas* @grafana/dataviz-squad /packages/grafana-flamegraph/ @grafana/observability-traces-and-profiling /plugins-bundled/ @grafana/plugins-platform-frontend /packages/grafana-plugin-configs/ @grafana/plugins-platform-frontend - +/packages/grafana-prometheus/ @grafana/observability-metrics +/packages/grafana-o11y-ds-frontend/ @grafana/observability-logs @grafana/observability-traces-and-profiling +/packages/grafana-sql/ @grafana/partner-datasources @grafana/oss-big-tent # root files, mostly frontend -.browserslistrc @grafana/frontend-ops -package.json @grafana/frontend-ops -tsconfig.json @grafana/frontend-ops +/.browserslistrc @grafana/frontend-ops +/package.json @grafana/frontend-ops +/nx.json @grafana/frontend-ops +/project.json @grafana/frontend-ops +/tsconfig.json @grafana/frontend-ops /.editorconfig @grafana/frontend-ops /.eslintignore @grafana/frontend-ops /.gitattributes @grafana/frontend-ops @@ -353,34 +360,38 @@ tsconfig.json @grafana/frontend-ops /.yarn @grafana/frontend-ops /.yarnrc.yml @grafana/frontend-ops /yarn.lock @grafana/frontend-ops -/babel.config.json @grafana/frontend-ops -lerna.json @grafana/frontend-ops +/lerna.json @grafana/frontend-ops /.prettierrc.js @grafana/frontend-ops /.eslintrc @grafana/frontend-ops /.vim @zoltanbedi /jest.config.js @grafana/frontend-ops /latest.json @grafana/frontend-ops -/metadata.md @grafana/plugins-platform /stylelint.config.js @grafana/frontend-ops /tools/ @grafana/frontend-ops /lefthook.yml @grafana/frontend-ops /lefthook.rc @grafana/frontend-ops -.husky/pre-commit @grafana/frontend-ops -cypress.config.js @grafana/grafana-frontend-platform -.levignore.js @grafana/plugins-platform-frontend +/.husky/pre-commit @grafana/frontend-ops +/cypress.config.js @grafana/grafana-frontend-platform +/.levignore.js @grafana/plugins-platform-frontend +playwright.config.ts @grafana/plugins-platform-frontend # public folder /public/app/core/ @grafana/grafana-frontend-platform /public/app/core/components/TimePicker/ @grafana/grafana-frontend-platform /public/app/core/components/Layers/ @grafana/dataviz-squad -/public/app/core/components/TraceToLogs @grafana/observability-traces-and-profiling /public/app/core/components/GraphNG/ @grafana/dataviz-squad /public/app/core/components/TimeSeries/ @grafana/dataviz-squad +/public/app/core/components/TimelineChart/ @grafana/dataviz-squad +/public/app/core/components/Form/ @grafana/grafana-frontend-platform /public/app/features/all.ts @grafana/grafana-frontend-platform /public/app/features/admin/ @grafana/identity-access-team + +# Temp owners until Enterprise team takes over +/public/app/features/admin/migrate-to-cloud @grafana/grafana-frontend-platform + /public/app/features/auth-config/ @grafana/identity-access-team -/public/app/features/annotations/ @grafana/grafana-frontend-platform +/public/app/features/annotations/ @grafana/dashboards-squad /public/app/features/api-keys/ @grafana/identity-access-team /public/app/features/canvas/ @grafana/dataviz-squad /public/app/features/geo/ @grafana/dataviz-squad @@ -389,17 +400,17 @@ cypress.config.js @grafana/grafana-frontend-platform /public/app/features/connections/ @grafana/plugins-platform-frontend @mikkancso /public/app/features/correlations/ @grafana/explore-squad /public/app/features/dashboard/ @grafana/dashboards-squad -/public/app/features/dashboard/components/TransformationsEditor/ @grafana/grafana-bi-squad +/public/app/features/dashboard/components/TransformationsEditor/ @grafana/dataviz-squad /public/app/features/dashboard-scene/ @grafana/dashboards-squad /public/app/features/datasources/ @grafana/plugins-platform-frontend @mikkancso /public/app/features/dimensions/ @grafana/dataviz-squad -/public/app/features/dataframe-import/ @grafana/grafana-bi-squad +/public/app/features/dataframe-import/ @grafana/dataviz-squad /public/app/features/explore/ @grafana/explore-squad /public/app/features/expressions/ @grafana/observability-metrics /public/app/features/folders/ @grafana/grafana-frontend-platform /public/app/features/inspector/ @grafana/dashboards-squad /public/app/features/invites/ @grafana/grafana-frontend-platform -/public/app/features/library-panels/ @grafana/grafana-frontend-platform +/public/app/features/library-panels/ @grafana/dashboards-squad /public/app/features/logs/ @grafana/observability-logs /public/app/features/live/ @grafana/grafana-app-platform-squad /public/app/features/manage-dashboards/ @grafana/dashboards-squad @@ -408,12 +419,10 @@ cypress.config.js @grafana/grafana-frontend-platform /public/app/features/panel/ @grafana/dashboards-squad /public/app/features/playlist/ @grafana/dashboards-squad /public/app/features/plugins/ @grafana/plugins-platform-frontend -/public/app/features/plugins/sql/ @grafana/partner-datasources @grafana/oss-big-tent /public/app/features/profile/ @grafana/grafana-frontend-platform /public/app/features/runtime/ @ryantxu /public/app/features/query/ @grafana/dashboards-squad /public/app/features/sandbox/ @grafana/grafana-frontend-platform -/public/app/features/scenes/ @grafana/dashboards-squad /public/app/features/browse-dashboards/ @grafana/grafana-frontend-platform /public/app/features/search/ @grafana/grafana-frontend-platform /public/app/features/serviceaccounts/ @grafana/identity-access-team @@ -421,18 +430,17 @@ cypress.config.js @grafana/grafana-frontend-platform /public/app/features/teams/ @grafana/identity-access-team /public/app/features/templating/ @grafana/dashboards-squad /public/app/features/trails/ @torkelo -/public/app/features/transformers/ @grafana/grafana-bi-squad -/public/app/features/transformers/timeSeriesTable/ @grafana/grafana-bi-squad @grafana/app-o11y-visualizations +/public/app/features/transformers/ @grafana/dataviz-squad +/public/app/features/transformers/timeSeriesTable/ @grafana/dataviz-squad @grafana/app-o11y-visualizations /public/app/features/users/ @grafana/identity-access-team /public/app/features/variables/ @grafana/dashboards-squad -/public/app/plugins/panel/alertGroups/ @grafana/alerting-frontend /public/app/plugins/panel/alertlist/ @grafana/alerting-frontend /public/app/plugins/panel/annolist/ @grafana/grafana-frontend-platform /public/app/plugins/panel/barchart/ @grafana/dataviz-squad /public/app/plugins/panel/bargauge/ @grafana/dataviz-squad /public/app/plugins/panel/dashlist/ @grafana/grafana-frontend-platform /public/app/plugins/panel/debug/ @ryantxu -/public/app/plugins/panel/datagrid/ @grafana/grafana-bi-squad +/public/app/plugins/panel/datagrid/ @grafana/dataviz-squad /public/app/plugins/panel/gauge/ @grafana/dataviz-squad /public/app/plugins/panel/gettingstarted/ @grafana/grafana-frontend-platform /public/app/plugins/panel/graph/ @grafana/dataviz-squad @@ -445,9 +453,9 @@ cypress.config.js @grafana/grafana-frontend-platform /public/app/plugins/panel/piechart/ @grafana/dataviz-squad /public/app/plugins/panel/state-timeline/ @grafana/dataviz-squad /public/app/plugins/panel/status-history/ @grafana/dataviz-squad -/public/app/plugins/panel/table/ @grafana/grafana-bi-squad -/public/app/plugins/panel/table/cells/SparklineCellOptionsEditor.tsx @grafana/grafana-bi-squad @grafana/app-o11y-visualizations -/public/app/plugins/panel/table-old/ @grafana/grafana-bi-squad +/public/app/plugins/panel/table/ @grafana/dataviz-squad +/public/app/plugins/panel/table/cells/SparklineCellOptionsEditor.tsx @grafana/dataviz-squad @grafana/app-o11y-visualizations +/public/app/plugins/panel/table-old/ @grafana/dataviz-squad /public/app/plugins/panel/timeseries/ @grafana/dataviz-squad /public/app/plugins/panel/trend/ @grafana/dataviz-squad /public/app/plugins/panel/geomap/ @grafana/dataviz-squad @@ -463,14 +471,15 @@ cypress.config.js @grafana/grafana-frontend-platform /public/app/routes/ @grafana/grafana-frontend-platform /public/app/store/ @grafana/grafana-frontend-platform /public/app/types/ @grafana/grafana-frontend-platform +/public/app/types/alerting.ts @grafana/alerting-frontend /public/dashboards/ @grafana/dashboards-squad -/public/fonts/ @grafana/alerting-frontend /public/gazetteer/ @ryantxu /public/img/ @grafana/grafana-frontend-platform /public/lib/ @grafana/grafana-frontend-platform /public/lib/monaco-languages/kusto.ts @grafana/partner-datasources /public/maps/ @ryantxu /public/robots.txt @grafana/frontend-ops +/public/fonts/ @grafana/grafana-frontend-platform /public/sass/ @grafana/grafana-frontend-platform /public/test/ @grafana/grafana-frontend-platform /public/test/helpers/alertingRuleEditor.tsx @grafana/alerting-frontend @@ -505,7 +514,7 @@ cypress.config.js @grafana/grafana-frontend-platform /scripts/circle-* @grafana/grafana-release-guild /scripts/publish-npm-packages.sh @grafana/grafana-release-guild @grafana/plugins-platform-frontend /scripts/validate-npm-packages.sh @grafana/grafana-release-guild @grafana/plugins-platform-frontend -/scripts/ci-frontend-metrics.sh @grafana/grafana-frontend-platform @grafana/plugins-platform-frontend @grafana/grafana-bi-squad +/scripts/ci-frontend-metrics.sh @grafana/grafana-frontend-platform @grafana/plugins-platform-frontend @grafana/dataviz-squad /scripts/cli/ @grafana/grafana-frontend-platform /scripts/clean-git-or-error.sh @grafana/grafana-as-code /scripts/grafana-server/ @grafana/grafana-frontend-platform @@ -525,12 +534,13 @@ cypress.config.js @grafana/grafana-frontend-platform /scripts/generate-icon-bundle.js @grafana/plugins-platform-frontend @grafana/grafana-frontend-platform /scripts/levitate-parse-json-report.js @grafana/plugins-platform-frontend -/scripts/docs/generate-transformations.ts @grafana/grafana-bi-squad +/scripts/docs/generate-transformations* @grafana/dataviz-squad /scripts/webpack/ @grafana/frontend-ops /scripts/generate-a11y-report.sh @grafana/grafana-frontend-platform .pa11yci.conf.js @grafana/grafana-frontend-platform .pa11yci-pr.conf.js @grafana/grafana-frontend-platform .betterer.results @grafanabot +.betterer.results.json @grafanabot .betterer.ts @grafana/grafana-frontend-platform # @grafana/ui component documentation @@ -551,7 +561,7 @@ cypress.config.js @grafana/grafana-frontend-platform /public/app/plugins/datasource/jaeger/ @grafana/observability-traces-and-profiling /public/app/plugins/datasource/loki/ @grafana/observability-logs /public/app/plugins/datasource/mixed/ @grafana/dashboards-squad -/public/app/plugins/datasource/mssql/ @grafana/grafana-bi-squad +/public/app/plugins/datasource/mssql/ @grafana/partner-datasources /public/app/plugins/datasource/mysql/ @grafana/oss-big-tent /public/app/plugins/datasource/opentsdb/ @grafana/observability-metrics /public/app/plugins/datasource/grafana-postgresql-datasource/ @grafana/oss-big-tent @@ -599,10 +609,9 @@ cypress.config.js @grafana/grafana-frontend-platform /pkg/services/supportbundles/ @grafana/identity-access-team # Grafana Operator Experience Team -/pkg/infra/httpclient/httpclientprovider/sigv4_middleware.go @grafana/grafana-operator-experience-squad -/pkg/infra/httpclient/httpclientprovider/sigv4_middleware_test.go @grafana/grafana-operator-experience-squad /pkg/services/caching/ @grafana/grafana-operator-experience-squad /pkg/services/featuremgmt/ @grafana/grafana-operator-experience-squad +/pkg/services/cloudmigration/ @grafana/grafana-operator-experience-squad # Kind definitions /kinds/dashboard @grafana/dashboards-squad @@ -616,7 +625,7 @@ embed.go @grafana/grafana-as-code /pkg/registry/apis/ @grafana/grafana-app-platform-squad /pkg/codegen/ @grafana/grafana-as-code /pkg/kinds/*/*_gen.go @grafana/grafana-as-code -/pkg/registry/corekind/ @grafana/grafana-as-code +/pkg/registry/schemas/ @grafana/grafana-as-code /public/app/plugins/*gen.go @grafana/grafana-as-code /cue.mod/ @grafana/grafana-as-code @@ -667,16 +676,17 @@ embed.go @grafana/grafana-as-code /.github/workflows/update-changelog.yml @grafana/grafana-release-guild /.github/workflows/update-make-docs.yml @grafana/docs-tooling /.github/workflows/snyk.yml @grafana/security-team -/.github/workflows/scripts/kinds/verify-kinds.go @grafana/grafana-as-code -/.github/workflows/publish-kinds-next.yml @grafana/grafana-as-code -/.github/workflows/publish-kinds-release.yml @grafana/grafana-as-code -/.github/workflows/verify-kinds.yml @grafana/grafana-as-code +/.github/workflows/scripts/kinds/verify-kinds.go @grafana/platform-cat +/.github/workflows/publish-kinds-next.yml @grafana/platform-cat +/.github/workflows/publish-kinds-release.yml @grafana/platform-cat +/.github/workflows/verify-kinds.yml @grafana/platform-cat /.github/workflows/dashboards-issue-add-label.yml @grafana/dashboards-squad /.github/workflows/ephemeral-instances-pr-comment.yml @grafana/grafana-operator-experience-squad /.github/workflows/ephemeral-instances-pr-opened-closed.yml @grafana/grafana-operator-experience-squad /.github/workflows/create-security-patch-from-security-mirror.yml @grafana/grafana-release-guild /.github/workflows/core-plugins-build-and-release.yml @grafana/plugins-platform-frontend @grafana/plugins-platform-backend -/.github/workflows/i18n-crowdin-fix-files.yml @grafana/grafana-frontend-platform +/.github/workflows/i18n-crowdin-upload.yml @grafana/grafana-frontend-platform +/.github/workflows/i18n-crowdin-download.yml @grafana/grafana-frontend-platform /.github/workflows/feature-toggle-cleanup.yml @tolzhabayev /.github/workflows/scripts/feature-toggle-cleanup/feature-toggle-cleanup.js @tolzhabayev @@ -696,5 +706,4 @@ embed.go @grafana/grafana-as-code /conf/provisioning/alerting/ @grafana/alerting-backend-product /conf/provisioning/dashboards/ @grafana/dashboards-squad /conf/provisioning/datasources/ @grafana/plugins-platform-backend -/conf/provisioning/notifiers/ @bergquist /conf/provisioning/plugins/ @grafana/plugins-platform-backend diff --git a/.github/bot.md b/.github/bot.md index ec745bcf93aa9..9477ab291e27f 100644 --- a/.github/bot.md +++ b/.github/bot.md @@ -9,8 +9,8 @@ Comment commands: Label commands: -* Add label `bot/question` the the bot will close with standard question message and add label `type/question` -* Add label `bot/duplicate` the the bot will close with standard duplicate message and add label `type/duplicate` +* Add label `bot/question` the bot will close with standard question message and add label `type/question` +* Add label `bot/duplicate` the bot will close with standard duplicate message and add label `type/duplicate` * Add label `bot/needs more info` for bot to request more info (or use comment command mentioned above) * Add label `bot/close feature request` for bot to close a feature request with standard message and adds label `not implemented` * Add label `bot/no new info` for bot to close an issue where we asked for more info but has not received any updates in at least 14 days. diff --git a/.github/pr-commands.json b/.github/pr-commands.json index 27ac70337c0ae..0e4f0da1150c3 100644 --- a/.github/pr-commands.json +++ b/.github/pr-commands.json @@ -23,7 +23,6 @@ "package.json", "tsconfig.json", "lerna.json", - ".babelrc", ".prettierrc.js", ".eslintrc", "**/*.mdx" @@ -119,7 +118,7 @@ }, { "type": "changedfiles", - "matches": [ "public/app/plugins/datasource/jaeger"], + "matches": [ "public/app/plugins/datasource/jaeger/**/*"], "action": "updateLabel", "addLabel": "datasource/Jaeger" }, @@ -147,6 +146,18 @@ "action": "updateLabel", "addLabel": "datasource/OpenTSDB" }, + { + "type": "changedfiles", + "matches": [ "public/app/plugins/datasource/parca/**/*"], + "action": "updateLabel", + "addLabel": "datasource/Parca" + }, + { + "type": "changedfiles", + "matches": [ "public/app/plugins/datasource/grafana-pyroscope-datasource/**/*", "pkg/tsdb/grafana-pyroscope-datasource/**/*"], + "action": "updateLabel", + "addLabel": "datasource/grafana-pyroscope" + }, { "type": "changedfiles", "matches": [ "public/app/plugins/datasource/grafana-postgresql-datasource/**/*", "pkg/tsdb/grafana-postgresql-datasource/**/*"], diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 331453813b3c1..f1df23dde1a45 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -6,8 +6,10 @@ "ignoreDeps": [ "history", // we should bump this together with react-router-dom (see https://github.com/grafana/grafana/issues/76744) "react-router-dom", // we should bump this together with history (see https://github.com/grafana/grafana/issues/76744) + "loader-utils", // v3 requires upstream changes in ngtemplate-loader. ignore, and remove when we remove angular. "monaco-editor", // due to us exposing this via @grafana/ui/CodeEditor's props bumping can break plugins - "react-hook-form", // due to us exposing these hooks via @grafana/ui form components bumping can break plugins + "@fingerprintjs/fingerprintjs", // we don't want to bump to v4 due to licensing changes + "@swc/core", // versions ~1.4.5 contain multiple bugs related to baseUrl resolution breaking builds. ], "includePaths": ["package.json", "packages/**", "public/app/plugins/**"], "ignorePaths": ["emails/**", "plugins-bundled/**", "**/mocks/**", "packages/grafana-e2e/**"], @@ -15,10 +17,10 @@ "postUpdateOptions": ["yarnDedupeHighest"], "packageRules": [ { + "automerge": true, + "matchCurrentVersion": "!/^0/", "matchUpdateTypes": ["patch"], - "excludePackagePatterns": ["^@?storybook", "^@locker"], - "extends": ["schedule:monthly"], - "groupName": "Monthly patch updates" + "excludePackagePatterns": ["^@?storybook", "^@locker"] }, { "matchPackagePatterns": ["^@?storybook"], diff --git a/.github/workflows/alerting-swagger-gen.yml b/.github/workflows/alerting-swagger-gen.yml index 54b984bb56318..5e7b7baa99eba 100644 --- a/.github/workflows/alerting-swagger-gen.yml +++ b/.github/workflows/alerting-swagger-gen.yml @@ -16,7 +16,7 @@ jobs: - name: Set go version uses: actions/setup-go@v4 with: - go-version: '1.21.5' + go-version: '1.21.8' - name: Build swagger run: | make -C pkg/services/ngalert/api/tooling post.json api.json diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index a6bfe311ef865..eb71b7f8f5e00 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -47,7 +47,7 @@ jobs: name: Set go version uses: actions/setup-go@v4 with: - go-version: '1.21.5' + go-version: '1.21.8' # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL @@ -67,3 +67,4 @@ jobs: - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 + if: github.repository == 'grafana/grafana' diff --git a/.github/workflows/core-plugins-build-and-release.yml b/.github/workflows/core-plugins-build-and-release.yml index aa1136569bf08..77046482b9724 100644 --- a/.github/workflows/core-plugins-build-and-release.yml +++ b/.github/workflows/core-plugins-build-and-release.yml @@ -1,3 +1,5 @@ +name: Build and release core plugins + on: workflow_dispatch: inputs: @@ -6,7 +8,13 @@ on: required: true type: choice options: + - grafana-azure-monitor-datasource + - grafana-pyroscope-datasource - grafana-testdata-datasource + - parca + - stackdriver + - tempo + - zipkin concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}-${{ inputs.plugin_id }} @@ -59,7 +67,12 @@ jobs: shell: bash id: get_dir run: | - dir=$(find public/app/plugins -name ${{ inputs.plugin_id }} -print -quit) + dir=$(dirname \ + $(egrep -lir --include=plugin.json --exclude-dir=dist \ + '"id": "${{ inputs.plugin_id }}"' \ + public/app/plugins \ + ) \ + ) echo "dir=${dir}" >> $GITHUB_OUTPUT - name: Install frontend dependencies shell: bash @@ -77,7 +90,7 @@ jobs: id: check_backend shell: bash run: | - if [ -d ./pkg/tsdb/${{ inputs.plugin_id }} ]; then + if egrep -qr --include=main.go 'datasource.Manage\("${{ inputs.plugin_id }}"' pkg/tsdb; then echo "has_backend=true" >> $GITHUB_OUTPUT else echo "has_backend=false" >> $GITHUB_OUTPUT @@ -172,7 +185,7 @@ jobs: exit 1 fi - name: store build artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: build-artifacts path: ${{ steps.get_dir.outputs.dir }}/ci/packages/*.zip @@ -188,6 +201,7 @@ jobs: gsutil -m cp -r ci/packages/*darwin* gs://${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/darwin gsutil -m cp -r ci/packages/*any* gs://${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/any - name: Publish new plugin version on grafana.com + if: steps.check_backend.outputs.has_backend == 'true' working-directory: ${{ steps.get_dir.outputs.dir }} env: GCOM_TOKEN: ${{ env.PLUGINS_GCOM_TOKEN }} @@ -228,4 +242,27 @@ jobs: echo "Failed to publish plugin version. Got:" echo $result exit 1 - fi \ No newline at end of file + fi + - name: Publish new plugin version on grafana.com (frontend only) + if: steps.check_backend.outputs.has_backend == 'false' + working-directory: ${{ steps.get_dir.outputs.dir }} + env: + GCOM_TOKEN: ${{ env.PLUGINS_GCOM_TOKEN }} + VERSION: ${{ steps.build_frontend.outputs.version }} + run: | + echo "Publish new plugin version on grafana.com:" + echo "Plugin version: ${VERSION}" + result=`curl -H "Authorization: Bearer $GCOM_TOKEN" -H "Content-Type: application/json" ${{ env.GCOM_API}}/api/plugins -d "{ + \"url\": \"https://github.com/grafana/grafana/tree/main/${{ steps.get_dir.outputs.dir }}\", + \"download\": { + \"any\": { + \"url\": \"https://storage.googleapis.com/${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/any/${{ inputs.plugin_id }}-${VERSION}.any.zip\", + \"md5\": \"$(cat ci/packages/info-any.json | jq -r .plugin.md5)\" + } + } + }"` + if [[ "$(echo $result | jq -r .version)" == "null" ]]; then + echo "Failed to publish plugin version. Got:" + echo $result + exit 1 + fi diff --git a/.github/workflows/create-security-patch-from-security-mirror.yml b/.github/workflows/create-security-patch-from-security-mirror.yml index 413addb6827dc..e187149b8b47c 100644 --- a/.github/workflows/create-security-patch-from-security-mirror.yml +++ b/.github/workflows/create-security-patch-from-security-mirror.yml @@ -1,5 +1,5 @@ -# Owned by grafana-delivery-squad -# Intended to be dropped into the base repo (Ex: grafana/grafana) for use in the security mirror. +# Owned by grafana-release-guild +# Intended to be dropped into the base repo (Ex: grafana/grafana) for use in the security mirror. name: Create security patch run-name: create-security-patch on: @@ -17,7 +17,7 @@ jobs: trigger_downstream_create_security_patch: concurrency: create-patch-${{ github.ref_name }} uses: grafana/security-patch-actions/.github/workflows/create-patch.yml@main - if: github.repository == 'grafana/grafana-security-mirror' + if: github.repository == 'grafana/grafana-security-mirror' with: repo: "${{ github.repository }}" src_ref: "${{ github.head_ref }}" # this is the source branch name, Ex: "feature/newthing" diff --git a/.github/workflows/detect-breaking-changes-build-skip.yml b/.github/workflows/detect-breaking-changes-build-skip.yml deleted file mode 100644 index 58e3cb5642451..0000000000000 --- a/.github/workflows/detect-breaking-changes-build-skip.yml +++ /dev/null @@ -1,34 +0,0 @@ -# Workflow for skipping the Levitate detection -# (This is needed because workflows that are skipped due to path filtering will show up as pending in Github. -# As this has the same name as the one in detect-breaking-changes-build.yml it will take over in these cases and succeed quickly.) - -name: Levitate / Detect breaking changes - -on: - pull_request: - paths-ignore: - - "packages/**" - branches: - - 'main' - -jobs: - detect: - name: Detect breaking changes - runs-on: ubuntu-latest - - steps: - - name: Skipping - run: echo "No modifications in the public API (packages/), skipping." - - # Build and persist output as a JSON (we need to tell the report workflow that the check has been skipped) - - name: Persisting the check output - run: | - mkdir -p ./levitate - echo "{ \"shouldSkip\": true }" > ./levitate/result.json - - # Upload artifact (so it can be used in the more privileged "report" workflow) - - name: Upload check output as artifact - uses: actions/upload-artifact@v3 - with: - name: levitate - path: levitate/ diff --git a/.github/workflows/detect-breaking-changes-build.yml b/.github/workflows/detect-breaking-changes-build.yml deleted file mode 100644 index 27d119d638e13..0000000000000 --- a/.github/workflows/detect-breaking-changes-build.yml +++ /dev/null @@ -1,163 +0,0 @@ -# Only runs if anything under the packages/ directory changes. -# (Otherwise detect-breaking-changes-build-skip.yml takes over) - -name: Levitate / Detect breaking changes - -on: - pull_request: - paths: - - 'packages/**' - branches: - - 'main' - -jobs: - buildPR: - name: Build PR - runs-on: ubuntu-latest - defaults: - run: - working-directory: './pr' - - steps: - - uses: actions/checkout@v4 - with: - path: './pr' - - uses: actions/setup-node@v4 - with: - node-version: 20.9.0 - - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT - - - name: Restore yarn cache - uses: actions/cache@v3.3.1 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }} - restore-keys: | - yarn-cache-folder- - - - name: Install dependencies - run: yarn install --immutable - - - name: Build packages - run: yarn packages:build - - - name: Pack packages - run: yarn packages:pack --out ./%s.tgz - - - name: Zip built tarballed packages - run: zip -r ./pr_built_packages.zip ./packages/**/*.tgz - - - name: Upload build output as artifact - uses: actions/upload-artifact@v3 - with: - name: buildPr - path: './pr/pr_built_packages.zip' - - buildBase: - name: Build Base - runs-on: ubuntu-latest - defaults: - run: - working-directory: './base' - - steps: - - uses: actions/checkout@v4 - with: - path: './base' - ref: ${{ github.event.pull_request.base.ref }} - - - uses: actions/setup-node@v4 - with: - node-version: 20.9.0 - - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT - - - name: Restore yarn cache - uses: actions/cache@v3.3.1 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }} - restore-keys: | - yarn-cache-folder- - - - name: Install dependencies - run: yarn install --immutable - - - name: Build packages - run: yarn packages:build - - - name: Pack packages - run: yarn packages:pack --out ./%s.tgz - - - name: Zip built tarballed packages - run: zip -r ./base_built_packages.zip ./packages/**/*.tgz - - - name: Upload build output as artifact - uses: actions/upload-artifact@v3 - with: - name: buildBase - path: './base/base_built_packages.zip' - - Detect: - name: Detect breaking changes - runs-on: ubuntu-latest - needs: ['buildPR', 'buildBase'] - env: - GITHUB_STEP_NUMBER: 8 - - steps: - - uses: actions/checkout@v4 - - - name: Get built packages from pr - uses: actions/download-artifact@v3 - with: - name: buildPr - - - name: Get built packages from base - uses: actions/download-artifact@v3 - with: - name: buildBase - - - name: Unzip artifact from pr - run: unzip -j pr_built_packages.zip -d ./pr && rm pr_built_packages.zip - - - name: Unzip artifact from base - run: unzip -j base_built_packages.zip -d ./base && rm base_built_packages.zip - - - name: Get link for the Github Action job - id: job - uses: actions/github-script@v6 - with: - script: | - const name = 'Detect breaking changes'; - const script = require('./.github/workflows/scripts/pr-get-job-link.js') - await script({name, github, context, core}) - - - name: Detect breaking changes - id: breaking-changes - run: ./scripts/check-breaking-changes.sh - env: - FORCE_COLOR: 3 - GITHUB_JOB_LINK: ${{ steps.job.outputs.link }} - - - name: Persisting the check output - run: | - mkdir -p ./levitate - echo "{ \"exit_code\": ${{ steps.breaking-changes.outputs.is_breaking }}, \"message\": \"${{ steps.breaking-changes.outputs.message }}\", \"job_link\": \"${{ steps.job.outputs.link }}#step:${GITHUB_STEP_NUMBER}:1\", \"pr_number\": \"${{ github.event.pull_request.number }}\" }" > ./levitate/result.json - - - name: Upload check output as artifact - uses: actions/upload-artifact@v3 - with: - name: levitate - path: levitate/ - - - name: Exit - run: exit ${{ steps.breaking-changes.outputs.is_breaking }} - shell: bash diff --git a/.github/workflows/detect-breaking-changes-levitate.yml b/.github/workflows/detect-breaking-changes-levitate.yml new file mode 100644 index 0000000000000..6ef0ac3514a68 --- /dev/null +++ b/.github/workflows/detect-breaking-changes-levitate.yml @@ -0,0 +1,340 @@ +# Only runs if anything under the packages/ directory changes. +--- +name: Levitate / Detect breaking changes in PR + +on: + pull_request: + paths: + - 'packages/**' + branches: + - 'main' + +jobs: + buildPR: + name: Build PR + runs-on: ubuntu-latest + defaults: + run: + working-directory: './pr' + + steps: + - uses: actions/checkout@v4 + with: + path: './pr' + - uses: actions/setup-node@v4 + with: + node-version: 20.9.0 + + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT + + - name: Restore yarn cache + uses: actions/cache@v4 + id: yarn-cache + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }} + restore-keys: | + yarn-cache-folder- + + - name: Install dependencies + run: yarn install --immutable + + - name: Build packages + run: yarn packages:build + + - name: Pack packages + run: yarn packages:pack --out ./%s.tgz + + - name: Zip built tarballed packages + run: zip -r ./pr_built_packages.zip ./packages/**/*.tgz + + - name: Upload build output as artifact + uses: actions/upload-artifact@v4 + with: + name: buildPr + path: './pr/pr_built_packages.zip' + + buildBase: + name: Build Base + runs-on: ubuntu-latest + defaults: + run: + working-directory: './base' + + steps: + - uses: actions/checkout@v4 + with: + path: './base' + ref: ${{ github.event.pull_request.base.ref }} + + - uses: actions/setup-node@v4 + with: + node-version: 20.9.0 + + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT + + - name: Restore yarn cache + uses: actions/cache@v4 + id: yarn-cache + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }} + restore-keys: | + yarn-cache-folder- + + - name: Install dependencies + run: yarn install --immutable + + - name: Build packages + run: yarn packages:build + + - name: Pack packages + run: yarn packages:pack --out ./%s.tgz + + - name: Zip built tarballed packages + run: zip -r ./base_built_packages.zip ./packages/**/*.tgz + + - name: Upload build output as artifact + uses: actions/upload-artifact@v4 + with: + name: buildBase + path: './base/base_built_packages.zip' + + Detect: + name: Detect breaking changes + runs-on: ubuntu-latest + needs: ['buildPR', 'buildBase'] + env: + GITHUB_STEP_NUMBER: 8 + + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20.9.0 + + - name: Get built packages from pr + uses: actions/download-artifact@v4 + with: + name: buildPr + + - name: Get built packages from base + uses: actions/download-artifact@v4 + with: + name: buildBase + + - name: Unzip artifact from pr + run: unzip -j pr_built_packages.zip -d ./pr && rm pr_built_packages.zip + + - name: Unzip artifact from base + run: unzip -j base_built_packages.zip -d ./base && rm base_built_packages.zip + + - name: Get link for the Github Action job + id: job + uses: actions/github-script@v6 + with: + script: | + const name = 'Detect breaking changes'; + const script = require('./.github/workflows/scripts/pr-get-job-link.js') + await script({name, github, context, core}) + + - name: Detect breaking changes + id: breaking-changes + run: ./scripts/check-breaking-changes.sh + env: + FORCE_COLOR: 3 + GITHUB_JOB_LINK: ${{ steps.job.outputs.link }} + + - name: Persisting the check output + run: | + mkdir -p ./levitate + echo "{ \"exit_code\": ${{ steps.breaking-changes.outputs.is_breaking }}, \"message\": \"${{ steps.breaking-changes.outputs.message }}\", \"job_link\": \"${{ steps.job.outputs.link }}#step:${GITHUB_STEP_NUMBER}:1\", \"pr_number\": \"${{ github.event.pull_request.number }}\" }" > ./levitate/result.json + + - name: Upload check output as artifact + uses: actions/upload-artifact@v4 + with: + name: levitate + path: levitate/ + + + Report: + name: Report breaking changes in PR + runs-on: ubuntu-latest + needs: ['Detect'] + + steps: + - name: "Generate token" + id: generate_token + uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92 + with: + app_id: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_ID }} + private_key: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_PEM }} + + - uses: actions/checkout@v4 + + - name: 'Download artifact' + uses: actions/download-artifact@v4 + with: + name: levitate + + - name: Parsing levitate result + uses: actions/github-script@v6 + id: levitate-run + with: + script: | + const filePath = 'result.json'; + const script = require('./.github/workflows/scripts/json-file-to-job-output.js'); + await script({ core, filePath }); + + # Check if label exists + - name: Check if "levitate breaking change" label exists + id: does-label-exist + uses: actions/github-script@v6 + env: + PR_NUMBER: ${{ github.event.pull_request.number }} + with: + script: | + const { data } = await github.rest.issues.listLabelsOnIssue({ + issue_number: process.env.PR_NUMBER, + owner: context.repo.owner, + repo: context.repo.repo, + }); + const labels = data.map(({ name }) => name); + const doesExist = labels.includes('levitate breaking change'); + + return doesExist ? 1 : 0; + + # put the markdown into a variable + - name: Levitate Markdown + id: levitate-markdown + run: | + if [ -f "levitate.md" ]; then + { + echo 'levitate_markdown<> $GITHUB_OUTPUT + else + echo "levitate_markdown=No breaking changes detected" >> $GITHUB_OUTPUT + fi + + + # Comment on the PR + - name: Comment on PR + if: steps.levitate-run.outputs.exit_code == 1 + uses: marocchino/sticky-pull-request-comment@v2 + with: + header: levitate-breaking-change-comment + number: ${{ github.event.pull_request.number }} + message: | + ⚠️   **Possible breaking changes (md version)**   ⚠️ + + ${{ steps.levitate-markdown.outputs.levitate_markdown }} + + [Read our guideline](https://github.com/grafana/grafana/blob/main/contribute/breaking-changes-guide/breaking-changes-guide.md) + [Console output](${{ steps.levitate-run.outputs.job_link }}) + GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} + + # Remove comment from the PR (no more breaking changes) + - name: Remove comment from PR + if: steps.levitate-run.outputs.exit_code == 0 + uses: marocchino/sticky-pull-request-comment@v2 + with: + header: levitate-breaking-change-comment + number: ${{ github.event.pull_request.number }} + delete: true + GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} + + # Posts a notification to Slack if a PR has a breaking change and it did not have a breaking change before + - name: Post to Slack + id: slack + if: steps.levitate-run.outputs.exit_code == 1 && steps.does-label-exist.outputs.result == 0 && env.HAS_SECRETS + uses: slackapi/slack-github-action@v1.24.0 + with: + payload: | + { + "pr_link": "https://github.com/grafana/grafana/pull/${{ steps.levitate-run.outputs.pr_number }}", + "pr_number": "${{ steps.levitate-run.outputs.pr_number }}", + "job_link": "${{ steps.levitate-run.outputs.job_link }}", + "reporting_job_link": "${{ github.event.workflow_run.html_url }}", + "message": "${{ steps.levitate-run.outputs.message }}" + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_LEVITATE_WEBHOOK_URL }} + HAS_SECRETS: ${{ (github.repository == 'grafana/grafana' || secrets.SLACK_LEVITATE_WEBHOOK_URL != '') || '' }} + + # Add the label + - name: Add "levitate breaking change" label + if: steps.levitate-run.outputs.exit_code == 1 && steps.does-label-exist.outputs.result == 0 + uses: actions/github-script@v6 + env: + PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} + with: + github-token: ${{ steps.generate_token.outputs.token }} + script: | + await github.rest.issues.addLabels({ + issue_number: process.env.PR_NUMBER, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ['levitate breaking change'] + }) + + # Remove label (no more breaking changes) + - name: Remove "levitate breaking change" label + if: steps.levitate-run.outputs.exit_code == 0 && steps.does-label-exist.outputs.result == 1 + uses: actions/github-script@v6 + env: + PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} + with: + github-token: ${{ steps.generate_token.outputs.token }} + script: | + await github.rest.issues.removeLabel({ + issue_number: process.env.PR_NUMBER, + owner: context.repo.owner, + repo: context.repo.repo, + name: 'levitate breaking change' + }) + + # Add reviewers + # This is very weird, the actual request goes through (comes back with a 201), but does not assign the team. + # Related issue: https://github.com/renovatebot/renovate/issues/1908 + - name: Add "grafana/plugins-platform-frontend" as a reviewer + if: steps.levitate-run.outputs.exit_code == 1 + uses: actions/github-script@v6 + env: + PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} + with: + github-token: ${{ steps.generate_token.outputs.token }} + script: | + await github.rest.pulls.requestReviewers({ + pull_number: process.env.PR_NUMBER, + owner: context.repo.owner, + repo: context.repo.repo, + reviewers: [], + team_reviewers: ['plugins-platform-frontend'] + }); + + # Remove reviewers (no more breaking changes) + - name: Remove "grafana/plugins-platform-frontend" from the list of reviewers + if: steps.levitate-run.outputs.exit_code == 0 + uses: actions/github-script@v6 + env: + PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} + with: + github-token: ${{ steps.generate_token.outputs.token }} + script: | + await github.rest.pulls.removeRequestedReviewers({ + pull_number: process.env.PR_NUMBER, + owner: context.repo.owner, + repo: context.repo.repo, + reviewers: [], + team_reviewers: ['plugins-platform-frontend'] + }); + + - name: Exit + run: exit ${{ steps.levitate-run.outputs.exit_code }} + shell: bash diff --git a/.github/workflows/detect-breaking-changes-report.yml b/.github/workflows/detect-breaking-changes-report.yml deleted file mode 100644 index c6a2f0a6119ce..0000000000000 --- a/.github/workflows/detect-breaking-changes-report.yml +++ /dev/null @@ -1,223 +0,0 @@ -name: Levitate / Report breaking changes - -on: - workflow_run: - workflows: ["Levitate / Detect breaking changes"] - types: [completed] - -permissions: - pull-requests: write - -jobs: - notify: - name: Report - runs-on: ubuntu-latest - env: - ARTIFACT_NAME: 'levitate' # The name of the artifact that we would like to download - ARTIFACT_FOLDER: '${{ github.workspace }}/tmp' # The name of the folder where we will download the artifact to - permissions: - contents: read - issues: write - pull-requests: write - - steps: - - uses: actions/checkout@v4 - - # Download artifact (as a .zip archive) - - name: 'Download artifact' - uses: actions/github-script@v6 - env: - RUN_ID: ${{ github.event.workflow_run.id }} - with: - script: | - const fs = require('fs'); - - const { owner, repo } = context.repo; - const runId = process.env.RUN_ID; - const artifactName = process.env.ARTIFACT_NAME; - const artifactFolder = process.env.ARTIFACT_FOLDER; - const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ - owner, - repo, - run_id: runId, - }); - const artifact = artifacts.data.artifacts.find(a => a.name === artifactName); - - if (!artifact) { - throw new Error(`Could not find artifact ${ artifactName } in workflow (${ runId })`); - } - - const download = await github.rest.actions.downloadArtifact({ - owner, - repo, - artifact_id: artifact.id, - archive_format: 'zip', - }); - - fs.mkdirSync(artifactFolder, { recursive: true }); - fs.writeFileSync(`${ artifactFolder }/${ artifactName }.zip`, Buffer.from(download.data)); - - # Unzip artifact - - name: Unzip artifact - run: unzip "${ARTIFACT_FOLDER}/${ARTIFACT_NAME}.zip" -d "${ARTIFACT_FOLDER}" - - # Parse the artifact and register fields as step output variables - # (All fields in the JSON will be available as ${{ steps.levitate-run.outputs. }} - - name: Parsing levitate result - uses: actions/github-script@v6 - id: levitate-run - with: - script: | - const filePath = `${ process.env.ARTIFACT_FOLDER }/result.json`; - const script = require('./.github/workflows/scripts/json-file-to-job-output.js'); - await script({ core, filePath }); - - # Skip - print a message if the "Detect" workflow was skipped - - name: Check if the workflow should be skipped - if: steps.levitate-run.outputs.shouldSkip == 'true' - run: echo "Skipping." - - # Check if label exists - - name: Check if "levitate breaking change" label exists - id: does-label-exist - if: steps.levitate-run.outputs.shouldSkip != 'true' - uses: actions/github-script@v6 - env: - PR_NUMBER: ${{ github.event.workflow_run.pull_requests[0].number }} - with: - script: | - const { data } = await github.rest.issues.listLabelsOnIssue({ - issue_number: process.env.PR_NUMBER, - owner: context.repo.owner, - repo: context.repo.repo, - }); - const labels = data.map(({ name }) => name); - const doesExist = labels.includes('levitate breaking change'); - - return doesExist ? 1 : 0; - - # put the markdown into a variable - - name: Levitate Markdown - id: levitate-markdown - if: steps.levitate-run.outputs.shouldSkip != 'true' - run: | - if [ -f "${ARTIFACT_FOLDER}/levitate.md" ]; then - { - echo 'levitate_markdown<> $GITHUB_OUTPUT - else - echo "levitate_markdown=No breaking changes detected" >> $GITHUB_OUTPUT - fi - - - # Comment on the PR - - name: Comment on PR - if: steps.levitate-run.outputs.exit_code == 1 && steps.levitate-run.outputs.shouldSkip != 'true' - uses: marocchino/sticky-pull-request-comment@v2 - with: - number: ${{ steps.levitate-run.outputs.pr_number }} - message: | - ⚠️   **Possible breaking changes (md version)** - - ${{ steps.levitate-markdown.outputs.levitate_markdown }} - - [Console output](${{ steps.levitate-run.outputs.job_link }}) - [Read our guideline](https://github.com/grafana/grafana/blob/main/contribute/breaking-changes-guide/breaking-changes-guide.md) - - # Remove comment from the PR (no more breaking changes) - - name: Remove comment from PR - if: steps.levitate-run.outputs.exit_code == 0 && steps.levitate-run.outputs.shouldSkip != 'true' - uses: marocchino/sticky-pull-request-comment@v2 - with: - number: ${{ steps.levitate-run.outputs.pr_number }} - delete: true - - # Posts a notification to Slack if a PR has a breaking change and it did not have a breaking change before - - name: Post to Slack - id: slack - if: steps.levitate-run.outputs.exit_code == 1 && steps.does-label-exist.outputs.result == 0 && steps.levitate-run.outputs.shouldSkip != 'true' && env.HAS_SECRETS - uses: slackapi/slack-github-action@v1.24.0 - with: - payload: | - { - "pr_link": "https://github.com/grafana/grafana/pull/${{ steps.levitate-run.outputs.pr_number }}", - "pr_number": "${{ steps.levitate-run.outputs.pr_number }}", - "job_link": "${{ steps.levitate-run.outputs.job_link }}", - "reporting_job_link": "${{ github.event.workflow_run.html_url }}", - "message": "${{ steps.levitate-run.outputs.message }}" - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_LEVITATE_WEBHOOK_URL }} - HAS_SECRETS: ${{ (github.repository == 'grafana/grafana' || secrets.SLACK_LEVITATE_WEBHOOK_URL != '') || '' }} - - # Add the label - - name: Add "levitate breaking change" label - if: steps.levitate-run.outputs.exit_code == 1 && steps.does-label-exist.outputs.result == 0 && steps.levitate-run.outputs.shouldSkip != 'true' - uses: actions/github-script@v6 - env: - PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - await github.rest.issues.addLabels({ - issue_number: process.env.PR_NUMBER, - owner: context.repo.owner, - repo: context.repo.repo, - labels: ['levitate breaking change'] - }) - - # Remove label (no more breaking changes) - - name: Remove "levitate breaking change" label - if: steps.levitate-run.outputs.exit_code == 0 && steps.does-label-exist.outputs.result == 1 && steps.levitate-run.outputs.shouldSkip != 'true' - uses: actions/github-script@v6 - env: - PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - await github.rest.issues.removeLabel({ - issue_number: process.env.PR_NUMBER, - owner: context.repo.owner, - repo: context.repo.repo, - name: 'levitate breaking change' - }) - - # Add reviewers - # This is very weird, the actual request goes through (comes back with a 201), but does not assign the team. - # Related issue: https://github.com/renovatebot/renovate/issues/1908 - - name: Add "grafana/plugins-platform-frontend" as a reviewer - if: steps.levitate-run.outputs.exit_code && steps.levitate-run.outputs.shouldSkip != 'true' - uses: actions/github-script@v6 - env: - PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - await github.rest.pulls.requestReviewers({ - pull_number: process.env.PR_NUMBER, - owner: context.repo.owner, - repo: context.repo.repo, - reviewers: [], - team_reviewers: ['grafana/plugins-platform-frontend'] - }); - - # Remove reviewers (no more breaking changes) - - name: Remove "grafana/plugins-platform-frontend" from the list of reviewers - if: steps.levitate-run.outputs.exit_code == 0 && steps.levitate-run.outputs.shouldSkip != 'true' - uses: actions/github-script@v6 - env: - PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - await github.rest.pulls.removeRequestedReviewers({ - pull_number: process.env.PR_NUMBER, - owner: context.repo.owner, - repo: context.repo.repo, - reviewers: [], - team_reviewers: ['grafana/plugins-platform-frontend'] - }); - - diff --git a/.github/workflows/doc-validator.yml b/.github/workflows/doc-validator.yml index 9e28a128b9785..620a8f84e7db4 100644 --- a/.github/workflows/doc-validator.yml +++ b/.github/workflows/doc-validator.yml @@ -7,7 +7,7 @@ jobs: doc-validator: runs-on: "ubuntu-latest" container: - image: "grafana/doc-validator:v4.0.0" + image: "grafana/doc-validator:v4.1.1" steps: - name: "Checkout code" uses: "actions/checkout@v4" diff --git a/.github/workflows/i18n-crowdin-download.yml b/.github/workflows/i18n-crowdin-download.yml new file mode 100644 index 0000000000000..c442dc1404897 --- /dev/null +++ b/.github/workflows/i18n-crowdin-download.yml @@ -0,0 +1,122 @@ +name: Crowdin Download Action + +on: + workflow_dispatch: + schedule: + - cron: "0 * * * *" + +jobs: + download-sources-from-crowdin: + runs-on: ubuntu-latest + + permissions: + contents: write # needed to commit changes into the PR + pull-requests: write # needed to update PR description, labels, etc + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.head_ref }} + + - name: Download sources + id: crowdin-download + uses: crowdin/github-action@v1 + with: + upload_sources: false + upload_translations: false + download_sources: false + download_translations: true + export_only_approved: true + localization_branch_name: i18n_crowdin_translations + create_pull_request: true + pull_request_title: 'I18n: Download translations from Crowdin' + pull_request_body: | + :robot: Automatic download of translations from Crowdin. + + Steps for merging: + 1. A quick sanity check of the changes and approve. Things to look out for: + - No changes in the English file. The source of truth is in the main branch, NOT in Crowdin. + - Translations maybe be removed if the English phrase was removed, but there should not be many of these + - Anything else that looks 'funky'. Ask if you're not sure. + 2. Approve & (Auto-)merge. :tada: + + If there's a conflict, close the pull request and **delete the branch**. A GH action will recreate the pull request. + Remember, the longer this pull request is open, the more likely it is that it'll get conflicts. + pull_request_labels: 'area/frontend, area/internationalization, no-changelog, no-backport' + pull_request_reviewers: 'grafana-frontend-platform' + pull_request_base_branch_name: 'main' + base_url: 'https://grafana.api.crowdin.com' + config: 'crowdin.yml' + source: 'public/locales/en-US/grafana.json' + translation: 'public/locales/%locale%/%original_file_name%' + # Magic details of the github-actions bot user, to pass CLA checks + github_user_name: "github-actions[bot]" + github_user_email: "41898282+github-actions[bot]@users.noreply.github.com" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} + + - name: Generate token + if: steps.crowdin-download.outputs.pull_request_url + id: generate_token + uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92 + with: + app_id: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_ID }} + private_key: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_PEM }} + + - name: Get pull request ID + if: steps.crowdin-download.outputs.pull_request_url + shell: bash + # Crowdin action returns us the URL of the pull request, but we need an ID for the GraphQL API + # that looks like 'PR_kwDOAOaWjc5mP_GU' + run: | + pr_id=$(gh pr view ${{ steps.crowdin-download.outputs.pull_request_url }} --json id -q .id) + echo "PULL_REQUEST_ID=$pr_id" >> "$GITHUB_ENV" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Get project board ID + uses: octokit/graphql-action@v2.x + id: get-project-id + if: steps.crowdin-download.outputs.pull_request_url + with: + # Frontend Platform project - https://github.com/orgs/grafana/projects/78 + org: grafana + project_number: 78 + query: | + query getProjectId($org: String!, $project_number: Int!){ + organization(login: $org) { + projectV2(number: $project_number) { + title + id + } + } + } + env: + GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} + + - name: Add to project board + uses: octokit/graphql-action@v2.x + if: steps.crowdin-download.outputs.pull_request_url + with: + projectid: ${{ fromJson(steps.get-project-id.outputs.data).organization.projectV2.id }} + prid: ${{ env.PULL_REQUEST_ID }} + query: | + mutation addPullRequestToProject($projectid: ID!, $prid: ID!){ + addProjectV2ItemById(input: {projectId: $projectid, contentId: $prid}) { + item { + id + } + } + } + + env: + GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} + + - name: Run auto-milestone + uses: grafana/grafana-github-actions-go/auto-milestone@main + if: steps.crowdin-download.outputs.pull_request_url + with: + pr: ${{ steps.crowdin-download.outputs.pull_request_number }} + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/i18n-crowdin-fix-files.yml b/.github/workflows/i18n-crowdin-fix-files.yml deleted file mode 100644 index 5117bd381d6d5..0000000000000 --- a/.github/workflows/i18n-crowdin-fix-files.yml +++ /dev/null @@ -1,67 +0,0 @@ -# When Crowdin creates a pull request from the crowdin-service-branch branch, -# run `yarn i18n:extract` and commit the changed grafana.json files back into the PR -# to reformat crowdin's changes to prevent conflicts with our CI checks. - -name: Fix Crowdin I18n files - -on: - pull_request: - paths: - - 'public/locales/*/grafana.json' - branches: - - main # Only run on pull requests *target* main (will be merged into main) - -jobs: - fix-files: - # Only run on pull requests *from* the crowdin-service-branch branch - if: github.head_ref == 'crowdin-service-branch' - - name: Fix files - runs-on: ubuntu-latest - - - permissions: - contents: write # needed to commit changes back into the PR - pull-requests: write # needed to update PR description - - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.head_ref }} - - - uses: actions/setup-node@v4 - with: - node-version: 20.9.0 - cache: 'yarn' - - - name: Install dependencies - run: yarn install - - - name: Extract I18n files - run: yarn i18n:extract - - - name: Commit changes - uses: stefanzweifel/git-auto-commit-action@8756aa072ef5b4a080af5dc8fef36c5d586e521d # v5.0.0 - with: - commit_message: "Github Action: Auto-fix i18n files" - file_pattern: public/locales/*/grafana.json - - - name: Update PR description - uses: devindford/Append_PR_Comment@32dd2619cd96ac8da9907c416c992fe265233ca8 # v1.1.3 - if: ${{ ! contains(github.event.pull_request.body, 'Steps for merging') }} - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - body-update-action: prefix - body-template: | - :robot: Automatic sync of translations from Crowdin. - - Steps for merging: - 1. Wait for the "Github Action: Auto-fix i18n files" commit that may be required for CI to pass. - 2. A quick sanity check of the changes and approve. Things to look out for: - - No changes to the English strings. The source of truth is already in the main branch, NOT Crowdin. - - Translations maybe be removed if the English phrase was removed, but there should not be many of these - - Anything else that looks 'funky'. Ask if you're not sure. - 3. Approve & (Auto-)merge. :tada: - - If there's a conflict, close the pull request and **delete the branch**. Crowdin will recreate the pull request eventually. - Remember, the longer this pull request is open, the more likely it is that it'll get conflicts. diff --git a/.github/workflows/i18n-crowdin-upload.yml b/.github/workflows/i18n-crowdin-upload.yml new file mode 100644 index 0000000000000..9e028b5386fe2 --- /dev/null +++ b/.github/workflows/i18n-crowdin-upload.yml @@ -0,0 +1,33 @@ +name: Crowdin Upload Action + +on: + workflow_dispatch: + push: + paths: + - 'public/locales/en-US/grafana.json' + branches: + - main + +jobs: + upload-sources-to-crowdin: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Upload sources + uses: crowdin/github-action@v1 + with: + upload_sources: true + upload_sources_args: '--dest=public/locales/en-US/grafana.json' + upload_translations: false + download_translations: false + create_pull_request: false + base_url: 'https://grafana.api.crowdin.com' + config: 'crowdin.yml' + source: 'public/locales/en-US/grafana.json' + translation: 'public/locales/%locale%/%original_file_name%' + env: + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} diff --git a/.github/workflows/issue-labeled.yml b/.github/workflows/issue-labeled.yml index e0a5abcdc3798..586b2d6d7f13e 100644 --- a/.github/workflows/issue-labeled.yml +++ b/.github/workflows/issue-labeled.yml @@ -53,7 +53,7 @@ jobs: echo "TEAM=${TEAM}" >> $GITHUB_ENV - name: "Prepare payload" - uses: frabert/replace-string-action@v2.0 + uses: frabert/replace-string-action@v2.5 id: preparePayload with: # replace double quotes with single quotes to avoid breaking the JSON payload sent to Slack @@ -64,7 +64,7 @@ jobs: - name: Get Token id: get_workflow_token - uses: peter-murray/workflow-application-token-action@v2 + uses: peter-murray/workflow-application-token-action@v3 with: application_id: ${{ secrets.APP_GRAFANA_TEAM_CHECKER_ID }} application_private_key: ${{ secrets.APP_GRAFANA_TEAM_CHECKER_KEY }} diff --git a/.github/workflows/metrics-collector.yml b/.github/workflows/metrics-collector.yml index 7728516153329..2e22a830a8845 100644 --- a/.github/workflows/metrics-collector.yml +++ b/.github/workflows/metrics-collector.yml @@ -25,7 +25,7 @@ jobs: id: check shell: bash run: | - if [ -n "${{ (secrets.GRAFANA_MISC_STATS_API_KEY != '' && secrets.GH_BOT_ACCESS_TOKEN != '') || '' }}" ]; then + if [ -n "${{ (secrets.GRAFANA_MISC_STATS_API_KEY != '') || '' }}" ]; then echo "has-secrets=1" >> "$GITHUB_OUTPUT" fi @@ -46,5 +46,5 @@ jobs: uses: ./actions/metrics-collector with: metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}} - token: ${{secrets.GH_BOT_ACCESS_TOKEN}} + token: ${{secrets.GITHUB_TOKEN}} configPath: "metrics-collector" diff --git a/.github/workflows/pr-codeql-analysis-go.yml b/.github/workflows/pr-codeql-analysis-go.yml index c47c19a09a8e0..6aa56cf57f66a 100644 --- a/.github/workflows/pr-codeql-analysis-go.yml +++ b/.github/workflows/pr-codeql-analysis-go.yml @@ -16,17 +16,26 @@ jobs: runs-on: ubuntu-latest steps: + - name: "Generate token" + id: generate_token + continue-on-error: true + uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a + with: + app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }} + private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }} + - name: Checkout repository uses: actions/checkout@v4 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. fetch-depth: 2 + token: ${{ steps.generate_token.outputs.token }} - name: Set go version uses: actions/setup-go@v4 with: - go-version: '1.21.5' + go-version: '1.21.8' # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL @@ -41,3 +50,4 @@ jobs: - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 + if: github.repository == 'grafana/grafana' diff --git a/.github/workflows/pr-codeql-analysis-javascript.yml b/.github/workflows/pr-codeql-analysis-javascript.yml index 304b2798fbc80..e09b3a71c7051 100644 --- a/.github/workflows/pr-codeql-analysis-javascript.yml +++ b/.github/workflows/pr-codeql-analysis-javascript.yml @@ -33,3 +33,4 @@ jobs: - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 + if: github.repository == 'grafana/grafana' diff --git a/.github/workflows/pr-codeql-analysis-python.yml b/.github/workflows/pr-codeql-analysis-python.yml index acd2352a2aecf..e990d71391509 100644 --- a/.github/workflows/pr-codeql-analysis-python.yml +++ b/.github/workflows/pr-codeql-analysis-python.yml @@ -31,3 +31,4 @@ jobs: - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 + if: github.repository == 'grafana/grafana' diff --git a/.github/workflows/pr-patch-check.yml b/.github/workflows/pr-patch-check.yml index 1ff327ebdef8c..ef1009b7545a4 100644 --- a/.github/workflows/pr-patch-check.yml +++ b/.github/workflows/pr-patch-check.yml @@ -1,4 +1,4 @@ -# Owned by grafana-delivery-squad +# Owned by grafana-release-guild # Intended to be dropped into the base repo Ex: grafana/grafana name: Check for patch conflicts run-name: check-patch-conflicts-${{ github.base_ref }}-${{ github.head_ref }} @@ -18,6 +18,7 @@ on: jobs: trigger_downstream_patch_check: uses: grafana/security-patch-actions/.github/workflows/test-patches.yml@main + if: github.repository == 'grafana/grafana' with: src_repo: "${{ github.repository }}" src_ref: "${{ github.head_ref }}" # this is the source branch name, Ex: "feature/newthing" diff --git a/.github/workflows/publish-kinds-next.yml b/.github/workflows/publish-kinds-next.yml index ec88f288df7c9..7dc3cedb741b8 100644 --- a/.github/workflows/publish-kinds-next.yml +++ b/.github/workflows/publish-kinds-next.yml @@ -36,7 +36,7 @@ jobs: - name: "Setup Go" uses: "actions/setup-go@v4" with: - go-version: '1.21.5' + go-version: '1.21.8' - name: "Verify kinds" run: go run .github/workflows/scripts/kinds/verify-kinds.go diff --git a/.github/workflows/publish-kinds-release.yml b/.github/workflows/publish-kinds-release.yml index 5e32b09d40840..acdfcbcb0b5b9 100644 --- a/.github/workflows/publish-kinds-release.yml +++ b/.github/workflows/publish-kinds-release.yml @@ -39,7 +39,7 @@ jobs: - name: "Setup Go" uses: "actions/setup-go@v4" with: - go-version: '1.21.5' + go-version: '1.21.8' - name: "Verify kinds" run: go run .github/workflows/scripts/kinds/verify-kinds.go diff --git a/.github/workflows/publish-technical-documentation-release.yml b/.github/workflows/publish-technical-documentation-release.yml index 87f34de25b269..c22bb41cb4897 100644 --- a/.github/workflows/publish-technical-documentation-release.yml +++ b/.github/workflows/publish-technical-documentation-release.yml @@ -55,7 +55,7 @@ jobs: # Tags aren't necessarily made to the HEAD of the version branch. # The documentation to be published is always on the HEAD of the version branch. if: "steps.has-matching-release-tag.outputs.bool == 'true' && github.ref_type == 'tag'" - run: "git switch --detach origin/${{ steps.target.output.target }}.x" + run: "git switch --detach origin/${{ steps.target.outputs.target }}.x" - name: "Publish to website repository (release)" if: "steps.has-matching-release-tag.outputs.bool == 'true'" diff --git a/.github/workflows/scripts/kinds/verify-kinds.go b/.github/workflows/scripts/kinds/verify-kinds.go index 72fc3b3047619..ab60a90bd3ee0 100644 --- a/.github/workflows/scripts/kinds/verify-kinds.go +++ b/.github/workflows/scripts/kinds/verify-kinds.go @@ -1,227 +1,124 @@ package main import ( - "archive/zip" "context" + "errors" "fmt" - "io" - "net/http" + "golang.org/x/text/cases" + "golang.org/x/text/language" "os" "path/filepath" "regexp" - "strconv" "strings" - "testing/fstest" "cuelang.org/go/cue" cueformat "cuelang.org/go/cue/format" - "github.com/google/go-github/github" "github.com/grafana/codejen" - "github.com/grafana/grafana/pkg/codegen" - "github.com/grafana/grafana/pkg/cuectx" - "github.com/grafana/grafana/pkg/plugins/pfs" - "github.com/grafana/grafana/pkg/plugins/pfs/corelist" - "github.com/grafana/grafana/pkg/registry/corekind" - "github.com/grafana/kindsys" - "github.com/grafana/thema" - "golang.org/x/oauth2" + "github.com/grafana/grafana/pkg/registry/schemas" ) -const ( - GITHUB_OWNER = "grafana" - GITHUB_REPO = "kind-registry" -) +var nonAlphaNumRegex = regexp.MustCompile("[^a-zA-Z0-9 ]+") // main This script verifies that stable kinds are not updated once published (new schemas // can be added but existing ones cannot be updated). -// If the env variable CODEGEN_VERIFY is not present, this also generates kind files into a -// local "next" folder, ready to be published in the kind-registry repo. +// It generates kind files into a local "next" folder, ready to be published in the kind-registry repo. // If kind names are given as parameters, the script will make the above actions only for the // given kinds. func main() { - var corek []kindsys.Kind - var compok []kindsys.Composable - - kindRegistry, err := NewKindRegistry() - defer kindRegistry.cleanUp() - if err != nil { - die(err) - } - - // Search for the latest version directory present in the kind-registry repo - latestRegistryDir, err := kindRegistry.findLatestDir() - if err != nil { - die(fmt.Errorf("failed to get latest directory for published kinds: %s", err)) - } - - errs := make([]error, 0) - - // Kind verification - for _, kind := range corekind.NewBase(nil).All() { - name := kind.Props().Common().MachineName - err := verifyKind(kindRegistry, kind, name, "core", latestRegistryDir) - if err != nil { - errs = append(errs, err) - continue - } - - corek = append(corek, kind) - } - - for _, pp := range corelist.New(nil) { - for _, kind := range pp.ComposableKinds { - si, err := kindsys.FindSchemaInterface(kind.Def().Properties.SchemaInterface) - if err != nil { - errs = append(errs, err) - continue - } - - name := strings.ToLower(fmt.Sprintf("%s/%s", strings.TrimSuffix(kind.Lineage().Name(), si.Name()), si.Name())) - err = verifyKind(kindRegistry, kind, name, "composable", latestRegistryDir) - if err != nil { - errs = append(errs, err) - continue - } - - compok = append(compok, kind) - } - } - - die(errs...) - - if _, set := os.LookupEnv("CODEGEN_VERIFY"); set { - os.Exit(0) - } - // File generation jfs := codejen.NewFS() outputPath := filepath.Join(".github", "workflows", "scripts", "kinds") - coreJennies := codejen.JennyList[kindsys.Kind]{} + corekinds, err := schemas.GetCoreKinds() + die(err) + + composableKinds, err := schemas.GetComposableKinds() + die(err) + + coreJennies := codejen.JennyList[schemas.CoreKind]{} coreJennies.Append( - KindRegistryJenny(outputPath), + CoreKindRegistryJenny(outputPath), ) - corefs, err := coreJennies.GenerateFS(corek...) + corefs, err := coreJennies.GenerateFS(corekinds...) die(err) die(jfs.Merge(corefs)) - composableJennies := codejen.JennyList[kindsys.Composable]{} + composableJennies := codejen.JennyList[schemas.ComposableKind]{} composableJennies.Append( ComposableKindRegistryJenny(outputPath), ) - composablefs, err := composableJennies.GenerateFS(compok...) + composablefs, err := composableJennies.GenerateFS(composableKinds...) die(err) die(jfs.Merge(composablefs)) if err = jfs.Write(context.Background(), ""); err != nil { die(fmt.Errorf("error while writing generated code to disk:\n%s", err)) } -} -func die(errs ...error) { - if len(errs) > 0 && errs[0] != nil { - for _, err := range errs { - fmt.Fprint(os.Stderr, err, "\n") - } - os.Exit(1) + if err := copyCueSchemas("packages/grafana-schema/src/common", filepath.Join(outputPath, "next")); err != nil { + die(fmt.Errorf("error while copying the grafana-schema/common package:\n%s", err)) } } -// verifyKind verifies that stable kinds are not updated once published (new schemas -// can be added but existing ones cannot be updated) -func verifyKind(registry *kindRegistry, kind kindsys.Kind, name string, category string, latestRegistryDir string) error { - oldKindString, err := registry.getPublishedKind(name, category, latestRegistryDir) - if err != nil { - return err - } +func copyCueSchemas(fromDir string, toDir string) error { + baseTargetDir := filepath.Base(fromDir) - var oldKind kindsys.Kind - if oldKindString != "" { - switch category { - case "core": - oldKind, err = loadCoreKind(name, oldKindString) - case "composable": - oldKind, err = loadComposableKind(name, oldKindString) - default: - return fmt.Errorf("kind can only be core or composable") + return filepath.Walk(fromDir, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err } - } - if err != nil { - return err - } - - // Kind is new - no need to compare it - if oldKind == nil { - return nil - } - - // Check that maturity isn't downgraded - if kind.Maturity().Less(oldKind.Maturity()) { - return fmt.Errorf("kind maturity can't be downgraded once a kind is published") - } - - if oldKind.Maturity().Less(kindsys.MaturityStable) { - return nil - } - // Check that old schemas do not contain updates - err = thema.IsAppendOnly(oldKind.Lineage(), kind.Lineage()) - if err != nil { - return fmt.Errorf("existing schemas in lineage %s cannot be modified: %w", name, err) - } + targetPath := filepath.Join( + toDir, + baseTargetDir, + strings.TrimPrefix(path, fromDir), + ) - return nil -} + if info.IsDir() { + return ensureDirectoryExists(targetPath, info.Mode()) + } -func isLess(v1 []uint64, v2 []uint64) bool { - if len(v1) == 1 || len(v2) == 1 { - return v1[0] < v2[0] - } + if !strings.HasSuffix(path, ".cue") { + return nil + } - return v1[0] < v2[0] || (v1[0] == v2[0] && isLess(v1[2:], v2[2:])) + return copyFile(path, targetPath, info.Mode()) + }) } -func loadCoreKind(name string, kind string) (kindsys.Kind, error) { - fs := fstest.MapFS{ - fmt.Sprintf("%s.cue", name): &fstest.MapFile{ - Data: []byte(kind), - }, - } - - rt := cuectx.GrafanaThemaRuntime() - - def, err := cuectx.LoadCoreKindDef(fmt.Sprintf("%s.cue", name), rt.Context(), fs) +func copyFile(from string, to string, mode os.FileMode) error { + input, err := os.ReadFile(from) if err != nil { - return nil, fmt.Errorf("%s is not a valid kind: %w", name, err) + return err } - return kindsys.BindCore(rt, def) + return os.WriteFile(to, input, mode) } -func loadComposableKind(name string, kind string) (kindsys.Kind, error) { - parts := strings.Split(name, "/") - if len(parts) > 1 { - name = parts[1] - } - - fs := fstest.MapFS{ - fmt.Sprintf("%s.cue", name): &fstest.MapFile{ - Data: []byte(kind), - }, +func ensureDirectoryExists(directory string, mode os.FileMode) error { + _, err := os.Stat(directory) + if errors.Is(err, os.ErrNotExist) { + if err = os.Mkdir(directory, mode); err != nil { + return err + } + } else if err != nil { + return err } - rt := cuectx.GrafanaThemaRuntime() + return os.Chmod(directory, mode) +} - def, err := pfs.LoadComposableKindDef(fs, rt, fmt.Sprintf("%s.cue", name)) - if err != nil { - return nil, fmt.Errorf("%s is not a valid kind: %w", name, err) +func die(errs ...error) { + if len(errs) > 0 && errs[0] != nil { + for _, err := range errs { + fmt.Fprint(os.Stderr, err, "\n") + } + os.Exit(1) } - - return kindsys.BindComposable(rt, def) } -// KindRegistryJenny generates kind files into the "next" folder of the local kind registry. -func KindRegistryJenny(path string) codegen.OneToOne { +// CoreKindRegistryJenny generates kind files into the "next" folder of the local kind registry. +func CoreKindRegistryJenny(path string) codejen.OneToOne[schemas.CoreKind] { return &kindregjenny{ path: path, } @@ -235,35 +132,18 @@ func (j *kindregjenny) JennyName() string { return "KindRegistryJenny" } -func (j *kindregjenny) Generate(kind kindsys.Kind) (*codejen.File, error) { - name := kind.Props().Common().MachineName - core, ok := kind.(kindsys.Core) - if !ok { - return nil, fmt.Errorf("kind sent to KindRegistryJenny must be a core kind") - } - - newKindBytes, err := kindToBytes(core.Def().V) +func (j *kindregjenny) Generate(kind schemas.CoreKind) (*codejen.File, error) { + newKindBytes, err := kindToBytes(kind.CueFile) if err != nil { return nil, err } - path := filepath.Join(j.path, "next", "core", name, name+".cue") + path := filepath.Join(j.path, "next", "core", kind.Name, kind.Name+".cue") return codejen.NewFile(path, newKindBytes, j), nil } -// kindToBytes converts a kind cue value to a .cue file content -func kindToBytes(kind cue.Value) ([]byte, error) { - node := kind.Syntax( - cue.All(), - cue.Schema(), - cue.Docs(true), - ) - - return cueformat.Node(node) -} - // ComposableKindRegistryJenny generates kind files into the "next" folder of the local kind registry. -func ComposableKindRegistryJenny(path string) codejen.OneToOne[kindsys.Composable] { +func ComposableKindRegistryJenny(path string) codejen.OneToOne[schemas.ComposableKind] { return &ckrJenny{ path: path, } @@ -277,149 +157,73 @@ func (j *ckrJenny) JennyName() string { return "ComposableKindRegistryJenny" } -func (j *ckrJenny) Generate(k kindsys.Composable) (*codejen.File, error) { - si, err := kindsys.FindSchemaInterface(k.Def().Properties.SchemaInterface) - if err != nil { - panic(err) - } +func (j *ckrJenny) Generate(k schemas.ComposableKind) (*codejen.File, error) { + name := strings.ToLower(fmt.Sprintf("%s/%s", k.Name, k.Filename)) - name := strings.ToLower(fmt.Sprintf("%s/%s", strings.TrimSuffix(k.Lineage().Name(), si.Name()), si.Name())) + v := fixComposableKindFormat(k) - newKindBytes, err := kindToBytes(k.Def().V) + newKindBytes, err := kindToBytes(v) if err != nil { return nil, err } newKindBytes = []byte(fmt.Sprintf("package grafanaplugin\n\n%s", newKindBytes)) - return codejen.NewFile(filepath.Join(j.path, "next", "composable", name+".cue"), newKindBytes, j), nil -} - -type kindRegistry struct { - zipDir string - zipFile *zip.ReadCloser + return codejen.NewFile(filepath.Join(j.path, "next", "composable", name), newKindBytes, j), nil } -// NewKindRegistry downloads the archive of the kind-registry GH repository and open it -func NewKindRegistry() (*kindRegistry, error) { - ctx := context.Background() - tc := oauth2.NewClient(ctx, nil) - client := github.NewClient(tc) - - // Create a temporary file to store the downloaded archive - file, err := os.CreateTemp("", "*.zip") - if err != nil { - return nil, fmt.Errorf("failed to create temporary file: %w", err) - } - defer file.Close() - - // Get the repository archive URL - archiveURL, _, err := client.Repositories.GetArchiveLink(ctx, GITHUB_OWNER, GITHUB_REPO, github.Zipball, &github.RepositoryContentGetOptions{}) - if err != nil { - return nil, fmt.Errorf("failed to get archive URL: %w", err) - } - - // Download the archive file - httpClient := http.DefaultClient - resp, err := httpClient.Get(archiveURL.String()) - if err != nil { - return nil, fmt.Errorf("failed to download archive: %w", err) - } - defer resp.Body.Close() - - // Save the downloaded archive to the temporary file - _, err = io.Copy(file, resp.Body) - if err != nil { - return nil, fmt.Errorf("failed to save archive: %w", err) - } - - // Open the zip file for reading - zipDir := file.Name() - zipFile, err := zip.OpenReader(zipDir) - if err != nil { - return nil, fmt.Errorf("failed to open zip file %s: %w", zipDir, err) - } +// kindToBytes converts a kind cue value to a .cue file content +func kindToBytes(kind cue.Value) ([]byte, error) { + node := kind.Syntax( + cue.All(), + cue.Schema(), + cue.Docs(true), + ) - return &kindRegistry{ - zipDir: zipDir, - zipFile: zipFile, - }, nil + return cueformat.Node(node) } -// cleanUp removes the archive from the temporary files and closes the zip reader -func (registry *kindRegistry) cleanUp() { - if registry.zipDir != "" { - err := os.Remove(registry.zipDir) - if err != nil { - fmt.Fprint(os.Stderr, fmt.Errorf("failed to remove zip archive: %w", err)) - } +func fixComposableKindFormat(schema schemas.ComposableKind) cue.Value { + variant := "PanelCfg" + if schema.CueFile.LookupPath(cue.ParsePath("composableKinds.DataQuery")).Exists() { + variant = "DataQuery" } - if registry.zipFile != nil { - err := registry.zipFile.Close() - if err != nil { - fmt.Fprint(os.Stderr, fmt.Errorf("failed to close zip file reader: %w", err)) - } - } -} - -// findLatestDir get the latest version directory published in the kind registry -func (registry *kindRegistry) findLatestDir() (string, error) { - re := regexp.MustCompile(`([0-9]+)\.([0-9]+)\.([0-9]+)`) - latestVersion := []uint64{0, 0, 0} - latestDir := "" + newCue := schema.CueFile.Context().CompileString( + fmt.Sprintf("schemaInterface: %q\n", variant) + + fmt.Sprintf("name: %q + %q\n\n", UpperCamelCase(schema.Name), variant) + + "lineage: _", + ) - for _, file := range registry.zipFile.File { - if !file.FileInfo().IsDir() { - continue - } + lineagePath := cue.MakePath(cue.Str("composableKinds"), cue.Str(variant), cue.Str("lineage")) + return newCue.FillPath(cue.MakePath(cue.Str("lineage")), schema.CueFile.LookupPath(lineagePath)) +} - parts := re.FindStringSubmatch(file.Name) - if parts == nil || len(parts) < 4 { - continue - } +func UpperCamelCase(s string) string { + s = LowerCamelCase(s) - version := make([]uint64, len(parts)-1) - for i := 1; i < len(parts); i++ { - version[i-1], _ = strconv.ParseUint(parts[i], 10, 32) - } - - if isLess(latestVersion, version) { - latestVersion = version - latestDir = file.Name - } + // Uppercase the first letter + if len(s) > 0 { + s = strings.ToUpper(s[:1]) + s[1:] } - return latestDir, nil + return s } -// getPublishedKind retrieves the latest published kind from the kind registry -func (registry *kindRegistry) getPublishedKind(name string, category string, latestRegistryDir string) (string, error) { - if latestRegistryDir == "" { - return "", nil - } +func LowerCamelCase(s string) string { + // Replace all non-alphanumeric characters by spaces + s = nonAlphaNumRegex.ReplaceAllString(s, " ") - var cueFilePath string - switch category { - case "core": - cueFilePath = fmt.Sprintf("%s/%s.cue", name, name) - case "composable": - cueFilePath = fmt.Sprintf("%s.cue", name) - default: - return "", fmt.Errorf("kind can only be core or composable") - } + // Title case s + s = cases.Title(language.AmericanEnglish, cases.NoLower).String(s) - kindPath := filepath.Join(latestRegistryDir, category, cueFilePath) - file, err := registry.zipFile.Open(kindPath) - if err != nil { - return "", fmt.Errorf("failed to open file: %w", err) - } - defer file.Close() + // Remove all spaces + s = strings.ReplaceAll(s, " ", "") - data, err := io.ReadAll(file) - if err != nil { - return "", fmt.Errorf("failed to read file: %w", err) + // Lowercase the first letter + if len(s) > 0 { + s = strings.ToLower(s[:1]) + s[1:] } - return string(data), nil + return s } diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 1a452bb6a01ee..778a49b16d00f 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -4,6 +4,7 @@ on: - cron: '30 1 * * *' permissions: + issues: write pull-requests: write jobs: @@ -13,24 +14,29 @@ jobs: - uses: actions/stale@v9 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - # Number of days of inactivity before a stale Issue or Pull Request is closed. - # Set to -1 to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. - days-before-close: 14 - # Number of days of inactivity before an Issue or Pull Request becomes stale - days-before-stale: 30 - # We don't want any Issues to be marked as stale for now. - days-before-issue-stale: -1 - exempt-issue-labels: no stalebot - exempt-pr-labels: no stalebot - operations-per-run: 500 + operations-per-run: 750 + # start from the oldest issues/PRs when performing stale operations + ascending: true + days-before-issue-stale: 365 + days-before-issue-close: 30 stale-issue-label: stale + exempt-issue-labels: no stalebot,type/epic + stale-issue-message: > + This issue has been automatically marked as stale because it has not had + activity in the last year. It will be closed in 30 days if no further activity occurs. Please + feel free to leave a comment if you believe the issue is still relevant. + Thank you for your contributions! + close-issue-message: > + This issue has been automatically closed because it has not had any further + activity in the last 30 days. Thank you for your contributions! + days-before-pr-stale: 30 + days-before-pr-close: 14 stale-pr-label: stale + exempt-pr-labels: no stalebot stale-pr-message: > This pull request has been automatically marked as stale because it has not had activity in the last 30 days. It will be closed in 2 weeks if no further activity occurs. Please - feel free to give a status update now, ping for review, or re-open when it's ready. - Thank you for your contributions! + feel free to give a status update or ping for review. Thank you for your contributions! close-pr-message: > - This pull request has been automatically closed because it has not had - activity in the last 2 weeks. Please feel free to give a status update now, ping for review, or re-open when it's ready. - Thank you for your contributions! + This pull request has been automatically closed because it has not had any further + activity in the last 2 weeks. Thank you for your contributions! diff --git a/.github/workflows/sync-mirror.yml b/.github/workflows/sync-mirror.yml index fd8d93d62260c..09c8f87d50902 100644 --- a/.github/workflows/sync-mirror.yml +++ b/.github/workflows/sync-mirror.yml @@ -1,4 +1,4 @@ -# Owned by grafana-delivery-squad +# Owned by grafana-release-guild # Intended to be dropped into the base repo, Ex: grafana/grafana name: Sync to mirror run-name: sync-to-mirror-${{ github.ref_name }} diff --git a/.github/workflows/update-make-docs.yml b/.github/workflows/update-make-docs.yml index 09159af49e718..49b64504bd0db 100644 --- a/.github/workflows/update-make-docs.yml +++ b/.github/workflows/update-make-docs.yml @@ -12,8 +12,8 @@ jobs: - uses: grafana/writers-toolkit/update-make-docs@update-make-docs/v1 with: pr_options: > - --label 'backport v10.0.x' --label 'backport v10.1.x' --label 'backport v10.2.x' + --label 'backport v10.3.x' --label no-changelog --label type/docs diff --git a/.github/workflows/verify-kinds.yml b/.github/workflows/verify-kinds.yml index cda6ccbc679ed..e9acdccfe0c98 100644 --- a/.github/workflows/verify-kinds.yml +++ b/.github/workflows/verify-kinds.yml @@ -4,7 +4,7 @@ on: pull_request: branches: [ main ] paths: - - '**/*.cue' + - '**/*.cue' jobs: main: @@ -18,10 +18,9 @@ jobs: - name: "Setup Go" uses: "actions/setup-go@v4" with: - go-version: '1.21.5' + go-version: '1.21.8' - name: "Verify kinds" run: go run .github/workflows/scripts/kinds/verify-kinds.go env: - CODEGEN_VERIFY: 1 GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.gitignore b/.gitignore index 771a993d2a779..1ee9062d9283b 100644 --- a/.gitignore +++ b/.gitignore @@ -24,9 +24,6 @@ __debug_bin* !.yarn/plugins !.yarn/sdks !.yarn/versions -# we temporarily commit this file because yarn downloading it -# somehow produces different checksum values -!.yarn/cache/pa11y-ci-https-1e9675e9e1-668c9119bd.zip .pnp.* # Enterprise emails @@ -134,9 +131,7 @@ pkg/services/quota/quotaimpl/storage/storage.json /devenv/bulk-dashboards/*.json /devenv/bulk-folders/*/*.json -/devenv/bulk_alerting_dashboards/*.json /devenv/datasources_bulk.yaml -/devenv/bulk_alerting_dashboards/bulk_alerting_datasources.yaml /scripts/build/release_publisher/release_publisher *.patch @@ -174,6 +169,11 @@ compilation-stats.json /e2e/build_results.zip /e2e/extensions /e2e/extensions-suite +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ +/playwright/.auth/ # grafana server /scripts/grafana-server/server.log @@ -202,6 +202,7 @@ public/api-spec.json deployment_tools_config.json .betterer.cache +.nx # Temporary file for backporting PRs .pr-body.txt @@ -212,3 +213,4 @@ public/app/plugins/**/dist/ # Ignore transpiled JavaScript resulting from the generate-transformations.ts script. /public/app/features/transformers/docs/*.js /scripts/docs/generate-transformations.js + diff --git a/.golangci.toml b/.golangci.toml index 3fe5ae002aa00..b722776e84ebe 100644 --- a/.golangci.toml +++ b/.golangci.toml @@ -52,12 +52,23 @@ deny = [ { pkg = "github.com/grafana/grafana/pkg/server", desc = "Core plugins are not allowed to depend on Grafana core packages" }, { pkg = "github.com/grafana/grafana/pkg/tests", desc = "Core plugins are not allowed to depend on Grafana core packages" }, { pkg = "github.com/grafana/grafana/pkg/web", desc = "Core plugins are not allowed to depend on Grafana core packages" }, + { pkg = "github.com/grafana/grafana/pkg/tsdb/intervalv2", desc = "Core plugins are not allowed to depend on Grafana core packages" }, ] files = [ + "**/pkg/tsdb/grafana-pyroscope-datasource/*", + "**/pkg/tsdb/grafana-pyroscope-datasource/**/*", "**/pkg/tsdb/grafana-testdata-datasource/*", "**/pkg/tsdb/grafana-testdata-datasource/**/*", + "**/pkg/tsdb/azuremonitor/*", + "**/pkg/tsdb/azuremonitor/**/*", + "**/pkg/tsdb/cloud-monitoring/*", + "**/pkg/tsdb/cloud-monitoring/**/*", "**/pkg/tsdb/parca/*", "**/pkg/tsdb/parca/**/*", + "**/pkg/tsdb/tempo/*", + "**/pkg/tsdb/tempo/**/*", + "**/pkg/tsdb/cloudwatch/*", + "**/pkg/tsdb/cloudwatch/**/*", ] [linters-settings.gocritic] diff --git a/.prettierignore b/.prettierignore index 9f95507f7b307..160926fd718cc 100644 --- a/.prettierignore +++ b/.prettierignore @@ -12,6 +12,7 @@ node_modules pkg public/lib/monaco public/sass/*.generated.scss +scripts/cli/bettererIssueTemplate.md scripts/grafana-server/tmp vendor @@ -31,10 +32,5 @@ public/api-merged.json public/api-enterprise-spec.json public/openapi3.json -# Generated Kinds report -kinds/report.json - -# Generated schema docs -docs/sources/developers/kinds/ - -scripts/cli/bettererIssueTemplate.md +# Crowdin files +public/locales/**/*.json diff --git a/.vscode/launch.json b/.vscode/launch.json index d2f9c3b15843e..0ff75cc92ac20 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -12,14 +12,16 @@ "args": ["server", "--homepath", "${workspaceFolder}", "--packaging", "dev"] }, { - "name": "Run API Server (k8s)", + "name": "Run API Server (testdata)", "type": "go", "request": "launch", "mode": "auto", "program": "${workspaceFolder}/pkg/cmd/grafana/", "env": {}, "cwd": "${workspaceFolder}", - "args": ["apiserver", "example.grafana.app"] + "args": ["apiserver", + "--secure-port=8443", + "--runtime-config=testdata.datasource.grafana.app/v0alpha1=true"] }, { "name": "Attach to Chrome", diff --git a/.yarn/cache/tether-drop-https-3382d2649f-178c3afb88.zip b/.yarn/cache/tether-drop-https-3382d2649f-178c3afb88.zip deleted file mode 100644 index be3f3c66ca98c..0000000000000 Binary files a/.yarn/cache/tether-drop-https-3382d2649f-178c3afb88.zip and /dev/null differ diff --git a/.yarn/releases/yarn-4.0.0.cjs b/.yarn/releases/yarn-4.0.0.cjs deleted file mode 100755 index b570710a23f9a..0000000000000 --- a/.yarn/releases/yarn-4.0.0.cjs +++ /dev/null @@ -1,893 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable */ -//prettier-ignore -(()=>{var t_e=Object.create;var LR=Object.defineProperty;var r_e=Object.getOwnPropertyDescriptor;var n_e=Object.getOwnPropertyNames;var i_e=Object.getPrototypeOf,s_e=Object.prototype.hasOwnProperty;var Be=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var yt=(t,e)=>()=>(t&&(e=t(t=0)),e);var _=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Vt=(t,e)=>{for(var r in e)LR(t,r,{get:e[r],enumerable:!0})},o_e=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of n_e(e))!s_e.call(t,a)&&a!==r&&LR(t,a,{get:()=>e[a],enumerable:!(o=r_e(e,a))||o.enumerable});return t};var $e=(t,e,r)=>(r=t!=null?t_e(i_e(t)):{},o_e(e||!t||!t.__esModule?LR(r,"default",{value:t,enumerable:!0}):r,t));var vi={};Vt(vi,{SAFE_TIME:()=>Q7,S_IFDIR:()=>wD,S_IFLNK:()=>ID,S_IFMT:()=>Ou,S_IFREG:()=>Hw});var Ou,wD,Hw,ID,Q7,F7=yt(()=>{Ou=61440,wD=16384,Hw=32768,ID=40960,Q7=456789e3});var ar={};Vt(ar,{EBADF:()=>Io,EBUSY:()=>a_e,EEXIST:()=>p_e,EINVAL:()=>c_e,EISDIR:()=>f_e,ENOENT:()=>u_e,ENOSYS:()=>l_e,ENOTDIR:()=>A_e,ENOTEMPTY:()=>g_e,EOPNOTSUPP:()=>d_e,EROFS:()=>h_e,ERR_DIR_CLOSED:()=>NR});function Tl(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function a_e(t){return Tl("EBUSY",t)}function l_e(t,e){return Tl("ENOSYS",`${t}, ${e}`)}function c_e(t){return Tl("EINVAL",`invalid argument, ${t}`)}function Io(t){return Tl("EBADF",`bad file descriptor, ${t}`)}function u_e(t){return Tl("ENOENT",`no such file or directory, ${t}`)}function A_e(t){return Tl("ENOTDIR",`not a directory, ${t}`)}function f_e(t){return Tl("EISDIR",`illegal operation on a directory, ${t}`)}function p_e(t){return Tl("EEXIST",`file already exists, ${t}`)}function h_e(t){return Tl("EROFS",`read-only filesystem, ${t}`)}function g_e(t){return Tl("ENOTEMPTY",`directory not empty, ${t}`)}function d_e(t){return Tl("EOPNOTSUPP",`operation not supported, ${t}`)}function NR(){return Tl("ERR_DIR_CLOSED","Directory handle was closed")}var BD=yt(()=>{});var Ea={};Vt(Ea,{BigIntStatsEntry:()=>ey,DEFAULT_MODE:()=>UR,DirEntry:()=>OR,StatEntry:()=>$m,areStatsEqual:()=>_R,clearStats:()=>vD,convertToBigIntStats:()=>y_e,makeDefaultStats:()=>R7,makeEmptyStats:()=>m_e});function R7(){return new $m}function m_e(){return vD(R7())}function vD(t){for(let e in t)if(Object.hasOwn(t,e)){let r=t[e];typeof r=="number"?t[e]=0:typeof r=="bigint"?t[e]=BigInt(0):MR.types.isDate(r)&&(t[e]=new Date(0))}return t}function y_e(t){let e=new ey;for(let r in t)if(Object.hasOwn(t,r)){let o=t[r];typeof o=="number"?e[r]=BigInt(o):MR.types.isDate(o)&&(e[r]=new Date(o))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function _R(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs||t.blksize!==e.blksize||t.blocks!==e.blocks||t.ctimeMs!==e.ctimeMs||t.dev!==e.dev||t.gid!==e.gid||t.ino!==e.ino||t.isBlockDevice()!==e.isBlockDevice()||t.isCharacterDevice()!==e.isCharacterDevice()||t.isDirectory()!==e.isDirectory()||t.isFIFO()!==e.isFIFO()||t.isFile()!==e.isFile()||t.isSocket()!==e.isSocket()||t.isSymbolicLink()!==e.isSymbolicLink()||t.mode!==e.mode||t.mtimeMs!==e.mtimeMs||t.nlink!==e.nlink||t.rdev!==e.rdev||t.size!==e.size||t.uid!==e.uid)return!1;let r=t,o=e;return!(r.atimeNs!==o.atimeNs||r.mtimeNs!==o.mtimeNs||r.ctimeNs!==o.ctimeNs||r.birthtimeNs!==o.birthtimeNs)}var MR,UR,OR,$m,ey,HR=yt(()=>{MR=$e(Be("util")),UR=33188,OR=class{constructor(){this.name="";this.path="";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},$m=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=UR;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},ey=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(UR);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}}});function B_e(t){let e,r;if(e=t.match(w_e))t=e[1];else if(r=t.match(I_e))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function v_e(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(E_e))?t=`/${e[1]}`:(r=t.match(C_e))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t}function DD(t,e){return t===fe?L7(e):jR(e)}var jw,Bt,dr,fe,V,T7,E_e,C_e,w_e,I_e,jR,L7,Ca=yt(()=>{jw=$e(Be("path")),Bt={root:"/",dot:".",parent:".."},dr={home:"~",nodeModules:"node_modules",manifest:"package.json",lockfile:"yarn.lock",virtual:"__virtual__",pnpJs:".pnp.js",pnpCjs:".pnp.cjs",pnpData:".pnp.data.json",pnpEsmLoader:".pnp.loader.mjs",rc:".yarnrc.yml",env:".env"},fe=Object.create(jw.default),V=Object.create(jw.default.posix);fe.cwd=()=>process.cwd();V.cwd=process.platform==="win32"?()=>jR(process.cwd()):process.cwd;process.platform==="win32"&&(V.resolve=(...t)=>t.length>0&&V.isAbsolute(t[0])?jw.default.posix.resolve(...t):jw.default.posix.resolve(V.cwd(),...t));T7=function(t,e,r){return e=t.normalize(e),r=t.normalize(r),e===r?".":(e.endsWith(t.sep)||(e=e+t.sep),r.startsWith(e)?r.slice(e.length):null)};fe.contains=(t,e)=>T7(fe,t,e);V.contains=(t,e)=>T7(V,t,e);E_e=/^([a-zA-Z]:.*)$/,C_e=/^\/\/(\.\/)?(.*)$/,w_e=/^\/([a-zA-Z]:.*)$/,I_e=/^\/unc\/(\.dot\/)?(.*)$/;jR=process.platform==="win32"?v_e:t=>t,L7=process.platform==="win32"?B_e:t=>t;fe.fromPortablePath=L7;fe.toPortablePath=jR});async function PD(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.indexPath,{recursive:!0});let o=[];for(let a of r)for(let n of r)o.push(t.mkdirPromise(t.pathUtils.join(e.indexPath,`${a}${n}`),{recursive:!0}));return await Promise.all(o),e.indexPath}async function N7(t,e,r,o,a){let n=t.pathUtils.normalize(e),u=r.pathUtils.normalize(o),A=[],p=[],{atime:h,mtime:C}=a.stableTime?{atime:Lg,mtime:Lg}:await r.lstatPromise(u);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[h,C]}),await qR(A,p,t,n,r,u,{...a,didParentExist:!0});for(let I of A)await I();await Promise.all(p.map(I=>I()))}async function qR(t,e,r,o,a,n,u){let A=u.didParentExist?await O7(r,o):null,p=await a.lstatPromise(n),{atime:h,mtime:C}=u.stableTime?{atime:Lg,mtime:Lg}:p,I;switch(!0){case p.isDirectory():I=await P_e(t,e,r,o,A,a,n,p,u);break;case p.isFile():I=await b_e(t,e,r,o,A,a,n,p,u);break;case p.isSymbolicLink():I=await k_e(t,e,r,o,A,a,n,p,u);break;default:throw new Error(`Unsupported file type (${p.mode})`)}return(u.linkStrategy?.type!=="HardlinkFromIndex"||!p.isFile())&&((I||A?.mtime?.getTime()!==C.getTime()||A?.atime?.getTime()!==h.getTime())&&(e.push(()=>r.lutimesPromise(o,h,C)),I=!0),(A===null||(A.mode&511)!==(p.mode&511))&&(e.push(()=>r.chmodPromise(o,p.mode&511)),I=!0)),I}async function O7(t,e){try{return await t.lstatPromise(e)}catch{return null}}async function P_e(t,e,r,o,a,n,u,A,p){if(a!==null&&!a.isDirectory())if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;let h=!1;a===null&&(t.push(async()=>{try{await r.mkdirPromise(o,{mode:A.mode})}catch(v){if(v.code!=="EEXIST")throw v}}),h=!0);let C=await n.readdirPromise(u),I=p.didParentExist&&!a?{...p,didParentExist:!1}:p;if(p.stableSort)for(let v of C.sort())await qR(t,e,r,r.pathUtils.join(o,v),n,n.pathUtils.join(u,v),I)&&(h=!0);else(await Promise.all(C.map(async b=>{await qR(t,e,r,r.pathUtils.join(o,b),n,n.pathUtils.join(u,b),I)}))).some(b=>b)&&(h=!0);return h}async function S_e(t,e,r,o,a,n,u,A,p,h){let C=await n.checksumFilePromise(u,{algorithm:"sha1"}),I=r.pathUtils.join(h.indexPath,C.slice(0,2),`${C}.dat`),v;(te=>(te[te.Lock=0]="Lock",te[te.Rename=1]="Rename"))(v||={});let b=1,E=await O7(r,I);if(a){let U=E&&a.dev===E.dev&&a.ino===E.ino,z=E?.mtimeMs!==D_e;if(U&&z&&h.autoRepair&&(b=0,E=null),!U)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1}let F=!E&&b===1?`${I}.${Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0")}`:null,N=!1;return t.push(async()=>{if(!E&&(b===0&&await r.lockPromise(I,async()=>{let U=await n.readFilePromise(u);await r.writeFilePromise(I,U)}),b===1&&F)){let U=await n.readFilePromise(u);await r.writeFilePromise(F,U);try{await r.linkPromise(F,I)}catch(z){if(z.code==="EEXIST")N=!0,await r.unlinkPromise(F);else throw z}}a||await r.linkPromise(I,o)}),e.push(async()=>{E||await r.lutimesPromise(I,Lg,Lg),F&&!N&&await r.unlinkPromise(F)}),!1}async function x_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{let h=await n.readFilePromise(u);await r.writeFilePromise(o,h)}),!0}async function b_e(t,e,r,o,a,n,u,A,p){return p.linkStrategy?.type==="HardlinkFromIndex"?S_e(t,e,r,o,a,n,u,A,p,p.linkStrategy):x_e(t,e,r,o,a,n,u,A,p)}async function k_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{await r.symlinkPromise(DD(r.pathUtils,await n.readlinkPromise(u)),o)}),!0}var Lg,D_e,GR=yt(()=>{Ca();Lg=new Date(456789e3*1e3),D_e=Lg.getTime()});function SD(t,e,r,o){let a=()=>{let n=r.shift();if(typeof n>"u")return null;let u=t.pathUtils.join(e,n);return Object.assign(t.statSync(u),{name:n,path:void 0})};return new qw(e,a,o)}var qw,M7=yt(()=>{BD();qw=class{constructor(e,r,o={}){this.path=e;this.nextDirent=r;this.opts=o;this.closed=!1}throwIfClosed(){if(this.closed)throw NR()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let r=this.readSync();return typeof e<"u"?e(null,r):Promise.resolve(r)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<"u"?e(null):Promise.resolve()}closeSync(){this.throwIfClosed(),this.opts.onClose?.(),this.closed=!0}}});function U7(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var _7,ty,H7=yt(()=>{_7=Be("events");HR();ty=class extends _7.EventEmitter{constructor(r,o,{bigint:a=!1}={}){super();this.status="ready";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=r,this.path=o,this.bigint=a,this.lastStats=this.stat()}static create(r,o,a){let n=new ty(r,o,a);return n.start(),n}start(){U7(this.status,"ready"),this.status="running",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit("change",this.lastStats,this.lastStats)},3)}stop(){U7(this.status,"running"),this.status="stopped",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit("stop")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let o=this.bigint?new ey:new $m;return vD(o)}}makeInterval(r){let o=setInterval(()=>{let a=this.stat(),n=this.lastStats;_R(a,n)||(this.lastStats=a,this.emit("change",a,n))},r.interval);return r.persistent?o:o.unref()}registerChangeListener(r,o){this.addListener("change",r),this.changeListeners.set(r,this.makeInterval(o))}unregisterChangeListener(r){this.removeListener("change",r);let o=this.changeListeners.get(r);typeof o<"u"&&clearInterval(o),this.changeListeners.delete(r)}unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())this.unregisterChangeListener(r)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let r of this.changeListeners.values())r.ref();return this}unref(){for(let r of this.changeListeners.values())r.unref();return this}}});function ry(t,e,r,o){let a,n,u,A;switch(typeof r){case"function":a=!1,n=!0,u=5007,A=r;break;default:({bigint:a=!1,persistent:n=!0,interval:u=5007}=r),A=o;break}let p=xD.get(t);typeof p>"u"&&xD.set(t,p=new Map);let h=p.get(e);return typeof h>"u"&&(h=ty.create(t,e,{bigint:a}),p.set(e,h)),h.registerChangeListener(A,{persistent:n,interval:u}),h}function Ng(t,e,r){let o=xD.get(t);if(typeof o>"u")return;let a=o.get(e);typeof a>"u"||(typeof r>"u"?a.unregisterAllChangeListeners():a.unregisterChangeListener(r),a.hasChangeListeners()||(a.stop(),o.delete(e)))}function Og(t){let e=xD.get(t);if(!(typeof e>"u"))for(let r of e.keys())Ng(t,r)}var xD,YR=yt(()=>{H7();xD=new WeakMap});function Q_e(t){let e=t.match(/\r?\n/g);if(e===null)return q7.EOL;let r=e.filter(a=>a===`\r -`).length,o=e.length-r;return r>o?`\r -`:` -`}function Mg(t,e){return e.replace(/\r?\n/g,Q_e(t))}var j7,q7,hf,Mu,Ug=yt(()=>{j7=Be("crypto"),q7=Be("os");GR();Ca();hf=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let o=[e];for(;o.length>0;){let a=o.shift();if((await this.lstatPromise(a)).isDirectory()){let u=await this.readdirPromise(a);if(r)for(let A of u.sort())o.push(this.pathUtils.join(a,A));else throw new Error("Not supported")}else yield a}}async checksumFilePromise(e,{algorithm:r="sha512"}={}){let o=await this.openPromise(e,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,j7.createHash)(r),A=0;for(;(A=await this.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await this.closePromise(o)}}async removePromise(e,{recursive:r=!0,maxRetries:o=5}={}){let a;try{a=await this.lstatPromise(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(a.isDirectory()){if(r){let n=await this.readdirPromise(e);await Promise.all(n.map(u=>this.removePromise(this.pathUtils.resolve(e,u))))}for(let n=0;n<=o;n++)try{await this.rmdirPromise(e);break}catch(u){if(u.code!=="EBUSY"&&u.code!=="ENOTEMPTY")throw u;nsetTimeout(A,n*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:r=!0}={}){let o;try{o=this.lstatSync(e)}catch(a){if(a.code==="ENOENT")return;throw a}if(o.isDirectory()){if(r)for(let a of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,a));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{await this.mkdirPromise(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&await this.chmodPromise(A,r),o!=null)await this.utimesPromise(A,o[0],o[1]);else{let p=await this.statPromise(this.pathUtils.dirname(A));await this.utimesPromise(A,p.atime,p.mtime)}}}return n}mkdirpSync(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{this.mkdirSync(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&this.chmodSync(A,r),o!=null)this.utimesSync(A,o[0],o[1]);else{let p=this.statSync(this.pathUtils.dirname(A));this.utimesSync(A,p.atime,p.mtime)}}}return n}async copyPromise(e,r,{baseFs:o=this,overwrite:a=!0,stableSort:n=!1,stableTime:u=!1,linkStrategy:A=null}={}){return await N7(this,e,o,r,{overwrite:a,stableSort:n,stableTime:u,linkStrategy:A})}copySync(e,r,{baseFs:o=this,overwrite:a=!0}={}){let n=o.lstatSync(r),u=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);let p=o.readdirSync(r);for(let h of p)this.copySync(this.pathUtils.join(e,h),o.pathUtils.join(r,h),{baseFs:o,overwrite:a})}else if(n.isFile()){if(!u||a){u&&this.removeSync(e);let p=o.readFileSync(r);this.writeFileSync(e,p)}}else if(n.isSymbolicLink()){if(!u||a){u&&this.removeSync(e);let p=o.readlinkSync(r);this.symlinkSync(DD(this.pathUtils,p),e)}}else throw new Error(`Unsupported file type (file: ${r}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);let A=n.mode&511;this.chmodSync(e,A)}async changeFilePromise(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferPromise(e,r,o):this.changeFileTextPromise(e,r,o)}async changeFileBufferPromise(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=await this.readFilePromise(e)}catch{}Buffer.compare(a,r)!==0&&await this.writeFilePromise(e,r,{mode:o})}async changeFileTextPromise(e,r,{automaticNewlines:o,mode:a}={}){let n="";try{n=await this.readFilePromise(e,"utf8")}catch{}let u=o?Mg(n,r):r;n!==u&&await this.writeFilePromise(e,u,{mode:a})}changeFileSync(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferSync(e,r,o):this.changeFileTextSync(e,r,o)}changeFileBufferSync(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=this.readFileSync(e)}catch{}Buffer.compare(a,r)!==0&&this.writeFileSync(e,r,{mode:o})}changeFileTextSync(e,r,{automaticNewlines:o=!1,mode:a}={}){let n="";try{n=this.readFileSync(e,"utf8")}catch{}let u=o?Mg(n,r):r;n!==u&&this.writeFileSync(e,u,{mode:a})}async movePromise(e,r){try{await this.renamePromise(e,r)}catch(o){if(o.code==="EXDEV")await this.copyPromise(r,e),await this.removePromise(e);else throw o}}moveSync(e,r){try{this.renameSync(e,r)}catch(o){if(o.code==="EXDEV")this.copySync(r,e),this.removeSync(e);else throw o}}async lockPromise(e,r){let o=`${e}.flock`,a=1e3/60,n=Date.now(),u=null,A=async()=>{let p;try{[p]=await this.readJsonPromise(o)}catch{return Date.now()-n<500}try{return process.kill(p,0),!0}catch{return!1}};for(;u===null;)try{u=await this.openPromise(o,"wx")}catch(p){if(p.code==="EEXIST"){if(!await A())try{await this.unlinkPromise(o);continue}catch{}if(Date.now()-n<60*1e3)await new Promise(h=>setTimeout(h,a));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${o})`)}else throw p}await this.writePromise(u,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(u),await this.unlinkPromise(o)}catch{}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}async writeJsonPromise(e,r,{compact:o=!1}={}){let a=o?0:2;return await this.writeFilePromise(e,`${JSON.stringify(r,null,a)} -`)}writeJsonSync(e,r,{compact:o=!1}={}){let a=o?0:2;return this.writeFileSync(e,`${JSON.stringify(r,null,a)} -`)}async preserveTimePromise(e,r){let o=await this.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await this.lutimesPromise(e,o.atime,o.mtime)}async preserveTimeSync(e,r){let o=this.lstatSync(e),a=r();typeof a<"u"&&(e=a),this.lutimesSync(e,o.atime,o.mtime)}},Mu=class extends hf{constructor(){super(V)}}});var Ps,gf=yt(()=>{Ug();Ps=class extends hf{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,r,o){return this.baseFs.openPromise(this.mapToBase(e),r,o)}openSync(e,r,o){return this.baseFs.openSync(this.mapToBase(e),r,o)}async opendirPromise(e,r){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),r),{path:e})}opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),r),{path:e})}async readPromise(e,r,o,a,n){return await this.baseFs.readPromise(e,r,o,a,n)}readSync(e,r,o,a,n){return this.baseFs.readSync(e,r,o,a,n)}async writePromise(e,r,o,a,n){return typeof r=="string"?await this.baseFs.writePromise(e,r,o):await this.baseFs.writePromise(e,r,o,a,n)}writeSync(e,r,o,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r,o):this.baseFs.writeSync(e,r,o,a,n)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,r)}createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,r)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase(e),r)}async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}fstatSync(e,r){return this.baseFs.fstatSync(e,r)}lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}fchmodSync(e,r){return this.baseFs.fchmodSync(e,r)}async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e),r)}chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}async fchownPromise(e,r,o){return this.baseFs.fchownPromise(e,r,o)}fchownSync(e,r,o){return this.baseFs.fchownSync(e,r,o)}async chownPromise(e,r,o){return this.baseFs.chownPromise(this.mapToBase(e),r,o)}chownSync(e,r,o){return this.baseFs.chownSync(this.mapToBase(e),r,o)}async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(r))}renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(r))}async copyFilePromise(e,r,o=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),o)}copyFileSync(e,r,o=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),o)}async appendFilePromise(e,r,o){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,o)}appendFileSync(e,r,o){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,o)}async writeFilePromise(e,r,o){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,o)}writeFileSync(e,r,o){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,o)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,o){return this.baseFs.utimesPromise(this.mapToBase(e),r,o)}utimesSync(e,r,o){return this.baseFs.utimesSync(this.mapToBase(e),r,o)}async lutimesPromise(e,r,o){return this.baseFs.lutimesPromise(this.mapToBase(e),r,o)}lutimesSync(e,r,o){return this.baseFs.lutimesSync(this.mapToBase(e),r,o)}async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e),r)}mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e),r)}rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(r))}linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(r))}async symlinkPromise(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkPromise(u,a,o)}symlinkSync(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkSync(u,a,o)}async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapToBase(e),r)}truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}watch(e,r,o){return this.baseFs.watch(this.mapToBase(e),r,o)}watchFile(e,r,o){return this.baseFs.watchFile(this.mapToBase(e),r,o)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}}});var Uu,G7=yt(()=>{gf();Uu=class extends Ps{constructor(r,{baseFs:o,pathUtils:a}){super(a);this.target=r,this.baseFs=o}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(r){return r}mapToBase(r){return r}}});var Y7,Tn,_g=yt(()=>{Y7=$e(Be("fs"));Ug();Ca();Tn=class extends Mu{constructor(r=Y7.default){super();this.realFs=r}getExtractHint(){return!1}getRealPath(){return Bt.root}resolve(r){return V.resolve(r)}async openPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.open(fe.fromPortablePath(r),o,a,this.makeCallback(n,u))})}openSync(r,o,a){return this.realFs.openSync(fe.fromPortablePath(r),o,a)}async opendirPromise(r,o){return await new Promise((a,n)=>{typeof o<"u"?this.realFs.opendir(fe.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.opendir(fe.fromPortablePath(r),this.makeCallback(a,n))}).then(a=>{let n=a;return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n})}opendirSync(r,o){let n=typeof o<"u"?this.realFs.opendirSync(fe.fromPortablePath(r),o):this.realFs.opendirSync(fe.fromPortablePath(r));return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n}async readPromise(r,o,a=0,n=0,u=-1){return await new Promise((A,p)=>{this.realFs.read(r,o,a,n,u,(h,C)=>{h?p(h):A(C)})})}readSync(r,o,a,n,u){return this.realFs.readSync(r,o,a,n,u)}async writePromise(r,o,a,n,u){return await new Promise((A,p)=>typeof o=="string"?this.realFs.write(r,o,a,this.makeCallback(A,p)):this.realFs.write(r,o,a,n,u,this.makeCallback(A,p)))}writeSync(r,o,a,n,u){return typeof o=="string"?this.realFs.writeSync(r,o,a):this.realFs.writeSync(r,o,a,n,u)}async closePromise(r){await new Promise((o,a)=>{this.realFs.close(r,this.makeCallback(o,a))})}closeSync(r){this.realFs.closeSync(r)}createReadStream(r,o){let a=r!==null?fe.fromPortablePath(r):r;return this.realFs.createReadStream(a,o)}createWriteStream(r,o){let a=r!==null?fe.fromPortablePath(r):r;return this.realFs.createWriteStream(a,o)}async realpathPromise(r){return await new Promise((o,a)=>{this.realFs.realpath(fe.fromPortablePath(r),{},this.makeCallback(o,a))}).then(o=>fe.toPortablePath(o))}realpathSync(r){return fe.toPortablePath(this.realFs.realpathSync(fe.fromPortablePath(r),{}))}async existsPromise(r){return await new Promise(o=>{this.realFs.exists(fe.fromPortablePath(r),o)})}accessSync(r,o){return this.realFs.accessSync(fe.fromPortablePath(r),o)}async accessPromise(r,o){return await new Promise((a,n)=>{this.realFs.access(fe.fromPortablePath(r),o,this.makeCallback(a,n))})}existsSync(r){return this.realFs.existsSync(fe.fromPortablePath(r))}async statPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.stat(fe.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.stat(fe.fromPortablePath(r),this.makeCallback(a,n))})}statSync(r,o){return o?this.realFs.statSync(fe.fromPortablePath(r),o):this.realFs.statSync(fe.fromPortablePath(r))}async fstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.fstat(r,o,this.makeCallback(a,n)):this.realFs.fstat(r,this.makeCallback(a,n))})}fstatSync(r,o){return o?this.realFs.fstatSync(r,o):this.realFs.fstatSync(r)}async lstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.lstat(fe.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.lstat(fe.fromPortablePath(r),this.makeCallback(a,n))})}lstatSync(r,o){return o?this.realFs.lstatSync(fe.fromPortablePath(r),o):this.realFs.lstatSync(fe.fromPortablePath(r))}async fchmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.fchmod(r,o,this.makeCallback(a,n))})}fchmodSync(r,o){return this.realFs.fchmodSync(r,o)}async chmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.chmod(fe.fromPortablePath(r),o,this.makeCallback(a,n))})}chmodSync(r,o){return this.realFs.chmodSync(fe.fromPortablePath(r),o)}async fchownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.fchown(r,o,a,this.makeCallback(n,u))})}fchownSync(r,o,a){return this.realFs.fchownSync(r,o,a)}async chownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.chown(fe.fromPortablePath(r),o,a,this.makeCallback(n,u))})}chownSync(r,o,a){return this.realFs.chownSync(fe.fromPortablePath(r),o,a)}async renamePromise(r,o){return await new Promise((a,n)=>{this.realFs.rename(fe.fromPortablePath(r),fe.fromPortablePath(o),this.makeCallback(a,n))})}renameSync(r,o){return this.realFs.renameSync(fe.fromPortablePath(r),fe.fromPortablePath(o))}async copyFilePromise(r,o,a=0){return await new Promise((n,u)=>{this.realFs.copyFile(fe.fromPortablePath(r),fe.fromPortablePath(o),a,this.makeCallback(n,u))})}copyFileSync(r,o,a=0){return this.realFs.copyFileSync(fe.fromPortablePath(r),fe.fromPortablePath(o),a)}async appendFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?fe.fromPortablePath(r):r;a?this.realFs.appendFile(A,o,a,this.makeCallback(n,u)):this.realFs.appendFile(A,o,this.makeCallback(n,u))})}appendFileSync(r,o,a){let n=typeof r=="string"?fe.fromPortablePath(r):r;a?this.realFs.appendFileSync(n,o,a):this.realFs.appendFileSync(n,o)}async writeFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?fe.fromPortablePath(r):r;a?this.realFs.writeFile(A,o,a,this.makeCallback(n,u)):this.realFs.writeFile(A,o,this.makeCallback(n,u))})}writeFileSync(r,o,a){let n=typeof r=="string"?fe.fromPortablePath(r):r;a?this.realFs.writeFileSync(n,o,a):this.realFs.writeFileSync(n,o)}async unlinkPromise(r){return await new Promise((o,a)=>{this.realFs.unlink(fe.fromPortablePath(r),this.makeCallback(o,a))})}unlinkSync(r){return this.realFs.unlinkSync(fe.fromPortablePath(r))}async utimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.utimes(fe.fromPortablePath(r),o,a,this.makeCallback(n,u))})}utimesSync(r,o,a){this.realFs.utimesSync(fe.fromPortablePath(r),o,a)}async lutimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.lutimes(fe.fromPortablePath(r),o,a,this.makeCallback(n,u))})}lutimesSync(r,o,a){this.realFs.lutimesSync(fe.fromPortablePath(r),o,a)}async mkdirPromise(r,o){return await new Promise((a,n)=>{this.realFs.mkdir(fe.fromPortablePath(r),o,this.makeCallback(a,n))})}mkdirSync(r,o){return this.realFs.mkdirSync(fe.fromPortablePath(r),o)}async rmdirPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.rmdir(fe.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.rmdir(fe.fromPortablePath(r),this.makeCallback(a,n))})}rmdirSync(r,o){return this.realFs.rmdirSync(fe.fromPortablePath(r),o)}async linkPromise(r,o){return await new Promise((a,n)=>{this.realFs.link(fe.fromPortablePath(r),fe.fromPortablePath(o),this.makeCallback(a,n))})}linkSync(r,o){return this.realFs.linkSync(fe.fromPortablePath(r),fe.fromPortablePath(o))}async symlinkPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.symlink(fe.fromPortablePath(r.replace(/\/+$/,"")),fe.fromPortablePath(o),a,this.makeCallback(n,u))})}symlinkSync(r,o,a){return this.realFs.symlinkSync(fe.fromPortablePath(r.replace(/\/+$/,"")),fe.fromPortablePath(o),a)}async readFilePromise(r,o){return await new Promise((a,n)=>{let u=typeof r=="string"?fe.fromPortablePath(r):r;this.realFs.readFile(u,o,this.makeCallback(a,n))})}readFileSync(r,o){let a=typeof r=="string"?fe.fromPortablePath(r):r;return this.realFs.readFileSync(a,o)}async readdirPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.readdir(fe.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.readdir(fe.fromPortablePath(r),this.makeCallback(u=>a(u),n))})}readdirSync(r,o){return o?this.realFs.readdirSync(fe.fromPortablePath(r),o):this.realFs.readdirSync(fe.fromPortablePath(r))}async readlinkPromise(r){return await new Promise((o,a)=>{this.realFs.readlink(fe.fromPortablePath(r),this.makeCallback(o,a))}).then(o=>fe.toPortablePath(o))}readlinkSync(r){return fe.toPortablePath(this.realFs.readlinkSync(fe.fromPortablePath(r)))}async truncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.truncate(fe.fromPortablePath(r),o,this.makeCallback(a,n))})}truncateSync(r,o){return this.realFs.truncateSync(fe.fromPortablePath(r),o)}async ftruncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.ftruncate(r,o,this.makeCallback(a,n))})}ftruncateSync(r,o){return this.realFs.ftruncateSync(r,o)}watch(r,o,a){return this.realFs.watch(fe.fromPortablePath(r),o,a)}watchFile(r,o,a){return this.realFs.watchFile(fe.fromPortablePath(r),o,a)}unwatchFile(r,o){return this.realFs.unwatchFile(fe.fromPortablePath(r),o)}makeCallback(r,o){return(a,n)=>{a?o(a):r(n)}}}});var gn,W7=yt(()=>{_g();gf();Ca();gn=class extends Ps{constructor(r,{baseFs:o=new Tn}={}){super(V);this.target=this.pathUtils.normalize(r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(r){return this.pathUtils.isAbsolute(r)?V.normalize(r):this.baseFs.resolve(V.join(this.target,r))}mapFromBase(r){return r}mapToBase(r){return this.pathUtils.isAbsolute(r)?r:this.pathUtils.join(this.target,r)}}});var K7,_u,V7=yt(()=>{_g();gf();Ca();K7=Bt.root,_u=class extends Ps{constructor(r,{baseFs:o=new Tn}={}){super(V);this.target=this.pathUtils.resolve(Bt.root,r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Bt.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(r){let o=this.pathUtils.normalize(r);if(this.pathUtils.isAbsolute(r))return this.pathUtils.resolve(this.target,this.pathUtils.relative(K7,r));if(o.match(/^\.\.\/?/))throw new Error(`Resolving this path (${r}) would escape the jail`);return this.pathUtils.resolve(this.target,r)}mapFromBase(r){return this.pathUtils.resolve(K7,this.pathUtils.relative(this.target,r))}}});var ny,z7=yt(()=>{gf();ny=class extends Ps{constructor(r,o){super(o);this.instance=null;this.factory=r}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(r){this.instance=r}mapFromBase(r){return r}mapToBase(r){return r}}});var Hg,wa,Up,J7=yt(()=>{Hg=Be("fs");Ug();_g();YR();BD();Ca();wa=4278190080,Up=class extends Mu{constructor({baseFs:r=new Tn,filter:o=null,magicByte:a=42,maxOpenFiles:n=1/0,useCache:u=!0,maxAge:A=5e3,typeCheck:p=Hg.constants.S_IFREG,getMountPoint:h,factoryPromise:C,factorySync:I}){if(Math.floor(a)!==a||!(a>1&&a<=127))throw new Error("The magic byte must be set to a round value between 1 and 127 included");super();this.fdMap=new Map;this.nextFd=3;this.isMount=new Set;this.notMount=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.baseFs=r,this.mountInstances=u?new Map:null,this.factoryPromise=C,this.factorySync=I,this.filter=o,this.getMountPoint=h,this.magic=a<<24,this.maxAge=A,this.maxOpenFiles=n,this.typeCheck=p}getExtractHint(r){return this.baseFs.getExtractHint(r)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Og(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.saveAndClose?.(),this.mountInstances.delete(r)}discardAndClose(){if(Og(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.discardAndClose?.(),this.mountInstances.delete(r)}resolve(r){return this.baseFs.resolve(r)}remapFd(r,o){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,o]),a}async openPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.openPromise(r,o,a),async(n,{subPath:u})=>this.remapFd(n,await n.openPromise(u,o,a)))}openSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,o,a),(n,{subPath:u})=>this.remapFd(n,n.openSync(u,o,a)))}async opendirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.opendirPromise(r,o),async(a,{subPath:n})=>await a.opendirPromise(n,o),{requireSubpath:!1})}opendirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.opendirSync(r,o),(a,{subPath:n})=>a.opendirSync(n,o),{requireSubpath:!1})}async readPromise(r,o,a,n,u){if((r&wa)!==this.magic)return await this.baseFs.readPromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("read");let[p,h]=A;return await p.readPromise(h,o,a,n,u)}readSync(r,o,a,n,u){if((r&wa)!==this.magic)return this.baseFs.readSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("readSync");let[p,h]=A;return p.readSync(h,o,a,n,u)}async writePromise(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?await this.baseFs.writePromise(r,o,a):await this.baseFs.writePromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("write");let[p,h]=A;return typeof o=="string"?await p.writePromise(h,o,a):await p.writePromise(h,o,a,n,u)}writeSync(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?this.baseFs.writeSync(r,o,a):this.baseFs.writeSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("writeSync");let[p,h]=A;return typeof o=="string"?p.writeSync(h,o,a):p.writeSync(h,o,a,n,u)}async closePromise(r){if((r&wa)!==this.magic)return await this.baseFs.closePromise(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("close");this.fdMap.delete(r);let[a,n]=o;return await a.closePromise(n)}closeSync(r){if((r&wa)!==this.magic)return this.baseFs.closeSync(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("closeSync");this.fdMap.delete(r);let[a,n]=o;return a.closeSync(n)}createReadStream(r,o){return r===null?this.baseFs.createReadStream(r,o):this.makeCallSync(r,()=>this.baseFs.createReadStream(r,o),(a,{archivePath:n,subPath:u})=>{let A=a.createReadStream(u,o);return A.path=fe.fromPortablePath(this.pathUtils.join(n,u)),A})}createWriteStream(r,o){return r===null?this.baseFs.createWriteStream(r,o):this.makeCallSync(r,()=>this.baseFs.createWriteStream(r,o),(a,{subPath:n})=>a.createWriteStream(n,o))}async realpathPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.realpathPromise(r),async(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=await this.baseFs.realpathPromise(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,await o.realpathPromise(n)))})}realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(r),(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=this.baseFs.realpathSync(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,o.realpathSync(n)))})}async existsPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.existsPromise(r),async(o,{subPath:a})=>await o.existsPromise(a))}existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(o,{subPath:a})=>o.existsSync(a))}async accessPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.accessPromise(r,o),async(a,{subPath:n})=>await a.accessPromise(n,o))}accessSync(r,o){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,o),(a,{subPath:n})=>a.accessSync(n,o))}async statPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.statPromise(r,o),async(a,{subPath:n})=>await a.statPromise(n,o))}statSync(r,o){return this.makeCallSync(r,()=>this.baseFs.statSync(r,o),(a,{subPath:n})=>a.statSync(n,o))}async fstatPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstat");let[n,u]=a;return n.fstatPromise(u,o)}fstatSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstatSync");let[n,u]=a;return n.fstatSync(u,o)}async lstatPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.lstatPromise(r,o),async(a,{subPath:n})=>await a.lstatPromise(n,o))}lstatSync(r,o){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,o),(a,{subPath:n})=>a.lstatSync(n,o))}async fchmodPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmod");let[n,u]=a;return n.fchmodPromise(u,o)}fchmodSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmodSync");let[n,u]=a;return n.fchmodSync(u,o)}async chmodPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.chmodPromise(r,o),async(a,{subPath:n})=>await a.chmodPromise(n,o))}chmodSync(r,o){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,o),(a,{subPath:n})=>a.chmodSync(n,o))}async fchownPromise(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownPromise(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchown");let[u,A]=n;return u.fchownPromise(A,o,a)}fchownSync(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownSync(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchownSync");let[u,A]=n;return u.fchownSync(A,o,a)}async chownPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.chownPromise(r,o,a),async(n,{subPath:u})=>await n.chownPromise(u,o,a))}chownSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,o,a),(n,{subPath:u})=>n.chownSync(u,o,a))}async renamePromise(r,o){return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.renamePromise(r,o),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(a,{subPath:n})=>await this.makeCallPromise(o,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await a.renamePromise(n,A)}))}renameSync(r,o){return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.renameSync(r,o),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(a,{subPath:n})=>this.makeCallSync(o,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return a.renameSync(n,A)}))}async copyFilePromise(r,o,a=0){let n=async(u,A,p,h)=>{if((a&Hg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&Hg.constants.COPYFILE_EXCL&&await this.existsPromise(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let C;try{C=await u.readFilePromise(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}await p.writeFilePromise(h,C)};return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.copyFilePromise(r,o,a),async(u,{subPath:A})=>await n(this.baseFs,r,u,A)),async(u,{subPath:A})=>await this.makeCallPromise(o,async()=>await n(u,A,this.baseFs,o),async(p,{subPath:h})=>u!==p?await n(u,A,p,h):await u.copyFilePromise(A,h,a)))}copyFileSync(r,o,a=0){let n=(u,A,p,h)=>{if((a&Hg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&Hg.constants.COPYFILE_EXCL&&this.existsSync(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let C;try{C=u.readFileSync(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}p.writeFileSync(h,C)};return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.copyFileSync(r,o,a),(u,{subPath:A})=>n(this.baseFs,r,u,A)),(u,{subPath:A})=>this.makeCallSync(o,()=>n(u,A,this.baseFs,o),(p,{subPath:h})=>u!==p?n(u,A,p,h):u.copyFileSync(A,h,a)))}async appendFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.appendFilePromise(r,o,a),async(n,{subPath:u})=>await n.appendFilePromise(u,o,a))}appendFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.appendFileSync(r,o,a),(n,{subPath:u})=>n.appendFileSync(u,o,a))}async writeFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.writeFilePromise(r,o,a),async(n,{subPath:u})=>await n.writeFilePromise(u,o,a))}writeFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.writeFileSync(r,o,a),(n,{subPath:u})=>n.writeFileSync(u,o,a))}async unlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.unlinkPromise(r),async(o,{subPath:a})=>await o.unlinkPromise(a))}unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(o,{subPath:a})=>o.unlinkSync(a))}async utimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.utimesPromise(r,o,a),async(n,{subPath:u})=>await n.utimesPromise(u,o,a))}utimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(r,o,a),(n,{subPath:u})=>n.utimesSync(u,o,a))}async lutimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.lutimesPromise(r,o,a),async(n,{subPath:u})=>await n.lutimesPromise(u,o,a))}lutimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSync(r,o,a),(n,{subPath:u})=>n.lutimesSync(u,o,a))}async mkdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.mkdirPromise(r,o),async(a,{subPath:n})=>await a.mkdirPromise(n,o))}mkdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,o),(a,{subPath:n})=>a.mkdirSync(n,o))}async rmdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmdirPromise(r,o),async(a,{subPath:n})=>await a.rmdirPromise(n,o))}rmdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,o),(a,{subPath:n})=>a.rmdirSync(n,o))}async linkPromise(r,o){return await this.makeCallPromise(o,async()=>await this.baseFs.linkPromise(r,o),async(a,{subPath:n})=>await a.linkPromise(r,n))}linkSync(r,o){return this.makeCallSync(o,()=>this.baseFs.linkSync(r,o),(a,{subPath:n})=>a.linkSync(r,n))}async symlinkPromise(r,o,a){return await this.makeCallPromise(o,async()=>await this.baseFs.symlinkPromise(r,o,a),async(n,{subPath:u})=>await n.symlinkPromise(r,u))}symlinkSync(r,o,a){return this.makeCallSync(o,()=>this.baseFs.symlinkSync(r,o,a),(n,{subPath:u})=>n.symlinkSync(r,u))}async readFilePromise(r,o){return this.makeCallPromise(r,async()=>await this.baseFs.readFilePromise(r,o),async(a,{subPath:n})=>await a.readFilePromise(n,o))}readFileSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readFileSync(r,o),(a,{subPath:n})=>a.readFileSync(n,o))}async readdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.readdirPromise(r,o),async(a,{subPath:n})=>await a.readdirPromise(n,o),{requireSubpath:!1})}readdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readdirSync(r,o),(a,{subPath:n})=>a.readdirSync(n,o),{requireSubpath:!1})}async readlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.readlinkPromise(r),async(o,{subPath:a})=>await o.readlinkPromise(a))}readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(r),(o,{subPath:a})=>o.readlinkSync(a))}async truncatePromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.truncatePromise(r,o),async(a,{subPath:n})=>await a.truncatePromise(n,o))}truncateSync(r,o){return this.makeCallSync(r,()=>this.baseFs.truncateSync(r,o),(a,{subPath:n})=>a.truncateSync(n,o))}async ftruncatePromise(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncatePromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncate");let[n,u]=a;return n.ftruncatePromise(u,o)}ftruncateSync(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncateSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncateSync");let[n,u]=a;return n.ftruncateSync(u,o)}watch(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,o,a),(n,{subPath:u})=>n.watch(u,o,a))}watchFile(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,o,a),()=>ry(this,r,o,a))}unwatchFile(r,o){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(r,o),()=>Ng(this,r,o))}async makeCallPromise(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return await o();let u=this.resolve(r),A=this.findMount(u);return A?n&&A.subPath==="/"?await o():await this.getMountPromise(A.archivePath,async p=>await a(p,A)):await o()}makeCallSync(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return o();let u=this.resolve(r),A=this.findMount(u);return!A||n&&A.subPath==="/"?o():this.getMountSync(A.archivePath,p=>a(p,A))}findMount(r){if(this.filter&&!this.filter.test(r))return null;let o="";for(;;){let a=r.substring(o.length),n=this.getMountPoint(a,o);if(!n)return null;if(o=this.pathUtils.join(o,n),!this.isMount.has(o)){if(this.notMount.has(o))continue;try{if(this.typeCheck!==null&&(this.baseFs.lstatSync(o).mode&Hg.constants.S_IFMT)!==this.typeCheck){this.notMount.add(o);continue}}catch{return null}this.isMount.add(o)}return{archivePath:o,subPath:this.pathUtils.join(Bt.root,r.substring(o.length))}}}limitOpenFiles(r){if(this.mountInstances===null)return;let o=Date.now(),a=o+this.maxAge,n=r===null?0:this.mountInstances.size-r;for(let[u,{childFs:A,expiresAt:p,refCount:h}]of this.mountInstances.entries())if(!(h!==0||A.hasOpenFileHandles?.())){if(o>=p){A.saveAndClose?.(),this.mountInstances.delete(u),n-=1;continue}else if(r===null||n<=0){a=p;break}A.saveAndClose?.(),this.mountInstances.delete(u),n-=1}this.limitOpenFilesTimeout===null&&(r===null&&this.mountInstances.size>0||r!==null)&&isFinite(a)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},a-o).unref())}async getMountPromise(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);if(!a){let n=await this.factoryPromise(this.baseFs,r);a=this.mountInstances.get(r),a||(a={childFs:n(),expiresAt:0,refCount:0})}this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,a.refCount+=1;try{return await o(a.childFs)}finally{a.refCount-=1}}else{let a=(await this.factoryPromise(this.baseFs,r))();try{return await o(a)}finally{a.saveAndClose?.()}}}getMountSync(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);return a||(a={childFs:this.factorySync(this.baseFs,r),expiresAt:0,refCount:0}),this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,o(a.childFs)}else{let a=this.factorySync(this.baseFs,r);try{return o(a)}finally{a.saveAndClose?.()}}}}});var Zt,WR,Gw,X7=yt(()=>{Ug();Ca();Zt=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),WR=class extends hf{constructor(){super(V)}getExtractHint(){throw Zt()}getRealPath(){throw Zt()}resolve(){throw Zt()}async openPromise(){throw Zt()}openSync(){throw Zt()}async opendirPromise(){throw Zt()}opendirSync(){throw Zt()}async readPromise(){throw Zt()}readSync(){throw Zt()}async writePromise(){throw Zt()}writeSync(){throw Zt()}async closePromise(){throw Zt()}closeSync(){throw Zt()}createWriteStream(){throw Zt()}createReadStream(){throw Zt()}async realpathPromise(){throw Zt()}realpathSync(){throw Zt()}async readdirPromise(){throw Zt()}readdirSync(){throw Zt()}async existsPromise(e){throw Zt()}existsSync(e){throw Zt()}async accessPromise(){throw Zt()}accessSync(){throw Zt()}async statPromise(){throw Zt()}statSync(){throw Zt()}async fstatPromise(e){throw Zt()}fstatSync(e){throw Zt()}async lstatPromise(e){throw Zt()}lstatSync(e){throw Zt()}async fchmodPromise(){throw Zt()}fchmodSync(){throw Zt()}async chmodPromise(){throw Zt()}chmodSync(){throw Zt()}async fchownPromise(){throw Zt()}fchownSync(){throw Zt()}async chownPromise(){throw Zt()}chownSync(){throw Zt()}async mkdirPromise(){throw Zt()}mkdirSync(){throw Zt()}async rmdirPromise(){throw Zt()}rmdirSync(){throw Zt()}async linkPromise(){throw Zt()}linkSync(){throw Zt()}async symlinkPromise(){throw Zt()}symlinkSync(){throw Zt()}async renamePromise(){throw Zt()}renameSync(){throw Zt()}async copyFilePromise(){throw Zt()}copyFileSync(){throw Zt()}async appendFilePromise(){throw Zt()}appendFileSync(){throw Zt()}async writeFilePromise(){throw Zt()}writeFileSync(){throw Zt()}async unlinkPromise(){throw Zt()}unlinkSync(){throw Zt()}async utimesPromise(){throw Zt()}utimesSync(){throw Zt()}async lutimesPromise(){throw Zt()}lutimesSync(){throw Zt()}async readFilePromise(){throw Zt()}readFileSync(){throw Zt()}async readlinkPromise(){throw Zt()}readlinkSync(){throw Zt()}async truncatePromise(){throw Zt()}truncateSync(){throw Zt()}async ftruncatePromise(e,r){throw Zt()}ftruncateSync(e,r){throw Zt()}watch(){throw Zt()}watchFile(){throw Zt()}unwatchFile(){throw Zt()}},Gw=WR;Gw.instance=new WR});var _p,Z7=yt(()=>{gf();Ca();_p=class extends Ps{constructor(r){super(fe);this.baseFs=r}mapFromBase(r){return fe.fromPortablePath(r)}mapToBase(r){return fe.toPortablePath(r)}}});var F_e,KR,R_e,mi,$7=yt(()=>{_g();gf();Ca();F_e=/^[0-9]+$/,KR=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,R_e=/^([^/]+-)?[a-f0-9]+$/,mi=class extends Ps{constructor({baseFs:r=new Tn}={}){super(V);this.baseFs=r}static makeVirtualPath(r,o,a){if(V.basename(r)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!V.basename(o).match(R_e))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let u=V.relative(V.dirname(r),a).split("/"),A=0;for(;A{VR=$e(Be("buffer")),kD=Be("url"),eY=Be("util");gf();Ca();bD=class extends Ps{constructor(r){super(fe);this.baseFs=r}mapFromBase(r){return r}mapToBase(r){if(typeof r=="string")return r;if(r instanceof kD.URL)return(0,kD.fileURLToPath)(r);if(Buffer.isBuffer(r)){let o=r.toString();if(!T_e(r,o))throw new Error("Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942");return o}throw new Error(`Unsupported path type: ${(0,eY.inspect)(r)}`)}}});var rY,Bo,df,Hp,QD,FD,iy,Tc,Lc,L_e,N_e,O_e,M_e,Yw,nY=yt(()=>{rY=Be("readline"),Bo=Symbol("kBaseFs"),df=Symbol("kFd"),Hp=Symbol("kClosePromise"),QD=Symbol("kCloseResolve"),FD=Symbol("kCloseReject"),iy=Symbol("kRefs"),Tc=Symbol("kRef"),Lc=Symbol("kUnref"),Yw=class{constructor(e,r){this[L_e]=1;this[N_e]=void 0;this[O_e]=void 0;this[M_e]=void 0;this[Bo]=r,this[df]=e}get fd(){return this[df]}async appendFile(e,r){try{this[Tc](this.appendFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;return await this[Bo].appendFilePromise(this.fd,e,o?{encoding:o}:void 0)}finally{this[Lc]()}}async chown(e,r){try{return this[Tc](this.chown),await this[Bo].fchownPromise(this.fd,e,r)}finally{this[Lc]()}}async chmod(e){try{return this[Tc](this.chmod),await this[Bo].fchmodPromise(this.fd,e)}finally{this[Lc]()}}createReadStream(e){return this[Bo].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Bo].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error("Method not implemented.")}sync(){throw new Error("Method not implemented.")}async read(e,r,o,a){try{this[Tc](this.read);let n;return Buffer.isBuffer(e)?n=e:(e??={},n=e.buffer??Buffer.alloc(16384),r=e.offset||0,o=e.length??n.byteLength,a=e.position??null),r??=0,o??=0,o===0?{bytesRead:o,buffer:n}:{bytesRead:await this[Bo].readPromise(this.fd,n,r,o,a),buffer:n}}finally{this[Lc]()}}async readFile(e){try{this[Tc](this.readFile);let r=(typeof e=="string"?e:e?.encoding)??void 0;return await this[Bo].readFilePromise(this.fd,r)}finally{this[Lc]()}}readLines(e){return(0,rY.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Tc](this.stat),await this[Bo].fstatPromise(this.fd,e)}finally{this[Lc]()}}async truncate(e){try{return this[Tc](this.truncate),await this[Bo].ftruncatePromise(this.fd,e)}finally{this[Lc]()}}utimes(e,r){throw new Error("Method not implemented.")}async writeFile(e,r){try{this[Tc](this.writeFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;await this[Bo].writeFilePromise(this.fd,e,o)}finally{this[Lc]()}}async write(...e){try{if(this[Tc](this.write),ArrayBuffer.isView(e[0])){let[r,o,a,n]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o??void 0,a??void 0,n??void 0),buffer:r}}else{let[r,o,a]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o,a),buffer:r}}}finally{this[Lc]()}}async writev(e,r){try{this[Tc](this.writev);let o=0;if(typeof r<"u")for(let a of e){let n=await this.write(a,void 0,void 0,r);o+=n.bytesWritten,r+=n.bytesWritten}else for(let a of e){let n=await this.write(a);o+=n.bytesWritten}return{buffers:e,bytesWritten:o}}finally{this[Lc]()}}readv(e,r){throw new Error("Method not implemented.")}close(){if(this[df]===-1)return Promise.resolve();if(this[Hp])return this[Hp];if(this[iy]--,this[iy]===0){let e=this[df];this[df]=-1,this[Hp]=this[Bo].closePromise(e).finally(()=>{this[Hp]=void 0})}else this[Hp]=new Promise((e,r)=>{this[QD]=e,this[FD]=r}).finally(()=>{this[Hp]=void 0,this[FD]=void 0,this[QD]=void 0});return this[Hp]}[(Bo,df,L_e=iy,N_e=Hp,O_e=QD,M_e=FD,Tc)](e){if(this[df]===-1){let r=new Error("file closed");throw r.code="EBADF",r.syscall=e.name,r}this[iy]++}[Lc](){if(this[iy]--,this[iy]===0){let e=this[df];this[df]=-1,this[Bo].closePromise(e).then(this[QD],this[FD])}}}});function Ww(t,e){e=new bD(e);let r=(o,a,n)=>{let u=o[a];o[a]=n,typeof u?.[sy.promisify.custom]<"u"&&(n[sy.promisify.custom]=u[sy.promisify.custom])};{r(t,"exists",(o,...a)=>{let u=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{e.existsPromise(o).then(A=>{u(A)},()=>{u(!1)})})}),r(t,"read",(...o)=>{let[a,n,u,A,p,h]=o;if(o.length<=3){let C={};o.length<3?h=o[1]:(C=o[1],h=o[2]),{buffer:n=Buffer.alloc(16384),offset:u=0,length:A=n.byteLength,position:p}=C}if(u==null&&(u=0),A|=0,A===0){process.nextTick(()=>{h(null,0,n)});return}p==null&&(p=-1),process.nextTick(()=>{e.readPromise(a,n,u,A,p).then(C=>{h(null,C,n)},C=>{h(C,0,n)})})});for(let o of iY){let a=o.replace(/Promise$/,"");if(typeof t[a]>"u")continue;let n=e[o];if(typeof n>"u")continue;r(t,a,(...A)=>{let h=typeof A[A.length-1]=="function"?A.pop():()=>{};process.nextTick(()=>{n.apply(e,A).then(C=>{h(null,C)},C=>{h(C)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",o=>{try{return e.existsSync(o)}catch{return!1}}),r(t,"readSync",(...o)=>{let[a,n,u,A,p]=o;return o.length<=3&&({offset:u=0,length:A=n.byteLength,position:p}=o[2]||{}),u==null&&(u=0),A|=0,A===0?0:(p==null&&(p=-1),e.readSync(a,n,u,A,p))});for(let o of U_e){let a=o;if(typeof t[a]>"u")continue;let n=e[o];typeof n>"u"||r(t,a,n.bind(e))}t.realpathSync.native=t.realpathSync}{let o=t.promises;for(let a of iY){let n=a.replace(/Promise$/,"");if(typeof o[n]>"u")continue;let u=e[a];typeof u>"u"||a!=="open"&&r(o,n,(A,...p)=>A instanceof Yw?A[n].apply(A,p):u.call(e,A,...p))}r(o,"open",async(...a)=>{let n=await e.openPromise(...a);return new Yw(n,e)})}t.read[sy.promisify.custom]=async(o,a,...n)=>({bytesRead:await e.readPromise(o,a,...n),buffer:a}),t.write[sy.promisify.custom]=async(o,a,...n)=>({bytesWritten:await e.writePromise(o,a,...n),buffer:a})}function RD(t,e){let r=Object.create(t);return Ww(r,e),r}var sy,U_e,iY,sY=yt(()=>{sy=Be("util");tY();nY();U_e=new Set(["accessSync","appendFileSync","createReadStream","createWriteStream","chmodSync","fchmodSync","chownSync","fchownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","statSync","symlinkSync","truncateSync","ftruncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),iY=new Set(["accessPromise","appendFilePromise","fchmodPromise","chmodPromise","fchownPromise","chownPromise","closePromise","copyFilePromise","linkPromise","fstatPromise","lstatPromise","lutimesPromise","mkdirPromise","openPromise","opendirPromise","readdirPromise","realpathPromise","readFilePromise","readdirPromise","readlinkPromise","renamePromise","rmdirPromise","statPromise","symlinkPromise","truncatePromise","ftruncatePromise","unlinkPromise","utimesPromise","writeFilePromise","writeSync"])});function oY(t){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return`${t}${e}`}function aY(){if(zR)return zR;let t=fe.toPortablePath(lY.default.tmpdir()),e=oe.realpathSync(t);return process.once("exit",()=>{oe.rmtempSync()}),zR={tmpdir:t,realTmpdir:e}}var lY,Nc,zR,oe,cY=yt(()=>{lY=$e(Be("os"));_g();Ca();Nc=new Set,zR=null;oe=Object.assign(new Tn,{detachTemp(t){Nc.delete(t)},mktempSync(t){let{tmpdir:e,realTmpdir:r}=aY();for(;;){let o=oY("xfs-");try{this.mkdirSync(V.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=V.join(r,o);if(Nc.add(a),typeof t>"u")return a;try{return t(a)}finally{if(Nc.has(a)){Nc.delete(a);try{this.removeSync(a)}catch{}}}}},async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=aY();for(;;){let o=oY("xfs-");try{await this.mkdirPromise(V.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=V.join(r,o);if(Nc.add(a),typeof t>"u")return a;try{return await t(a)}finally{if(Nc.has(a)){Nc.delete(a);try{await this.removePromise(a)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Nc.values()).map(async t=>{try{await oe.removePromise(t,{maxRetries:0}),Nc.delete(t)}catch{}}))},rmtempSync(){for(let t of Nc)try{oe.removeSync(t),Nc.delete(t)}catch{}}})});var Kw={};Vt(Kw,{AliasFS:()=>Uu,BasePortableFakeFS:()=>Mu,CustomDir:()=>qw,CwdFS:()=>gn,FakeFS:()=>hf,Filename:()=>dr,JailFS:()=>_u,LazyFS:()=>ny,MountFS:()=>Up,NoFS:()=>Gw,NodeFS:()=>Tn,PortablePath:()=>Bt,PosixFS:()=>_p,ProxiedFS:()=>Ps,VirtualFS:()=>mi,constants:()=>vi,errors:()=>ar,extendFs:()=>RD,normalizeLineEndings:()=>Mg,npath:()=>fe,opendir:()=>SD,patchFs:()=>Ww,ppath:()=>V,setupCopyIndex:()=>PD,statUtils:()=>Ea,unwatchAllFiles:()=>Og,unwatchFile:()=>Ng,watchFile:()=>ry,xfs:()=>oe});var Pt=yt(()=>{F7();BD();HR();GR();M7();YR();Ug();Ca();Ca();G7();Ug();W7();V7();z7();J7();X7();_g();Z7();gf();$7();sY();cY()});var hY=_((txt,pY)=>{pY.exports=fY;fY.sync=H_e;var uY=Be("fs");function __e(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var o=0;o{yY.exports=dY;dY.sync=j_e;var gY=Be("fs");function dY(t,e,r){gY.stat(t,function(o,a){r(o,o?!1:mY(a,e))})}function j_e(t,e){return mY(gY.statSync(t),e)}function mY(t,e){return t.isFile()&&q_e(t,e)}function q_e(t,e){var r=t.mode,o=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),u=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),A=parseInt("100",8),p=parseInt("010",8),h=parseInt("001",8),C=A|p,I=r&h||r&p&&a===u||r&A&&o===n||r&C&&n===0;return I}});var wY=_((ixt,CY)=>{var nxt=Be("fs"),TD;process.platform==="win32"||global.TESTING_WINDOWS?TD=hY():TD=EY();CY.exports=JR;JR.sync=G_e;function JR(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(o,a){JR(t,e||{},function(n,u){n?a(n):o(u)})})}TD(t,e||{},function(o,a){o&&(o.code==="EACCES"||e&&e.ignoreErrors)&&(o=null,a=!1),r(o,a)})}function G_e(t,e){try{return TD.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var xY=_((sxt,SY)=>{var oy=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",IY=Be("path"),Y_e=oy?";":":",BY=wY(),vY=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),DY=(t,e)=>{let r=e.colon||Y_e,o=t.match(/\//)||oy&&t.match(/\\/)?[""]:[...oy?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],a=oy?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",n=oy?a.split(r):[""];return oy&&t.indexOf(".")!==-1&&n[0]!==""&&n.unshift(""),{pathEnv:o,pathExt:n,pathExtExe:a}},PY=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:o,pathExt:a,pathExtExe:n}=DY(t,e),u=[],A=h=>new Promise((C,I)=>{if(h===o.length)return e.all&&u.length?C(u):I(vY(t));let v=o[h],b=/^".*"$/.test(v)?v.slice(1,-1):v,E=IY.join(b,t),F=!b&&/^\.[\\\/]/.test(t)?t.slice(0,2)+E:E;C(p(F,h,0))}),p=(h,C,I)=>new Promise((v,b)=>{if(I===a.length)return v(A(C+1));let E=a[I];BY(h+E,{pathExt:n},(F,N)=>{if(!F&&N)if(e.all)u.push(h+E);else return v(h+E);return v(p(h,C,I+1))})});return r?A(0).then(h=>r(null,h),r):A(0)},W_e=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:o,pathExtExe:a}=DY(t,e),n=[];for(let u=0;u{"use strict";var bY=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(o=>o.toUpperCase()==="PATH")||"Path"};XR.exports=bY;XR.exports.default=bY});var TY=_((axt,RY)=>{"use strict";var QY=Be("path"),K_e=xY(),V_e=kY();function FY(t,e){let r=t.options.env||process.env,o=process.cwd(),a=t.options.cwd!=null,n=a&&process.chdir!==void 0&&!process.chdir.disabled;if(n)try{process.chdir(t.options.cwd)}catch{}let u;try{u=K_e.sync(t.command,{path:r[V_e({env:r})],pathExt:e?QY.delimiter:void 0})}catch{}finally{n&&process.chdir(o)}return u&&(u=QY.resolve(a?t.options.cwd:"",u)),u}function z_e(t){return FY(t)||FY(t,!0)}RY.exports=z_e});var LY=_((lxt,$R)=>{"use strict";var ZR=/([()\][%!^"`<>&|;, *?])/g;function J_e(t){return t=t.replace(ZR,"^$1"),t}function X_e(t,e){return t=`${t}`,t=t.replace(/(\\*)"/g,'$1$1\\"'),t=t.replace(/(\\*)$/,"$1$1"),t=`"${t}"`,t=t.replace(ZR,"^$1"),e&&(t=t.replace(ZR,"^$1")),t}$R.exports.command=J_e;$R.exports.argument=X_e});var OY=_((cxt,NY)=>{"use strict";NY.exports=/^#!(.*)/});var UY=_((uxt,MY)=>{"use strict";var Z_e=OY();MY.exports=(t="")=>{let e=t.match(Z_e);if(!e)return null;let[r,o]=e[0].replace(/#! ?/,"").split(" "),a=r.split("/").pop();return a==="env"?o:o?`${a} ${o}`:a}});var HY=_((Axt,_Y)=>{"use strict";var eT=Be("fs"),$_e=UY();function e8e(t){let r=Buffer.alloc(150),o;try{o=eT.openSync(t,"r"),eT.readSync(o,r,0,150,0),eT.closeSync(o)}catch{}return $_e(r.toString())}_Y.exports=e8e});var YY=_((fxt,GY)=>{"use strict";var t8e=Be("path"),jY=TY(),qY=LY(),r8e=HY(),n8e=process.platform==="win32",i8e=/\.(?:com|exe)$/i,s8e=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function o8e(t){t.file=jY(t);let e=t.file&&r8e(t.file);return e?(t.args.unshift(t.file),t.command=e,jY(t)):t.file}function a8e(t){if(!n8e)return t;let e=o8e(t),r=!i8e.test(e);if(t.options.forceShell||r){let o=s8e.test(e);t.command=t8e.normalize(t.command),t.command=qY.command(t.command),t.args=t.args.map(n=>qY.argument(n,o));let a=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${a}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}function l8e(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let o={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?o:a8e(o)}GY.exports=l8e});var VY=_((pxt,KY)=>{"use strict";var tT=process.platform==="win32";function rT(t,e){return Object.assign(new Error(`${e} ${t.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${t.command}`,path:t.command,spawnargs:t.args})}function c8e(t,e){if(!tT)return;let r=t.emit;t.emit=function(o,a){if(o==="exit"){let n=WY(a,e,"spawn");if(n)return r.call(t,"error",n)}return r.apply(t,arguments)}}function WY(t,e){return tT&&t===1&&!e.file?rT(e.original,"spawn"):null}function u8e(t,e){return tT&&t===1&&!e.file?rT(e.original,"spawnSync"):null}KY.exports={hookChildProcess:c8e,verifyENOENT:WY,verifyENOENTSync:u8e,notFoundError:rT}});var sT=_((hxt,ay)=>{"use strict";var zY=Be("child_process"),nT=YY(),iT=VY();function JY(t,e,r){let o=nT(t,e,r),a=zY.spawn(o.command,o.args,o.options);return iT.hookChildProcess(a,o),a}function A8e(t,e,r){let o=nT(t,e,r),a=zY.spawnSync(o.command,o.args,o.options);return a.error=a.error||iT.verifyENOENTSync(a.status,o),a}ay.exports=JY;ay.exports.spawn=JY;ay.exports.sync=A8e;ay.exports._parse=nT;ay.exports._enoent=iT});var ZY=_((gxt,XY)=>{"use strict";function f8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function jg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,jg)}f8e(jg,Error);jg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var C="",I;for(I=0;I0){for(I=1,v=1;I>",S=Br(">>",!1),y=">&",R=Br(">&",!1),J=">",X=Br(">",!1),Z="<<<",ie=Br("<<<",!1),Pe="<&",Le=Br("<&",!1),ot="<",dt=Br("<",!1),jt=function(L){return{type:"argument",segments:[].concat(...L)}},$t=function(L){return L},xt="$'",an=Br("$'",!1),kr="'",mr=Br("'",!1),xr=function(L){return[{type:"text",text:L}]},Wr='""',Kn=Br('""',!1),Ns=function(){return{type:"text",text:""}},Ti='"',ps=Br('"',!1),io=function(L){return L},Si=function(L){return{type:"arithmetic",arithmetic:L,quoted:!0}},Os=function(L){return{type:"shell",shell:L,quoted:!0}},so=function(L){return{type:"variable",...L,quoted:!0}},cc=function(L){return{type:"text",text:L}},cu=function(L){return{type:"arithmetic",arithmetic:L,quoted:!1}},op=function(L){return{type:"shell",shell:L,quoted:!1}},ap=function(L){return{type:"variable",...L,quoted:!1}},Ms=function(L){return{type:"glob",pattern:L}},Dn=/^[^']/,oo=Cs(["'"],!0,!1),Us=function(L){return L.join("")},ml=/^[^$"]/,yl=Cs(["$",'"'],!0,!1),ao=`\\ -`,Vn=Br(`\\ -`,!1),On=function(){return""},Li="\\",Mn=Br("\\",!1),_i=/^[\\$"`]/,tr=Cs(["\\","$",'"',"`"],!1,!1),Oe=function(L){return L},ii="\\a",Ma=Br("\\a",!1),hr=function(){return"a"},uc="\\b",uu=Br("\\b",!1),Ac=function(){return"\b"},El=/^[Ee]/,vA=Cs(["E","e"],!1,!1),Au=function(){return"\x1B"},Ce="\\f",Rt=Br("\\f",!1),fc=function(){return"\f"},Hi="\\n",fu=Br("\\n",!1),Yt=function(){return` -`},Cl="\\r",DA=Br("\\r",!1),lp=function(){return"\r"},pc="\\t",PA=Br("\\t",!1),Qn=function(){return" "},hi="\\v",hc=Br("\\v",!1),SA=function(){return"\v"},sa=/^[\\'"?]/,Ni=Cs(["\\","'",'"',"?"],!1,!1),_o=function(L){return String.fromCharCode(parseInt(L,16))},Ze="\\x",lo=Br("\\x",!1),gc="\\u",pu=Br("\\u",!1),ji="\\U",hu=Br("\\U",!1),xA=function(L){return String.fromCodePoint(parseInt(L,16))},Ua=/^[0-7]/,dc=Cs([["0","7"]],!1,!1),hs=/^[0-9a-fA-f]/,Ut=Cs([["0","9"],["a","f"],["A","f"]],!1,!1),Fn=lg(),Ci="{}",oa=Br("{}",!1),co=function(){return"{}"},_s="-",aa=Br("-",!1),la="+",Ho=Br("+",!1),wi=".",gs=Br(".",!1),ds=function(L,K,re){return{type:"number",value:(L==="-"?-1:1)*parseFloat(K.join("")+"."+re.join(""))}},ms=function(L,K){return{type:"number",value:(L==="-"?-1:1)*parseInt(K.join(""))}},Hs=function(L){return{type:"variable",...L}},Un=function(L){return{type:"variable",name:L}},Pn=function(L){return L},ys="*",We=Br("*",!1),tt="/",It=Br("/",!1),nr=function(L,K,re){return{type:K==="*"?"multiplication":"division",right:re}},$=function(L,K){return K.reduce((re,he)=>({left:re,...he}),L)},me=function(L,K,re){return{type:K==="+"?"addition":"subtraction",right:re}},Ne="$((",ft=Br("$((",!1),pt="))",Tt=Br("))",!1),er=function(L){return L},Zr="$(",qi=Br("$(",!1),es=function(L){return L},xi="${",jo=Br("${",!1),bA=":-",kA=Br(":-",!1),cp=function(L,K){return{name:L,defaultValue:K}},rg=":-}",gu=Br(":-}",!1),ng=function(L){return{name:L,defaultValue:[]}},du=":+",uo=Br(":+",!1),QA=function(L,K){return{name:L,alternativeValue:K}},mc=":+}",ca=Br(":+}",!1),ig=function(L){return{name:L,alternativeValue:[]}},yc=function(L){return{name:L}},Pm="$",sg=Br("$",!1),$n=function(L){return e.isGlobPattern(L)},up=function(L){return L},og=/^[a-zA-Z0-9_]/,FA=Cs([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),js=function(){return ag()},mu=/^[$@*?#a-zA-Z0-9_\-]/,Ha=Cs(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),Gi=/^[()}<>$|&; \t"']/,ua=Cs(["(",")","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),yu=/^[<>&; \t"']/,Es=Cs(["<",">","&",";"," "," ",'"',"'"],!1,!1),Ec=/^[ \t]/,Cc=Cs([" "," "],!1,!1),Y=0,Dt=0,wl=[{line:1,column:1}],bi=0,wc=[],ct=0,Eu;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function ag(){return t.substring(Dt,Y)}function mw(){return Ic(Dt,Y)}function RA(L,K){throw K=K!==void 0?K:Ic(Dt,Y),Ag([ug(L)],t.substring(Dt,Y),K)}function Ap(L,K){throw K=K!==void 0?K:Ic(Dt,Y),Sm(L,K)}function Br(L,K){return{type:"literal",text:L,ignoreCase:K}}function Cs(L,K,re){return{type:"class",parts:L,inverted:K,ignoreCase:re}}function lg(){return{type:"any"}}function cg(){return{type:"end"}}function ug(L){return{type:"other",description:L}}function fp(L){var K=wl[L],re;if(K)return K;for(re=L-1;!wl[re];)re--;for(K=wl[re],K={line:K.line,column:K.column};rebi&&(bi=Y,wc=[]),wc.push(L))}function Sm(L,K){return new jg(L,null,null,K)}function Ag(L,K,re){return new jg(jg.buildMessage(L,K),L,K,re)}function fg(){var L,K,re;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(re=Cu(),re===r&&(re=null),re!==r?(Dt=L,K=n(re),L=K):(Y=L,L=r)):(Y=L,L=r),L}function Cu(){var L,K,re,he,Je;if(L=Y,K=wu(),K!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();re!==r?(he=pg(),he!==r?(Je=xm(),Je===r&&(Je=null),Je!==r?(Dt=L,K=u(K,he,Je),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r)}else Y=L,L=r;if(L===r)if(L=Y,K=wu(),K!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();re!==r?(he=pg(),he===r&&(he=null),he!==r?(Dt=L,K=A(K,he),L=K):(Y=L,L=r)):(Y=L,L=r)}else Y=L,L=r;return L}function xm(){var L,K,re,he,Je;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=Cu(),re!==r){for(he=[],Je=Qt();Je!==r;)he.push(Je),Je=Qt();he!==r?(Dt=L,K=p(re),L=K):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r;return L}function pg(){var L;return t.charCodeAt(Y)===59?(L=h,Y++):(L=r,ct===0&&Ct(C)),L===r&&(t.charCodeAt(Y)===38?(L=I,Y++):(L=r,ct===0&&Ct(v))),L}function wu(){var L,K,re;return L=Y,K=Aa(),K!==r?(re=yw(),re===r&&(re=null),re!==r?(Dt=L,K=b(K,re),L=K):(Y=L,L=r)):(Y=L,L=r),L}function yw(){var L,K,re,he,Je,mt,fr;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=bm(),re!==r){for(he=[],Je=Qt();Je!==r;)he.push(Je),Je=Qt();if(he!==r)if(Je=wu(),Je!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=L,K=E(re,Je),L=K):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;else Y=L,L=r;return L}function bm(){var L;return t.substr(Y,2)===F?(L=F,Y+=2):(L=r,ct===0&&Ct(N)),L===r&&(t.substr(Y,2)===U?(L=U,Y+=2):(L=r,ct===0&&Ct(z))),L}function Aa(){var L,K,re;return L=Y,K=hg(),K!==r?(re=Bc(),re===r&&(re=null),re!==r?(Dt=L,K=te(K,re),L=K):(Y=L,L=r)):(Y=L,L=r),L}function Bc(){var L,K,re,he,Je,mt,fr;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=Il(),re!==r){for(he=[],Je=Qt();Je!==r;)he.push(Je),Je=Qt();if(he!==r)if(Je=Aa(),Je!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=L,K=le(re,Je),L=K):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;else Y=L,L=r;return L}function Il(){var L;return t.substr(Y,2)===pe?(L=pe,Y+=2):(L=r,ct===0&&Ct(ue)),L===r&&(t.charCodeAt(Y)===124?(L=ye,Y++):(L=r,ct===0&&Ct(ae))),L}function Iu(){var L,K,re,he,Je,mt;if(L=Y,K=yg(),K!==r)if(t.charCodeAt(Y)===61?(re=Ie,Y++):(re=r,ct===0&&Ct(Fe)),re!==r)if(he=qo(),he!==r){for(Je=[],mt=Qt();mt!==r;)Je.push(mt),mt=Qt();Je!==r?(Dt=L,K=g(K,he),L=K):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r;else Y=L,L=r;if(L===r)if(L=Y,K=yg(),K!==r)if(t.charCodeAt(Y)===61?(re=Ie,Y++):(re=r,ct===0&&Ct(Fe)),re!==r){for(he=[],Je=Qt();Je!==r;)he.push(Je),Je=Qt();he!==r?(Dt=L,K=Ee(K),L=K):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r;return L}function hg(){var L,K,re,he,Je,mt,fr,Cr,yn,oi,Oi;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(t.charCodeAt(Y)===40?(re=De,Y++):(re=r,ct===0&&Ct(ce)),re!==r){for(he=[],Je=Qt();Je!==r;)he.push(Je),Je=Qt();if(he!==r)if(Je=Cu(),Je!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(Y)===41?(fr=ne,Y++):(fr=r,ct===0&&Ct(ee)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=ja();oi!==r;)yn.push(oi),oi=ja();if(yn!==r){for(oi=[],Oi=Qt();Oi!==r;)oi.push(Oi),Oi=Qt();oi!==r?(Dt=L,K=we(Je,yn),L=K):(Y=L,L=r)}else Y=L,L=r}else Y=L,L=r}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;else Y=L,L=r;if(L===r){for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(t.charCodeAt(Y)===123?(re=be,Y++):(re=r,ct===0&&Ct(ht)),re!==r){for(he=[],Je=Qt();Je!==r;)he.push(Je),Je=Qt();if(he!==r)if(Je=Cu(),Je!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(Y)===125?(fr=H,Y++):(fr=r,ct===0&&Ct(lt)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=ja();oi!==r;)yn.push(oi),oi=ja();if(yn!==r){for(oi=[],Oi=Qt();Oi!==r;)oi.push(Oi),Oi=Qt();oi!==r?(Dt=L,K=Te(Je,yn),L=K):(Y=L,L=r)}else Y=L,L=r}else Y=L,L=r}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;else Y=L,L=r;if(L===r){for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){for(re=[],he=Iu();he!==r;)re.push(he),he=Iu();if(re!==r){for(he=[],Je=Qt();Je!==r;)he.push(Je),Je=Qt();if(he!==r){if(Je=[],mt=pp(),mt!==r)for(;mt!==r;)Je.push(mt),mt=pp();else Je=r;if(Je!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=L,K=ke(re,Je),L=K):(Y=L,L=r)}else Y=L,L=r}else Y=L,L=r}else Y=L,L=r}else Y=L,L=r;if(L===r){for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){if(re=[],he=Iu(),he!==r)for(;he!==r;)re.push(he),he=Iu();else re=r;if(re!==r){for(he=[],Je=Qt();Je!==r;)he.push(Je),Je=Qt();he!==r?(Dt=L,K=xe(re),L=K):(Y=L,L=r)}else Y=L,L=r}else Y=L,L=r}}}return L}function TA(){var L,K,re,he,Je;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){if(re=[],he=hp(),he!==r)for(;he!==r;)re.push(he),he=hp();else re=r;if(re!==r){for(he=[],Je=Qt();Je!==r;)he.push(Je),Je=Qt();he!==r?(Dt=L,K=He(re),L=K):(Y=L,L=r)}else Y=L,L=r}else Y=L,L=r;return L}function pp(){var L,K,re;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r?(re=ja(),re!==r?(Dt=L,K=Re(re),L=K):(Y=L,L=r)):(Y=L,L=r),L===r){for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();K!==r?(re=hp(),re!==r?(Dt=L,K=Re(re),L=K):(Y=L,L=r)):(Y=L,L=r)}return L}function ja(){var L,K,re,he,Je;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(ze.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(je)),re===r&&(re=null),re!==r?(he=gg(),he!==r?(Je=hp(),Je!==r?(Dt=L,K=x(re,he,Je),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L}function gg(){var L;return t.substr(Y,2)===w?(L=w,Y+=2):(L=r,ct===0&&Ct(S)),L===r&&(t.substr(Y,2)===y?(L=y,Y+=2):(L=r,ct===0&&Ct(R)),L===r&&(t.charCodeAt(Y)===62?(L=J,Y++):(L=r,ct===0&&Ct(X)),L===r&&(t.substr(Y,3)===Z?(L=Z,Y+=3):(L=r,ct===0&&Ct(ie)),L===r&&(t.substr(Y,2)===Pe?(L=Pe,Y+=2):(L=r,ct===0&&Ct(Le)),L===r&&(t.charCodeAt(Y)===60?(L=ot,Y++):(L=r,ct===0&&Ct(dt))))))),L}function hp(){var L,K,re;for(L=Y,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(re=qo(),re!==r?(Dt=L,K=Re(re),L=K):(Y=L,L=r)):(Y=L,L=r),L}function qo(){var L,K,re;if(L=Y,K=[],re=ws(),re!==r)for(;re!==r;)K.push(re),re=ws();else K=r;return K!==r&&(Dt=L,K=jt(K)),L=K,L}function ws(){var L,K;return L=Y,K=Ii(),K!==r&&(Dt=L,K=$t(K)),L=K,L===r&&(L=Y,K=km(),K!==r&&(Dt=L,K=$t(K)),L=K,L===r&&(L=Y,K=Qm(),K!==r&&(Dt=L,K=$t(K)),L=K,L===r&&(L=Y,K=Go(),K!==r&&(Dt=L,K=$t(K)),L=K))),L}function Ii(){var L,K,re,he;return L=Y,t.substr(Y,2)===xt?(K=xt,Y+=2):(K=r,ct===0&&Ct(an)),K!==r?(re=ln(),re!==r?(t.charCodeAt(Y)===39?(he=kr,Y++):(he=r,ct===0&&Ct(mr)),he!==r?(Dt=L,K=xr(re),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L}function km(){var L,K,re,he;return L=Y,t.charCodeAt(Y)===39?(K=kr,Y++):(K=r,ct===0&&Ct(mr)),K!==r?(re=dp(),re!==r?(t.charCodeAt(Y)===39?(he=kr,Y++):(he=r,ct===0&&Ct(mr)),he!==r?(Dt=L,K=xr(re),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L}function Qm(){var L,K,re,he;if(L=Y,t.substr(Y,2)===Wr?(K=Wr,Y+=2):(K=r,ct===0&&Ct(Kn)),K!==r&&(Dt=L,K=Ns()),L=K,L===r)if(L=Y,t.charCodeAt(Y)===34?(K=Ti,Y++):(K=r,ct===0&&Ct(ps)),K!==r){for(re=[],he=LA();he!==r;)re.push(he),he=LA();re!==r?(t.charCodeAt(Y)===34?(he=Ti,Y++):(he=r,ct===0&&Ct(ps)),he!==r?(Dt=L,K=io(re),L=K):(Y=L,L=r)):(Y=L,L=r)}else Y=L,L=r;return L}function Go(){var L,K,re;if(L=Y,K=[],re=gp(),re!==r)for(;re!==r;)K.push(re),re=gp();else K=r;return K!==r&&(Dt=L,K=io(K)),L=K,L}function LA(){var L,K;return L=Y,K=Gr(),K!==r&&(Dt=L,K=Si(K)),L=K,L===r&&(L=Y,K=mp(),K!==r&&(Dt=L,K=Os(K)),L=K,L===r&&(L=Y,K=Dc(),K!==r&&(Dt=L,K=so(K)),L=K,L===r&&(L=Y,K=dg(),K!==r&&(Dt=L,K=cc(K)),L=K))),L}function gp(){var L,K;return L=Y,K=Gr(),K!==r&&(Dt=L,K=cu(K)),L=K,L===r&&(L=Y,K=mp(),K!==r&&(Dt=L,K=op(K)),L=K,L===r&&(L=Y,K=Dc(),K!==r&&(Dt=L,K=ap(K)),L=K,L===r&&(L=Y,K=Ew(),K!==r&&(Dt=L,K=Ms(K)),L=K,L===r&&(L=Y,K=pa(),K!==r&&(Dt=L,K=cc(K)),L=K)))),L}function dp(){var L,K,re;for(L=Y,K=[],Dn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(oo));re!==r;)K.push(re),Dn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(oo));return K!==r&&(Dt=L,K=Us(K)),L=K,L}function dg(){var L,K,re;if(L=Y,K=[],re=fa(),re===r&&(ml.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(yl))),re!==r)for(;re!==r;)K.push(re),re=fa(),re===r&&(ml.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(yl)));else K=r;return K!==r&&(Dt=L,K=Us(K)),L=K,L}function fa(){var L,K,re;return L=Y,t.substr(Y,2)===ao?(K=ao,Y+=2):(K=r,ct===0&&Ct(Vn)),K!==r&&(Dt=L,K=On()),L=K,L===r&&(L=Y,t.charCodeAt(Y)===92?(K=Li,Y++):(K=r,ct===0&&Ct(Mn)),K!==r?(_i.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(tr)),re!==r?(Dt=L,K=Oe(re),L=K):(Y=L,L=r)):(Y=L,L=r)),L}function ln(){var L,K,re;for(L=Y,K=[],re=Ao(),re===r&&(Dn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(oo)));re!==r;)K.push(re),re=Ao(),re===r&&(Dn.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(oo)));return K!==r&&(Dt=L,K=Us(K)),L=K,L}function Ao(){var L,K,re;return L=Y,t.substr(Y,2)===ii?(K=ii,Y+=2):(K=r,ct===0&&Ct(Ma)),K!==r&&(Dt=L,K=hr()),L=K,L===r&&(L=Y,t.substr(Y,2)===uc?(K=uc,Y+=2):(K=r,ct===0&&Ct(uu)),K!==r&&(Dt=L,K=Ac()),L=K,L===r&&(L=Y,t.charCodeAt(Y)===92?(K=Li,Y++):(K=r,ct===0&&Ct(Mn)),K!==r?(El.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(vA)),re!==r?(Dt=L,K=Au(),L=K):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===Ce?(K=Ce,Y+=2):(K=r,ct===0&&Ct(Rt)),K!==r&&(Dt=L,K=fc()),L=K,L===r&&(L=Y,t.substr(Y,2)===Hi?(K=Hi,Y+=2):(K=r,ct===0&&Ct(fu)),K!==r&&(Dt=L,K=Yt()),L=K,L===r&&(L=Y,t.substr(Y,2)===Cl?(K=Cl,Y+=2):(K=r,ct===0&&Ct(DA)),K!==r&&(Dt=L,K=lp()),L=K,L===r&&(L=Y,t.substr(Y,2)===pc?(K=pc,Y+=2):(K=r,ct===0&&Ct(PA)),K!==r&&(Dt=L,K=Qn()),L=K,L===r&&(L=Y,t.substr(Y,2)===hi?(K=hi,Y+=2):(K=r,ct===0&&Ct(hc)),K!==r&&(Dt=L,K=SA()),L=K,L===r&&(L=Y,t.charCodeAt(Y)===92?(K=Li,Y++):(K=r,ct===0&&Ct(Mn)),K!==r?(sa.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(Ni)),re!==r?(Dt=L,K=Oe(re),L=K):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=NA()))))))))),L}function NA(){var L,K,re,he,Je,mt,fr,Cr,yn,oi,Oi,Cg;return L=Y,t.charCodeAt(Y)===92?(K=Li,Y++):(K=r,ct===0&&Ct(Mn)),K!==r?(re=qa(),re!==r?(Dt=L,K=_o(re),L=K):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===Ze?(K=Ze,Y+=2):(K=r,ct===0&&Ct(lo)),K!==r?(re=Y,he=Y,Je=qa(),Je!==r?(mt=si(),mt!==r?(Je=[Je,mt],he=Je):(Y=he,he=r)):(Y=he,he=r),he===r&&(he=qa()),he!==r?re=t.substring(re,Y):re=he,re!==r?(Dt=L,K=_o(re),L=K):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===gc?(K=gc,Y+=2):(K=r,ct===0&&Ct(pu)),K!==r?(re=Y,he=Y,Je=si(),Je!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(Je=[Je,mt,fr,Cr],he=Je):(Y=he,he=r)):(Y=he,he=r)):(Y=he,he=r)):(Y=he,he=r),he!==r?re=t.substring(re,Y):re=he,re!==r?(Dt=L,K=_o(re),L=K):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===ji?(K=ji,Y+=2):(K=r,ct===0&&Ct(hu)),K!==r?(re=Y,he=Y,Je=si(),Je!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(yn=si(),yn!==r?(oi=si(),oi!==r?(Oi=si(),Oi!==r?(Cg=si(),Cg!==r?(Je=[Je,mt,fr,Cr,yn,oi,Oi,Cg],he=Je):(Y=he,he=r)):(Y=he,he=r)):(Y=he,he=r)):(Y=he,he=r)):(Y=he,he=r)):(Y=he,he=r)):(Y=he,he=r)):(Y=he,he=r),he!==r?re=t.substring(re,Y):re=he,re!==r?(Dt=L,K=xA(re),L=K):(Y=L,L=r)):(Y=L,L=r)))),L}function qa(){var L;return Ua.test(t.charAt(Y))?(L=t.charAt(Y),Y++):(L=r,ct===0&&Ct(dc)),L}function si(){var L;return hs.test(t.charAt(Y))?(L=t.charAt(Y),Y++):(L=r,ct===0&&Ct(Ut)),L}function pa(){var L,K,re,he,Je;if(L=Y,K=[],re=Y,t.charCodeAt(Y)===92?(he=Li,Y++):(he=r,ct===0&&Ct(Mn)),he!==r?(t.length>Y?(Je=t.charAt(Y),Y++):(Je=r,ct===0&&Ct(Fn)),Je!==r?(Dt=re,he=Oe(Je),re=he):(Y=re,re=r)):(Y=re,re=r),re===r&&(re=Y,t.substr(Y,2)===Ci?(he=Ci,Y+=2):(he=r,ct===0&&Ct(oa)),he!==r&&(Dt=re,he=co()),re=he,re===r&&(re=Y,he=Y,ct++,Je=Fm(),ct--,Je===r?he=void 0:(Y=he,he=r),he!==r?(t.length>Y?(Je=t.charAt(Y),Y++):(Je=r,ct===0&&Ct(Fn)),Je!==r?(Dt=re,he=Oe(Je),re=he):(Y=re,re=r)):(Y=re,re=r))),re!==r)for(;re!==r;)K.push(re),re=Y,t.charCodeAt(Y)===92?(he=Li,Y++):(he=r,ct===0&&Ct(Mn)),he!==r?(t.length>Y?(Je=t.charAt(Y),Y++):(Je=r,ct===0&&Ct(Fn)),Je!==r?(Dt=re,he=Oe(Je),re=he):(Y=re,re=r)):(Y=re,re=r),re===r&&(re=Y,t.substr(Y,2)===Ci?(he=Ci,Y+=2):(he=r,ct===0&&Ct(oa)),he!==r&&(Dt=re,he=co()),re=he,re===r&&(re=Y,he=Y,ct++,Je=Fm(),ct--,Je===r?he=void 0:(Y=he,he=r),he!==r?(t.length>Y?(Je=t.charAt(Y),Y++):(Je=r,ct===0&&Ct(Fn)),Je!==r?(Dt=re,he=Oe(Je),re=he):(Y=re,re=r)):(Y=re,re=r)));else K=r;return K!==r&&(Dt=L,K=Us(K)),L=K,L}function vc(){var L,K,re,he,Je,mt;if(L=Y,t.charCodeAt(Y)===45?(K=_s,Y++):(K=r,ct===0&&Ct(aa)),K===r&&(t.charCodeAt(Y)===43?(K=la,Y++):(K=r,ct===0&&Ct(Ho))),K===r&&(K=null),K!==r){if(re=[],ze.test(t.charAt(Y))?(he=t.charAt(Y),Y++):(he=r,ct===0&&Ct(je)),he!==r)for(;he!==r;)re.push(he),ze.test(t.charAt(Y))?(he=t.charAt(Y),Y++):(he=r,ct===0&&Ct(je));else re=r;if(re!==r)if(t.charCodeAt(Y)===46?(he=wi,Y++):(he=r,ct===0&&Ct(gs)),he!==r){if(Je=[],ze.test(t.charAt(Y))?(mt=t.charAt(Y),Y++):(mt=r,ct===0&&Ct(je)),mt!==r)for(;mt!==r;)Je.push(mt),ze.test(t.charAt(Y))?(mt=t.charAt(Y),Y++):(mt=r,ct===0&&Ct(je));else Je=r;Je!==r?(Dt=L,K=ds(K,re,Je),L=K):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;if(L===r){if(L=Y,t.charCodeAt(Y)===45?(K=_s,Y++):(K=r,ct===0&&Ct(aa)),K===r&&(t.charCodeAt(Y)===43?(K=la,Y++):(K=r,ct===0&&Ct(Ho))),K===r&&(K=null),K!==r){if(re=[],ze.test(t.charAt(Y))?(he=t.charAt(Y),Y++):(he=r,ct===0&&Ct(je)),he!==r)for(;he!==r;)re.push(he),ze.test(t.charAt(Y))?(he=t.charAt(Y),Y++):(he=r,ct===0&&Ct(je));else re=r;re!==r?(Dt=L,K=ms(K,re),L=K):(Y=L,L=r)}else Y=L,L=r;if(L===r&&(L=Y,K=Dc(),K!==r&&(Dt=L,K=Hs(K)),L=K,L===r&&(L=Y,K=Ga(),K!==r&&(Dt=L,K=Un(K)),L=K,L===r)))if(L=Y,t.charCodeAt(Y)===40?(K=De,Y++):(K=r,ct===0&&Ct(ce)),K!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();if(re!==r)if(he=ts(),he!==r){for(Je=[],mt=Qt();mt!==r;)Je.push(mt),mt=Qt();Je!==r?(t.charCodeAt(Y)===41?(mt=ne,Y++):(mt=r,ct===0&&Ct(ee)),mt!==r?(Dt=L,K=Pn(he),L=K):(Y=L,L=r)):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r}return L}function Bl(){var L,K,re,he,Je,mt,fr,Cr;if(L=Y,K=vc(),K!==r){for(re=[],he=Y,Je=[],mt=Qt();mt!==r;)Je.push(mt),mt=Qt();if(Je!==r)if(t.charCodeAt(Y)===42?(mt=ys,Y++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(Y)===47?(mt=tt,Y++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=he,Je=nr(K,mt,Cr),he=Je):(Y=he,he=r)):(Y=he,he=r)}else Y=he,he=r;else Y=he,he=r;for(;he!==r;){for(re.push(he),he=Y,Je=[],mt=Qt();mt!==r;)Je.push(mt),mt=Qt();if(Je!==r)if(t.charCodeAt(Y)===42?(mt=ys,Y++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(Y)===47?(mt=tt,Y++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=he,Je=nr(K,mt,Cr),he=Je):(Y=he,he=r)):(Y=he,he=r)}else Y=he,he=r;else Y=he,he=r}re!==r?(Dt=L,K=$(K,re),L=K):(Y=L,L=r)}else Y=L,L=r;return L}function ts(){var L,K,re,he,Je,mt,fr,Cr;if(L=Y,K=Bl(),K!==r){for(re=[],he=Y,Je=[],mt=Qt();mt!==r;)Je.push(mt),mt=Qt();if(Je!==r)if(t.charCodeAt(Y)===43?(mt=la,Y++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(Y)===45?(mt=_s,Y++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=he,Je=me(K,mt,Cr),he=Je):(Y=he,he=r)):(Y=he,he=r)}else Y=he,he=r;else Y=he,he=r;for(;he!==r;){for(re.push(he),he=Y,Je=[],mt=Qt();mt!==r;)Je.push(mt),mt=Qt();if(Je!==r)if(t.charCodeAt(Y)===43?(mt=la,Y++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(Y)===45?(mt=_s,Y++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=he,Je=me(K,mt,Cr),he=Je):(Y=he,he=r)):(Y=he,he=r)}else Y=he,he=r;else Y=he,he=r}re!==r?(Dt=L,K=$(K,re),L=K):(Y=L,L=r)}else Y=L,L=r;return L}function Gr(){var L,K,re,he,Je,mt;if(L=Y,t.substr(Y,3)===Ne?(K=Ne,Y+=3):(K=r,ct===0&&Ct(ft)),K!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();if(re!==r)if(he=ts(),he!==r){for(Je=[],mt=Qt();mt!==r;)Je.push(mt),mt=Qt();Je!==r?(t.substr(Y,2)===pt?(mt=pt,Y+=2):(mt=r,ct===0&&Ct(Tt)),mt!==r?(Dt=L,K=er(he),L=K):(Y=L,L=r)):(Y=L,L=r)}else Y=L,L=r;else Y=L,L=r}else Y=L,L=r;return L}function mp(){var L,K,re,he;return L=Y,t.substr(Y,2)===Zr?(K=Zr,Y+=2):(K=r,ct===0&&Ct(qi)),K!==r?(re=Cu(),re!==r?(t.charCodeAt(Y)===41?(he=ne,Y++):(he=r,ct===0&&Ct(ee)),he!==r?(Dt=L,K=es(re),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L}function Dc(){var L,K,re,he,Je,mt;return L=Y,t.substr(Y,2)===xi?(K=xi,Y+=2):(K=r,ct===0&&Ct(jo)),K!==r?(re=Ga(),re!==r?(t.substr(Y,2)===bA?(he=bA,Y+=2):(he=r,ct===0&&Ct(kA)),he!==r?(Je=TA(),Je!==r?(t.charCodeAt(Y)===125?(mt=H,Y++):(mt=r,ct===0&&Ct(lt)),mt!==r?(Dt=L,K=cp(re,Je),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===xi?(K=xi,Y+=2):(K=r,ct===0&&Ct(jo)),K!==r?(re=Ga(),re!==r?(t.substr(Y,3)===rg?(he=rg,Y+=3):(he=r,ct===0&&Ct(gu)),he!==r?(Dt=L,K=ng(re),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===xi?(K=xi,Y+=2):(K=r,ct===0&&Ct(jo)),K!==r?(re=Ga(),re!==r?(t.substr(Y,2)===du?(he=du,Y+=2):(he=r,ct===0&&Ct(uo)),he!==r?(Je=TA(),Je!==r?(t.charCodeAt(Y)===125?(mt=H,Y++):(mt=r,ct===0&&Ct(lt)),mt!==r?(Dt=L,K=QA(re,Je),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===xi?(K=xi,Y+=2):(K=r,ct===0&&Ct(jo)),K!==r?(re=Ga(),re!==r?(t.substr(Y,3)===mc?(he=mc,Y+=3):(he=r,ct===0&&Ct(ca)),he!==r?(Dt=L,K=ig(re),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.substr(Y,2)===xi?(K=xi,Y+=2):(K=r,ct===0&&Ct(jo)),K!==r?(re=Ga(),re!==r?(t.charCodeAt(Y)===125?(he=H,Y++):(he=r,ct===0&&Ct(lt)),he!==r?(Dt=L,K=yc(re),L=K):(Y=L,L=r)):(Y=L,L=r)):(Y=L,L=r),L===r&&(L=Y,t.charCodeAt(Y)===36?(K=Pm,Y++):(K=r,ct===0&&Ct(sg)),K!==r?(re=Ga(),re!==r?(Dt=L,K=yc(re),L=K):(Y=L,L=r)):(Y=L,L=r)))))),L}function Ew(){var L,K,re;return L=Y,K=mg(),K!==r?(Dt=Y,re=$n(K),re?re=void 0:re=r,re!==r?(Dt=L,K=up(K),L=K):(Y=L,L=r)):(Y=L,L=r),L}function mg(){var L,K,re,he,Je;if(L=Y,K=[],re=Y,he=Y,ct++,Je=Eg(),ct--,Je===r?he=void 0:(Y=he,he=r),he!==r?(t.length>Y?(Je=t.charAt(Y),Y++):(Je=r,ct===0&&Ct(Fn)),Je!==r?(Dt=re,he=Oe(Je),re=he):(Y=re,re=r)):(Y=re,re=r),re!==r)for(;re!==r;)K.push(re),re=Y,he=Y,ct++,Je=Eg(),ct--,Je===r?he=void 0:(Y=he,he=r),he!==r?(t.length>Y?(Je=t.charAt(Y),Y++):(Je=r,ct===0&&Ct(Fn)),Je!==r?(Dt=re,he=Oe(Je),re=he):(Y=re,re=r)):(Y=re,re=r);else K=r;return K!==r&&(Dt=L,K=Us(K)),L=K,L}function yg(){var L,K,re;if(L=Y,K=[],og.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(FA)),re!==r)for(;re!==r;)K.push(re),og.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(FA));else K=r;return K!==r&&(Dt=L,K=js()),L=K,L}function Ga(){var L,K,re;if(L=Y,K=[],mu.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(Ha)),re!==r)for(;re!==r;)K.push(re),mu.test(t.charAt(Y))?(re=t.charAt(Y),Y++):(re=r,ct===0&&Ct(Ha));else K=r;return K!==r&&(Dt=L,K=js()),L=K,L}function Fm(){var L;return Gi.test(t.charAt(Y))?(L=t.charAt(Y),Y++):(L=r,ct===0&&Ct(ua)),L}function Eg(){var L;return yu.test(t.charAt(Y))?(L=t.charAt(Y),Y++):(L=r,ct===0&&Ct(Es)),L}function Qt(){var L,K;if(L=[],Ec.test(t.charAt(Y))?(K=t.charAt(Y),Y++):(K=r,ct===0&&Ct(Cc)),K!==r)for(;K!==r;)L.push(K),Ec.test(t.charAt(Y))?(K=t.charAt(Y),Y++):(K=r,ct===0&&Ct(Cc));else L=r;return L}if(Eu=a(),Eu!==r&&Y===t.length)return Eu;throw Eu!==r&&Y!1}){try{return(0,$Y.parse)(t,e)}catch(r){throw r.location&&(r.message=r.message.replace(/(\.)?$/,` (line ${r.location.start.line}, column ${r.location.start.column})$1`)),r}}function ly(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:o},a)=>`${OD(r)}${o===";"?a!==t.length-1||e?";":"":" &"}`).join(" ")}function OD(t){return`${cy(t.chain)}${t.then?` ${oT(t.then)}`:""}`}function oT(t){return`${t.type} ${OD(t.line)}`}function cy(t){return`${lT(t)}${t.then?` ${aT(t.then)}`:""}`}function aT(t){return`${t.type} ${cy(t.chain)}`}function lT(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>LD(e)).join(" ")} `:""}${t.args.map(e=>cT(e)).join(" ")}`;case"subshell":return`(${ly(t.subshell)})${t.args.length>0?` ${t.args.map(e=>Vw(e)).join(" ")}`:""}`;case"group":return`{ ${ly(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>Vw(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>LD(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function LD(t){return`${t.name}=${t.args[0]?qg(t.args[0]):""}`}function cT(t){switch(t.type){case"redirection":return Vw(t);case"argument":return qg(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function Vw(t){return`${t.subtype} ${t.args.map(e=>qg(e)).join(" ")}`}function qg(t){return t.segments.map(e=>uT(e)).join("")}function uT(t){let e=(o,a)=>a?`"${o}"`:o,r=o=>o===""?"''":o.match(/[()}<>$|&;"'\n\t ]/)?o.match(/['\t\p{C}]/u)?o.match(/'/)?`"${o.replace(/["$\t\p{C}]/u,g8e)}"`:`$'${o.replace(/[\t\p{C}]/u,tW)}'`:`'${o}'`:o;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`\${${ly(t.shell)}}`,t.quoted);case"variable":return e(typeof t.defaultValue>"u"?typeof t.alternativeValue>"u"?`\${${t.name}}`:t.alternativeValue.length===0?`\${${t.name}:+}`:`\${${t.name}:+${t.alternativeValue.map(o=>qg(o)).join(" ")}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(o=>qg(o)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${MD(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function MD(t){let e=a=>{switch(a){case"addition":return"+";case"subtraction":return"-";case"multiplication":return"*";case"division":return"/";default:throw new Error(`Can't extract operator from arithmetic expression of type "${a}"`)}},r=(a,n)=>n?`( ${a} )`:a,o=a=>r(MD(a),!["number","variable"].includes(a.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${o(t.left)} ${e(t.type)} ${o(t.right)}`}}var $Y,eW,h8e,tW,g8e,rW=yt(()=>{$Y=$e(ZY());eW=new Map([["\f","\\f"],[` -`,"\\n"],["\r","\\r"],[" ","\\t"],["\v","\\v"],["\0","\\0"]]),h8e=new Map([["\\","\\\\"],["$","\\$"],['"','\\"'],...Array.from(eW,([t,e])=>[t,`"$'${e}'"`])]),tW=t=>eW.get(t)??`\\x${t.charCodeAt(0).toString(16).padStart(2,"0")}`,g8e=t=>h8e.get(t)??`"$'${tW(t)}'"`});var iW=_((bxt,nW)=>{"use strict";function d8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Gg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Gg)}d8e(Gg,Error);Gg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var C="",I;for(I=0;I0){for(I=1,v=1;Ipe&&(pe=z,ue=[]),ue.push(je))}function lt(je,x){return new Gg(je,null,null,x)}function Te(je,x,w){return new Gg(Gg.buildMessage(je,x),je,x,w)}function ke(){var je,x,w,S;return je=z,x=xe(),x!==r?(t.charCodeAt(z)===47?(w=n,z++):(w=r,ye===0&&H(u)),w!==r?(S=xe(),S!==r?(te=je,x=A(x,S),je=x):(z=je,je=r)):(z=je,je=r)):(z=je,je=r),je===r&&(je=z,x=xe(),x!==r&&(te=je,x=p(x)),je=x),je}function xe(){var je,x,w,S;return je=z,x=He(),x!==r?(t.charCodeAt(z)===64?(w=h,z++):(w=r,ye===0&&H(C)),w!==r?(S=ze(),S!==r?(te=je,x=I(x,S),je=x):(z=je,je=r)):(z=je,je=r)):(z=je,je=r),je===r&&(je=z,x=He(),x!==r&&(te=je,x=v(x)),je=x),je}function He(){var je,x,w,S,y;return je=z,t.charCodeAt(z)===64?(x=h,z++):(x=r,ye===0&&H(C)),x!==r?(w=Re(),w!==r?(t.charCodeAt(z)===47?(S=n,z++):(S=r,ye===0&&H(u)),S!==r?(y=Re(),y!==r?(te=je,x=b(),je=x):(z=je,je=r)):(z=je,je=r)):(z=je,je=r)):(z=je,je=r),je===r&&(je=z,x=Re(),x!==r&&(te=je,x=b()),je=x),je}function Re(){var je,x,w;if(je=z,x=[],E.test(t.charAt(z))?(w=t.charAt(z),z++):(w=r,ye===0&&H(F)),w!==r)for(;w!==r;)x.push(w),E.test(t.charAt(z))?(w=t.charAt(z),z++):(w=r,ye===0&&H(F));else x=r;return x!==r&&(te=je,x=b()),je=x,je}function ze(){var je,x,w;if(je=z,x=[],N.test(t.charAt(z))?(w=t.charAt(z),z++):(w=r,ye===0&&H(U)),w!==r)for(;w!==r;)x.push(w),N.test(t.charAt(z))?(w=t.charAt(z),z++):(w=r,ye===0&&H(U));else x=r;return x!==r&&(te=je,x=b()),je=x,je}if(ae=a(),ae!==r&&z===t.length)return ae;throw ae!==r&&z{sW=$e(iW())});var Wg=_((Qxt,Yg)=>{"use strict";function aW(t){return typeof t>"u"||t===null}function y8e(t){return typeof t=="object"&&t!==null}function E8e(t){return Array.isArray(t)?t:aW(t)?[]:[t]}function C8e(t,e){var r,o,a,n;if(e)for(n=Object.keys(e),r=0,o=n.length;r{"use strict";function zw(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}zw.prototype=Object.create(Error.prototype);zw.prototype.constructor=zw;zw.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};lW.exports=zw});var AW=_((Rxt,uW)=>{"use strict";var cW=Wg();function AT(t,e,r,o,a){this.name=t,this.buffer=e,this.position=r,this.line=o,this.column=a}AT.prototype.getSnippet=function(e,r){var o,a,n,u,A;if(!this.buffer)return null;for(e=e||4,r=r||75,o="",a=this.position;a>0&&`\0\r -\x85\u2028\u2029`.indexOf(this.buffer.charAt(a-1))===-1;)if(a-=1,this.position-a>r/2-1){o=" ... ",a+=5;break}for(n="",u=this.position;ur/2-1){n=" ... ",u-=5;break}return A=this.buffer.slice(a,u),cW.repeat(" ",e)+o+A+n+` -`+cW.repeat(" ",e+this.position-a+o.length)+"^"};AT.prototype.toString=function(e){var r,o="";return this.name&&(o+='in "'+this.name+'" '),o+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(o+=`: -`+r)),o};uW.exports=AT});var os=_((Txt,pW)=>{"use strict";var fW=uy(),B8e=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],v8e=["scalar","sequence","mapping"];function D8e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(o){e[String(o)]=r})}),e}function P8e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(B8e.indexOf(r)===-1)throw new fW('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=D8e(e.styleAliases||null),v8e.indexOf(this.kind)===-1)throw new fW('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}pW.exports=P8e});var Kg=_((Lxt,gW)=>{"use strict";var hW=Wg(),HD=uy(),S8e=os();function fT(t,e,r){var o=[];return t.include.forEach(function(a){r=fT(a,e,r)}),t[e].forEach(function(a){r.forEach(function(n,u){n.tag===a.tag&&n.kind===a.kind&&o.push(u)}),r.push(a)}),r.filter(function(a,n){return o.indexOf(n)===-1})}function x8e(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function o(a){t[a.kind][a.tag]=t.fallback[a.tag]=a}for(e=0,r=arguments.length;e{"use strict";var b8e=os();dW.exports=new b8e("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var EW=_((Oxt,yW)=>{"use strict";var k8e=os();yW.exports=new k8e("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var wW=_((Mxt,CW)=>{"use strict";var Q8e=os();CW.exports=new Q8e("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var jD=_((Uxt,IW)=>{"use strict";var F8e=Kg();IW.exports=new F8e({explicit:[mW(),EW(),wW()]})});var vW=_((_xt,BW)=>{"use strict";var R8e=os();function T8e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function L8e(){return null}function N8e(t){return t===null}BW.exports=new R8e("tag:yaml.org,2002:null",{kind:"scalar",resolve:T8e,construct:L8e,predicate:N8e,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var PW=_((Hxt,DW)=>{"use strict";var O8e=os();function M8e(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function U8e(t){return t==="true"||t==="True"||t==="TRUE"}function _8e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}DW.exports=new O8e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:M8e,construct:U8e,predicate:_8e,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})});var xW=_((jxt,SW)=>{"use strict";var H8e=Wg(),j8e=os();function q8e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function G8e(t){return 48<=t&&t<=55}function Y8e(t){return 48<=t&&t<=57}function W8e(t){if(t===null)return!1;var e=t.length,r=0,o=!1,a;if(!e)return!1;if(a=t[r],(a==="-"||a==="+")&&(a=t[++r]),a==="0"){if(r+1===e)return!0;if(a=t[++r],a==="b"){for(r++;r=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0"+t.toString(8):"-0"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var QW=_((qxt,kW)=>{"use strict";var bW=Wg(),z8e=os(),J8e=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function X8e(t){return!(t===null||!J8e.test(t)||t[t.length-1]==="_")}function Z8e(t){var e,r,o,a;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,a=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(n){a.unshift(parseFloat(n,10))}),e=0,o=1,a.forEach(function(n){e+=n*o,o*=60}),r*e):r*parseFloat(e,10)}var $8e=/^[-+]?[0-9]+e/;function eHe(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(bW.isNegativeZero(t))return"-0.0";return r=t.toString(10),$8e.test(r)?r.replace("e",".e"):r}function tHe(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||bW.isNegativeZero(t))}kW.exports=new z8e("tag:yaml.org,2002:float",{kind:"scalar",resolve:X8e,construct:Z8e,predicate:tHe,represent:eHe,defaultStyle:"lowercase"})});var pT=_((Gxt,FW)=>{"use strict";var rHe=Kg();FW.exports=new rHe({include:[jD()],implicit:[vW(),PW(),xW(),QW()]})});var hT=_((Yxt,RW)=>{"use strict";var nHe=Kg();RW.exports=new nHe({include:[pT()]})});var OW=_((Wxt,NW)=>{"use strict";var iHe=os(),TW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),LW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function sHe(t){return t===null?!1:TW.exec(t)!==null||LW.exec(t)!==null}function oHe(t){var e,r,o,a,n,u,A,p=0,h=null,C,I,v;if(e=TW.exec(t),e===null&&(e=LW.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],o=+e[2]-1,a=+e[3],!e[4])return new Date(Date.UTC(r,o,a));if(n=+e[4],u=+e[5],A=+e[6],e[7]){for(p=e[7].slice(0,3);p.length<3;)p+="0";p=+p}return e[9]&&(C=+e[10],I=+(e[11]||0),h=(C*60+I)*6e4,e[9]==="-"&&(h=-h)),v=new Date(Date.UTC(r,o,a,n,u,A,p)),h&&v.setTime(v.getTime()-h),v}function aHe(t){return t.toISOString()}NW.exports=new iHe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:sHe,construct:oHe,instanceOf:Date,represent:aHe})});var UW=_((Kxt,MW)=>{"use strict";var lHe=os();function cHe(t){return t==="<<"||t===null}MW.exports=new lHe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:cHe})});var jW=_((Vxt,HW)=>{"use strict";var Vg;try{_W=Be,Vg=_W("buffer").Buffer}catch{}var _W,uHe=os(),gT=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function AHe(t){if(t===null)return!1;var e,r,o=0,a=t.length,n=gT;for(r=0;r64)){if(e<0)return!1;o+=6}return o%8===0}function fHe(t){var e,r,o=t.replace(/[\r\n=]/g,""),a=o.length,n=gT,u=0,A=[];for(e=0;e>16&255),A.push(u>>8&255),A.push(u&255)),u=u<<6|n.indexOf(o.charAt(e));return r=a%4*6,r===0?(A.push(u>>16&255),A.push(u>>8&255),A.push(u&255)):r===18?(A.push(u>>10&255),A.push(u>>2&255)):r===12&&A.push(u>>4&255),Vg?Vg.from?Vg.from(A):new Vg(A):A}function pHe(t){var e="",r=0,o,a,n=t.length,u=gT;for(o=0;o>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]),r=(r<<8)+t[o];return a=n%3,a===0?(e+=u[r>>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]):a===2?(e+=u[r>>10&63],e+=u[r>>4&63],e+=u[r<<2&63],e+=u[64]):a===1&&(e+=u[r>>2&63],e+=u[r<<4&63],e+=u[64],e+=u[64]),e}function hHe(t){return Vg&&Vg.isBuffer(t)}HW.exports=new uHe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:AHe,construct:fHe,predicate:hHe,represent:pHe})});var GW=_((Jxt,qW)=>{"use strict";var gHe=os(),dHe=Object.prototype.hasOwnProperty,mHe=Object.prototype.toString;function yHe(t){if(t===null)return!0;var e=[],r,o,a,n,u,A=t;for(r=0,o=A.length;r{"use strict";var CHe=os(),wHe=Object.prototype.toString;function IHe(t){if(t===null)return!0;var e,r,o,a,n,u=t;for(n=new Array(u.length),e=0,r=u.length;e{"use strict";var vHe=os(),DHe=Object.prototype.hasOwnProperty;function PHe(t){if(t===null)return!0;var e,r=t;for(e in r)if(DHe.call(r,e)&&r[e]!==null)return!1;return!0}function SHe(t){return t!==null?t:{}}KW.exports=new vHe("tag:yaml.org,2002:set",{kind:"mapping",resolve:PHe,construct:SHe})});var fy=_(($xt,zW)=>{"use strict";var xHe=Kg();zW.exports=new xHe({include:[hT()],implicit:[OW(),UW()],explicit:[jW(),GW(),WW(),VW()]})});var XW=_((ebt,JW)=>{"use strict";var bHe=os();function kHe(){return!0}function QHe(){}function FHe(){return""}function RHe(t){return typeof t>"u"}JW.exports=new bHe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:kHe,construct:QHe,predicate:RHe,represent:FHe})});var $W=_((tbt,ZW)=>{"use strict";var THe=os();function LHe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),o="";return!(e[0]==="/"&&(r&&(o=r[1]),o.length>3||e[e.length-o.length-1]!=="/"))}function NHe(t){var e=t,r=/\/([gim]*)$/.exec(t),o="";return e[0]==="/"&&(r&&(o=r[1]),e=e.slice(1,e.length-o.length-1)),new RegExp(e,o)}function OHe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function MHe(t){return Object.prototype.toString.call(t)==="[object RegExp]"}ZW.exports=new THe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:LHe,construct:NHe,predicate:MHe,represent:OHe})});var rK=_((rbt,tK)=>{"use strict";var qD;try{eK=Be,qD=eK("esprima")}catch{typeof window<"u"&&(qD=window.esprima)}var eK,UHe=os();function _He(t){if(t===null)return!1;try{var e="("+t+")",r=qD.parse(e,{range:!0});return!(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function HHe(t){var e="("+t+")",r=qD.parse(e,{range:!0}),o=[],a;if(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(n){o.push(n.name)}),a=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(o,e.slice(a[0]+1,a[1]-1)):new Function(o,"return "+e.slice(a[0],a[1]))}function jHe(t){return t.toString()}function qHe(t){return Object.prototype.toString.call(t)==="[object Function]"}tK.exports=new UHe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:_He,construct:HHe,predicate:qHe,represent:jHe})});var Jw=_((ibt,iK)=>{"use strict";var nK=Kg();iK.exports=nK.DEFAULT=new nK({include:[fy()],explicit:[XW(),$W(),rK()]})});var BK=_((sbt,Xw)=>{"use strict";var mf=Wg(),AK=uy(),GHe=AW(),fK=fy(),YHe=Jw(),qp=Object.prototype.hasOwnProperty,GD=1,pK=2,hK=3,YD=4,dT=1,WHe=2,sK=3,KHe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,VHe=/[\x85\u2028\u2029]/,zHe=/[,\[\]\{\}]/,gK=/^(?:!|!!|![a-z\-]+!)$/i,dK=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function oK(t){return Object.prototype.toString.call(t)}function Hu(t){return t===10||t===13}function Jg(t){return t===9||t===32}function Ia(t){return t===9||t===32||t===10||t===13}function py(t){return t===44||t===91||t===93||t===123||t===125}function JHe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function XHe(t){return t===120?2:t===117?4:t===85?8:0}function ZHe(t){return 48<=t&&t<=57?t-48:-1}function aK(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?` -`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function $He(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var mK=new Array(256),yK=new Array(256);for(zg=0;zg<256;zg++)mK[zg]=aK(zg)?1:0,yK[zg]=aK(zg);var zg;function e6e(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||YHe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function EK(t,e){return new AK(e,new GHe(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function Sr(t,e){throw EK(t,e)}function WD(t,e){t.onWarning&&t.onWarning.call(null,EK(t,e))}var lK={YAML:function(e,r,o){var a,n,u;e.version!==null&&Sr(e,"duplication of %YAML directive"),o.length!==1&&Sr(e,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(o[0]),a===null&&Sr(e,"ill-formed argument of the YAML directive"),n=parseInt(a[1],10),u=parseInt(a[2],10),n!==1&&Sr(e,"unacceptable YAML version of the document"),e.version=o[0],e.checkLineBreaks=u<2,u!==1&&u!==2&&WD(e,"unsupported YAML version of the document")},TAG:function(e,r,o){var a,n;o.length!==2&&Sr(e,"TAG directive accepts exactly two arguments"),a=o[0],n=o[1],gK.test(a)||Sr(e,"ill-formed tag handle (first argument) of the TAG directive"),qp.call(e.tagMap,a)&&Sr(e,'there is a previously declared suffix for "'+a+'" tag handle'),dK.test(n)||Sr(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[a]=n}};function jp(t,e,r,o){var a,n,u,A;if(e1&&(t.result+=mf.repeat(` -`,e-1))}function t6e(t,e,r){var o,a,n,u,A,p,h,C,I=t.kind,v=t.result,b;if(b=t.input.charCodeAt(t.position),Ia(b)||py(b)||b===35||b===38||b===42||b===33||b===124||b===62||b===39||b===34||b===37||b===64||b===96||(b===63||b===45)&&(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&py(a)))return!1;for(t.kind="scalar",t.result="",n=u=t.position,A=!1;b!==0;){if(b===58){if(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&py(a))break}else if(b===35){if(o=t.input.charCodeAt(t.position-1),Ia(o))break}else{if(t.position===t.lineStart&&KD(t)||r&&py(b))break;if(Hu(b))if(p=t.line,h=t.lineStart,C=t.lineIndent,Wi(t,!1,-1),t.lineIndent>=e){A=!0,b=t.input.charCodeAt(t.position);continue}else{t.position=u,t.line=p,t.lineStart=h,t.lineIndent=C;break}}A&&(jp(t,n,u,!1),yT(t,t.line-p),n=u=t.position,A=!1),Jg(b)||(u=t.position+1),b=t.input.charCodeAt(++t.position)}return jp(t,n,u,!1),t.result?!0:(t.kind=I,t.result=v,!1)}function r6e(t,e){var r,o,a;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,o=a=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(jp(t,o,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)o=t.position,t.position++,a=t.position;else return!0;else Hu(r)?(jp(t,o,a,!0),yT(t,Wi(t,!1,e)),o=a=t.position):t.position===t.lineStart&&KD(t)?Sr(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Sr(t,"unexpected end of the stream within a single quoted scalar")}function n6e(t,e){var r,o,a,n,u,A;if(A=t.input.charCodeAt(t.position),A!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=o=t.position;(A=t.input.charCodeAt(t.position))!==0;){if(A===34)return jp(t,r,t.position,!0),t.position++,!0;if(A===92){if(jp(t,r,t.position,!0),A=t.input.charCodeAt(++t.position),Hu(A))Wi(t,!1,e);else if(A<256&&mK[A])t.result+=yK[A],t.position++;else if((u=XHe(A))>0){for(a=u,n=0;a>0;a--)A=t.input.charCodeAt(++t.position),(u=JHe(A))>=0?n=(n<<4)+u:Sr(t,"expected hexadecimal character");t.result+=$He(n),t.position++}else Sr(t,"unknown escape sequence");r=o=t.position}else Hu(A)?(jp(t,r,o,!0),yT(t,Wi(t,!1,e)),r=o=t.position):t.position===t.lineStart&&KD(t)?Sr(t,"unexpected end of the document within a double quoted scalar"):(t.position++,o=t.position)}Sr(t,"unexpected end of the stream within a double quoted scalar")}function i6e(t,e){var r=!0,o,a=t.tag,n,u=t.anchor,A,p,h,C,I,v={},b,E,F,N;if(N=t.input.charCodeAt(t.position),N===91)p=93,I=!1,n=[];else if(N===123)p=125,I=!0,n={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=n),N=t.input.charCodeAt(++t.position);N!==0;){if(Wi(t,!0,e),N=t.input.charCodeAt(t.position),N===p)return t.position++,t.tag=a,t.anchor=u,t.kind=I?"mapping":"sequence",t.result=n,!0;r||Sr(t,"missed comma between flow collection entries"),E=b=F=null,h=C=!1,N===63&&(A=t.input.charCodeAt(t.position+1),Ia(A)&&(h=C=!0,t.position++,Wi(t,!0,e))),o=t.line,gy(t,e,GD,!1,!0),E=t.tag,b=t.result,Wi(t,!0,e),N=t.input.charCodeAt(t.position),(C||t.line===o)&&N===58&&(h=!0,N=t.input.charCodeAt(++t.position),Wi(t,!0,e),gy(t,e,GD,!1,!0),F=t.result),I?hy(t,n,v,E,b,F):h?n.push(hy(t,null,v,E,b,F)):n.push(b),Wi(t,!0,e),N=t.input.charCodeAt(t.position),N===44?(r=!0,N=t.input.charCodeAt(++t.position)):r=!1}Sr(t,"unexpected end of the stream within a flow collection")}function s6e(t,e){var r,o,a=dT,n=!1,u=!1,A=e,p=0,h=!1,C,I;if(I=t.input.charCodeAt(t.position),I===124)o=!1;else if(I===62)o=!0;else return!1;for(t.kind="scalar",t.result="";I!==0;)if(I=t.input.charCodeAt(++t.position),I===43||I===45)dT===a?a=I===43?sK:WHe:Sr(t,"repeat of a chomping mode identifier");else if((C=ZHe(I))>=0)C===0?Sr(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?Sr(t,"repeat of an indentation width identifier"):(A=e+C-1,u=!0);else break;if(Jg(I)){do I=t.input.charCodeAt(++t.position);while(Jg(I));if(I===35)do I=t.input.charCodeAt(++t.position);while(!Hu(I)&&I!==0)}for(;I!==0;){for(mT(t),t.lineIndent=0,I=t.input.charCodeAt(t.position);(!u||t.lineIndentA&&(A=t.lineIndent),Hu(I)){p++;continue}if(t.lineIndente)&&p!==0)Sr(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(gy(t,e,YD,!0,a)&&(E?v=t.result:b=t.result),E||(hy(t,h,C,I,v,b,n,u),I=v=b=null),Wi(t,!0,-1),N=t.input.charCodeAt(t.position)),t.lineIndent>e&&N!==0)Sr(t,"bad indentation of a mapping entry");else if(t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),I=0,v=t.implicitTypes.length;I tag; it should be "'+b.kind+'", not "'+t.kind+'"'),b.resolve(t.result)?(t.result=b.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Sr(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):Sr(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||C}function u6e(t){var e=t.position,r,o,a,n=!1,u;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(u=t.input.charCodeAt(t.position))!==0&&(Wi(t,!0,-1),u=t.input.charCodeAt(t.position),!(t.lineIndent>0||u!==37));){for(n=!0,u=t.input.charCodeAt(++t.position),r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);for(o=t.input.slice(r,t.position),a=[],o.length<1&&Sr(t,"directive name must not be less than one character in length");u!==0;){for(;Jg(u);)u=t.input.charCodeAt(++t.position);if(u===35){do u=t.input.charCodeAt(++t.position);while(u!==0&&!Hu(u));break}if(Hu(u))break;for(r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);a.push(t.input.slice(r,t.position))}u!==0&&mT(t),qp.call(lK,o)?lK[o](t,o,a):WD(t,'unknown document directive "'+o+'"')}if(Wi(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Wi(t,!0,-1)):n&&Sr(t,"directives end mark is expected"),gy(t,t.lineIndent-1,YD,!1,!0),Wi(t,!0,-1),t.checkLineBreaks&&VHe.test(t.input.slice(e,t.position))&&WD(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&KD(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Wi(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var o=CK(t,r);if(typeof e!="function")return o;for(var a=0,n=o.length;a"u"&&(r=e,e=null),wK(t,e,mf.extend({schema:fK},r))}function f6e(t,e){return IK(t,mf.extend({schema:fK},e))}Xw.exports.loadAll=wK;Xw.exports.load=IK;Xw.exports.safeLoadAll=A6e;Xw.exports.safeLoad=f6e});var WK=_((obt,IT)=>{"use strict";var $w=Wg(),eI=uy(),p6e=Jw(),h6e=fy(),QK=Object.prototype.toString,FK=Object.prototype.hasOwnProperty,g6e=9,Zw=10,d6e=13,m6e=32,y6e=33,E6e=34,RK=35,C6e=37,w6e=38,I6e=39,B6e=42,TK=44,v6e=45,LK=58,D6e=61,P6e=62,S6e=63,x6e=64,NK=91,OK=93,b6e=96,MK=123,k6e=124,UK=125,vo={};vo[0]="\\0";vo[7]="\\a";vo[8]="\\b";vo[9]="\\t";vo[10]="\\n";vo[11]="\\v";vo[12]="\\f";vo[13]="\\r";vo[27]="\\e";vo[34]='\\"';vo[92]="\\\\";vo[133]="\\N";vo[160]="\\_";vo[8232]="\\L";vo[8233]="\\P";var Q6e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function F6e(t,e){var r,o,a,n,u,A,p;if(e===null)return{};for(r={},o=Object.keys(e),a=0,n=o.length;a0?t.charCodeAt(n-1):null,v=v&&PK(u,A)}else{for(n=0;no&&t[I+1]!==" ",I=n);else if(!dy(u))return VD;A=n>0?t.charCodeAt(n-1):null,v=v&&PK(u,A)}h=h||C&&n-I-1>o&&t[I+1]!==" "}return!p&&!h?v&&!a(t)?HK:jK:r>9&&_K(t)?VD:h?GK:qK}function M6e(t,e,r,o){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&Q6e.indexOf(e)!==-1)return"'"+e+"'";var a=t.indent*Math.max(1,r),n=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),u=o||t.flowLevel>-1&&r>=t.flowLevel;function A(p){return T6e(t,p)}switch(O6e(e,u,t.indent,n,A)){case HK:return e;case jK:return"'"+e.replace(/'/g,"''")+"'";case qK:return"|"+SK(e,t.indent)+xK(DK(e,a));case GK:return">"+SK(e,t.indent)+xK(DK(U6e(e,n),a));case VD:return'"'+_6e(e,n)+'"';default:throw new eI("impossible error: invalid scalar style")}}()}function SK(t,e){var r=_K(t)?String(e):"",o=t[t.length-1]===` -`,a=o&&(t[t.length-2]===` -`||t===` -`),n=a?"+":o?"":"-";return r+n+` -`}function xK(t){return t[t.length-1]===` -`?t.slice(0,-1):t}function U6e(t,e){for(var r=/(\n+)([^\n]*)/g,o=function(){var h=t.indexOf(` -`);return h=h!==-1?h:t.length,r.lastIndex=h,bK(t.slice(0,h),e)}(),a=t[0]===` -`||t[0]===" ",n,u;u=r.exec(t);){var A=u[1],p=u[2];n=p[0]===" ",o+=A+(!a&&!n&&p!==""?` -`:"")+bK(p,e),a=n}return o}function bK(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,o,a=0,n,u=0,A=0,p="";o=r.exec(t);)A=o.index,A-a>e&&(n=u>a?u:A,p+=` -`+t.slice(a,n),a=n+1),u=A;return p+=` -`,t.length-a>e&&u>a?p+=t.slice(a,u)+` -`+t.slice(u+1):p+=t.slice(a),p.slice(1)}function _6e(t){for(var e="",r,o,a,n=0;n=55296&&r<=56319&&(o=t.charCodeAt(n+1),o>=56320&&o<=57343)){e+=vK((r-55296)*1024+o-56320+65536),n++;continue}a=vo[r],e+=!a&&dy(r)?t[n]:a||vK(r)}return e}function H6e(t,e,r){var o="",a=t.tag,n,u;for(n=0,u=r.length;n1024&&(C+="? "),C+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Xg(t,e,h,!1,!1)&&(C+=t.dump,o+=C));t.tag=a,t.dump="{"+o+"}"}function G6e(t,e,r,o){var a="",n=t.tag,u=Object.keys(r),A,p,h,C,I,v;if(t.sortKeys===!0)u.sort();else if(typeof t.sortKeys=="function")u.sort(t.sortKeys);else if(t.sortKeys)throw new eI("sortKeys must be a boolean or a function");for(A=0,p=u.length;A1024,I&&(t.dump&&Zw===t.dump.charCodeAt(0)?v+="?":v+="? "),v+=t.dump,I&&(v+=ET(t,e)),Xg(t,e+1,C,!0,I)&&(t.dump&&Zw===t.dump.charCodeAt(0)?v+=":":v+=": ",v+=t.dump,a+=v));t.tag=n,t.dump=a||"{}"}function kK(t,e,r){var o,a,n,u,A,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,u=a.length;n tag resolver accepts not "'+p+'" style');t.dump=o}return!0}return!1}function Xg(t,e,r,o,a,n){t.tag=null,t.dump=r,kK(t,r,!1)||kK(t,r,!0);var u=QK.call(t.dump);o&&(o=t.flowLevel<0||t.flowLevel>e);var A=u==="[object Object]"||u==="[object Array]",p,h;if(A&&(p=t.duplicates.indexOf(r),h=p!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&e>0)&&(a=!1),h&&t.usedDuplicates[p])t.dump="*ref_"+p;else{if(A&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),u==="[object Object]")o&&Object.keys(t.dump).length!==0?(G6e(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(q6e(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(u==="[object Array]"){var C=t.noArrayIndent&&e>0?e-1:e;o&&t.dump.length!==0?(j6e(t,C,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(H6e(t,C,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(u==="[object String]")t.tag!=="?"&&M6e(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new eI("unacceptable kind of an object to dump "+u)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function Y6e(t,e){var r=[],o=[],a,n;for(CT(t,r,o),a=0,n=o.length;a{"use strict";var zD=BK(),KK=WK();function JD(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}ki.exports.Type=os();ki.exports.Schema=Kg();ki.exports.FAILSAFE_SCHEMA=jD();ki.exports.JSON_SCHEMA=pT();ki.exports.CORE_SCHEMA=hT();ki.exports.DEFAULT_SAFE_SCHEMA=fy();ki.exports.DEFAULT_FULL_SCHEMA=Jw();ki.exports.load=zD.load;ki.exports.loadAll=zD.loadAll;ki.exports.safeLoad=zD.safeLoad;ki.exports.safeLoadAll=zD.safeLoadAll;ki.exports.dump=KK.dump;ki.exports.safeDump=KK.safeDump;ki.exports.YAMLException=uy();ki.exports.MINIMAL_SCHEMA=jD();ki.exports.SAFE_SCHEMA=fy();ki.exports.DEFAULT_SCHEMA=Jw();ki.exports.scan=JD("scan");ki.exports.parse=JD("parse");ki.exports.compose=JD("compose");ki.exports.addConstructor=JD("addConstructor")});var JK=_((lbt,zK)=>{"use strict";var K6e=VK();zK.exports=K6e});var ZK=_((cbt,XK)=>{"use strict";function V6e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Zg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Zg)}V6e(Zg,Error);Zg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var C="",I;for(I=0;I0){for(I=1,v=1;I({[ft]:Ne})))},pe=function($){return $},ue=function($){return $},ye=sa("correct indentation"),ae=" ",Ie=Qn(" ",!1),Fe=function($){return $.length===nr*It},g=function($){return $.length===(nr+1)*It},Ee=function(){return nr++,!0},De=function(){return nr--,!0},ce=function(){return DA()},ne=sa("pseudostring"),ee=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,we=hi(["\r",` -`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),be=/^[^\r\n\t ,\][{}:#"']/,ht=hi(["\r",` -`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),H=function(){return DA().replace(/^ *| *$/g,"")},lt="--",Te=Qn("--",!1),ke=/^[a-zA-Z\/0-9]/,xe=hi([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),He=/^[^\r\n\t :,]/,Re=hi(["\r",` -`," "," ",":",","],!0,!1),ze="null",je=Qn("null",!1),x=function(){return null},w="true",S=Qn("true",!1),y=function(){return!0},R="false",J=Qn("false",!1),X=function(){return!1},Z=sa("string"),ie='"',Pe=Qn('"',!1),Le=function(){return""},ot=function($){return $},dt=function($){return $.join("")},jt=/^[^"\\\0-\x1F\x7F]/,$t=hi(['"',"\\",["\0",""],"\x7F"],!0,!1),xt='\\"',an=Qn('\\"',!1),kr=function(){return'"'},mr="\\\\",xr=Qn("\\\\",!1),Wr=function(){return"\\"},Kn="\\/",Ns=Qn("\\/",!1),Ti=function(){return"/"},ps="\\b",io=Qn("\\b",!1),Si=function(){return"\b"},Os="\\f",so=Qn("\\f",!1),cc=function(){return"\f"},cu="\\n",op=Qn("\\n",!1),ap=function(){return` -`},Ms="\\r",Dn=Qn("\\r",!1),oo=function(){return"\r"},Us="\\t",ml=Qn("\\t",!1),yl=function(){return" "},ao="\\u",Vn=Qn("\\u",!1),On=function($,me,Ne,ft){return String.fromCharCode(parseInt(`0x${$}${me}${Ne}${ft}`))},Li=/^[0-9a-fA-F]/,Mn=hi([["0","9"],["a","f"],["A","F"]],!1,!1),_i=sa("blank space"),tr=/^[ \t]/,Oe=hi([" "," "],!1,!1),ii=sa("white space"),Ma=/^[ \t\n\r]/,hr=hi([" "," ",` -`,"\r"],!1,!1),uc=`\r -`,uu=Qn(`\r -`,!1),Ac=` -`,El=Qn(` -`,!1),vA="\r",Au=Qn("\r",!1),Ce=0,Rt=0,fc=[{line:1,column:1}],Hi=0,fu=[],Yt=0,Cl;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function DA(){return t.substring(Rt,Ce)}function lp(){return _o(Rt,Ce)}function pc($,me){throw me=me!==void 0?me:_o(Rt,Ce),gc([sa($)],t.substring(Rt,Ce),me)}function PA($,me){throw me=me!==void 0?me:_o(Rt,Ce),lo($,me)}function Qn($,me){return{type:"literal",text:$,ignoreCase:me}}function hi($,me,Ne){return{type:"class",parts:$,inverted:me,ignoreCase:Ne}}function hc(){return{type:"any"}}function SA(){return{type:"end"}}function sa($){return{type:"other",description:$}}function Ni($){var me=fc[$],Ne;if(me)return me;for(Ne=$-1;!fc[Ne];)Ne--;for(me=fc[Ne],me={line:me.line,column:me.column};Ne<$;)t.charCodeAt(Ne)===10?(me.line++,me.column=1):me.column++,Ne++;return fc[$]=me,me}function _o($,me){var Ne=Ni($),ft=Ni(me);return{start:{offset:$,line:Ne.line,column:Ne.column},end:{offset:me,line:ft.line,column:ft.column}}}function Ze($){CeHi&&(Hi=Ce,fu=[]),fu.push($))}function lo($,me){return new Zg($,null,null,me)}function gc($,me,Ne){return new Zg(Zg.buildMessage($,me),$,me,Ne)}function pu(){var $;return $=xA(),$}function ji(){var $,me,Ne;for($=Ce,me=[],Ne=hu();Ne!==r;)me.push(Ne),Ne=hu();return me!==r&&(Rt=$,me=n(me)),$=me,$}function hu(){var $,me,Ne,ft,pt;return $=Ce,me=hs(),me!==r?(t.charCodeAt(Ce)===45?(Ne=u,Ce++):(Ne=r,Yt===0&&Ze(A)),Ne!==r?(ft=Pn(),ft!==r?(pt=dc(),pt!==r?(Rt=$,me=p(pt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$}function xA(){var $,me,Ne;for($=Ce,me=[],Ne=Ua();Ne!==r;)me.push(Ne),Ne=Ua();return me!==r&&(Rt=$,me=h(me)),$=me,$}function Ua(){var $,me,Ne,ft,pt,Tt,er,Zr,qi;if($=Ce,me=Pn(),me===r&&(me=null),me!==r){if(Ne=Ce,t.charCodeAt(Ce)===35?(ft=C,Ce++):(ft=r,Yt===0&&Ze(I)),ft!==r){if(pt=[],Tt=Ce,er=Ce,Yt++,Zr=tt(),Yt--,Zr===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?(Zr=t.charAt(Ce),Ce++):(Zr=r,Yt===0&&Ze(v)),Zr!==r?(er=[er,Zr],Tt=er):(Ce=Tt,Tt=r)):(Ce=Tt,Tt=r),Tt!==r)for(;Tt!==r;)pt.push(Tt),Tt=Ce,er=Ce,Yt++,Zr=tt(),Yt--,Zr===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?(Zr=t.charAt(Ce),Ce++):(Zr=r,Yt===0&&Ze(v)),Zr!==r?(er=[er,Zr],Tt=er):(Ce=Tt,Tt=r)):(Ce=Tt,Tt=r);else pt=r;pt!==r?(ft=[ft,pt],Ne=ft):(Ce=Ne,Ne=r)}else Ce=Ne,Ne=r;if(Ne===r&&(Ne=null),Ne!==r){if(ft=[],pt=We(),pt!==r)for(;pt!==r;)ft.push(pt),pt=We();else ft=r;ft!==r?(Rt=$,me=b(),$=me):(Ce=$,$=r)}else Ce=$,$=r}else Ce=$,$=r;if($===r&&($=Ce,me=hs(),me!==r?(Ne=oa(),Ne!==r?(ft=Pn(),ft===r&&(ft=null),ft!==r?(t.charCodeAt(Ce)===58?(pt=E,Ce++):(pt=r,Yt===0&&Ze(F)),pt!==r?(Tt=Pn(),Tt===r&&(Tt=null),Tt!==r?(er=dc(),er!==r?(Rt=$,me=N(Ne,er),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,me=hs(),me!==r?(Ne=co(),Ne!==r?(ft=Pn(),ft===r&&(ft=null),ft!==r?(t.charCodeAt(Ce)===58?(pt=E,Ce++):(pt=r,Yt===0&&Ze(F)),pt!==r?(Tt=Pn(),Tt===r&&(Tt=null),Tt!==r?(er=dc(),er!==r?(Rt=$,me=N(Ne,er),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))){if($=Ce,me=hs(),me!==r)if(Ne=co(),Ne!==r)if(ft=Pn(),ft!==r)if(pt=aa(),pt!==r){if(Tt=[],er=We(),er!==r)for(;er!==r;)Tt.push(er),er=We();else Tt=r;Tt!==r?(Rt=$,me=N(Ne,pt),$=me):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;if($===r)if($=Ce,me=hs(),me!==r)if(Ne=co(),Ne!==r){if(ft=[],pt=Ce,Tt=Pn(),Tt===r&&(Tt=null),Tt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(z)),er!==r?(Zr=Pn(),Zr===r&&(Zr=null),Zr!==r?(qi=co(),qi!==r?(Rt=pt,Tt=te(Ne,qi),pt=Tt):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r),pt!==r)for(;pt!==r;)ft.push(pt),pt=Ce,Tt=Pn(),Tt===r&&(Tt=null),Tt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(z)),er!==r?(Zr=Pn(),Zr===r&&(Zr=null),Zr!==r?(qi=co(),qi!==r?(Rt=pt,Tt=te(Ne,qi),pt=Tt):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r);else ft=r;ft!==r?(pt=Pn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(Ce)===58?(Tt=E,Ce++):(Tt=r,Yt===0&&Ze(F)),Tt!==r?(er=Pn(),er===r&&(er=null),er!==r?(Zr=dc(),Zr!==r?(Rt=$,me=le(Ne,ft,Zr),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r}return $}function dc(){var $,me,Ne,ft,pt,Tt,er;if($=Ce,me=Ce,Yt++,Ne=Ce,ft=tt(),ft!==r?(pt=Ut(),pt!==r?(t.charCodeAt(Ce)===45?(Tt=u,Ce++):(Tt=r,Yt===0&&Ze(A)),Tt!==r?(er=Pn(),er!==r?(ft=[ft,pt,Tt,er],Ne=ft):(Ce=Ne,Ne=r)):(Ce=Ne,Ne=r)):(Ce=Ne,Ne=r)):(Ce=Ne,Ne=r),Yt--,Ne!==r?(Ce=me,me=void 0):me=r,me!==r?(Ne=We(),Ne!==r?(ft=Fn(),ft!==r?(pt=ji(),pt!==r?(Tt=Ci(),Tt!==r?(Rt=$,me=pe(pt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,me=tt(),me!==r?(Ne=Fn(),Ne!==r?(ft=xA(),ft!==r?(pt=Ci(),pt!==r?(Rt=$,me=pe(ft),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))if($=Ce,me=_s(),me!==r){if(Ne=[],ft=We(),ft!==r)for(;ft!==r;)Ne.push(ft),ft=We();else Ne=r;Ne!==r?(Rt=$,me=ue(me),$=me):(Ce=$,$=r)}else Ce=$,$=r;return $}function hs(){var $,me,Ne;for(Yt++,$=Ce,me=[],t.charCodeAt(Ce)===32?(Ne=ae,Ce++):(Ne=r,Yt===0&&Ze(Ie));Ne!==r;)me.push(Ne),t.charCodeAt(Ce)===32?(Ne=ae,Ce++):(Ne=r,Yt===0&&Ze(Ie));return me!==r?(Rt=Ce,Ne=Fe(me),Ne?Ne=void 0:Ne=r,Ne!==r?(me=[me,Ne],$=me):(Ce=$,$=r)):(Ce=$,$=r),Yt--,$===r&&(me=r,Yt===0&&Ze(ye)),$}function Ut(){var $,me,Ne;for($=Ce,me=[],t.charCodeAt(Ce)===32?(Ne=ae,Ce++):(Ne=r,Yt===0&&Ze(Ie));Ne!==r;)me.push(Ne),t.charCodeAt(Ce)===32?(Ne=ae,Ce++):(Ne=r,Yt===0&&Ze(Ie));return me!==r?(Rt=Ce,Ne=g(me),Ne?Ne=void 0:Ne=r,Ne!==r?(me=[me,Ne],$=me):(Ce=$,$=r)):(Ce=$,$=r),$}function Fn(){var $;return Rt=Ce,$=Ee(),$?$=void 0:$=r,$}function Ci(){var $;return Rt=Ce,$=De(),$?$=void 0:$=r,$}function oa(){var $;return $=ds(),$===r&&($=la()),$}function co(){var $,me,Ne;if($=ds(),$===r){if($=Ce,me=[],Ne=Ho(),Ne!==r)for(;Ne!==r;)me.push(Ne),Ne=Ho();else me=r;me!==r&&(Rt=$,me=ce()),$=me}return $}function _s(){var $;return $=wi(),$===r&&($=gs(),$===r&&($=ds(),$===r&&($=la()))),$}function aa(){var $;return $=wi(),$===r&&($=ds(),$===r&&($=Ho())),$}function la(){var $,me,Ne,ft,pt,Tt;if(Yt++,$=Ce,ee.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(we)),me!==r){for(Ne=[],ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(be.test(t.charAt(Ce))?(Tt=t.charAt(Ce),Ce++):(Tt=r,Yt===0&&Ze(ht)),Tt!==r?(pt=[pt,Tt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);ft!==r;)Ne.push(ft),ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(be.test(t.charAt(Ce))?(Tt=t.charAt(Ce),Ce++):(Tt=r,Yt===0&&Ze(ht)),Tt!==r?(pt=[pt,Tt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);Ne!==r?(Rt=$,me=H(),$=me):(Ce=$,$=r)}else Ce=$,$=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(ne)),$}function Ho(){var $,me,Ne,ft,pt;if($=Ce,t.substr(Ce,2)===lt?(me=lt,Ce+=2):(me=r,Yt===0&&Ze(Te)),me===r&&(me=null),me!==r)if(ke.test(t.charAt(Ce))?(Ne=t.charAt(Ce),Ce++):(Ne=r,Yt===0&&Ze(xe)),Ne!==r){for(ft=[],He.test(t.charAt(Ce))?(pt=t.charAt(Ce),Ce++):(pt=r,Yt===0&&Ze(Re));pt!==r;)ft.push(pt),He.test(t.charAt(Ce))?(pt=t.charAt(Ce),Ce++):(pt=r,Yt===0&&Ze(Re));ft!==r?(Rt=$,me=H(),$=me):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;return $}function wi(){var $,me;return $=Ce,t.substr(Ce,4)===ze?(me=ze,Ce+=4):(me=r,Yt===0&&Ze(je)),me!==r&&(Rt=$,me=x()),$=me,$}function gs(){var $,me;return $=Ce,t.substr(Ce,4)===w?(me=w,Ce+=4):(me=r,Yt===0&&Ze(S)),me!==r&&(Rt=$,me=y()),$=me,$===r&&($=Ce,t.substr(Ce,5)===R?(me=R,Ce+=5):(me=r,Yt===0&&Ze(J)),me!==r&&(Rt=$,me=X()),$=me),$}function ds(){var $,me,Ne,ft;return Yt++,$=Ce,t.charCodeAt(Ce)===34?(me=ie,Ce++):(me=r,Yt===0&&Ze(Pe)),me!==r?(t.charCodeAt(Ce)===34?(Ne=ie,Ce++):(Ne=r,Yt===0&&Ze(Pe)),Ne!==r?(Rt=$,me=Le(),$=me):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,t.charCodeAt(Ce)===34?(me=ie,Ce++):(me=r,Yt===0&&Ze(Pe)),me!==r?(Ne=ms(),Ne!==r?(t.charCodeAt(Ce)===34?(ft=ie,Ce++):(ft=r,Yt===0&&Ze(Pe)),ft!==r?(Rt=$,me=ot(Ne),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)),Yt--,$===r&&(me=r,Yt===0&&Ze(Z)),$}function ms(){var $,me,Ne;if($=Ce,me=[],Ne=Hs(),Ne!==r)for(;Ne!==r;)me.push(Ne),Ne=Hs();else me=r;return me!==r&&(Rt=$,me=dt(me)),$=me,$}function Hs(){var $,me,Ne,ft,pt,Tt;return jt.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze($t)),$===r&&($=Ce,t.substr(Ce,2)===xt?(me=xt,Ce+=2):(me=r,Yt===0&&Ze(an)),me!==r&&(Rt=$,me=kr()),$=me,$===r&&($=Ce,t.substr(Ce,2)===mr?(me=mr,Ce+=2):(me=r,Yt===0&&Ze(xr)),me!==r&&(Rt=$,me=Wr()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Kn?(me=Kn,Ce+=2):(me=r,Yt===0&&Ze(Ns)),me!==r&&(Rt=$,me=Ti()),$=me,$===r&&($=Ce,t.substr(Ce,2)===ps?(me=ps,Ce+=2):(me=r,Yt===0&&Ze(io)),me!==r&&(Rt=$,me=Si()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Os?(me=Os,Ce+=2):(me=r,Yt===0&&Ze(so)),me!==r&&(Rt=$,me=cc()),$=me,$===r&&($=Ce,t.substr(Ce,2)===cu?(me=cu,Ce+=2):(me=r,Yt===0&&Ze(op)),me!==r&&(Rt=$,me=ap()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Ms?(me=Ms,Ce+=2):(me=r,Yt===0&&Ze(Dn)),me!==r&&(Rt=$,me=oo()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Us?(me=Us,Ce+=2):(me=r,Yt===0&&Ze(ml)),me!==r&&(Rt=$,me=yl()),$=me,$===r&&($=Ce,t.substr(Ce,2)===ao?(me=ao,Ce+=2):(me=r,Yt===0&&Ze(Vn)),me!==r?(Ne=Un(),Ne!==r?(ft=Un(),ft!==r?(pt=Un(),pt!==r?(Tt=Un(),Tt!==r?(Rt=$,me=On(Ne,ft,pt,Tt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)))))))))),$}function Un(){var $;return Li.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze(Mn)),$}function Pn(){var $,me;if(Yt++,$=[],tr.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Oe)),me!==r)for(;me!==r;)$.push(me),tr.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Oe));else $=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(_i)),$}function ys(){var $,me;if(Yt++,$=[],Ma.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(hr)),me!==r)for(;me!==r;)$.push(me),Ma.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(hr));else $=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(ii)),$}function We(){var $,me,Ne,ft,pt,Tt;if($=Ce,me=tt(),me!==r){for(Ne=[],ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(Tt=tt(),Tt!==r?(pt=[pt,Tt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);ft!==r;)Ne.push(ft),ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(Tt=tt(),Tt!==r?(pt=[pt,Tt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);Ne!==r?(me=[me,Ne],$=me):(Ce=$,$=r)}else Ce=$,$=r;return $}function tt(){var $;return t.substr(Ce,2)===uc?($=uc,Ce+=2):($=r,Yt===0&&Ze(uu)),$===r&&(t.charCodeAt(Ce)===10?($=Ac,Ce++):($=r,Yt===0&&Ze(El)),$===r&&(t.charCodeAt(Ce)===13?($=vA,Ce++):($=r,Yt===0&&Ze(Au)))),$}let It=2,nr=0;if(Cl=a(),Cl!==r&&Ce===t.length)return Cl;throw Cl!==r&&Ce"u"?!0:typeof t=="object"&&t!==null&&!Array.isArray(t)?Object.keys(t).every(e=>rV(t[e])):!1}function BT(t,e,r){if(t===null)return`null -`;if(typeof t=="number"||typeof t=="boolean")return`${t.toString()} -`;if(typeof t=="string")return`${eV(t)} -`;if(Array.isArray(t)){if(t.length===0)return`[] -`;let o=" ".repeat(e);return` -${t.map(n=>`${o}- ${BT(n,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let[o,a]=t instanceof XD?[t.data,!1]:[t,!0],n=" ".repeat(e),u=Object.keys(o);a&&u.sort((p,h)=>{let C=$K.indexOf(p),I=$K.indexOf(h);return C===-1&&I===-1?ph?1:0:C!==-1&&I===-1?-1:C===-1&&I!==-1?1:C-I});let A=u.filter(p=>!rV(o[p])).map((p,h)=>{let C=o[p],I=eV(p),v=BT(C,e+1,!0),b=h>0||r?n:"",E=I.length>1024?`? ${I} -${b}:`:`${I}:`,F=v.startsWith(` -`)?v:` ${v}`;return`${b}${E}${F}`}).join(e===0?` -`:"")||` -`;return r?` -${A}`:`${A}`}throw new Error(`Unsupported value type (${t})`)}function Ba(t){try{let e=BT(t,0,!1);return e!==` -`?e:""}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}function X6e(t){return t.endsWith(` -`)||(t+=` -`),(0,tV.parse)(t)}function $6e(t){if(Z6e.test(t))return X6e(t);let e=(0,ZD.safeLoad)(t,{schema:ZD.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!="object")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error("Expected an indexed object, got an array instead. Does your file follow Yaml's rules?");return e}function Ki(t){return $6e(t)}var ZD,tV,J6e,$K,XD,Z6e,nV=yt(()=>{ZD=$e(JK()),tV=$e(ZK()),J6e=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,$K=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],XD=class{constructor(e){this.data=e}};Ba.PreserveOrdering=XD;Z6e=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i});var tI={};Vt(tI,{parseResolution:()=>UD,parseShell:()=>ND,parseSyml:()=>Ki,stringifyArgument:()=>cT,stringifyArgumentSegment:()=>uT,stringifyArithmeticExpression:()=>MD,stringifyCommand:()=>lT,stringifyCommandChain:()=>cy,stringifyCommandChainThen:()=>aT,stringifyCommandLine:()=>OD,stringifyCommandLineThen:()=>oT,stringifyEnvSegment:()=>LD,stringifyRedirectArgument:()=>Vw,stringifyResolution:()=>_D,stringifyShell:()=>ly,stringifyShellLine:()=>ly,stringifySyml:()=>Ba,stringifyValueArgument:()=>qg});var Ll=yt(()=>{rW();oW();nV()});var sV=_((hbt,vT)=>{"use strict";var eje=t=>{let e=!1,r=!1,o=!1;for(let a=0;a{if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let r=a=>e.pascalCase?a.charAt(0).toUpperCase()+a.slice(1):a;return Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=eje(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(a,n)=>n.toUpperCase()).replace(/\d+(\w|$)/g,a=>a.toUpperCase()),r(t))};vT.exports=iV;vT.exports.default=iV});var oV=_((gbt,tje)=>{tje.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var $g=_(Xa=>{"use strict";var lV=oV(),ju=process.env;Object.defineProperty(Xa,"_vendors",{value:lV.map(function(t){return t.constant})});Xa.name=null;Xa.isPR=null;lV.forEach(function(t){let r=(Array.isArray(t.env)?t.env:[t.env]).every(function(o){return aV(o)});if(Xa[t.constant]=r,r)switch(Xa.name=t.name,typeof t.pr){case"string":Xa.isPR=!!ju[t.pr];break;case"object":"env"in t.pr?Xa.isPR=t.pr.env in ju&&ju[t.pr.env]!==t.pr.ne:"any"in t.pr?Xa.isPR=t.pr.any.some(function(o){return!!ju[o]}):Xa.isPR=aV(t.pr);break;default:Xa.isPR=null}});Xa.isCI=!!(ju.CI||ju.CONTINUOUS_INTEGRATION||ju.BUILD_NUMBER||ju.RUN_ID||Xa.name);function aV(t){return typeof t=="string"?!!ju[t]:Object.keys(t).every(function(e){return ju[e]===t[e]})}});var Hn,cn,ed,DT,$D,cV,PT,ST,eP=yt(()=>{(function(t){t.StartOfInput="\0",t.EndOfInput="",t.EndOfPartialInput=""})(Hn||(Hn={}));(function(t){t[t.InitialNode=0]="InitialNode",t[t.SuccessNode=1]="SuccessNode",t[t.ErrorNode=2]="ErrorNode",t[t.CustomNode=3]="CustomNode"})(cn||(cn={}));ed=-1,DT=/^(-h|--help)(?:=([0-9]+))?$/,$D=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,cV=/^-[a-zA-Z]{2,}$/,PT=/^([^=]+)=([\s\S]*)$/,ST=process.env.DEBUG_CLI==="1"});var it,my,tP,xT,rP=yt(()=>{eP();it=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},my=class extends Error{constructor(e,r){if(super(),this.input=e,this.candidates=r,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(o=>o.reason!==null&&o.reason===r[0].reason)){let[{reason:o}]=this.candidates;this.message=`${o} - -${this.candidates.map(({usage:a})=>`$ ${a}`).join(` -`)}`}else if(this.candidates.length===1){let[{usage:o}]=this.candidates;this.message=`Command not found; did you mean: - -$ ${o} -${xT(e)}`}else this.message=`Command not found; did you mean one of: - -${this.candidates.map(({usage:o},a)=>`${`${a}.`.padStart(4)} ${o}`).join(` -`)} - -${xT(e)}`}},tP=class extends Error{constructor(e,r){super(),this.input=e,this.usages=r,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: - -${this.usages.map((o,a)=>`${`${a}.`.padStart(4)} ${o}`).join(` -`)} - -${xT(e)}`}},xT=t=>`While running ${t.filter(e=>e!==Hn.EndOfInput&&e!==Hn.EndOfPartialInput).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`});function rje(t){let e=t.split(` -`),r=e.filter(a=>a.match(/\S/)),o=r.length>0?r.reduce((a,n)=>Math.min(a,n.length-n.trimStart().length),Number.MAX_VALUE):0;return e.map(a=>a.slice(o).trimRight()).join(` -`)}function Do(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` -`),t=rje(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 - -`),t=t.replace(/\n(\n)?\n*/g,(o,a)=>a||" "),r&&(t=t.split(/\n/).map(o=>{let a=o.match(/^\s*[*-][\t ]+(.*)/);if(!a)return o.match(/(.{1,80})(?: |$)/g).join(` -`);let n=o.length-o.trimStart().length;return a[1].match(new RegExp(`(.{1,${78-n}})(?: |$)`,"g")).map((u,A)=>" ".repeat(n)+(A===0?"- ":" ")+u).join(` -`)}).join(` - -`)),t=t.replace(/(`+)((?:.|[\n])*?)\1/g,(o,a,n)=>e.code(a+n+a)),t=t.replace(/(\*\*)((?:.|[\n])*?)\1/g,(o,a,n)=>e.bold(a+n+a)),t?`${t} -`:""}var bT,uV,AV,kT=yt(()=>{bT=Array(80).fill("\u2501");for(let t=0;t<=24;++t)bT[bT.length-t]=`\x1B[38;5;${232+t}m\u2501`;uV={header:t=>`\x1B[1m\u2501\u2501\u2501 ${t}${t.length<80-5?` ${bT.slice(t.length+5).join("")}`:":"}\x1B[0m`,bold:t=>`\x1B[1m${t}\x1B[22m`,error:t=>`\x1B[31m\x1B[1m${t}\x1B[22m\x1B[39m`,code:t=>`\x1B[36m${t}\x1B[39m`},AV={header:t=>t,bold:t=>t,error:t=>t,code:t=>t}});function Ko(t){return{...t,[rI]:!0}}function qu(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function nP(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(!r)return"validation failed";let[,o,a]=r;return e&&(a=a[0].toLowerCase()+a.slice(1)),a=o!=="."||!e?`${o.replace(/^\.(\[|$)/,"$1")}: ${a}`:`: ${a}`,a}function nI(t,e){return e.length===1?new it(`${t}${nP(e[0],{mergeName:!0})}`):new it(`${t}: -${e.map(r=>` -- ${nP(r)}`).join("")}`)}function td(t,e,r){if(typeof r>"u")return e;let o=[],a=[],n=A=>{let p=e;return e=A,n.bind(null,p)};if(!r(e,{errors:o,coercions:a,coercion:n}))throw nI(`Invalid value for ${t}`,o);for(let[,A]of a)A();return e}var rI,yf=yt(()=>{rP();rI=Symbol("clipanion/isOption")});var Vo={};Vt(Vo,{KeyRelationship:()=>Gu,TypeAssertionError:()=>Yp,applyCascade:()=>rd,as:()=>wje,assert:()=>yje,assertWithErrors:()=>Eje,cascade:()=>mV,fn:()=>Ije,hasAtLeastOneKey:()=>OT,hasExactLength:()=>dV,hasForbiddenKeys:()=>Hje,hasKeyRelationship:()=>aI,hasMaxLength:()=>vje,hasMinLength:()=>Bje,hasMutuallyExclusiveKeys:()=>jje,hasRequiredKeys:()=>_je,hasUniqueItems:()=>Dje,isArray:()=>iP,isAtLeast:()=>LT,isAtMost:()=>xje,isBase64:()=>Nje,isBoolean:()=>uje,isDate:()=>fje,isDict:()=>gje,isEnum:()=>Vs,isHexColor:()=>Lje,isISO8601:()=>Tje,isInExclusiveRange:()=>kje,isInInclusiveRange:()=>bje,isInstanceOf:()=>mje,isInteger:()=>NT,isJSON:()=>Oje,isLiteral:()=>pV,isLowerCase:()=>Qje,isMap:()=>hje,isNegative:()=>Pje,isNullable:()=>Uje,isNumber:()=>RT,isObject:()=>hV,isOneOf:()=>TT,isOptional:()=>Mje,isPartial:()=>dje,isPayload:()=>Aje,isPositive:()=>Sje,isRecord:()=>oP,isSet:()=>pje,isString:()=>Ey,isTuple:()=>sP,isUUID4:()=>Rje,isUnknown:()=>FT,isUpperCase:()=>Fje,makeTrait:()=>gV,makeValidator:()=>Hr,matchesRegExp:()=>sI,softAssert:()=>Cje});function jn(t){return t===null?"null":t===void 0?"undefined":t===""?"an empty string":typeof t=="symbol"?`<${t.toString()}>`:Array.isArray(t)?"an array":JSON.stringify(t)}function yy(t,e){if(t.length===0)return"nothing";if(t.length===1)return jn(t[0]);let r=t.slice(0,-1),o=t[t.length-1],a=t.length>2?`, ${e} `:` ${e} `;return`${r.map(n=>jn(n)).join(", ")}${a}${jn(o)}`}function Gp(t,e){var r,o,a;return typeof e=="number"?`${(r=t?.p)!==null&&r!==void 0?r:"."}[${e}]`:nje.test(e)?`${(o=t?.p)!==null&&o!==void 0?o:""}.${e}`:`${(a=t?.p)!==null&&a!==void 0?a:"."}[${JSON.stringify(e)}]`}function QT(t,e,r){return t===1?e:r}function pr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}function lje(t,e){return r=>{t[e]=r}}function Yu(t,e){return r=>{let o=t[e];return t[e]=r,Yu(t,e).bind(null,o)}}function iI(t,e,r){let o=()=>(t(r()),a),a=()=>(t(e),o);return o}function FT(){return Hr({test:(t,e)=>!0})}function pV(t){return Hr({test:(e,r)=>e!==t?pr(r,`Expected ${jn(t)} (got ${jn(e)})`):!0})}function Ey(){return Hr({test:(t,e)=>typeof t!="string"?pr(e,`Expected a string (got ${jn(t)})`):!0})}function Vs(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>typeof a=="string"||typeof a=="number"),o=new Set(e);return o.size===1?pV([...o][0]):Hr({test:(a,n)=>o.has(a)?!0:r?pr(n,`Expected one of ${yy(e,"or")} (got ${jn(a)})`):pr(n,`Expected a valid enumeration value (got ${jn(a)})`)})}function uje(){return Hr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o=cje.get(t);if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a boolean (got ${jn(t)})`)}return!0}})}function RT(){return Hr({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"){let a;try{a=JSON.parse(t)}catch{}if(typeof a=="number")if(JSON.stringify(a)===t)o=a;else return pr(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a number (got ${jn(t)})`)}return!0}})}function Aje(t){return Hr({test:(e,r)=>{var o;if(typeof r?.coercions>"u")return pr(r,"The isPayload predicate can only be used with coercion enabled");if(typeof r.coercion>"u")return pr(r,"Unbound coercion result");if(typeof e!="string")return pr(r,`Expected a string (got ${jn(e)})`);let a;try{a=JSON.parse(e)}catch{return pr(r,`Expected a JSON string (got ${jn(e)})`)}let n={value:a};return t(a,Object.assign(Object.assign({},r),{coercion:Yu(n,"value")}))?(r.coercions.push([(o=r.p)!==null&&o!==void 0?o:".",r.coercion.bind(null,n.value)]),!0):!1}})}function fje(){return Hr({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"&&fV.test(t))o=new Date(t);else{let a;if(typeof t=="string"){let n;try{n=JSON.parse(t)}catch{}typeof n=="number"&&(a=n)}else typeof t=="number"&&(a=t);if(typeof a<"u")if(Number.isSafeInteger(a)||!Number.isSafeInteger(a*1e3))o=new Date(a*1e3);else return pr(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a date (got ${jn(t)})`)}return!0}})}function iP(t,{delimiter:e}={}){return Hr({test:(r,o)=>{var a;let n=r;if(typeof r=="string"&&typeof e<"u"&&typeof o?.coercions<"u"){if(typeof o?.coercion>"u")return pr(o,"Unbound coercion result");r=r.split(e)}if(!Array.isArray(r))return pr(o,`Expected an array (got ${jn(r)})`);let u=!0;for(let A=0,p=r.length;A{var n,u;if(Object.getPrototypeOf(o).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A=[...o],p=[...o];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((C,I)=>C!==A[I])?new Set(p):o;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",iI(a.coercion,o,h)]),!0}else{let A=!0;for(let p of o)if(A=t(p,Object.assign({},a))&&A,!A&&a?.errors==null)break;return A}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A={value:o};return r(o,Object.assign(Object.assign({},a),{coercion:Yu(A,"value")}))?(a.coercions.push([(u=a.p)!==null&&u!==void 0?u:".",iI(a.coercion,o,()=>new Set(A.value))]),!0):!1}return pr(a,`Expected a set (got ${jn(o)})`)}})}function hje(t,e){let r=iP(sP([t,e])),o=oP(e,{keys:t});return Hr({test:(a,n)=>{var u,A,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h=[...a],C=[...a];if(!r(C,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let I=()=>C.some((v,b)=>v[0]!==h[b][0]||v[1]!==h[b][1])?new Map(C):a;return n.coercions.push([(u=n.p)!==null&&u!==void 0?u:".",iI(n.coercion,a,I)]),!0}else{let h=!0;for(let[C,I]of a)if(h=t(C,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(I,Object.assign(Object.assign({},n),{p:Gp(n,C)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h={value:a};return Array.isArray(a)?r(a,Object.assign(Object.assign({},n),{coercion:void 0}))?(n.coercions.push([(A=n.p)!==null&&A!==void 0?A:".",iI(n.coercion,a,()=>new Map(h.value))]),!0):!1:o(a,Object.assign(Object.assign({},n),{coercion:Yu(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",iI(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return pr(n,`Expected a map (got ${jn(a)})`)}})}function sP(t,{delimiter:e}={}){let r=dV(t.length);return Hr({test:(o,a)=>{var n;if(typeof o=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");o=o.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)])}if(!Array.isArray(o))return pr(a,`Expected a tuple (got ${jn(o)})`);let u=r(o,Object.assign({},a));for(let A=0,p=o.length;A{var n;if(Array.isArray(o)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?pr(a,"Unbound coercion result"):r(o,Object.assign(Object.assign({},a),{coercion:void 0}))?(o=Object.fromEntries(o),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)]),!0):!1;if(typeof o!="object"||o===null)return pr(a,`Expected an object (got ${jn(o)})`);let u=Object.keys(o),A=!0;for(let p=0,h=u.length;p{if(typeof a!="object"||a===null)return pr(n,`Expected an object (got ${jn(a)})`);let u=new Set([...r,...Object.keys(a)]),A={},p=!0;for(let h of u){if(h==="constructor"||h==="__proto__")p=pr(Object.assign(Object.assign({},n),{p:Gp(n,h)}),"Unsafe property name");else{let C=Object.prototype.hasOwnProperty.call(t,h)?t[h]:void 0,I=Object.prototype.hasOwnProperty.call(a,h)?a[h]:void 0;typeof C<"u"?p=C(I,Object.assign(Object.assign({},n),{p:Gp(n,h),coercion:Yu(a,h)}))&&p:e===null?p=pr(Object.assign(Object.assign({},n),{p:Gp(n,h)}),`Extraneous property (got ${jn(I)})`):Object.defineProperty(A,h,{enumerable:!0,get:()=>I,set:lje(a,h)})}if(!p&&n?.errors==null)break}return e!==null&&(p||n?.errors!=null)&&(p=e(A,n)&&p),p}});return Object.assign(o,{properties:t})}function dje(t){return hV(t,{extra:oP(FT())})}function gV(t){return()=>t}function Hr({test:t}){return gV(t)()}function yje(t,e){if(!e(t))throw new Yp}function Eje(t,e){let r=[];if(!e(t,{errors:r}))throw new Yp({errors:r})}function Cje(t,e){}function wje(t,e,{coerce:r=!1,errors:o,throw:a}={}){let n=o?[]:void 0;if(!r){if(e(t,{errors:n}))return a?t:{value:t,errors:void 0};if(a)throw new Yp({errors:n});return{value:void 0,errors:n??!0}}let u={value:t},A=Yu(u,"value"),p=[];if(!e(t,{errors:n,coercion:A,coercions:p})){if(a)throw new Yp({errors:n});return{value:void 0,errors:n??!0}}for(let[,h]of p)h();return a?u.value:{value:u.value,errors:void 0}}function Ije(t,e){let r=sP(t);return(...o)=>{if(!r(o))throw new Yp;return e(...o)}}function Bje(t){return Hr({test:(e,r)=>e.length>=t?!0:pr(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)})}function vje(t){return Hr({test:(e,r)=>e.length<=t?!0:pr(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)})}function dV(t){return Hr({test:(e,r)=>e.length!==t?pr(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0})}function Dje({map:t}={}){return Hr({test:(e,r)=>{let o=new Set,a=new Set;for(let n=0,u=e.length;nt<=0?!0:pr(e,`Expected to be negative (got ${t})`)})}function Sje(){return Hr({test:(t,e)=>t>=0?!0:pr(e,`Expected to be positive (got ${t})`)})}function LT(t){return Hr({test:(e,r)=>e>=t?!0:pr(r,`Expected to be at least ${t} (got ${e})`)})}function xje(t){return Hr({test:(e,r)=>e<=t?!0:pr(r,`Expected to be at most ${t} (got ${e})`)})}function bje(t,e){return Hr({test:(r,o)=>r>=t&&r<=e?!0:pr(o,`Expected to be in the [${t}; ${e}] range (got ${r})`)})}function kje(t,e){return Hr({test:(r,o)=>r>=t&&re!==Math.round(e)?pr(r,`Expected to be an integer (got ${e})`):!t&&!Number.isSafeInteger(e)?pr(r,`Expected to be a safe integer (got ${e})`):!0})}function sI(t){return Hr({test:(e,r)=>t.test(e)?!0:pr(r,`Expected to match the pattern ${t.toString()} (got ${jn(e)})`)})}function Qje(){return Hr({test:(t,e)=>t!==t.toLowerCase()?pr(e,`Expected to be all-lowercase (got ${t})`):!0})}function Fje(){return Hr({test:(t,e)=>t!==t.toUpperCase()?pr(e,`Expected to be all-uppercase (got ${t})`):!0})}function Rje(){return Hr({test:(t,e)=>aje.test(t)?!0:pr(e,`Expected to be a valid UUID v4 (got ${jn(t)})`)})}function Tje(){return Hr({test:(t,e)=>fV.test(t)?!0:pr(e,`Expected to be a valid ISO 8601 date string (got ${jn(t)})`)})}function Lje({alpha:t=!1}){return Hr({test:(e,r)=>(t?ije.test(e):sje.test(e))?!0:pr(r,`Expected to be a valid hexadecimal color string (got ${jn(e)})`)})}function Nje(){return Hr({test:(t,e)=>oje.test(t)?!0:pr(e,`Expected to be a valid base 64 string (got ${jn(t)})`)})}function Oje(t=FT()){return Hr({test:(e,r)=>{let o;try{o=JSON.parse(e)}catch{return pr(r,`Expected to be a valid JSON string (got ${jn(e)})`)}return t(o,r)}})}function mV(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Hr({test:(o,a)=>{var n,u;let A={value:o},p=typeof a?.coercions<"u"?Yu(A,"value"):void 0,h=typeof a?.coercions<"u"?[]:void 0;if(!t(o,Object.assign(Object.assign({},a),{coercion:p,coercions:h})))return!1;let C=[];if(typeof h<"u")for(let[,I]of h)C.push(I());try{if(typeof a?.coercions<"u"){if(A.value!==o){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,A.value)])}(u=a?.coercions)===null||u===void 0||u.push(...h)}return r.every(I=>I(A.value,a))}finally{for(let I of C)I()}}})}function rd(t,...e){let r=Array.isArray(e[0])?e[0]:e;return mV(t,r)}function Mje(t){return Hr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}function Uje(t){return Hr({test:(e,r)=>e===null?!0:t(e,r)})}function _je(t,e){var r;let o=new Set(t),a=oI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)||p.push(h);return p.length>0?pr(u,`Missing required ${QT(p.length,"property","properties")} ${yy(p,"and")}`):!0}})}function OT(t,e){var r;let o=new Set(t),a=oI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>Object.keys(n).some(h=>a(o,h,n))?!0:pr(u,`Missing at least one property from ${yy(Array.from(o),"or")}`)})}function Hje(t,e){var r;let o=new Set(t),a=oI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>0?pr(u,`Forbidden ${QT(p.length,"property","properties")} ${yy(p,"and")}`):!0}})}function jje(t,e){var r;let o=new Set(t),a=oI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>1?pr(u,`Mutually exclusive properties ${yy(p,"and")}`):!0}})}function aI(t,e,r,o){var a,n;let u=new Set((a=o?.ignore)!==null&&a!==void 0?a:[]),A=oI[(n=o?.missingIf)!==null&&n!==void 0?n:"missing"],p=new Set(r),h=qje[e],C=e===Gu.Forbids?"or":"and";return Hr({test:(I,v)=>{let b=new Set(Object.keys(I));if(!A(b,t,I)||u.has(I[t]))return!0;let E=[];for(let F of p)(A(b,F,I)&&!u.has(I[F]))!==h.expect&&E.push(F);return E.length>=1?pr(v,`Property "${t}" ${h.message} ${QT(E.length,"property","properties")} ${yy(E,C)}`):!0}})}var nje,ije,sje,oje,aje,fV,cje,mje,TT,Yp,oI,Gu,qje,Za=yt(()=>{nje=/^[a-zA-Z_][a-zA-Z0-9_]*$/;ije=/^#[0-9a-f]{6}$/i,sje=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,oje=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,aje=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,fV=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/;cje=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]);mje=t=>Hr({test:(e,r)=>e instanceof t?!0:pr(r,`Expected an instance of ${t.name} (got ${jn(e)})`)}),TT=(t,{exclusive:e=!1}={})=>Hr({test:(r,o)=>{var a,n,u;let A=[],p=typeof o?.errors<"u"?[]:void 0;for(let h=0,C=t.length;h1?pr(o,`Expected to match exactly a single predicate (matched ${A.join(", ")})`):(u=o?.errors)===null||u===void 0||u.push(...p),!1}});Yp=class extends Error{constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=` -`;for(let o of e)r+=` -- ${o}`}super(r)}};oI={missing:(t,e)=>t.has(e),undefined:(t,e,r)=>t.has(e)&&typeof r[e]<"u",nil:(t,e,r)=>t.has(e)&&r[e]!=null,falsy:(t,e,r)=>t.has(e)&&!!r[e]};(function(t){t.Forbids="Forbids",t.Requires="Requires"})(Gu||(Gu={}));qje={[Gu.Forbids]:{expect:!1,message:"forbids using"},[Gu.Requires]:{expect:!0,message:"requires using"}}});var nt,Wp=yt(()=>{yf();nt=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(Array.isArray(r)){let{isDict:a,isUnknown:n,applyCascade:u}=await Promise.resolve().then(()=>(Za(),Vo)),A=u(a(n()),r),p=[],h=[];if(!A(this,{errors:p,coercions:h}))throw nI("Invalid option schema",p);for(let[,I]of h)I()}else if(r!=null)throw new Error("Invalid command schema");let o=await this.execute();return typeof o<"u"?o:0}};nt.isOption=rI;nt.Default=[]});function va(t){ST&&console.log(t)}function EV(){let t={nodes:[]};for(let e=0;e{if(e.has(o))return;e.add(o);let a=t.nodes[o];for(let u of Object.values(a.statics))for(let{to:A}of u)r(A);for(let[,{to:u}]of a.dynamics)r(u);for(let{to:u}of a.shortcuts)r(u);let n=new Set(a.shortcuts.map(({to:u})=>u));for(;a.shortcuts.length>0;){let{to:u}=a.shortcuts.shift(),A=t.nodes[u];for(let[p,h]of Object.entries(A.statics)){let C=Object.prototype.hasOwnProperty.call(a.statics,p)?a.statics[p]:a.statics[p]=[];for(let I of h)C.some(({to:v})=>I.to===v)||C.push(I)}for(let[p,h]of A.dynamics)a.dynamics.some(([C,{to:I}])=>p===C&&h.to===I)||a.dynamics.push([p,h]);for(let p of A.shortcuts)n.has(p.to)||(a.shortcuts.push(p),n.add(p.to))}};r(cn.InitialNode)}function Wje(t,{prefix:e=""}={}){if(ST){va(`${e}Nodes are:`);for(let r=0;rC!==cn.ErrorNode).map(({state:C})=>({usage:C.candidateUsage,reason:null})));if(h.every(({node:C})=>C===cn.ErrorNode))throw new my(e,h.map(({state:C})=>({usage:C.candidateUsage,reason:C.errorMessage})));o=zje(h)}if(o.length>0){va(" Results:");for(let n of o)va(` - ${n.node} -> ${JSON.stringify(n.state)}`)}else va(" No results");return o}function Vje(t,e,{endToken:r=Hn.EndOfInput}={}){let o=Kje(t,[...e,r]);return Jje(e,o.map(({state:a})=>a))}function zje(t){let e=0;for(let{state:r}of t)r.path.length>e&&(e=r.path.length);return t.filter(({state:r})=>r.path.length===e)}function Jje(t,e){let r=e.filter(v=>v.selectedIndex!==null),o=r.filter(v=>!v.partial);if(o.length>0&&(r=o),r.length===0)throw new Error;let a=r.filter(v=>v.selectedIndex===ed||v.requiredOptions.every(b=>b.some(E=>v.options.find(F=>F.name===E))));if(a.length===0)throw new my(t,r.map(v=>({usage:v.candidateUsage,reason:null})));let n=0;for(let v of a)v.path.length>n&&(n=v.path.length);let u=a.filter(v=>v.path.length===n),A=v=>v.positionals.filter(({extra:b})=>!b).length+v.options.length,p=u.map(v=>({state:v,positionalCount:A(v)})),h=0;for(let{positionalCount:v}of p)v>h&&(h=v);let C=p.filter(({positionalCount:v})=>v===h).map(({state:v})=>v),I=Xje(C);if(I.length>1)throw new tP(t,I.map(v=>v.candidateUsage));return I[0]}function Xje(t){let e=[],r=[];for(let o of t)o.selectedIndex===ed?r.push(o):e.push(o);return r.length>0&&e.push({...yV,path:CV(...r.map(o=>o.path)),options:r.reduce((o,a)=>o.concat(a.options),[])}),e}function CV(t,e,...r){return e===void 0?Array.from(t):CV(t.filter((o,a)=>o===e[a]),...r)}function $a(){return{dynamics:[],shortcuts:[],statics:{}}}function wV(t){return t===cn.SuccessNode||t===cn.ErrorNode}function MT(t,e=0){return{to:wV(t.to)?t.to:t.to>=cn.CustomNode?t.to+e-cn.CustomNode+1:t.to+e,reducer:t.reducer}}function Zje(t,e=0){let r=$a();for(let[o,a]of t.dynamics)r.dynamics.push([o,MT(a,e)]);for(let o of t.shortcuts)r.shortcuts.push(MT(o,e));for(let[o,a]of Object.entries(t.statics))r.statics[o]=a.map(n=>MT(n,e));return r}function Ss(t,e,r,o,a){t.nodes[e].dynamics.push([r,{to:o,reducer:a}])}function Cy(t,e,r,o){t.nodes[e].shortcuts.push({to:r,reducer:o})}function zo(t,e,r,o,a){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:o,reducer:a})}function aP(t,e,r,o,a){if(Array.isArray(e)){let[n,...u]=e;return t[n](r,o,a,...u)}else return t[e](r,o,a)}var yV,$je,UT,el,_T,wy,lP=yt(()=>{eP();rP();yV={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:ed,partial:!1,tokens:[]};$je={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,o)=>!t.ignoreOptions&&e===o,isBatchOption:(t,e,r,o)=>!t.ignoreOptions&&cV.test(e)&&[...e.slice(1)].every(a=>o.has(`-${a}`)),isBoundOption:(t,e,r,o,a)=>{let n=e.match(PT);return!t.ignoreOptions&&!!n&&$D.test(n[1])&&o.has(n[1])&&a.filter(u=>u.nameSet.includes(n[1])).every(u=>u.allowBinding)},isNegatedOption:(t,e,r,o)=>!t.ignoreOptions&&e===`--no-${o.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&DT.test(e),isUnsupportedOption:(t,e,r,o)=>!t.ignoreOptions&&e.startsWith("-")&&$D.test(e)&&!o.has(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!$D.test(e)},UT={setCandidateState:(t,e,r,o)=>({...t,...o}),setSelectedIndex:(t,e,r,o)=>({...t,selectedIndex:o}),setPartialIndex:(t,e,r,o)=>({...t,selectedIndex:o,partial:!0}),pushBatch:(t,e,r,o)=>{let a=t.options.slice(),n=t.tokens.slice();for(let u=1;u{let[,o,a]=e.match(PT),n=t.options.concat({name:o,value:a}),u=t.tokens.concat([{segmentIndex:r,type:"option",slice:[0,o.length],option:o},{segmentIndex:r,type:"assign",slice:[o.length,o.length+1]},{segmentIndex:r,type:"value",slice:[o.length+1,o.length+a.length+1]}]);return{...t,options:n,tokens:u}},pushPath:(t,e,r)=>{let o=t.path.concat(e),a=t.tokens.concat({segmentIndex:r,type:"path"});return{...t,path:o,tokens:a}},pushPositional:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!1}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtra:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!0}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtraNoLimits:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:el}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushTrue:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushFalse:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!1}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushUndefined:(t,e,r,o)=>{let a=t.options.concat({name:e,value:void 0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:e});return{...t,options:a,tokens:n}},pushStringValue:(t,e,r)=>{var o;let a=t.options[t.options.length-1],n=t.options.slice(),u=t.tokens.concat({segmentIndex:r,type:"value"});return a.value=((o=a.value)!==null&&o!==void 0?o:[]).concat([e]),{...t,options:n,tokens:u}},setStringValue:(t,e,r)=>{let o=t.options[t.options.length-1],a=t.options.slice(),n=t.tokens.concat({segmentIndex:r,type:"value"});return o.value=e,{...t,options:a,tokens:n}},inhibateOptions:t=>({...t,ignoreOptions:!0}),useHelp:(t,e,r,o)=>{let[,,a]=e.match(DT);return typeof a<"u"?{...t,options:[{name:"-c",value:String(o)},{name:"-i",value:a}]}:{...t,options:[{name:"-c",value:String(o)}]}},setError:(t,e,r,o)=>e===Hn.EndOfInput||e===Hn.EndOfPartialInput?{...t,errorMessage:`${o}.`}:{...t,errorMessage:`${o} ("${e}").`},setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return{...t,errorMessage:`Not enough arguments to option ${r.name}.`}}},el=Symbol(),_T=class{constructor(e,r){this.allOptionNames=new Map,this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=r}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,extra:o=this.arity.extra,proxy:a=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:o,proxy:a})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===el)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!r&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!r&&this.arity.extra!==el?this.arity.extra.push(e):this.arity.extra!==el&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:r=0}={}){if(this.arity.extra===el)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let o=0;o1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(o))throw new Error(`The arity must be an integer, got ${o}`);if(o<0)throw new Error(`The arity must be positive, got ${o}`);let A=e.reduce((p,h)=>h.length>p.length?h:p,"");for(let p of e)this.allOptionNames.set(p,A);this.options.push({preferredName:A,nameSet:e,description:r,arity:o,hidden:a,required:n,allowBinding:u})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let o=[this.cliOpts.binaryName],a=[];if(this.paths.length>0&&o.push(...this.paths[0]),e){for(let{preferredName:u,nameSet:A,arity:p,hidden:h,description:C,required:I}of this.options){if(h)continue;let v=[];for(let E=0;E`:`[${b}]`)}o.push(...this.arity.leading.map(u=>`<${u}>`)),this.arity.extra===el?o.push("..."):o.push(...this.arity.extra.map(u=>`[${u}]`)),o.push(...this.arity.trailing.map(u=>`<${u}>`))}return{usage:o.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=EV(),r=cn.InitialNode,o=this.usage().usage,a=this.options.filter(A=>A.required).map(A=>A.nameSet);r=Oc(e,$a()),zo(e,cn.InitialNode,Hn.StartOfInput,r,["setCandidateState",{candidateUsage:o,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",u=this.paths.length>0?this.paths:[[]];for(let A of u){let p=r;if(A.length>0){let v=Oc(e,$a());Cy(e,p,v),this.registerOptions(e,v),p=v}for(let v=0;v0||!this.arity.proxy){let v=Oc(e,$a());Ss(e,p,"isHelp",v,["useHelp",this.cliIndex]),Ss(e,v,"always",v,"pushExtra"),zo(e,v,Hn.EndOfInput,cn.SuccessNode,["setSelectedIndex",ed]),this.registerOptions(e,p)}this.arity.leading.length>0&&(zo(e,p,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),zo(e,p,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let h=p;for(let v=0;v0||v+1!==this.arity.leading.length)&&(zo(e,b,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),zo(e,b,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex])),Ss(e,h,"isNotOptionLike",b,"pushPositional"),h=b}let C=h;if(this.arity.extra===el||this.arity.extra.length>0){let v=Oc(e,$a());if(Cy(e,h,v),this.arity.extra===el){let b=Oc(e,$a());this.arity.proxy||this.registerOptions(e,b),Ss(e,h,n,b,"pushExtraNoLimits"),Ss(e,b,n,b,"pushExtraNoLimits"),Cy(e,b,v)}else for(let b=0;b0)&&this.registerOptions(e,E),Ss(e,C,n,E,"pushExtra"),Cy(e,E,v),C=E}C=v}this.arity.trailing.length>0&&(zo(e,C,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),zo(e,C,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let I=C;for(let v=0;v=0&&e{let u=n?Hn.EndOfPartialInput:Hn.EndOfInput;return Vje(o,a,{endToken:u})}}}}});function BV(){return cP.default&&"getColorDepth"in cP.default.WriteStream.prototype?cP.default.WriteStream.prototype.getColorDepth():process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}function vV(t){let e=IV;if(typeof e>"u"){if(t.stdout===process.stdout&&t.stderr===process.stderr)return null;let{AsyncLocalStorage:r}=Be("async_hooks");e=IV=new r;let o=process.stdout._write;process.stdout._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?o.call(this,n,u,A):p.stdout.write(n,u,A)};let a=process.stderr._write;process.stderr._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?a.call(this,n,u,A):p.stderr.write(n,u,A)}}return r=>e.run(t,r)}var cP,IV,DV=yt(()=>{cP=$e(Be("tty"),1)});var Iy,PV=yt(()=>{Wp();Iy=class extends nt{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,r){let o=new Iy(r);o.path=e.path;for(let a of e.options)switch(a.name){case"-c":o.commands.push(Number(a.value));break;case"-i":o.index=Number(a.value);break}return o}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: -`),this.context.stdout.write(` -`);let r=0;for(let o of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[o].commandClass,{prefix:`${r++}. `.padStart(5)}));this.context.stdout.write(` -`),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. -`)}}}});async function bV(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=QV(t);return as.from(r,e).runExit(o,a)}async function kV(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=QV(t);return as.from(r,e).run(o,a)}function QV(t){let e,r,o,a;switch(typeof process<"u"&&typeof process.argv<"u"&&(o=process.argv.slice(2)),t.length){case 1:r=t[0];break;case 2:t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],Array.isArray(t[1])?o=t[1]:a=t[1]):(e=t[0],r=t[1]);break;case 3:Array.isArray(t[2])?(e=t[0],r=t[1],o=t[2]):t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],o=t[1],a=t[2]):(e=t[0],r=t[1],a=t[2]);break;default:e=t[0],r=t[1],o=t[2],a=t[3];break}if(typeof o>"u")throw new Error("The argv parameter must be provided when running Clipanion outside of a Node context");return{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}}function xV(t){return t()}var SV,as,FV=yt(()=>{eP();lP();kT();DV();Wp();PV();SV=Symbol("clipanion/errorCommand");as=class{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:o,enableCapture:a=!1,enableColors:n}={}){this.registrations=new Map,this.builder=new wy({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=o,this.enableCapture=a,this.enableColors=n}static from(e,r={}){let o=new as(r),a=Array.isArray(e)?e:[e];for(let n of a)o.register(n);return o}register(e){var r;let o=new Map,a=new e;for(let p in a){let h=a[p];typeof h=="object"&&h!==null&&h[nt.isOption]&&o.set(p,h)}let n=this.builder.command(),u=n.cliIndex,A=(r=e.paths)!==null&&r!==void 0?r:a.paths;if(typeof A<"u")for(let p of A)n.addPath(p);this.registrations.set(e,{specs:o,builder:n,index:u});for(let[p,{definition:h}]of o.entries())h(n,p);n.setContext({commandClass:e})}process(e,r){let{input:o,context:a,partial:n}=typeof e=="object"&&Array.isArray(e)?{input:e,context:r}:e,{contexts:u,process:A}=this.builder.compile(),p=A(o,{partial:n}),h={...as.defaultContext,...a};switch(p.selectedIndex){case ed:{let C=Iy.from(p,u);return C.context=h,C.tokens=p.tokens,C}default:{let{commandClass:C}=u[p.selectedIndex],I=this.registrations.get(C);if(typeof I>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let v=new C;v.context=h,v.tokens=p.tokens,v.path=p.path;try{for(let[b,{transformer:E}]of I.specs.entries())v[b]=E(I.builder,b,p,h);return v}catch(b){throw b[SV]=v,b}}break}}async run(e,r){var o,a;let n,u={...as.defaultContext,...r},A=(o=this.enableColors)!==null&&o!==void 0?o:u.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e,u)}catch(C){return u.stdout.write(this.error(C,{colored:A})),1}if(n.help)return u.stdout.write(this.usage(n,{colored:A,detailed:!0})),0;n.context=u,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),definition:C=>this.definition(C),error:(C,I)=>this.error(C,I),format:C=>this.format(C),process:(C,I)=>this.process(C,{...u,...I}),run:(C,I)=>this.run(C,{...u,...I}),usage:(C,I)=>this.usage(C,I)};let p=this.enableCapture&&(a=vV(u))!==null&&a!==void 0?a:xV,h;try{h=await p(()=>n.validateAndExecute().catch(C=>n.catch(C).then(()=>0)))}catch(C){return u.stdout.write(this.error(C,{colored:A,command:n})),1}return h}async runExit(e,r){process.exitCode=await this.run(e,r)}definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:o}=this.getUsageByRegistration(e,{detailed:!1}),{usage:a,options:n}=this.getUsageByRegistration(e,{detailed:!0,inlineOptions:!1}),u=typeof e.usage.category<"u"?Do(e.usage.category,{format:this.format(r),paragraphs:!1}):void 0,A=typeof e.usage.description<"u"?Do(e.usage.description,{format:this.format(r),paragraphs:!1}):void 0,p=typeof e.usage.details<"u"?Do(e.usage.details,{format:this.format(r),paragraphs:!0}):void 0,h=typeof e.usage.examples<"u"?e.usage.examples.map(([C,I])=>[Do(C,{format:this.format(r),paragraphs:!1}),I.replace(/\$0/g,this.binaryName)]):void 0;return{path:o,usage:a,category:u,description:A,details:p,examples:h,options:n}}definitions({colored:e=!1}={}){let r=[];for(let o of this.registrations.keys()){let a=this.definition(o,{colored:e});!a||r.push(a)}return r}usage(e=null,{colored:r,detailed:o=!1,prefix:a="$ "}={}){var n;if(e===null){for(let p of this.registrations.keys()){let h=p.paths,C=typeof p.usage<"u";if(!h||h.length===0||h.length===1&&h[0].length===0||((n=h?.some(b=>b.length===0))!==null&&n!==void 0?n:!1))if(e){e=null;break}else e=p;else if(C){e=null;continue}}e&&(o=!0)}let u=e!==null&&e instanceof nt?e.constructor:e,A="";if(u)if(o){let{description:p="",details:h="",examples:C=[]}=u.usage||{};p!==""&&(A+=Do(p,{format:this.format(r),paragraphs:!1}).replace(/^./,b=>b.toUpperCase()),A+=` -`),(h!==""||C.length>0)&&(A+=`${this.format(r).header("Usage")} -`,A+=` -`);let{usage:I,options:v}=this.getUsageByRegistration(u,{inlineOptions:!1});if(A+=`${this.format(r).bold(a)}${I} -`,v.length>0){A+=` -`,A+=`${this.format(r).header("Options")} -`;let b=v.reduce((E,F)=>Math.max(E,F.definition.length),0);A+=` -`;for(let{definition:E,description:F}of v)A+=` ${this.format(r).bold(E.padEnd(b))} ${Do(F,{format:this.format(r),paragraphs:!1})}`}if(h!==""&&(A+=` -`,A+=`${this.format(r).header("Details")} -`,A+=` -`,A+=Do(h,{format:this.format(r),paragraphs:!0})),C.length>0){A+=` -`,A+=`${this.format(r).header("Examples")} -`;for(let[b,E]of C)A+=` -`,A+=Do(b,{format:this.format(r),paragraphs:!1}),A+=`${E.replace(/^/m,` ${this.format(r).bold(a)}`).replace(/\$0/g,this.binaryName)} -`}}else{let{usage:p}=this.getUsageByRegistration(u);A+=`${this.format(r).bold(a)}${p} -`}else{let p=new Map;for(let[v,{index:b}]of this.registrations.entries()){if(typeof v.usage>"u")continue;let E=typeof v.usage.category<"u"?Do(v.usage.category,{format:this.format(r),paragraphs:!1}):null,F=p.get(E);typeof F>"u"&&p.set(E,F=[]);let{usage:N}=this.getUsageByIndex(b);F.push({commandClass:v,usage:N})}let h=Array.from(p.keys()).sort((v,b)=>v===null?-1:b===null?1:v.localeCompare(b,"en",{usage:"sort",caseFirst:"upper"})),C=typeof this.binaryLabel<"u",I=typeof this.binaryVersion<"u";C||I?(C&&I?A+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} - -`:C?A+=`${this.format(r).header(`${this.binaryLabel}`)} -`:A+=`${this.format(r).header(`${this.binaryVersion}`)} -`,A+=` ${this.format(r).bold(a)}${this.binaryName} -`):A+=`${this.format(r).bold(a)}${this.binaryName} -`;for(let v of h){let b=p.get(v).slice().sort((F,N)=>F.usage.localeCompare(N.usage,"en",{usage:"sort",caseFirst:"upper"})),E=v!==null?v.trim():"General commands";A+=` -`,A+=`${this.format(r).header(`${E}`)} -`;for(let{commandClass:F,usage:N}of b){let U=F.usage.description||"undocumented";A+=` -`,A+=` ${this.format(r).bold(N)} -`,A+=` ${Do(U,{format:this.format(r),paragraphs:!1})}`}}A+=` -`,A+=Do("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(r),paragraphs:!0})}return A}error(e,r){var o,{colored:a,command:n=(o=e[SV])!==null&&o!==void 0?o:null}=r===void 0?{}:r;(!e||typeof e!="object"||!("stack"in e))&&(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let u="",A=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");A==="Error"&&(A="Internal Error"),u+=`${this.format(a).error(A)}: ${e.message} -`;let p=e.clipanion;return typeof p<"u"?p.type==="usage"&&(u+=` -`,u+=this.usage(n)):e.stack&&(u+=`${e.stack.replace(/^.*\n/,"")} -`),u}format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:as.defaultContext.colorDepth>1)?uV:AV}getUsageByRegistration(e,r){let o=this.registrations.get(e);if(typeof o>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(o.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}};as.defaultContext={env:process.env,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:BV()}});var lI,RV=yt(()=>{Wp();lI=class extends nt{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} -`)}};lI.paths=[["--clipanion=definitions"]]});var cI,TV=yt(()=>{Wp();cI=class extends nt{async execute(){this.context.stdout.write(this.cli.usage())}};cI.paths=[["-h"],["--help"]]});function uP(t={}){return Ko({definition(e,r){var o;e.addProxy({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){return o.positionals.map(({value:a})=>a)}})}var HT=yt(()=>{yf()});var uI,LV=yt(()=>{Wp();HT();uI=class extends nt{constructor(){super(...arguments),this.args=uP()}async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.process(this.args).tokens,null,2)} -`)}};uI.paths=[["--clipanion=tokens"]]});var AI,NV=yt(()=>{Wp();AI=class extends nt{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} -`)}};AI.paths=[["-v"],["--version"]]});var jT={};Vt(jT,{DefinitionsCommand:()=>lI,HelpCommand:()=>cI,TokensCommand:()=>uI,VersionCommand:()=>AI});var OV=yt(()=>{RV();TV();LV();NV()});function MV(t,e,r){let[o,a]=qu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Ko({definition(p){p.addOption({names:u,arity:n,hidden:a?.hidden,description:a?.description,required:a.required})},transformer(p,h,C){let I,v=typeof o<"u"?[...o]:void 0;for(let{name:b,value:E}of C.options)!A.has(b)||(I=b,v=v??[],v.push(E));return typeof v<"u"?td(I??h,v,a.validator):v}})}var UV=yt(()=>{yf()});function _V(t,e,r){let[o,a]=qu(e,r??{}),n=t.split(","),u=new Set(n);return Ko({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let C=o;for(let{name:I,value:v}of h.options)!u.has(I)||(C=v);return C}})}var HV=yt(()=>{yf()});function jV(t,e,r){let[o,a]=qu(e,r??{}),n=t.split(","),u=new Set(n);return Ko({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let C=o;for(let{name:I,value:v}of h.options)!u.has(I)||(C??(C=0),v?C+=1:C=0);return C}})}var qV=yt(()=>{yf()});function GV(t={}){return Ko({definition(e,r){var o;e.addRest({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){let a=u=>{let A=o.positionals[u];return A.extra===el||A.extra===!1&&uu)}})}var YV=yt(()=>{lP();yf()});function eqe(t,e,r){let[o,a]=qu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Ko({definition(p){p.addOption({names:u,arity:a.tolerateBoolean?0:n,hidden:a.hidden,description:a.description,required:a.required})},transformer(p,h,C,I){let v,b=o;typeof a.env<"u"&&I.env[a.env]&&(v=a.env,b=I.env[a.env]);for(let{name:E,value:F}of C.options)!A.has(E)||(v=E,b=F);return typeof b=="string"?td(v??h,b,a.validator):b}})}function tqe(t={}){let{required:e=!0}=t;return Ko({definition(r,o){var a;r.addPositional({name:(a=t.name)!==null&&a!==void 0?a:o,required:t.required})},transformer(r,o,a){var n;for(let u=0;u{lP();yf()});var ge={};Vt(ge,{Array:()=>MV,Boolean:()=>_V,Counter:()=>jV,Proxy:()=>uP,Rest:()=>GV,String:()=>WV,applyValidator:()=>td,cleanValidationError:()=>nP,formatError:()=>nI,isOptionSymbol:()=>rI,makeCommandOption:()=>Ko,rerouteArguments:()=>qu});var VV=yt(()=>{yf();HT();UV();HV();qV();YV();KV()});var fI={};Vt(fI,{Builtins:()=>jT,Cli:()=>as,Command:()=>nt,Option:()=>ge,UsageError:()=>it,formatMarkdownish:()=>Do,run:()=>kV,runExit:()=>bV});var qt=yt(()=>{rP();kT();Wp();FV();OV();VV()});var zV=_((Ikt,rqe)=>{rqe.exports={name:"dotenv",version:"16.3.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard","lint-readme":"standard-markdown",pretest:"npm run lint && npm run dts-check",test:"tap tests/*.js --100 -Rspec",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},funding:"https://github.com/motdotla/dotenv?sponsor=1",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@definitelytyped/dtslint":"^0.0.133","@types/node":"^18.11.3",decache:"^4.6.1",sinon:"^14.0.1",standard:"^17.0.0","standard-markdown":"^7.1.0","standard-version":"^9.5.0",tap:"^16.3.0",tar:"^6.1.11",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var $V=_((Bkt,Ef)=>{var JV=Be("fs"),GT=Be("path"),nqe=Be("os"),iqe=Be("crypto"),sqe=zV(),YT=sqe.version,oqe=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function aqe(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,` -`);let o;for(;(o=oqe.exec(r))!=null;){let a=o[1],n=o[2]||"";n=n.trim();let u=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),u==='"'&&(n=n.replace(/\\n/g,` -`),n=n.replace(/\\r/g,"\r")),e[a]=n}return e}function lqe(t){let e=ZV(t),r=xs.configDotenv({path:e});if(!r.parsed)throw new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);let o=XV(t).split(","),a=o.length,n;for(let u=0;u=a)throw A}return xs.parse(n)}function cqe(t){console.log(`[dotenv@${YT}][INFO] ${t}`)}function uqe(t){console.log(`[dotenv@${YT}][WARN] ${t}`)}function qT(t){console.log(`[dotenv@${YT}][DEBUG] ${t}`)}function XV(t){return t&&t.DOTENV_KEY&&t.DOTENV_KEY.length>0?t.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function Aqe(t,e){let r;try{r=new URL(e)}catch(A){throw A.code==="ERR_INVALID_URL"?new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development"):A}let o=r.password;if(!o)throw new Error("INVALID_DOTENV_KEY: Missing key part");let a=r.searchParams.get("environment");if(!a)throw new Error("INVALID_DOTENV_KEY: Missing environment part");let n=`DOTENV_VAULT_${a.toUpperCase()}`,u=t.parsed[n];if(!u)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);return{ciphertext:u,key:o}}function ZV(t){let e=GT.resolve(process.cwd(),".env");return t&&t.path&&t.path.length>0&&(e=t.path),e.endsWith(".vault")?e:`${e}.vault`}function fqe(t){return t[0]==="~"?GT.join(nqe.homedir(),t.slice(1)):t}function pqe(t){cqe("Loading env from encrypted .env.vault");let e=xs._parseVault(t),r=process.env;return t&&t.processEnv!=null&&(r=t.processEnv),xs.populate(r,e,t),{parsed:e}}function hqe(t){let e=GT.resolve(process.cwd(),".env"),r="utf8",o=Boolean(t&&t.debug);t&&(t.path!=null&&(e=fqe(t.path)),t.encoding!=null&&(r=t.encoding));try{let a=xs.parse(JV.readFileSync(e,{encoding:r})),n=process.env;return t&&t.processEnv!=null&&(n=t.processEnv),xs.populate(n,a,t),{parsed:a}}catch(a){return o&&qT(`Failed to load ${e} ${a.message}`),{error:a}}}function gqe(t){let e=ZV(t);return XV(t).length===0?xs.configDotenv(t):JV.existsSync(e)?xs._configVault(t):(uqe(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),xs.configDotenv(t))}function dqe(t,e){let r=Buffer.from(e.slice(-64),"hex"),o=Buffer.from(t,"base64"),a=o.slice(0,12),n=o.slice(-16);o=o.slice(12,-16);try{let u=iqe.createDecipheriv("aes-256-gcm",r,a);return u.setAuthTag(n),`${u.update(o)}${u.final()}`}catch(u){let A=u instanceof RangeError,p=u.message==="Invalid key length",h=u.message==="Unsupported state or unable to authenticate data";if(A||p){let C="INVALID_DOTENV_KEY: It must be 64 characters long (or more)";throw new Error(C)}else if(h){let C="DECRYPTION_FAILED: Please check your DOTENV_KEY";throw new Error(C)}else throw console.error("Error: ",u.code),console.error("Error: ",u.message),u}}function mqe(t,e,r={}){let o=Boolean(r&&r.debug),a=Boolean(r&&r.override);if(typeof e!="object")throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(t,n)?(a===!0&&(t[n]=e[n]),o&&qT(a===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):t[n]=e[n]}var xs={configDotenv:hqe,_configVault:pqe,_parseVault:lqe,config:gqe,decrypt:dqe,parse:aqe,populate:mqe};Ef.exports.configDotenv=xs.configDotenv;Ef.exports._configVault=xs._configVault;Ef.exports._parseVault=xs._parseVault;Ef.exports.config=xs.config;Ef.exports.decrypt=xs.decrypt;Ef.exports.parse=xs.parse;Ef.exports.populate=xs.populate;Ef.exports=xs});var tz=_((vkt,ez)=>{"use strict";ez.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var nd=_((Dkt,WT)=>{"use strict";var yqe=tz(),rz=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,o=()=>{r--,e.length>0&&e.shift()()},a=(A,p,...h)=>{r++;let C=yqe(A,...h);p(C),C.then(o,o)},n=(A,p,...h)=>{rnew Promise(h=>n(A,h,...p));return Object.defineProperties(u,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),u};WT.exports=rz;WT.exports.default=rz});function Wu(t){return`YN${t.toString(10).padStart(4,"0")}`}function AP(t){let e=Number(t.slice(2));if(typeof wr[e]>"u")throw new Error(`Unknown message name: "${t}"`);return e}var wr,fP=yt(()=>{wr=(Oe=>(Oe[Oe.UNNAMED=0]="UNNAMED",Oe[Oe.EXCEPTION=1]="EXCEPTION",Oe[Oe.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",Oe[Oe.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",Oe[Oe.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",Oe[Oe.BUILD_DISABLED=5]="BUILD_DISABLED",Oe[Oe.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",Oe[Oe.MUST_BUILD=7]="MUST_BUILD",Oe[Oe.MUST_REBUILD=8]="MUST_REBUILD",Oe[Oe.BUILD_FAILED=9]="BUILD_FAILED",Oe[Oe.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",Oe[Oe.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",Oe[Oe.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",Oe[Oe.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",Oe[Oe.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",Oe[Oe.REMOTE_INVALID=15]="REMOTE_INVALID",Oe[Oe.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",Oe[Oe.RESOLUTION_PACK=17]="RESOLUTION_PACK",Oe[Oe.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",Oe[Oe.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",Oe[Oe.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",Oe[Oe.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",Oe[Oe.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",Oe[Oe.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",Oe[Oe.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",Oe[Oe.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",Oe[Oe.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",Oe[Oe.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",Oe[Oe.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",Oe[Oe.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",Oe[Oe.FETCH_FAILED=30]="FETCH_FAILED",Oe[Oe.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",Oe[Oe.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",Oe[Oe.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",Oe[Oe.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",Oe[Oe.NETWORK_ERROR=35]="NETWORK_ERROR",Oe[Oe.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",Oe[Oe.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",Oe[Oe.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",Oe[Oe.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",Oe[Oe.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",Oe[Oe.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",Oe[Oe.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",Oe[Oe.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",Oe[Oe.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",Oe[Oe.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",Oe[Oe.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",Oe[Oe.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",Oe[Oe.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",Oe[Oe.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",Oe[Oe.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",Oe[Oe.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",Oe[Oe.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",Oe[Oe.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",Oe[Oe.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",Oe[Oe.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",Oe[Oe.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",Oe[Oe.INVALID_MANIFEST=57]="INVALID_MANIFEST",Oe[Oe.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",Oe[Oe.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",Oe[Oe.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",Oe[Oe.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",Oe[Oe.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",Oe[Oe.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",Oe[Oe.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",Oe[Oe.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",Oe[Oe.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",Oe[Oe.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",Oe[Oe.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",Oe[Oe.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",Oe[Oe.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",Oe[Oe.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",Oe[Oe.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",Oe[Oe.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK",Oe[Oe.NM_HARDLINKS_MODE_DOWNGRADED=74]="NM_HARDLINKS_MODE_DOWNGRADED",Oe[Oe.PROLOG_INSTANTIATION_ERROR=75]="PROLOG_INSTANTIATION_ERROR",Oe[Oe.INCOMPATIBLE_ARCHITECTURE=76]="INCOMPATIBLE_ARCHITECTURE",Oe[Oe.GHOST_ARCHITECTURE=77]="GHOST_ARCHITECTURE",Oe[Oe.RESOLUTION_MISMATCH=78]="RESOLUTION_MISMATCH",Oe[Oe.PROLOG_LIMIT_EXCEEDED=79]="PROLOG_LIMIT_EXCEEDED",Oe[Oe.NETWORK_DISABLED=80]="NETWORK_DISABLED",Oe[Oe.NETWORK_UNSAFE_HTTP=81]="NETWORK_UNSAFE_HTTP",Oe[Oe.RESOLUTION_FAILED=82]="RESOLUTION_FAILED",Oe[Oe.AUTOMERGE_GIT_ERROR=83]="AUTOMERGE_GIT_ERROR",Oe[Oe.CONSTRAINTS_CHECK_FAILED=84]="CONSTRAINTS_CHECK_FAILED",Oe[Oe.UPDATED_RESOLUTION_RECORD=85]="UPDATED_RESOLUTION_RECORD",Oe[Oe.EXPLAIN_PEER_DEPENDENCIES_CTA=86]="EXPLAIN_PEER_DEPENDENCIES_CTA",Oe[Oe.MIGRATION_SUCCESS=87]="MIGRATION_SUCCESS",Oe[Oe.VERSION_NOTICE=88]="VERSION_NOTICE",Oe[Oe.TIPS_NOTICE=89]="TIPS_NOTICE",Oe[Oe.OFFLINE_MODE_ENABLED=90]="OFFLINE_MODE_ENABLED",Oe))(wr||{})});var pI=_((Skt,nz)=>{var Eqe="2.0.0",Cqe=Number.MAX_SAFE_INTEGER||9007199254740991,wqe=16,Iqe=256-6,Bqe=["major","premajor","minor","preminor","patch","prepatch","prerelease"];nz.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:wqe,MAX_SAFE_BUILD_LENGTH:Iqe,MAX_SAFE_INTEGER:Cqe,RELEASE_TYPES:Bqe,SEMVER_SPEC_VERSION:Eqe,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var hI=_((xkt,iz)=>{var vqe=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};iz.exports=vqe});var By=_((Cf,sz)=>{var{MAX_SAFE_COMPONENT_LENGTH:KT,MAX_SAFE_BUILD_LENGTH:Dqe,MAX_LENGTH:Pqe}=pI(),Sqe=hI();Cf=sz.exports={};var xqe=Cf.re=[],bqe=Cf.safeRe=[],lr=Cf.src=[],cr=Cf.t={},kqe=0,VT="[a-zA-Z0-9-]",Qqe=[["\\s",1],["\\d",Pqe],[VT,Dqe]],Fqe=t=>{for(let[e,r]of Qqe)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},zr=(t,e,r)=>{let o=Fqe(e),a=kqe++;Sqe(t,a,e),cr[t]=a,lr[a]=e,xqe[a]=new RegExp(e,r?"g":void 0),bqe[a]=new RegExp(o,r?"g":void 0)};zr("NUMERICIDENTIFIER","0|[1-9]\\d*");zr("NUMERICIDENTIFIERLOOSE","\\d+");zr("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${VT}*`);zr("MAINVERSION",`(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})`);zr("MAINVERSIONLOOSE",`(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})`);zr("PRERELEASEIDENTIFIER",`(?:${lr[cr.NUMERICIDENTIFIER]}|${lr[cr.NONNUMERICIDENTIFIER]})`);zr("PRERELEASEIDENTIFIERLOOSE",`(?:${lr[cr.NUMERICIDENTIFIERLOOSE]}|${lr[cr.NONNUMERICIDENTIFIER]})`);zr("PRERELEASE",`(?:-(${lr[cr.PRERELEASEIDENTIFIER]}(?:\\.${lr[cr.PRERELEASEIDENTIFIER]})*))`);zr("PRERELEASELOOSE",`(?:-?(${lr[cr.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${lr[cr.PRERELEASEIDENTIFIERLOOSE]})*))`);zr("BUILDIDENTIFIER",`${VT}+`);zr("BUILD",`(?:\\+(${lr[cr.BUILDIDENTIFIER]}(?:\\.${lr[cr.BUILDIDENTIFIER]})*))`);zr("FULLPLAIN",`v?${lr[cr.MAINVERSION]}${lr[cr.PRERELEASE]}?${lr[cr.BUILD]}?`);zr("FULL",`^${lr[cr.FULLPLAIN]}$`);zr("LOOSEPLAIN",`[v=\\s]*${lr[cr.MAINVERSIONLOOSE]}${lr[cr.PRERELEASELOOSE]}?${lr[cr.BUILD]}?`);zr("LOOSE",`^${lr[cr.LOOSEPLAIN]}$`);zr("GTLT","((?:<|>)?=?)");zr("XRANGEIDENTIFIERLOOSE",`${lr[cr.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);zr("XRANGEIDENTIFIER",`${lr[cr.NUMERICIDENTIFIER]}|x|X|\\*`);zr("XRANGEPLAIN",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:${lr[cr.PRERELEASE]})?${lr[cr.BUILD]}?)?)?`);zr("XRANGEPLAINLOOSE",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:${lr[cr.PRERELEASELOOSE]})?${lr[cr.BUILD]}?)?)?`);zr("XRANGE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAIN]}$`);zr("XRANGELOOSE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAINLOOSE]}$`);zr("COERCE",`(^|[^\\d])(\\d{1,${KT}})(?:\\.(\\d{1,${KT}}))?(?:\\.(\\d{1,${KT}}))?(?:$|[^\\d])`);zr("COERCERTL",lr[cr.COERCE],!0);zr("LONETILDE","(?:~>?)");zr("TILDETRIM",`(\\s*)${lr[cr.LONETILDE]}\\s+`,!0);Cf.tildeTrimReplace="$1~";zr("TILDE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAIN]}$`);zr("TILDELOOSE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAINLOOSE]}$`);zr("LONECARET","(?:\\^)");zr("CARETTRIM",`(\\s*)${lr[cr.LONECARET]}\\s+`,!0);Cf.caretTrimReplace="$1^";zr("CARET",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAIN]}$`);zr("CARETLOOSE",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAINLOOSE]}$`);zr("COMPARATORLOOSE",`^${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]})$|^$`);zr("COMPARATOR",`^${lr[cr.GTLT]}\\s*(${lr[cr.FULLPLAIN]})$|^$`);zr("COMPARATORTRIM",`(\\s*)${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]}|${lr[cr.XRANGEPLAIN]})`,!0);Cf.comparatorTrimReplace="$1$2$3";zr("HYPHENRANGE",`^\\s*(${lr[cr.XRANGEPLAIN]})\\s+-\\s+(${lr[cr.XRANGEPLAIN]})\\s*$`);zr("HYPHENRANGELOOSE",`^\\s*(${lr[cr.XRANGEPLAINLOOSE]})\\s+-\\s+(${lr[cr.XRANGEPLAINLOOSE]})\\s*$`);zr("STAR","(<|>)?=?\\s*\\*");zr("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");zr("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var pP=_((bkt,oz)=>{var Rqe=Object.freeze({loose:!0}),Tqe=Object.freeze({}),Lqe=t=>t?typeof t!="object"?Rqe:t:Tqe;oz.exports=Lqe});var zT=_((kkt,cz)=>{var az=/^[0-9]+$/,lz=(t,e)=>{let r=az.test(t),o=az.test(e);return r&&o&&(t=+t,e=+e),t===e?0:r&&!o?-1:o&&!r?1:tlz(e,t);cz.exports={compareIdentifiers:lz,rcompareIdentifiers:Nqe}});var Po=_((Qkt,pz)=>{var hP=hI(),{MAX_LENGTH:uz,MAX_SAFE_INTEGER:gP}=pI(),{safeRe:Az,t:fz}=By(),Oqe=pP(),{compareIdentifiers:vy}=zT(),tl=class{constructor(e,r){if(r=Oqe(r),e instanceof tl){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>uz)throw new TypeError(`version is longer than ${uz} characters`);hP("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let o=e.trim().match(r.loose?Az[fz.LOOSE]:Az[fz.FULL]);if(!o)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+o[1],this.minor=+o[2],this.patch=+o[3],this.major>gP||this.major<0)throw new TypeError("Invalid major version");if(this.minor>gP||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>gP||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map(a=>{if(/^[0-9]+$/.test(a)){let n=+a;if(n>=0&&n=0;)typeof this.prerelease[n]=="number"&&(this.prerelease[n]++,n=-2);if(n===-1){if(r===this.prerelease.join(".")&&o===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let n=[r,a];o===!1&&(n=[r]),vy(this.prerelease[0],r)===0?isNaN(this.prerelease[1])&&(this.prerelease=n):this.prerelease=n}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};pz.exports=tl});var id=_((Fkt,gz)=>{var hz=Po(),Mqe=(t,e,r=!1)=>{if(t instanceof hz)return t;try{return new hz(t,e)}catch(o){if(!r)return null;throw o}};gz.exports=Mqe});var mz=_((Rkt,dz)=>{var Uqe=id(),_qe=(t,e)=>{let r=Uqe(t,e);return r?r.version:null};dz.exports=_qe});var Ez=_((Tkt,yz)=>{var Hqe=id(),jqe=(t,e)=>{let r=Hqe(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};yz.exports=jqe});var Iz=_((Lkt,wz)=>{var Cz=Po(),qqe=(t,e,r,o,a)=>{typeof r=="string"&&(a=o,o=r,r=void 0);try{return new Cz(t instanceof Cz?t.version:t,r).inc(e,o,a).version}catch{return null}};wz.exports=qqe});var Dz=_((Nkt,vz)=>{var Bz=id(),Gqe=(t,e)=>{let r=Bz(t,null,!0),o=Bz(e,null,!0),a=r.compare(o);if(a===0)return null;let n=a>0,u=n?r:o,A=n?o:r,p=!!u.prerelease.length;if(!!A.prerelease.length&&!p)return!A.patch&&!A.minor?"major":u.patch?"patch":u.minor?"minor":"major";let C=p?"pre":"";return r.major!==o.major?C+"major":r.minor!==o.minor?C+"minor":r.patch!==o.patch?C+"patch":"prerelease"};vz.exports=Gqe});var Sz=_((Okt,Pz)=>{var Yqe=Po(),Wqe=(t,e)=>new Yqe(t,e).major;Pz.exports=Wqe});var bz=_((Mkt,xz)=>{var Kqe=Po(),Vqe=(t,e)=>new Kqe(t,e).minor;xz.exports=Vqe});var Qz=_((Ukt,kz)=>{var zqe=Po(),Jqe=(t,e)=>new zqe(t,e).patch;kz.exports=Jqe});var Rz=_((_kt,Fz)=>{var Xqe=id(),Zqe=(t,e)=>{let r=Xqe(t,e);return r&&r.prerelease.length?r.prerelease:null};Fz.exports=Zqe});var Nl=_((Hkt,Lz)=>{var Tz=Po(),$qe=(t,e,r)=>new Tz(t,r).compare(new Tz(e,r));Lz.exports=$qe});var Oz=_((jkt,Nz)=>{var eGe=Nl(),tGe=(t,e,r)=>eGe(e,t,r);Nz.exports=tGe});var Uz=_((qkt,Mz)=>{var rGe=Nl(),nGe=(t,e)=>rGe(t,e,!0);Mz.exports=nGe});var dP=_((Gkt,Hz)=>{var _z=Po(),iGe=(t,e,r)=>{let o=new _z(t,r),a=new _z(e,r);return o.compare(a)||o.compareBuild(a)};Hz.exports=iGe});var qz=_((Ykt,jz)=>{var sGe=dP(),oGe=(t,e)=>t.sort((r,o)=>sGe(r,o,e));jz.exports=oGe});var Yz=_((Wkt,Gz)=>{var aGe=dP(),lGe=(t,e)=>t.sort((r,o)=>aGe(o,r,e));Gz.exports=lGe});var gI=_((Kkt,Wz)=>{var cGe=Nl(),uGe=(t,e,r)=>cGe(t,e,r)>0;Wz.exports=uGe});var mP=_((Vkt,Kz)=>{var AGe=Nl(),fGe=(t,e,r)=>AGe(t,e,r)<0;Kz.exports=fGe});var JT=_((zkt,Vz)=>{var pGe=Nl(),hGe=(t,e,r)=>pGe(t,e,r)===0;Vz.exports=hGe});var XT=_((Jkt,zz)=>{var gGe=Nl(),dGe=(t,e,r)=>gGe(t,e,r)!==0;zz.exports=dGe});var yP=_((Xkt,Jz)=>{var mGe=Nl(),yGe=(t,e,r)=>mGe(t,e,r)>=0;Jz.exports=yGe});var EP=_((Zkt,Xz)=>{var EGe=Nl(),CGe=(t,e,r)=>EGe(t,e,r)<=0;Xz.exports=CGe});var ZT=_(($kt,Zz)=>{var wGe=JT(),IGe=XT(),BGe=gI(),vGe=yP(),DGe=mP(),PGe=EP(),SGe=(t,e,r,o)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return wGe(t,r,o);case"!=":return IGe(t,r,o);case">":return BGe(t,r,o);case">=":return vGe(t,r,o);case"<":return DGe(t,r,o);case"<=":return PGe(t,r,o);default:throw new TypeError(`Invalid operator: ${e}`)}};Zz.exports=SGe});var eJ=_((eQt,$z)=>{var xGe=Po(),bGe=id(),{safeRe:CP,t:wP}=By(),kGe=(t,e)=>{if(t instanceof xGe)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(CP[wP.COERCE]);else{let o;for(;(o=CP[wP.COERCERTL].exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||o.index+o[0].length!==r.index+r[0].length)&&(r=o),CP[wP.COERCERTL].lastIndex=o.index+o[1].length+o[2].length;CP[wP.COERCERTL].lastIndex=-1}return r===null?null:bGe(`${r[2]}.${r[3]||"0"}.${r[4]||"0"}`,e)};$z.exports=kGe});var rJ=_((tQt,tJ)=>{"use strict";tJ.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var IP=_((rQt,nJ)=>{"use strict";nJ.exports=Cn;Cn.Node=sd;Cn.create=Cn;function Cn(t){var e=this;if(e instanceof Cn||(e=new Cn),e.tail=null,e.head=null,e.length=0,t&&typeof t.forEach=="function")t.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var r=0,o=arguments.length;r1)r=e;else if(this.head)o=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;o!==null;a++)r=t(r,o.value,a),o=o.next;return r};Cn.prototype.reduceReverse=function(t,e){var r,o=this.tail;if(arguments.length>1)r=e;else if(this.tail)o=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;o!==null;a--)r=t(r,o.value,a),o=o.prev;return r};Cn.prototype.toArray=function(){for(var t=new Array(this.length),e=0,r=this.head;r!==null;e++)t[e]=r.value,r=r.next;return t};Cn.prototype.toArrayReverse=function(){for(var t=new Array(this.length),e=0,r=this.tail;r!==null;e++)t[e]=r.value,r=r.prev;return t};Cn.prototype.slice=function(t,e){e=e||this.length,e<0&&(e+=this.length),t=t||0,t<0&&(t+=this.length);var r=new Cn;if(ethis.length&&(e=this.length);for(var o=0,a=this.head;a!==null&&othis.length&&(e=this.length);for(var o=this.length,a=this.tail;a!==null&&o>e;o--)a=a.prev;for(;a!==null&&o>t;o--,a=a.prev)r.push(a.value);return r};Cn.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var o=0,a=this.head;a!==null&&o{"use strict";var TGe=IP(),od=Symbol("max"),If=Symbol("length"),Dy=Symbol("lengthCalculator"),mI=Symbol("allowStale"),ad=Symbol("maxAge"),wf=Symbol("dispose"),iJ=Symbol("noDisposeOnSet"),bs=Symbol("lruList"),Mc=Symbol("cache"),oJ=Symbol("updateAgeOnGet"),$T=()=>1,tL=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let r=this[od]=e.max||1/0,o=e.length||$T;if(this[Dy]=typeof o!="function"?$T:o,this[mI]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[ad]=e.maxAge||0,this[wf]=e.dispose,this[iJ]=e.noDisposeOnSet||!1,this[oJ]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[od]=e||1/0,dI(this)}get max(){return this[od]}set allowStale(e){this[mI]=!!e}get allowStale(){return this[mI]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[ad]=e,dI(this)}get maxAge(){return this[ad]}set lengthCalculator(e){typeof e!="function"&&(e=$T),e!==this[Dy]&&(this[Dy]=e,this[If]=0,this[bs].forEach(r=>{r.length=this[Dy](r.value,r.key),this[If]+=r.length})),dI(this)}get lengthCalculator(){return this[Dy]}get length(){return this[If]}get itemCount(){return this[bs].length}rforEach(e,r){r=r||this;for(let o=this[bs].tail;o!==null;){let a=o.prev;sJ(this,e,o,r),o=a}}forEach(e,r){r=r||this;for(let o=this[bs].head;o!==null;){let a=o.next;sJ(this,e,o,r),o=a}}keys(){return this[bs].toArray().map(e=>e.key)}values(){return this[bs].toArray().map(e=>e.value)}reset(){this[wf]&&this[bs]&&this[bs].length&&this[bs].forEach(e=>this[wf](e.key,e.value)),this[Mc]=new Map,this[bs]=new TGe,this[If]=0}dump(){return this[bs].map(e=>BP(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[bs]}set(e,r,o){if(o=o||this[ad],o&&typeof o!="number")throw new TypeError("maxAge must be a number");let a=o?Date.now():0,n=this[Dy](r,e);if(this[Mc].has(e)){if(n>this[od])return Py(this,this[Mc].get(e)),!1;let p=this[Mc].get(e).value;return this[wf]&&(this[iJ]||this[wf](e,p.value)),p.now=a,p.maxAge=o,p.value=r,this[If]+=n-p.length,p.length=n,this.get(e),dI(this),!0}let u=new rL(e,r,n,a,o);return u.length>this[od]?(this[wf]&&this[wf](e,r),!1):(this[If]+=u.length,this[bs].unshift(u),this[Mc].set(e,this[bs].head),dI(this),!0)}has(e){if(!this[Mc].has(e))return!1;let r=this[Mc].get(e).value;return!BP(this,r)}get(e){return eL(this,e,!0)}peek(e){return eL(this,e,!1)}pop(){let e=this[bs].tail;return e?(Py(this,e),e.value):null}del(e){Py(this,this[Mc].get(e))}load(e){this.reset();let r=Date.now();for(let o=e.length-1;o>=0;o--){let a=e[o],n=a.e||0;if(n===0)this.set(a.k,a.v);else{let u=n-r;u>0&&this.set(a.k,a.v,u)}}}prune(){this[Mc].forEach((e,r)=>eL(this,r,!1))}},eL=(t,e,r)=>{let o=t[Mc].get(e);if(o){let a=o.value;if(BP(t,a)){if(Py(t,o),!t[mI])return}else r&&(t[oJ]&&(o.value.now=Date.now()),t[bs].unshiftNode(o));return a.value}},BP=(t,e)=>{if(!e||!e.maxAge&&!t[ad])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[ad]&&r>t[ad]},dI=t=>{if(t[If]>t[od])for(let e=t[bs].tail;t[If]>t[od]&&e!==null;){let r=e.prev;Py(t,e),e=r}},Py=(t,e)=>{if(e){let r=e.value;t[wf]&&t[wf](r.key,r.value),t[If]-=r.length,t[Mc].delete(r.key),t[bs].removeNode(e)}},rL=class{constructor(e,r,o,a,n){this.key=e,this.value=r,this.length=o,this.now=a,this.maxAge=n||0}},sJ=(t,e,r,o)=>{let a=r.value;BP(t,a)&&(Py(t,r),t[mI]||(a=void 0)),a&&e.call(o,a.value,a.key,t)};aJ.exports=tL});var Ol=_((iQt,fJ)=>{var ld=class{constructor(e,r){if(r=NGe(r),e instanceof ld)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new ld(e.raw,r);if(e instanceof nL)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(o=>this.parseRange(o.trim())).filter(o=>o.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let o=this.set[0];if(this.set=this.set.filter(a=>!uJ(a[0])),this.set.length===0)this.set=[o];else if(this.set.length>1){for(let a of this.set)if(a.length===1&&qGe(a[0])){this.set=[a];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let o=((this.options.includePrerelease&&HGe)|(this.options.loose&&jGe))+":"+e,a=cJ.get(o);if(a)return a;let n=this.options.loose,u=n?Da[Jo.HYPHENRANGELOOSE]:Da[Jo.HYPHENRANGE];e=e.replace(u,$Ge(this.options.includePrerelease)),ci("hyphen replace",e),e=e.replace(Da[Jo.COMPARATORTRIM],MGe),ci("comparator trim",e),e=e.replace(Da[Jo.TILDETRIM],UGe),ci("tilde trim",e),e=e.replace(Da[Jo.CARETTRIM],_Ge),ci("caret trim",e);let A=e.split(" ").map(I=>GGe(I,this.options)).join(" ").split(/\s+/).map(I=>ZGe(I,this.options));n&&(A=A.filter(I=>(ci("loose invalid filter",I,this.options),!!I.match(Da[Jo.COMPARATORLOOSE])))),ci("range list",A);let p=new Map,h=A.map(I=>new nL(I,this.options));for(let I of h){if(uJ(I))return[I];p.set(I.value,I)}p.size>1&&p.has("")&&p.delete("");let C=[...p.values()];return cJ.set(o,C),C}intersects(e,r){if(!(e instanceof ld))throw new TypeError("a Range is required");return this.set.some(o=>AJ(o,r)&&e.set.some(a=>AJ(a,r)&&o.every(n=>a.every(u=>n.intersects(u,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new OGe(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",qGe=t=>t.value==="",AJ=(t,e)=>{let r=!0,o=t.slice(),a=o.pop();for(;r&&o.length;)r=o.every(n=>a.intersects(n,e)),a=o.pop();return r},GGe=(t,e)=>(ci("comp",t,e),t=KGe(t,e),ci("caret",t),t=YGe(t,e),ci("tildes",t),t=zGe(t,e),ci("xrange",t),t=XGe(t,e),ci("stars",t),t),Xo=t=>!t||t.toLowerCase()==="x"||t==="*",YGe=(t,e)=>t.trim().split(/\s+/).map(r=>WGe(r,e)).join(" "),WGe=(t,e)=>{let r=e.loose?Da[Jo.TILDELOOSE]:Da[Jo.TILDE];return t.replace(r,(o,a,n,u,A)=>{ci("tilde",t,o,a,n,u,A);let p;return Xo(a)?p="":Xo(n)?p=`>=${a}.0.0 <${+a+1}.0.0-0`:Xo(u)?p=`>=${a}.${n}.0 <${a}.${+n+1}.0-0`:A?(ci("replaceTilde pr",A),p=`>=${a}.${n}.${u}-${A} <${a}.${+n+1}.0-0`):p=`>=${a}.${n}.${u} <${a}.${+n+1}.0-0`,ci("tilde return",p),p})},KGe=(t,e)=>t.trim().split(/\s+/).map(r=>VGe(r,e)).join(" "),VGe=(t,e)=>{ci("caret",t,e);let r=e.loose?Da[Jo.CARETLOOSE]:Da[Jo.CARET],o=e.includePrerelease?"-0":"";return t.replace(r,(a,n,u,A,p)=>{ci("caret",t,a,n,u,A,p);let h;return Xo(n)?h="":Xo(u)?h=`>=${n}.0.0${o} <${+n+1}.0.0-0`:Xo(A)?n==="0"?h=`>=${n}.${u}.0${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.0${o} <${+n+1}.0.0-0`:p?(ci("replaceCaret pr",p),n==="0"?u==="0"?h=`>=${n}.${u}.${A}-${p} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}-${p} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A}-${p} <${+n+1}.0.0-0`):(ci("no pr"),n==="0"?u==="0"?h=`>=${n}.${u}.${A}${o} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A} <${+n+1}.0.0-0`),ci("caret return",h),h})},zGe=(t,e)=>(ci("replaceXRanges",t,e),t.split(/\s+/).map(r=>JGe(r,e)).join(" ")),JGe=(t,e)=>{t=t.trim();let r=e.loose?Da[Jo.XRANGELOOSE]:Da[Jo.XRANGE];return t.replace(r,(o,a,n,u,A,p)=>{ci("xRange",t,o,a,n,u,A,p);let h=Xo(n),C=h||Xo(u),I=C||Xo(A),v=I;return a==="="&&v&&(a=""),p=e.includePrerelease?"-0":"",h?a===">"||a==="<"?o="<0.0.0-0":o="*":a&&v?(C&&(u=0),A=0,a===">"?(a=">=",C?(n=+n+1,u=0,A=0):(u=+u+1,A=0)):a==="<="&&(a="<",C?n=+n+1:u=+u+1),a==="<"&&(p="-0"),o=`${a+n}.${u}.${A}${p}`):C?o=`>=${n}.0.0${p} <${+n+1}.0.0-0`:I&&(o=`>=${n}.${u}.0${p} <${n}.${+u+1}.0-0`),ci("xRange return",o),o})},XGe=(t,e)=>(ci("replaceStars",t,e),t.trim().replace(Da[Jo.STAR],"")),ZGe=(t,e)=>(ci("replaceGTE0",t,e),t.trim().replace(Da[e.includePrerelease?Jo.GTE0PRE:Jo.GTE0],"")),$Ge=t=>(e,r,o,a,n,u,A,p,h,C,I,v,b)=>(Xo(o)?r="":Xo(a)?r=`>=${o}.0.0${t?"-0":""}`:Xo(n)?r=`>=${o}.${a}.0${t?"-0":""}`:u?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,Xo(h)?p="":Xo(C)?p=`<${+h+1}.0.0-0`:Xo(I)?p=`<${h}.${+C+1}.0-0`:v?p=`<=${h}.${C}.${I}-${v}`:t?p=`<${h}.${C}.${+I+1}-0`:p=`<=${p}`,`${r} ${p}`.trim()),e5e=(t,e,r)=>{for(let o=0;o0){let a=t[o].semver;if(a.major===e.major&&a.minor===e.minor&&a.patch===e.patch)return!0}return!1}return!0}});var yI=_((sQt,yJ)=>{var EI=Symbol("SemVer ANY"),Sy=class{static get ANY(){return EI}constructor(e,r){if(r=pJ(r),e instanceof Sy){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),sL("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===EI?this.value="":this.value=this.operator+this.semver.version,sL("comp",this)}parse(e){let r=this.options.loose?hJ[gJ.COMPARATORLOOSE]:hJ[gJ.COMPARATOR],o=e.match(r);if(!o)throw new TypeError(`Invalid comparator: ${e}`);this.operator=o[1]!==void 0?o[1]:"",this.operator==="="&&(this.operator=""),o[2]?this.semver=new dJ(o[2],this.options.loose):this.semver=EI}toString(){return this.value}test(e){if(sL("Comparator.test",e,this.options.loose),this.semver===EI||e===EI)return!0;if(typeof e=="string")try{e=new dJ(e,this.options)}catch{return!1}return iL(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Sy))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new mJ(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new mJ(this.value,r).test(e.semver):(r=pJ(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||iL(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||iL(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};yJ.exports=Sy;var pJ=pP(),{safeRe:hJ,t:gJ}=By(),iL=ZT(),sL=hI(),dJ=Po(),mJ=Ol()});var CI=_((oQt,EJ)=>{var t5e=Ol(),r5e=(t,e,r)=>{try{e=new t5e(e,r)}catch{return!1}return e.test(t)};EJ.exports=r5e});var wJ=_((aQt,CJ)=>{var n5e=Ol(),i5e=(t,e)=>new n5e(t,e).set.map(r=>r.map(o=>o.value).join(" ").trim().split(" "));CJ.exports=i5e});var BJ=_((lQt,IJ)=>{var s5e=Po(),o5e=Ol(),a5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new o5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===-1)&&(o=u,a=new s5e(o,r))}),o};IJ.exports=a5e});var DJ=_((cQt,vJ)=>{var l5e=Po(),c5e=Ol(),u5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new c5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===1)&&(o=u,a=new l5e(o,r))}),o};vJ.exports=u5e});var xJ=_((uQt,SJ)=>{var oL=Po(),A5e=Ol(),PJ=gI(),f5e=(t,e)=>{t=new A5e(t,e);let r=new oL("0.0.0");if(t.test(r)||(r=new oL("0.0.0-0"),t.test(r)))return r;r=null;for(let o=0;o{let A=new oL(u.semver.version);switch(u.operator){case">":A.prerelease.length===0?A.patch++:A.prerelease.push(0),A.raw=A.format();case"":case">=":(!n||PJ(A,n))&&(n=A);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${u.operator}`)}}),n&&(!r||PJ(r,n))&&(r=n)}return r&&t.test(r)?r:null};SJ.exports=f5e});var kJ=_((AQt,bJ)=>{var p5e=Ol(),h5e=(t,e)=>{try{return new p5e(t,e).range||"*"}catch{return null}};bJ.exports=h5e});var vP=_((fQt,TJ)=>{var g5e=Po(),RJ=yI(),{ANY:d5e}=RJ,m5e=Ol(),y5e=CI(),QJ=gI(),FJ=mP(),E5e=EP(),C5e=yP(),w5e=(t,e,r,o)=>{t=new g5e(t,o),e=new m5e(e,o);let a,n,u,A,p;switch(r){case">":a=QJ,n=E5e,u=FJ,A=">",p=">=";break;case"<":a=FJ,n=C5e,u=QJ,A="<",p="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(y5e(t,e,o))return!1;for(let h=0;h{b.semver===d5e&&(b=new RJ(">=0.0.0")),I=I||b,v=v||b,a(b.semver,I.semver,o)?I=b:u(b.semver,v.semver,o)&&(v=b)}),I.operator===A||I.operator===p||(!v.operator||v.operator===A)&&n(t,v.semver))return!1;if(v.operator===p&&u(t,v.semver))return!1}return!0};TJ.exports=w5e});var NJ=_((pQt,LJ)=>{var I5e=vP(),B5e=(t,e,r)=>I5e(t,e,">",r);LJ.exports=B5e});var MJ=_((hQt,OJ)=>{var v5e=vP(),D5e=(t,e,r)=>v5e(t,e,"<",r);OJ.exports=D5e});var HJ=_((gQt,_J)=>{var UJ=Ol(),P5e=(t,e,r)=>(t=new UJ(t,r),e=new UJ(e,r),t.intersects(e,r));_J.exports=P5e});var qJ=_((dQt,jJ)=>{var S5e=CI(),x5e=Nl();jJ.exports=(t,e,r)=>{let o=[],a=null,n=null,u=t.sort((C,I)=>x5e(C,I,r));for(let C of u)S5e(C,e,r)?(n=C,a||(a=C)):(n&&o.push([a,n]),n=null,a=null);a&&o.push([a,null]);let A=[];for(let[C,I]of o)C===I?A.push(C):!I&&C===u[0]?A.push("*"):I?C===u[0]?A.push(`<=${I}`):A.push(`${C} - ${I}`):A.push(`>=${C}`);let p=A.join(" || "),h=typeof e.raw=="string"?e.raw:String(e);return p.length{var GJ=Ol(),lL=yI(),{ANY:aL}=lL,wI=CI(),cL=Nl(),b5e=(t,e,r={})=>{if(t===e)return!0;t=new GJ(t,r),e=new GJ(e,r);let o=!1;e:for(let a of t.set){for(let n of e.set){let u=Q5e(a,n,r);if(o=o||u!==null,u)continue e}if(o)return!1}return!0},k5e=[new lL(">=0.0.0-0")],YJ=[new lL(">=0.0.0")],Q5e=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===aL){if(e.length===1&&e[0].semver===aL)return!0;r.includePrerelease?t=k5e:t=YJ}if(e.length===1&&e[0].semver===aL){if(r.includePrerelease)return!0;e=YJ}let o=new Set,a,n;for(let b of t)b.operator===">"||b.operator===">="?a=WJ(a,b,r):b.operator==="<"||b.operator==="<="?n=KJ(n,b,r):o.add(b.semver);if(o.size>1)return null;let u;if(a&&n){if(u=cL(a.semver,n.semver,r),u>0)return null;if(u===0&&(a.operator!==">="||n.operator!=="<="))return null}for(let b of o){if(a&&!wI(b,String(a),r)||n&&!wI(b,String(n),r))return null;for(let E of e)if(!wI(b,String(E),r))return!1;return!0}let A,p,h,C,I=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1,v=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;I&&I.prerelease.length===1&&n.operator==="<"&&I.prerelease[0]===0&&(I=!1);for(let b of e){if(C=C||b.operator===">"||b.operator===">=",h=h||b.operator==="<"||b.operator==="<=",a){if(v&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===v.major&&b.semver.minor===v.minor&&b.semver.patch===v.patch&&(v=!1),b.operator===">"||b.operator===">="){if(A=WJ(a,b,r),A===b&&A!==a)return!1}else if(a.operator===">="&&!wI(a.semver,String(b),r))return!1}if(n){if(I&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===I.major&&b.semver.minor===I.minor&&b.semver.patch===I.patch&&(I=!1),b.operator==="<"||b.operator==="<="){if(p=KJ(n,b,r),p===b&&p!==n)return!1}else if(n.operator==="<="&&!wI(n.semver,String(b),r))return!1}if(!b.operator&&(n||a)&&u!==0)return!1}return!(a&&h&&!n&&u!==0||n&&C&&!a&&u!==0||v||I)},WJ=(t,e,r)=>{if(!t)return e;let o=cL(t.semver,e.semver,r);return o>0?t:o<0||e.operator===">"&&t.operator===">="?e:t},KJ=(t,e,r)=>{if(!t)return e;let o=cL(t.semver,e.semver,r);return o<0?t:o>0||e.operator==="<"&&t.operator==="<="?e:t};VJ.exports=b5e});var Jn=_((yQt,ZJ)=>{var uL=By(),JJ=pI(),F5e=Po(),XJ=zT(),R5e=id(),T5e=mz(),L5e=Ez(),N5e=Iz(),O5e=Dz(),M5e=Sz(),U5e=bz(),_5e=Qz(),H5e=Rz(),j5e=Nl(),q5e=Oz(),G5e=Uz(),Y5e=dP(),W5e=qz(),K5e=Yz(),V5e=gI(),z5e=mP(),J5e=JT(),X5e=XT(),Z5e=yP(),$5e=EP(),e9e=ZT(),t9e=eJ(),r9e=yI(),n9e=Ol(),i9e=CI(),s9e=wJ(),o9e=BJ(),a9e=DJ(),l9e=xJ(),c9e=kJ(),u9e=vP(),A9e=NJ(),f9e=MJ(),p9e=HJ(),h9e=qJ(),g9e=zJ();ZJ.exports={parse:R5e,valid:T5e,clean:L5e,inc:N5e,diff:O5e,major:M5e,minor:U5e,patch:_5e,prerelease:H5e,compare:j5e,rcompare:q5e,compareLoose:G5e,compareBuild:Y5e,sort:W5e,rsort:K5e,gt:V5e,lt:z5e,eq:J5e,neq:X5e,gte:Z5e,lte:$5e,cmp:e9e,coerce:t9e,Comparator:r9e,Range:n9e,satisfies:i9e,toComparators:s9e,maxSatisfying:o9e,minSatisfying:a9e,minVersion:l9e,validRange:c9e,outside:u9e,gtr:A9e,ltr:f9e,intersects:p9e,simplifyRange:h9e,subset:g9e,SemVer:F5e,re:uL.re,src:uL.src,tokens:uL.t,SEMVER_SPEC_VERSION:JJ.SEMVER_SPEC_VERSION,RELEASE_TYPES:JJ.RELEASE_TYPES,compareIdentifiers:XJ.compareIdentifiers,rcompareIdentifiers:XJ.rcompareIdentifiers}});var eX=_((EQt,$J)=>{"use strict";function d9e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function cd(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,cd)}d9e(cd,Error);cd.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var C="",I;for(I=0;I0){for(I=1,v=1;I{switch(Le[1]){case"|":return Pe|Le[3];case"&":return Pe&Le[3];case"^":return Pe^Le[3]}},Z)},v="!",b=Te("!",!1),E=function(Z){return!Z},F="(",N=Te("(",!1),U=")",z=Te(")",!1),te=function(Z){return Z},le=/^[^ \t\n\r()!|&\^]/,pe=ke([" "," ",` -`,"\r","(",")","!","|","&","^"],!0,!1),ue=function(Z){return e.queryPattern.test(Z)},ye=function(Z){return e.checkFn(Z)},ae=Re("whitespace"),Ie=/^[ \t\n\r]/,Fe=ke([" "," ",` -`,"\r"],!1,!1),g=0,Ee=0,De=[{line:1,column:1}],ce=0,ne=[],ee=0,we;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function be(){return t.substring(Ee,g)}function ht(){return je(Ee,g)}function H(Z,ie){throw ie=ie!==void 0?ie:je(Ee,g),S([Re(Z)],t.substring(Ee,g),ie)}function lt(Z,ie){throw ie=ie!==void 0?ie:je(Ee,g),w(Z,ie)}function Te(Z,ie){return{type:"literal",text:Z,ignoreCase:ie}}function ke(Z,ie,Pe){return{type:"class",parts:Z,inverted:ie,ignoreCase:Pe}}function xe(){return{type:"any"}}function He(){return{type:"end"}}function Re(Z){return{type:"other",description:Z}}function ze(Z){var ie=De[Z],Pe;if(ie)return ie;for(Pe=Z-1;!De[Pe];)Pe--;for(ie=De[Pe],ie={line:ie.line,column:ie.column};Pece&&(ce=g,ne=[]),ne.push(Z))}function w(Z,ie){return new cd(Z,null,null,ie)}function S(Z,ie,Pe){return new cd(cd.buildMessage(Z,ie),Z,ie,Pe)}function y(){var Z,ie,Pe,Le,ot,dt,jt,$t;if(Z=g,ie=R(),ie!==r){for(Pe=[],Le=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&x(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&x(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&x(C)))),dt!==r?(jt=X(),jt!==r?($t=R(),$t!==r?(ot=[ot,dt,jt,$t],Le=ot):(g=Le,Le=r)):(g=Le,Le=r)):(g=Le,Le=r)):(g=Le,Le=r);Le!==r;)Pe.push(Le),Le=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&x(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&x(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&x(C)))),dt!==r?(jt=X(),jt!==r?($t=R(),$t!==r?(ot=[ot,dt,jt,$t],Le=ot):(g=Le,Le=r)):(g=Le,Le=r)):(g=Le,Le=r)):(g=Le,Le=r);Pe!==r?(Ee=Z,ie=I(ie,Pe),Z=ie):(g=Z,Z=r)}else g=Z,Z=r;return Z}function R(){var Z,ie,Pe,Le,ot,dt;return Z=g,t.charCodeAt(g)===33?(ie=v,g++):(ie=r,ee===0&&x(b)),ie!==r?(Pe=R(),Pe!==r?(Ee=Z,ie=E(Pe),Z=ie):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=g,t.charCodeAt(g)===40?(ie=F,g++):(ie=r,ee===0&&x(N)),ie!==r?(Pe=X(),Pe!==r?(Le=y(),Le!==r?(ot=X(),ot!==r?(t.charCodeAt(g)===41?(dt=U,g++):(dt=r,ee===0&&x(z)),dt!==r?(Ee=Z,ie=te(Le),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=J())),Z}function J(){var Z,ie,Pe,Le,ot;if(Z=g,ie=X(),ie!==r){if(Pe=g,Le=[],le.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&x(pe)),ot!==r)for(;ot!==r;)Le.push(ot),le.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&x(pe));else Le=r;Le!==r?Pe=t.substring(Pe,g):Pe=Le,Pe!==r?(Ee=g,Le=ue(Pe),Le?Le=void 0:Le=r,Le!==r?(Ee=Z,ie=ye(Pe),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)}else g=Z,Z=r;return Z}function X(){var Z,ie;for(ee++,Z=[],Ie.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&x(Fe));ie!==r;)Z.push(ie),Ie.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&x(Fe));return ee--,Z===r&&(ie=r,ee===0&&x(ae)),Z}if(we=a(),we!==r&&g===t.length)return we;throw we!==r&&g{var{parse:y9e}=eX();DP.makeParser=(t=/[a-z]+/)=>(e,r)=>y9e(e,{queryPattern:t,checkFn:r});DP.parse=DP.makeParser()});var nX=_((wQt,rX)=>{"use strict";rX.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var AL=_((IQt,sX)=>{var II=nX(),iX={};for(let t of Object.keys(II))iX[II[t]]=t;var Ar={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};sX.exports=Ar;for(let t of Object.keys(Ar)){if(!("channels"in Ar[t]))throw new Error("missing channels property: "+t);if(!("labels"in Ar[t]))throw new Error("missing channel labels property: "+t);if(Ar[t].labels.length!==Ar[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=Ar[t];delete Ar[t].channels,delete Ar[t].labels,Object.defineProperty(Ar[t],"channels",{value:e}),Object.defineProperty(Ar[t],"labels",{value:r})}Ar.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(e,r,o),n=Math.max(e,r,o),u=n-a,A,p;n===a?A=0:e===n?A=(r-o)/u:r===n?A=2+(o-e)/u:o===n&&(A=4+(e-r)/u),A=Math.min(A*60,360),A<0&&(A+=360);let h=(a+n)/2;return n===a?p=0:h<=.5?p=u/(n+a):p=u/(2-n-a),[A,p*100,h*100]};Ar.rgb.hsv=function(t){let e,r,o,a,n,u=t[0]/255,A=t[1]/255,p=t[2]/255,h=Math.max(u,A,p),C=h-Math.min(u,A,p),I=function(v){return(h-v)/6/C+1/2};return C===0?(a=0,n=0):(n=C/h,e=I(u),r=I(A),o=I(p),u===h?a=o-r:A===h?a=1/3+e-o:p===h&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[a*360,n*100,h*100]};Ar.rgb.hwb=function(t){let e=t[0],r=t[1],o=t[2],a=Ar.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,o));return o=1-1/255*Math.max(e,Math.max(r,o)),[a,n*100,o*100]};Ar.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(1-e,1-r,1-o),n=(1-e-a)/(1-a)||0,u=(1-r-a)/(1-a)||0,A=(1-o-a)/(1-a)||0;return[n*100,u*100,A*100,a*100]};function E9e(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}Ar.rgb.keyword=function(t){let e=iX[t];if(e)return e;let r=1/0,o;for(let a of Object.keys(II)){let n=II[a],u=E9e(t,n);u.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92;let a=e*.4124+r*.3576+o*.1805,n=e*.2126+r*.7152+o*.0722,u=e*.0193+r*.1192+o*.9505;return[a*100,n*100,u*100]};Ar.rgb.lab=function(t){let e=Ar.rgb.xyz(t),r=e[0],o=e[1],a=e[2];r/=95.047,o/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;let n=116*o-16,u=500*(r-o),A=200*(o-a);return[n,u,A]};Ar.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a,n,u;if(r===0)return u=o*255,[u,u,u];o<.5?a=o*(1+r):a=o+r-o*r;let A=2*o-a,p=[0,0,0];for(let h=0;h<3;h++)n=e+1/3*-(h-1),n<0&&n++,n>1&&n--,6*n<1?u=A+(a-A)*6*n:2*n<1?u=a:3*n<2?u=A+(a-A)*(2/3-n)*6:u=A,p[h]=u*255;return p};Ar.hsl.hsv=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=r,n=Math.max(o,.01);o*=2,r*=o<=1?o:2-o,a*=n<=1?n:2-n;let u=(o+r)/2,A=o===0?2*a/(n+a):2*r/(o+r);return[e,A*100,u*100]};Ar.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,o=t[2]/100,a=Math.floor(e)%6,n=e-Math.floor(e),u=255*o*(1-r),A=255*o*(1-r*n),p=255*o*(1-r*(1-n));switch(o*=255,a){case 0:return[o,p,u];case 1:return[A,o,u];case 2:return[u,o,p];case 3:return[u,A,o];case 4:return[p,u,o];case 5:return[o,u,A]}};Ar.hsv.hsl=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=Math.max(o,.01),n,u;u=(2-r)*o;let A=(2-r)*a;return n=r*a,n/=A<=1?A:2-A,n=n||0,u/=2,[e,n*100,u*100]};Ar.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a=r+o,n;a>1&&(r/=a,o/=a);let u=Math.floor(6*e),A=1-o;n=6*e-u,(u&1)!==0&&(n=1-n);let p=r+n*(A-r),h,C,I;switch(u){default:case 6:case 0:h=A,C=p,I=r;break;case 1:h=p,C=A,I=r;break;case 2:h=r,C=A,I=p;break;case 3:h=r,C=p,I=A;break;case 4:h=p,C=r,I=A;break;case 5:h=A,C=r,I=p;break}return[h*255,C*255,I*255]};Ar.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a=t[3]/100,n=1-Math.min(1,e*(1-a)+a),u=1-Math.min(1,r*(1-a)+a),A=1-Math.min(1,o*(1-a)+a);return[n*255,u*255,A*255]};Ar.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a,n,u;return a=e*3.2406+r*-1.5372+o*-.4986,n=e*-.9689+r*1.8758+o*.0415,u=e*.0557+r*-.204+o*1.057,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,u=u>.0031308?1.055*u**(1/2.4)-.055:u*12.92,a=Math.min(Math.max(0,a),1),n=Math.min(Math.max(0,n),1),u=Math.min(Math.max(0,u),1),[a*255,n*255,u*255]};Ar.xyz.lab=function(t){let e=t[0],r=t[1],o=t[2];e/=95.047,r/=100,o/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let a=116*r-16,n=500*(e-r),u=200*(r-o);return[a,n,u]};Ar.lab.xyz=function(t){let e=t[0],r=t[1],o=t[2],a,n,u;n=(e+16)/116,a=r/500+n,u=n-o/200;let A=n**3,p=a**3,h=u**3;return n=A>.008856?A:(n-16/116)/7.787,a=p>.008856?p:(a-16/116)/7.787,u=h>.008856?h:(u-16/116)/7.787,a*=95.047,n*=100,u*=108.883,[a,n,u]};Ar.lab.lch=function(t){let e=t[0],r=t[1],o=t[2],a;a=Math.atan2(o,r)*360/2/Math.PI,a<0&&(a+=360);let u=Math.sqrt(r*r+o*o);return[e,u,a]};Ar.lch.lab=function(t){let e=t[0],r=t[1],a=t[2]/360*2*Math.PI,n=r*Math.cos(a),u=r*Math.sin(a);return[e,n,u]};Ar.rgb.ansi16=function(t,e=null){let[r,o,a]=t,n=e===null?Ar.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let u=30+(Math.round(a/255)<<2|Math.round(o/255)<<1|Math.round(r/255));return n===2&&(u+=60),u};Ar.hsv.ansi16=function(t){return Ar.rgb.ansi16(Ar.hsv.rgb(t),t[2])};Ar.rgb.ansi256=function(t){let e=t[0],r=t[1],o=t[2];return e===r&&r===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)};Ar.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let r=(~~(t>50)+1)*.5,o=(e&1)*r*255,a=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[o,a,n]};Ar.ansi256.rgb=function(t){if(t>=232){let n=(t-232)*10+8;return[n,n,n]}t-=16;let e,r=Math.floor(t/36)/5*255,o=Math.floor((e=t%36)/6)/5*255,a=e%6/5*255;return[r,o,a]};Ar.rgb.hex=function(t){let r=(((Math.round(t[0])&255)<<16)+((Math.round(t[1])&255)<<8)+(Math.round(t[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};Ar.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];e[0].length===3&&(r=r.split("").map(A=>A+A).join(""));let o=parseInt(r,16),a=o>>16&255,n=o>>8&255,u=o&255;return[a,n,u]};Ar.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.max(Math.max(e,r),o),n=Math.min(Math.min(e,r),o),u=a-n,A,p;return u<1?A=n/(1-u):A=0,u<=0?p=0:a===e?p=(r-o)/u%6:a===r?p=2+(o-e)/u:p=4+(e-r)/u,p/=6,p%=1,[p*360,u*100,A*100]};Ar.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=r<.5?2*e*r:2*e*(1-r),a=0;return o<1&&(a=(r-.5*o)/(1-o)),[t[0],o*100,a*100]};Ar.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=e*r,a=0;return o<1&&(a=(r-o)/(1-o)),[t[0],o*100,a*100]};Ar.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100;if(r===0)return[o*255,o*255,o*255];let a=[0,0,0],n=e%1*6,u=n%1,A=1-u,p=0;switch(Math.floor(n)){case 0:a[0]=1,a[1]=u,a[2]=0;break;case 1:a[0]=A,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=u;break;case 3:a[0]=0,a[1]=A,a[2]=1;break;case 4:a[0]=u,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=A}return p=(1-r)*o,[(r*a[0]+p)*255,(r*a[1]+p)*255,(r*a[2]+p)*255]};Ar.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e),a=0;return o>0&&(a=e/o),[t[0],a*100,o*100]};Ar.hcg.hsl=function(t){let e=t[1]/100,o=t[2]/100*(1-e)+.5*e,a=0;return o>0&&o<.5?a=e/(2*o):o>=.5&&o<1&&(a=e/(2*(1-o))),[t[0],a*100,o*100]};Ar.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e);return[t[0],(o-e)*100,(1-o)*100]};Ar.hwb.hcg=function(t){let e=t[1]/100,o=1-t[2]/100,a=o-e,n=0;return a<1&&(n=(o-a)/(1-a)),[t[0],a*100,n*100]};Ar.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};Ar.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};Ar.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};Ar.gray.hsl=function(t){return[0,0,t[0]]};Ar.gray.hsv=Ar.gray.hsl;Ar.gray.hwb=function(t){return[0,100,t[0]]};Ar.gray.cmyk=function(t){return[0,0,0,t[0]]};Ar.gray.lab=function(t){return[t[0],0,0]};Ar.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,o=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(o.length)+o};Ar.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var aX=_((BQt,oX)=>{var PP=AL();function C9e(){let t={},e=Object.keys(PP);for(let r=e.length,o=0;o{var fL=AL(),v9e=aX(),xy={},D9e=Object.keys(fL);function P9e(t){let e=function(...r){let o=r[0];return o==null?o:(o.length>1&&(r=o),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function S9e(t){let e=function(...r){let o=r[0];if(o==null)return o;o.length>1&&(r=o);let a=t(r);if(typeof a=="object")for(let n=a.length,u=0;u{xy[t]={},Object.defineProperty(xy[t],"channels",{value:fL[t].channels}),Object.defineProperty(xy[t],"labels",{value:fL[t].labels});let e=v9e(t);Object.keys(e).forEach(o=>{let a=e[o];xy[t][o]=S9e(a),xy[t][o].raw=P9e(a)})});lX.exports=xy});var BI=_((DQt,hX)=>{"use strict";var uX=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,AX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};5;${o}m`},fX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};2;${o[0]};${o[1]};${o[2]}m`},SP=t=>t,pX=(t,e,r)=>[t,e,r],by=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let o=r();return Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0}),o},enumerable:!0,configurable:!0})},pL,ky=(t,e,r,o)=>{pL===void 0&&(pL=cX());let a=o?10:0,n={};for(let[u,A]of Object.entries(pL)){let p=u==="ansi16"?"ansi":u;u===e?n[p]=t(r,a):typeof A=="object"&&(n[p]=t(A[e],a))}return n};function x9e(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[r,o]of Object.entries(e)){for(let[a,n]of Object.entries(o))e[a]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},o[a]=e[a],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:o,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",by(e.color,"ansi",()=>ky(uX,"ansi16",SP,!1)),by(e.color,"ansi256",()=>ky(AX,"ansi256",SP,!1)),by(e.color,"ansi16m",()=>ky(fX,"rgb",pX,!1)),by(e.bgColor,"ansi",()=>ky(uX,"ansi16",SP,!0)),by(e.bgColor,"ansi256",()=>ky(AX,"ansi256",SP,!0)),by(e.bgColor,"ansi16m",()=>ky(fX,"rgb",pX,!0)),e}Object.defineProperty(hX,"exports",{enumerable:!0,get:x9e})});var dX=_((PQt,gX)=>{"use strict";gX.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",o=e.indexOf(r+t),a=e.indexOf("--");return o!==-1&&(a===-1||o{"use strict";var b9e=Be("os"),mX=Be("tty"),Ml=dX(),{env:ls}=process,Kp;Ml("no-color")||Ml("no-colors")||Ml("color=false")||Ml("color=never")?Kp=0:(Ml("color")||Ml("colors")||Ml("color=true")||Ml("color=always"))&&(Kp=1);"FORCE_COLOR"in ls&&(ls.FORCE_COLOR==="true"?Kp=1:ls.FORCE_COLOR==="false"?Kp=0:Kp=ls.FORCE_COLOR.length===0?1:Math.min(parseInt(ls.FORCE_COLOR,10),3));function hL(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function gL(t,e){if(Kp===0)return 0;if(Ml("color=16m")||Ml("color=full")||Ml("color=truecolor"))return 3;if(Ml("color=256"))return 2;if(t&&!e&&Kp===void 0)return 0;let r=Kp||0;if(ls.TERM==="dumb")return r;if(process.platform==="win32"){let o=b9e.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in ls)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(o=>o in ls)||ls.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in ls)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ls.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in ls)return 1;if(ls.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ls){let o=parseInt((ls.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ls.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ls.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ls.TERM)||"COLORTERM"in ls?1:r}function k9e(t){let e=gL(t,t&&t.isTTY);return hL(e)}yX.exports={supportsColor:k9e,stdout:hL(gL(!0,mX.isatty(1))),stderr:hL(gL(!0,mX.isatty(2)))}});var CX=_((xQt,EX)=>{"use strict";var Q9e=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},F9e=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r -`:` -`)+r,a=o+1,o=t.indexOf(` -`,a)}while(o!==-1);return n+=t.substr(a),n};EX.exports={stringReplaceAll:Q9e,stringEncaseCRLFWithFirstIndex:F9e}});var DX=_((bQt,vX)=>{"use strict";var R9e=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,wX=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,T9e=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,L9e=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,N9e=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function BX(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):N9e.get(t)||t}function O9e(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(T9e))r.push(a[2].replace(L9e,(A,p,h)=>p?BX(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function M9e(t){wX.lastIndex=0;let e=[],r;for(;(r=wX.exec(t))!==null;){let o=r[1];if(r[2]){let a=O9e(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function IX(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}vX.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(R9e,(n,u,A,p,h,C)=>{if(u)a.push(BX(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:IX(t,r)(I)),r.push({inverse:A,styles:M9e(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(IX(t,r)(a.join(""))),a=[],r.pop()}else a.push(C)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var IL=_((kQt,bX)=>{"use strict";var vI=BI(),{stdout:yL,stderr:EL}=dL(),{stringReplaceAll:U9e,stringEncaseCRLFWithFirstIndex:_9e}=CX(),PX=["ansi","ansi","ansi256","ansi16m"],Qy=Object.create(null),H9e=(t,e={})=>{if(e.level>3||e.level<0)throw new Error("The `level` option should be an integer from 0 to 3");let r=yL?yL.level:0;t.level=e.level===void 0?r:e.level},CL=class{constructor(e){return SX(e)}},SX=t=>{let e={};return H9e(e,t),e.template=(...r)=>G9e(e.template,...r),Object.setPrototypeOf(e,xP.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=CL,e.template};function xP(t){return SX(t)}for(let[t,e]of Object.entries(vI))Qy[t]={get(){let r=bP(this,wL(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};Qy.visible={get(){let t=bP(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var xX=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of xX)Qy[t]={get(){let{level:e}=this;return function(...r){let o=wL(vI.color[PX[e]][t](...r),vI.color.close,this._styler);return bP(this,o,this._isEmpty)}}};for(let t of xX){let e="bg"+t[0].toUpperCase()+t.slice(1);Qy[e]={get(){let{level:r}=this;return function(...o){let a=wL(vI.bgColor[PX[r]][t](...o),vI.bgColor.close,this._styler);return bP(this,a,this._isEmpty)}}}}var j9e=Object.defineProperties(()=>{},{...Qy,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),wL=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},bP=(t,e,r)=>{let o=(...a)=>q9e(o,a.length===1?""+a[0]:a.join(" "));return o.__proto__=j9e,o._generator=t,o._styler=e,o._isEmpty=r,o},q9e=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=U9e(e,r.close,r.open),r=r.parent;let n=e.indexOf(` -`);return n!==-1&&(e=_9e(e,a,o,n)),o+e+a},mL,G9e=(t,...e)=>{let[r]=e;if(!Array.isArray(r))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";Ul.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Ul.find=(t,e)=>t.nodes.find(r=>r.type===e);Ul.exceedsLimit=(t,e,r=1,o)=>o===!1||!Ul.isInteger(t)||!Ul.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=o;Ul.escapeNode=(t,e=0,r)=>{let o=t.nodes[e];!o||(r&&o.type===r||o.type==="open"||o.type==="close")&&o.escaped!==!0&&(o.value="\\"+o.value,o.escaped=!0)};Ul.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;Ul.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:t.commas>>0+t.ranges>>0===0||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;Ul.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Ul.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Ul.flatten=(...t)=>{let e=[],r=o=>{for(let a=0;a{"use strict";var kX=kP();QX.exports=(t,e={})=>{let r=(o,a={})=>{let n=e.escapeInvalid&&kX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A="";if(o.value)return(n||u)&&kX.isOpenOrClose(o)?"\\"+o.value:o.value;if(o.value)return o.value;if(o.nodes)for(let p of o.nodes)A+=r(p);return A};return r(t)}});var RX=_((RQt,FX)=>{"use strict";FX.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var jX=_((TQt,HX)=>{"use strict";var TX=RX(),ud=(t,e,r)=>{if(TX(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(TX(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let o={relaxZeros:!0,...r};typeof o.strictZeros=="boolean"&&(o.relaxZeros=o.strictZeros===!1);let a=String(o.relaxZeros),n=String(o.shorthand),u=String(o.capture),A=String(o.wrap),p=t+":"+e+"="+a+n+u+A;if(ud.cache.hasOwnProperty(p))return ud.cache[p].result;let h=Math.min(t,e),C=Math.max(t,e);if(Math.abs(h-C)===1){let F=t+"|"+e;return o.capture?`(${F})`:o.wrap===!1?F:`(?:${F})`}let I=_X(t)||_X(e),v={min:t,max:e,a:h,b:C},b=[],E=[];if(I&&(v.isPadded=I,v.maxLen=String(v.max).length),h<0){let F=C<0?Math.abs(C):1;E=LX(F,Math.abs(h),v,o),h=v.a=0}return C>=0&&(b=LX(h,C,v,o)),v.negatives=E,v.positives=b,v.result=Y9e(E,b,o),o.capture===!0?v.result=`(${v.result})`:o.wrap!==!1&&b.length+E.length>1&&(v.result=`(?:${v.result})`),ud.cache[p]=v,v.result};function Y9e(t,e,r){let o=BL(t,e,"-",!1,r)||[],a=BL(e,t,"",!1,r)||[],n=BL(t,e,"-?",!0,r)||[];return o.concat(n).concat(a).join("|")}function W9e(t,e){let r=1,o=1,a=OX(t,r),n=new Set([e]);for(;t<=a&&a<=e;)n.add(a),r+=1,a=OX(t,r);for(a=MX(e+1,o)-1;t1&&A.count.pop(),A.count.push(C.count[0]),A.string=A.pattern+UX(A.count),u=h+1;continue}r.isPadded&&(I=X9e(h,r,o)),C.string=I+C.pattern+UX(C.count),n.push(C),u=h+1,A=C}return n}function BL(t,e,r,o,a){let n=[];for(let u of t){let{string:A}=u;!o&&!NX(e,"string",A)&&n.push(r+A),o&&NX(e,"string",A)&&n.push(r+A)}return n}function V9e(t,e){let r=[];for(let o=0;oe?1:e>t?-1:0}function NX(t,e,r){return t.some(o=>o[e]===r)}function OX(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function MX(t,e){return t-t%Math.pow(10,e)}function UX(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function J9e(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function _X(t){return/^-?(0+)\d/.test(t)}function X9e(t,e,r){if(!e.isPadded)return t;let o=Math.abs(e.maxLen-String(t).length),a=r.relaxZeros!==!1;switch(o){case 0:return"";case 1:return a?"0?":"0";case 2:return a?"0{0,2}":"00";default:return a?`0{0,${o}}`:`0{${o}}`}}ud.cache={};ud.clearCache=()=>ud.cache={};HX.exports=ud});var PL=_((LQt,JX)=>{"use strict";var Z9e=Be("util"),YX=jX(),qX=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),$9e=t=>e=>t===!0?Number(e):String(e),vL=t=>typeof t=="number"||typeof t=="string"&&t!=="",PI=t=>Number.isInteger(+t),DL=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},e7e=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,t7e=(t,e,r)=>{if(e>0){let o=t[0]==="-"?"-":"";o&&(t=t.slice(1)),t=o+t.padStart(o?e-1:e,"0")}return r===!1?String(t):t},GX=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((u,A)=>uA?1:0),t.positives.sort((u,A)=>uA?1:0);let r=e.capture?"":"?:",o="",a="",n;return t.positives.length&&(o=t.positives.join("|")),t.negatives.length&&(a=`-(${r}${t.negatives.join("|")})`),o&&a?n=`${o}|${a}`:n=o||a,e.wrap?`(${r}${n})`:n},WX=(t,e,r,o)=>{if(r)return YX(t,e,{wrap:!1,...o});let a=String.fromCharCode(t);if(t===e)return a;let n=String.fromCharCode(e);return`[${a}-${n}]`},KX=(t,e,r)=>{if(Array.isArray(t)){let o=r.wrap===!0,a=r.capture?"":"?:";return o?`(${a}${t.join("|")})`:t.join("|")}return YX(t,e,r)},VX=(...t)=>new RangeError("Invalid range arguments: "+Z9e.inspect(...t)),zX=(t,e,r)=>{if(r.strictRanges===!0)throw VX([t,e]);return[]},n7e=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},i7e=(t,e,r=1,o={})=>{let a=Number(t),n=Number(e);if(!Number.isInteger(a)||!Number.isInteger(n)){if(o.strictRanges===!0)throw VX([t,e]);return[]}a===0&&(a=0),n===0&&(n=0);let u=a>n,A=String(t),p=String(e),h=String(r);r=Math.max(Math.abs(r),1);let C=DL(A)||DL(p)||DL(h),I=C?Math.max(A.length,p.length,h.length):0,v=C===!1&&e7e(t,e,o)===!1,b=o.transform||$9e(v);if(o.toRegex&&r===1)return WX(GX(t,I),GX(e,I),!0,o);let E={negatives:[],positives:[]},F=z=>E[z<0?"negatives":"positives"].push(Math.abs(z)),N=[],U=0;for(;u?a>=n:a<=n;)o.toRegex===!0&&r>1?F(a):N.push(t7e(b(a,U),I,v)),a=u?a-r:a+r,U++;return o.toRegex===!0?r>1?r7e(E,o):KX(N,null,{wrap:!1,...o}):N},s7e=(t,e,r=1,o={})=>{if(!PI(t)&&t.length>1||!PI(e)&&e.length>1)return zX(t,e,o);let a=o.transform||(v=>String.fromCharCode(v)),n=`${t}`.charCodeAt(0),u=`${e}`.charCodeAt(0),A=n>u,p=Math.min(n,u),h=Math.max(n,u);if(o.toRegex&&r===1)return WX(p,h,!1,o);let C=[],I=0;for(;A?n>=u:n<=u;)C.push(a(n,I)),n=A?n-r:n+r,I++;return o.toRegex===!0?KX(C,null,{wrap:!1,options:o}):C},FP=(t,e,r,o={})=>{if(e==null&&vL(t))return[t];if(!vL(t)||!vL(e))return zX(t,e,o);if(typeof r=="function")return FP(t,e,1,{transform:r});if(qX(r))return FP(t,e,0,r);let a={...o};return a.capture===!0&&(a.wrap=!0),r=r||a.step||1,PI(r)?PI(t)&&PI(e)?i7e(t,e,r,a):s7e(t,e,Math.max(Math.abs(r),1),a):r!=null&&!qX(r)?n7e(r,a):FP(t,e,1,r)};JX.exports=FP});var $X=_((NQt,ZX)=>{"use strict";var o7e=PL(),XX=kP(),a7e=(t,e={})=>{let r=(o,a={})=>{let n=XX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A=n===!0||u===!0,p=e.escapeInvalid===!0?"\\":"",h="";if(o.isOpen===!0||o.isClose===!0)return p+o.value;if(o.type==="open")return A?p+o.value:"(";if(o.type==="close")return A?p+o.value:")";if(o.type==="comma")return o.prev.type==="comma"?"":A?o.value:"|";if(o.value)return o.value;if(o.nodes&&o.ranges>0){let C=XX.reduce(o.nodes),I=o7e(...C,{...e,wrap:!1,toRegex:!0});if(I.length!==0)return C.length>1&&I.length>1?`(${I})`:I}if(o.nodes)for(let C of o.nodes)h+=r(C,o);return h};return r(t)};ZX.exports=a7e});var rZ=_((OQt,tZ)=>{"use strict";var l7e=PL(),eZ=QP(),Fy=kP(),Ad=(t="",e="",r=!1)=>{let o=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Fy.flatten(e).map(a=>`{${a}}`):e;for(let a of t)if(Array.isArray(a))for(let n of a)o.push(Ad(n,e,r));else for(let n of e)r===!0&&typeof n=="string"&&(n=`{${n}}`),o.push(Array.isArray(n)?Ad(a,n,r):a+n);return Fy.flatten(o)},c7e=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,o=(a,n={})=>{a.queue=[];let u=n,A=n.queue;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,A=u.queue;if(a.invalid||a.dollar){A.push(Ad(A.pop(),eZ(a,e)));return}if(a.type==="brace"&&a.invalid!==!0&&a.nodes.length===2){A.push(Ad(A.pop(),["{}"]));return}if(a.nodes&&a.ranges>0){let I=Fy.reduce(a.nodes);if(Fy.exceedsLimit(...I,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let v=l7e(...I,e);v.length===0&&(v=eZ(a,e)),A.push(Ad(A.pop(),v)),a.nodes=[];return}let p=Fy.encloseBrace(a),h=a.queue,C=a;for(;C.type!=="brace"&&C.type!=="root"&&C.parent;)C=C.parent,h=C.queue;for(let I=0;I{"use strict";nZ.exports={MAX_LENGTH:1024*64,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:` -`,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var cZ=_((UQt,lZ)=>{"use strict";var u7e=QP(),{MAX_LENGTH:sZ,CHAR_BACKSLASH:SL,CHAR_BACKTICK:A7e,CHAR_COMMA:f7e,CHAR_DOT:p7e,CHAR_LEFT_PARENTHESES:h7e,CHAR_RIGHT_PARENTHESES:g7e,CHAR_LEFT_CURLY_BRACE:d7e,CHAR_RIGHT_CURLY_BRACE:m7e,CHAR_LEFT_SQUARE_BRACKET:oZ,CHAR_RIGHT_SQUARE_BRACKET:aZ,CHAR_DOUBLE_QUOTE:y7e,CHAR_SINGLE_QUOTE:E7e,CHAR_NO_BREAK_SPACE:C7e,CHAR_ZERO_WIDTH_NOBREAK_SPACE:w7e}=iZ(),I7e=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},o=typeof r.maxLength=="number"?Math.min(sZ,r.maxLength):sZ;if(t.length>o)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${o})`);let a={type:"root",input:t,nodes:[]},n=[a],u=a,A=a,p=0,h=t.length,C=0,I=0,v,b={},E=()=>t[C++],F=N=>{if(N.type==="text"&&A.type==="dot"&&(A.type="text"),A&&A.type==="text"&&N.type==="text"){A.value+=N.value;return}return u.nodes.push(N),N.parent=u,N.prev=A,A=N,N};for(F({type:"bos"});C0){if(u.ranges>0){u.ranges=0;let N=u.nodes.shift();u.nodes=[N,{type:"text",value:u7e(u)}]}F({type:"comma",value:v}),u.commas++;continue}if(v===p7e&&I>0&&u.commas===0){let N=u.nodes;if(I===0||N.length===0){F({type:"text",value:v});continue}if(A.type==="dot"){if(u.range=[],A.value+=v,A.type="range",u.nodes.length!==3&&u.nodes.length!==5){u.invalid=!0,u.ranges=0,A.type="text";continue}u.ranges++,u.args=[];continue}if(A.type==="range"){N.pop();let U=N[N.length-1];U.value+=A.value+v,A=U,u.ranges--;continue}F({type:"dot",value:v});continue}F({type:"text",value:v})}do if(u=n.pop(),u.type!=="root"){u.nodes.forEach(z=>{z.nodes||(z.type==="open"&&(z.isOpen=!0),z.type==="close"&&(z.isClose=!0),z.nodes||(z.type="text"),z.invalid=!0)});let N=n[n.length-1],U=N.nodes.indexOf(u);N.nodes.splice(U,1,...u.nodes)}while(n.length>0);return F({type:"eos"}),a};lZ.exports=I7e});var fZ=_((_Qt,AZ)=>{"use strict";var uZ=QP(),B7e=$X(),v7e=rZ(),D7e=cZ(),rl=(t,e={})=>{let r=[];if(Array.isArray(t))for(let o of t){let a=rl.create(o,e);Array.isArray(a)?r.push(...a):r.push(a)}else r=[].concat(rl.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};rl.parse=(t,e={})=>D7e(t,e);rl.stringify=(t,e={})=>uZ(typeof t=="string"?rl.parse(t,e):t,e);rl.compile=(t,e={})=>(typeof t=="string"&&(t=rl.parse(t,e)),B7e(t,e));rl.expand=(t,e={})=>{typeof t=="string"&&(t=rl.parse(t,e));let r=v7e(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};rl.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?rl.compile(t,e):rl.expand(t,e);AZ.exports=rl});var SI=_((HQt,mZ)=>{"use strict";var P7e=Be("path"),Ku="\\\\/",pZ=`[^${Ku}]`,Bf="\\.",S7e="\\+",x7e="\\?",RP="\\/",b7e="(?=.)",hZ="[^/]",xL=`(?:${RP}|$)`,gZ=`(?:^|${RP})`,bL=`${Bf}{1,2}${xL}`,k7e=`(?!${Bf})`,Q7e=`(?!${gZ}${bL})`,F7e=`(?!${Bf}{0,1}${xL})`,R7e=`(?!${bL})`,T7e=`[^.${RP}]`,L7e=`${hZ}*?`,dZ={DOT_LITERAL:Bf,PLUS_LITERAL:S7e,QMARK_LITERAL:x7e,SLASH_LITERAL:RP,ONE_CHAR:b7e,QMARK:hZ,END_ANCHOR:xL,DOTS_SLASH:bL,NO_DOT:k7e,NO_DOTS:Q7e,NO_DOT_SLASH:F7e,NO_DOTS_SLASH:R7e,QMARK_NO_DOT:T7e,STAR:L7e,START_ANCHOR:gZ},N7e={...dZ,SLASH_LITERAL:`[${Ku}]`,QMARK:pZ,STAR:`${pZ}*?`,DOTS_SLASH:`${Bf}{1,2}(?:[${Ku}]|$)`,NO_DOT:`(?!${Bf})`,NO_DOTS:`(?!(?:^|[${Ku}])${Bf}{1,2}(?:[${Ku}]|$))`,NO_DOT_SLASH:`(?!${Bf}{0,1}(?:[${Ku}]|$))`,NO_DOTS_SLASH:`(?!${Bf}{1,2}(?:[${Ku}]|$))`,QMARK_NO_DOT:`[^.${Ku}]`,START_ANCHOR:`(?:^|[${Ku}])`,END_ANCHOR:`(?:[${Ku}]|$)`},O7e={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};mZ.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:O7e,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:P7e.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?N7e:dZ}}});var xI=_(Pa=>{"use strict";var M7e=Be("path"),U7e=process.platform==="win32",{REGEX_BACKSLASH:_7e,REGEX_REMOVE_BACKSLASH:H7e,REGEX_SPECIAL_CHARS:j7e,REGEX_SPECIAL_CHARS_GLOBAL:q7e}=SI();Pa.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);Pa.hasRegexChars=t=>j7e.test(t);Pa.isRegexChar=t=>t.length===1&&Pa.hasRegexChars(t);Pa.escapeRegex=t=>t.replace(q7e,"\\$1");Pa.toPosixSlashes=t=>t.replace(_7e,"/");Pa.removeBackslashes=t=>t.replace(H7e,e=>e==="\\"?"":e);Pa.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};Pa.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:U7e===!0||M7e.sep==="\\";Pa.escapeLast=(t,e,r)=>{let o=t.lastIndexOf(e,r);return o===-1?t:t[o-1]==="\\"?Pa.escapeLast(t,e,o-1):`${t.slice(0,o)}\\${t.slice(o)}`};Pa.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};Pa.wrapOutput=(t,e={},r={})=>{let o=r.contains?"":"^",a=r.contains?"":"$",n=`${o}(?:${t})${a}`;return e.negated===!0&&(n=`(?:^(?!${n}).*$)`),n}});var DZ=_((qQt,vZ)=>{"use strict";var yZ=xI(),{CHAR_ASTERISK:kL,CHAR_AT:G7e,CHAR_BACKWARD_SLASH:bI,CHAR_COMMA:Y7e,CHAR_DOT:QL,CHAR_EXCLAMATION_MARK:FL,CHAR_FORWARD_SLASH:BZ,CHAR_LEFT_CURLY_BRACE:RL,CHAR_LEFT_PARENTHESES:TL,CHAR_LEFT_SQUARE_BRACKET:W7e,CHAR_PLUS:K7e,CHAR_QUESTION_MARK:EZ,CHAR_RIGHT_CURLY_BRACE:V7e,CHAR_RIGHT_PARENTHESES:CZ,CHAR_RIGHT_SQUARE_BRACKET:z7e}=SI(),wZ=t=>t===BZ||t===bI,IZ=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},J7e=(t,e)=>{let r=e||{},o=t.length-1,a=r.parts===!0||r.scanToEnd===!0,n=[],u=[],A=[],p=t,h=-1,C=0,I=0,v=!1,b=!1,E=!1,F=!1,N=!1,U=!1,z=!1,te=!1,le=!1,pe=!1,ue=0,ye,ae,Ie={value:"",depth:0,isGlob:!1},Fe=()=>h>=o,g=()=>p.charCodeAt(h+1),Ee=()=>(ye=ae,p.charCodeAt(++h));for(;h0&&(ce=p.slice(0,C),p=p.slice(C),I-=C),De&&E===!0&&I>0?(De=p.slice(0,I),ne=p.slice(I)):E===!0?(De="",ne=p):De=p,De&&De!==""&&De!=="/"&&De!==p&&wZ(De.charCodeAt(De.length-1))&&(De=De.slice(0,-1)),r.unescape===!0&&(ne&&(ne=yZ.removeBackslashes(ne)),De&&z===!0&&(De=yZ.removeBackslashes(De)));let ee={prefix:ce,input:t,start:C,base:De,glob:ne,isBrace:v,isBracket:b,isGlob:E,isExtglob:F,isGlobstar:N,negated:te,negatedExtglob:le};if(r.tokens===!0&&(ee.maxDepth=0,wZ(ae)||u.push(Ie),ee.tokens=u),r.parts===!0||r.tokens===!0){let we;for(let be=0;be{"use strict";var TP=SI(),nl=xI(),{MAX_LENGTH:LP,POSIX_REGEX_SOURCE:X7e,REGEX_NON_SPECIAL_CHARS:Z7e,REGEX_SPECIAL_CHARS_BACKREF:$7e,REPLACEMENTS:PZ}=TP,eYe=(t,e)=>{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();let r=`[${t.join("-")}]`;try{new RegExp(r)}catch{return t.map(a=>nl.escapeRegex(a)).join("..")}return r},Ry=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,LL=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=PZ[t]||t;let r={...e},o=typeof r.maxLength=="number"?Math.min(LP,r.maxLength):LP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);let n={type:"bos",value:"",output:r.prepend||""},u=[n],A=r.capture?"":"?:",p=nl.isWindows(e),h=TP.globChars(p),C=TP.extglobChars(h),{DOT_LITERAL:I,PLUS_LITERAL:v,SLASH_LITERAL:b,ONE_CHAR:E,DOTS_SLASH:F,NO_DOT:N,NO_DOT_SLASH:U,NO_DOTS_SLASH:z,QMARK:te,QMARK_NO_DOT:le,STAR:pe,START_ANCHOR:ue}=h,ye=x=>`(${A}(?:(?!${ue}${x.dot?F:I}).)*?)`,ae=r.dot?"":N,Ie=r.dot?te:le,Fe=r.bash===!0?ye(r):pe;r.capture&&(Fe=`(${Fe})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let g={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:u};t=nl.removePrefix(t,g),a=t.length;let Ee=[],De=[],ce=[],ne=n,ee,we=()=>g.index===a-1,be=g.peek=(x=1)=>t[g.index+x],ht=g.advance=()=>t[++g.index]||"",H=()=>t.slice(g.index+1),lt=(x="",w=0)=>{g.consumed+=x,g.index+=w},Te=x=>{g.output+=x.output!=null?x.output:x.value,lt(x.value)},ke=()=>{let x=1;for(;be()==="!"&&(be(2)!=="("||be(3)==="?");)ht(),g.start++,x++;return x%2===0?!1:(g.negated=!0,g.start++,!0)},xe=x=>{g[x]++,ce.push(x)},He=x=>{g[x]--,ce.pop()},Re=x=>{if(ne.type==="globstar"){let w=g.braces>0&&(x.type==="comma"||x.type==="brace"),S=x.extglob===!0||Ee.length&&(x.type==="pipe"||x.type==="paren");x.type!=="slash"&&x.type!=="paren"&&!w&&!S&&(g.output=g.output.slice(0,-ne.output.length),ne.type="star",ne.value="*",ne.output=Fe,g.output+=ne.output)}if(Ee.length&&x.type!=="paren"&&(Ee[Ee.length-1].inner+=x.value),(x.value||x.output)&&Te(x),ne&&ne.type==="text"&&x.type==="text"){ne.value+=x.value,ne.output=(ne.output||"")+x.value;return}x.prev=ne,u.push(x),ne=x},ze=(x,w)=>{let S={...C[w],conditions:1,inner:""};S.prev=ne,S.parens=g.parens,S.output=g.output;let y=(r.capture?"(":"")+S.open;xe("parens"),Re({type:x,value:w,output:g.output?"":E}),Re({type:"paren",extglob:!0,value:ht(),output:y}),Ee.push(S)},je=x=>{let w=x.close+(r.capture?")":""),S;if(x.type==="negate"){let y=Fe;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(y=ye(r)),(y!==Fe||we()||/^\)+$/.test(H()))&&(w=x.close=`)$))${y}`),x.inner.includes("*")&&(S=H())&&/^\.[^\\/.]+$/.test(S)){let R=LL(S,{...e,fastpaths:!1}).output;w=x.close=`)${R})${y})`}x.prev.type==="bos"&&(g.negatedExtglob=!0)}Re({type:"paren",extglob:!0,value:ee,output:w}),He("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,w=t.replace($7e,(S,y,R,J,X,Z)=>J==="\\"?(x=!0,S):J==="?"?y?y+J+(X?te.repeat(X.length):""):Z===0?Ie+(X?te.repeat(X.length):""):te.repeat(R.length):J==="."?I.repeat(R.length):J==="*"?y?y+J+(X?Fe:""):Fe:y?S:`\\${S}`);return x===!0&&(r.unescape===!0?w=w.replace(/\\/g,""):w=w.replace(/\\+/g,S=>S.length%2===0?"\\\\":S?"\\":"")),w===t&&r.contains===!0?(g.output=t,g):(g.output=nl.wrapOutput(w,g,e),g)}for(;!we();){if(ee=ht(),ee==="\0")continue;if(ee==="\\"){let S=be();if(S==="/"&&r.bash!==!0||S==="."||S===";")continue;if(!S){ee+="\\",Re({type:"text",value:ee});continue}let y=/^\\+/.exec(H()),R=0;if(y&&y[0].length>2&&(R=y[0].length,g.index+=R,R%2!==0&&(ee+="\\")),r.unescape===!0?ee=ht():ee+=ht(),g.brackets===0){Re({type:"text",value:ee});continue}}if(g.brackets>0&&(ee!=="]"||ne.value==="["||ne.value==="[^")){if(r.posix!==!1&&ee===":"){let S=ne.value.slice(1);if(S.includes("[")&&(ne.posix=!0,S.includes(":"))){let y=ne.value.lastIndexOf("["),R=ne.value.slice(0,y),J=ne.value.slice(y+2),X=X7e[J];if(X){ne.value=R+X,g.backtrack=!0,ht(),!n.output&&u.indexOf(ne)===1&&(n.output=E);continue}}}(ee==="["&&be()!==":"||ee==="-"&&be()==="]")&&(ee=`\\${ee}`),ee==="]"&&(ne.value==="["||ne.value==="[^")&&(ee=`\\${ee}`),r.posix===!0&&ee==="!"&&ne.value==="["&&(ee="^"),ne.value+=ee,Te({value:ee});continue}if(g.quotes===1&&ee!=='"'){ee=nl.escapeRegex(ee),ne.value+=ee,Te({value:ee});continue}if(ee==='"'){g.quotes=g.quotes===1?0:1,r.keepQuotes===!0&&Re({type:"text",value:ee});continue}if(ee==="("){xe("parens"),Re({type:"paren",value:ee});continue}if(ee===")"){if(g.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Ry("opening","("));let S=Ee[Ee.length-1];if(S&&g.parens===S.parens+1){je(Ee.pop());continue}Re({type:"paren",value:ee,output:g.parens?")":"\\)"}),He("parens");continue}if(ee==="["){if(r.nobracket===!0||!H().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Ry("closing","]"));ee=`\\${ee}`}else xe("brackets");Re({type:"bracket",value:ee});continue}if(ee==="]"){if(r.nobracket===!0||ne&&ne.type==="bracket"&&ne.value.length===1){Re({type:"text",value:ee,output:`\\${ee}`});continue}if(g.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(Ry("opening","["));Re({type:"text",value:ee,output:`\\${ee}`});continue}He("brackets");let S=ne.value.slice(1);if(ne.posix!==!0&&S[0]==="^"&&!S.includes("/")&&(ee=`/${ee}`),ne.value+=ee,Te({value:ee}),r.literalBrackets===!1||nl.hasRegexChars(S))continue;let y=nl.escapeRegex(ne.value);if(g.output=g.output.slice(0,-ne.value.length),r.literalBrackets===!0){g.output+=y,ne.value=y;continue}ne.value=`(${A}${y}|${ne.value})`,g.output+=ne.value;continue}if(ee==="{"&&r.nobrace!==!0){xe("braces");let S={type:"brace",value:ee,output:"(",outputIndex:g.output.length,tokensIndex:g.tokens.length};De.push(S),Re(S);continue}if(ee==="}"){let S=De[De.length-1];if(r.nobrace===!0||!S){Re({type:"text",value:ee,output:ee});continue}let y=")";if(S.dots===!0){let R=u.slice(),J=[];for(let X=R.length-1;X>=0&&(u.pop(),R[X].type!=="brace");X--)R[X].type!=="dots"&&J.unshift(R[X].value);y=eYe(J,r),g.backtrack=!0}if(S.comma!==!0&&S.dots!==!0){let R=g.output.slice(0,S.outputIndex),J=g.tokens.slice(S.tokensIndex);S.value=S.output="\\{",ee=y="\\}",g.output=R;for(let X of J)g.output+=X.output||X.value}Re({type:"brace",value:ee,output:y}),He("braces"),De.pop();continue}if(ee==="|"){Ee.length>0&&Ee[Ee.length-1].conditions++,Re({type:"text",value:ee});continue}if(ee===","){let S=ee,y=De[De.length-1];y&&ce[ce.length-1]==="braces"&&(y.comma=!0,S="|"),Re({type:"comma",value:ee,output:S});continue}if(ee==="/"){if(ne.type==="dot"&&g.index===g.start+1){g.start=g.index+1,g.consumed="",g.output="",u.pop(),ne=n;continue}Re({type:"slash",value:ee,output:b});continue}if(ee==="."){if(g.braces>0&&ne.type==="dot"){ne.value==="."&&(ne.output=I);let S=De[De.length-1];ne.type="dots",ne.output+=ee,ne.value+=ee,S.dots=!0;continue}if(g.braces+g.parens===0&&ne.type!=="bos"&&ne.type!=="slash"){Re({type:"text",value:ee,output:I});continue}Re({type:"dot",value:ee,output:I});continue}if(ee==="?"){if(!(ne&&ne.value==="(")&&r.noextglob!==!0&&be()==="("&&be(2)!=="?"){ze("qmark",ee);continue}if(ne&&ne.type==="paren"){let y=be(),R=ee;if(y==="<"&&!nl.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(ne.value==="("&&!/[!=<:]/.test(y)||y==="<"&&!/<([!=]|\w+>)/.test(H()))&&(R=`\\${ee}`),Re({type:"text",value:ee,output:R});continue}if(r.dot!==!0&&(ne.type==="slash"||ne.type==="bos")){Re({type:"qmark",value:ee,output:le});continue}Re({type:"qmark",value:ee,output:te});continue}if(ee==="!"){if(r.noextglob!==!0&&be()==="("&&(be(2)!=="?"||!/[!=<:]/.test(be(3)))){ze("negate",ee);continue}if(r.nonegate!==!0&&g.index===0){ke();continue}}if(ee==="+"){if(r.noextglob!==!0&&be()==="("&&be(2)!=="?"){ze("plus",ee);continue}if(ne&&ne.value==="("||r.regex===!1){Re({type:"plus",value:ee,output:v});continue}if(ne&&(ne.type==="bracket"||ne.type==="paren"||ne.type==="brace")||g.parens>0){Re({type:"plus",value:ee});continue}Re({type:"plus",value:v});continue}if(ee==="@"){if(r.noextglob!==!0&&be()==="("&&be(2)!=="?"){Re({type:"at",extglob:!0,value:ee,output:""});continue}Re({type:"text",value:ee});continue}if(ee!=="*"){(ee==="$"||ee==="^")&&(ee=`\\${ee}`);let S=Z7e.exec(H());S&&(ee+=S[0],g.index+=S[0].length),Re({type:"text",value:ee});continue}if(ne&&(ne.type==="globstar"||ne.star===!0)){ne.type="star",ne.star=!0,ne.value+=ee,ne.output=Fe,g.backtrack=!0,g.globstar=!0,lt(ee);continue}let x=H();if(r.noextglob!==!0&&/^\([^?]/.test(x)){ze("star",ee);continue}if(ne.type==="star"){if(r.noglobstar===!0){lt(ee);continue}let S=ne.prev,y=S.prev,R=S.type==="slash"||S.type==="bos",J=y&&(y.type==="star"||y.type==="globstar");if(r.bash===!0&&(!R||x[0]&&x[0]!=="/")){Re({type:"star",value:ee,output:""});continue}let X=g.braces>0&&(S.type==="comma"||S.type==="brace"),Z=Ee.length&&(S.type==="pipe"||S.type==="paren");if(!R&&S.type!=="paren"&&!X&&!Z){Re({type:"star",value:ee,output:""});continue}for(;x.slice(0,3)==="/**";){let ie=t[g.index+4];if(ie&&ie!=="/")break;x=x.slice(3),lt("/**",3)}if(S.type==="bos"&&we()){ne.type="globstar",ne.value+=ee,ne.output=ye(r),g.output=ne.output,g.globstar=!0,lt(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&!J&&we()){g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=ye(r)+(r.strictSlashes?")":"|$)"),ne.value+=ee,g.globstar=!0,g.output+=S.output+ne.output,lt(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&x[0]==="/"){let ie=x[1]!==void 0?"|$":"";g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=`${ye(r)}${b}|${b}${ie})`,ne.value+=ee,g.output+=S.output+ne.output,g.globstar=!0,lt(ee+ht()),Re({type:"slash",value:"/",output:""});continue}if(S.type==="bos"&&x[0]==="/"){ne.type="globstar",ne.value+=ee,ne.output=`(?:^|${b}|${ye(r)}${b})`,g.output=ne.output,g.globstar=!0,lt(ee+ht()),Re({type:"slash",value:"/",output:""});continue}g.output=g.output.slice(0,-ne.output.length),ne.type="globstar",ne.output=ye(r),ne.value+=ee,g.output+=ne.output,g.globstar=!0,lt(ee);continue}let w={type:"star",value:ee,output:Fe};if(r.bash===!0){w.output=".*?",(ne.type==="bos"||ne.type==="slash")&&(w.output=ae+w.output),Re(w);continue}if(ne&&(ne.type==="bracket"||ne.type==="paren")&&r.regex===!0){w.output=ee,Re(w);continue}(g.index===g.start||ne.type==="slash"||ne.type==="dot")&&(ne.type==="dot"?(g.output+=U,ne.output+=U):r.dot===!0?(g.output+=z,ne.output+=z):(g.output+=ae,ne.output+=ae),be()!=="*"&&(g.output+=E,ne.output+=E)),Re(w)}for(;g.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ry("closing","]"));g.output=nl.escapeLast(g.output,"["),He("brackets")}for(;g.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ry("closing",")"));g.output=nl.escapeLast(g.output,"("),He("parens")}for(;g.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ry("closing","}"));g.output=nl.escapeLast(g.output,"{"),He("braces")}if(r.strictSlashes!==!0&&(ne.type==="star"||ne.type==="bracket")&&Re({type:"maybe_slash",value:"",output:`${b}?`}),g.backtrack===!0){g.output="";for(let x of g.tokens)g.output+=x.output!=null?x.output:x.value,x.suffix&&(g.output+=x.suffix)}return g};LL.fastpaths=(t,e)=>{let r={...e},o=typeof r.maxLength=="number"?Math.min(LP,r.maxLength):LP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);t=PZ[t]||t;let n=nl.isWindows(e),{DOT_LITERAL:u,SLASH_LITERAL:A,ONE_CHAR:p,DOTS_SLASH:h,NO_DOT:C,NO_DOTS:I,NO_DOTS_SLASH:v,STAR:b,START_ANCHOR:E}=TP.globChars(n),F=r.dot?I:C,N=r.dot?v:C,U=r.capture?"":"?:",z={negated:!1,prefix:""},te=r.bash===!0?".*?":b;r.capture&&(te=`(${te})`);let le=ae=>ae.noglobstar===!0?te:`(${U}(?:(?!${E}${ae.dot?h:u}).)*?)`,pe=ae=>{switch(ae){case"*":return`${F}${p}${te}`;case".*":return`${u}${p}${te}`;case"*.*":return`${F}${te}${u}${p}${te}`;case"*/*":return`${F}${te}${A}${p}${N}${te}`;case"**":return F+le(r);case"**/*":return`(?:${F}${le(r)}${A})?${N}${p}${te}`;case"**/*.*":return`(?:${F}${le(r)}${A})?${N}${te}${u}${p}${te}`;case"**/.*":return`(?:${F}${le(r)}${A})?${u}${p}${te}`;default:{let Ie=/^(.*?)\.(\w+)$/.exec(ae);if(!Ie)return;let Fe=pe(Ie[1]);return Fe?Fe+u+Ie[2]:void 0}}},ue=nl.removePrefix(t,z),ye=pe(ue);return ye&&r.strictSlashes!==!0&&(ye+=`${A}?`),ye};SZ.exports=LL});var kZ=_((YQt,bZ)=>{"use strict";var tYe=Be("path"),rYe=DZ(),NL=xZ(),OL=xI(),nYe=SI(),iYe=t=>t&&typeof t=="object"&&!Array.isArray(t),Mi=(t,e,r=!1)=>{if(Array.isArray(t)){let C=t.map(v=>Mi(v,e,r));return v=>{for(let b of C){let E=b(v);if(E)return E}return!1}}let o=iYe(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!o)throw new TypeError("Expected pattern to be a non-empty string");let a=e||{},n=OL.isWindows(e),u=o?Mi.compileRe(t,e):Mi.makeRe(t,e,!1,!0),A=u.state;delete u.state;let p=()=>!1;if(a.ignore){let C={...e,ignore:null,onMatch:null,onResult:null};p=Mi(a.ignore,C,r)}let h=(C,I=!1)=>{let{isMatch:v,match:b,output:E}=Mi.test(C,u,e,{glob:t,posix:n}),F={glob:t,state:A,regex:u,posix:n,input:C,output:E,match:b,isMatch:v};return typeof a.onResult=="function"&&a.onResult(F),v===!1?(F.isMatch=!1,I?F:!1):p(C)?(typeof a.onIgnore=="function"&&a.onIgnore(F),F.isMatch=!1,I?F:!1):(typeof a.onMatch=="function"&&a.onMatch(F),I?F:!0)};return r&&(h.state=A),h};Mi.test=(t,e,r,{glob:o,posix:a}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let n=r||{},u=n.format||(a?OL.toPosixSlashes:null),A=t===o,p=A&&u?u(t):t;return A===!1&&(p=u?u(t):t,A=p===o),(A===!1||n.capture===!0)&&(n.matchBase===!0||n.basename===!0?A=Mi.matchBase(t,e,r,a):A=e.exec(p)),{isMatch:Boolean(A),match:A,output:p}};Mi.matchBase=(t,e,r,o=OL.isWindows(r))=>(e instanceof RegExp?e:Mi.makeRe(e,r)).test(tYe.basename(t));Mi.isMatch=(t,e,r)=>Mi(e,r)(t);Mi.parse=(t,e)=>Array.isArray(t)?t.map(r=>Mi.parse(r,e)):NL(t,{...e,fastpaths:!1});Mi.scan=(t,e)=>rYe(t,e);Mi.compileRe=(t,e,r=!1,o=!1)=>{if(r===!0)return t.output;let a=e||{},n=a.contains?"":"^",u=a.contains?"":"$",A=`${n}(?:${t.output})${u}`;t&&t.negated===!0&&(A=`^(?!${A}).*$`);let p=Mi.toRegex(A,e);return o===!0&&(p.state=t),p};Mi.makeRe=(t,e={},r=!1,o=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let a={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(a.output=NL.fastpaths(t,e)),a.output||(a=NL(t,e)),Mi.compileRe(a,e,r,o)};Mi.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};Mi.constants=nYe;bZ.exports=Mi});var FZ=_((WQt,QZ)=>{"use strict";QZ.exports=kZ()});var Zo=_((KQt,NZ)=>{"use strict";var TZ=Be("util"),LZ=fZ(),Vu=FZ(),ML=xI(),RZ=t=>t===""||t==="./",yi=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let o=new Set,a=new Set,n=new Set,u=0,A=C=>{n.add(C.output),r&&r.onResult&&r.onResult(C)};for(let C=0;C!o.has(C));if(r&&h.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(C=>C.replace(/\\/g,"")):e}return h};yi.match=yi;yi.matcher=(t,e)=>Vu(t,e);yi.isMatch=(t,e,r)=>Vu(e,r)(t);yi.any=yi.isMatch;yi.not=(t,e,r={})=>{e=[].concat(e).map(String);let o=new Set,a=[],n=A=>{r.onResult&&r.onResult(A),a.push(A.output)},u=new Set(yi(t,e,{...r,onResult:n}));for(let A of a)u.has(A)||o.add(A);return[...o]};yi.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${TZ.inspect(t)}"`);if(Array.isArray(e))return e.some(o=>yi.contains(t,o,r));if(typeof e=="string"){if(RZ(t)||RZ(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return yi.isMatch(t,e,{...r,contains:!0})};yi.matchKeys=(t,e,r)=>{if(!ML.isObject(t))throw new TypeError("Expected the first argument to be an object");let o=yi(Object.keys(t),e,r),a={};for(let n of o)a[n]=t[n];return a};yi.some=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Vu(String(a),r);if(o.some(u=>n(u)))return!0}return!1};yi.every=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Vu(String(a),r);if(!o.every(u=>n(u)))return!1}return!0};yi.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${TZ.inspect(t)}"`);return[].concat(e).every(o=>Vu(o,r)(t))};yi.capture=(t,e,r)=>{let o=ML.isWindows(r),n=Vu.makeRe(String(t),{...r,capture:!0}).exec(o?ML.toPosixSlashes(e):e);if(n)return n.slice(1).map(u=>u===void 0?"":u)};yi.makeRe=(...t)=>Vu.makeRe(...t);yi.scan=(...t)=>Vu.scan(...t);yi.parse=(t,e)=>{let r=[];for(let o of[].concat(t||[]))for(let a of LZ(String(o),e))r.push(Vu.parse(a,e));return r};yi.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:LZ(t,e)};yi.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return yi.braces(t,{...e,expand:!0})};NZ.exports=yi});var MZ=_((VQt,OZ)=>{"use strict";OZ.exports=({onlyFirst:t=!1}={})=>{let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}});var NP=_((zQt,UZ)=>{"use strict";var sYe=MZ();UZ.exports=t=>typeof t=="string"?t.replace(sYe(),""):t});var HZ=_((JQt,_Z)=>{function oYe(){this.__data__=[],this.size=0}_Z.exports=oYe});var Ty=_((XQt,jZ)=>{function aYe(t,e){return t===e||t!==t&&e!==e}jZ.exports=aYe});var kI=_((ZQt,qZ)=>{var lYe=Ty();function cYe(t,e){for(var r=t.length;r--;)if(lYe(t[r][0],e))return r;return-1}qZ.exports=cYe});var YZ=_(($Qt,GZ)=>{var uYe=kI(),AYe=Array.prototype,fYe=AYe.splice;function pYe(t){var e=this.__data__,r=uYe(e,t);if(r<0)return!1;var o=e.length-1;return r==o?e.pop():fYe.call(e,r,1),--this.size,!0}GZ.exports=pYe});var KZ=_((eFt,WZ)=>{var hYe=kI();function gYe(t){var e=this.__data__,r=hYe(e,t);return r<0?void 0:e[r][1]}WZ.exports=gYe});var zZ=_((tFt,VZ)=>{var dYe=kI();function mYe(t){return dYe(this.__data__,t)>-1}VZ.exports=mYe});var XZ=_((rFt,JZ)=>{var yYe=kI();function EYe(t,e){var r=this.__data__,o=yYe(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}JZ.exports=EYe});var QI=_((nFt,ZZ)=>{var CYe=HZ(),wYe=YZ(),IYe=KZ(),BYe=zZ(),vYe=XZ();function Ly(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var DYe=QI();function PYe(){this.__data__=new DYe,this.size=0}$Z.exports=PYe});var r$=_((sFt,t$)=>{function SYe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}t$.exports=SYe});var i$=_((oFt,n$)=>{function xYe(t){return this.__data__.get(t)}n$.exports=xYe});var o$=_((aFt,s$)=>{function bYe(t){return this.__data__.has(t)}s$.exports=bYe});var UL=_((lFt,a$)=>{var kYe=typeof global=="object"&&global&&global.Object===Object&&global;a$.exports=kYe});var _l=_((cFt,l$)=>{var QYe=UL(),FYe=typeof self=="object"&&self&&self.Object===Object&&self,RYe=QYe||FYe||Function("return this")();l$.exports=RYe});var fd=_((uFt,c$)=>{var TYe=_l(),LYe=TYe.Symbol;c$.exports=LYe});var p$=_((AFt,f$)=>{var u$=fd(),A$=Object.prototype,NYe=A$.hasOwnProperty,OYe=A$.toString,FI=u$?u$.toStringTag:void 0;function MYe(t){var e=NYe.call(t,FI),r=t[FI];try{t[FI]=void 0;var o=!0}catch{}var a=OYe.call(t);return o&&(e?t[FI]=r:delete t[FI]),a}f$.exports=MYe});var g$=_((fFt,h$)=>{var UYe=Object.prototype,_Ye=UYe.toString;function HYe(t){return _Ye.call(t)}h$.exports=HYe});var pd=_((pFt,y$)=>{var d$=fd(),jYe=p$(),qYe=g$(),GYe="[object Null]",YYe="[object Undefined]",m$=d$?d$.toStringTag:void 0;function WYe(t){return t==null?t===void 0?YYe:GYe:m$&&m$ in Object(t)?jYe(t):qYe(t)}y$.exports=WYe});var il=_((hFt,E$)=>{function KYe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}E$.exports=KYe});var OP=_((gFt,C$)=>{var VYe=pd(),zYe=il(),JYe="[object AsyncFunction]",XYe="[object Function]",ZYe="[object GeneratorFunction]",$Ye="[object Proxy]";function eWe(t){if(!zYe(t))return!1;var e=VYe(t);return e==XYe||e==ZYe||e==JYe||e==$Ye}C$.exports=eWe});var I$=_((dFt,w$)=>{var tWe=_l(),rWe=tWe["__core-js_shared__"];w$.exports=rWe});var D$=_((mFt,v$)=>{var _L=I$(),B$=function(){var t=/[^.]+$/.exec(_L&&_L.keys&&_L.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function nWe(t){return!!B$&&B$ in t}v$.exports=nWe});var HL=_((yFt,P$)=>{var iWe=Function.prototype,sWe=iWe.toString;function oWe(t){if(t!=null){try{return sWe.call(t)}catch{}try{return t+""}catch{}}return""}P$.exports=oWe});var x$=_((EFt,S$)=>{var aWe=OP(),lWe=D$(),cWe=il(),uWe=HL(),AWe=/[\\^$.*+?()[\]{}|]/g,fWe=/^\[object .+?Constructor\]$/,pWe=Function.prototype,hWe=Object.prototype,gWe=pWe.toString,dWe=hWe.hasOwnProperty,mWe=RegExp("^"+gWe.call(dWe).replace(AWe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function yWe(t){if(!cWe(t)||lWe(t))return!1;var e=aWe(t)?mWe:fWe;return e.test(uWe(t))}S$.exports=yWe});var k$=_((CFt,b$)=>{function EWe(t,e){return t?.[e]}b$.exports=EWe});var Vp=_((wFt,Q$)=>{var CWe=x$(),wWe=k$();function IWe(t,e){var r=wWe(t,e);return CWe(r)?r:void 0}Q$.exports=IWe});var MP=_((IFt,F$)=>{var BWe=Vp(),vWe=_l(),DWe=BWe(vWe,"Map");F$.exports=DWe});var RI=_((BFt,R$)=>{var PWe=Vp(),SWe=PWe(Object,"create");R$.exports=SWe});var N$=_((vFt,L$)=>{var T$=RI();function xWe(){this.__data__=T$?T$(null):{},this.size=0}L$.exports=xWe});var M$=_((DFt,O$)=>{function bWe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}O$.exports=bWe});var _$=_((PFt,U$)=>{var kWe=RI(),QWe="__lodash_hash_undefined__",FWe=Object.prototype,RWe=FWe.hasOwnProperty;function TWe(t){var e=this.__data__;if(kWe){var r=e[t];return r===QWe?void 0:r}return RWe.call(e,t)?e[t]:void 0}U$.exports=TWe});var j$=_((SFt,H$)=>{var LWe=RI(),NWe=Object.prototype,OWe=NWe.hasOwnProperty;function MWe(t){var e=this.__data__;return LWe?e[t]!==void 0:OWe.call(e,t)}H$.exports=MWe});var G$=_((xFt,q$)=>{var UWe=RI(),_We="__lodash_hash_undefined__";function HWe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=UWe&&e===void 0?_We:e,this}q$.exports=HWe});var W$=_((bFt,Y$)=>{var jWe=N$(),qWe=M$(),GWe=_$(),YWe=j$(),WWe=G$();function Ny(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var K$=W$(),KWe=QI(),VWe=MP();function zWe(){this.size=0,this.__data__={hash:new K$,map:new(VWe||KWe),string:new K$}}V$.exports=zWe});var X$=_((QFt,J$)=>{function JWe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}J$.exports=JWe});var TI=_((FFt,Z$)=>{var XWe=X$();function ZWe(t,e){var r=t.__data__;return XWe(e)?r[typeof e=="string"?"string":"hash"]:r.map}Z$.exports=ZWe});var eee=_((RFt,$$)=>{var $We=TI();function eKe(t){var e=$We(this,t).delete(t);return this.size-=e?1:0,e}$$.exports=eKe});var ree=_((TFt,tee)=>{var tKe=TI();function rKe(t){return tKe(this,t).get(t)}tee.exports=rKe});var iee=_((LFt,nee)=>{var nKe=TI();function iKe(t){return nKe(this,t).has(t)}nee.exports=iKe});var oee=_((NFt,see)=>{var sKe=TI();function oKe(t,e){var r=sKe(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}see.exports=oKe});var UP=_((OFt,aee)=>{var aKe=z$(),lKe=eee(),cKe=ree(),uKe=iee(),AKe=oee();function Oy(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var fKe=QI(),pKe=MP(),hKe=UP(),gKe=200;function dKe(t,e){var r=this.__data__;if(r instanceof fKe){var o=r.__data__;if(!pKe||o.length{var mKe=QI(),yKe=e$(),EKe=r$(),CKe=i$(),wKe=o$(),IKe=cee();function My(t){var e=this.__data__=new mKe(t);this.size=e.size}My.prototype.clear=yKe;My.prototype.delete=EKe;My.prototype.get=CKe;My.prototype.has=wKe;My.prototype.set=IKe;uee.exports=My});var fee=_((_Ft,Aee)=>{var BKe="__lodash_hash_undefined__";function vKe(t){return this.__data__.set(t,BKe),this}Aee.exports=vKe});var hee=_((HFt,pee)=>{function DKe(t){return this.__data__.has(t)}pee.exports=DKe});var dee=_((jFt,gee)=>{var PKe=UP(),SKe=fee(),xKe=hee();function HP(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new PKe;++e{function bKe(t,e){for(var r=-1,o=t==null?0:t.length;++r{function kKe(t,e){return t.has(e)}Eee.exports=kKe});var jL=_((YFt,wee)=>{var QKe=dee(),FKe=yee(),RKe=Cee(),TKe=1,LKe=2;function NKe(t,e,r,o,a,n){var u=r&TKe,A=t.length,p=e.length;if(A!=p&&!(u&&p>A))return!1;var h=n.get(t),C=n.get(e);if(h&&C)return h==e&&C==t;var I=-1,v=!0,b=r&LKe?new QKe:void 0;for(n.set(t,e),n.set(e,t);++I{var OKe=_l(),MKe=OKe.Uint8Array;Iee.exports=MKe});var vee=_((KFt,Bee)=>{function UKe(t){var e=-1,r=Array(t.size);return t.forEach(function(o,a){r[++e]=[a,o]}),r}Bee.exports=UKe});var Pee=_((VFt,Dee)=>{function _Ke(t){var e=-1,r=Array(t.size);return t.forEach(function(o){r[++e]=o}),r}Dee.exports=_Ke});var Qee=_((zFt,kee)=>{var See=fd(),xee=qL(),HKe=Ty(),jKe=jL(),qKe=vee(),GKe=Pee(),YKe=1,WKe=2,KKe="[object Boolean]",VKe="[object Date]",zKe="[object Error]",JKe="[object Map]",XKe="[object Number]",ZKe="[object RegExp]",$Ke="[object Set]",eVe="[object String]",tVe="[object Symbol]",rVe="[object ArrayBuffer]",nVe="[object DataView]",bee=See?See.prototype:void 0,YL=bee?bee.valueOf:void 0;function iVe(t,e,r,o,a,n,u){switch(r){case nVe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case rVe:return!(t.byteLength!=e.byteLength||!n(new xee(t),new xee(e)));case KKe:case VKe:case XKe:return HKe(+t,+e);case zKe:return t.name==e.name&&t.message==e.message;case ZKe:case eVe:return t==e+"";case JKe:var A=qKe;case $Ke:var p=o&YKe;if(A||(A=GKe),t.size!=e.size&&!p)return!1;var h=u.get(t);if(h)return h==e;o|=WKe,u.set(t,e);var C=jKe(A(t),A(e),o,a,n,u);return u.delete(t),C;case tVe:if(YL)return YL.call(t)==YL.call(e)}return!1}kee.exports=iVe});var jP=_((JFt,Fee)=>{function sVe(t,e){for(var r=-1,o=e.length,a=t.length;++r{var oVe=Array.isArray;Ree.exports=oVe});var WL=_((ZFt,Tee)=>{var aVe=jP(),lVe=Hl();function cVe(t,e,r){var o=e(t);return lVe(t)?o:aVe(o,r(t))}Tee.exports=cVe});var Nee=_(($Ft,Lee)=>{function uVe(t,e){for(var r=-1,o=t==null?0:t.length,a=0,n=[];++r{function AVe(){return[]}Oee.exports=AVe});var qP=_((tRt,Uee)=>{var fVe=Nee(),pVe=KL(),hVe=Object.prototype,gVe=hVe.propertyIsEnumerable,Mee=Object.getOwnPropertySymbols,dVe=Mee?function(t){return t==null?[]:(t=Object(t),fVe(Mee(t),function(e){return gVe.call(t,e)}))}:pVe;Uee.exports=dVe});var Hee=_((rRt,_ee)=>{function mVe(t,e){for(var r=-1,o=Array(t);++r{function yVe(t){return t!=null&&typeof t=="object"}jee.exports=yVe});var Gee=_((iRt,qee)=>{var EVe=pd(),CVe=zu(),wVe="[object Arguments]";function IVe(t){return CVe(t)&&EVe(t)==wVe}qee.exports=IVe});var LI=_((sRt,Kee)=>{var Yee=Gee(),BVe=zu(),Wee=Object.prototype,vVe=Wee.hasOwnProperty,DVe=Wee.propertyIsEnumerable,PVe=Yee(function(){return arguments}())?Yee:function(t){return BVe(t)&&vVe.call(t,"callee")&&!DVe.call(t,"callee")};Kee.exports=PVe});var zee=_((oRt,Vee)=>{function SVe(){return!1}Vee.exports=SVe});var OI=_((NI,Uy)=>{var xVe=_l(),bVe=zee(),Zee=typeof NI=="object"&&NI&&!NI.nodeType&&NI,Jee=Zee&&typeof Uy=="object"&&Uy&&!Uy.nodeType&&Uy,kVe=Jee&&Jee.exports===Zee,Xee=kVe?xVe.Buffer:void 0,QVe=Xee?Xee.isBuffer:void 0,FVe=QVe||bVe;Uy.exports=FVe});var MI=_((aRt,$ee)=>{var RVe=9007199254740991,TVe=/^(?:0|[1-9]\d*)$/;function LVe(t,e){var r=typeof t;return e=e??RVe,!!e&&(r=="number"||r!="symbol"&&TVe.test(t))&&t>-1&&t%1==0&&t{var NVe=9007199254740991;function OVe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=NVe}ete.exports=OVe});var rte=_((cRt,tte)=>{var MVe=pd(),UVe=GP(),_Ve=zu(),HVe="[object Arguments]",jVe="[object Array]",qVe="[object Boolean]",GVe="[object Date]",YVe="[object Error]",WVe="[object Function]",KVe="[object Map]",VVe="[object Number]",zVe="[object Object]",JVe="[object RegExp]",XVe="[object Set]",ZVe="[object String]",$Ve="[object WeakMap]",eze="[object ArrayBuffer]",tze="[object DataView]",rze="[object Float32Array]",nze="[object Float64Array]",ize="[object Int8Array]",sze="[object Int16Array]",oze="[object Int32Array]",aze="[object Uint8Array]",lze="[object Uint8ClampedArray]",cze="[object Uint16Array]",uze="[object Uint32Array]",ui={};ui[rze]=ui[nze]=ui[ize]=ui[sze]=ui[oze]=ui[aze]=ui[lze]=ui[cze]=ui[uze]=!0;ui[HVe]=ui[jVe]=ui[eze]=ui[qVe]=ui[tze]=ui[GVe]=ui[YVe]=ui[WVe]=ui[KVe]=ui[VVe]=ui[zVe]=ui[JVe]=ui[XVe]=ui[ZVe]=ui[$Ve]=!1;function Aze(t){return _Ve(t)&&UVe(t.length)&&!!ui[MVe(t)]}tte.exports=Aze});var YP=_((uRt,nte)=>{function fze(t){return function(e){return t(e)}}nte.exports=fze});var WP=_((UI,_y)=>{var pze=UL(),ite=typeof UI=="object"&&UI&&!UI.nodeType&&UI,_I=ite&&typeof _y=="object"&&_y&&!_y.nodeType&&_y,hze=_I&&_I.exports===ite,VL=hze&&pze.process,gze=function(){try{var t=_I&&_I.require&&_I.require("util").types;return t||VL&&VL.binding&&VL.binding("util")}catch{}}();_y.exports=gze});var KP=_((ARt,ate)=>{var dze=rte(),mze=YP(),ste=WP(),ote=ste&&ste.isTypedArray,yze=ote?mze(ote):dze;ate.exports=yze});var zL=_((fRt,lte)=>{var Eze=Hee(),Cze=LI(),wze=Hl(),Ize=OI(),Bze=MI(),vze=KP(),Dze=Object.prototype,Pze=Dze.hasOwnProperty;function Sze(t,e){var r=wze(t),o=!r&&Cze(t),a=!r&&!o&&Ize(t),n=!r&&!o&&!a&&vze(t),u=r||o||a||n,A=u?Eze(t.length,String):[],p=A.length;for(var h in t)(e||Pze.call(t,h))&&!(u&&(h=="length"||a&&(h=="offset"||h=="parent")||n&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||Bze(h,p)))&&A.push(h);return A}lte.exports=Sze});var VP=_((pRt,cte)=>{var xze=Object.prototype;function bze(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||xze;return t===r}cte.exports=bze});var JL=_((hRt,ute)=>{function kze(t,e){return function(r){return t(e(r))}}ute.exports=kze});var fte=_((gRt,Ate)=>{var Qze=JL(),Fze=Qze(Object.keys,Object);Ate.exports=Fze});var hte=_((dRt,pte)=>{var Rze=VP(),Tze=fte(),Lze=Object.prototype,Nze=Lze.hasOwnProperty;function Oze(t){if(!Rze(t))return Tze(t);var e=[];for(var r in Object(t))Nze.call(t,r)&&r!="constructor"&&e.push(r);return e}pte.exports=Oze});var HI=_((mRt,gte)=>{var Mze=OP(),Uze=GP();function _ze(t){return t!=null&&Uze(t.length)&&!Mze(t)}gte.exports=_ze});var zP=_((yRt,dte)=>{var Hze=zL(),jze=hte(),qze=HI();function Gze(t){return qze(t)?Hze(t):jze(t)}dte.exports=Gze});var XL=_((ERt,mte)=>{var Yze=WL(),Wze=qP(),Kze=zP();function Vze(t){return Yze(t,Kze,Wze)}mte.exports=Vze});var Cte=_((CRt,Ete)=>{var yte=XL(),zze=1,Jze=Object.prototype,Xze=Jze.hasOwnProperty;function Zze(t,e,r,o,a,n){var u=r&zze,A=yte(t),p=A.length,h=yte(e),C=h.length;if(p!=C&&!u)return!1;for(var I=p;I--;){var v=A[I];if(!(u?v in e:Xze.call(e,v)))return!1}var b=n.get(t),E=n.get(e);if(b&&E)return b==e&&E==t;var F=!0;n.set(t,e),n.set(e,t);for(var N=u;++I{var $ze=Vp(),eJe=_l(),tJe=$ze(eJe,"DataView");wte.exports=tJe});var vte=_((IRt,Bte)=>{var rJe=Vp(),nJe=_l(),iJe=rJe(nJe,"Promise");Bte.exports=iJe});var Pte=_((BRt,Dte)=>{var sJe=Vp(),oJe=_l(),aJe=sJe(oJe,"Set");Dte.exports=aJe});var xte=_((vRt,Ste)=>{var lJe=Vp(),cJe=_l(),uJe=lJe(cJe,"WeakMap");Ste.exports=uJe});var jI=_((DRt,Lte)=>{var ZL=Ite(),$L=MP(),eN=vte(),tN=Pte(),rN=xte(),Tte=pd(),Hy=HL(),bte="[object Map]",AJe="[object Object]",kte="[object Promise]",Qte="[object Set]",Fte="[object WeakMap]",Rte="[object DataView]",fJe=Hy(ZL),pJe=Hy($L),hJe=Hy(eN),gJe=Hy(tN),dJe=Hy(rN),hd=Tte;(ZL&&hd(new ZL(new ArrayBuffer(1)))!=Rte||$L&&hd(new $L)!=bte||eN&&hd(eN.resolve())!=kte||tN&&hd(new tN)!=Qte||rN&&hd(new rN)!=Fte)&&(hd=function(t){var e=Tte(t),r=e==AJe?t.constructor:void 0,o=r?Hy(r):"";if(o)switch(o){case fJe:return Rte;case pJe:return bte;case hJe:return kte;case gJe:return Qte;case dJe:return Fte}return e});Lte.exports=hd});var qte=_((PRt,jte)=>{var nN=_P(),mJe=jL(),yJe=Qee(),EJe=Cte(),Nte=jI(),Ote=Hl(),Mte=OI(),CJe=KP(),wJe=1,Ute="[object Arguments]",_te="[object Array]",JP="[object Object]",IJe=Object.prototype,Hte=IJe.hasOwnProperty;function BJe(t,e,r,o,a,n){var u=Ote(t),A=Ote(e),p=u?_te:Nte(t),h=A?_te:Nte(e);p=p==Ute?JP:p,h=h==Ute?JP:h;var C=p==JP,I=h==JP,v=p==h;if(v&&Mte(t)){if(!Mte(e))return!1;u=!0,C=!1}if(v&&!C)return n||(n=new nN),u||CJe(t)?mJe(t,e,r,o,a,n):yJe(t,e,p,r,o,a,n);if(!(r&wJe)){var b=C&&Hte.call(t,"__wrapped__"),E=I&&Hte.call(e,"__wrapped__");if(b||E){var F=b?t.value():t,N=E?e.value():e;return n||(n=new nN),a(F,N,r,o,n)}}return v?(n||(n=new nN),EJe(t,e,r,o,a,n)):!1}jte.exports=BJe});var Kte=_((SRt,Wte)=>{var vJe=qte(),Gte=zu();function Yte(t,e,r,o,a){return t===e?!0:t==null||e==null||!Gte(t)&&!Gte(e)?t!==t&&e!==e:vJe(t,e,r,o,Yte,a)}Wte.exports=Yte});var zte=_((xRt,Vte)=>{var DJe=Kte();function PJe(t,e){return DJe(t,e)}Vte.exports=PJe});var iN=_((bRt,Jte)=>{var SJe=Vp(),xJe=function(){try{var t=SJe(Object,"defineProperty");return t({},"",{}),t}catch{}}();Jte.exports=xJe});var XP=_((kRt,Zte)=>{var Xte=iN();function bJe(t,e,r){e=="__proto__"&&Xte?Xte(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}Zte.exports=bJe});var sN=_((QRt,$te)=>{var kJe=XP(),QJe=Ty();function FJe(t,e,r){(r!==void 0&&!QJe(t[e],r)||r===void 0&&!(e in t))&&kJe(t,e,r)}$te.exports=FJe});var tre=_((FRt,ere)=>{function RJe(t){return function(e,r,o){for(var a=-1,n=Object(e),u=o(e),A=u.length;A--;){var p=u[t?A:++a];if(r(n[p],p,n)===!1)break}return e}}ere.exports=RJe});var nre=_((RRt,rre)=>{var TJe=tre(),LJe=TJe();rre.exports=LJe});var oN=_((qI,jy)=>{var NJe=_l(),are=typeof qI=="object"&&qI&&!qI.nodeType&&qI,ire=are&&typeof jy=="object"&&jy&&!jy.nodeType&&jy,OJe=ire&&ire.exports===are,sre=OJe?NJe.Buffer:void 0,ore=sre?sre.allocUnsafe:void 0;function MJe(t,e){if(e)return t.slice();var r=t.length,o=ore?ore(r):new t.constructor(r);return t.copy(o),o}jy.exports=MJe});var ZP=_((TRt,cre)=>{var lre=qL();function UJe(t){var e=new t.constructor(t.byteLength);return new lre(e).set(new lre(t)),e}cre.exports=UJe});var aN=_((LRt,ure)=>{var _Je=ZP();function HJe(t,e){var r=e?_Je(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}ure.exports=HJe});var $P=_((NRt,Are)=>{function jJe(t,e){var r=-1,o=t.length;for(e||(e=Array(o));++r{var qJe=il(),fre=Object.create,GJe=function(){function t(){}return function(e){if(!qJe(e))return{};if(fre)return fre(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();pre.exports=GJe});var eS=_((MRt,gre)=>{var YJe=JL(),WJe=YJe(Object.getPrototypeOf,Object);gre.exports=WJe});var lN=_((URt,dre)=>{var KJe=hre(),VJe=eS(),zJe=VP();function JJe(t){return typeof t.constructor=="function"&&!zJe(t)?KJe(VJe(t)):{}}dre.exports=JJe});var yre=_((_Rt,mre)=>{var XJe=HI(),ZJe=zu();function $Je(t){return ZJe(t)&&XJe(t)}mre.exports=$Je});var cN=_((HRt,Cre)=>{var eXe=pd(),tXe=eS(),rXe=zu(),nXe="[object Object]",iXe=Function.prototype,sXe=Object.prototype,Ere=iXe.toString,oXe=sXe.hasOwnProperty,aXe=Ere.call(Object);function lXe(t){if(!rXe(t)||eXe(t)!=nXe)return!1;var e=tXe(t);if(e===null)return!0;var r=oXe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Ere.call(r)==aXe}Cre.exports=lXe});var uN=_((jRt,wre)=>{function cXe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}wre.exports=cXe});var tS=_((qRt,Ire)=>{var uXe=XP(),AXe=Ty(),fXe=Object.prototype,pXe=fXe.hasOwnProperty;function hXe(t,e,r){var o=t[e];(!(pXe.call(t,e)&&AXe(o,r))||r===void 0&&!(e in t))&&uXe(t,e,r)}Ire.exports=hXe});var gd=_((GRt,Bre)=>{var gXe=tS(),dXe=XP();function mXe(t,e,r,o){var a=!r;r||(r={});for(var n=-1,u=e.length;++n{function yXe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}vre.exports=yXe});var Sre=_((WRt,Pre)=>{var EXe=il(),CXe=VP(),wXe=Dre(),IXe=Object.prototype,BXe=IXe.hasOwnProperty;function vXe(t){if(!EXe(t))return wXe(t);var e=CXe(t),r=[];for(var o in t)o=="constructor"&&(e||!BXe.call(t,o))||r.push(o);return r}Pre.exports=vXe});var qy=_((KRt,xre)=>{var DXe=zL(),PXe=Sre(),SXe=HI();function xXe(t){return SXe(t)?DXe(t,!0):PXe(t)}xre.exports=xXe});var kre=_((VRt,bre)=>{var bXe=gd(),kXe=qy();function QXe(t){return bXe(t,kXe(t))}bre.exports=QXe});var Nre=_((zRt,Lre)=>{var Qre=sN(),FXe=oN(),RXe=aN(),TXe=$P(),LXe=lN(),Fre=LI(),Rre=Hl(),NXe=yre(),OXe=OI(),MXe=OP(),UXe=il(),_Xe=cN(),HXe=KP(),Tre=uN(),jXe=kre();function qXe(t,e,r,o,a,n,u){var A=Tre(t,r),p=Tre(e,r),h=u.get(p);if(h){Qre(t,r,h);return}var C=n?n(A,p,r+"",t,e,u):void 0,I=C===void 0;if(I){var v=Rre(p),b=!v&&OXe(p),E=!v&&!b&&HXe(p);C=p,v||b||E?Rre(A)?C=A:NXe(A)?C=TXe(A):b?(I=!1,C=FXe(p,!0)):E?(I=!1,C=RXe(p,!0)):C=[]:_Xe(p)||Fre(p)?(C=A,Fre(A)?C=jXe(A):(!UXe(A)||MXe(A))&&(C=LXe(p))):I=!1}I&&(u.set(p,C),a(C,p,o,n,u),u.delete(p)),Qre(t,r,C)}Lre.exports=qXe});var Ure=_((JRt,Mre)=>{var GXe=_P(),YXe=sN(),WXe=nre(),KXe=Nre(),VXe=il(),zXe=qy(),JXe=uN();function Ore(t,e,r,o,a){t!==e&&WXe(e,function(n,u){if(a||(a=new GXe),VXe(n))KXe(t,e,u,r,Ore,o,a);else{var A=o?o(JXe(t,u),n,u+"",t,e,a):void 0;A===void 0&&(A=n),YXe(t,u,A)}},zXe)}Mre.exports=Ore});var AN=_((XRt,_re)=>{function XXe(t){return t}_re.exports=XXe});var jre=_((ZRt,Hre)=>{function ZXe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}Hre.exports=ZXe});var fN=_(($Rt,Gre)=>{var $Xe=jre(),qre=Math.max;function eZe(t,e,r){return e=qre(e===void 0?t.length-1:e,0),function(){for(var o=arguments,a=-1,n=qre(o.length-e,0),u=Array(n);++a{function tZe(t){return function(){return t}}Yre.exports=tZe});var zre=_((tTt,Vre)=>{var rZe=Wre(),Kre=iN(),nZe=AN(),iZe=Kre?function(t,e){return Kre(t,"toString",{configurable:!0,enumerable:!1,value:rZe(e),writable:!0})}:nZe;Vre.exports=iZe});var Xre=_((rTt,Jre)=>{var sZe=800,oZe=16,aZe=Date.now;function lZe(t){var e=0,r=0;return function(){var o=aZe(),a=oZe-(o-r);if(r=o,a>0){if(++e>=sZe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}Jre.exports=lZe});var pN=_((nTt,Zre)=>{var cZe=zre(),uZe=Xre(),AZe=uZe(cZe);Zre.exports=AZe});var ene=_((iTt,$re)=>{var fZe=AN(),pZe=fN(),hZe=pN();function gZe(t,e){return hZe(pZe(t,e,fZe),t+"")}$re.exports=gZe});var rne=_((sTt,tne)=>{var dZe=Ty(),mZe=HI(),yZe=MI(),EZe=il();function CZe(t,e,r){if(!EZe(r))return!1;var o=typeof e;return(o=="number"?mZe(r)&&yZe(e,r.length):o=="string"&&e in r)?dZe(r[e],t):!1}tne.exports=CZe});var ine=_((oTt,nne)=>{var wZe=ene(),IZe=rne();function BZe(t){return wZe(function(e,r){var o=-1,a=r.length,n=a>1?r[a-1]:void 0,u=a>2?r[2]:void 0;for(n=t.length>3&&typeof n=="function"?(a--,n):void 0,u&&IZe(r[0],r[1],u)&&(n=a<3?void 0:n,a=1),e=Object(e);++o{var vZe=Ure(),DZe=ine(),PZe=DZe(function(t,e,r,o){vZe(t,e,r,o)});sne.exports=PZe});var _e={};Vt(_e,{AsyncActions:()=>dN,BufferStream:()=>gN,CachingStrategy:()=>yne,DefaultStream:()=>mN,allSettledSafe:()=>Uc,assertNever:()=>EN,bufferStream:()=>Ky,buildIgnorePattern:()=>RZe,convertMapsToIndexableObjects:()=>nS,dynamicRequire:()=>zp,escapeRegExp:()=>xZe,getArrayWithDefault:()=>Gy,getFactoryWithDefault:()=>ol,getMapWithDefault:()=>Yy,getSetWithDefault:()=>dd,groupBy:()=>IN,isIndexableObject:()=>hN,isPathLike:()=>TZe,isTaggedYarnVersion:()=>SZe,makeDeferred:()=>gne,mapAndFilter:()=>sl,mapAndFind:()=>YI,mergeIntoTarget:()=>Cne,overrideType:()=>bZe,parseBoolean:()=>WI,parseInt:()=>Vy,parseOptionalBoolean:()=>Ene,plural:()=>rS,prettifyAsyncErrors:()=>Wy,prettifySyncErrors:()=>CN,releaseAfterUseAsync:()=>QZe,replaceEnvVariables:()=>iS,sortMap:()=>ks,toMerged:()=>LZe,tryParseOptionalBoolean:()=>wN,validateEnum:()=>kZe});function SZe(t){return!!(fne.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9]+)?$/))}function rS(t,{one:e,more:r,zero:o=r}){return t===0?o:t===1?e:r}function xZe(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function bZe(t){}function EN(t){throw new Error(`Assertion failed: Unexpected object '${t}'`)}function kZe(t,e){let r=Object.values(t);if(!r.includes(e))throw new it(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${r.map(o=>JSON.stringify(o)).join(", ")})`);return e}function sl(t,e){let r=[];for(let o of t){let a=e(o);a!==pne&&r.push(a)}return r}function YI(t,e){for(let r of t){let o=e(r);if(o!==hne)return o}}function hN(t){return typeof t=="object"&&t!==null}async function Uc(t){let e=await Promise.allSettled(t),r=[];for(let o of e){if(o.status==="rejected")throw o.reason;r.push(o.value)}return r}function nS(t){if(t instanceof Map&&(t=Object.fromEntries(t)),hN(t))for(let e of Object.keys(t)){let r=t[e];hN(r)&&(t[e]=nS(r))}return t}function ol(t,e,r){let o=t.get(e);return typeof o>"u"&&t.set(e,o=r()),o}function Gy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}function dd(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}function Yy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}async function QZe(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function Wy(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function CN(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function Ky(t){return await new Promise((e,r)=>{let o=[];t.on("error",a=>{r(a)}),t.on("data",a=>{o.push(a)}),t.on("end",()=>{e(Buffer.concat(o))})})}function gne(){let t,e;return{promise:new Promise((o,a)=>{t=o,e=a}),resolve:t,reject:e}}function dne(t){return GI(fe.fromPortablePath(t))}function mne(path){let physicalPath=fe.fromPortablePath(path),currentCacheEntry=GI.cache[physicalPath];delete GI.cache[physicalPath];let result;try{result=dne(physicalPath);let freshCacheEntry=GI.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{GI.cache[physicalPath]=currentCacheEntry}return result}function FZe(t){let e=ane.get(t),r=oe.statSync(t);if(e?.mtime===r.mtimeMs)return e.instance;let o=mne(t);return ane.set(t,{mtime:r.mtimeMs,instance:o}),o}function zp(t,{cachingStrategy:e=2}={}){switch(e){case 0:return mne(t);case 1:return FZe(t);case 2:return dne(t);default:throw new Error("Unsupported caching strategy")}}function ks(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function RZe(t){return t.length===0?null:t.map(e=>`(${une.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function iS(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...o)=>{let{variableName:a,colon:n,fallback:u}=o[o.length-1],A=Object.hasOwn(e,a),p=e[a];if(p||A&&!n)return p;if(u!=null)return u;throw new it(`Environment variable not found (${a})`)})}function WI(t){switch(t){case"true":case"1":case 1:case!0:return!0;case"false":case"0":case 0:case!1:return!1;default:throw new Error(`Couldn't parse "${t}" as a boolean`)}}function Ene(t){return typeof t>"u"?t:WI(t)}function wN(t){try{return Ene(t)}catch{return null}}function TZe(t){return!!(fe.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}function Cne(t,...e){let r=u=>({value:u}),o=r(t),a=e.map(u=>r(u)),{value:n}=(0,cne.default)(o,...a,(u,A)=>{if(Array.isArray(u)&&Array.isArray(A)){for(let p of A)u.find(h=>(0,lne.default)(h,p))||u.push(p);return u}});return n}function LZe(...t){return Cne({},...t)}function IN(t,e){let r=Object.create(null);for(let o of t){let a=o[e];r[a]??=[],r[a].push(o)}return r}function Vy(t){return typeof t=="string"?Number.parseInt(t,10):t}var lne,cne,une,Ane,fne,yN,pne,hne,gN,dN,mN,GI,ane,yne,jl=yt(()=>{Pt();qt();lne=$e(zte()),cne=$e(one()),une=$e(Zo()),Ane=$e(nd()),fne=$e(Jn()),yN=Be("stream");pne=Symbol();sl.skip=pne;hne=Symbol();YI.skip=hne;gN=class extends yN.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(r),a(null,null)}_flush(r){r(null,Buffer.concat(this.chunks))}};dN=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,Ane.default)(e)}set(e,r){let o=this.deferred.get(e);typeof o>"u"&&this.deferred.set(e,o=gne());let a=this.limit(()=>r());return this.promises.set(e,a),a.then(()=>{this.promises.get(e)===a&&o.resolve()},n=>{this.promises.get(e)===a&&o.reject(n)}),o.promise}reduce(e,r){let o=this.promises.get(e)??Promise.resolve();this.set(e,()=>r(o))}async wait(){await Promise.all(this.promises.values())}},mN=class extends yN.Transform{constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,a(null,r)}_flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}},GI=eval("require");ane=new Map;yne=(o=>(o[o.NoCache=0]="NoCache",o[o.FsTime=1]="FsTime",o[o.Node=2]="Node",o))(yne||{})});var zy,BN,vN,wne=yt(()=>{zy=(r=>(r.HARD="HARD",r.SOFT="SOFT",r))(zy||{}),BN=(o=>(o.Dependency="Dependency",o.PeerDependency="PeerDependency",o.PeerDependencyMeta="PeerDependencyMeta",o))(BN||{}),vN=(o=>(o.Inactive="inactive",o.Redundant="redundant",o.Active="active",o))(vN||{})});var de={};Vt(de,{LogLevel:()=>cS,Style:()=>oS,Type:()=>Et,addLogFilterSupport:()=>zI,applyColor:()=>zs,applyHyperlink:()=>Xy,applyStyle:()=>md,json:()=>yd,jsonOrPretty:()=>MZe,mark:()=>bN,pretty:()=>_t,prettyField:()=>Ju,prettyList:()=>xN,prettyTruncatedLocatorList:()=>lS,stripAnsi:()=>Jy.default,supportsColor:()=>aS,supportsHyperlinks:()=>SN,tuple:()=>_c});function Ine(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1024**r;)r-=1;let o=1024**r;return`${Math.floor(t*100/o)/100} ${e[r-1]}`}function _c(t,e){return[e,t]}function md(t,e,r){return t.get("enableColors")&&r&2&&(e=VI.default.bold(e)),e}function zs(t,e,r){if(!t.get("enableColors"))return e;let o=NZe.get(r);if(o===null)return e;let a=typeof o>"u"?r:PN.level>=3?o[0]:o[1],n=typeof a=="number"?DN.ansi256(a):a.startsWith("#")?DN.hex(a):DN[a];if(typeof n!="function")throw new Error(`Invalid format type ${a}`);return n(e)}function Xy(t,e,r){return t.get("enableHyperlinks")?OZe?`\x1B]8;;${r}\x1B\\${e}\x1B]8;;\x1B\\`:`\x1B]8;;${r}\x07${e}\x1B]8;;\x07`:e}function _t(t,e,r){if(e===null)return zs(t,"null",Et.NULL);if(Object.hasOwn(sS,r))return sS[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return zs(t,e,r)}function xN(t,e,r,{separator:o=", "}={}){return[...e].map(a=>_t(t,a,r)).join(o)}function yd(t,e){if(t===null)return null;if(Object.hasOwn(sS,e))return sS[e].json(t);if(typeof t!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof t}`);return t}function MZe(t,e,[r,o]){return t?yd(r,o):_t(e,r,o)}function bN(t){return{Check:zs(t,"\u2713","green"),Cross:zs(t,"\u2718","red"),Question:zs(t,"?","cyan")}}function Ju(t,{label:e,value:[r,o]}){return`${_t(t,e,Et.CODE)}: ${_t(t,r,o)}`}function lS(t,e,r){let o=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],C=`${jr(t,h)}, `,I=kN(h).length+2;if(o.length>0&&nh).join("").slice(0,-2);let u="X".repeat(a.length.toString().length),A=`and ${u} more.`,p=a.length;for(;o.length>1&&nh).join(""),A.replace(u,_t(t,p,Et.NUMBER))].join("")}function zI(t,{configuration:e}){let r=e.get("logFilters"),o=new Map,a=new Map,n=[];for(let I of r){let v=I.get("level");if(typeof v>"u")continue;let b=I.get("code");typeof b<"u"&&o.set(b,v);let E=I.get("text");typeof E<"u"&&a.set(E,v);let F=I.get("pattern");typeof F<"u"&&n.push([Bne.default.matcher(F,{contains:!0}),v])}n.reverse();let u=(I,v,b)=>{if(I===null||I===0)return b;let E=a.size>0||n.length>0?(0,Jy.default)(v):v;if(a.size>0){let F=a.get(E);if(typeof F<"u")return F??b}if(n.length>0){for(let[F,N]of n)if(F(E))return N??b}if(o.size>0){let F=o.get(Wu(I));if(typeof F<"u")return F??b}return b},A=t.reportInfo,p=t.reportWarning,h=t.reportError,C=function(I,v,b,E){switch(u(v,b,E)){case"info":A.call(I,v,b);break;case"warning":p.call(I,v??0,b);break;case"error":h.call(I,v??0,b);break}};t.reportInfo=function(...I){return C(this,...I,"info")},t.reportWarning=function(...I){return C(this,...I,"warning")},t.reportError=function(...I){return C(this,...I,"error")}}var VI,KI,Bne,Jy,vne,Et,oS,PN,aS,SN,DN,NZe,So,sS,OZe,cS,ql=yt(()=>{Pt();VI=$e(IL()),KI=$e($g());qt();Bne=$e(Zo()),Jy=$e(NP()),vne=Be("util");fP();xo();Et={NO_HINT:"NO_HINT",ID:"ID",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",INSPECT:"INSPECT",DURATION:"DURATION",SIZE:"SIZE",SIZE_DIFF:"SIZE_DIFF",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING",MARKDOWN:"MARKDOWN",MARKDOWN_INLINE:"MARKDOWN_INLINE"},oS=(e=>(e[e.BOLD=2]="BOLD",e))(oS||{}),PN=KI.default.GITHUB_ACTIONS?{level:2}:VI.default.supportsColor?{level:VI.default.supportsColor.level}:{level:0},aS=PN.level!==0,SN=aS&&!KI.default.GITHUB_ACTIONS&&!KI.default.CIRCLE&&!KI.default.GITLAB,DN=new VI.default.Instance(PN),NZe=new Map([[Et.NO_HINT,null],[Et.NULL,["#a853b5",129]],[Et.SCOPE,["#d75f00",166]],[Et.NAME,["#d7875f",173]],[Et.RANGE,["#00afaf",37]],[Et.REFERENCE,["#87afff",111]],[Et.NUMBER,["#ffd700",220]],[Et.PATH,["#d75fd7",170]],[Et.URL,["#d75fd7",170]],[Et.ADDED,["#5faf00",70]],[Et.REMOVED,["#ff3131",160]],[Et.CODE,["#87afff",111]],[Et.SIZE,["#ffd700",220]]]),So=t=>t;sS={[Et.ID]:So({pretty:(t,e)=>typeof e=="number"?zs(t,`${e}`,Et.NUMBER):zs(t,e,Et.CODE),json:t=>t}),[Et.INSPECT]:So({pretty:(t,e)=>(0,vne.inspect)(e,{depth:1/0,colors:t.get("enableColors"),compact:!0,breakLength:1/0}),json:t=>t}),[Et.NUMBER]:So({pretty:(t,e)=>zs(t,`${e}`,Et.NUMBER),json:t=>t}),[Et.IDENT]:So({pretty:(t,e)=>cs(t,e),json:t=>fn(t)}),[Et.LOCATOR]:So({pretty:(t,e)=>jr(t,e),json:t=>xa(t)}),[Et.DESCRIPTOR]:So({pretty:(t,e)=>qn(t,e),json:t=>Sa(t)}),[Et.RESOLUTION]:So({pretty:(t,{descriptor:e,locator:r})=>JI(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:Sa(t),locator:e!==null?xa(e):null})}),[Et.DEPENDENT]:So({pretty:(t,{locator:e,descriptor:r})=>QN(t,e,r),json:({locator:t,descriptor:e})=>({locator:xa(t),descriptor:Sa(e)})}),[Et.PACKAGE_EXTENSION]:So({pretty:(t,e)=>{switch(e.type){case"Dependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${zs(t,"dependencies",Et.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${zs(t,"peerDependencies",Et.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependencyMeta":return`${cs(t,e.parentDescriptor)} \u27A4 ${zs(t,"peerDependenciesMeta",Et.CODE)} \u27A4 ${cs(t,Js(e.selector))} \u27A4 ${zs(t,e.key,Et.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case"Dependency":return`${fn(t.parentDescriptor)} > ${fn(t.descriptor)}`;case"PeerDependency":return`${fn(t.parentDescriptor)} >> ${fn(t.descriptor)}`;case"PeerDependencyMeta":return`${fn(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[Et.SETTING]:So({pretty:(t,e)=>(t.get(e),Xy(t,zs(t,e,Et.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[Et.DURATION]:So({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),o=Math.ceil((e-r*60*1e3)/1e3);return o===0?`${r}m`:`${r}m ${o}s`}else{let r=Math.floor(e/1e3),o=e-r*1e3;return o===0?`${r}s`:`${r}s ${o}ms`}},json:t=>t}),[Et.SIZE]:So({pretty:(t,e)=>zs(t,Ine(e),Et.NUMBER),json:t=>t}),[Et.SIZE_DIFF]:So({pretty:(t,e)=>{let r=e>=0?"+":"-",o=r==="+"?Et.REMOVED:Et.ADDED;return zs(t,`${r} ${Ine(Math.max(Math.abs(e),1))}`,o)},json:t=>t}),[Et.PATH]:So({pretty:(t,e)=>zs(t,fe.fromPortablePath(e),Et.PATH),json:t=>fe.fromPortablePath(t)}),[Et.MARKDOWN]:So({pretty:(t,{text:e,format:r,paragraphs:o})=>Do(e,{format:r,paragraphs:o}),json:({text:t})=>t}),[Et.MARKDOWN_INLINE]:So({pretty:(t,e)=>(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(r,o,a)=>_t(t,o+a+o,Et.CODE)),e=e.replace(/(\*\*)((?:.|[\n])*?)\1/g,(r,o,a)=>md(t,a,2)),e),json:t=>t})};OZe=!!process.env.KONSOLE_VERSION;cS=(a=>(a.Error="error",a.Warning="warning",a.Info="info",a.Discard="discard",a))(cS||{})});var Dne=_(Zy=>{"use strict";Object.defineProperty(Zy,"__esModule",{value:!0});Zy.splitWhen=Zy.flatten=void 0;function UZe(t){return t.reduce((e,r)=>[].concat(e,r),[])}Zy.flatten=UZe;function _Ze(t,e){let r=[[]],o=0;for(let a of t)e(a)?(o++,r[o]=[]):r[o].push(a);return r}Zy.splitWhen=_Ze});var Pne=_(uS=>{"use strict";Object.defineProperty(uS,"__esModule",{value:!0});uS.isEnoentCodeError=void 0;function HZe(t){return t.code==="ENOENT"}uS.isEnoentCodeError=HZe});var Sne=_(AS=>{"use strict";Object.defineProperty(AS,"__esModule",{value:!0});AS.createDirentFromStats=void 0;var FN=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function jZe(t,e){return new FN(t,e)}AS.createDirentFromStats=jZe});var xne=_(Xu=>{"use strict";Object.defineProperty(Xu,"__esModule",{value:!0});Xu.removeLeadingDotSegment=Xu.escape=Xu.makeAbsolute=Xu.unixify=void 0;var qZe=Be("path"),GZe=2,YZe=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;function WZe(t){return t.replace(/\\/g,"/")}Xu.unixify=WZe;function KZe(t,e){return qZe.resolve(t,e)}Xu.makeAbsolute=KZe;function VZe(t){return t.replace(YZe,"\\$2")}Xu.escape=VZe;function zZe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(GZe)}return t}Xu.removeLeadingDotSegment=zZe});var kne=_((ITt,bne)=>{bne.exports=function(e){if(typeof e!="string"||e==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(r[2])return!0;e=e.slice(r.index+r[0].length)}return!1}});var Rne=_((BTt,Fne)=>{var JZe=kne(),Qne={"{":"}","(":")","[":"]"},XZe=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,o=-2,a=-2,n=-2,u=-2;ee&&(u===-1||u>o||(u=t.indexOf("\\",e),u===-1||u>o)))||a!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(a=t.indexOf("}",e),a>e&&(u=t.indexOf("\\",e),u===-1||u>a))||n!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(n=t.indexOf(")",e),n>e&&(u=t.indexOf("\\",e),u===-1||u>n))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(rr&&(u=t.indexOf("\\",r),u===-1||u>n))))return!0;if(t[e]==="\\"){var A=t[e+1];e+=2;var p=Qne[A];if(p){var h=t.indexOf(p,e);h!==-1&&(e=h+1)}if(t[e]==="!")return!0}else e++}return!1},ZZe=function(t){if(t[0]==="!")return!0;for(var e=0;e{"use strict";var $Ze=Rne(),e$e=Be("path").posix.dirname,t$e=Be("os").platform()==="win32",RN="/",r$e=/\\/g,n$e=/[\{\[].*[\}\]]$/,i$e=/(^|[^\\])([\{\[]|\([^\)]+$)/,s$e=/\\([\!\*\?\|\[\]\(\)\{\}])/g;Tne.exports=function(e,r){var o=Object.assign({flipBackslashes:!0},r);o.flipBackslashes&&t$e&&e.indexOf(RN)<0&&(e=e.replace(r$e,RN)),n$e.test(e)&&(e+=RN),e+="a";do e=e$e(e);while($Ze(e)||i$e.test(e));return e.replace(s$e,"$1")}});var qne=_(qr=>{"use strict";Object.defineProperty(qr,"__esModule",{value:!0});qr.matchAny=qr.convertPatternsToRe=qr.makeRe=qr.getPatternParts=qr.expandBraceExpansion=qr.expandPatternsWithBraceExpansion=qr.isAffectDepthOfReadingPattern=qr.endsWithSlashGlobStar=qr.hasGlobStar=qr.getBaseDirectory=qr.isPatternRelatedToParentDirectory=qr.getPatternsOutsideCurrentDirectory=qr.getPatternsInsideCurrentDirectory=qr.getPositivePatterns=qr.getNegativePatterns=qr.isPositivePattern=qr.isNegativePattern=qr.convertToNegativePattern=qr.convertToPositivePattern=qr.isDynamicPattern=qr.isStaticPattern=void 0;var o$e=Be("path"),a$e=Lne(),TN=Zo(),Nne="**",l$e="\\",c$e=/[*?]|^!/,u$e=/\[[^[]*]/,A$e=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,f$e=/[!*+?@]\([^(]*\)/,p$e=/,|\.\./;function One(t,e={}){return!Mne(t,e)}qr.isStaticPattern=One;function Mne(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(l$e)||c$e.test(t)||u$e.test(t)||A$e.test(t)||e.extglob!==!1&&f$e.test(t)||e.braceExpansion!==!1&&h$e(t))}qr.isDynamicPattern=Mne;function h$e(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let o=t.slice(e,r);return p$e.test(o)}function g$e(t){return fS(t)?t.slice(1):t}qr.convertToPositivePattern=g$e;function d$e(t){return"!"+t}qr.convertToNegativePattern=d$e;function fS(t){return t.startsWith("!")&&t[1]!=="("}qr.isNegativePattern=fS;function Une(t){return!fS(t)}qr.isPositivePattern=Une;function m$e(t){return t.filter(fS)}qr.getNegativePatterns=m$e;function y$e(t){return t.filter(Une)}qr.getPositivePatterns=y$e;function E$e(t){return t.filter(e=>!LN(e))}qr.getPatternsInsideCurrentDirectory=E$e;function C$e(t){return t.filter(LN)}qr.getPatternsOutsideCurrentDirectory=C$e;function LN(t){return t.startsWith("..")||t.startsWith("./..")}qr.isPatternRelatedToParentDirectory=LN;function w$e(t){return a$e(t,{flipBackslashes:!1})}qr.getBaseDirectory=w$e;function I$e(t){return t.includes(Nne)}qr.hasGlobStar=I$e;function _ne(t){return t.endsWith("/"+Nne)}qr.endsWithSlashGlobStar=_ne;function B$e(t){let e=o$e.basename(t);return _ne(t)||One(e)}qr.isAffectDepthOfReadingPattern=B$e;function v$e(t){return t.reduce((e,r)=>e.concat(Hne(r)),[])}qr.expandPatternsWithBraceExpansion=v$e;function Hne(t){return TN.braces(t,{expand:!0,nodupes:!0})}qr.expandBraceExpansion=Hne;function D$e(t,e){let{parts:r}=TN.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.length===0&&(r=[t]),r[0].startsWith("/")&&(r[0]=r[0].slice(1),r.unshift("")),r}qr.getPatternParts=D$e;function jne(t,e){return TN.makeRe(t,e)}qr.makeRe=jne;function P$e(t,e){return t.map(r=>jne(r,e))}qr.convertPatternsToRe=P$e;function S$e(t,e){return e.some(r=>r.test(t))}qr.matchAny=S$e});var Kne=_((PTt,Wne)=>{"use strict";var x$e=Be("stream"),Gne=x$e.PassThrough,b$e=Array.prototype.slice;Wne.exports=k$e;function k$e(){let t=[],e=b$e.call(arguments),r=!1,o=e[e.length-1];o&&!Array.isArray(o)&&o.pipe==null?e.pop():o={};let a=o.end!==!1,n=o.pipeError===!0;o.objectMode==null&&(o.objectMode=!0),o.highWaterMark==null&&(o.highWaterMark=64*1024);let u=Gne(o);function A(){for(let C=0,I=arguments.length;C0||(r=!1,p())}function b(E){function F(){E.removeListener("merge2UnpipeEnd",F),E.removeListener("end",F),n&&E.removeListener("error",N),v()}function N(U){u.emit("error",U)}if(E._readableState.endEmitted)return v();E.on("merge2UnpipeEnd",F),E.on("end",F),n&&E.on("error",N),E.pipe(u,{end:!1}),E.resume()}for(let E=0;E{"use strict";Object.defineProperty(pS,"__esModule",{value:!0});pS.merge=void 0;var Q$e=Kne();function F$e(t){let e=Q$e(t);return t.forEach(r=>{r.once("error",o=>e.emit("error",o))}),e.once("close",()=>Vne(t)),e.once("end",()=>Vne(t)),e}pS.merge=F$e;function Vne(t){t.forEach(e=>e.emit("close"))}});var Jne=_($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.isEmpty=$y.isString=void 0;function R$e(t){return typeof t=="string"}$y.isString=R$e;function T$e(t){return t===""}$y.isEmpty=T$e});var vf=_(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.string=bo.stream=bo.pattern=bo.path=bo.fs=bo.errno=bo.array=void 0;var L$e=Dne();bo.array=L$e;var N$e=Pne();bo.errno=N$e;var O$e=Sne();bo.fs=O$e;var M$e=xne();bo.path=M$e;var U$e=qne();bo.pattern=U$e;var _$e=zne();bo.stream=_$e;var H$e=Jne();bo.string=H$e});var $ne=_(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.convertPatternGroupToTask=ko.convertPatternGroupsToTasks=ko.groupPatternsByBaseDirectory=ko.getNegativePatternsAsPositive=ko.getPositivePatterns=ko.convertPatternsToTasks=ko.generate=void 0;var Df=vf();function j$e(t,e){let r=Xne(t),o=Zne(t,e.ignore),a=r.filter(p=>Df.pattern.isStaticPattern(p,e)),n=r.filter(p=>Df.pattern.isDynamicPattern(p,e)),u=NN(a,o,!1),A=NN(n,o,!0);return u.concat(A)}ko.generate=j$e;function NN(t,e,r){let o=[],a=Df.pattern.getPatternsOutsideCurrentDirectory(t),n=Df.pattern.getPatternsInsideCurrentDirectory(t),u=ON(a),A=ON(n);return o.push(...MN(u,e,r)),"."in A?o.push(UN(".",n,e,r)):o.push(...MN(A,e,r)),o}ko.convertPatternsToTasks=NN;function Xne(t){return Df.pattern.getPositivePatterns(t)}ko.getPositivePatterns=Xne;function Zne(t,e){return Df.pattern.getNegativePatterns(t).concat(e).map(Df.pattern.convertToPositivePattern)}ko.getNegativePatternsAsPositive=Zne;function ON(t){let e={};return t.reduce((r,o)=>{let a=Df.pattern.getBaseDirectory(o);return a in r?r[a].push(o):r[a]=[o],r},e)}ko.groupPatternsByBaseDirectory=ON;function MN(t,e,r){return Object.keys(t).map(o=>UN(o,t[o],e,r))}ko.convertPatternGroupsToTasks=MN;function UN(t,e,r,o){return{dynamic:o,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Df.pattern.convertToNegativePattern))}}ko.convertPatternGroupToTask=UN});var tie=_(eE=>{"use strict";Object.defineProperty(eE,"__esModule",{value:!0});eE.removeDuplicateSlashes=eE.transform=void 0;var q$e=/(?!^)\/{2,}/g;function G$e(t){return t.map(e=>eie(e))}eE.transform=G$e;function eie(t){return t.replace(q$e,"/")}eE.removeDuplicateSlashes=eie});var nie=_(hS=>{"use strict";Object.defineProperty(hS,"__esModule",{value:!0});hS.read=void 0;function Y$e(t,e,r){e.fs.lstat(t,(o,a)=>{if(o!==null){rie(r,o);return}if(!a.isSymbolicLink()||!e.followSymbolicLink){_N(r,a);return}e.fs.stat(t,(n,u)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){rie(r,n);return}_N(r,a);return}e.markSymbolicLink&&(u.isSymbolicLink=()=>!0),_N(r,u)})})}hS.read=Y$e;function rie(t,e){t(e)}function _N(t,e){t(null,e)}});var iie=_(gS=>{"use strict";Object.defineProperty(gS,"__esModule",{value:!0});gS.read=void 0;function W$e(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let o=e.fs.statSync(t);return e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),o}catch(o){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw o}}gS.read=W$e});var sie=_(Jp=>{"use strict";Object.defineProperty(Jp,"__esModule",{value:!0});Jp.createFileSystemAdapter=Jp.FILE_SYSTEM_ADAPTER=void 0;var dS=Be("fs");Jp.FILE_SYSTEM_ADAPTER={lstat:dS.lstat,stat:dS.stat,lstatSync:dS.lstatSync,statSync:dS.statSync};function K$e(t){return t===void 0?Jp.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},Jp.FILE_SYSTEM_ADAPTER),t)}Jp.createFileSystemAdapter=K$e});var oie=_(jN=>{"use strict";Object.defineProperty(jN,"__esModule",{value:!0});var V$e=sie(),HN=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=V$e.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e??r}};jN.default=HN});var Ed=_(Xp=>{"use strict";Object.defineProperty(Xp,"__esModule",{value:!0});Xp.statSync=Xp.stat=Xp.Settings=void 0;var aie=nie(),z$e=iie(),qN=oie();Xp.Settings=qN.default;function J$e(t,e,r){if(typeof e=="function"){aie.read(t,GN(),e);return}aie.read(t,GN(e),r)}Xp.stat=J$e;function X$e(t,e){let r=GN(e);return z$e.read(t,r)}Xp.statSync=X$e;function GN(t={}){return t instanceof qN.default?t:new qN.default(t)}});var cie=_((OTt,lie)=>{lie.exports=Z$e;function Z$e(t,e){var r,o,a,n=!0;Array.isArray(t)?(r=[],o=t.length):(a=Object.keys(t),r={},o=a.length);function u(p){function h(){e&&e(p,r),e=null}n?process.nextTick(h):h()}function A(p,h,C){r[p]=C,(--o===0||h)&&u(h)}o?a?a.forEach(function(p){t[p](function(h,C){A(p,h,C)})}):t.forEach(function(p,h){p(function(C,I){A(h,C,I)})}):u(null),n=!1}});var YN=_(yS=>{"use strict";Object.defineProperty(yS,"__esModule",{value:!0});yS.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var mS=process.versions.node.split(".");if(mS[0]===void 0||mS[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var uie=Number.parseInt(mS[0],10),$$e=Number.parseInt(mS[1],10),Aie=10,eet=10,tet=uie>Aie,ret=uie===Aie&&$$e>=eet;yS.IS_SUPPORT_READDIR_WITH_FILE_TYPES=tet||ret});var fie=_(ES=>{"use strict";Object.defineProperty(ES,"__esModule",{value:!0});ES.createDirentFromStats=void 0;var WN=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function net(t,e){return new WN(t,e)}ES.createDirentFromStats=net});var KN=_(CS=>{"use strict";Object.defineProperty(CS,"__esModule",{value:!0});CS.fs=void 0;var iet=fie();CS.fs=iet});var VN=_(wS=>{"use strict";Object.defineProperty(wS,"__esModule",{value:!0});wS.joinPathSegments=void 0;function set(t,e,r){return t.endsWith(r)?t+e:t+r+e}wS.joinPathSegments=set});var yie=_(Zp=>{"use strict";Object.defineProperty(Zp,"__esModule",{value:!0});Zp.readdir=Zp.readdirWithFileTypes=Zp.read=void 0;var oet=Ed(),pie=cie(),aet=YN(),hie=KN(),gie=VN();function cet(t,e,r){if(!e.stats&&aet.IS_SUPPORT_READDIR_WITH_FILE_TYPES){die(t,e,r);return}mie(t,e,r)}Zp.read=cet;function die(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(o,a)=>{if(o!==null){IS(r,o);return}let n=a.map(A=>({dirent:A,name:A.name,path:gie.joinPathSegments(t,A.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){zN(r,n);return}let u=n.map(A=>uet(A,e));pie(u,(A,p)=>{if(A!==null){IS(r,A);return}zN(r,p)})})}Zp.readdirWithFileTypes=die;function uet(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(o,a)=>{if(o!==null){if(e.throwErrorOnBrokenSymbolicLink){r(o);return}r(null,t);return}t.dirent=hie.fs.createDirentFromStats(t.name,a),r(null,t)})}}function mie(t,e,r){e.fs.readdir(t,(o,a)=>{if(o!==null){IS(r,o);return}let n=a.map(u=>{let A=gie.joinPathSegments(t,u,e.pathSegmentSeparator);return p=>{oet.stat(A,e.fsStatSettings,(h,C)=>{if(h!==null){p(h);return}let I={name:u,path:A,dirent:hie.fs.createDirentFromStats(u,C)};e.stats&&(I.stats=C),p(null,I)})}});pie(n,(u,A)=>{if(u!==null){IS(r,u);return}zN(r,A)})})}Zp.readdir=mie;function IS(t,e){t(e)}function zN(t,e){t(null,e)}});var Bie=_($p=>{"use strict";Object.defineProperty($p,"__esModule",{value:!0});$p.readdir=$p.readdirWithFileTypes=$p.read=void 0;var Aet=Ed(),fet=YN(),Eie=KN(),Cie=VN();function pet(t,e){return!e.stats&&fet.IS_SUPPORT_READDIR_WITH_FILE_TYPES?wie(t,e):Iie(t,e)}$p.read=pet;function wie(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(o=>{let a={dirent:o,name:o.name,path:Cie.joinPathSegments(t,o.name,e.pathSegmentSeparator)};if(a.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let n=e.fs.statSync(a.path);a.dirent=Eie.fs.createDirentFromStats(a.name,n)}catch(n){if(e.throwErrorOnBrokenSymbolicLink)throw n}return a})}$p.readdirWithFileTypes=wie;function Iie(t,e){return e.fs.readdirSync(t).map(o=>{let a=Cie.joinPathSegments(t,o,e.pathSegmentSeparator),n=Aet.statSync(a,e.fsStatSettings),u={name:o,path:a,dirent:Eie.fs.createDirentFromStats(o,n)};return e.stats&&(u.stats=n),u})}$p.readdir=Iie});var vie=_(eh=>{"use strict";Object.defineProperty(eh,"__esModule",{value:!0});eh.createFileSystemAdapter=eh.FILE_SYSTEM_ADAPTER=void 0;var tE=Be("fs");eh.FILE_SYSTEM_ADAPTER={lstat:tE.lstat,stat:tE.stat,lstatSync:tE.lstatSync,statSync:tE.statSync,readdir:tE.readdir,readdirSync:tE.readdirSync};function het(t){return t===void 0?eh.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},eh.FILE_SYSTEM_ADAPTER),t)}eh.createFileSystemAdapter=het});var Die=_(XN=>{"use strict";Object.defineProperty(XN,"__esModule",{value:!0});var get=Be("path"),det=Ed(),met=vie(),JN=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=met.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,get.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new det.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};XN.default=JN});var BS=_(th=>{"use strict";Object.defineProperty(th,"__esModule",{value:!0});th.Settings=th.scandirSync=th.scandir=void 0;var Pie=yie(),yet=Bie(),ZN=Die();th.Settings=ZN.default;function Eet(t,e,r){if(typeof e=="function"){Pie.read(t,$N(),e);return}Pie.read(t,$N(e),r)}th.scandir=Eet;function Cet(t,e){let r=$N(e);return yet.read(t,r)}th.scandirSync=Cet;function $N(t={}){return t instanceof ZN.default?t:new ZN.default(t)}});var xie=_((KTt,Sie)=>{"use strict";function wet(t){var e=new t,r=e;function o(){var n=e;return n.next?e=n.next:(e=new t,r=e),n.next=null,n}function a(n){r.next=n,r=n}return{get:o,release:a}}Sie.exports=wet});var kie=_((VTt,eO)=>{"use strict";var Iet=xie();function bie(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),r<1)throw new Error("fastqueue concurrency must be greater than 1");var o=Iet(Bet),a=null,n=null,u=0,A=null,p={push:F,drain:Gl,saturated:Gl,pause:C,paused:!1,concurrency:r,running:h,resume:b,idle:E,length:I,getQueue:v,unshift:N,empty:Gl,kill:z,killAndDrain:te,error:le};return p;function h(){return u}function C(){p.paused=!0}function I(){for(var pe=a,ue=0;pe;)pe=pe.next,ue++;return ue}function v(){for(var pe=a,ue=[];pe;)ue.push(pe.value),pe=pe.next;return ue}function b(){if(!!p.paused){p.paused=!1;for(var pe=0;pe{"use strict";Object.defineProperty(Zu,"__esModule",{value:!0});Zu.joinPathSegments=Zu.replacePathSegmentSeparator=Zu.isAppliedFilter=Zu.isFatalError=void 0;function Det(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Zu.isFatalError=Det;function Pet(t,e){return t===null||t(e)}Zu.isAppliedFilter=Pet;function xet(t,e){return t.split(/[/\\]/).join(e)}Zu.replacePathSegmentSeparator=xet;function bet(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Zu.joinPathSegments=bet});var nO=_(rO=>{"use strict";Object.defineProperty(rO,"__esModule",{value:!0});var ket=vS(),tO=class{constructor(e,r){this._root=e,this._settings=r,this._root=ket.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};rO.default=tO});var oO=_(sO=>{"use strict";Object.defineProperty(sO,"__esModule",{value:!0});var Qet=Be("events"),Fet=BS(),Ret=kie(),DS=vS(),Tet=nO(),iO=class extends Tet.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=Fet.scandir,this._emitter=new Qet.EventEmitter,this._queue=Ret(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let o={directory:e,base:r};this._queue.push(o,a=>{a!==null&&this._handleError(a)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(o,a)=>{if(o!==null){r(o,void 0);return}for(let n of a)this._handleEntry(n,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!DS.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let o=e.path;r!==void 0&&(e.path=DS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),DS.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&DS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};sO.default=iO});var Qie=_(lO=>{"use strict";Object.defineProperty(lO,"__esModule",{value:!0});var Let=oO(),aO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Let.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{Net(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{Oet(e,this._storage)}),this._reader.read()}};lO.default=aO;function Net(t,e){t(e)}function Oet(t,e){t(null,e)}});var Fie=_(uO=>{"use strict";Object.defineProperty(uO,"__esModule",{value:!0});var Met=Be("stream"),Uet=oO(),cO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Uet.default(this._root,this._settings),this._stream=new Met.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};uO.default=cO});var Rie=_(fO=>{"use strict";Object.defineProperty(fO,"__esModule",{value:!0});var _et=BS(),PS=vS(),Het=nO(),AO=class extends Het.default{constructor(){super(...arguments),this._scandir=_et.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let o=this._scandir(e,this._settings.fsScandirSettings);for(let a of o)this._handleEntry(a,r)}catch(o){this._handleError(o)}}_handleError(e){if(!!PS.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let o=e.path;r!==void 0&&(e.path=PS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),PS.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&PS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};fO.default=AO});var Tie=_(hO=>{"use strict";Object.defineProperty(hO,"__esModule",{value:!0});var jet=Rie(),pO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new jet.default(this._root,this._settings)}read(){return this._reader.read()}};hO.default=pO});var Lie=_(dO=>{"use strict";Object.defineProperty(dO,"__esModule",{value:!0});var qet=Be("path"),Get=BS(),gO=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,qet.sep),this.fsScandirSettings=new Get.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};dO.default=gO});var xS=_($u=>{"use strict";Object.defineProperty($u,"__esModule",{value:!0});$u.Settings=$u.walkStream=$u.walkSync=$u.walk=void 0;var Nie=Qie(),Yet=Fie(),Wet=Tie(),mO=Lie();$u.Settings=mO.default;function Ket(t,e,r){if(typeof e=="function"){new Nie.default(t,SS()).read(e);return}new Nie.default(t,SS(e)).read(r)}$u.walk=Ket;function Vet(t,e){let r=SS(e);return new Wet.default(t,r).read()}$u.walkSync=Vet;function zet(t,e){let r=SS(e);return new Yet.default(t,r).read()}$u.walkStream=zet;function SS(t={}){return t instanceof mO.default?t:new mO.default(t)}});var bS=_(EO=>{"use strict";Object.defineProperty(EO,"__esModule",{value:!0});var Jet=Be("path"),Xet=Ed(),Oie=vf(),yO=class{constructor(e){this._settings=e,this._fsStatSettings=new Xet.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return Jet.resolve(this._settings.cwd,e)}_makeEntry(e,r){let o={name:r,path:r,dirent:Oie.fs.createDirentFromStats(r,e)};return this._settings.stats&&(o.stats=e),o}_isFatalError(e){return!Oie.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};EO.default=yO});var IO=_(wO=>{"use strict";Object.defineProperty(wO,"__esModule",{value:!0});var Zet=Be("stream"),$et=Ed(),ett=xS(),ttt=bS(),CO=class extends ttt.default{constructor(){super(...arguments),this._walkStream=ett.walkStream,this._stat=$et.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let o=e.map(this._getFullEntryPath,this),a=new Zet.PassThrough({objectMode:!0});a._write=(n,u,A)=>this._getEntry(o[n],e[n],r).then(p=>{p!==null&&r.entryFilter(p)&&a.push(p),n===o.length-1&&a.end(),A()}).catch(A);for(let n=0;nthis._makeEntry(a,r)).catch(a=>{if(o.errorFilter(a))return null;throw a})}_getStat(e){return new Promise((r,o)=>{this._stat(e,this._fsStatSettings,(a,n)=>a===null?r(n):o(a))})}};wO.default=CO});var Mie=_(vO=>{"use strict";Object.defineProperty(vO,"__esModule",{value:!0});var rtt=xS(),ntt=bS(),itt=IO(),BO=class extends ntt.default{constructor(){super(...arguments),this._walkAsync=rtt.walk,this._readerStream=new itt.default(this._settings)}dynamic(e,r){return new Promise((o,a)=>{this._walkAsync(e,r,(n,u)=>{n===null?o(u):a(n)})})}async static(e,r){let o=[],a=this._readerStream.static(e,r);return new Promise((n,u)=>{a.once("error",u),a.on("data",A=>o.push(A)),a.once("end",()=>n(o))})}};vO.default=BO});var Uie=_(PO=>{"use strict";Object.defineProperty(PO,"__esModule",{value:!0});var rE=vf(),DO=class{constructor(e,r,o){this._patterns=e,this._settings=r,this._micromatchOptions=o,this._storage=[],this._fillStorage()}_fillStorage(){let e=rE.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let r of e){let o=this._getPatternSegments(r),a=this._splitSegmentsIntoSections(o);this._storage.push({complete:a.length<=1,pattern:r,segments:o,sections:a})}}_getPatternSegments(e){return rE.pattern.getPatternParts(e,this._micromatchOptions).map(o=>rE.pattern.isDynamicPattern(o,this._settings)?{dynamic:!0,pattern:o,patternRe:rE.pattern.makeRe(o,this._micromatchOptions)}:{dynamic:!1,pattern:o})}_splitSegmentsIntoSections(e){return rE.array.splitWhen(e,r=>r.dynamic&&rE.pattern.hasGlobStar(r.pattern))}};PO.default=DO});var _ie=_(xO=>{"use strict";Object.defineProperty(xO,"__esModule",{value:!0});var stt=Uie(),SO=class extends stt.default{match(e){let r=e.split("/"),o=r.length,a=this._storage.filter(n=>!n.complete||n.segments.length>o);for(let n of a){let u=n.sections[0];if(!n.complete&&o>u.length||r.every((p,h)=>{let C=n.segments[h];return!!(C.dynamic&&C.patternRe.test(p)||!C.dynamic&&C.pattern===p)}))return!0}return!1}};xO.default=SO});var Hie=_(kO=>{"use strict";Object.defineProperty(kO,"__esModule",{value:!0});var kS=vf(),ott=_ie(),bO=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,o){let a=this._getMatcher(r),n=this._getNegativePatternsRe(o);return u=>this._filter(e,u,a,n)}_getMatcher(e){return new ott.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(kS.pattern.isAffectDepthOfReadingPattern);return kS.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,o,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let n=kS.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(n,o)?!1:this._isSkippedByNegativePatterns(n,a)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let o=r.split("/").length;if(e==="")return o;let a=e.split("/").length;return o-a}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!kS.pattern.matchAny(e,r)}};kO.default=bO});var jie=_(FO=>{"use strict";Object.defineProperty(FO,"__esModule",{value:!0});var Cd=vf(),QO=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let o=Cd.pattern.convertPatternsToRe(e,this._micromatchOptions),a=Cd.pattern.convertPatternsToRe(r,this._micromatchOptions);return n=>this._filter(n,o,a)}_filter(e,r,o){if(this._settings.unique&&this._isDuplicateEntry(e)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e.path,o))return!1;let a=this._settings.baseNameMatch?e.name:e.path,n=e.dirent.isDirectory(),u=this._isMatchToPatterns(a,r,n)&&!this._isMatchToPatterns(e.path,o,n);return this._settings.unique&&u&&this._createIndexRecord(e),u}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)return!1;let o=Cd.path.makeAbsolute(this._settings.cwd,e);return Cd.pattern.matchAny(o,r)}_isMatchToPatterns(e,r,o){let a=Cd.path.removeLeadingDotSegment(e),n=Cd.pattern.matchAny(a,r);return!n&&o?Cd.pattern.matchAny(a+"/",r):n}};FO.default=QO});var qie=_(TO=>{"use strict";Object.defineProperty(TO,"__esModule",{value:!0});var att=vf(),RO=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return att.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};TO.default=RO});var Yie=_(NO=>{"use strict";Object.defineProperty(NO,"__esModule",{value:!0});var Gie=vf(),LO=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=Gie.path.makeAbsolute(this._settings.cwd,r),r=Gie.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};NO.default=LO});var QS=_(MO=>{"use strict";Object.defineProperty(MO,"__esModule",{value:!0});var ltt=Be("path"),ctt=Hie(),utt=jie(),Att=qie(),ftt=Yie(),OO=class{constructor(e){this._settings=e,this.errorFilter=new Att.default(this._settings),this.entryFilter=new utt.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new ctt.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new ftt.default(this._settings)}_getRootDirectory(e){return ltt.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};MO.default=OO});var Wie=_(_O=>{"use strict";Object.defineProperty(_O,"__esModule",{value:!0});var ptt=Mie(),htt=QS(),UO=class extends htt.default{constructor(){super(...arguments),this._reader=new ptt.default(this._settings)}async read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return(await this.api(r,e,o)).map(n=>o.transform(n))}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};_O.default=UO});var Kie=_(jO=>{"use strict";Object.defineProperty(jO,"__esModule",{value:!0});var gtt=Be("stream"),dtt=IO(),mtt=QS(),HO=class extends mtt.default{constructor(){super(...arguments),this._reader=new dtt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e),a=this.api(r,e,o),n=new gtt.Readable({objectMode:!0,read:()=>{}});return a.once("error",u=>n.emit("error",u)).on("data",u=>n.emit("data",o.transform(u))).once("end",()=>n.emit("end")),n.once("close",()=>a.destroy()),n}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};jO.default=HO});var Vie=_(GO=>{"use strict";Object.defineProperty(GO,"__esModule",{value:!0});var ytt=Ed(),Ett=xS(),Ctt=bS(),qO=class extends Ctt.default{constructor(){super(...arguments),this._walkSync=Ett.walkSync,this._statSync=ytt.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let o=[];for(let a of e){let n=this._getFullEntryPath(a),u=this._getEntry(n,a,r);u===null||!r.entryFilter(u)||o.push(u)}return o}_getEntry(e,r,o){try{let a=this._getStat(e);return this._makeEntry(a,r)}catch(a){if(o.errorFilter(a))return null;throw a}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};GO.default=qO});var zie=_(WO=>{"use strict";Object.defineProperty(WO,"__esModule",{value:!0});var wtt=Vie(),Itt=QS(),YO=class extends Itt.default{constructor(){super(...arguments),this._reader=new wtt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return this.api(r,e,o).map(o.transform)}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};WO.default=YO});var Jie=_(iE=>{"use strict";Object.defineProperty(iE,"__esModule",{value:!0});iE.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var nE=Be("fs"),Btt=Be("os"),vtt=Math.max(Btt.cpus().length,1);iE.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:nE.lstat,lstatSync:nE.lstatSync,stat:nE.stat,statSync:nE.statSync,readdir:nE.readdir,readdirSync:nE.readdirSync};var KO=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,vtt),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},iE.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};iE.default=KO});var RS=_((ELt,$ie)=>{"use strict";var Xie=$ne(),Zie=tie(),Dtt=Wie(),Ptt=Kie(),Stt=zie(),VO=Jie(),wd=vf();async function zO(t,e){sE(t);let r=JO(t,Dtt.default,e),o=await Promise.all(r);return wd.array.flatten(o)}(function(t){function e(u,A){sE(u);let p=JO(u,Stt.default,A);return wd.array.flatten(p)}t.sync=e;function r(u,A){sE(u);let p=JO(u,Ptt.default,A);return wd.stream.merge(p)}t.stream=r;function o(u,A){sE(u);let p=Zie.transform([].concat(u)),h=new VO.default(A);return Xie.generate(p,h)}t.generateTasks=o;function a(u,A){sE(u);let p=new VO.default(A);return wd.pattern.isDynamicPattern(u,p)}t.isDynamicPattern=a;function n(u){return sE(u),wd.path.escape(u)}t.escapePath=n})(zO||(zO={}));function JO(t,e,r){let o=Zie.transform([].concat(t)),a=new VO.default(r),n=Xie.generate(o,a),u=new e(a);return n.map(u.read,u)}function sE(t){if(![].concat(t).every(o=>wd.string.isString(o)&&!wd.string.isEmpty(o)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}$ie.exports=zO});var wn={};Vt(wn,{checksumFile:()=>LS,checksumPattern:()=>NS,makeHash:()=>Qs});function Qs(...t){let e=(0,TS.createHash)("sha512"),r="";for(let o of t)typeof o=="string"?r+=o:o&&(r&&(e.update(r),r=""),e.update(o));return r&&e.update(r),e.digest("hex")}async function LS(t,{baseFs:e,algorithm:r}={baseFs:oe,algorithm:"sha512"}){let o=await e.openPromise(t,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,TS.createHash)(r),A=0;for(;(A=await e.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await e.closePromise(o)}}async function NS(t,{cwd:e}){let o=(await(0,XO.default)(t,{cwd:fe.fromPortablePath(e),onlyDirectories:!0})).map(A=>`${A}/**/*`),a=await(0,XO.default)([t,...o],{cwd:fe.fromPortablePath(e),onlyFiles:!1});a.sort();let n=await Promise.all(a.map(async A=>{let p=[Buffer.from(A)],h=fe.toPortablePath(A),C=await oe.lstatPromise(h);return C.isSymbolicLink()?p.push(Buffer.from(await oe.readlinkPromise(h))):C.isFile()&&p.push(await oe.readFilePromise(h)),p.join("\0")})),u=(0,TS.createHash)("sha512");for(let A of n)u.update(A);return u.digest("hex")}var TS,XO,rh=yt(()=>{Pt();TS=Be("crypto"),XO=$e(RS())});var G={};Vt(G,{areDescriptorsEqual:()=>ise,areIdentsEqual:()=>t1,areLocatorsEqual:()=>r1,areVirtualPackagesEquivalent:()=>Ntt,bindDescriptor:()=>Ttt,bindLocator:()=>Ltt,convertDescriptorToLocator:()=>OS,convertLocatorToDescriptor:()=>$O,convertPackageToLocator:()=>Qtt,convertToIdent:()=>ktt,convertToManifestRange:()=>Wtt,copyPackage:()=>ZI,devirtualizeDescriptor:()=>$I,devirtualizeLocator:()=>e1,ensureDevirtualizedDescriptor:()=>Ftt,ensureDevirtualizedLocator:()=>Rtt,getIdentVendorPath:()=>nM,isPackageCompatible:()=>jS,isVirtualDescriptor:()=>Pf,isVirtualLocator:()=>Hc,makeDescriptor:()=>In,makeIdent:()=>eA,makeLocator:()=>Fs,makeRange:()=>_S,parseDescriptor:()=>nh,parseFileStyleRange:()=>Gtt,parseIdent:()=>Js,parseLocator:()=>Sf,parseRange:()=>Id,prettyDependent:()=>QN,prettyDescriptor:()=>qn,prettyIdent:()=>cs,prettyLocator:()=>jr,prettyLocatorNoColors:()=>kN,prettyRange:()=>lE,prettyReference:()=>i1,prettyResolution:()=>JI,prettyWorkspace:()=>s1,renamePackage:()=>eM,slugifyIdent:()=>ZO,slugifyLocator:()=>aE,sortDescriptors:()=>cE,stringifyDescriptor:()=>Sa,stringifyIdent:()=>fn,stringifyLocator:()=>xa,tryParseDescriptor:()=>n1,tryParseIdent:()=>sse,tryParseLocator:()=>US,tryParseRange:()=>qtt,virtualizeDescriptor:()=>tM,virtualizePackage:()=>rM});function eA(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:Qs(t,e),scope:t,name:e}}function In(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:Qs(t.identHash,e),range:e}}function Fs(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:Qs(t.identHash,e),reference:e}}function ktt(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function OS(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function $O(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function Qtt(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function eM(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:t.version,languageName:t.languageName,linkType:t.linkType,conditions:t.conditions,dependencies:new Map(t.dependencies),peerDependencies:new Map(t.peerDependencies),dependenciesMeta:new Map(t.dependenciesMeta),peerDependenciesMeta:new Map(t.peerDependenciesMeta),bin:new Map(t.bin)}}function ZI(t){return eM(t,t)}function tM(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return In(t,`virtual:${e}#${t.range}`)}function rM(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return eM(t,Fs(t,`virtual:${e}#${t.reference}`))}function Pf(t){return t.range.startsWith(XI)}function Hc(t){return t.reference.startsWith(XI)}function $I(t){if(!Pf(t))throw new Error("Not a virtual descriptor");return In(t,t.range.replace(MS,""))}function e1(t){if(!Hc(t))throw new Error("Not a virtual descriptor");return Fs(t,t.reference.replace(MS,""))}function Ftt(t){return Pf(t)?In(t,t.range.replace(MS,"")):t}function Rtt(t){return Hc(t)?Fs(t,t.reference.replace(MS,"")):t}function Ttt(t,e){return t.range.includes("::")?t:In(t,`${t.range}::${oE.default.stringify(e)}`)}function Ltt(t,e){return t.reference.includes("::")?t:Fs(t,`${t.reference}::${oE.default.stringify(e)}`)}function t1(t,e){return t.identHash===e.identHash}function ise(t,e){return t.descriptorHash===e.descriptorHash}function r1(t,e){return t.locatorHash===e.locatorHash}function Ntt(t,e){if(!Hc(t))throw new Error("Invalid package type");if(!Hc(e))throw new Error("Invalid package type");if(!t1(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let o=e.dependencies.get(r.identHash);if(!o||!ise(r,o))return!1}return!0}function Js(t){let e=sse(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function sse(t){let e=t.match(Ott);if(!e)return null;let[,r,o]=e;return eA(typeof r<"u"?r:null,o)}function nh(t,e=!1){let r=n1(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function n1(t,e=!1){let r=e?t.match(Mtt):t.match(Utt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid range (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return In(eA(u,a),A)}function Sf(t,e=!1){let r=US(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function US(t,e=!1){let r=e?t.match(_tt):t.match(Htt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid reference (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return Fs(eA(u,a),A)}function Id(t,e){let r=t.match(jtt);if(r===null)throw new Error(`Invalid range (${t})`);let o=typeof r[1]<"u"?r[1]:null;if(typeof e?.requireProtocol=="string"&&o!==e.requireProtocol)throw new Error(`Invalid protocol (${o})`);if(e?.requireProtocol&&o===null)throw new Error(`Missing protocol (${o})`);let a=typeof r[3]<"u"?decodeURIComponent(r[2]):null;if(e?.requireSource&&a===null)throw new Error(`Missing source (${t})`);let n=typeof r[3]<"u"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),u=e?.parseSelector?oE.default.parse(n):n,A=typeof r[4]<"u"?oE.default.parse(r[4]):null;return{protocol:o,source:a,selector:u,params:A}}function qtt(t,e){try{return Id(t,e)}catch{return null}}function Gtt(t,{protocol:e}){let{selector:r,params:o}=Id(t,{requireProtocol:e,requireBindings:!0});if(typeof o.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:Sf(o.locator,!0),path:r}}function ese(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A"),t=t.replaceAll("#","%23"),t}function Ytt(t){return t===null?!1:Object.entries(t).length>0}function _S({protocol:t,source:e,selector:r,params:o}){let a="";return t!==null&&(a+=`${t}`),e!==null&&(a+=`${ese(e)}#`),a+=ese(r),Ytt(o)&&(a+=`::${oE.default.stringify(o)}`),a}function Wtt(t){let{params:e,protocol:r,source:o,selector:a}=Id(t);for(let n in e)n.startsWith("__")&&delete e[n];return _S({protocol:r,source:o,params:e,selector:a})}function fn(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function Sa(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function xa(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function ZO(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function aE(t){let{protocol:e,selector:r}=Id(t.reference),o=e!==null?e.replace(Ktt,""):"exotic",a=tse.default.valid(r),n=a!==null?`${o}-${a}`:`${o}`,u=10;return t.scope?`${ZO(t)}-${n}-${t.locatorHash.slice(0,u)}`:`${ZO(t)}-${n}-${t.locatorHash.slice(0,u)}`}function cs(t,e){return e.scope?`${_t(t,`@${e.scope}/`,Et.SCOPE)}${_t(t,e.name,Et.NAME)}`:`${_t(t,e.name,Et.NAME)}`}function HS(t){if(t.startsWith(XI)){let e=HS(t.substring(t.indexOf("#")+1)),r=t.substring(XI.length,XI.length+xtt);return`${e} [${r}]`}else return t.replace(Vtt,"?[...]")}function lE(t,e){return`${_t(t,HS(e),Et.RANGE)}`}function qn(t,e){return`${cs(t,e)}${_t(t,"@",Et.RANGE)}${lE(t,e.range)}`}function i1(t,e){return`${_t(t,HS(e),Et.REFERENCE)}`}function jr(t,e){return`${cs(t,e)}${_t(t,"@",Et.REFERENCE)}${i1(t,e.reference)}`}function kN(t){return`${fn(t)}@${HS(t.reference)}`}function cE(t){return ks(t,[e=>fn(e),e=>e.range])}function s1(t,e){return cs(t,e.anchoredLocator)}function JI(t,e,r){let o=Pf(e)?$I(e):e;return r===null?`${qn(t,o)} \u2192 ${bN(t).Cross}`:o.identHash===r.identHash?`${qn(t,o)} \u2192 ${i1(t,r.reference)}`:`${qn(t,o)} \u2192 ${jr(t,r)}`}function QN(t,e,r){return r===null?`${jr(t,e)}`:`${jr(t,e)} (via ${lE(t,r.range)})`}function nM(t){return`node_modules/${fn(t)}`}function jS(t,e){return t.conditions?btt(t.conditions,r=>{let[,o,a]=r.match(nse),n=e[o];return n?n.includes(a):!0}):!0}var oE,tse,rse,XI,xtt,nse,btt,MS,Ott,Mtt,Utt,_tt,Htt,jtt,Ktt,Vtt,xo=yt(()=>{oE=$e(Be("querystring")),tse=$e(Jn()),rse=$e(tX());ql();rh();jl();xo();XI="virtual:",xtt=5,nse=/(os|cpu|libc)=([a-z0-9_-]+)/,btt=(0,rse.makeParser)(nse);MS=/^[^#]*#/;Ott=/^(?:@([^/]+?)\/)?([^@/]+)$/;Mtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Utt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;_tt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Htt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;jtt=/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/;Ktt=/:$/;Vtt=/\?.*/});var ose,ase=yt(()=>{xo();ose={hooks:{reduceDependency:(t,e,r,o,{resolver:a,resolveOptions:n})=>{for(let{pattern:u,reference:A}of e.topLevelWorkspace.manifest.resolutions){if(u.from&&(u.from.fullName!==fn(r)||e.configuration.normalizeLocator(Fs(Js(u.from.fullName),u.from.description??r.reference)).locatorHash!==r.locatorHash)||u.descriptor.fullName!==fn(t)||e.configuration.normalizeDependency(In(Sf(u.descriptor.fullName),u.descriptor.description??t.range)).descriptorHash!==t.descriptorHash)continue;return a.bindDescriptor(e.configuration.normalizeDependency(In(t,A)),e.topLevelWorkspace.anchoredLocator,n)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let o=s1(t.configuration,r);await t.configuration.triggerHook(a=>a.validateWorkspace,r,{reportWarning:(a,n)=>e.reportWarning(a,`${o}: ${n}`),reportError:(a,n)=>e.reportError(a,`${o}: ${n}`)})}},validateWorkspace:async(t,e)=>{let{manifest:r}=t;r.resolutions.length&&t.cwd!==t.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(let o of r.errors)e.reportWarning(57,o.message)}}}});var o1,Xn,Bd=yt(()=>{o1=class{supportsDescriptor(e,r){return!!(e.range.startsWith(o1.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(o1.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[o.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.getWorkspaceByCwd(e.reference.slice(o1.protocol.length));return{...e,version:o.manifest.version||"0.0.0",languageName:"unknown",linkType:"SOFT",conditions:null,dependencies:r.project.configuration.normalizeDependencyMap(new Map([...o.manifest.dependencies,...o.manifest.devDependencies])),peerDependencies:new Map([...o.manifest.peerDependencies]),dependenciesMeta:o.manifest.dependenciesMeta,peerDependenciesMeta:o.manifest.peerDependenciesMeta,bin:o.manifest.bin}}},Xn=o1;Xn.protocol="workspace:"});var Qr={};Vt(Qr,{SemVer:()=>fse.SemVer,clean:()=>Jtt,getComparator:()=>use,mergeComparators:()=>iM,satisfiesWithPrereleases:()=>xf,simplifyRanges:()=>sM,stringifyComparator:()=>Ase,validRange:()=>ba});function xf(t,e,r=!1){if(!t)return!1;let o=`${e}${r}`,a=lse.get(o);if(typeof a>"u")try{a=new ih.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{lse.set(o,a||null)}else if(a===null)return!1;let n;try{n=new ih.default.SemVer(t,a)}catch{return!1}return a.test(n)?!0:(n.prerelease&&(n.prerelease=[]),a.set.some(u=>{for(let A of u)A.semver.prerelease&&(A.semver.prerelease=[]);return u.every(A=>A.test(n))}))}function ba(t){if(t.indexOf(":")!==-1)return null;let e=cse.get(t);if(typeof e<"u")return e;try{e=new ih.default.Range(t)}catch{e=null}return cse.set(t,e),e}function Jtt(t){let e=ztt.exec(t);return e?e[1]:null}function use(t){if(t.semver===ih.default.Comparator.ANY)return{gt:null,lt:null};switch(t.operator){case"":return{gt:[">=",t.semver],lt:["<=",t.semver]};case">":case">=":return{gt:[t.operator,t.semver],lt:null};case"<":case"<=":return{gt:null,lt:[t.operator,t.semver]};default:throw new Error(`Assertion failed: Unexpected comparator operator (${t.operator})`)}}function iM(t){if(t.length===0)return null;let e=null,r=null;for(let o of t){if(o.gt){let a=e!==null?ih.default.compare(o.gt[1],e[1]):null;(a===null||a>0||a===0&&o.gt[0]===">")&&(e=o.gt)}if(o.lt){let a=r!==null?ih.default.compare(o.lt[1],r[1]):null;(a===null||a<0||a===0&&o.lt[0]==="<")&&(r=o.lt)}}if(e&&r){let o=ih.default.compare(e[1],r[1]);if(o===0&&(e[0]===">"||r[0]==="<")||o>0)return null}return{gt:e,lt:r}}function Ase(t){if(t.gt&&t.lt){if(t.gt[0]===">="&&t.lt[0]==="<="&&t.gt[1].version===t.lt[1].version)return t.gt[1].version;if(t.gt[0]===">="&&t.lt[0]==="<"){if(t.lt[1].version===`${t.gt[1].major+1}.0.0-0`)return`^${t.gt[1].version}`;if(t.lt[1].version===`${t.gt[1].major}.${t.gt[1].minor+1}.0-0`)return`~${t.gt[1].version}`}}let e=[];return t.gt&&e.push(t.gt[0]+t.gt[1].version),t.lt&&e.push(t.lt[0]+t.lt[1].version),e.length?e.join(" "):"*"}function sM(t){let e=t.map(o=>ba(o).set.map(a=>a.map(n=>use(n)))),r=e.shift().map(o=>iM(o)).filter(o=>o!==null);for(let o of e){let a=[];for(let n of r)for(let u of o){let A=iM([n,...u]);A!==null&&a.push(A)}r=a}return r.length===0?null:r.map(o=>Ase(o)).join(" || ")}var ih,fse,lse,cse,ztt,bf=yt(()=>{ih=$e(Jn()),fse=$e(Jn()),lse=new Map;cse=new Map;ztt=/^(?:[\sv=]*?)((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(?:\s*)$/});function pse(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function hse(t){return t.charCodeAt(0)===65279?t.slice(1):t}function $o(t){return t.replace(/\\/g,"/")}function qS(t,{yamlCompatibilityMode:e}){return e?wN(t):typeof t>"u"||typeof t=="boolean"?t:null}function gse(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let o=r%2===0?"":"!",a=e.slice(r);return`${o}${t}=${a}`}function oM(t,e){return e.length===1?gse(t,e[0]):`(${e.map(r=>gse(t,r)).join(" | ")})`}var dse,uE,Ot,AE=yt(()=>{Pt();Ll();dse=$e(Jn());Bd();jl();bf();xo();uE=class{constructor(){this.indent=" ";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:r=new Tn}={}){let o=V.join(e,"package.json");try{return await uE.fromFile(o,{baseFs:r})}catch(a){if(a.code==="ENOENT")return null;throw a}}static async find(e,{baseFs:r}={}){let o=await uE.tryFind(e,{baseFs:r});if(o===null)throw new Error("Manifest not found");return o}static async fromFile(e,{baseFs:r=new Tn}={}){let o=new uE;return await o.loadFile(e,{baseFs:r}),o}static fromText(e){let r=new uE;return r.loadFromText(e),r}loadFromText(e){let r;try{r=JSON.parse(hse(e)||"{}")}catch(o){throw o.message+=` (when parsing ${e})`,o}this.load(r),this.indent=pse(e)}async loadFile(e,{baseFs:r=new Tn}){let o=await r.readFilePromise(e,"utf8"),a;try{a=JSON.parse(hse(o)||"{}")}catch(n){throw n.message+=` (when parsing ${e})`,n}this.load(a),this.indent=pse(o)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let o=[];if(this.name=null,typeof e.name=="string")try{this.name=Js(e.name)}catch{o.push(new Error("Parsing failed for the 'name' field"))}if(typeof e.version=="string"?this.version=e.version:this.version=null,Array.isArray(e.os)){let n=[];this.os=n;for(let u of e.os)typeof u!="string"?o.push(new Error("Parsing failed for the 'os' field")):n.push(u)}else this.os=null;if(Array.isArray(e.cpu)){let n=[];this.cpu=n;for(let u of e.cpu)typeof u!="string"?o.push(new Error("Parsing failed for the 'cpu' field")):n.push(u)}else this.cpu=null;if(Array.isArray(e.libc)){let n=[];this.libc=n;for(let u of e.libc)typeof u!="string"?o.push(new Error("Parsing failed for the 'libc' field")):n.push(u)}else this.libc=null;if(typeof e.type=="string"?this.type=e.type:this.type=null,typeof e.packageManager=="string"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private=="boolean"?this.private=e.private:this.private=!1,typeof e.license=="string"?this.license=e.license:this.license=null,typeof e.languageName=="string"?this.languageName=e.languageName:this.languageName=null,typeof e.main=="string"?this.main=$o(e.main):this.main=null,typeof e.module=="string"?this.module=$o(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=$o(e.browser);else{this.browser=new Map;for(let[n,u]of Object.entries(e.browser))this.browser.set($o(n),typeof u=="string"?$o(u):u)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")e.bin.trim()===""?o.push(new Error("Invalid bin field")):this.name!==null?this.bin.set(this.name.name,$o(e.bin)):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[n,u]of Object.entries(e.bin)){if(typeof u!="string"||u.trim()===""){o.push(new Error(`Invalid bin definition for '${n}'`));continue}let A=Js(n);this.bin.set(A.name,$o(u))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[n,u]of Object.entries(e.scripts)){if(typeof u!="string"){o.push(new Error(`Invalid script definition for '${n}'`));continue}this.scripts.set(n,u)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[n,u]of Object.entries(e.dependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[n,u]of Object.entries(e.devDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.devDependencies.set(p.identHash,p)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[n,u]of Object.entries(e.peerDependencies)){let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}(typeof u!="string"||!u.startsWith(Xn.protocol)&&!ba(u))&&(o.push(new Error(`Invalid dependency range for '${n}'`)),u="*");let p=In(A,u);this.peerDependencies.set(p.identHash,p)}typeof e.workspaces=="object"&&e.workspaces!==null&&e.workspaces.nohoist&&o.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let a=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces=="object"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let n of a){if(typeof n!="string"){o.push(new Error(`Invalid workspace definition for '${n}'`));continue}this.workspaceDefinitions.push({pattern:n})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[n,u]of Object.entries(e.dependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}`));continue}let A=nh(n),p=this.ensureDependencyMeta(A),h=qS(u.built,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid built meta field for '${n}'`));continue}let C=qS(u.optional,{yamlCompatibilityMode:r});if(C===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}let I=qS(u.unplugged,{yamlCompatibilityMode:r});if(I===null){o.push(new Error(`Invalid unplugged meta field for '${n}'`));continue}Object.assign(p,{built:h,optional:C,unplugged:I})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[n,u]of Object.entries(e.peerDependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}'`));continue}let A=nh(n),p=this.ensurePeerDependencyMeta(A),h=qS(u.optional,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}Object.assign(p,{optional:h})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[n,u]of Object.entries(e.resolutions)){if(typeof u!="string"){o.push(new Error(`Invalid resolution entry for '${n}'`));continue}try{this.resolutions.push({pattern:UD(n),reference:u})}catch(A){o.push(A);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let n of e.files){if(typeof n!="string"){o.push(new Error(`Invalid files entry for '${n}'`));continue}this.files.add(n)}}else this.files=null;if(typeof e.publishConfig=="object"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access=="string"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main=="string"&&(this.publishConfig.main=$o(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=$o(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=$o(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[n,u]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set($o(n),typeof u=="string"?$o(u):u)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,$o(e.publishConfig.bin)]]):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.publishConfig.bin=="object"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[n,u]of Object.entries(e.publishConfig.bin)){if(typeof u!="string"){o.push(new Error(`Invalid bin definition for '${n}'`));continue}this.publishConfig.bin.set(n,$o(u))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let n of e.publishConfig.executableFiles){if(typeof n!="string"){o.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add($o(n))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let n of Object.keys(e.installConfig))n==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:o.push(new Error("Invalid hoisting limits definition")):n=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:o.push(new Error("Invalid selfReferences definition, must be a boolean value")):o.push(new Error(`Unrecognized installConfig key: ${n}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[n,u]of Object.entries(e.optionalDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p);let h=In(A,"unknown"),C=this.ensureDependencyMeta(h);Object.assign(C,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=o}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(oM("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(oM("cpu",this.cpu)),this.libc&&this.libc.length>0&&e.push(oM("libc",this.libc)),e.length>0?e.join(" & "):null}ensureDependencyMeta(e){if(e.range!=="unknown"&&!dse.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=fn(e),o=e.range!=="unknown"?e.range:null,a=this.dependenciesMeta.get(r);a||this.dependenciesMeta.set(r,a=new Map);let n=a.get(o);return n||a.set(o,n={}),n}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=fn(e),o=this.peerDependenciesMeta.get(r);return o||this.peerDependenciesMeta.set(r,o={}),o}setRawField(e,r,{after:o=[]}={}){let a=new Set(o.filter(n=>Object.hasOwn(this.raw,n)));if(a.size===0||Object.hasOwn(this.raw,e))this.raw[e]=r;else{let n=this.raw,u=this.raw={},A=!1;for(let p of Object.keys(n))u[p]=n[p],A||(a.delete(p),a.size===0&&(u[e]=r,A=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=fn(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let n=this.browser;typeof n=="string"?e.browser=n:n instanceof Map&&(e.browser=Object.assign({},...Array.from(n.keys()).sort().map(u=>({[u]:n.get(u)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(n=>({[n]:this.bin.get(n)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:n})=>n)}:e.workspaces=this.workspaceDefinitions.map(({pattern:n})=>n):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let o=[],a=[];for(let n of this.dependencies.values()){let u=this.dependenciesMeta.get(fn(n)),A=!1;if(r&&u){let p=u.get(null);p&&p.optional&&(A=!0)}A?a.push(n):o.push(n)}o.length>0?e.dependencies=Object.assign({},...cE(o).map(n=>({[fn(n)]:n.range}))):delete e.dependencies,a.length>0?e.optionalDependencies=Object.assign({},...cE(a).map(n=>({[fn(n)]:n.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...cE(this.devDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...cE(this.peerDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[n,u]of ks(this.dependenciesMeta.entries(),([A,p])=>A))for(let[A,p]of ks(u.entries(),([h,C])=>h!==null?`0${h}`:"1")){let h=A!==null?Sa(In(Js(n),A)):n,C={...p};r&&A===null&&delete C.optional,Object.keys(C).length!==0&&(e.dependenciesMeta[h]=C)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...ks(this.peerDependenciesMeta.entries(),([n,u])=>n).map(([n,u])=>({[n]:u}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:n,reference:u})=>({[_D(n)]:u}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){e.scripts??={};for(let n of Object.keys(e.scripts))this.scripts.has(n)||delete e.scripts[n];for(let[n,u]of this.scripts.entries())e.scripts[n]=u}else delete e.scripts;return e}},Ot=uE;Ot.fileName="package.json",Ot.allDependencies=["dependencies","devDependencies","peerDependencies"],Ot.hardDependencies=["dependencies","devDependencies"]});var yse=_((TLt,mse)=>{var Xtt=_l(),Ztt=function(){return Xtt.Date.now()};mse.exports=Ztt});var Cse=_((LLt,Ese)=>{var $tt=/\s/;function ert(t){for(var e=t.length;e--&&$tt.test(t.charAt(e)););return e}Ese.exports=ert});var Ise=_((NLt,wse)=>{var trt=Cse(),rrt=/^\s+/;function nrt(t){return t&&t.slice(0,trt(t)+1).replace(rrt,"")}wse.exports=nrt});var fE=_((OLt,Bse)=>{var irt=pd(),srt=zu(),ort="[object Symbol]";function art(t){return typeof t=="symbol"||srt(t)&&irt(t)==ort}Bse.exports=art});var Sse=_((MLt,Pse)=>{var lrt=Ise(),vse=il(),crt=fE(),Dse=0/0,urt=/^[-+]0x[0-9a-f]+$/i,Art=/^0b[01]+$/i,frt=/^0o[0-7]+$/i,prt=parseInt;function hrt(t){if(typeof t=="number")return t;if(crt(t))return Dse;if(vse(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=vse(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=lrt(t);var r=Art.test(t);return r||frt.test(t)?prt(t.slice(2),r?2:8):urt.test(t)?Dse:+t}Pse.exports=hrt});var kse=_((ULt,bse)=>{var grt=il(),aM=yse(),xse=Sse(),drt="Expected a function",mrt=Math.max,yrt=Math.min;function Ert(t,e,r){var o,a,n,u,A,p,h=0,C=!1,I=!1,v=!0;if(typeof t!="function")throw new TypeError(drt);e=xse(e)||0,grt(r)&&(C=!!r.leading,I="maxWait"in r,n=I?mrt(xse(r.maxWait)||0,e):n,v="trailing"in r?!!r.trailing:v);function b(ue){var ye=o,ae=a;return o=a=void 0,h=ue,u=t.apply(ae,ye),u}function E(ue){return h=ue,A=setTimeout(U,e),C?b(ue):u}function F(ue){var ye=ue-p,ae=ue-h,Ie=e-ye;return I?yrt(Ie,n-ae):Ie}function N(ue){var ye=ue-p,ae=ue-h;return p===void 0||ye>=e||ye<0||I&&ae>=n}function U(){var ue=aM();if(N(ue))return z(ue);A=setTimeout(U,F(ue))}function z(ue){return A=void 0,v&&o?b(ue):(o=a=void 0,u)}function te(){A!==void 0&&clearTimeout(A),h=0,o=p=a=A=void 0}function le(){return A===void 0?u:z(aM())}function pe(){var ue=aM(),ye=N(ue);if(o=arguments,a=this,p=ue,ye){if(A===void 0)return E(p);if(I)return clearTimeout(A),A=setTimeout(U,e),b(p)}return A===void 0&&(A=setTimeout(U,e)),u}return pe.cancel=te,pe.flush=le,pe}bse.exports=Ert});var lM=_((_Lt,Qse)=>{var Crt=kse(),wrt=il(),Irt="Expected a function";function Brt(t,e,r){var o=!0,a=!0;if(typeof t!="function")throw new TypeError(Irt);return wrt(r)&&(o="leading"in r?!!r.leading:o,a="trailing"in r?!!r.trailing:a),Crt(t,e,{leading:o,maxWait:e,trailing:a})}Qse.exports=Brt});function Drt(t){return typeof t.reportCode<"u"}var Fse,Rse,Tse,vrt,Jt,Xs,Yl=yt(()=>{Fse=$e(lM()),Rse=Be("stream"),Tse=Be("string_decoder"),vrt=15,Jt=class extends Error{constructor(r,o,a){super(o);this.reportExtra=a;this.reportCode=r}};Xs=class{constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}getRecommendedLength(){return 180}reportCacheHit(e){this.cacheHits.add(e.locatorHash)}reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}static progressViaCounter(e){let r=0,o,a=new Promise(p=>{o=p}),n=p=>{let h=o;a=new Promise(C=>{o=C}),r=p,h()},u=(p=0)=>{n(r+1)},A=async function*(){for(;r{r=u}),a=(0,Fse.default)(u=>{let A=r;o=new Promise(p=>{r=p}),e=u,A()},1e3/vrt),n=async function*(){for(;;)await o,yield{title:e}}();return{[Symbol.asyncIterator](){return n},hasProgress:!1,hasTitle:!0,setTitle:a}}async startProgressPromise(e,r){let o=this.reportProgress(e);try{return await r(e)}finally{o.stop()}}startProgressSync(e,r){let o=this.reportProgress(e);try{return r(e)}finally{o.stop()}}reportInfoOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedInfos.has(a)||(this.reportedInfos.add(a),this.reportInfo(e,r),o?.reportExtra?.(this))}reportWarningOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedWarnings.has(a)||(this.reportedWarnings.add(a),this.reportWarning(e,r),o?.reportExtra?.(this))}reportErrorOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedErrors.has(a)||(this.reportedErrors.add(a),this.reportError(e,r),o?.reportExtra?.(this))}reportExceptionOnce(e){Drt(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let r=new Rse.PassThrough,o=new Tse.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` -`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",e!==null?this.reportInfo(null,`${e} ${p}`):this.reportInfo(null,p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&(e!==null?this.reportInfo(null,`${e} ${n}`):this.reportInfo(null,n))}),r}}});var pE,cM=yt(()=>{Yl();xo();pE=class{constructor(e){this.fetchers=e}supports(e,r){return!!this.tryFetcher(e,r)}getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}tryFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));return o||null}getFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));if(!o)throw new Jt(11,`${jr(r.project.configuration,e)} isn't supported by any available fetcher`);return o}}});var vd,uM=yt(()=>{xo();vd=class{constructor(e){this.resolvers=e.filter(r=>r)}supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.getResolverByDescriptor(e,o).bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,o){return await this.getResolverByDescriptor(e,o).getCandidates(e,r,o)}async getSatisfying(e,r,o,a){return this.getResolverByDescriptor(e,a).getSatisfying(e,r,o,a)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));return o||null}getResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));if(!o)throw new Error(`${qn(r.project.configuration,e)} isn't supported by any available resolver`);return o}tryResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));return o||null}getResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));if(!o)throw new Error(`${jr(r.project.configuration,e)} isn't supported by any available resolver`);return o}}});var hE,AM=yt(()=>{Pt();xo();hE=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Fs(e,a);return r.fetcher.getLocalPath(n,r)}async fetch(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Fs(e,a),u=await r.fetcher.fetch(n,r);return await this.ensureVirtualLink(e,u,r)}getLocatorFilename(e){return aE(e)}async ensureVirtualLink(e,r,o){let a=r.packageFs.getRealPath(),n=o.project.configuration.get("virtualFolder"),u=this.getLocatorFilename(e),A=mi.makeVirtualPath(n,u,a),p=new Uu(A,{baseFs:r.packageFs,pathUtils:V});return{...r,packageFs:p}}}});var gE,a1,Lse=yt(()=>{gE=class{static isVirtualDescriptor(e){return!!e.range.startsWith(gE.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(gE.protocol)}supportsDescriptor(e,r){return gE.isVirtualDescriptor(e)}supportsLocator(e,r){return gE.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,r){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,r,o){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,o,a){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,r){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}},a1=gE;a1.protocol="virtual:"});var dE,fM=yt(()=>{Pt();Bd();dE=class{supports(e){return!!e.reference.startsWith(Xn.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let o=this.getWorkspace(e,r).cwd;return{packageFs:new gn(o),prefixPath:Bt.dot,localPath:o}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Xn.protocol.length))}}});function l1(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Nse(t){return typeof t>"u"?3:l1(t)?0:Array.isArray(t)?1:2}function gM(t,e){return Object.hasOwn(t,e)}function Srt(t){return l1(t)&&gM(t,"onConflict")&&typeof t.onConflict=="string"}function xrt(t){if(typeof t>"u")return{onConflict:"default",value:t};if(!Srt(t))return{onConflict:"default",value:t};if(gM(t,"value"))return t;let{onConflict:e,...r}=t;return{onConflict:e,value:r}}function Ose(t,e){let r=l1(t)&&gM(t,e)?t[e]:void 0;return xrt(r)}function mE(t,e){return[t,e,Mse]}function dM(t){return Array.isArray(t)?t[2]===Mse:!1}function pM(t,e){if(l1(t)){let r={};for(let o of Object.keys(t))r[o]=pM(t[o],e);return mE(e,r)}return Array.isArray(t)?mE(e,t.map(r=>pM(r,e))):mE(e,t)}function hM(t,e,r,o,a){let n,u=[],A=a,p=0;for(let C=a-1;C>=o;--C){let[I,v]=t[C],{onConflict:b,value:E}=Ose(v,r),F=Nse(E);if(F!==3){if(n??=F,F!==n||b==="hardReset"){p=A;break}if(F===2)return mE(I,E);if(u.unshift([I,E]),b==="reset"){p=C;break}b==="extend"&&C===o&&(o=0),A=C}}if(typeof n>"u")return null;let h=u.map(([C])=>C).join(", ");switch(n){case 1:return mE(h,new Array().concat(...u.map(([C,I])=>I.map(v=>pM(v,C)))));case 0:{let C=Object.assign({},...u.map(([,F])=>F)),I=Object.keys(C),v={},b=t.map(([F,N])=>[F,Ose(N,r).value]),E=Prt(b,([F,N])=>{let U=Nse(N);return U!==0&&U!==3});if(E!==-1){let F=b.slice(E+1);for(let N of I)v[N]=hM(F,e,N,0,F.length)}else for(let F of I)v[F]=hM(b,e,F,p,b.length);return mE(h,v)}default:throw new Error("Assertion failed: Non-extendable value type")}}function Use(t){return hM(t.map(([e,r])=>[e,{["."]:r}]),[],".",0,t.length)}function c1(t){return dM(t)?t[1]:t}function GS(t){let e=dM(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>GS(r));if(l1(e)){let r={};for(let[o,a]of Object.entries(e))r[o]=GS(a);return r}return e}function mM(t){return dM(t)?t[0]:null}var Prt,Mse,_se=yt(()=>{Prt=(t,e,r)=>{let o=[...t];return o.reverse(),o.findIndex(e,r)};Mse=Symbol()});var YS={};Vt(YS,{getDefaultGlobalFolder:()=>EM,getHomeFolder:()=>yE,isFolderInside:()=>CM});function EM(){if(process.platform==="win32"){let t=fe.toPortablePath(process.env.LOCALAPPDATA||fe.join((0,yM.homedir)(),"AppData","Local"));return V.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=fe.toPortablePath(process.env.XDG_DATA_HOME);return V.resolve(t,"yarn/berry")}return V.resolve(yE(),".yarn/berry")}function yE(){return fe.toPortablePath((0,yM.homedir)()||"/usr/local/share")}function CM(t,e){let r=V.relative(e,t);return r&&!r.startsWith("..")&&!V.isAbsolute(r)}var yM,WS=yt(()=>{Pt();yM=Be("os")});var Gse=_(EE=>{"use strict";var $Lt=Be("net"),krt=Be("tls"),wM=Be("http"),Hse=Be("https"),Qrt=Be("events"),eNt=Be("assert"),Frt=Be("util");EE.httpOverHttp=Rrt;EE.httpsOverHttp=Trt;EE.httpOverHttps=Lrt;EE.httpsOverHttps=Nrt;function Rrt(t){var e=new kf(t);return e.request=wM.request,e}function Trt(t){var e=new kf(t);return e.request=wM.request,e.createSocket=jse,e.defaultPort=443,e}function Lrt(t){var e=new kf(t);return e.request=Hse.request,e}function Nrt(t){var e=new kf(t);return e.request=Hse.request,e.createSocket=jse,e.defaultPort=443,e}function kf(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||wM.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(o,a,n,u){for(var A=qse(a,n,u),p=0,h=e.requests.length;p=this.maxSockets){n.requests.push(u);return}n.createSocket(u,function(A){A.on("free",p),A.on("close",h),A.on("agentRemove",h),e.onSocket(A);function p(){n.emit("free",A,u)}function h(C){n.removeSocket(A),A.removeListener("free",p),A.removeListener("close",h),A.removeListener("agentRemove",h)}})};kf.prototype.createSocket=function(e,r){var o=this,a={};o.sockets.push(a);var n=IM({},o.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(n.localAddress=e.localAddress),n.proxyAuth&&(n.headers=n.headers||{},n.headers["Proxy-Authorization"]="Basic "+new Buffer(n.proxyAuth).toString("base64")),sh("making CONNECT request");var u=o.request(n);u.useChunkedEncodingByDefault=!1,u.once("response",A),u.once("upgrade",p),u.once("connect",h),u.once("error",C),u.end();function A(I){I.upgrade=!0}function p(I,v,b){process.nextTick(function(){h(I,v,b)})}function h(I,v,b){if(u.removeAllListeners(),v.removeAllListeners(),I.statusCode!==200){sh("tunneling socket could not be established, statusCode=%d",I.statusCode),v.destroy();var E=new Error("tunneling socket could not be established, statusCode="+I.statusCode);E.code="ECONNRESET",e.request.emit("error",E),o.removeSocket(a);return}if(b.length>0){sh("got illegal response body from proxy"),v.destroy();var E=new Error("got illegal response body from proxy");E.code="ECONNRESET",e.request.emit("error",E),o.removeSocket(a);return}return sh("tunneling connection has established"),o.sockets[o.sockets.indexOf(a)]=v,r(v)}function C(I){u.removeAllListeners(),sh(`tunneling socket could not be established, cause=%s -`,I.message,I.stack);var v=new Error("tunneling socket could not be established, cause="+I.message);v.code="ECONNRESET",e.request.emit("error",v),o.removeSocket(a)}};kf.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var o=this.requests.shift();o&&this.createSocket(o,function(a){o.request.onSocket(a)})}};function jse(t,e){var r=this;kf.prototype.createSocket.call(r,t,function(o){var a=t.request.getHeader("host"),n=IM({},r.options,{socket:o,servername:a?a.replace(/:.*$/,""):t.host}),u=krt.connect(0,n);r.sockets[r.sockets.indexOf(o)]=u,e(u)})}function qse(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function IM(t){for(var e=1,r=arguments.length;e{Yse.exports=Gse()});var Ff=_((Qf,KS)=>{"use strict";Object.defineProperty(Qf,"__esModule",{value:!0});var Kse=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Ort(t){return Kse.includes(t)}var Mrt=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","FormData","URLSearchParams","HTMLElement",...Kse];function Urt(t){return Mrt.includes(t)}var _rt=["null","undefined","string","number","bigint","boolean","symbol"];function Hrt(t){return _rt.includes(t)}function CE(t){return e=>typeof e===t}var{toString:Vse}=Object.prototype,u1=t=>{let e=Vse.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&Se.domElement(t))return"HTMLElement";if(Urt(e))return e},ei=t=>e=>u1(e)===t;function Se(t){if(t===null)return"null";switch(typeof t){case"undefined":return"undefined";case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"function":return"Function";case"bigint":return"bigint";case"symbol":return"symbol";default:}if(Se.observable(t))return"Observable";if(Se.array(t))return"Array";if(Se.buffer(t))return"Buffer";let e=u1(t);if(e)return e;if(t instanceof String||t instanceof Boolean||t instanceof Number)throw new TypeError("Please don't use object wrappers for primitive types");return"Object"}Se.undefined=CE("undefined");Se.string=CE("string");var jrt=CE("number");Se.number=t=>jrt(t)&&!Se.nan(t);Se.bigint=CE("bigint");Se.function_=CE("function");Se.null_=t=>t===null;Se.class_=t=>Se.function_(t)&&t.toString().startsWith("class ");Se.boolean=t=>t===!0||t===!1;Se.symbol=CE("symbol");Se.numericString=t=>Se.string(t)&&!Se.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));Se.array=(t,e)=>Array.isArray(t)?Se.function_(e)?t.every(e):!0:!1;Se.buffer=t=>{var e,r,o,a;return(a=(o=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||o===void 0?void 0:o.call(r,t))!==null&&a!==void 0?a:!1};Se.nullOrUndefined=t=>Se.null_(t)||Se.undefined(t);Se.object=t=>!Se.null_(t)&&(typeof t=="object"||Se.function_(t));Se.iterable=t=>{var e;return Se.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};Se.asyncIterable=t=>{var e;return Se.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};Se.generator=t=>Se.iterable(t)&&Se.function_(t.next)&&Se.function_(t.throw);Se.asyncGenerator=t=>Se.asyncIterable(t)&&Se.function_(t.next)&&Se.function_(t.throw);Se.nativePromise=t=>ei("Promise")(t);var qrt=t=>{var e,r;return Se.function_((e=t)===null||e===void 0?void 0:e.then)&&Se.function_((r=t)===null||r===void 0?void 0:r.catch)};Se.promise=t=>Se.nativePromise(t)||qrt(t);Se.generatorFunction=ei("GeneratorFunction");Se.asyncGeneratorFunction=t=>u1(t)==="AsyncGeneratorFunction";Se.asyncFunction=t=>u1(t)==="AsyncFunction";Se.boundFunction=t=>Se.function_(t)&&!t.hasOwnProperty("prototype");Se.regExp=ei("RegExp");Se.date=ei("Date");Se.error=ei("Error");Se.map=t=>ei("Map")(t);Se.set=t=>ei("Set")(t);Se.weakMap=t=>ei("WeakMap")(t);Se.weakSet=t=>ei("WeakSet")(t);Se.int8Array=ei("Int8Array");Se.uint8Array=ei("Uint8Array");Se.uint8ClampedArray=ei("Uint8ClampedArray");Se.int16Array=ei("Int16Array");Se.uint16Array=ei("Uint16Array");Se.int32Array=ei("Int32Array");Se.uint32Array=ei("Uint32Array");Se.float32Array=ei("Float32Array");Se.float64Array=ei("Float64Array");Se.bigInt64Array=ei("BigInt64Array");Se.bigUint64Array=ei("BigUint64Array");Se.arrayBuffer=ei("ArrayBuffer");Se.sharedArrayBuffer=ei("SharedArrayBuffer");Se.dataView=ei("DataView");Se.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;Se.urlInstance=t=>ei("URL")(t);Se.urlString=t=>{if(!Se.string(t))return!1;try{return new URL(t),!0}catch{return!1}};Se.truthy=t=>Boolean(t);Se.falsy=t=>!t;Se.nan=t=>Number.isNaN(t);Se.primitive=t=>Se.null_(t)||Hrt(typeof t);Se.integer=t=>Number.isInteger(t);Se.safeInteger=t=>Number.isSafeInteger(t);Se.plainObject=t=>{if(Vse.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};Se.typedArray=t=>Ort(u1(t));var Grt=t=>Se.safeInteger(t)&&t>=0;Se.arrayLike=t=>!Se.nullOrUndefined(t)&&!Se.function_(t)&&Grt(t.length);Se.inRange=(t,e)=>{if(Se.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(Se.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var Yrt=1,Wrt=["innerHTML","ownerDocument","style","attributes","nodeValue"];Se.domElement=t=>Se.object(t)&&t.nodeType===Yrt&&Se.string(t.nodeName)&&!Se.plainObject(t)&&Wrt.every(e=>e in t);Se.observable=t=>{var e,r,o,a;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((a=(o=t)["@@observable"])===null||a===void 0?void 0:a.call(o)):!1};Se.nodeStream=t=>Se.object(t)&&Se.function_(t.pipe)&&!Se.observable(t);Se.infinite=t=>t===1/0||t===-1/0;var zse=t=>e=>Se.integer(e)&&Math.abs(e%2)===t;Se.evenInteger=zse(0);Se.oddInteger=zse(1);Se.emptyArray=t=>Se.array(t)&&t.length===0;Se.nonEmptyArray=t=>Se.array(t)&&t.length>0;Se.emptyString=t=>Se.string(t)&&t.length===0;Se.nonEmptyString=t=>Se.string(t)&&t.length>0;var Krt=t=>Se.string(t)&&!/\S/.test(t);Se.emptyStringOrWhitespace=t=>Se.emptyString(t)||Krt(t);Se.emptyObject=t=>Se.object(t)&&!Se.map(t)&&!Se.set(t)&&Object.keys(t).length===0;Se.nonEmptyObject=t=>Se.object(t)&&!Se.map(t)&&!Se.set(t)&&Object.keys(t).length>0;Se.emptySet=t=>Se.set(t)&&t.size===0;Se.nonEmptySet=t=>Se.set(t)&&t.size>0;Se.emptyMap=t=>Se.map(t)&&t.size===0;Se.nonEmptyMap=t=>Se.map(t)&&t.size>0;Se.propertyKey=t=>Se.any([Se.string,Se.number,Se.symbol],t);Se.formData=t=>ei("FormData")(t);Se.urlSearchParams=t=>ei("URLSearchParams")(t);var Jse=(t,e,r)=>{if(!Se.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(r.length===0)throw new TypeError("Invalid number of values");return t.call(r,e)};Se.any=(t,...e)=>(Se.array(t)?t:[t]).some(o=>Jse(Array.prototype.some,o,e));Se.all=(t,...e)=>Jse(Array.prototype.every,t,e);var Ht=(t,e,r,o={})=>{if(!t){let{multipleValues:a}=o,n=a?`received values of types ${[...new Set(r.map(u=>`\`${Se(u)}\``))].join(", ")}`:`received value of type \`${Se(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${n}.`)}};Qf.assert={undefined:t=>Ht(Se.undefined(t),"undefined",t),string:t=>Ht(Se.string(t),"string",t),number:t=>Ht(Se.number(t),"number",t),bigint:t=>Ht(Se.bigint(t),"bigint",t),function_:t=>Ht(Se.function_(t),"Function",t),null_:t=>Ht(Se.null_(t),"null",t),class_:t=>Ht(Se.class_(t),"Class",t),boolean:t=>Ht(Se.boolean(t),"boolean",t),symbol:t=>Ht(Se.symbol(t),"symbol",t),numericString:t=>Ht(Se.numericString(t),"string with a number",t),array:(t,e)=>{Ht(Se.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>Ht(Se.buffer(t),"Buffer",t),nullOrUndefined:t=>Ht(Se.nullOrUndefined(t),"null or undefined",t),object:t=>Ht(Se.object(t),"Object",t),iterable:t=>Ht(Se.iterable(t),"Iterable",t),asyncIterable:t=>Ht(Se.asyncIterable(t),"AsyncIterable",t),generator:t=>Ht(Se.generator(t),"Generator",t),asyncGenerator:t=>Ht(Se.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>Ht(Se.nativePromise(t),"native Promise",t),promise:t=>Ht(Se.promise(t),"Promise",t),generatorFunction:t=>Ht(Se.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>Ht(Se.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>Ht(Se.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>Ht(Se.boundFunction(t),"Function",t),regExp:t=>Ht(Se.regExp(t),"RegExp",t),date:t=>Ht(Se.date(t),"Date",t),error:t=>Ht(Se.error(t),"Error",t),map:t=>Ht(Se.map(t),"Map",t),set:t=>Ht(Se.set(t),"Set",t),weakMap:t=>Ht(Se.weakMap(t),"WeakMap",t),weakSet:t=>Ht(Se.weakSet(t),"WeakSet",t),int8Array:t=>Ht(Se.int8Array(t),"Int8Array",t),uint8Array:t=>Ht(Se.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>Ht(Se.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>Ht(Se.int16Array(t),"Int16Array",t),uint16Array:t=>Ht(Se.uint16Array(t),"Uint16Array",t),int32Array:t=>Ht(Se.int32Array(t),"Int32Array",t),uint32Array:t=>Ht(Se.uint32Array(t),"Uint32Array",t),float32Array:t=>Ht(Se.float32Array(t),"Float32Array",t),float64Array:t=>Ht(Se.float64Array(t),"Float64Array",t),bigInt64Array:t=>Ht(Se.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>Ht(Se.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>Ht(Se.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>Ht(Se.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>Ht(Se.dataView(t),"DataView",t),urlInstance:t=>Ht(Se.urlInstance(t),"URL",t),urlString:t=>Ht(Se.urlString(t),"string with a URL",t),truthy:t=>Ht(Se.truthy(t),"truthy",t),falsy:t=>Ht(Se.falsy(t),"falsy",t),nan:t=>Ht(Se.nan(t),"NaN",t),primitive:t=>Ht(Se.primitive(t),"primitive",t),integer:t=>Ht(Se.integer(t),"integer",t),safeInteger:t=>Ht(Se.safeInteger(t),"integer",t),plainObject:t=>Ht(Se.plainObject(t),"plain object",t),typedArray:t=>Ht(Se.typedArray(t),"TypedArray",t),arrayLike:t=>Ht(Se.arrayLike(t),"array-like",t),domElement:t=>Ht(Se.domElement(t),"HTMLElement",t),observable:t=>Ht(Se.observable(t),"Observable",t),nodeStream:t=>Ht(Se.nodeStream(t),"Node.js Stream",t),infinite:t=>Ht(Se.infinite(t),"infinite number",t),emptyArray:t=>Ht(Se.emptyArray(t),"empty array",t),nonEmptyArray:t=>Ht(Se.nonEmptyArray(t),"non-empty array",t),emptyString:t=>Ht(Se.emptyString(t),"empty string",t),nonEmptyString:t=>Ht(Se.nonEmptyString(t),"non-empty string",t),emptyStringOrWhitespace:t=>Ht(Se.emptyStringOrWhitespace(t),"empty string or whitespace",t),emptyObject:t=>Ht(Se.emptyObject(t),"empty object",t),nonEmptyObject:t=>Ht(Se.nonEmptyObject(t),"non-empty object",t),emptySet:t=>Ht(Se.emptySet(t),"empty set",t),nonEmptySet:t=>Ht(Se.nonEmptySet(t),"non-empty set",t),emptyMap:t=>Ht(Se.emptyMap(t),"empty map",t),nonEmptyMap:t=>Ht(Se.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>Ht(Se.propertyKey(t),"PropertyKey",t),formData:t=>Ht(Se.formData(t),"FormData",t),urlSearchParams:t=>Ht(Se.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>Ht(Se.evenInteger(t),"even integer",t),oddInteger:t=>Ht(Se.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>Ht(Se.directInstanceOf(t,e),"T",t),inRange:(t,e)=>Ht(Se.inRange(t,e),"in range",t),any:(t,...e)=>Ht(Se.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>Ht(Se.all(t,...e),"predicate returns truthy for all values",e,{multipleValues:!0})};Object.defineProperties(Se,{class:{value:Se.class_},function:{value:Se.function_},null:{value:Se.null_}});Object.defineProperties(Qf.assert,{class:{value:Qf.assert.class_},function:{value:Qf.assert.function_},null:{value:Qf.assert.null_}});Qf.default=Se;KS.exports=Se;KS.exports.default=Se;KS.exports.assert=Qf.assert});var Xse=_((nNt,BM)=>{"use strict";var VS=class extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}},wE=class{static fn(e){return(...r)=>new wE((o,a,n)=>{r.push(n),e(...r).then(o,a)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,o)=>{this._reject=o;let a=A=>{this._isPending=!1,r(A)},n=A=>{this._isPending=!1,o(A)},u=A=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(A)};return Object.defineProperties(u,{shouldReject:{get:()=>this._rejectOnCancel,set:A=>{this._rejectOnCancel=A}}}),e(a,n,u)})}then(e,r){return this._promise.then(e,r)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let r of this._cancelHandlers)r()}catch(r){this._reject(r)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new VS(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(wE.prototype,Promise.prototype);BM.exports=wE;BM.exports.CancelError=VS});var Zse=_((DM,PM)=>{"use strict";Object.defineProperty(DM,"__esModule",{value:!0});var Vrt=Be("tls"),vM=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let o=typeof r.connect=="function",a=typeof r.secureConnect=="function",n=typeof r.close=="function",u=()=>{o&&r.connect(),t instanceof Vrt.TLSSocket&&a&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),n&&t.once("close",r.close)};t.writable&&!t.connecting?u():t.connecting?t.once("connect",u):t.destroyed&&n&&r.close(t._hadError)};DM.default=vM;PM.exports=vM;PM.exports.default=vM});var $se=_((xM,bM)=>{"use strict";Object.defineProperty(xM,"__esModule",{value:!0});var zrt=Zse(),Jrt=Number(process.versions.node.split(".")[0]),SM=t=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};t.timings=e;let r=u=>{let A=u.emit.bind(u);u.emit=(p,...h)=>(p==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,u.emit=A),A(p,...h))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||Jrt>=13)&&(e.phases.total=Date.now()-e.start)});let o=u=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let A=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};u.prependOnceListener("lookup",A),zrt.default(u,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(u.removeListener("lookup",A),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};t.socket?o(t.socket):t.prependOnceListener("socket",o);let a=()=>{var u;e.upload=Date.now(),e.phases.request=e.upload-(u=e.secureConnect,u??e.connect)};return(()=>typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))()?a():t.prependOnceListener("finish",a),t.prependOnceListener("response",u=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,u.timings=e,r(u),u.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};xM.default=SM;bM.exports=SM;bM.exports.default=SM});var ooe=_((iNt,FM)=>{"use strict";var{V4MAPPED:Xrt,ADDRCONFIG:Zrt,ALL:soe,promises:{Resolver:eoe},lookup:$rt}=Be("dns"),{promisify:kM}=Be("util"),ent=Be("os"),IE=Symbol("cacheableLookupCreateConnection"),QM=Symbol("cacheableLookupInstance"),toe=Symbol("expires"),tnt=typeof soe=="number",roe=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},rnt=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},noe=()=>{let t=!1,e=!1;for(let r of Object.values(ent.networkInterfaces()))for(let o of r)if(!o.internal&&(o.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},nnt=t=>Symbol.iterator in t,ioe={ttl:!0},int={all:!0},zS=class{constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:o=3600,errorTtl:a=.15,resolver:n=new eoe,lookup:u=$rt}={}){if(this.maxTtl=r,this.errorTtl=a,this._cache=e,this._resolver=n,this._dnsLookup=kM(u),this._resolver instanceof eoe?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=kM(this._resolver.resolve4.bind(this._resolver)),this._resolve6=kM(this._resolver.resolve6.bind(this._resolver))),this._iface=noe(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,o<1)this._fallback=!1;else{this._fallback=!0;let A=setInterval(()=>{this._hostnamesToFallback.clear()},o*1e3);A.unref&&A.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,r,o){if(typeof r=="function"?(o=r,r={}):typeof r=="number"&&(r={family:r}),!o)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(a=>{r.all?o(null,a):o(null,a.address,a.family,a.expires,a.ttl)},o)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let o=await this.query(e);if(r.family===6){let a=o.filter(n=>n.family===6);r.hints&Xrt&&(tnt&&r.hints&soe||a.length===0)?rnt(o):o=a}else r.family===4&&(o=o.filter(a=>a.family===4));if(r.hints&Zrt){let{_iface:a}=this;o=o.filter(n=>n.family===6?a.has6:a.has4)}if(o.length===0){let a=new Error(`cacheableLookup ENOTFOUND ${e}`);throw a.code="ENOTFOUND",a.hostname=e,a}return r.all?o:o[0]}async query(e){let r=await this._cache.get(e);if(!r){let o=this._pending[e];if(o)r=await o;else{let a=this.queryAndCache(e);this._pending[e]=a,r=await a}}return r=r.map(o=>({...o})),r}async _resolve(e){let r=async h=>{try{return await h}catch(C){if(C.code==="ENODATA"||C.code==="ENOTFOUND")return[];throw C}},[o,a]=await Promise.all([this._resolve4(e,ioe),this._resolve6(e,ioe)].map(h=>r(h))),n=0,u=0,A=0,p=Date.now();for(let h of o)h.family=4,h.expires=p+h.ttl*1e3,n=Math.max(n,h.ttl);for(let h of a)h.family=6,h.expires=p+h.ttl*1e3,u=Math.max(u,h.ttl);return o.length>0?a.length>0?A=Math.min(n,u):A=n:A=u,{entries:[...o,...a],cacheTtl:A}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,r,o){if(this.maxTtl>0&&o>0){o=Math.min(o,this.maxTtl)*1e3,r[toe]=Date.now()+o;try{await this._cache.set(e,r,o)}catch(a){this.lookupAsync=async()=>{let n=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw n.cause=a,n}}nnt(this._cache)&&this._tick(o)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,int);try{let r=await this._resolve(e);r.entries.length===0&&this._fallback&&(r=await this._lookup(e),r.entries.length!==0&&this._hostnamesToFallback.add(e));let o=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,o),delete this._pending[e],r.entries}catch(r){throw delete this._pending[e],r}}_tick(e){let r=this._nextRemovalTime;(!r||e{this._nextRemovalTime=!1;let o=1/0,a=Date.now();for(let[n,u]of this._cache){let A=u[toe];a>=A?this._cache.delete(n):A("lookup"in r||(r.lookup=this.lookup),e[IE](r,o))}uninstall(e){if(roe(e),e[IE]){if(e[QM]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[IE],delete e[IE],delete e[QM]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=noe(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};FM.exports=zS;FM.exports.default=zS});var coe=_((sNt,RM)=>{"use strict";var snt=typeof URL>"u"?Be("url").URL:URL,ont="text/plain",ant="us-ascii",aoe=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),lnt=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let o=r[1].split(";"),a=r[2],n=e?"":r[3],u=!1;o[o.length-1]==="base64"&&(o.pop(),u=!0);let A=(o.shift()||"").toLowerCase(),h=[...o.map(C=>{let[I,v=""]=C.split("=").map(b=>b.trim());return I==="charset"&&(v=v.toLowerCase(),v===ant)?"":`${I}${v?`=${v}`:""}`}).filter(Boolean)];return u&&h.push("base64"),(h.length!==0||A&&A!==ont)&&h.unshift(A),`data:${h.join(";")},${u?a.trim():a}${n?`#${n}`:""}`},loe=(t,e)=>{if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,"normalizeHttps"))throw new Error("options.normalizeHttps is renamed to options.forceHttp");if(Reflect.has(e,"normalizeHttp"))throw new Error("options.normalizeHttp is renamed to options.forceHttps");if(Reflect.has(e,"stripFragment"))throw new Error("options.stripFragment is renamed to options.stripHash");if(t=t.trim(),/^data:/i.test(t))return lnt(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new snt(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash&&(a.hash=""),a.pathname&&(a.pathname=a.pathname.replace(/((?!:).|^)\/{2,}/g,(n,u)=>/^(?!\/)/g.test(u)?`${u}/`:"/")),a.pathname&&(a.pathname=decodeURI(a.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let n=a.pathname.split("/"),u=n[n.length-1];aoe(u,e.removeDirectoryIndex)&&(n=n.slice(0,n.length-1),a.pathname=n.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let n of[...a.searchParams.keys()])aoe(n,e.removeQueryParameters)&&a.searchParams.delete(n);return e.sortQueryParameters&&a.searchParams.sort(),e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,"")),t=a.toString(),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t};RM.exports=loe;RM.exports.default=loe});var foe=_((oNt,Aoe)=>{Aoe.exports=uoe;function uoe(t,e){if(t&&e)return uoe(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(o){r[o]=t[o]}),r;function r(){for(var o=new Array(arguments.length),a=0;a{var poe=foe();TM.exports=poe(JS);TM.exports.strict=poe(hoe);JS.proto=JS(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return JS(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return hoe(this)},configurable:!0})});function JS(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function hoe(t){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=t.apply(this,arguments)},r=t.name||"Function wrapped with `once`";return e.onceError=r+" shouldn't be called more than once",e.called=!1,e}});var NM=_((lNt,doe)=>{var cnt=LM(),unt=function(){},Ant=function(t){return t.setHeader&&typeof t.abort=="function"},fnt=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},goe=function(t,e,r){if(typeof e=="function")return goe(t,null,e);e||(e={}),r=cnt(r||unt);var o=t._writableState,a=t._readableState,n=e.readable||e.readable!==!1&&t.readable,u=e.writable||e.writable!==!1&&t.writable,A=function(){t.writable||p()},p=function(){u=!1,n||r.call(t)},h=function(){n=!1,u||r.call(t)},C=function(E){r.call(t,E?new Error("exited with error code: "+E):null)},I=function(E){r.call(t,E)},v=function(){if(n&&!(a&&a.ended))return r.call(t,new Error("premature close"));if(u&&!(o&&o.ended))return r.call(t,new Error("premature close"))},b=function(){t.req.on("finish",p)};return Ant(t)?(t.on("complete",p),t.on("abort",v),t.req?b():t.on("request",b)):u&&!o&&(t.on("end",A),t.on("close",A)),fnt(t)&&t.on("exit",C),t.on("end",h),t.on("finish",p),e.error!==!1&&t.on("error",I),t.on("close",v),function(){t.removeListener("complete",p),t.removeListener("abort",v),t.removeListener("request",b),t.req&&t.req.removeListener("finish",p),t.removeListener("end",A),t.removeListener("close",A),t.removeListener("finish",p),t.removeListener("exit",C),t.removeListener("end",h),t.removeListener("error",I),t.removeListener("close",v)}};doe.exports=goe});var Eoe=_((cNt,yoe)=>{var pnt=LM(),hnt=NM(),OM=Be("fs"),A1=function(){},gnt=/^v?\.0/.test(process.version),XS=function(t){return typeof t=="function"},dnt=function(t){return!gnt||!OM?!1:(t instanceof(OM.ReadStream||A1)||t instanceof(OM.WriteStream||A1))&&XS(t.close)},mnt=function(t){return t.setHeader&&XS(t.abort)},ynt=function(t,e,r,o){o=pnt(o);var a=!1;t.on("close",function(){a=!0}),hnt(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,dnt(t))return t.close(A1);if(mnt(t))return t.abort();if(XS(t.destroy))return t.destroy();o(u||new Error("stream was destroyed"))}}},moe=function(t){t()},Ent=function(t,e){return t.pipe(e)},Cnt=function(){var t=Array.prototype.slice.call(arguments),e=XS(t[t.length-1]||A1)&&t.pop()||A1;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,o=t.map(function(a,n){var u=n0;return ynt(a,u,A,function(p){r||(r=p),p&&o.forEach(moe),!u&&(o.forEach(moe),e(r))})});return t.reduce(Ent)};yoe.exports=Cnt});var woe=_((uNt,Coe)=>{"use strict";var{PassThrough:wnt}=Be("stream");Coe.exports=t=>{t={...t};let{array:e}=t,{encoding:r}=t,o=r==="buffer",a=!1;e?a=!(r||o):r=r||"utf8",o&&(r=null);let n=new wnt({objectMode:a});r&&n.setEncoding(r);let u=0,A=[];return n.on("data",p=>{A.push(p),a?u=A.length:u+=p.length}),n.getBufferedValue=()=>e?A:o?Buffer.concat(A,u):A.join(""),n.getBufferedLength=()=>u,n}});var Ioe=_((ANt,BE)=>{"use strict";var Int=Eoe(),Bnt=woe(),ZS=class extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}};async function $S(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e={maxBuffer:1/0,...e};let{maxBuffer:r}=e,o;return await new Promise((a,n)=>{let u=A=>{A&&(A.bufferedData=o.getBufferedValue()),n(A)};o=Int(t,Bnt(e),A=>{if(A){u(A);return}a()}),o.on("data",()=>{o.getBufferedLength()>r&&u(new ZS)})}),o.getBufferedValue()}BE.exports=$S;BE.exports.default=$S;BE.exports.buffer=(t,e)=>$S(t,{...e,encoding:"buffer"});BE.exports.array=(t,e)=>$S(t,{...e,array:!0});BE.exports.MaxBufferError=ZS});var voe=_((pNt,Boe)=>{"use strict";var vnt=new Set([200,203,204,206,300,301,404,405,410,414,501]),Dnt=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Pnt=new Set([500,502,503,504]),Snt={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},xnt={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function Dd(t){let e=parseInt(t,10);return isFinite(e)?e:0}function bnt(t){return t?Pnt.has(t.status):!0}function MM(t){let e={};if(!t)return e;let r=t.trim().split(/\s*,\s*/);for(let o of r){let[a,n]=o.split(/\s*=\s*/,2);e[a]=n===void 0?!0:n.replace(/^"|"$/g,"")}return e}function knt(t){let e=[];for(let r in t){let o=t[r];e.push(o===!0?r:r+"="+o)}if(!!e.length)return e.join(", ")}Boe.exports=class{constructor(e,r,{shared:o,cacheHeuristic:a,immutableMinTimeToLive:n,ignoreCargoCult:u,_fromObject:A}={}){if(A){this._fromObject(A);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=o!==!1,this._cacheHeuristic=a!==void 0?a:.1,this._immutableMinTtl=n!==void 0?n:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=MM(r.headers["cache-control"]),this._method="method"in e?e.method:"GET",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=r.headers.vary?e.headers:null,this._reqcc=MM(e.headers["cache-control"]),u&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":knt(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),r.headers["cache-control"]==null&&/no-cache/.test(r.headers.pragma)&&(this._rescc["no-cache"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc["no-store"]&&(this._method==="GET"||this._method==="HEAD"||this._method==="POST"&&this._hasExplicitExpiration())&&Dnt.has(this._status)&&!this._rescc["no-store"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc["max-age"]||this._isShared&&this._rescc["s-maxage"]||this._rescc.public||vnt.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]||this._rescc["max-age"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request headers missing")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let r=MM(e.headers["cache-control"]);return r["no-cache"]||/no-cache/.test(e.headers.pragma)||r["max-age"]&&this.age()>r["max-age"]||r["min-fresh"]&&this.timeToLive()<1e3*r["min-fresh"]||this.stale()&&!(r["max-stale"]&&!this._rescc["must-revalidate"]&&(r["max-stale"]===!0||r["max-stale"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||r&&e.method==="HEAD")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary==="*")return!1;let r=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(let o of r)if(e.headers[o]!==this._reqHeaders[o])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let o in e)Snt[o]||(r[o]=e[o]);if(e.connection){let o=e.connection.trim().split(/\s*,\s*/);for(let a of o)delete r[a]}if(r.warning){let o=r.warning.split(/,/).filter(a=>!/^\s*1[0-9][0-9]/.test(a));o.length?r.warning=o.join(",").trim():delete r.warning}return r}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),r=this.age();return r>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:"")+'113 - "rfc7234 5.5.4"'),e.age=`${Math.round(r)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){return Dd(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc["no-cache"]||this._isShared&&this._resHeaders["set-cookie"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary==="*")return 0;if(this._isShared){if(this._rescc["proxy-revalidate"])return 0;if(this._rescc["s-maxage"])return Dd(this._rescc["s-maxage"])}if(this._rescc["max-age"])return Dd(this._rescc["max-age"]);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this.date();if(this._resHeaders.expires){let o=Date.parse(this._resHeaders.expires);return Number.isNaN(o)||oo)return Math.max(e,(r-o)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),r=e+Dd(this._rescc["stale-if-error"]),o=e+Dd(this._rescc["stale-while-revalidate"]);return Math.max(0,e,r,o)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Dd(this._rescc["stale-if-error"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Dd(this._rescc["stale-while-revalidate"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e||e.v!==1)throw Error("Invalid serialization");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let r=this._copyWithoutHopByHopHeaders(e.headers);if(delete r["if-range"],!this._requestMatches(e,!0)||!this.storable())return delete r["if-none-match"],delete r["if-modified-since"],r;if(this._resHeaders.etag&&(r["if-none-match"]=r["if-none-match"]?`${r["if-none-match"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),r["accept-ranges"]||r["if-match"]||r["if-unmodified-since"]||this._method&&this._method!="GET"){if(delete r["if-modified-since"],r["if-none-match"]){let a=r["if-none-match"].split(/,/).filter(n=>!/^\s*W\//.test(n));a.length?r["if-none-match"]=a.join(",").trim():delete r["if-none-match"]}}else this._resHeaders["last-modified"]&&!r["if-modified-since"]&&(r["if-modified-since"]=this._resHeaders["last-modified"]);return r}revalidatedPolicy(e,r){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&bnt(r))return{modified:!1,matches:!1,policy:this};if(!r||!r.headers)throw Error("Response headers missing");let o=!1;if(r.status!==void 0&&r.status!=304?o=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?o=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?o=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?o=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(o=!0),!o)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let a={};for(let u in this._resHeaders)a[u]=u in r.headers&&!xnt[u]?r.headers[u]:this._resHeaders[u];let n=Object.assign({},r,{status:this._status,method:this._method,headers:a});return{policy:new this.constructor(e,n,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var ex=_((hNt,Doe)=>{"use strict";Doe.exports=t=>{let e={};for(let[r,o]of Object.entries(t))e[r.toLowerCase()]=o;return e}});var Soe=_((gNt,Poe)=>{"use strict";var Qnt=Be("stream").Readable,Fnt=ex(),UM=class extends Qnt{constructor(e,r,o,a){if(typeof e!="number")throw new TypeError("Argument `statusCode` should be a number");if(typeof r!="object")throw new TypeError("Argument `headers` should be an object");if(!(o instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof a!="string")throw new TypeError("Argument `url` should be a string");super(),this.statusCode=e,this.headers=Fnt(r),this.body=o,this.url=a}_read(){this.push(this.body),this.push(null)}};Poe.exports=UM});var boe=_((dNt,xoe)=>{"use strict";var Rnt=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];xoe.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(Rnt));for(let o of r)o in e||(e[o]=typeof t[o]=="function"?t[o].bind(t):t[o])}});var Qoe=_((mNt,koe)=>{"use strict";var Tnt=Be("stream").PassThrough,Lnt=boe(),Nnt=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new Tnt;return Lnt(t,e),t.pipe(e)};koe.exports=Nnt});var Foe=_(_M=>{_M.stringify=function t(e){if(typeof e>"u")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(":base64:"+e.toString("base64"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e=="object"){var r="",o=Array.isArray(e);r=o?"[":"{";var a=!0;for(var n in e){var u=typeof e[n]=="function"||!o&&typeof e[n]>"u";Object.hasOwnProperty.call(e,n)&&!u&&(a||(r+=","),a=!1,o?e[n]==null?r+="null":r+=t(e[n]):e[n]!==void 0&&(r+=t(n)+":"+t(e[n])))}return r+=o?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e>"u"?"null":JSON.stringify(e)};_M.parse=function(t){return JSON.parse(t,function(e,r){return typeof r=="string"?/^:base64:/.test(r)?Buffer.from(r.substring(8),"base64"):/^:/.test(r)?r.substring(1):r:r})}});var Loe=_((ENt,Toe)=>{"use strict";var Ont=Be("events"),Roe=Foe(),Mnt=t=>{let e={redis:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql"};if(t.adapter||t.uri){let r=t.adapter||/^[^:]*/.exec(t.uri)[0];return new(Be(e[r]))(t)}return new Map},HM=class extends Ont{constructor(e,r){if(super(),this.opts=Object.assign({namespace:"keyv",serialize:Roe.stringify,deserialize:Roe.parse},typeof e=="string"?{uri:e}:e,r),!this.opts.store){let o=Object.assign({},this.opts);this.opts.store=Mnt(o)}typeof this.opts.store.on=="function"&&this.opts.store.on("error",o=>this.emit("error",o)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,r){e=this._getKeyPrefix(e);let{store:o}=this.opts;return Promise.resolve().then(()=>o.get(e)).then(a=>typeof a=="string"?this.opts.deserialize(a):a).then(a=>{if(a!==void 0){if(typeof a.expires=="number"&&Date.now()>a.expires){this.delete(e);return}return r&&r.raw?a:a.value}})}set(e,r,o){e=this._getKeyPrefix(e),typeof o>"u"&&(o=this.opts.ttl),o===0&&(o=void 0);let{store:a}=this.opts;return Promise.resolve().then(()=>{let n=typeof o=="number"?Date.now()+o:null;return r={value:r,expires:n},this.opts.serialize(r)}).then(n=>a.set(e,n,o)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:r}=this.opts;return Promise.resolve().then(()=>r.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};Toe.exports=HM});var Moe=_((wNt,Ooe)=>{"use strict";var Unt=Be("events"),tx=Be("url"),_nt=coe(),Hnt=Ioe(),jM=voe(),Noe=Soe(),jnt=ex(),qnt=Qoe(),Gnt=Loe(),jc=class{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new Gnt({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,o)=>{let a;if(typeof r=="string")a=qM(tx.parse(r)),r={};else if(r instanceof tx.URL)a=qM(tx.parse(r.toString())),r={};else{let[I,...v]=(r.path||"").split("?"),b=v.length>0?`?${v.join("?")}`:"";a=qM({...r,pathname:I,search:b})}r={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...r,...Ynt(a)},r.headers=jnt(r.headers);let n=new Unt,u=_nt(tx.format(a),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),A=`${r.method}:${u}`,p=!1,h=!1,C=I=>{h=!0;let v=!1,b,E=new Promise(N=>{b=()=>{v||(v=!0,N())}}),F=N=>{if(p&&!I.forceRefresh){N.status=N.statusCode;let z=jM.fromObject(p.cachePolicy).revalidatedPolicy(I,N);if(!z.modified){let te=z.policy.responseHeaders();N=new Noe(p.statusCode,te,p.body,p.url),N.cachePolicy=z.policy,N.fromCache=!0}}N.fromCache||(N.cachePolicy=new jM(I,N,I),N.fromCache=!1);let U;I.cache&&N.cachePolicy.storable()?(U=qnt(N),(async()=>{try{let z=Hnt.buffer(N);if(await Promise.race([E,new Promise(ue=>N.once("end",ue))]),v)return;let te=await z,le={cachePolicy:N.cachePolicy.toObject(),url:N.url,statusCode:N.fromCache?p.statusCode:N.statusCode,body:te},pe=I.strictTtl?N.cachePolicy.timeToLive():void 0;I.maxTtl&&(pe=pe?Math.min(pe,I.maxTtl):I.maxTtl),await this.cache.set(A,le,pe)}catch(z){n.emit("error",new jc.CacheError(z))}})()):I.cache&&p&&(async()=>{try{await this.cache.delete(A)}catch(z){n.emit("error",new jc.CacheError(z))}})(),n.emit("response",U||N),typeof o=="function"&&o(U||N)};try{let N=e(I,F);N.once("error",b),N.once("abort",b),n.emit("request",N)}catch(N){n.emit("error",new jc.RequestError(N))}};return(async()=>{let I=async b=>{await Promise.resolve();let E=b.cache?await this.cache.get(A):void 0;if(typeof E>"u")return C(b);let F=jM.fromObject(E.cachePolicy);if(F.satisfiesWithoutRevalidation(b)&&!b.forceRefresh){let N=F.responseHeaders(),U=new Noe(E.statusCode,N,E.body,E.url);U.cachePolicy=F,U.fromCache=!0,n.emit("response",U),typeof o=="function"&&o(U)}else p=E,b.headers=F.revalidationHeaders(b),C(b)},v=b=>n.emit("error",new jc.CacheError(b));this.cache.once("error",v),n.on("response",()=>this.cache.removeListener("error",v));try{await I(r)}catch(b){r.automaticFailover&&!h&&C(r),n.emit("error",new jc.CacheError(b))}})(),n}}};function Ynt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function qM(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}jc.RequestError=class extends Error{constructor(t){super(t.message),this.name="RequestError",Object.assign(this,t)}};jc.CacheError=class extends Error{constructor(t){super(t.message),this.name="CacheError",Object.assign(this,t)}};Ooe.exports=jc});var _oe=_((vNt,Uoe)=>{"use strict";var Wnt=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];Uoe.exports=(t,e)=>{if(e._readableState.autoDestroy)throw new Error("The second stream must have the `autoDestroy` option set to `false`");let r=new Set(Object.keys(t).concat(Wnt)),o={};for(let a of r)a in e||(o[a]={get(){let n=t[a];return typeof n=="function"?n.bind(t):n},set(n){t[a]=n},enumerable:!0,configurable:!1});return Object.defineProperties(e,o),t.once("aborted",()=>{e.destroy(),e.emit("aborted")}),t.once("close",()=>{t.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var joe=_((DNt,Hoe)=>{"use strict";var{Transform:Knt,PassThrough:Vnt}=Be("stream"),GM=Be("zlib"),znt=_oe();Hoe.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof GM.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let o=!0,a=new Knt({transform(A,p,h){o=!1,h(null,A)},flush(A){A()}}),n=new Vnt({autoDestroy:!1,destroy(A,p){t.destroy(),p(A)}}),u=r?GM.createBrotliDecompress():GM.createUnzip();return u.once("error",A=>{if(o&&!t.readable){n.end();return}n.destroy(A)}),znt(t,n),t.pipe(a).pipe(u).pipe(n),n}});var WM=_((PNt,qoe)=>{"use strict";var YM=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction=="function")for(let[o,a]of this.oldCache.entries())this.onEviction(o,a);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let r=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,r),r}}set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCache.delete(e)||r}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[r]=e;this.cache.has(r)||(yield e)}}get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||e++;return Math.min(this._size+e,this.maxSize)}};qoe.exports=YM});var VM=_((SNt,Koe)=>{"use strict";var Jnt=Be("events"),Xnt=Be("tls"),Znt=Be("http2"),$nt=WM(),ea=Symbol("currentStreamsCount"),Goe=Symbol("request"),Wl=Symbol("cachedOriginSet"),vE=Symbol("gracefullyClosing"),eit=["maxDeflateDynamicTableSize","maxSessionMemory","maxHeaderListPairs","maxOutstandingPings","maxReservedRemoteStreams","maxSendHeaderBlockLength","paddingStrategy","localAddress","path","rejectUnauthorized","minDHSize","ca","cert","clientCertEngine","ciphers","key","pfx","servername","minVersion","maxVersion","secureProtocol","crl","honorCipherOrder","ecdhCurve","dhparam","secureOptions","sessionIdContext"],tit=(t,e,r)=>{let o=0,a=t.length;for(;o>>1;r(t[n],e)?o=n+1:a=n}return o},rit=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,KM=(t,e)=>{for(let r of t)r[Wl].lengthe[Wl].includes(o))&&r[ea]+e[ea]<=e.remoteSettings.maxConcurrentStreams&&Woe(r)},nit=(t,e)=>{for(let r of t)e[Wl].lengthr[Wl].includes(o))&&e[ea]+r[ea]<=r.remoteSettings.maxConcurrentStreams&&Woe(e)},Yoe=({agent:t,isFree:e})=>{let r={};for(let o in t.sessions){let n=t.sessions[o].filter(u=>{let A=u[tA.kCurrentStreamsCount]{t[vE]=!0,t[ea]===0&&t.close()},tA=class extends Jnt{constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:o=10,maxCachedTlsSessions:a=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=o,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new $nt({maxSize:a})}static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&&e.hostname!==r&&(e.hostname=r),e.origin}normalizeOptions(e){let r="";if(e)for(let o of eit)e[o]&&(r+=`:${e[o]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let o=this.queue[e][r];this._sessionsCount{Array.isArray(o)?(o=[...o],a()):o=[{resolve:a,reject:n}];let u=this.normalizeOptions(r),A=tA.normalizeOrigin(e,r&&r.servername);if(A===void 0){for(let{reject:C}of o)C(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(u in this.sessions){let C=this.sessions[u],I=-1,v=-1,b;for(let E of C){let F=E.remoteSettings.maxConcurrentStreams;if(F=F||E[vE]||E.destroyed)continue;b||(I=F),N>v&&(b=E,v=N)}}if(b){if(o.length!==1){for(let{reject:E}of o){let F=new Error(`Expected the length of listeners to be 1, got ${o.length}. -Please report this to https://github.com/szmarczak/http2-wrapper/`);E(F)}return}o[0].resolve(b);return}}if(u in this.queue){if(A in this.queue[u]){this.queue[u][A].listeners.push(...o),this._tryToCreateNewSession(u,A);return}}else this.queue[u]={};let p=()=>{u in this.queue&&this.queue[u][A]===h&&(delete this.queue[u][A],Object.keys(this.queue[u]).length===0&&delete this.queue[u])},h=()=>{let C=`${A}:${u}`,I=!1;try{let v=Znt.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(C),...r});v[ea]=0,v[vE]=!1;let b=()=>v[ea]{this.tlsSessionCache.set(C,N)}),v.once("error",N=>{for(let{reject:U}of o)U(N);this.tlsSessionCache.delete(C)}),v.setTimeout(this.timeout,()=>{v.destroy()}),v.once("close",()=>{if(I){E&&this._freeSessionsCount--,this._sessionsCount--;let N=this.sessions[u];N.splice(N.indexOf(v),1),N.length===0&&delete this.sessions[u]}else{let N=new Error("Session closed without receiving a SETTINGS frame");N.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:U}of o)U(N);p()}this._tryToCreateNewSession(u,A)});let F=()=>{if(!(!(u in this.queue)||!b())){for(let N of v[Wl])if(N in this.queue[u]){let{listeners:U}=this.queue[u][N];for(;U.length!==0&&b();)U.shift().resolve(v);let z=this.queue[u];if(z[N].listeners.length===0&&(delete z[N],Object.keys(z).length===0)){delete this.queue[u];break}if(!b())break}}};v.on("origin",()=>{v[Wl]=v.originSet,b()&&(F(),KM(this.sessions[u],v))}),v.once("remoteSettings",()=>{if(v.ref(),v.unref(),this._sessionsCount++,h.destroyed){let N=new Error("Agent has been destroyed");for(let U of o)U.reject(N);v.destroy();return}v[Wl]=v.originSet;{let N=this.sessions;if(u in N){let U=N[u];U.splice(tit(U,v,rit),0,v)}else N[u]=[v]}this._freeSessionsCount+=1,I=!0,this.emit("session",v),F(),p(),v[ea]===0&&this._freeSessionsCount>this.maxFreeSessions&&v.close(),o.length!==0&&(this.getSession(A,r,o),o.length=0),v.on("remoteSettings",()=>{F(),KM(this.sessions[u],v)})}),v[Goe]=v.request,v.request=(N,U)=>{if(v[vE])throw new Error("The session is gracefully closing. No new streams are allowed.");let z=v[Goe](N,U);return v.ref(),++v[ea],v[ea]===v.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,z.once("close",()=>{if(E=b(),--v[ea],!v.destroyed&&!v.closed&&(nit(this.sessions[u],v),b()&&!v.closed)){E||(this._freeSessionsCount++,E=!0);let te=v[ea]===0;te&&v.unref(),te&&(this._freeSessionsCount>this.maxFreeSessions||v[vE])?v.close():(KM(this.sessions[u],v),F())}}),z}}catch(v){for(let b of o)b.reject(v);p()}};h.listeners=o,h.completed=!1,h.destroyed=!1,this.queue[u][A]=h,this._tryToCreateNewSession(u,A)})}request(e,r,o,a){return new Promise((n,u)=>{this.getSession(e,r,[{reject:u,resolve:A=>{try{n(A.request(o,a))}catch(p){u(p)}}}])})}createConnection(e,r){return tA.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let o=e.port||443,a=e.hostname||e.host;return typeof r.servername>"u"&&(r.servername=a),Xnt.connect(o,a,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[ea]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let o of r)o.destroy(e);for(let r of Object.values(this.queue))for(let o of Object.values(r))o.destroyed=!0;this.queue={}}get freeSessions(){return Yoe({agent:this,isFree:!0})}get busySessions(){return Yoe({agent:this,isFree:!1})}};tA.kCurrentStreamsCount=ea;tA.kGracefullyClosing=vE;Koe.exports={Agent:tA,globalAgent:new tA}});var JM=_((xNt,Voe)=>{"use strict";var{Readable:iit}=Be("stream"),zM=class extends iit{constructor(e,r){super({highWaterMark:r,autoDestroy:!1}),this.statusCode=null,this.statusMessage="",this.httpVersion="2.0",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,r){return this.req.setTimeout(e,r),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),this.resume())}_read(){this.req&&this.req._request.resume()}};Voe.exports=zM});var XM=_((bNt,zoe)=>{"use strict";zoe.exports=t=>{let e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return typeof t.port=="string"&&t.port.length!==0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var Xoe=_((kNt,Joe)=>{"use strict";Joe.exports=(t,e,r)=>{for(let o of r)t.on(o,(...a)=>e.emit(o,...a))}});var $oe=_((QNt,Zoe)=>{"use strict";Zoe.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var tae=_((RNt,eae)=>{"use strict";var DE=(t,e,r)=>{eae.exports[e]=class extends t{constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.name} [${e}]`,this.code=e}}};DE(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],o=Array.isArray(r);return o&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${o?"one of":"of"} type ${r}. Received ${typeof t[2]}`});DE(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);DE(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);DE(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);DE(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);DE(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var r4=_((TNt,lae)=>{"use strict";var sit=Be("http2"),{Writable:oit}=Be("stream"),{Agent:rae,globalAgent:ait}=VM(),lit=JM(),cit=XM(),uit=Xoe(),Ait=$oe(),{ERR_INVALID_ARG_TYPE:ZM,ERR_INVALID_PROTOCOL:fit,ERR_HTTP_HEADERS_SENT:nae,ERR_INVALID_HTTP_TOKEN:pit,ERR_HTTP_INVALID_HEADER_VALUE:hit,ERR_INVALID_CHAR:git}=tae(),{HTTP2_HEADER_STATUS:iae,HTTP2_HEADER_METHOD:sae,HTTP2_HEADER_PATH:oae,HTTP2_METHOD_CONNECT:dit}=sit.constants,Qo=Symbol("headers"),$M=Symbol("origin"),e4=Symbol("session"),aae=Symbol("options"),rx=Symbol("flushedHeaders"),f1=Symbol("jobs"),mit=/^[\^`\-\w!#$%&*+.|~]+$/,yit=/[^\t\u0020-\u007E\u0080-\u00FF]/,t4=class extends oit{constructor(e,r,o){super({autoDestroy:!1});let a=typeof e=="string"||e instanceof URL;if(a&&(e=cit(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(o=r,r=a?e:{...e}):r={...e,...r},r.h2session)this[e4]=r.h2session;else if(r.agent===!1)this.agent=new rae({maxFreeSessions:0});else if(typeof r.agent>"u"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new rae({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=ait;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new ZM("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new fit(r.protocol,"https:");let n=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,u=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:A}=r;if(r.timeout=void 0,this[Qo]=Object.create(null),this[f1]=[],this.socket=null,this.connection=null,this.method=r.method||"GET",this.path=r.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,r.headers)for(let[p,h]of Object.entries(r.headers))this.setHeader(p,h);r.auth&&!("authorization"in this[Qo])&&(this[Qo].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[aae]=r,n===443?(this[$M]=`https://${u}`,":authority"in this[Qo]||(this[Qo][":authority"]=u)):(this[$M]=`https://${u}:${n}`,":authority"in this[Qo]||(this[Qo][":authority"]=`${u}:${n}`)),A&&this.setTimeout(A),o&&this.once("response",o),this[rx]=!1}get method(){return this[Qo][sae]}set method(e){e&&(this[Qo][sae]=e.toUpperCase())}get path(){return this[Qo][oae]}set path(e){e&&(this[Qo][oae]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,o){if(this._mustNotHaveABody){o(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let a=()=>this._request.write(e,r,o);this._request?a():this[f1].push(a)}_final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?r():this[f1].push(r)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit("abort")),this.aborted=!0,this.destroy())}_destroy(e,r){this.res&&this.res._dump(),this._request&&this._request.destroy(),r(e)}async flushHeaders(){if(this[rx]||this.destroyed)return;this[rx]=!0;let e=this.method===dit,r=o=>{if(this._request=o,this.destroyed){o.destroy();return}e||uit(o,this,["timeout","continue","close","error"]);let a=u=>(...A)=>{!this.writable&&!this.destroyed?u(...A):this.once("finish",()=>{u(...A)})};o.once("response",a((u,A,p)=>{let h=new lit(this.socket,o.readableHighWaterMark);this.res=h,h.req=this,h.statusCode=u[iae],h.headers=u,h.rawHeaders=p,h.once("end",()=>{this.aborted?(h.aborted=!0,h.emit("aborted")):(h.complete=!0,h.socket=null,h.connection=null)}),e?(h.upgrade=!0,this.emit("connect",h,o,Buffer.alloc(0))?this.emit("close"):o.destroy()):(o.on("data",C=>{!h._dumped&&!h.push(C)&&o.pause()}),o.once("end",()=>{h.push(null)}),this.emit("response",h)||h._dump())})),o.once("headers",a(u=>this.emit("information",{statusCode:u[iae]}))),o.once("trailers",a((u,A,p)=>{let{res:h}=this;h.trailers=u,h.rawTrailers=p}));let{socket:n}=o.session;this.socket=n,this.connection=n;for(let u of this[f1])u();this.emit("socket",this.socket)};if(this[e4])try{r(this[e4].request(this[Qo]))}catch(o){this.emit("error",o)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[$M],this[aae],this[Qo]))}catch(o){this.emit("error",o)}}}getHeader(e){if(typeof e!="string")throw new ZM("name","string",e);return this[Qo][e.toLowerCase()]}get headersSent(){return this[rx]}removeHeader(e){if(typeof e!="string")throw new ZM("name","string",e);if(this.headersSent)throw new nae("remove");delete this[Qo][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new nae("set");if(typeof e!="string"||!mit.test(e)&&!Ait(e))throw new pit("Header name",e);if(typeof r>"u")throw new hit(r,e);if(yit.test(r))throw new git("header content",e);this[Qo][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let o=()=>this._request.setTimeout(e,r);return this._request?o():this[f1].push(o),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};lae.exports=t4});var uae=_((LNt,cae)=>{"use strict";var Eit=Be("tls");cae.exports=(t={})=>new Promise((e,r)=>{let o=Eit.connect(t,()=>{t.resolveSocket?(o.off("error",r),e({alpnProtocol:o.alpnProtocol,socket:o})):(o.destroy(),e({alpnProtocol:o.alpnProtocol}))});o.on("error",r)})});var fae=_((NNt,Aae)=>{"use strict";var Cit=Be("net");Aae.exports=t=>{let e=t.host,r=t.headers&&t.headers.host;return r&&(r.startsWith("[")?r.indexOf("]")===-1?e=r:e=r.slice(1,-1):e=r.split(":",1)[0]),Cit.isIP(e)?"":e}});var gae=_((ONt,i4)=>{"use strict";var pae=Be("http"),n4=Be("https"),wit=uae(),Iit=WM(),Bit=r4(),vit=fae(),Dit=XM(),nx=new Iit({maxSize:100}),p1=new Map,hae=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let o=()=>{t.emit("free",e,r)};e.on("free",o);let a=()=>{t.removeSocket(e,r)};e.on("close",a);let n=()=>{t.removeSocket(e,r),e.off("close",a),e.off("free",o),e.off("agentRemove",n)};e.on("agentRemove",n),t.emit("free",e,r)},Pit=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!nx.has(e)){if(p1.has(e))return(await p1.get(e)).alpnProtocol;let{path:r,agent:o}=t;t.path=t.socketPath;let a=wit(t);p1.set(e,a);try{let{socket:n,alpnProtocol:u}=await a;if(nx.set(e,u),t.path=r,u==="h2")n.destroy();else{let{globalAgent:A}=n4,p=n4.Agent.prototype.createConnection;o?o.createConnection===p?hae(o,n,t):n.destroy():A.createConnection===p?hae(A,n,t):n.destroy()}return p1.delete(e),u}catch(n){throw p1.delete(e),n}}return nx.get(e)};i4.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=Dit(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e={ALPNProtocols:["h2","http/1.1"],...t,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");e.protocol=e.protocol||"https:";let o=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||vit(e),e.port=e.port||(o?443:80),e._defaultAgent=o?n4.globalAgent:pae.globalAgent;let a=e.agent;if(a){if(a.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=a[o?"https":"http"]}return o&&await Pit(e)==="h2"?(a&&(e.agent=a.http2),new Bit(e,r)):pae.request(e,r)};i4.exports.protocolCache=nx});var mae=_((MNt,dae)=>{"use strict";var Sit=Be("http2"),xit=VM(),s4=r4(),bit=JM(),kit=gae(),Qit=(t,e,r)=>new s4(t,e,r),Fit=(t,e,r)=>{let o=new s4(t,e,r);return o.end(),o};dae.exports={...Sit,ClientRequest:s4,IncomingMessage:bit,...xit,request:Qit,get:Fit,auto:kit}});var a4=_(o4=>{"use strict";Object.defineProperty(o4,"__esModule",{value:!0});var yae=Ff();o4.default=t=>yae.default.nodeStream(t)&&yae.default.function_(t.getBoundary)});var Iae=_(l4=>{"use strict";Object.defineProperty(l4,"__esModule",{value:!0});var Cae=Be("fs"),wae=Be("util"),Eae=Ff(),Rit=a4(),Tit=wae.promisify(Cae.stat);l4.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(Eae.default.string(t))return Buffer.byteLength(t);if(Eae.default.buffer(t))return t.length;if(Rit.default(t))return wae.promisify(t.getLength.bind(t))();if(t instanceof Cae.ReadStream){let{size:r}=await Tit(t.path);return r===0?void 0:r}}});var u4=_(c4=>{"use strict";Object.defineProperty(c4,"__esModule",{value:!0});function Lit(t,e,r){let o={};for(let a of r)o[a]=(...n)=>{e.emit(a,...n)},t.on(a,o[a]);return()=>{for(let a of r)t.off(a,o[a])}}c4.default=Lit});var Bae=_(A4=>{"use strict";Object.defineProperty(A4,"__esModule",{value:!0});A4.default=()=>{let t=[];return{once(e,r,o){e.once(r,o),t.push({origin:e,event:r,fn:o})},unhandleAll(){for(let e of t){let{origin:r,event:o,fn:a}=e;r.removeListener(o,a)}t.length=0}}}});var Dae=_(h1=>{"use strict";Object.defineProperty(h1,"__esModule",{value:!0});h1.TimeoutError=void 0;var Nit=Be("net"),Oit=Bae(),vae=Symbol("reentry"),Mit=()=>{},ix=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};h1.TimeoutError=ix;h1.default=(t,e,r)=>{if(vae in t)return Mit;t[vae]=!0;let o=[],{once:a,unhandleAll:n}=Oit.default(),u=(I,v,b)=>{var E;let F=setTimeout(v,I,I,b);(E=F.unref)===null||E===void 0||E.call(F);let N=()=>{clearTimeout(F)};return o.push(N),N},{host:A,hostname:p}=r,h=(I,v)=>{t.destroy(new ix(I,v))},C=()=>{for(let I of o)I();n()};if(t.once("error",I=>{if(C(),t.listenerCount("error")===0)throw I}),t.once("close",C),a(t,"response",I=>{a(I,"end",C)}),typeof e.request<"u"&&u(e.request,h,"request"),typeof e.socket<"u"){let I=()=>{h(e.socket,"socket")};t.setTimeout(e.socket,I),o.push(()=>{t.removeListener("timeout",I)})}return a(t,"socket",I=>{var v;let{socketPath:b}=t;if(I.connecting){let E=Boolean(b??Nit.isIP((v=p??A)!==null&&v!==void 0?v:"")!==0);if(typeof e.lookup<"u"&&!E&&typeof I.address().address>"u"){let F=u(e.lookup,h,"lookup");a(I,"lookup",F)}if(typeof e.connect<"u"){let F=()=>u(e.connect,h,"connect");E?a(I,"connect",F()):a(I,"lookup",N=>{N===null&&a(I,"connect",F())})}typeof e.secureConnect<"u"&&r.protocol==="https:"&&a(I,"connect",()=>{let F=u(e.secureConnect,h,"secureConnect");a(I,"secureConnect",F)})}if(typeof e.send<"u"){let E=()=>u(e.send,h,"send");I.connecting?a(I,"connect",()=>{a(t,"upload-complete",E())}):a(t,"upload-complete",E())}}),typeof e.response<"u"&&a(t,"upload-complete",()=>{let I=u(e.response,h,"response");a(t,"response",I)}),C}});var Sae=_(f4=>{"use strict";Object.defineProperty(f4,"__esModule",{value:!0});var Pae=Ff();f4.default=t=>{t=t;let e={protocol:t.protocol,hostname:Pae.default.string(t.hostname)&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return Pae.default.string(t.port)&&t.port.length>0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var xae=_(p4=>{"use strict";Object.defineProperty(p4,"__esModule",{value:!0});var Uit=Be("url"),_it=["protocol","host","hostname","port","pathname","search"];p4.default=(t,e)=>{var r,o;if(e.path){if(e.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(e.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(e.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(e.search&&e.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!t){if(!e.protocol)throw new TypeError("No URL protocol specified");t=`${e.protocol}//${(o=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&o!==void 0?o:""}`}let a=new Uit.URL(t);if(e.path){let n=e.path.indexOf("?");n===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,n),e.search=e.path.slice(n+1)),delete e.path}for(let n of _it)e[n]&&(a[n]=e[n].toString());return a}});var bae=_(g4=>{"use strict";Object.defineProperty(g4,"__esModule",{value:!0});var h4=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,r){typeof e=="object"?this.weakMap.set(e,r):this.map.set(e,r)}get(e){return typeof e=="object"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e=="object"?this.weakMap.has(e):this.map.has(e)}};g4.default=h4});var m4=_(d4=>{"use strict";Object.defineProperty(d4,"__esModule",{value:!0});var Hit=async t=>{let e=[],r=0;for await(let o of t)e.push(o),r+=Buffer.byteLength(o);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};d4.default=Hit});var Qae=_(Pd=>{"use strict";Object.defineProperty(Pd,"__esModule",{value:!0});Pd.dnsLookupIpVersionToFamily=Pd.isDnsLookupIpVersion=void 0;var kae={auto:0,ipv4:4,ipv6:6};Pd.isDnsLookupIpVersion=t=>t in kae;Pd.dnsLookupIpVersionToFamily=t=>{if(Pd.isDnsLookupIpVersion(t))return kae[t];throw new Error("Invalid DNS lookup IP version")}});var y4=_(sx=>{"use strict";Object.defineProperty(sx,"__esModule",{value:!0});sx.isResponseOk=void 0;sx.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var Rae=_(E4=>{"use strict";Object.defineProperty(E4,"__esModule",{value:!0});var Fae=new Set;E4.default=t=>{Fae.has(t)||(Fae.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var Tae=_(C4=>{"use strict";Object.defineProperty(C4,"__esModule",{value:!0});var Ai=Ff(),jit=(t,e)=>{if(Ai.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");Ai.assert.any([Ai.default.string,Ai.default.undefined],t.encoding),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.resolveBodyOnly),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.methodRewriting),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.isStream),Ai.assert.any([Ai.default.string,Ai.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry={...e.retry}:t.retry={calculateDelay:o=>o.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},Ai.default.object(r)?(t.retry={...t.retry,...r},t.retry.methods=[...new Set(t.retry.methods.map(o=>o.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):Ai.default.number(r)&&(t.retry.limit=r),Ai.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(Ai.default.number))),Ai.default.object(t.pagination)){e&&(t.pagination={...e.pagination,...t.pagination});let{pagination:o}=t;if(!Ai.default.function_(o.transform))throw new Error("`options.pagination.transform` must be implemented");if(!Ai.default.function_(o.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!Ai.default.function_(o.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!Ai.default.function_(o.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return t.responseType==="json"&&t.headers.accept===void 0&&(t.headers.accept="application/json"),t};C4.default=jit});var Lae=_(g1=>{"use strict";Object.defineProperty(g1,"__esModule",{value:!0});g1.retryAfterStatusCodes=void 0;g1.retryAfterStatusCodes=new Set([413,429,503]);var qit=({attemptCount:t,retryOptions:e,error:r,retryAfter:o})=>{if(t>e.limit)return 0;let a=e.methods.includes(r.options.method),n=e.errorCodes.includes(r.code),u=r.response&&e.statusCodes.includes(r.response.statusCode);if(!a||!n&&!u)return 0;if(r.response){if(o)return e.maxRetryAfter===void 0||o>e.maxRetryAfter?0:o;if(r.response.statusCode===413)return 0}let A=Math.random()*100;return 2**(t-1)*1e3+A};g1.default=qit});var y1=_(Bn=>{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});Bn.UnsupportedProtocolError=Bn.ReadError=Bn.TimeoutError=Bn.UploadError=Bn.CacheError=Bn.HTTPError=Bn.MaxRedirectsError=Bn.RequestError=Bn.setNonEnumerableProperties=Bn.knownHookEvents=Bn.withoutBody=Bn.kIsNormalizedAlready=void 0;var Nae=Be("util"),Oae=Be("stream"),Git=Be("fs"),oh=Be("url"),Mae=Be("http"),w4=Be("http"),Yit=Be("https"),Wit=$se(),Kit=ooe(),Uae=Moe(),Vit=joe(),zit=mae(),Jit=ex(),st=Ff(),Xit=Iae(),_ae=a4(),Zit=u4(),Hae=Dae(),$it=Sae(),jae=xae(),est=bae(),tst=m4(),qae=Qae(),rst=y4(),ah=Rae(),nst=Tae(),ist=Lae(),I4,Zs=Symbol("request"),lx=Symbol("response"),PE=Symbol("responseSize"),SE=Symbol("downloadedSize"),xE=Symbol("bodySize"),bE=Symbol("uploadedSize"),ox=Symbol("serverResponsesPiped"),Gae=Symbol("unproxyEvents"),Yae=Symbol("isFromCache"),B4=Symbol("cancelTimeouts"),Wae=Symbol("startedReading"),kE=Symbol("stopReading"),ax=Symbol("triggerRead"),lh=Symbol("body"),d1=Symbol("jobs"),Kae=Symbol("originalResponse"),Vae=Symbol("retryTimeout");Bn.kIsNormalizedAlready=Symbol("isNormalizedAlready");var sst=st.default.string(process.versions.brotli);Bn.withoutBody=new Set(["GET","HEAD"]);Bn.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function ost(t){for(let e in t){let r=t[e];if(!st.default.string(r)&&!st.default.number(r)&&!st.default.boolean(r)&&!st.default.null_(r)&&!st.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function ast(t){return st.default.object(t)&&!("statusCode"in t)}var v4=new est.default,lst=async t=>new Promise((e,r)=>{let o=a=>{r(a)};t.pending||e(),t.once("error",o),t.once("ready",()=>{t.off("error",o),e()})}),cst=new Set([300,301,302,303,304,307,308]),ust=["context","body","json","form"];Bn.setNonEnumerableProperties=(t,e)=>{let r={};for(let o of t)if(!!o)for(let a of ust)a in o&&(r[a]={writable:!0,configurable:!0,enumerable:!1,value:o[a]});Object.defineProperties(e,r)};var Vi=class extends Error{constructor(e,r,o){var a;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,o instanceof gx?(Object.defineProperty(this,"request",{enumerable:!1,value:o}),Object.defineProperty(this,"response",{enumerable:!1,value:o[lx]}),Object.defineProperty(this,"options",{enumerable:!1,value:o.options})):Object.defineProperty(this,"options",{enumerable:!1,value:o}),this.timings=(a=this.request)===null||a===void 0?void 0:a.timings,st.default.string(r.stack)&&st.default.string(this.stack)){let n=this.stack.indexOf(this.message)+this.message.length,u=this.stack.slice(n).split(` -`).reverse(),A=r.stack.slice(r.stack.indexOf(r.message)+r.message.length).split(` -`).reverse();for(;A.length!==0&&A[0]===u[0];)u.shift();this.stack=`${this.stack.slice(0,n)}${u.reverse().join(` -`)}${A.reverse().join(` -`)}`}}};Bn.RequestError=Vi;var cx=class extends Vi{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}};Bn.MaxRedirectsError=cx;var ux=class extends Vi{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}};Bn.HTTPError=ux;var Ax=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="CacheError"}};Bn.CacheError=Ax;var fx=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="UploadError"}};Bn.UploadError=fx;var px=class extends Vi{constructor(e,r,o){super(e.message,e,o),this.name="TimeoutError",this.event=e.event,this.timings=r}};Bn.TimeoutError=px;var m1=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="ReadError"}};Bn.ReadError=m1;var hx=class extends Vi{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}};Bn.UnsupportedProtocolError=hx;var Ast=["socket","connect","continue","information","upgrade","timeout"],gx=class extends Oae.Duplex{constructor(e,r={},o){super({autoDestroy:!1,highWaterMark:0}),this[SE]=0,this[bE]=0,this.requestInitialized=!1,this[ox]=new Set,this.redirects=[],this[kE]=!1,this[ax]=!1,this[d1]=[],this.retryCount=0,this._progressCallbacks=[];let a=()=>this._unlockWrite(),n=()=>this._lockWrite();this.on("pipe",h=>{h.prependListener("data",a),h.on("data",n),h.prependListener("end",a),h.on("end",n)}),this.on("unpipe",h=>{h.off("data",a),h.off("data",n),h.off("end",a),h.off("end",n)}),this.on("pipe",h=>{h instanceof w4.IncomingMessage&&(this.options.headers={...h.headers,...this.options.headers})});let{json:u,body:A,form:p}=r;if((u||A||p)&&this._lockWrite(),Bn.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,o)}catch(h){st.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(h);return}(async()=>{var h;try{this.options.body instanceof Git.ReadStream&&await lst(this.options.body);let{url:C}=this.options;if(!C)throw new TypeError("Missing `url` property");if(this.requestUrl=C.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(h=this[Zs])===null||h===void 0||h.destroy();return}for(let I of this[d1])I();this[d1].length=0,this.requestInitialized=!0}catch(C){if(C instanceof Vi){this._beforeError(C);return}this.destroyed||this.destroy(C)}})()}static normalizeArguments(e,r,o){var a,n,u,A,p;let h=r;if(st.default.object(e)&&!st.default.urlInstance(e))r={...o,...e,...r};else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...o,...r},e!==void 0&&(r.url=e),st.default.urlInstance(r.url)&&(r.url=new oh.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),st.assert.any([st.default.string,st.default.undefined],r.method),st.assert.any([st.default.object,st.default.undefined],r.headers),st.assert.any([st.default.string,st.default.urlInstance,st.default.undefined],r.prefixUrl),st.assert.any([st.default.object,st.default.undefined],r.cookieJar),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.searchParams),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.cache),st.assert.any([st.default.object,st.default.number,st.default.undefined],r.timeout),st.assert.any([st.default.object,st.default.undefined],r.context),st.assert.any([st.default.object,st.default.undefined],r.hooks),st.assert.any([st.default.boolean,st.default.undefined],r.decompress),st.assert.any([st.default.boolean,st.default.undefined],r.ignoreInvalidCookies),st.assert.any([st.default.boolean,st.default.undefined],r.followRedirect),st.assert.any([st.default.number,st.default.undefined],r.maxRedirects),st.assert.any([st.default.boolean,st.default.undefined],r.throwHttpErrors),st.assert.any([st.default.boolean,st.default.undefined],r.http2),st.assert.any([st.default.boolean,st.default.undefined],r.allowGetBody),st.assert.any([st.default.string,st.default.undefined],r.localAddress),st.assert.any([qae.isDnsLookupIpVersion,st.default.undefined],r.dnsLookupIpVersion),st.assert.any([st.default.object,st.default.undefined],r.https),st.assert.any([st.default.boolean,st.default.undefined],r.rejectUnauthorized),r.https&&(st.assert.any([st.default.boolean,st.default.undefined],r.https.rejectUnauthorized),st.assert.any([st.default.function_,st.default.undefined],r.https.checkServerIdentity),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificateAuthority),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.key),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificate),st.assert.any([st.default.string,st.default.undefined],r.https.passphrase),st.assert.any([st.default.string,st.default.buffer,st.default.array,st.default.undefined],r.https.pfx)),st.assert.any([st.default.object,st.default.undefined],r.cacheOptions),st.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===o?.headers?r.headers={...r.headers}:r.headers=Jit({...o?.headers,...r.headers}),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==o?.searchParams){let b;if(st.default.string(r.searchParams)||r.searchParams instanceof oh.URLSearchParams)b=new oh.URLSearchParams(r.searchParams);else{ost(r.searchParams),b=new oh.URLSearchParams;for(let E in r.searchParams){let F=r.searchParams[E];F===null?b.append(E,""):F!==void 0&&b.append(E,F)}}(a=o?.searchParams)===null||a===void 0||a.forEach((E,F)=>{b.has(F)||b.append(F,E)}),r.searchParams=b}if(r.username=(n=r.username)!==null&&n!==void 0?n:"",r.password=(u=r.password)!==null&&u!==void 0?u:"",st.default.undefined(r.prefixUrl)?r.prefixUrl=(A=o?.prefixUrl)!==null&&A!==void 0?A:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),st.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=jae.default(r.prefixUrl+r.url,r)}else(st.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=jae.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:b}=r;Object.defineProperty(r,"prefixUrl",{set:F=>{let N=r.url;if(!N.href.startsWith(F))throw new Error(`Cannot change \`prefixUrl\` from ${b} to ${F}: ${N.href}`);r.url=new oh.URL(F+N.href.slice(b.length)),b=F},get:()=>b});let{protocol:E}=r.url;if(E==="unix:"&&(E="http:",r.url=new oh.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),E!=="http:"&&E!=="https:")throw new hx(r);r.username===""?r.username=r.url.username:r.url.username=r.username,r.password===""?r.password=r.url.password:r.url.password=r.password}let{cookieJar:C}=r;if(C){let{setCookie:b,getCookieString:E}=C;st.assert.function_(b),st.assert.function_(E),b.length===4&&E.length===0&&(b=Nae.promisify(b.bind(r.cookieJar)),E=Nae.promisify(E.bind(r.cookieJar)),r.cookieJar={setCookie:b,getCookieString:E})}let{cache:I}=r;if(I&&(v4.has(I)||v4.set(I,new Uae((b,E)=>{let F=b[Zs](b,E);return st.default.promise(F)&&(F.once=(N,U)=>{if(N==="error")F.catch(U);else if(N==="abort")(async()=>{try{(await F).once("abort",U)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${N}`);return F}),F},I))),r.cacheOptions={...r.cacheOptions},r.dnsCache===!0)I4||(I4=new Kit.default),r.dnsCache=I4;else if(!st.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${st.default(r.dnsCache)}`);st.default.number(r.timeout)?r.timeout={request:r.timeout}:o&&r.timeout!==o.timeout?r.timeout={...o.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});let v=r.hooks===o?.hooks;r.hooks={...r.hooks};for(let b of Bn.knownHookEvents)if(b in r.hooks)if(st.default.array(r.hooks[b]))r.hooks[b]=[...r.hooks[b]];else throw new TypeError(`Parameter \`${b}\` must be an Array, got ${st.default(r.hooks[b])}`);else r.hooks[b]=[];if(o&&!v)for(let b of Bn.knownHookEvents)o.hooks[b].length>0&&(r.hooks[b]=[...o.hooks[b],...r.hooks[b]]);if("family"in r&&ah.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),o?.https&&(r.https={...o.https,...r.https}),"rejectUnauthorized"in r&&ah.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&ah.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&ah.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&ah.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&ah.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&ah.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&ah.default('"options.pfx" was never documented, please use "options.https.pfx"'),"followRedirects"in r)throw new TypeError("The `followRedirects` option does not exist. Use `followRedirect` instead.");if(r.agent){for(let b in r.agent)if(b!=="http"&&b!=="https"&&b!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${b}\``)}return r.maxRedirects=(p=r.maxRedirects)!==null&&p!==void 0?p:0,Bn.setNonEnumerableProperties([o,h],r),nst.default(r,o)}_lockWrite(){let e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:r}=e,o=!st.default.undefined(e.form),a=!st.default.undefined(e.json),n=!st.default.undefined(e.body),u=o||a||n,A=Bn.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=A,u){if(A)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([n,o,a].filter(p=>p).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(n&&!(e.body instanceof Oae.Readable)&&!st.default.string(e.body)&&!st.default.buffer(e.body)&&!_ae.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(o&&!st.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let p=!st.default.string(r["content-type"]);n?(_ae.default(e.body)&&p&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[lh]=e.body):o?(p&&(r["content-type"]="application/x-www-form-urlencoded"),this[lh]=new oh.URLSearchParams(e.form).toString()):(p&&(r["content-type"]="application/json"),this[lh]=e.stringifyJson(e.json));let h=await Xit.default(this[lh],e.headers);st.default.undefined(r["content-length"])&&st.default.undefined(r["transfer-encoding"])&&!A&&!st.default.undefined(h)&&(r["content-length"]=String(h))}}else A?this._lockWrite():this._unlockWrite();this[xE]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:o}=r;this[Kae]=e,r.decompress&&(e=Vit(e));let a=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:Mae.STATUS_CODES[a],n.url=r.url.toString(),n.requestUrl=this.requestUrl,n.redirectUrls=this.redirects,n.request=this,n.isFromCache=e.fromCache||!1,n.ip=this.ip,n.retryCount=this.retryCount,this[Yae]=n.isFromCache,this[PE]=Number(e.headers["content-length"])||void 0,this[lx]=e,e.once("end",()=>{this[PE]=this[SE],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",A=>{e.destroy(),this._beforeError(new m1(A,this))}),e.once("aborted",()=>{this._beforeError(new m1({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let u=e.headers["set-cookie"];if(st.default.object(r.cookieJar)&&u){let A=u.map(async p=>r.cookieJar.setCookie(p,o.toString()));r.ignoreInvalidCookies&&(A=A.map(async p=>p.catch(()=>{})));try{await Promise.all(A)}catch(p){this._beforeError(p);return}}if(r.followRedirect&&e.headers.location&&cst.has(a)){if(e.resume(),this[Zs]&&(this[B4](),delete this[Zs],this[Gae]()),(a===303&&r.method!=="GET"&&r.method!=="HEAD"||!r.methodRewriting)&&(r.method="GET","body"in r&&delete r.body,"json"in r&&delete r.json,"form"in r&&delete r.form,this[lh]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new cx(this));return}try{let p=Buffer.from(e.headers.location,"binary").toString(),h=new oh.URL(p,o),C=h.toString();decodeURI(C),h.hostname!==o.hostname||h.port!==o.port?("host"in r.headers&&delete r.headers.host,"cookie"in r.headers&&delete r.headers.cookie,"authorization"in r.headers&&delete r.headers.authorization,(r.username||r.password)&&(r.username="",r.password="")):(h.username=r.username,h.password=r.password),this.redirects.push(C),r.url=h;for(let I of r.hooks.beforeRedirect)await I(r,n);this.emit("redirect",n,r),await this._makeRequest()}catch(p){this._beforeError(p);return}return}if(r.isStream&&r.throwHttpErrors&&!rst.isResponseOk(n)){this._beforeError(new ux(n));return}e.on("readable",()=>{this[ax]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let A of this[ox])if(!A.headersSent){for(let p in e.headers){let h=r.decompress?p!=="content-encoding":!0,C=e.headers[p];h&&A.setHeader(p,C)}A.statusCode=a}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:o,url:a}=r;Wit.default(e),this[B4]=Hae.default(e,o,a);let n=r.cache?"cacheableResponse":"response";e.once(n,p=>{this._onResponse(p)}),e.once("error",p=>{var h;e.destroy(),(h=e.res)===null||h===void 0||h.removeAllListeners("end"),p=p instanceof Hae.TimeoutError?new px(p,this.timings,this):new Vi(p.message,p,this),this._beforeError(p)}),this[Gae]=Zit.default(e,this,Ast),this[Zs]=e,this.emit("uploadProgress",this.uploadProgress);let u=this[lh],A=this.redirects.length===0?this:e;st.default.nodeStream(u)?(u.pipe(A),u.once("error",p=>{this._beforeError(new fx(p,this))})):(this._unlockWrite(),st.default.undefined(u)?(this._cannotHaveBody||this._noPipe)&&(A.end(),this._lockWrite()):(this._writeRequest(u,void 0,()=>{}),A.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((o,a)=>{Object.assign(r,$it.default(e)),delete r.url;let n,u=v4.get(r.cache)(r,async A=>{A._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",A),o(A)});r.url=e,u.once("error",a),u.once("request",async A=>{n=A,o(n)})})}async _makeRequest(){var e,r,o,a,n;let{options:u}=this,{headers:A}=u;for(let U in A)if(st.default.undefined(A[U]))delete A[U];else if(st.default.null_(A[U]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${U}\` header`);if(u.decompress&&st.default.undefined(A["accept-encoding"])&&(A["accept-encoding"]=sst?"gzip, deflate, br":"gzip, deflate"),u.cookieJar){let U=await u.cookieJar.getCookieString(u.url.toString());st.default.nonEmptyString(U)&&(u.headers.cookie=U)}for(let U of u.hooks.beforeRequest){let z=await U(u);if(!st.default.undefined(z)){u.request=()=>z;break}}u.body&&this[lh]!==u.body&&(this[lh]=u.body);let{agent:p,request:h,timeout:C,url:I}=u;if(u.dnsCache&&!("lookup"in u)&&(u.lookup=u.dnsCache.lookup),I.hostname==="unix"){let U=/(?.+?):(?.+)/.exec(`${I.pathname}${I.search}`);if(U?.groups){let{socketPath:z,path:te}=U.groups;Object.assign(u,{socketPath:z,path:te,host:""})}}let v=I.protocol==="https:",b;u.http2?b=zit.auto:b=v?Yit.request:Mae.request;let E=(e=u.request)!==null&&e!==void 0?e:b,F=u.cache?this._createCacheableRequest:E;p&&!u.http2&&(u.agent=p[v?"https":"http"]),u[Zs]=E,delete u.request,delete u.timeout;let N=u;if(N.shared=(r=u.cacheOptions)===null||r===void 0?void 0:r.shared,N.cacheHeuristic=(o=u.cacheOptions)===null||o===void 0?void 0:o.cacheHeuristic,N.immutableMinTimeToLive=(a=u.cacheOptions)===null||a===void 0?void 0:a.immutableMinTimeToLive,N.ignoreCargoCult=(n=u.cacheOptions)===null||n===void 0?void 0:n.ignoreCargoCult,u.dnsLookupIpVersion!==void 0)try{N.family=qae.dnsLookupIpVersionToFamily(u.dnsLookupIpVersion)}catch{throw new Error("Invalid `dnsLookupIpVersion` option value")}u.https&&("rejectUnauthorized"in u.https&&(N.rejectUnauthorized=u.https.rejectUnauthorized),u.https.checkServerIdentity&&(N.checkServerIdentity=u.https.checkServerIdentity),u.https.certificateAuthority&&(N.ca=u.https.certificateAuthority),u.https.certificate&&(N.cert=u.https.certificate),u.https.key&&(N.key=u.https.key),u.https.passphrase&&(N.passphrase=u.https.passphrase),u.https.pfx&&(N.pfx=u.https.pfx));try{let U=await F(I,N);st.default.undefined(U)&&(U=b(I,N)),u.request=h,u.timeout=C,u.agent=p,u.https&&("rejectUnauthorized"in u.https&&delete N.rejectUnauthorized,u.https.checkServerIdentity&&delete N.checkServerIdentity,u.https.certificateAuthority&&delete N.ca,u.https.certificate&&delete N.cert,u.https.key&&delete N.key,u.https.passphrase&&delete N.passphrase,u.https.pfx&&delete N.pfx),ast(U)?this._onRequest(U):this.writable?(this.once("finish",()=>{this._onResponse(U)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(U)}catch(U){throw U instanceof Uae.CacheError?new Ax(U,this):new Vi(U.message,U,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new Vi(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[kE])return;let{options:r}=this,o=this.retryCount+1;this[kE]=!0,e instanceof Vi||(e=new Vi(e.message,e,this));let a=e,{response:n}=a;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await tst.default(n),n.body=n.rawBody.toString()}catch{}}if(this.listenerCount("retry")!==0){let u;try{let A;n&&"retry-after"in n.headers&&(A=Number(n.headers["retry-after"]),Number.isNaN(A)?(A=Date.parse(n.headers["retry-after"])-Date.now(),A<=0&&(A=1)):A*=1e3),u=await r.retry.calculateDelay({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:ist.default({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:0})})}catch(A){this._error(new Vi(A.message,A,this));return}if(u){let A=async()=>{try{for(let p of this.options.hooks.beforeRetry)await p(this.options,a,o)}catch(p){this._error(new Vi(p.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",o,e))};this[Vae]=setTimeout(A,u);return}}this._error(a)})()}_read(){this[ax]=!0;let e=this[lx];if(e&&!this[kE]){e.readableLength&&(this[ax]=!1);let r;for(;(r=e.read())!==null;){this[SE]+=r.length,this[Wae]=!0;let o=this.downloadProgress;o.percent<1&&this.emit("downloadProgress",o),this.push(r)}}}_write(e,r,o){let a=()=>{this._writeRequest(e,r,o)};this.requestInitialized?a():this[d1].push(a)}_writeRequest(e,r,o){this[Zs].destroyed||(this._progressCallbacks.push(()=>{this[bE]+=Buffer.byteLength(e,r);let a=this.uploadProgress;a.percent<1&&this.emit("uploadProgress",a)}),this[Zs].write(e,r,a=>{!a&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),o(a)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Zs in this)){e();return}if(this[Zs].destroyed){e();return}this[Zs].end(o=>{o||(this[xE]=this[bE],this.emit("uploadProgress",this.uploadProgress),this[Zs].emit("upload-complete")),e(o)})};this.requestInitialized?r():this[d1].push(r)}_destroy(e,r){var o;this[kE]=!0,clearTimeout(this[Vae]),Zs in this&&(this[B4](),!((o=this[lx])===null||o===void 0)&&o.complete||this[Zs].destroy()),e!==null&&!st.default.undefined(e)&&!(e instanceof Vi)&&(e=new Vi(e.message,e,this)),r(e)}get _isAboutToError(){return this[kE]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,o;return((r=(e=this[Zs])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!(!((o=this[Kae])===null||o===void 0)&&o.complete)}get socket(){var e,r;return(r=(e=this[Zs])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[PE]?e=this[SE]/this[PE]:this[PE]===this[SE]?e=1:e=0,{percent:e,transferred:this[SE],total:this[PE]}}get uploadProgress(){let e;return this[xE]?e=this[bE]/this[xE]:this[xE]===this[bE]?e=1:e=0,{percent:e,transferred:this[bE],total:this[xE]}}get timings(){var e;return(e=this[Zs])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[Yae]}pipe(e,r){if(this[Wae])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof w4.ServerResponse&&this[ox].add(e),super.pipe(e,r)}unpipe(e){return e instanceof w4.ServerResponse&&this[ox].delete(e),super.unpipe(e),this}};Bn.default=gx});var E1=_(qc=>{"use strict";var fst=qc&&qc.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),pst=qc&&qc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&fst(e,t,r)};Object.defineProperty(qc,"__esModule",{value:!0});qc.CancelError=qc.ParseError=void 0;var zae=y1(),D4=class extends zae.RequestError{constructor(e,r){let{options:o}=r.request;super(`${e.message} in "${o.url.toString()}"`,e,r.request),this.name="ParseError"}};qc.ParseError=D4;var P4=class extends zae.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}};qc.CancelError=P4;pst(y1(),qc)});var Xae=_(S4=>{"use strict";Object.defineProperty(S4,"__esModule",{value:!0});var Jae=E1(),hst=(t,e,r,o)=>{let{rawBody:a}=t;try{if(e==="text")return a.toString(o);if(e==="json")return a.length===0?"":r(a.toString());if(e==="buffer")return a;throw new Jae.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(n){throw new Jae.ParseError(n,t)}};S4.default=hst});var x4=_(ch=>{"use strict";var gst=ch&&ch.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),dst=ch&&ch.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&gst(e,t,r)};Object.defineProperty(ch,"__esModule",{value:!0});var mst=Be("events"),yst=Ff(),Est=Xse(),dx=E1(),Zae=Xae(),$ae=y1(),Cst=u4(),wst=m4(),ele=y4(),Ist=["request","response","redirect","uploadProgress","downloadProgress"];function tle(t){let e,r,o=new mst.EventEmitter,a=new Est((u,A,p)=>{let h=C=>{let I=new $ae.default(void 0,t);I.retryCount=C,I._noPipe=!0,p(()=>I.destroy()),p.shouldReject=!1,p(()=>A(new dx.CancelError(I))),e=I,I.once("response",async E=>{var F;if(E.retryCount=C,E.request.aborted)return;let N;try{N=await wst.default(I),E.rawBody=N}catch{return}if(I._isAboutToError)return;let U=((F=E.headers["content-encoding"])!==null&&F!==void 0?F:"").toLowerCase(),z=["gzip","deflate","br"].includes(U),{options:te}=I;if(z&&!te.decompress)E.body=N;else try{E.body=Zae.default(E,te.responseType,te.parseJson,te.encoding)}catch(le){if(E.body=N.toString(),ele.isResponseOk(E)){I._beforeError(le);return}}try{for(let[le,pe]of te.hooks.afterResponse.entries())E=await pe(E,async ue=>{let ye=$ae.default.normalizeArguments(void 0,{...ue,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},te);ye.hooks.afterResponse=ye.hooks.afterResponse.slice(0,le);for(let Ie of ye.hooks.beforeRetry)await Ie(ye);let ae=tle(ye);return p(()=>{ae.catch(()=>{}),ae.cancel()}),ae})}catch(le){I._beforeError(new dx.RequestError(le.message,le,I));return}if(!ele.isResponseOk(E)){I._beforeError(new dx.HTTPError(E));return}r=E,u(I.options.resolveBodyOnly?E.body:E)});let v=E=>{if(a.isCanceled)return;let{options:F}=I;if(E instanceof dx.HTTPError&&!F.throwHttpErrors){let{response:N}=E;u(I.options.resolveBodyOnly?N.body:N);return}A(E)};I.once("error",v);let b=I.options.body;I.once("retry",(E,F)=>{var N,U;if(b===((N=F.request)===null||N===void 0?void 0:N.options.body)&&yst.default.nodeStream((U=F.request)===null||U===void 0?void 0:U.options.body)){v(F);return}h(E)}),Cst.default(I,o,Ist)};h(0)});a.on=(u,A)=>(o.on(u,A),a);let n=u=>{let A=(async()=>{await a;let{options:p}=r.request;return Zae.default(r,u,p.parseJson,p.encoding)})();return Object.defineProperties(A,Object.getOwnPropertyDescriptors(a)),A};return a.json=()=>{let{headers:u}=e.options;return!e.writableFinished&&u.accept===void 0&&(u.accept="application/json"),n("json")},a.buffer=()=>n("buffer"),a.text=()=>n("text"),a}ch.default=tle;dst(E1(),ch)});var rle=_(b4=>{"use strict";Object.defineProperty(b4,"__esModule",{value:!0});var Bst=E1();function vst(t,...e){let r=(async()=>{if(t instanceof Bst.RequestError)try{for(let a of e)if(a)for(let n of a)t=await n(t)}catch(a){t=a}throw t})(),o=()=>r;return r.json=o,r.text=o,r.buffer=o,r.on=o,r}b4.default=vst});var sle=_(k4=>{"use strict";Object.defineProperty(k4,"__esModule",{value:!0});var nle=Ff();function ile(t){for(let e of Object.values(t))(nle.default.plainObject(e)||nle.default.array(e))&&ile(e);return Object.freeze(t)}k4.default=ile});var ale=_(ole=>{"use strict";Object.defineProperty(ole,"__esModule",{value:!0})});var Q4=_(Vl=>{"use strict";var Dst=Vl&&Vl.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),Pst=Vl&&Vl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Dst(e,t,r)};Object.defineProperty(Vl,"__esModule",{value:!0});Vl.defaultHandler=void 0;var lle=Ff(),Kl=x4(),Sst=rle(),yx=y1(),xst=sle(),bst={RequestError:Kl.RequestError,CacheError:Kl.CacheError,ReadError:Kl.ReadError,HTTPError:Kl.HTTPError,MaxRedirectsError:Kl.MaxRedirectsError,TimeoutError:Kl.TimeoutError,ParseError:Kl.ParseError,CancelError:Kl.CancelError,UnsupportedProtocolError:Kl.UnsupportedProtocolError,UploadError:Kl.UploadError},kst=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:mx}=yx.default,cle=(...t)=>{let e;for(let r of t)e=mx(void 0,r,e);return e},Qst=t=>t.isStream?new yx.default(void 0,t):Kl.default(t),Fst=t=>"defaults"in t&&"options"in t.defaults,Rst=["get","post","put","patch","head","delete"];Vl.defaultHandler=(t,e)=>e(t);var ule=(t,e)=>{if(t)for(let r of t)r(e)},Ale=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(o=>(a,n)=>{let u,A=o(a,p=>(u=n(p),u));if(A!==u&&!a.isStream&&u){let p=A,{then:h,catch:C,finally:I}=p;Object.setPrototypeOf(p,Object.getPrototypeOf(u)),Object.defineProperties(p,Object.getOwnPropertyDescriptors(u)),p.then=h,p.catch=C,p.finally=I}return A});let e=(o,a={},n)=>{var u,A;let p=0,h=C=>t.handlers[p++](C,p===t.handlers.length?Qst:h);if(lle.default.plainObject(o)){let C={...o,...a};yx.setNonEnumerableProperties([o,a],C),a=C,o=void 0}try{let C;try{ule(t.options.hooks.init,a),ule((u=a.hooks)===null||u===void 0?void 0:u.init,a)}catch(v){C=v}let I=mx(o,a,n??t.options);if(I[yx.kIsNormalizedAlready]=!0,C)throw new Kl.RequestError(C.message,C,I);return h(I)}catch(C){if(a.isStream)throw C;return Sst.default(C,t.options.hooks.beforeError,(A=a.hooks)===null||A===void 0?void 0:A.beforeError)}};e.extend=(...o)=>{let a=[t.options],n=[...t._rawHandlers],u;for(let A of o)Fst(A)?(a.push(A.defaults.options),n.push(...A.defaults._rawHandlers),u=A.defaults.mutableDefaults):(a.push(A),"handlers"in A&&n.push(...A.handlers),u=A.mutableDefaults);return n=n.filter(A=>A!==Vl.defaultHandler),n.length===0&&n.push(Vl.defaultHandler),Ale({options:cle(...a),handlers:n,mutableDefaults:Boolean(u)})};let r=async function*(o,a){let n=mx(o,a,t.options);n.resolveBodyOnly=!1;let u=n.pagination;if(!lle.default.object(u))throw new TypeError("`options.pagination` must be implemented");let A=[],{countLimit:p}=u,h=0;for(;h{let n=[];for await(let u of r(o,a))n.push(u);return n},e.paginate.each=r,e.stream=(o,a)=>e(o,{...a,isStream:!0});for(let o of Rst)e[o]=(a,n)=>e(a,{...n,method:o}),e.stream[o]=(a,n)=>e(a,{...n,method:o,isStream:!0});return Object.assign(e,bst),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:xst.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=cle,e};Vl.default=Ale;Pst(ale(),Vl)});var hle=_((Rf,Ex)=>{"use strict";var Tst=Rf&&Rf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),fle=Rf&&Rf.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Tst(e,t,r)};Object.defineProperty(Rf,"__esModule",{value:!0});var Lst=Be("url"),ple=Q4(),Nst={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:t})=>t},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:t=>t.request.options.responseType==="json"?t.body:JSON.parse(t.body),paginate:t=>{if(!Reflect.has(t.headers,"link"))return!1;let e=t.headers.link.split(","),r;for(let o of e){let a=o.split(";");if(a[1].includes("next")){r=a[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new Lst.URL(r)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:t=>JSON.parse(t),stringifyJson:t=>JSON.stringify(t),cacheOptions:{}},handlers:[ple.defaultHandler],mutableDefaults:!1},F4=ple.default(Nst);Rf.default=F4;Ex.exports=F4;Ex.exports.default=F4;Ex.exports.__esModule=!0;fle(Q4(),Rf);fle(x4(),Rf)});var rn={};Vt(rn,{Method:()=>wle,del:()=>Hst,get:()=>N4,getNetworkSettings:()=>Cle,post:()=>O4,put:()=>_st,request:()=>C1});function mle(t){let e=new Cx.URL(t),r={host:e.hostname,headers:{}};return e.port&&(r.port=Number(e.port)),e.username&&e.password&&(r.proxyAuth=`${e.username}:${e.password}`),{proxy:r}}async function R4(t){return ol(dle,t,()=>oe.readFilePromise(t).then(e=>(dle.set(t,e),e)))}function Ust({statusCode:t,statusMessage:e},r){let o=_t(r,t,Et.NUMBER),a=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return Xy(r,`${o}${e?` (${e})`:""}`,a)}async function wx(t,{configuration:e,customErrorMessage:r}){try{return await t}catch(o){if(o.name!=="HTTPError")throw o;let a=r?.(o,e)??o.response.body?.error;a==null&&(o.message.startsWith("Response code")?a="The remote server failed to provide the requested resource":a=o.message),o.code==="ETIMEDOUT"&&o.event==="socket"&&(a+=`(can be increased via ${_t(e,"httpTimeout",Et.SETTING)})`);let n=new Jt(35,a,u=>{o.response&&u.reportError(35,` ${Ju(e,{label:"Response Code",value:_c(Et.NO_HINT,Ust(o.response,e))})}`),o.request&&(u.reportError(35,` ${Ju(e,{label:"Request Method",value:_c(Et.NO_HINT,o.request.options.method)})}`),u.reportError(35,` ${Ju(e,{label:"Request URL",value:_c(Et.URL,o.request.requestUrl)})}`)),o.request.redirects.length>0&&u.reportError(35,` ${Ju(e,{label:"Request Redirects",value:_c(Et.NO_HINT,xN(e,o.request.redirects,Et.URL))})}`),o.request.retryCount===o.request.options.retry.limit&&u.reportError(35,` ${Ju(e,{label:"Request Retry Count",value:_c(Et.NO_HINT,`${_t(e,o.request.retryCount,Et.NUMBER)} (can be increased via ${_t(e,"httpRetry",Et.SETTING)})`)})}`)});throw n.originalError=o,n}}function Cle(t,e){let r=[...e.configuration.get("networkSettings")].sort(([u],[A])=>A.length-u.length),o={enableNetwork:void 0,httpsCaFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},a=Object.keys(o),n=typeof t=="string"?new Cx.URL(t):t;for(let[u,A]of r)if(L4.default.isMatch(n.hostname,u))for(let p of a){let h=A.get(p);h!==null&&typeof o[p]>"u"&&(o[p]=h)}for(let u of a)typeof o[u]>"u"&&(o[u]=e.configuration.get(u));return o}async function C1(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET",wrapNetworkRequest:A}){let p={target:t,body:e,configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u},h=async()=>await jst(t,e,p),C=typeof A<"u"?await A(h,p):h;return await(await r.reduceHook(v=>v.wrapNetworkRequest,C,p))()}async function N4(t,{configuration:e,jsonResponse:r,customErrorMessage:o,wrapNetworkRequest:a,...n}){let u=()=>wx(C1(t,null,{configuration:e,wrapNetworkRequest:a,...n}),{configuration:e,customErrorMessage:o}).then(p=>p.body),A=await(typeof a<"u"?u():ol(gle,t,()=>u().then(p=>(gle.set(t,p),p))));return r?JSON.parse(A.toString()):A}async function _st(t,e,{customErrorMessage:r,...o}){return(await wx(C1(t,e,{...o,method:"PUT"}),{customErrorMessage:r,configuration:o.configuration})).body}async function O4(t,e,{customErrorMessage:r,...o}){return(await wx(C1(t,e,{...o,method:"POST"}),{customErrorMessage:r,configuration:o.configuration})).body}async function Hst(t,{customErrorMessage:e,...r}){return(await wx(C1(t,null,{...r,method:"DELETE"}),{customErrorMessage:e,configuration:r.configuration})).body}async function jst(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET"}){let A=typeof t=="string"?new Cx.URL(t):t,p=Cle(A,{configuration:r});if(p.enableNetwork===!1)throw new Jt(80,`Request to '${A.href}' has been blocked because of your configuration settings`);if(A.protocol==="http:"&&!L4.default.isMatch(A.hostname,r.get("unsafeHttpWhitelist")))throw new Jt(81,`Unsafe http requests must be explicitly whitelisted in your configuration (${A.hostname})`);let C={agent:{http:p.httpProxy?T4.default.httpOverHttp(mle(p.httpProxy)):Ost,https:p.httpsProxy?T4.default.httpsOverHttp(mle(p.httpsProxy)):Mst},headers:o,method:u};C.responseType=n?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!a&&typeof e=="string"?C.body=e:C.json=e);let I=r.get("httpTimeout"),v=r.get("httpRetry"),b=r.get("enableStrictSsl"),E=p.httpsCaFilePath,F=p.httpsCertFilePath,N=p.httpsKeyFilePath,{default:U}=await Promise.resolve().then(()=>$e(hle())),z=E?await R4(E):void 0,te=F?await R4(F):void 0,le=N?await R4(N):void 0,pe=U.extend({timeout:{socket:I},retry:v,https:{rejectUnauthorized:b,certificateAuthority:z,certificate:te,key:le},...C});return r.getLimit("networkConcurrency")(()=>pe(A))}var yle,Ele,L4,T4,Cx,gle,dle,Ost,Mst,wle,Ix=yt(()=>{Pt();yle=Be("https"),Ele=Be("http"),L4=$e(Zo()),T4=$e(Wse()),Cx=Be("url");Yl();ql();jl();gle=new Map,dle=new Map,Ost=new Ele.Agent({keepAlive:!0}),Mst=new yle.Agent({keepAlive:!0});wle=(a=>(a.GET="GET",a.PUT="PUT",a.POST="POST",a.DELETE="DELETE",a))(wle||{})});var zi={};Vt(zi,{availableParallelism:()=>U4,getArchitecture:()=>w1,getArchitectureName:()=>Yst,getArchitectureSet:()=>M4,getCaller:()=>zst,openUrl:()=>qst});function Gst(){if(process.platform==="darwin"||process.platform==="win32")return null;let e=(process.report?.getReport()??{}).sharedObjects??[],r=/\/(?:(ld-linux-|[^/]+-linux-gnu\/)|(libc.musl-|ld-musl-))/;return YI(e,o=>{let a=o.match(r);if(!a)return YI.skip;if(a[1])return"glibc";if(a[2])return"musl";throw new Error("Assertion failed: Expected the libc variant to have been detected")})??null}function w1(){return Ble=Ble??{os:process.platform,cpu:process.arch,libc:Gst()}}function Yst(t=w1()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}-${t.cpu}`}function M4(){let t=w1();return vle=vle??{os:[t.os],cpu:[t.cpu],libc:t.libc?[t.libc]:[]}}function Vst(t){let e=Wst.exec(t);if(!e)return null;let r=e[2]&&e[2].indexOf("native")===0,o=e[2]&&e[2].indexOf("eval")===0,a=Kst.exec(e[2]);return o&&a!=null&&(e[2]=a[1],e[3]=a[2],e[4]=a[3]),{file:r?null:e[2],methodName:e[1]||"",arguments:r?[e[2]]:[],line:e[3]?+e[3]:null,column:e[4]?+e[4]:null}}function zst(){let e=new Error().stack.split(` -`)[3];return Vst(e)}function U4(){return typeof Bx.default.availableParallelism<"u"?Bx.default.availableParallelism():Math.max(1,Bx.default.cpus().length)}var Bx,Ile,qst,Ble,vle,Wst,Kst,vx=yt(()=>{Pt();Bx=$e(Be("os"));Dx();jl();Ile=new Map([["darwin","open"],["linux","xdg-open"],["win32","explorer.exe"]]).get(process.platform),qst=typeof Ile<"u"?async t=>{try{return await _4(Ile,[t],{cwd:V.cwd()}),!0}catch{return!1}}:void 0;Wst=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Kst=/\((\S*)(?::(\d+))(?::(\d+))\)/});function Y4(t,e,r,o,a){let n=c1(r);if(o.isArray||o.type==="ANY"&&Array.isArray(n))return Array.isArray(n)?n.map((u,A)=>H4(t,`${e}[${A}]`,u,o,a)):String(n).split(/,/).map(u=>H4(t,e,u,o,a));if(Array.isArray(n))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return H4(t,e,r,o,a)}function H4(t,e,r,o,a){let n=c1(r);switch(o.type){case"ANY":return GS(n);case"SHAPE":return $st(t,e,r,o,a);case"MAP":return eot(t,e,r,o,a)}if(n===null&&!o.isNullable&&o.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if(o.values?.includes(n))return n;let A=(()=>{if(o.type==="BOOLEAN"&&typeof n!="string")return WI(n);if(typeof n!="string")throw new Error(`Expected configuration setting "${e}" to be a string, got ${typeof n}`);let p=iS(n,{env:t.env});switch(o.type){case"ABSOLUTE_PATH":{let h=a,C=mM(r);return C&&C[0]!=="<"&&(h=V.dirname(C)),V.resolve(h,fe.toPortablePath(p))}case"LOCATOR_LOOSE":return Sf(p,!1);case"NUMBER":return parseInt(p);case"LOCATOR":return Sf(p);case"BOOLEAN":return WI(p);default:return p}})();if(o.values&&!o.values.includes(A))throw new Error(`Invalid value, expected one of ${o.values.join(", ")}`);return A}function $st(t,e,r,o,a){let n=c1(r);if(typeof n!="object"||Array.isArray(n))throw new it(`Object configuration settings "${e}" must be an object`);let u=W4(t,o,{ignoreArrays:!0});if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=`${e}.${A}`;if(!o.properties[A])throw new it(`Unrecognized configuration settings found: ${e}.${A} - run "yarn config -v" to see the list of settings supported in Yarn`);u.set(A,Y4(t,h,p,o.properties[A],a))}return u}function eot(t,e,r,o,a){let n=c1(r),u=new Map;if(typeof n!="object"||Array.isArray(n))throw new it(`Map configuration settings "${e}" must be an object`);if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=o.normalizeKeys?o.normalizeKeys(A):A,C=`${e}['${h}']`,I=o.valueDefinition;u.set(h,Y4(t,C,p,I,a))}return u}function W4(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e.isArray&&!r)return[];let o=new Map;for(let[a,n]of Object.entries(e.properties))o.set(a,W4(t,n));return o}break;case"MAP":return e.isArray&&!r?[]:new Map;case"ABSOLUTE_PATH":return e.default===null?null:t.projectCwd===null?Array.isArray(e.default)?e.default.map(o=>V.normalize(o)):V.isAbsolute(e.default)?V.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(o=>V.resolve(t.projectCwd,o)):V.resolve(t.projectCwd,e.default);default:return e.default}}function Sx(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecrets)return Zst;if(e.type==="ABSOLUTE_PATH"&&typeof t=="string"&&r.getNativePaths)return fe.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let o=[];for(let a of t)o.push(Sx(a,e,r));return o}if(e.type==="MAP"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=Sx(n,e.valueDefinition,r);typeof u<"u"&&o.set(a,u)}return o}if(e.type==="SHAPE"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=e.properties[a],A=Sx(n,u,r);typeof A<"u"&&o.set(a,A)}return o}return t}function tot(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(xx)&&(e=(0,Ple.default)(e.slice(xx.length)),t[e]=r);return t}function q4(){let t=`${xx}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return G4}async function Dle(t){try{return await oe.readFilePromise(t)}catch{return Buffer.of()}}async function rot(t,e){return Buffer.compare(...await Promise.all([Dle(t),Dle(e)]))===0}async function not(t,e){let[r,o]=await Promise.all([oe.statPromise(t),oe.statPromise(e)]);return r.dev===o.dev&&r.ino===o.ino}async function sot({configuration:t,selfPath:e}){let r=t.get("yarnPath");return t.get("ignorePath")||r===null||r===e||await iot(r,e)?null:r}var Ple,Tf,Sle,xle,ble,j4,Jst,I1,Xst,QE,xx,G4,Zst,B1,kle,bx,Px,iot,rA,Ke,v1=yt(()=>{Pt();Ll();Ple=$e(sV()),Tf=$e($g());qt();Sle=$e($V()),xle=Be("module"),ble=$e(nd()),j4=Be("stream");ase();AE();cM();uM();AM();Lse();fM();Bd();_se();WS();ql();rh();Ix();jl();vx();bf();xo();Jst=Tf.GITHUB_ACTIONS&&process.env.GITHUB_EVENT_PATH?!(oe.readJsonSync(fe.toPortablePath(process.env.GITHUB_EVENT_PATH)).repository?.private??!0):!1,I1=new Set(["@yarnpkg/plugin-constraints","@yarnpkg/plugin-exec","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]),Xst=new Set(["isTestEnv","injectNpmUser","injectNpmPassword","injectNpm2FaToken","cacheCheckpointOverride","cacheVersionOverride","lockfileVersionOverride","binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir","registry","ignoreCwd"]),QE=/^(?!v)[a-z0-9._-]+$/i,xx="yarn_",G4=".yarnrc.yml",Zst="********",B1=(C=>(C.ANY="ANY",C.BOOLEAN="BOOLEAN",C.ABSOLUTE_PATH="ABSOLUTE_PATH",C.LOCATOR="LOCATOR",C.LOCATOR_LOOSE="LOCATOR_LOOSE",C.NUMBER="NUMBER",C.STRING="STRING",C.SECRET="SECRET",C.SHAPE="SHAPE",C.MAP="MAP",C))(B1||{}),kle=Et,bx=(r=>(r.JUNCTIONS="junctions",r.SYMLINKS="symlinks",r))(bx||{}),Px={lastUpdateCheck:{description:"Last timestamp we checked whether new Yarn versions were available",type:"STRING",default:null},yarnPath:{description:"Path to the local executable that must be used over the global one",type:"ABSOLUTE_PATH",default:null},ignorePath:{description:"If true, the local executable will be ignored when using the global one",type:"BOOLEAN",default:!1},globalFolder:{description:"Folder where all system-global files are stored",type:"ABSOLUTE_PATH",default:EM()},cacheFolder:{description:"Folder where the cache files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/cache"},compressionLevel:{description:"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)",type:"NUMBER",values:["mixed",0,1,2,3,4,5,6,7,8,9],default:0},virtualFolder:{description:"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)",type:"ABSOLUTE_PATH",default:"./.yarn/__virtual__"},installStatePath:{description:"Path of the file where the install state will be persisted",type:"ABSOLUTE_PATH",default:"./.yarn/install-state.gz"},immutablePatterns:{description:"Array of glob patterns; files matching them won't be allowed to change during immutable installs",type:"STRING",default:[],isArray:!0},rcFilename:{description:"Name of the files where the configuration can be found",type:"STRING",default:q4()},enableGlobalCache:{description:"If true, the system-wide cache folder will be used regardless of `cache-folder`",type:"BOOLEAN",default:!0},cacheMigrationMode:{description:"Defines the conditions under which Yarn upgrades should cause the cache archives to be regenerated.",type:"STRING",values:["always","match-spec","required-only"],default:"always"},enableColors:{description:"If true, the CLI is allowed to use colors in its output",type:"BOOLEAN",default:aS,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:"BOOLEAN",default:SN,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:"BOOLEAN",default:Tf.isCI,defaultText:""},enableMessageNames:{description:"If true, the CLI will prefix most messages with codes suitable for search engines",type:"BOOLEAN",default:!0},enableProgressBars:{description:"If true, the CLI is allowed to show a progress bar for long-running events",type:"BOOLEAN",default:!Tf.isCI,defaultText:""},enableTimers:{description:"If true, the CLI is allowed to print the time spent executing commands",type:"BOOLEAN",default:!0},enableTips:{description:"If true, installs will print a helpful message every day of the week",type:"BOOLEAN",default:!Tf.isCI,defaultText:""},preferInteractive:{description:"If true, the CLI will automatically use the interactive mode when called from a TTY",type:"BOOLEAN",default:!1},preferTruncatedLines:{description:"If true, the CLI will truncate lines that would go beyond the size of the terminal",type:"BOOLEAN",default:!1},progressBarStyle:{description:"Which style of progress bar should be used (only when progress bars are enabled)",type:"STRING",default:void 0,defaultText:""},defaultLanguageName:{description:"Default language mode that should be used when a package doesn't offer any insight",type:"STRING",default:"node"},defaultProtocol:{description:"Default resolution protocol used when resolving pure semver and tag ranges",type:"STRING",default:"npm:"},enableTransparentWorkspaces:{description:"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol",type:"BOOLEAN",default:!0},supportedArchitectures:{description:"Architectures that Yarn will fetch and inject into the resolver",type:"SHAPE",properties:{os:{description:"Array of supported process.platform strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},cpu:{description:"Array of supported process.arch strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},libc:{description:"Array of supported libc libraries, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]}}},enableMirror:{description:"If true, the downloaded packages will be retrieved and stored in both the local and global folders",type:"BOOLEAN",default:!0},enableNetwork:{description:"If false, Yarn will refuse to use the network if required to",type:"BOOLEAN",default:!0},enableOfflineMode:{description:"If true, Yarn will attempt to retrieve files and metadata from the global cache rather than the network",type:"BOOLEAN",default:!1},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},unsafeHttpWhitelist:{description:"List of the hostnames for which http queries are allowed (glob patterns are supported)",type:"STRING",default:[],isArray:!0},httpTimeout:{description:"Timeout of each http request in milliseconds",type:"NUMBER",default:6e4},httpRetry:{description:"Retry times on http failure",type:"NUMBER",default:3},networkConcurrency:{description:"Maximal number of concurrent requests",type:"NUMBER",default:50},taskPoolConcurrency:{description:"Maximal amount of concurrent heavy task processing",type:"NUMBER",default:U4()},taskPoolMode:{description:"Execution strategy for heavy tasks",type:"STRING",values:["async","workers"],default:"workers"},networkSettings:{description:"Network settings per hostname (glob patterns are supported)",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{httpsCaFilePath:{description:"Path to file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:"BOOLEAN",default:null},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null}}}},httpsCaFilePath:{description:"A path to a file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null},enableStrictSsl:{description:"If false, SSL certificate errors will be ignored",type:"BOOLEAN",default:!0},logFilters:{description:"Overrides for log levels",type:"SHAPE",isArray:!0,concatenateValues:!0,properties:{code:{description:"Code of the messages covered by this override",type:"STRING",default:void 0},text:{description:"Code of the texts covered by this override",type:"STRING",default:void 0},pattern:{description:"Code of the patterns covered by this override",type:"STRING",default:void 0},level:{description:"Log level override, set to null to remove override",type:"STRING",values:Object.values(cS),isNullable:!0,default:void 0}}},enableTelemetry:{description:"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry",type:"BOOLEAN",default:!0},telemetryInterval:{description:"Minimal amount of time between two telemetry uploads, in days",type:"NUMBER",default:7},telemetryUserId:{description:"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.",type:"STRING",default:null},enableHardenedMode:{description:"If true, automatically enable --check-resolutions --refresh-lockfile on installs",type:"BOOLEAN",default:Tf.isPR&&Jst,defaultText:""},enableScripts:{description:"If true, packages are allowed to have install scripts by default",type:"BOOLEAN",default:!0},enableStrictSettings:{description:"If true, unknown settings will cause Yarn to abort",type:"BOOLEAN",default:!0},enableImmutableCache:{description:"If true, the cache is reputed immutable and actions that would modify it will throw",type:"BOOLEAN",default:!1},checksumBehavior:{description:"Enumeration defining what to do when a checksum doesn't match expectations",type:"STRING",default:"throw"},injectEnvironmentFiles:{description:"List of all the environment files that Yarn should inject inside the process when it starts",type:"ABSOLUTE_PATH",default:[".env.yarn?"],isArray:!0},packageExtensions:{description:"Map of package corrections to apply on the dependency tree",type:"MAP",valueDefinition:{description:"The extension that will be applied to any package whose version matches the specified range",type:"SHAPE",properties:{dependencies:{description:"The set of dependencies that must be made available to the current package in order for it to work properly",type:"MAP",valueDefinition:{description:"A range",type:"STRING"}},peerDependencies:{description:"Inherited dependencies - the consumer of the package will be tasked to provide them",type:"MAP",valueDefinition:{description:"A semver range",type:"STRING"}},peerDependenciesMeta:{description:"Extra information related to the dependencies listed in the peerDependencies field",type:"MAP",valueDefinition:{description:"The peerDependency meta",type:"SHAPE",properties:{optional:{description:"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error",type:"BOOLEAN",default:!1}}}}}}}};iot=process.platform==="win32"?rot:not;rA=class{constructor(e){this.isCI=Tf.isCI;this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.env={};this.limits=new Map;this.packageExtensions=null;this.startingCwd=e}static create(e,r,o){let a=new rA(e);typeof r<"u"&&!(r instanceof Map)&&(a.projectCwd=r),a.importSettings(Px);let n=typeof o<"u"?o:r instanceof Map?r:new Map;for(let[u,A]of n)a.activatePlugin(u,A);return a}static async find(e,r,{strict:o=!0,usePathCheck:a=null,useRc:n=!0}={}){let u=tot();delete u.rcFilename;let A=new rA(e),p=await rA.findRcFiles(e),h=await rA.findFolderRcFile(yE());h&&(p.find(ye=>ye.path===h.path)||p.unshift(h));let C=Use(p.map(ue=>[ue.path,ue.data])),I=Bt.dot,v=new Set(Object.keys(Px)),b=({yarnPath:ue,ignorePath:ye,injectEnvironmentFiles:ae})=>({yarnPath:ue,ignorePath:ye,injectEnvironmentFiles:ae}),E=({yarnPath:ue,ignorePath:ye,injectEnvironmentFiles:ae,...Ie})=>{let Fe={};for(let[g,Ee]of Object.entries(Ie))v.has(g)&&(Fe[g]=Ee);return Fe},F=({yarnPath:ue,ignorePath:ye,...ae})=>{let Ie={};for(let[Fe,g]of Object.entries(ae))v.has(Fe)||(Ie[Fe]=g);return Ie};if(A.importSettings(b(Px)),A.useWithSource("",b(u),e,{strict:!1}),C){let[ue,ye]=C;A.useWithSource(ue,b(ye),I,{strict:!1})}if(a){if(await sot({configuration:A,selfPath:a})!==null)return A;A.useWithSource("",{ignorePath:!0},e,{strict:!1,overwrite:!0})}let N=await rA.findProjectCwd(e);A.startingCwd=e,A.projectCwd=N;let U=Object.assign(Object.create(null),process.env);A.env=U;let z=await Promise.all(A.get("injectEnvironmentFiles").map(async ue=>{let ye=ue.endsWith("?")?await oe.readFilePromise(ue.slice(0,-1),"utf8").catch(()=>""):await oe.readFilePromise(ue,"utf8");return(0,Sle.parse)(ye)}));for(let ue of z)for(let[ye,ae]of Object.entries(ue))A.env[ye]=iS(ae,{env:U});if(A.importSettings(E(Px)),A.useWithSource("",E(u),e,{strict:o}),C){let[ue,ye]=C;A.useWithSource(ue,E(ye),I,{strict:o})}let te=ue=>"default"in ue?ue.default:ue,le=new Map([["@@core",ose]]);if(r!==null)for(let ue of r.plugins.keys())le.set(ue,te(r.modules.get(ue)));for(let[ue,ye]of le)A.activatePlugin(ue,ye);let pe=new Map([]);if(r!==null){let ue=new Map;for(let Ie of xle.builtinModules)ue.set(Ie,()=>zp(Ie));for(let[Ie,Fe]of r.modules)ue.set(Ie,()=>Fe);let ye=new Set,ae=async(Ie,Fe)=>{let{factory:g,name:Ee}=zp(Ie);if(!g||ye.has(Ee))return;let De=new Map(ue),ce=ee=>{if(De.has(ee))return De.get(ee)();throw new it(`This plugin cannot access the package referenced via ${ee} which is neither a builtin, nor an exposed entry`)},ne=await Wy(async()=>te(await g(ce)),ee=>`${ee} (when initializing ${Ee}, defined in ${Fe})`);ue.set(Ee,()=>ne),ye.add(Ee),pe.set(Ee,ne)};if(u.plugins)for(let Ie of u.plugins.split(";")){let Fe=V.resolve(e,fe.toPortablePath(Ie));await ae(Fe,"")}for(let{path:Ie,cwd:Fe,data:g}of p)if(!!n&&!!Array.isArray(g.plugins))for(let Ee of g.plugins){let De=typeof Ee!="string"?Ee.path:Ee,ce=Ee?.spec??"",ne=Ee?.checksum??"";if(I1.has(ce))continue;let ee=V.resolve(Fe,fe.toPortablePath(De));if(!await oe.existsPromise(ee)){if(!ce){let ht=_t(A,V.basename(ee,".cjs"),Et.NAME),H=_t(A,".gitignore",Et.NAME),lt=_t(A,A.values.get("rcFilename"),Et.NAME),Te=_t(A,"https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored",Et.URL);throw new it(`Missing source for the ${ht} plugin - please try to remove the plugin from ${lt} then reinstall it manually. This error usually occurs because ${H} is incorrect, check ${Te} to make sure your plugin folder isn't gitignored.`)}if(!ce.match(/^https?:/)){let ht=_t(A,V.basename(ee,".cjs"),Et.NAME),H=_t(A,A.values.get("rcFilename"),Et.NAME);throw new it(`Failed to recognize the source for the ${ht} plugin - please try to delete the plugin from ${H} then reinstall it manually.`)}let we=await N4(ce,{configuration:A}),be=Qs(we);if(ne&&ne!==be){let ht=_t(A,V.basename(ee,".cjs"),Et.NAME),H=_t(A,A.values.get("rcFilename"),Et.NAME),lt=_t(A,`yarn plugin import ${ce}`,Et.CODE);throw new it(`Failed to fetch the ${ht} plugin from its remote location: its checksum seems to have changed. If this is expected, please remove the plugin from ${H} then run ${lt} to reimport it.`)}await oe.mkdirPromise(V.dirname(ee),{recursive:!0}),await oe.writeFilePromise(ee,we)}await ae(ee,Ie)}}for(let[ue,ye]of pe)A.activatePlugin(ue,ye);if(A.useWithSource("",F(u),e,{strict:o}),C){let[ue,ye]=C;A.useWithSource(ue,F(ye),I,{strict:o})}return A.get("enableGlobalCache")&&(A.values.set("cacheFolder",`${A.get("globalFolder")}/cache`),A.sources.set("cacheFolder","")),A}static async findRcFiles(e){let r=q4(),o=[],a=e,n=null;for(;a!==n;){n=a;let u=V.join(n,r);if(oe.existsSync(u)){let A=await oe.readFilePromise(u,"utf8"),p;try{p=Ki(A)}catch{let C="";throw A.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(C=" (in particular, make sure you list the colons after each key name)"),new it(`Parse error when loading ${u}; please check it's proper Yaml${C}`)}o.unshift({path:u,cwd:n,data:p})}a=V.dirname(n)}return o}static async findFolderRcFile(e){let r=V.join(e,dr.rc),o;try{o=await oe.readFilePromise(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let a=Ki(o);return{path:r,cwd:e,data:a}}static async findProjectCwd(e){let r=null,o=e,a=null;for(;o!==a;){if(a=o,oe.existsSync(V.join(a,dr.lockfile)))return a;oe.existsSync(V.join(a,dr.manifest))&&(r=a),o=V.dirname(a)}return r}static async updateConfiguration(e,r,o={}){let a=q4(),n=V.join(e,a),u=oe.existsSync(n)?Ki(await oe.readFilePromise(n,"utf8")):{},A=!1,p;if(typeof r=="function"){try{p=r(u)}catch{p=r({})}if(p===u)return!1}else{p=u;for(let h of Object.keys(r)){let C=u[h],I=r[h],v;if(typeof I=="function")try{v=I(C)}catch{v=I(void 0)}else v=I;C!==v&&(v===rA.deleteProperty?delete p[h]:p[h]=v,A=!0)}if(!A)return!1}return await oe.changeFilePromise(n,Ba(p),{automaticNewlines:!0}),!0}static async addPlugin(e,r){r.length!==0&&await rA.updateConfiguration(e,o=>{let a=o.plugins??[];if(a.length===0)return{...o,plugins:r};let n=[],u=[...r];for(let A of a){let p=typeof A!="string"?A.path:A,h=u.find(C=>C.path===p);h?(n.push(h),u=u.filter(C=>C!==h)):n.push(A)}return n.push(...u),{...o,plugins:n}})}static async updateHomeConfiguration(e){let r=yE();return await rA.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,o]of Object.entries(e))if(o!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,o),this.values.set(r,W4(this,o))}}useWithSource(e,r,o,a){try{this.use(e,r,o,a)}catch(n){throw n.message+=` (in ${_t(this,e,Et.PATH)})`,n}}use(e,r,o,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSettings");for(let u of["enableStrictSettings",...Object.keys(r)]){let A=r[u],p=mM(A);if(p&&(e=p),typeof A>"u"||u==="plugins"||e===""&&Xst.has(u))continue;if(u==="rcFilename")throw new it(`The rcFilename settings can only be set via ${`${xx}RC_FILENAME`.toUpperCase()}, not via a rc file`);let h=this.settings.get(u);if(!h){let I=yE(),v=e[0]!=="<"?V.dirname(e):null;if(a&&!(v!==null?I===v:!1))throw new it(`Unrecognized or legacy configuration settings found: ${u} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(u,e);continue}if(this.sources.has(u)&&!(n||h.type==="MAP"||h.isArray&&h.concatenateValues))continue;let C;try{C=Y4(this,u,A,h,o)}catch(I){throw I.message+=` in ${_t(this,e,Et.PATH)}`,I}if(u==="enableStrictSettings"&&e!==""){a=C;continue}if(h.type==="MAP"){let I=this.values.get(u);this.values.set(u,new Map(n?[...I,...C]:[...C,...I])),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else if(h.isArray&&h.concatenateValues){let I=this.values.get(u);this.values.set(u,n?[...I,...C]:[...C,...I]),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else this.values.set(u,C),this.sources.set(u,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:r=!1,getNativePaths:o=!1}){let a=this.get(e),n=this.settings.get(e);if(typeof n>"u")throw new it(`Couldn't find a configuration settings named "${e}"`);return Sx(a,n,{hideSecrets:r,getNativePaths:o})}getSubprocessStreams(e,{header:r,prefix:o,report:a}){let n,u,A=oe.createWriteStream(e);if(this.get("enableInlineBuilds")){let p=a.createStreamReporter(`${o} ${_t(this,"STDOUT","green")}`),h=a.createStreamReporter(`${o} ${_t(this,"STDERR","red")}`);n=new j4.PassThrough,n.pipe(p),n.pipe(A),u=new j4.PassThrough,u.pipe(h),u.pipe(A)}else n=A,u=A,typeof r<"u"&&n.write(`${r} -`);return{stdout:n,stderr:u}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let o of r.resolvers||[])e.push(new o);return new vd([new a1,new Xn,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let o of r.fetchers||[])e.push(new o);return new pE([new hE,new dE,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let o of r.linkers||[])e.push(new o);return e}getSupportedArchitectures(){let e=w1(),r=this.get("supportedArchitectures"),o=r.get("os");o!==null&&(o=o.map(u=>u==="current"?e.os:u));let a=r.get("cpu");a!==null&&(a=a.map(u=>u==="current"?e.cpu:u));let n=r.get("libc");return n!==null&&(n=sl(n,u=>u==="current"?e.libc??sl.skip:u)),{os:o,cpu:a,libc:n}}async getPackageExtensions(){if(this.packageExtensions!==null)return this.packageExtensions;this.packageExtensions=new Map;let e=this.packageExtensions,r=(o,a,{userProvided:n=!1}={})=>{if(!ba(o.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let u=new Ot;u.load(a,{yamlCompatibilityMode:!0});let A=Gy(e,o.identHash),p=[];A.push([o.range,p]);let h={status:"inactive",userProvided:n,parentDescriptor:o};for(let C of u.dependencies.values())p.push({...h,type:"Dependency",descriptor:C});for(let C of u.peerDependencies.values())p.push({...h,type:"PeerDependency",descriptor:C});for(let[C,I]of u.peerDependenciesMeta)for(let[v,b]of Object.entries(I))p.push({...h,type:"PeerDependencyMeta",selector:C,key:v,value:b})};await this.triggerHook(o=>o.registerPackageExtensions,this,r);for(let[o,a]of this.get("packageExtensions"))r(nh(o,!0),nS(a),{userProvided:!0});return e}normalizeLocator(e){return ba(e.reference)?Fs(e,`${this.get("defaultProtocol")}${e.reference}`):QE.test(e.reference)?Fs(e,`${this.get("defaultProtocol")}${e.reference}`):e}normalizeDependency(e){return ba(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):QE.test(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):e}normalizeDependencyMap(e){return new Map([...e].map(([r,o])=>[r,this.normalizeDependency(o)]))}normalizePackage(e,{packageExtensions:r}){let o=ZI(e),a=r.get(e.identHash);if(typeof a<"u"){let u=e.version;if(u!==null){for(let[A,p]of a)if(!!xf(u,A))for(let h of p)switch(h.status==="inactive"&&(h.status="redundant"),h.type){case"Dependency":typeof o.dependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.dependencies.set(h.descriptor.identHash,this.normalizeDependency(h.descriptor)));break;case"PeerDependency":typeof o.peerDependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.peerDependencies.set(h.descriptor.identHash,h.descriptor));break;case"PeerDependencyMeta":{let C=o.peerDependenciesMeta.get(h.selector);(typeof C>"u"||!Object.hasOwn(C,h.key)||C[h.key]!==h.value)&&(h.status="active",ol(o.peerDependenciesMeta,h.selector,()=>({}))[h.key]=h.value)}break;default:EN(h);break}}}let n=u=>u.scope?`${u.scope}__${u.name}`:`${u.name}`;for(let u of o.peerDependenciesMeta.keys()){let A=Js(u);o.peerDependencies.has(A.identHash)||o.peerDependencies.set(A.identHash,In(A,"*"))}for(let u of o.peerDependencies.values()){if(u.scope==="types")continue;let A=n(u),p=eA("types",A),h=fn(p);o.peerDependencies.has(p.identHash)||o.peerDependenciesMeta.has(h)||(o.peerDependencies.set(p.identHash,In(p,"*")),o.peerDependenciesMeta.set(h,{optional:!0}))}return o.dependencies=new Map(ks(o.dependencies,([,u])=>Sa(u))),o.peerDependencies=new Map(ks(o.peerDependencies,([,u])=>Sa(u))),o}getLimit(e){return ol(this.limits,e,()=>(0,ble.default)(this.get(e)))}async triggerHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);!n||await n(...r)}}async triggerMultipleHooks(e,r){for(let o of r)await this.triggerHook(e,...o)}async reduceHook(e,r,...o){let a=r;for(let n of this.plugins.values()){let u=n.hooks;if(!u)continue;let A=e(u);!A||(a=await A(a,...o))}return a}async firstHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);if(!n)continue;let u=await n(...r);if(typeof u<"u")return u}return null}},Ke=rA;Ke.deleteProperty=Symbol(),Ke.telemetry=null});var Ur={};Vt(Ur,{EndStrategy:()=>J4,ExecError:()=>kx,PipeError:()=>D1,execvp:()=>_4,pipevp:()=>Gc});function Sd(t){return t!==null&&typeof t.fd=="number"}function K4(){}function V4(){for(let t of xd)t.kill()}async function Gc(t,e,{cwd:r,env:o=process.env,strict:a=!1,stdin:n=null,stdout:u,stderr:A,end:p=2}){let h=["pipe","pipe","pipe"];n===null?h[0]="ignore":Sd(n)&&(h[0]=n),Sd(u)&&(h[1]=u),Sd(A)&&(h[2]=A);let C=(0,z4.default)(t,e,{cwd:fe.fromPortablePath(r),env:{...o,PWD:fe.fromPortablePath(r)},stdio:h});xd.add(C),xd.size===1&&(process.on("SIGINT",K4),process.on("SIGTERM",V4)),!Sd(n)&&n!==null&&n.pipe(C.stdin),Sd(u)||C.stdout.pipe(u,{end:!1}),Sd(A)||C.stderr.pipe(A,{end:!1});let I=()=>{for(let v of new Set([u,A]))Sd(v)||v.end()};return new Promise((v,b)=>{C.on("error",E=>{xd.delete(C),xd.size===0&&(process.off("SIGINT",K4),process.off("SIGTERM",V4)),(p===2||p===1)&&I(),b(E)}),C.on("close",(E,F)=>{xd.delete(C),xd.size===0&&(process.off("SIGINT",K4),process.off("SIGTERM",V4)),(p===2||p===1&&E!==0)&&I(),E===0||!a?v({code:X4(E,F)}):b(new D1({fileName:t,code:E,signal:F}))})})}async function _4(t,e,{cwd:r,env:o=process.env,encoding:a="utf8",strict:n=!1}){let u=["ignore","pipe","pipe"],A=[],p=[],h=fe.fromPortablePath(r);typeof o.PWD<"u"&&(o={...o,PWD:h});let C=(0,z4.default)(t,e,{cwd:h,env:o,stdio:u});return C.stdout.on("data",I=>{A.push(I)}),C.stderr.on("data",I=>{p.push(I)}),await new Promise((I,v)=>{C.on("error",b=>{let E=Ke.create(r),F=_t(E,t,Et.PATH);v(new Jt(1,`Process ${F} failed to spawn`,N=>{N.reportError(1,` ${Ju(E,{label:"Thrown Error",value:_c(Et.NO_HINT,b.message)})}`)}))}),C.on("close",(b,E)=>{let F=a==="buffer"?Buffer.concat(A):Buffer.concat(A).toString(a),N=a==="buffer"?Buffer.concat(p):Buffer.concat(p).toString(a);b===0||!n?I({code:X4(b,E),stdout:F,stderr:N}):v(new kx({fileName:t,code:b,signal:E,stdout:F,stderr:N}))})})}function X4(t,e){let r=oot.get(e);return typeof r<"u"?128+r:t??1}function aot(t,e,{configuration:r,report:o}){o.reportError(1,` ${Ju(r,t!==null?{label:"Exit Code",value:_c(Et.NUMBER,t)}:{label:"Exit Signal",value:_c(Et.CODE,e)})}`)}var z4,J4,D1,kx,xd,oot,Dx=yt(()=>{Pt();z4=$e(sT());v1();Yl();ql();J4=(o=>(o[o.Never=0]="Never",o[o.ErrorCode=1]="ErrorCode",o[o.Always=2]="Always",o))(J4||{}),D1=class extends Jt{constructor({fileName:r,code:o,signal:a}){let n=Ke.create(V.cwd()),u=_t(n,r,Et.PATH);super(1,`Child ${u} reported an error`,A=>{aot(o,a,{configuration:n,report:A})});this.code=X4(o,a)}},kx=class extends D1{constructor({fileName:r,code:o,signal:a,stdout:n,stderr:u}){super({fileName:r,code:o,signal:a});this.stdout=n,this.stderr=u}};xd=new Set;oot=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]])});function Fle(t){Qle=t}function P1(){return typeof Z4>"u"&&(Z4=Qle()),Z4}var Z4,Qle,$4=yt(()=>{Qle=()=>{throw new Error("Assertion failed: No libzip instance is available, and no factory was configured")}});var Rle=_((Qx,tU)=>{var lot=Object.assign({},Be("fs")),eU=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(t=t||__filename),function(e){e=e||{};var r=typeof e<"u"?e:{},o,a;r.ready=new Promise(function(We,tt){o=We,a=tt});var n={},u;for(u in r)r.hasOwnProperty(u)&&(n[u]=r[u]);var A=[],p="./this.program",h=function(We,tt){throw tt},C=!1,I=!0,v="";function b(We){return r.locateFile?r.locateFile(We,v):v+We}var E,F,N,U;I&&(C?v=Be("path").dirname(v)+"/":v=__dirname+"/",E=function(tt,It){var nr=ii(tt);return nr?It?nr:nr.toString():(N||(N=lot),U||(U=Be("path")),tt=U.normalize(tt),N.readFileSync(tt,It?null:"utf8"))},F=function(tt){var It=E(tt,!0);return It.buffer||(It=new Uint8Array(It)),Ee(It.buffer),It},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),A=process.argv.slice(2),h=function(We){process.exit(We)},r.inspect=function(){return"[Emscripten Module object]"});var z=r.print||console.log.bind(console),te=r.printErr||console.warn.bind(console);for(u in n)n.hasOwnProperty(u)&&(r[u]=n[u]);n=null,r.arguments&&(A=r.arguments),r.thisProgram&&(p=r.thisProgram),r.quit&&(h=r.quit);var le=0,pe=function(We){le=We},ue;r.wasmBinary&&(ue=r.wasmBinary);var ye=r.noExitRuntime||!0;typeof WebAssembly!="object"&&Ti("no native wasm support detected");function ae(We,tt,It){switch(tt=tt||"i8",tt.charAt(tt.length-1)==="*"&&(tt="i32"),tt){case"i1":return He[We>>0];case"i8":return He[We>>0];case"i16":return ap((We>>1)*2);case"i32":return Ms((We>>2)*4);case"i64":return Ms((We>>2)*4);case"float":return cu((We>>2)*4);case"double":return op((We>>3)*8);default:Ti("invalid type for getValue: "+tt)}return null}var Ie,Fe=!1,g;function Ee(We,tt){We||Ti("Assertion failed: "+tt)}function De(We){var tt=r["_"+We];return Ee(tt,"Cannot call unknown function "+We+", make sure it is exported"),tt}function ce(We,tt,It,nr,$){var me={string:function(es){var xi=0;if(es!=null&&es!==0){var jo=(es.length<<2)+1;xi=Un(jo),ht(es,xi,jo)}return xi},array:function(es){var xi=Un(es.length);return Te(es,xi),xi}};function Ne(es){return tt==="string"?we(es):tt==="boolean"?Boolean(es):es}var ft=De(We),pt=[],Tt=0;if(nr)for(var er=0;er=It)&&Re[nr];)++nr;return ee.decode(Re.subarray(We,nr))}function be(We,tt,It,nr){if(!(nr>0))return 0;for(var $=It,me=It+nr-1,Ne=0;Ne=55296&&ft<=57343){var pt=We.charCodeAt(++Ne);ft=65536+((ft&1023)<<10)|pt&1023}if(ft<=127){if(It>=me)break;tt[It++]=ft}else if(ft<=2047){if(It+1>=me)break;tt[It++]=192|ft>>6,tt[It++]=128|ft&63}else if(ft<=65535){if(It+2>=me)break;tt[It++]=224|ft>>12,tt[It++]=128|ft>>6&63,tt[It++]=128|ft&63}else{if(It+3>=me)break;tt[It++]=240|ft>>18,tt[It++]=128|ft>>12&63,tt[It++]=128|ft>>6&63,tt[It++]=128|ft&63}}return tt[It]=0,It-$}function ht(We,tt,It){return be(We,Re,tt,It)}function H(We){for(var tt=0,It=0;It=55296&&nr<=57343&&(nr=65536+((nr&1023)<<10)|We.charCodeAt(++It)&1023),nr<=127?++tt:nr<=2047?tt+=2:nr<=65535?tt+=3:tt+=4}return tt}function lt(We){var tt=H(We)+1,It=Ni(tt);return It&&be(We,He,It,tt),It}function Te(We,tt){He.set(We,tt)}function ke(We,tt){return We%tt>0&&(We+=tt-We%tt),We}var xe,He,Re,ze,je,x,w,S,y,R;function J(We){xe=We,r.HEAP_DATA_VIEW=R=new DataView(We),r.HEAP8=He=new Int8Array(We),r.HEAP16=ze=new Int16Array(We),r.HEAP32=x=new Int32Array(We),r.HEAPU8=Re=new Uint8Array(We),r.HEAPU16=je=new Uint16Array(We),r.HEAPU32=w=new Uint32Array(We),r.HEAPF32=S=new Float32Array(We),r.HEAPF64=y=new Float64Array(We)}var X=r.INITIAL_MEMORY||16777216,Z,ie=[],Pe=[],Le=[],ot=!1;function dt(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)xt(r.preRun.shift());oo(ie)}function jt(){ot=!0,oo(Pe)}function $t(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)kr(r.postRun.shift());oo(Le)}function xt(We){ie.unshift(We)}function an(We){Pe.unshift(We)}function kr(We){Le.unshift(We)}var mr=0,xr=null,Wr=null;function Kn(We){mr++,r.monitorRunDependencies&&r.monitorRunDependencies(mr)}function Ns(We){if(mr--,r.monitorRunDependencies&&r.monitorRunDependencies(mr),mr==0&&(xr!==null&&(clearInterval(xr),xr=null),Wr)){var tt=Wr;Wr=null,tt()}}r.preloadedImages={},r.preloadedAudios={};function Ti(We){r.onAbort&&r.onAbort(We),We+="",te(We),Fe=!0,g=1,We="abort("+We+"). Build with -s ASSERTIONS=1 for more info.";var tt=new WebAssembly.RuntimeError(We);throw a(tt),tt}var ps="data:application/octet-stream;base64,";function io(We){return We.startsWith(ps)}var Si="data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQ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KAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASEL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NgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsi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CyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYg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DCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcN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DCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQLDAILAn8CQANAAkACQAJAAkACQCADKAI8Ig1BggJLDQAgAxAvAkAgAygCPCINQYICSw0AIAoNAEEADAgLIA1FDQQgDUECSw0AIAMoAmghCAwBCyADKAJoIghFBEBBACEIDAELIAMoAkggCGoiAUEBayIELQAAIgYgAS0AAEcNACAGIAQtAAJHDQAgBEEDaiEEQQAhCQJAA0AgBiAELQAARw0BIAQtAAEgBkcEQCAJQQFyIQkMAgsgBC0AAiAGRwRAIAlBAnIhCQwCCyAELQADIAZHBEAgCUEDciEJDAILIAQtAAQgBkcEQCAJQQRyIQkMAgsgBC0ABSAGRwRAIAlBBXIhCQwCCyAELQAGIAZHBEAgCUEGciEJDAILIAQtAAcgBkcEQCAJQQdyIQkMAgsgBEEIaiEEIAlB+AFJIQEgCUEIaiEJIAENAAtBgAIhCQtBggIhBCANIAlBAmoiASABIA1LGyIBQYECSw0BIAEiBEECSw0BCyADKAJIIAhqLQAAIQQgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtakEAOgAAIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qIAQ6AAAgAyAEQQJ0aiIBIAEvAeQBQQFqOwHkASADIAMoAjxBAWs2AjwgAyADKAJoQQFqIgQ2AmgMAQsgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtakEBOgAAIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qIARBA2s6AAAgAyADKAKALkEBajYCgC4gBEH9zgBqLQAAQQJ0IANqQegJaiIBIAEvAQBBAWo7AQAgA0GAywAtAABBAnRqQdgTaiIBIAEvAQBBAWo7AQAgAyADKAI8IARrNgI8IAMgAygCaCAEaiIENgJoCyADKALwLSADKAL0LUcNAUEAIQggAyADKAJYIgFBAE4EfyADKAJIIAFqBUEACyAEIAFrQQAQDyADIAMoAmg2AlggAygCABAKIAMoAgAoAhANAQwCCwsgA0EANgKELiAKQQRGBEAgAyADKAJYIgFBAE4EfyADKAJIIAFqBUEACyADKAJoIAFrQQEQDyADIAMoAmg2AlggAygCABAKQQNBAiADKAIAKAIQGwwCCyADKALwLQRAQQAhCCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEEUNAQtBASEICyAICwwBCyADIAogAUEMbEG42ABqKAIAEQIACyIBQX5xQQJGBEAgA0GaBTYCIAsgAUF9cUUEQEEAIQQgBSgCEA0CDAQLIAFBAUcNAAJAAkACQCAKQQFrDgUAAQEBAgELIAMpA5guISICfwJ+IAMoAqAuIgFBA2oiCUE/TQRAQgIgAa2GICKEDAELIAFBwABGBEAgAygCBCADKAIQaiAiNwAAIAMgAygCEEEIajYCEEICISJBCgwCCyADKAIEIAMoAhBqQgIgAa2GICKENwAAIAMgAygCEEEIajYCECABQT1rIQlCAkHAACABa62ICyEiIAlBB2ogCUE5SQ0AGiADKAIEIAMoAhBqICI3AAAgAyADKAIQQQhqNgIQQgAhIiAJQTlrCyEBIAMgIjcDmC4gAyABNgKgLiADEDAMAQsgA0EAQQBBABA5IApBA0cNACADKAJQQQBBgIAIEBkgAygCPA0AIANBADYChC4gA0EANgJYIANBADYCaAsgBRAKIAUoAhANAAwDC0EAIQQgCkEERw0AAkACfwJAAkAgAygCFEEBaw4CAQADCyAFIANBoAFqQeCAASgCABEBACIBNgIwIAMoAgQgAygCEGogATYAACADIAMoAhBBBGoiATYCECADKAIEIAFqIQQgBSgCCAwBCyADKAIEIAMoAhBqIQQgBSgCMCIBQRh0IAFBCHRBgID8B3FyIAFBCHZBgP4DcSABQRh2cnILIQEgBCABNgAAIAMgAygCEEEEajYCEAsgBRAKIAMoAhQiAUEBTgRAIANBACABazYCFAsgAygCEEUhBAsgBAwCCyAFQezAACgCADYCGEF7DAELIANBfzYCJEEACwwBCyMAQRBrIhQkAEF+IRcCQCABIgxFDQAgDCgCIEUNACAMKAIkRQ0AIAwoAhwiB0UNACAHKAIAIAxHDQAgBygCBCIIQbT+AGtBH0sNACAMKAIMIhBFDQAgDCgCACIBRQRAIAwoAgQNAQsgCEG//gBGBEAgB0HA/gA2AgRBwP4AIQgLIAdBpAFqIR8gB0G8BmohGSAHQbwBaiEcIAdBoAFqIR0gB0G4AWohGiAHQfwKaiEYIAdBQGshHiAHKAKIASEFIAwoAgQiICEGIAcoAoQBIQogDCgCECIPIRYCfwJAAkACQANAAkBBfSEEQQEhCQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAhBtP4Aaw4fBwYICQolJicoBSwtLQsZGgQMAjIzATUANw0OAzlISUwLIAcoApQBIQMgASEEIAYhCAw1CyAHKAKUASEDIAEhBCAGIQgMMgsgBygCtAEhCAwuCyAHKAIMIQgMQQsgBUEOTw0pIAZFDUEgBUEIaiEIIAFBAWohBCAGQQFrIQkgAS0AACAFdCAKaiEKIAVBBkkNDCAEIQEgCSEGIAghBQwpCyAFQSBPDSUgBkUNQCABQQFqIQQgBkEBayEIIAEtAAAgBXQgCmohCiAFQRhJDQ0gBCEBIAghBgwlCyAFQRBPDRUgBkUNPyAFQQhqIQggAUEBaiEEIAZBAWshCSABLQAAIAV0IApqIQogBUEISQ0NIAQhASAJIQYgCCEFDBULIAcoAgwiC0UNByAFQRBPDSIgBkUNPiAFQQhqIQggAUEBaiEEIAZBAWshCSABLQAAIAV0IApqIQogBUEISQ0NIAQhASAJIQYgCCEFDCILIAVBH0sNFQwUCyAFQQ9LDRYMFQsgBygCFCIEQYAIcUUEQCAFIQgMFwsgCiEIIAVBD0sNGAwXCyAKIAVBB3F2IQogBUF4cSIFQR9LDQwgBkUNOiAFQQhqIQggAUEBaiEEIAZBAWshCSABLQAAIAV0IApqIQogBUEYSQ0GIAQhASAJIQYgCCEFDAwLIAcoArQBIgggBygCqAEiC08NIwwiCyAPRQ0qIBAgBygCjAE6AAAgB0HI/gA2AgQgD0EBayEPIBBBAWohECAHKAIEIQgMOQsgBygCDCIDRQRAQQAhCAwJCyAFQR9LDQcgBkUNNyAFQQhqIQggAUEBaiEEIAZBAWshCSABLQAAIAV0IApqIQogBUEYSQ0BIAQhASAJIQYgCCEFDAcLIAdBwP4ANgIEDCoLIAlFBEAgBCEBQQAhBiAIIQUgDSEEDDgLIAVBEGohCSABQQJqIQQgBkECayELIAEtAAEgCHQgCmohCiAFQQ9LBEAgBCEBIAshBiAJIQUMBgsgC0UEQCAEIQFBACEGIAkhBSANIQQMOAsgBUEYaiEIIAFBA2ohBCAGQQNrIQsgAS0AAiAJdCAKaiEKIAVBB0sEQCAEIQEgCyEGIAghBQwGCyALRQRAIAQhAUEAIQYgCCEFIA0hBAw4CyAFQSBqIQUgBkEEayEGIAEtAAMgCHQgCmohCiABQQRqIQEMBQsgCUUEQCAEIQFBACEGIAghBSANIQQMNwsgBUEQaiEFIAZBAmshBiABLQABIAh0IApqIQogAUECaiEBDBwLIAlFBEAgBCEBQQAhBiAIIQUgDSEEDDYLIAVBEGohCSABQQJqIQQgBkECayELIAEtAAEgCHQgCmohCiAFQQ9LBEAgBCEBIAshBiAJIQUMBgsgC0UEQCAEIQFBACEGIAkhBSANIQQMNgsgBUEYaiEIIAFBA2ohBCAGQQNrIQsgAS0AAiAJdCAKaiEKIAUEQCAEIQEgCyEGIAghBQwGCyALRQRAIAQhAUEAIQYgCCEFIA0hBAw2CyAFQSBqIQUgBkEEayEGIAEtAAMgCHQgCmohCiABQQRqIQEMBQsgBUEIaiEJIAhFBEAgBCEBQQAhBiAJIQUgDSEEDDULIAFBAmohBCAGQQJrIQggAS0AASAJdCAKaiEKIAVBD0sEQCAEIQEgCCEGDBgLIAVBEGohCSAIRQRAIAQhAUEAIQYgCSEFIA0hBAw1CyABQQNqIQQgBkEDayEIIAEtAAIgCXQgCmohCiAFQQdLBEAgBCEBIAghBgwYCyAFQRhqIQUgCEUEQCAEIQFBACEGIA0hBAw1CyAGQQRrIQYgAS0AAyAFdCAKaiEKIAFBBGohAQwXCyAJDQYgBCEBQQAhBiAIIQUgDSEEDDMLIAlFBEAgBCEBQQAhBiAIIQUgDSEEDDMLIAVBEGohBSAGQQJrIQYgAS0AASAIdCAKaiEKIAFBAmohAQwUCyAMIBYgD2siCSAMKAIUajYCFCAHIAcoAiAgCWo2AiACQCADQQRxRQ0AIAkEQAJAIBAgCWshBCAMKAIcIggoAhQEQCAIQUBrIAQgCUEAQdiAASgCABEIAAwBCyAIIAgoAhwgBCAJQcCAASgCABEAACIENgIcIAwgBDYCMAsLIAcoAhRFDQAgByAeQeCAASgCABEBACIENgIcIAwgBDYCMAsCQCAHKAIMIghBBHFFDQAgBygCHCAKIApBCHRBgID8B3EgCkEYdHIgCkEIdkGA/gNxIApBGHZyciAHKAIUG0YNACAHQdH+ADYCBCAMQaQMNgIYIA8hFiAHKAIEIQgMMQtBACEKQQAhBSAPIRYLIAdBz/4ANgIEDC0LIApB//8DcSIEIApBf3NBEHZHBEAgB0HR/gA2AgQgDEGOCjYCGCAHKAIEIQgMLwsgB0HC/gA2AgQgByAENgKMAUEAIQpBACEFCyAHQcP+ADYCBAsgBygCjAEiBARAIA8gBiAEIAQgBksbIgQgBCAPSxsiCEUNHiAQIAEgCBAHIQQgByAHKAKMASAIazYCjAEgBCAIaiEQIA8gCGshDyABIAhqIQEgBiAIayEGIAcoAgQhCAwtCyAHQb/+ADYCBCAHKAIEIQgMLAsgBUEQaiEFIAZBAmshBiABLQABIAh0IApqIQogAUECaiEBCyAHIAo2AhQgCkH/AXFBCEcEQCAHQdH+ADYCBCAMQYIPNgIYIAcoAgQhCAwrCyAKQYDAA3EEQCAHQdH+ADYCBCAMQY0JNgIYIAcoAgQhCAwrCyAHKAIkIgQEQCAEIApBCHZBAXE2AgALAkAgCkGABHFFDQAgBy0ADEEEcUUNACAUIAo7AAwgBwJ/IAcoAhwhBUEAIBRBDGoiBEUNABogBSAEQQJB1IABKAIAEQAACzYCHAsgB0G2/gA2AgRBACEFQQAhCgsgBkUNKCABQQFqIQQgBkEBayEIIAEtAAAgBXQgCmohCiAFQRhPBEAgBCEBIAghBgwBCyAFQQhqIQkgCEUEQCAEIQFBACEGIAkhBSANIQQMKwsgAUECaiEEIAZBAmshCCABLQABIAl0IApqIQogBUEPSwRAIAQhASAIIQYMAQsgBUEQaiEJIAhFBEAgBCEBQQAhBiAJIQUgDSEEDCsLIAFBA2ohBCAGQQNrIQggAS0AAiAJdCAKaiEKIAVBB0sEQCAEIQEgCCEGDAELIAVBGGohBSAIRQRAIAQhAUEAIQYgDSEEDCsLIAZBBGshBiABLQADIAV0IApqIQogAUEEaiEBCyAHKAIkIgQEQCAEIAo2AgQLAkAgBy0AFUECcUUNACAHLQAMQQRxRQ0AIBQgCjYADCAHAn8gBygCHCEFQQAgFEEMaiIERQ0AGiAFIARBBEHUgAEoAgARAAALNgIcCyAHQbf+ADYCBEEAIQVBACEKCyAGRQ0mIAFBAWohBCAGQQFrIQggAS0AACAFdCAKaiEKIAVBCE8EQCAEIQEgCCEGDAELIAVBCGohBSAIRQRAIAQhAUEAIQYgDSEEDCkLIAZBAmshBiABLQABIAV0IApqIQogAUECaiEBCyAHKAIkIgQEQCAEIApBCHY2AgwgBCAKQf8BcTYCCAsCQCAHLQAVQQJxRQ0AIActAAxBBHFFDQAgFCAKOwAMIAcCfyAHKAIcIQVBACAUQQxqIgRFDQAaIAUgBEECQdSAASgCABEAAAs2AhwLIAdBuP4ANgIEQQAhCEEAIQVBACEKIAcoAhQiBEGACHENAQsgBygCJCIEBEAgBEEANgIQCyAIIQUMAgsgBkUEQEEAIQYgCCEKIA0hBAwmCyABQQFqIQkgBkEBayELIAEtAAAgBXQgCGohCiAFQQhPBEAgCSEBIAshBgwBCyAFQQhqIQUgC0UEQCAJIQFBACEGIA0hBAwmCyAGQQJrIQYgAS0AASAFdCAKaiEKIAFBAmohAQsgByAKQf//A3EiCDYCjAEgBygCJCIFBEAgBSAINgIUC0EAIQUCQCAEQYAEcUUNACAHLQAMQQRxRQ0AIBQgCjsADCAHAn8gBygCHCEIQQAgFEEMaiIERQ0AGiAIIARBAkHUgAEoAgARAAALNgIcC0EAIQoLIAdBuf4ANgIECyAHKAIUIglBgAhxBEAgBiAHKAKMASIIIAYgCEkbIg4EQAJAIAcoAiQiA0UNACADKAIQIgRFDQAgAygCGCILIAMoAhQgCGsiCE0NACAEIAhqIAEgCyAIayAOIAggDmogC0sbEAcaIAcoAhQhCQsCQCAJQYAEcUUNACAHLQAMQQRxRQ0AIAcCfyAHKAIcIQRBACABRQ0AGiAEIAEgDkHUgAEoAgARAAALNgIcCyAHIAcoAowBIA5rIgg2AowBIAYgDmshBiABIA5qIQELIAgNEwsgB0G6/gA2AgQgB0EANgKMAQsCQCAHLQAVQQhxBEBBACEIIAZFDQQDQCABIAhqLQAAIQMCQCAHKAIkIgtFDQAgCygCHCIERQ0AIAcoAowBIgkgCygCIE8NACAHIAlBAWo2AowBIAQgCWogAzoAAAsgA0EAIAYgCEEBaiIISxsNAAsCQCAHLQAVQQJxRQ0AIActAAxBBHFFDQAgBwJ/IAcoAhwhBEEAIAFFDQAaIAQgASAIQdSAASgCABEAAAs2AhwLIAEgCGohASAGIAhrIQYgA0UNAQwTCyAHKAIkIgRFDQAgBEEANgIcCyAHQbv+ADYCBCAHQQA2AowBCwJAIActABVBEHEEQEEAIQggBkUNAwNAIAEgCGotAAAhAwJAIAcoAiQiC0UNACALKAIkIgRFDQAgBygCjAEiCSALKAIoTw0AIAcgCUEBajYCjAEgBCAJaiADOgAACyADQQAgBiAIQQFqIghLGw0ACwJAIActABVBAnFFDQAgBy0ADEEEcUUNACAHAn8gBygCHCEEQQAgAUUNABogBCABIAhB1IABKAIAEQAACzYCHAsgASAIaiEBIAYgCGshBiADRQ0BDBILIAcoAiQiBEUNACAEQQA2AiQLIAdBvP4ANgIECyAHKAIUIgtBgARxBEACQCAFQQ9LDQAgBkUNHyAFQQhqIQggAUEBaiEEIAZBAWshCSABLQAAIAV0IApqIQogBUEITwRAIAQhASAJIQYgCCEFDAELIAlFBEAgBCEBQQAhBiAIIQUgDSEEDCILIAVBEGohBSAGQQJrIQYgAS0AASAIdCAKaiEKIAFBAmohAQsCQCAHLQAMQQRxRQ0AIAogBy8BHEYNACAHQdH+ADYCBCAMQdcMNgIYIAcoAgQhCAwgC0EAIQpBACEFCyAHKAIkIgQEQCAEQQE2AjAgBCALQQl2QQFxNgIsCwJAIActAAxBBHFFDQAgC0UNACAHIB5B5IABKAIAEQEAIgQ2AhwgDCAENgIwCyAHQb/+ADYCBCAHKAIEIQgMHgtBACEGDA4LAkAgC0ECcUUNACAKQZ+WAkcNACAHKAIoRQRAIAdBDzYCKAtBACEKIAdBADYCHCAUQZ+WAjsADCAHIBRBDGoiBAR/QQAgBEECQdSAASgCABEAAAVBAAs2AhwgB0G1/gA2AgRBACEFIAcoAgQhCAwdCyAHKAIkIgQEQCAEQX82AjALAkAgC0EBcQRAIApBCHRBgP4DcSAKQQh2akEfcEUNAQsgB0HR/gA2AgQgDEH2CzYCGCAHKAIEIQgMHQsgCkEPcUEIRwRAIAdB0f4ANgIEIAxBgg82AhggBygCBCEIDB0LIApBBHYiBEEPcSIJQQhqIQsgCUEHTUEAIAcoAigiCAR/IAgFIAcgCzYCKCALCyALTxtFBEAgBUEEayEFIAdB0f4ANgIEIAxB+gw2AhggBCEKIAcoAgQhCAwdCyAHQQE2AhxBACEFIAdBADYCFCAHQYACIAl0NgIYIAxBATYCMCAHQb3+AEG//gAgCkGAwABxGzYCBEEAIQogBygCBCEIDBwLIAcgCkEIdEGAgPwHcSAKQRh0ciAKQQh2QYD+A3EgCkEYdnJyIgQ2AhwgDCAENgIwIAdBvv4ANgIEQQAhCkEAIQULIAcoAhBFBEAgDCAPNgIQIAwgEDYCDCAMIAY2AgQgDCABNgIAIAcgBTYCiAEgByAKNgKEAUECIRcMIAsgB0EBNgIcIAxBATYCMCAHQb/+ADYCBAsCfwJAIAcoAghFBEAgBUEDSQ0BIAUMAgsgB0HO/gA2AgQgCiAFQQdxdiEKIAVBeHEhBSAHKAIEIQgMGwsgBkUNGSAGQQFrIQYgAS0AACAFdCAKaiEKIAFBAWohASAFQQhqCyEEIAcgCkEBcTYCCAJAAkACQAJAAkAgCkEBdkEDcUEBaw4DAQIDAAsgB0HB/gA2AgQMAwsgB0Gw2wA2ApgBIAdCiYCAgNAANwOgASAHQbDrADYCnAEgB0HH/gA2AgQMAgsgB0HE/gA2AgQMAQsgB0HR/gA2AgQgDEHXDTYCGAsgBEEDayEFIApBA3YhCiAHKAIEIQgMGQsgByAKQR9xIghBgQJqNgKsASAHIApBBXZBH3EiBEEBajYCsAEgByAKQQp2QQ9xQQRqIgs2AqgBIAVBDmshBSAKQQ52IQogCEEdTUEAIARBHkkbRQRAIAdB0f4ANgIEIAxB6gk2AhggBygCBCEIDBkLIAdBxf4ANgIEQQAhCCAHQQA2ArQBCyAIIQQDQCAFQQJNBEAgBkUNGCAGQQFrIQYgAS0AACAFdCAKaiEKIAVBCGohBSABQQFqIQELIAcgBEEBaiIINgK0ASAHIARBAXRBsOwAai8BAEEBdGogCkEHcTsBvAEgBUEDayEFIApBA3YhCiALIAgiBEsNAAsLIAhBEk0EQEESIAhrIQ1BAyAIa0EDcSIEBEADQCAHIAhBAXRBsOwAai8BAEEBdGpBADsBvAEgCEEBaiEIIARBAWsiBA0ACwsgDUEDTwRAA0AgB0G8AWoiDSAIQQF0IgRBsOwAai8BAEEBdGpBADsBACANIARBsuwAai8BAEEBdGpBADsBACANIARBtOwAai8BAEEBdGpBADsBACANIARBtuwAai8BAEEBdGpBADsBACAIQQRqIghBE0cNAAsLIAdBEzYCtAELIAdBBzYCoAEgByAYNgKYASAHIBg2ArgBQQAhCEEAIBxBEyAaIB0gGRBOIg0EQCAHQdH+ADYCBCAMQfQINgIYIAcoAgQhCAwXCyAHQcb+ADYCBCAHQQA2ArQBQQAhDQsgBygCrAEiFSAHKAKwAWoiESAISwRAQX8gBygCoAF0QX9zIRIgBygCmAEhGwNAIAYhCSABIQsCQCAFIgMgGyAKIBJxIhNBAnRqLQABIg5PBEAgBSEEDAELA0AgCUUNDSALLQAAIAN0IQ4gC0EBaiELIAlBAWshCSADQQhqIgQhAyAEIBsgCiAOaiIKIBJxIhNBAnRqLQABIg5JDQALIAshASAJIQYLAkAgGyATQQJ0ai8BAiIFQQ9NBEAgByAIQQFqIgk2ArQBIAcgCEEBdGogBTsBvAEgBCAOayEFIAogDnYhCiAJIQgMAQsCfwJ/AkACQAJAIAVBEGsOAgABAgsgDkECaiIFIARLBEADQCAGRQ0bIAZBAWshBiABLQAAIAR0IApqIQogAUEBaiEBIARBCGoiBCAFSQ0ACwsgBCAOayEFIAogDnYhBCAIRQRAIAdB0f4ANgIEIAxBvAk2AhggBCEKIAcoAgQhCAwdCyAFQQJrIQUgBEECdiEKIARBA3FBA2ohCSAIQQF0IAdqLwG6AQwDCyAOQQNqIgUgBEsEQANAIAZFDRogBkEBayEGIAEtAAAgBHQgCmohCiABQQFqIQEgBEEIaiIEIAVJDQALCyAEIA5rQQNrIQUgCiAOdiIEQQN2IQogBEEHcUEDagwBCyAOQQdqIgUgBEsEQANAIAZFDRkgBkEBayEGIAEtAAAgBHQgCmohCiABQQFqIQEgBEEIaiIEIAVJDQALCyAEIA5rQQdrIQUgCiAOdiIEQQd2IQogBEH/AHFBC2oLIQlBAAshAyAIIAlqIBFLDRMgCUEBayEEIAlBA3EiCwRAA0AgByAIQQF0aiADOwG8ASAIQQFqIQggCUEBayEJIAtBAWsiCw0ACwsgBEEDTwRAA0AgByAIQQF0aiIEIAM7Ab4BIAQgAzsBvAEgBCADOwHAASAEIAM7AcIBIAhBBGohCCAJQQRrIgkNAAsLIAcgCDYCtAELIAggEUkNAAsLIAcvAbwFRQRAIAdB0f4ANgIEIAxB0Qs2AhggBygCBCEIDBYLIAdBCjYCoAEgByAYNgKYASAHIBg2ArgBQQEgHCAVIBogHSAZEE4iDQRAIAdB0f4ANgIEIAxB2Ag2AhggBygCBCEIDBYLIAdBCTYCpAEgByAHKAK4ATYCnAFBAiAHIAcoAqwBQQF0akG8AWogBygCsAEgGiAfIBkQTiINBEAgB0HR/gA2AgQgDEGmCTYCGCAHKAIEIQgMFgsgB0HH/gA2AgRBACENCyAHQcj+ADYCBAsCQCAGQQ9JDQAgD0GEAkkNACAMIA82AhAgDCAQNgIMIAwgBjYCBCAMIAE2AgAgByAFNgKIASAHIAo2AoQBIAwgFkHogAEoAgARBwAgBygCiAEhBSAHKAKEASEKIAwoAgQhBiAMKAIAIQEgDCgCECEPIAwoAgwhECAHKAIEQb/+AEcNByAHQX82ApBHIAcoAgQhCAwUCyAHQQA2ApBHIAUhCSAGIQggASEEAkAgBygCmAEiEiAKQX8gBygCoAF0QX9zIhVxIg5BAnRqLQABIgsgBU0EQCAFIQMMAQsDQCAIRQ0PIAQtAAAgCXQhCyAEQQFqIQQgCEEBayEIIAlBCGoiAyEJIAMgEiAKIAtqIgogFXEiDkECdGotAAEiC0kNAAsLIBIgDkECdGoiAS8BAiETAkBBACABLQAAIhEgEUHwAXEbRQRAIAshBgwBCyAIIQYgBCEBAkAgAyIFIAsgEiAKQX8gCyARanRBf3MiFXEgC3YgE2oiEUECdGotAAEiDmpPBEAgAyEJDAELA0AgBkUNDyABLQAAIAV0IQ4gAUEBaiEBIAZBAWshBiAFQQhqIgkhBSALIBIgCiAOaiIKIBVxIAt2IBNqIhFBAnRqLQABIg5qIAlLDQALIAEhBCAGIQgLIBIgEUECdGoiAS0AACERIAEvAQIhEyAHIAs2ApBHIAsgDmohBiAJIAtrIQMgCiALdiEKIA4hCwsgByAGNgKQRyAHIBNB//8DcTYCjAEgAyALayEFIAogC3YhCiARRQRAIAdBzf4ANgIEDBALIBFBIHEEQCAHQb/+ADYCBCAHQX82ApBHDBALIBFBwABxBEAgB0HR/gA2AgQgDEHQDjYCGAwQCyAHQcn+ADYCBCAHIBFBD3EiAzYClAELAkAgA0UEQCAHKAKMASELIAQhASAIIQYMAQsgBSEJIAghBiAEIQsCQCADIAVNBEAgBCEBDAELA0AgBkUNDSAGQQFrIQYgCy0AACAJdCAKaiEKIAtBAWoiASELIAlBCGoiCSADSQ0ACwsgByAHKAKQRyADajYCkEcgByAHKAKMASAKQX8gA3RBf3NxaiILNgKMASAJIANrIQUgCiADdiEKCyAHQcr+ADYCBCAHIAs2ApRHCyAFIQkgBiEIIAEhBAJAIAcoApwBIhIgCkF/IAcoAqQBdEF/cyIVcSIOQQJ0ai0AASIDIAVNBEAgBSELDAELA0AgCEUNCiAELQAAIAl0IQMgBEEBaiEEIAhBAWshCCAJQQhqIgshCSALIBIgAyAKaiIKIBVxIg5BAnRqLQABIgNJDQALCyASIA5BAnRqIgEvAQIhEwJAIAEtAAAiEUHwAXEEQCAHKAKQRyEGIAMhCQwBCyAIIQYgBCEBAkAgCyIFIAMgEiAKQX8gAyARanRBf3MiFXEgA3YgE2oiEUECdGotAAEiCWpPBEAgCyEODAELA0AgBkUNCiABLQAAIAV0IQkgAUEBaiEBIAZBAWshBiAFQQhqIg4hBSADIBIgCSAKaiIKIBVxIAN2IBNqIhFBAnRqLQABIglqIA5LDQALIAEhBCAGIQgLIBIgEUECdGoiAS0AACERIAEvAQIhEyAHIAcoApBHIANqIgY2ApBHIA4gA2shCyAKIAN2IQoLIAcgBiAJajYCkEcgCyAJayEFIAogCXYhCiARQcAAcQRAIAdB0f4ANgIEIAxB7A42AhggBCEBIAghBiAHKAIEIQgMEgsgB0HL/gA2AgQgByARQQ9xIgM2ApQBIAcgE0H//wNxNgKQAQsCQCADRQRAIAQhASAIIQYMAQsgBSEJIAghBiAEIQsCQCADIAVNBEAgBCEBDAELA0AgBkUNCCAGQQFrIQYgCy0AACAJdCAKaiEKIAtBAWoiASELIAlBCGoiCSADSQ0ACwsgByAHKAKQRyADajYCkEcgByAHKAKQASAKQX8gA3RBf3NxajYCkAEgCSADayEFIAogA3YhCgsgB0HM/gA2AgQLIA9FDQACfyAHKAKQASIIIBYgD2siBEsEQAJAIAggBGsiCCAHKAIwTQ0AIAcoAoxHRQ0AIAdB0f4ANgIEIAxBuQw2AhggBygCBCEIDBILAn8CQAJ/IAcoAjQiBCAISQRAIAcoAjggBygCLCAIIARrIghragwBCyAHKAI4IAQgCGtqCyILIBAgDyAQaiAQa0EBaqwiISAPIAcoAowBIgQgCCAEIAhJGyIEIAQgD0sbIgitIiIgISAiVBsiIqciCWoiBEkgCyAQT3ENACALIBBNIAkgC2ogEEtxDQAgECALIAkQBxogBAwBCyAQIAsgCyAQayIEIARBH3UiBGogBHMiCRAHIAlqIQQgIiAJrSIkfSIjUEUEQCAJIAtqIQkDQAJAICMgJCAjICRUGyIiQiBUBEAgIiEhDAELICIiIUIgfSImQgWIQgF8QgODIiVQRQRAA0AgBCAJKQAANwAAIAQgCSkAGDcAGCAEIAkpABA3ABAgBCAJKQAINwAIICFCIH0hISAJQSBqIQkgBEEgaiEEICVCAX0iJUIAUg0ACwsgJkLgAFQNAANAIAQgCSkAADcAACAEIAkpABg3ABggBCAJKQAQNwAQIAQgCSkACDcACCAEIAkpADg3ADggBCAJKQAwNwAwIAQgCSkAKDcAKCAEIAkpACA3ACAgBCAJKQBYNwBYIAQgCSkAUDcAUCAEIAkpAEg3AEggBCAJKQBANwBAIAQgCSkAYDcAYCAEIAkpAGg3AGggBCAJKQBwNwBwIAQgCSkAeDcAeCAJQYABaiEJIARBgAFqIQQgIUKAAX0iIUIfVg0ACwsgIUIQWgRAIAQgCSkAADcAACAEIAkpAAg3AAggIUIQfSEhIAlBEGohCSAEQRBqIQQLICFCCFoEQCAEIAkpAAA3AAAgIUIIfSEhIAlBCGohCSAEQQhqIQQLICFCBFoEQCAEIAkoAAA2AAAgIUIEfSEhIAlBBGohCSAEQQRqIQQLICFCAloEQCAEIAkvAAA7AAAgIUICfSEhIAlBAmohCSAEQQJqIQQLICMgIn0hIyAhUEUEQCAEIAktAAA6AAAgCUEBaiEJIARBAWohBAsgI0IAUg0ACwsgBAsMAQsgECAIIA8gBygCjAEiBCAEIA9LGyIIIA9ByIABKAIAEQQACyEQIAcgBygCjAEgCGsiBDYCjAEgDyAIayEPIAQNAiAHQcj+ADYCBCAHKAIEIQgMDwsgDSEJCyAJIQQMDgsgBygCBCEIDAwLIAEgBmohASAFIAZBA3RqIQUMCgsgBCAIaiEBIAUgCEEDdGohBQwJCyAEIAhqIQEgCyAIQQN0aiEFDAgLIAEgBmohASAFIAZBA3RqIQUMBwsgBCAIaiEBIAUgCEEDdGohBQwGCyAEIAhqIQEgAyAIQQN0aiEFDAULIAEgBmohASAFIAZBA3RqIQUMBAsgB0HR/gA2AgQgDEG8CTYCGCAHKAIEIQgMBAsgBCEBIAghBiAHKAIEIQgMAwtBACEGIAQhBSANIQQMAwsCQAJAIAhFBEAgCiEJDAELIAcoAhRFBEAgCiEJDAELAkAgBUEfSw0AIAZFDQMgBUEIaiEJIAFBAWohBCAGQQFrIQsgAS0AACAFdCAKaiEKIAVBGE8EQCAEIQEgCyEGIAkhBQwBCyALRQRAIAQhAUEAIQYgCSEFIA0hBAwGCyAFQRBqIQsgAUECaiEEIAZBAmshAyABLQABIAl0IApqIQogBUEPSwRAIAQhASADIQYgCyEFDAELIANFBEAgBCEBQQAhBiALIQUgDSEEDAYLIAVBGGohCSABQQNqIQQgBkEDayEDIAEtAAIgC3QgCmohCiAFQQdLBEAgBCEBIAMhBiAJIQUMAQsgA0UEQCAEIQFBACEGIAkhBSANIQQMBgsgBUEgaiEFIAZBBGshBiABLQADIAl0IApqIQogAUEEaiEBC0EAIQkgCEEEcQRAIAogBygCIEcNAgtBACEFCyAHQdD+ADYCBEEBIQQgCSEKDAMLIAdB0f4ANgIEIAxBjQw2AhggBygCBCEIDAELC0EAIQYgDSEECyAMIA82AhAgDCAQNgIMIAwgBjYCBCAMIAE2AgAgByAFNgKIASAHIAo2AoQBAkAgBygCLA0AIA8gFkYNAiAHKAIEIgFB0P4ASw0CIAFBzv4ASQ0ACwJ/IBYgD2shCiAHKAIMQQRxIQkCQAJAAkAgDCgCHCIDKAI4Ig1FBEBBASEIIAMgAygCACIBKAIgIAEoAiggAygCmEdBASADKAIodGpBARAoIg02AjggDUUNAQsgAygCLCIGRQRAIANCADcDMCADQQEgAygCKHQiBjYCLAsgBiAKTQRAAkAgCQRAAkAgBiAKTw0AIAogBmshBSAQIAprIQEgDCgCHCIGKAIUBEAgBkFAayABIAVBAEHYgAEoAgARCAAMAQsgBiAGKAIcIAEgBUHAgAEoAgARAAAiATYCHCAMIAE2AjALIAMoAiwiDUUNASAQIA1rIQUgAygCOCEBIAwoAhwiBigCFARAIAZBQGsgASAFIA1B3IABKAIAEQgADAILIAYgBigCHCABIAUgDUHEgAEoAgARBAAiATYCHCAMIAE2AjAMAQsgDSAQIAZrIAYQBxoLIANBADYCNCADIAMoAiw2AjBBAAwECyAKIAYgAygCNCIFayIBIAEgCksbIQsgECAKayEGIAUgDWohBQJAIAkEQAJAIAtFDQAgDCgCHCIBKAIUBEAgAUFAayAFIAYgC0HcgAEoAgARCAAMAQsgASABKAIcIAUgBiALQcSAASgCABEEACIBNgIcIAwgATYCMAsgCiALayIFRQ0BIBAgBWshBiADKAI4IQEgDCgCHCINKAIUBEAgDUFAayABIAYgBUHcgAEoAgARCAAMBQsgDSANKAIcIAEgBiAFQcSAASgCABEEACIBNgIcIAwgATYCMAwECyAFIAYgCxAHGiAKIAtrIgUNAgtBACEIIANBACADKAI0IAtqIgUgBSADKAIsIgFGGzYCNCABIAMoAjAiAU0NACADIAEgC2o2AjALIAgMAgsgAygCOCAQIAVrIAUQBxoLIAMgBTYCNCADIAMoAiw2AjBBAAtFBEAgDCgCECEPIAwoAgQhFyAHKAKIAQwDCyAHQdL+ADYCBAtBfCEXDAILIAYhFyAFCyEFIAwgICAXayIBIAwoAghqNgIIIAwgFiAPayIGIAwoAhRqNgIUIAcgBygCICAGajYCICAMIAcoAghBAEdBBnQgBWogBygCBCIFQb/+AEZBB3RqQYACIAVBwv4ARkEIdCAFQcf+AEYbajYCLCAEIARBeyAEGyABIAZyGyEXCyAUQRBqJAAgFwshASACIAIpAwAgADUCIH03AwACQAJAAkACQCABQQVqDgcBAgICAgMAAgtBAQ8LIAAoAhQNAEEDDwsgACgCACIABEAgACABNgIEIABBDTYCAAtBAiEBCyABCwkAIABBAToADAtEAAJAIAJC/////w9YBEAgACgCFEUNAQsgACgCACIABEAgAEEANgIEIABBEjYCAAtBAA8LIAAgATYCECAAIAI+AhRBAQu5AQEEfyAAQRBqIQECfyAALQAEBEAgARCEAQwBC0F+IQMCQCABRQ0AIAEoAiBFDQAgASgCJCIERQ0AIAEoAhwiAkUNACACKAIAIAFHDQAgAigCBEG0/gBrQR9LDQAgAigCOCIDBEAgBCABKAIoIAMQHiABKAIkIQQgASgCHCECCyAEIAEoAiggAhAeQQAhAyABQQA2AhwLIAMLIgEEQCAAKAIAIgAEQCAAIAE2AgQgAEENNgIACwsgAUUL0gwBBn8gAEIANwIQIABCADcCHCAAQRBqIQICfyAALQAEBEAgACgCCCEBQesMLQAAQTFGBH8Cf0F+IQMCQCACRQ0AIAJBADYCGCACKAIgIgRFBEAgAkEANgIoIAJBJzYCIEEnIQQLIAIoAiRFBEAgAkEoNgIkC0EGIAEgAUF/RhsiBUEASA0AIAVBCUoNAEF8IQMgBCACKAIoQQFB0C4QKCIBRQ0AIAIgATYCHCABIAI2AgAgAUEPNgI0IAFCgICAgKAFNwIcIAFBADYCFCABQYCAAjYCMCABQf//ATYCOCABIAIoAiAgAigCKEGAgAJBAhAoNgJIIAEgAigCICACKAIoIAEoAjBBAhAoIgM2AkwgA0EAIAEoAjBBAXQQGSACKAIgIAIoAihBgIAEQQIQKCEDIAFBgIACNgLoLSABQQA2AkAgASADNgJQIAEgAigCICACKAIoQYCAAkEEECgiAzYCBCABIAEoAugtIgRBAnQ2AgwCQAJAIAEoAkhFDQAgASgCTEUNACABKAJQRQ0AIAMNAQsgAUGaBTYCICACQejAACgCADYCGCACEIQBGkF8DAILIAFBADYCjAEgASAFNgKIASABQgA3AyggASADIARqNgLsLSABIARBA2xBA2s2AvQtQX4hAwJAIAJFDQAgAigCIEUNACACKAIkRQ0AIAIoAhwiAUUNACABKAIAIAJHDQACQAJAIAEoAiAiBEE5aw45AQICAgICAgICAgICAQICAgECAgICAgICAgICAgICAgICAgECAgICAgICAgICAgECAgICAgICAgIBAAsgBEGaBUYNACAEQSpHDQELIAJBAjYCLCACQQA2AgggAkIANwIUIAFBADYCECABIAEoAgQ2AgggASgCFCIDQX9MBEAgAUEAIANrIgM2AhQLIAFBOUEqIANBAkYbNgIgIAIgA0ECRgR/IAFBoAFqQeSAASgCABEBAAVBAQs2AjAgAUF+NgIkIAFBADYCoC4gAUIANwOYLiABQYgXakGg0wA2AgAgASABQcwVajYCgBcgAUH8FmpBjNMANgIAIAEgAUHYE2o2AvQWIAFB8BZqQfjSADYCACABIAFB5AFqNgLoFiABEIgBQQAhAwsgAw0AIAIoAhwiAiACKAIwQQF0NgJEQQAhAyACKAJQQQBBgIAIEBkgAiACKAKIASIEQQxsIgFBtNgAai8BADYClAEgAiABQbDYAGovAQA2ApABIAIgAUGy2ABqLwEANgJ4IAIgAUG22ABqLwEANgJ0QfiAASgCACEFQeyAASgCACEGQYCBASgCACEBIAJCADcCbCACQgA3AmQgAkEANgI8IAJBADYChC4gAkIANwJUIAJBKSABIARBCUYiARs2AnwgAkEqIAYgARs2AoABIAJBKyAFIAEbNgKEAQsgAwsFQXoLDAELAn9BekHrDC0AAEExRw0AGkF+IAJFDQAaIAJBADYCGCACKAIgIgNFBEAgAkEANgIoIAJBJzYCIEEnIQMLIAIoAiRFBEAgAkEoNgIkC0F8IAMgAigCKEEBQaDHABAoIgRFDQAaIAIgBDYCHCAEQQA2AjggBCACNgIAIARBtP4ANgIEIARBzIABKAIAEQkANgKYR0F+IQMCQCACRQ0AIAIoAiBFDQAgAigCJCIFRQ0AIAIoAhwiAUUNACABKAIAIAJHDQAgASgCBEG0/gBrQR9LDQACQAJAIAEoAjgiBgRAIAEoAihBD0cNAQsgAUEPNgIoIAFBADYCDAwBCyAFIAIoAiggBhAeIAFBADYCOCACKAIgIQUgAUEPNgIoIAFBADYCDCAFRQ0BCyACKAIkRQ0AIAIoAhwiAUUNACABKAIAIAJHDQAgASgCBEG0/gBrQR9LDQBBACEDIAFBADYCNCABQgA3AiwgAUEANgIgIAJBADYCCCACQgA3AhQgASgCDCIFBEAgAiAFQQFxNgIwCyABQrT+ADcCBCABQgA3AoQBIAFBADYCJCABQoCAgoAQNwMYIAFCgICAgHA3AxAgAUKBgICAcDcCjEcgASABQfwKaiIFNgK4ASABIAU2ApwBIAEgBTYCmAELQQAgA0UNABogAigCJCACKAIoIAQQHiACQQA2AhwgAwsLIgIEQCAAKAIAIgAEQCAAIAI2AgQgAEENNgIACwsgAkULKQEBfyAALQAERQRAQQAPC0ECIQEgACgCCCIAQQNOBH8gAEEHSgVBAgsLBgAgABAGC2MAQcgAEAkiAEUEQEGEhAEoAgAhASACBEAgAiABNgIEIAJBATYCAAsgAA8LIABBADoADCAAQQE6AAQgACACNgIAIABBADYCOCAAQgA3AzAgACABQQkgAUEBa0EJSRs2AgggAAukCgIIfwF+QfCAAUH0gAEgACgCdEGBCEkbIQYCQANAAkACfwJAIAAoAjxBhQJLDQAgABAvAkAgACgCPCICQYUCSw0AIAENAEEADwsgAkUNAiACQQRPDQBBAAwBCyAAIAAoAmggACgChAERAgALIQMgACAAKAJsOwFgQQIhAgJAIAA1AmggA619IgpCAVMNACAKIAAoAjBBhgJrrVUNACAAKAJwIAAoAnhPDQAgA0UNACAAIAMgBigCABECACICQQVLDQBBAiACIAAoAowBQQFGGyECCwJAIAAoAnAiA0EDSQ0AIAIgA0sNACAAIAAoAvAtIgJBAWo2AvAtIAAoAjwhBCACIAAoAuwtaiAAKAJoIgcgAC8BYEF/c2oiAjoAACAAIAAoAvAtIgVBAWo2AvAtIAUgACgC7C1qIAJBCHY6AAAgACAAKALwLSIFQQFqNgLwLSAFIAAoAuwtaiADQQNrOgAAIAAgACgCgC5BAWo2AoAuIANB/c4Aai0AAEECdCAAakHoCWoiAyADLwEAQQFqOwEAIAAgAkEBayICIAJBB3ZBgAJqIAJBgAJJG0GAywBqLQAAQQJ0akHYE2oiAiACLwEAQQFqOwEAIAAgACgCcCIFQQFrIgM2AnAgACAAKAI8IANrNgI8IAAoAvQtIQggACgC8C0hCSAEIAdqQQNrIgQgACgCaCICSwRAIAAgAkEBaiAEIAJrIgIgBUECayIEIAIgBEkbIAAoAoABEQUAIAAoAmghAgsgAEEANgJkIABBADYCcCAAIAIgA2oiBDYCaCAIIAlHDQJBACECIAAgACgCWCIDQQBOBH8gACgCSCADagVBAAsgBCADa0EAEA8gACAAKAJoNgJYIAAoAgAQCiAAKAIAKAIQDQIMAwsgACgCZARAIAAoAmggACgCSGpBAWstAAAhAyAAIAAoAvAtIgRBAWo2AvAtIAQgACgC7C1qQQA6AAAgACAAKALwLSIEQQFqNgLwLSAEIAAoAuwtakEAOgAAIAAgACgC8C0iBEEBajYC8C0gBCAAKALsLWogAzoAACAAIANBAnRqIgMgAy8B5AFBAWo7AeQBIAAoAvAtIAAoAvQtRgRAIAAgACgCWCIDQQBOBH8gACgCSCADagVBAAsgACgCaCADa0EAEA8gACAAKAJoNgJYIAAoAgAQCgsgACACNgJwIAAgACgCaEEBajYCaCAAIAAoAjxBAWs2AjwgACgCACgCEA0CQQAPBSAAQQE2AmQgACACNgJwIAAgACgCaEEBajYCaCAAIAAoAjxBAWs2AjwMAgsACwsgACgCZARAIAAoAmggACgCSGpBAWstAAAhAiAAIAAoAvAtIgNBAWo2AvAtIAMgACgC7C1qQQA6AAAgACAAKALwLSIDQQFqNgLwLSADIAAoAuwtakEAOgAAIAAgACgC8C0iA0EBajYC8C0gAyAAKALsLWogAjoAACAAIAJBAnRqIgIgAi8B5AFBAWo7AeQBIAAoAvAtIAAoAvQtRhogAEEANgJkCyAAIAAoAmgiA0ECIANBAkkbNgKELiABQQRGBEAgACAAKAJYIgFBAE4EfyAAKAJIIAFqBUEACyADIAFrQQEQDyAAIAAoAmg2AlggACgCABAKQQNBAiAAKAIAKAIQGw8LIAAoAvAtBEBBACECIAAgACgCWCIBQQBOBH8gACgCSCABagVBAAsgAyABa0EAEA8gACAAKAJoNgJYIAAoAgAQCiAAKAIAKAIQRQ0BC0EBIQILIAIL2BACEH8BfiAAKAKIAUEFSCEOA0ACQAJ/AkACQAJAAn8CQAJAIAAoAjxBhQJNBEAgABAvIAAoAjwiA0GFAksNASABDQFBAA8LIA4NASAIIQMgBSEHIAohDSAGQf//A3FFDQEMAwsgA0UNA0EAIANBBEkNARoLIAAgACgCaEH4gAEoAgARAgALIQZBASECQQAhDSAAKAJoIgOtIAatfSISQgFTDQIgEiAAKAIwQYYCa61VDQIgBkUNAiAAIAZB8IABKAIAEQIAIgZBASAGQfz/A3EbQQEgACgCbCINQf//A3EgA0H//wNxSRshBiADIQcLAkAgACgCPCIEIAZB//8DcSICQQRqTQ0AIAZB//8DcUEDTQRAQQEgBkEBa0H//wNxIglFDQQaIANB//8DcSIEIAdBAWpB//8DcSIDSw0BIAAgAyAJIAQgA2tBAWogAyAJaiAESxtB7IABKAIAEQUADAELAkAgACgCeEEEdCACSQ0AIARBBEkNACAGQQFrQf//A3EiDCAHQQFqQf//A3EiBGohCSAEIANB//8DcSIDTwRAQeyAASgCACELIAMgCUkEQCAAIAQgDCALEQUADAMLIAAgBCADIARrQQFqIAsRBQAMAgsgAyAJTw0BIAAgAyAJIANrQeyAASgCABEFAAwBCyAGIAdqQf//A3EiA0UNACAAIANBAWtB+IABKAIAEQIAGgsgBgwCCyAAIAAoAmgiBUECIAVBAkkbNgKELiABQQRGBEBBACEDIAAgACgCWCIBQQBOBH8gACgCSCABagVBAAsgBSABa0EBEA8gACAAKAJoNgJYIAAoAgAQCkEDQQIgACgCACgCEBsPCyAAKALwLQRAQQAhAkEAIQMgACAAKAJYIgFBAE4EfyAAKAJIIAFqBUEACyAFIAFrQQAQDyAAIAAoAmg2AlggACgCABAKIAAoAgAoAhBFDQMLQQEhAgwCCyADIQdBAQshBEEAIQYCQCAODQAgACgCPEGHAkkNACACIAdB//8DcSIQaiIDIAAoAkRBhgJrTw0AIAAgAzYCaEEAIQogACADQfiAASgCABECACEFAn8CQCAAKAJoIgitIAWtfSISQgFTDQAgEiAAKAIwQYYCa61VDQAgBUUNACAAIAVB8IABKAIAEQIAIQYgAC8BbCIKIAhB//8DcSIFTw0AIAZB//8DcSIDQQRJDQAgCCAEQf//A3FBAkkNARogCCACIApBAWpLDQEaIAggAiAFQQFqSw0BGiAIIAAoAkgiCSACa0EBaiICIApqLQAAIAIgBWotAABHDQEaIAggCUEBayICIApqIgwtAAAgAiAFaiIPLQAARw0BGiAIIAUgCCAAKAIwQYYCayICa0H//wNxQQAgAiAFSRsiEU0NARogCCADQf8BSw0BGiAGIQUgCCECIAQhAyAIIAoiCUECSQ0BGgNAAkAgA0EBayEDIAVBAWohCyAJQQFrIQkgAkEBayECIAxBAWsiDC0AACAPQQFrIg8tAABHDQAgA0H//wNxRQ0AIBEgAkH//wNxTw0AIAVB//8DcUH+AUsNACALIQUgCUH//wNxQQFLDQELCyAIIANB//8DcUEBSw0BGiAIIAtB//8DcUECRg0BGiAIQQFqIQggAyEEIAshBiAJIQogAgwBC0EBIQYgCAshBSAAIBA2AmgLAn8gBEH//wNxIgNBA00EQCAEQf//A3EiA0UNAyAAKAJIIAdB//8DcWotAAAhBCAAIAAoAvAtIgJBAWo2AvAtIAIgACgC7C1qQQA6AAAgACAAKALwLSICQQFqNgLwLSACIAAoAuwtakEAOgAAIAAgACgC8C0iAkEBajYC8C0gAiAAKALsLWogBDoAACAAIARBAnRqIgRB5AFqIAQvAeQBQQFqOwEAIAAgACgCPEEBazYCPCAAKALwLSICIAAoAvQtRiIEIANBAUYNARogACgCSCAHQQFqQf//A3FqLQAAIQkgACACQQFqNgLwLSAAKALsLSACakEAOgAAIAAgACgC8C0iAkEBajYC8C0gAiAAKALsLWpBADoAACAAIAAoAvAtIgJBAWo2AvAtIAIgACgC7C1qIAk6AAAgACAJQQJ0aiICQeQBaiACLwHkAUEBajsBACAAIAAoAjxBAWs2AjwgBCAAKALwLSICIAAoAvQtRmoiBCADQQJGDQEaIAAoAkggB0ECakH//wNxai0AACEHIAAgAkEBajYC8C0gACgC7C0gAmpBADoAACAAIAAoAvAtIgJBAWo2AvAtIAIgACgC7C1qQQA6AAAgACAAKALwLSICQQFqNgLwLSACIAAoAuwtaiAHOgAAIAAgB0ECdGoiB0HkAWogBy8B5AFBAWo7AQAgACAAKAI8QQFrNgI8IAQgACgC8C0gACgC9C1GagwBCyAAIAAoAvAtIgJBAWo2AvAtIAIgACgC7C1qIAdB//8DcSANQf//A3FrIgc6AAAgACAAKALwLSICQQFqNgLwLSACIAAoAuwtaiAHQQh2OgAAIAAgACgC8C0iAkEBajYC8C0gAiAAKALsLWogBEEDazoAACAAIAAoAoAuQQFqNgKALiADQf3OAGotAABBAnQgAGpB6AlqIgQgBC8BAEEBajsBACAAIAdBAWsiBCAEQQd2QYACaiAEQYACSRtBgMsAai0AAEECdGpB2BNqIgQgBC8BAEEBajsBACAAIAAoAjwgA2s2AjwgACgC8C0gACgC9C1GCyEEIAAgACgCaCADaiIHNgJoIARFDQFBACECQQAhBCAAIAAoAlgiA0EATgR/IAAoAkggA2oFQQALIAcgA2tBABAPIAAgACgCaDYCWCAAKAIAEAogACgCACgCEA0BCwsgAgu0BwIEfwF+AkADQAJAAkACQAJAIAAoAjxBhQJNBEAgABAvAkAgACgCPCICQYUCSw0AIAENAEEADwsgAkUNBCACQQRJDQELIAAgACgCaEH4gAEoAgARAgAhAiAANQJoIAKtfSIGQgFTDQAgBiAAKAIwQYYCa61VDQAgAkUNACAAIAJB8IABKAIAEQIAIgJBBEkNACAAIAAoAvAtIgNBAWo2AvAtIAMgACgC7C1qIAAoAmggACgCbGsiAzoAACAAIAAoAvAtIgRBAWo2AvAtIAQgACgC7C1qIANBCHY6AAAgACAAKALwLSIEQQFqNgLwLSAEIAAoAuwtaiACQQNrOgAAIAAgACgCgC5BAWo2AoAuIAJB/c4Aai0AAEECdCAAakHoCWoiBCAELwEAQQFqOwEAIAAgA0EBayIDIANBB3ZBgAJqIANBgAJJG0GAywBqLQAAQQJ0akHYE2oiAyADLwEAQQFqOwEAIAAgACgCPCACayIFNgI8IAAoAvQtIQMgACgC8C0hBCAAKAJ4IAJPQQAgBUEDSxsNASAAIAAoAmggAmoiAjYCaCAAIAJBAWtB+IABKAIAEQIAGiADIARHDQQMAgsgACgCSCAAKAJoai0AACECIAAgACgC8C0iA0EBajYC8C0gAyAAKALsLWpBADoAACAAIAAoAvAtIgNBAWo2AvAtIAMgACgC7C1qQQA6AAAgACAAKALwLSIDQQFqNgLwLSADIAAoAuwtaiACOgAAIAAgAkECdGoiAkHkAWogAi8B5AFBAWo7AQAgACAAKAI8QQFrNgI8IAAgACgCaEEBajYCaCAAKALwLSAAKAL0LUcNAwwBCyAAIAAoAmhBAWoiBTYCaCAAIAUgAkEBayICQeyAASgCABEFACAAIAAoAmggAmo2AmggAyAERw0CC0EAIQNBACECIAAgACgCWCIEQQBOBH8gACgCSCAEagVBAAsgACgCaCAEa0EAEA8gACAAKAJoNgJYIAAoAgAQCiAAKAIAKAIQDQEMAgsLIAAgACgCaCIEQQIgBEECSRs2AoQuIAFBBEYEQEEAIQIgACAAKAJYIgFBAE4EfyAAKAJIIAFqBUEACyAEIAFrQQEQDyAAIAAoAmg2AlggACgCABAKQQNBAiAAKAIAKAIQGw8LIAAoAvAtBEBBACEDQQAhAiAAIAAoAlgiAUEATgR/IAAoAkggAWoFQQALIAQgAWtBABAPIAAgACgCaDYCWCAAKAIAEAogACgCACgCEEUNAQtBASEDCyADC80JAgl/An4gAUEERiEGIAAoAiwhAgJAAkACQCABQQRGBEAgAkECRg0CIAIEQCAAQQAQUCAAQQA2AiwgACAAKAJoNgJYIAAoAgAQCiAAKAIAKAIQRQ0ECyAAIAYQTyAAQQI2AiwMAQsgAg0BIAAoAjxFDQEgACAGEE8gAEEBNgIsCyAAIAAoAmg2AlgLQQJBASABQQRGGyEKA0ACQCAAKAIMIAAoAhBBCGpLDQAgACgCABAKIAAoAgAiAigCEA0AQQAhAyABQQRHDQIgAigCBA0CIAAoAqAuDQIgACgCLEVBAXQPCwJAAkAgACgCPEGFAk0EQCAAEC8CQCAAKAI8IgNBhQJLDQAgAQ0AQQAPCyADRQ0CIAAoAiwEfyADBSAAIAYQTyAAIAo2AiwgACAAKAJoNgJYIAAoAjwLQQRJDQELIAAgACgCaEH4gAEoAgARAgAhBCAAKAJoIgKtIAStfSILQgFTDQAgCyAAKAIwQYYCa61VDQAgAiAAKAJIIgJqIgMvAAAgAiAEaiICLwAARw0AIANBAmogAkECakHQgAEoAgARAgBBAmoiA0EESQ0AIAAoAjwiAiADIAIgA0kbIgJBggIgAkGCAkkbIgdB/c4Aai0AACICQQJ0IgRBhMkAajMBACEMIARBhskAai8BACEDIAJBCGtBE00EQCAHQQNrIARBgNEAaigCAGutIAOthiAMhCEMIARBsNYAaigCACADaiEDCyAAKAKgLiEFIAMgC6dBAWsiCCAIQQd2QYACaiAIQYACSRtBgMsAai0AACICQQJ0IglBgsoAai8BAGohBCAJQYDKAGozAQAgA62GIAyEIQsgACkDmC4hDAJAIAUgAkEESQR/IAQFIAggCUGA0gBqKAIAa60gBK2GIAuEIQsgCUGw1wBqKAIAIARqCyICaiIDQT9NBEAgCyAFrYYgDIQhCwwBCyAFQcAARgRAIAAoAgQgACgCEGogDDcAACAAIAAoAhBBCGo2AhAgAiEDDAELIAAoAgQgACgCEGogCyAFrYYgDIQ3AAAgACAAKAIQQQhqNgIQIANBQGohAyALQcAAIAVrrYghCwsgACALNwOYLiAAIAM2AqAuIAAgACgCPCAHazYCPCAAIAAoAmggB2o2AmgMAgsgACgCSCAAKAJoai0AAEECdCICQYDBAGozAQAhCyAAKQOYLiEMAkAgACgCoC4iBCACQYLBAGovAQAiAmoiA0E/TQRAIAsgBK2GIAyEIQsMAQsgBEHAAEYEQCAAKAIEIAAoAhBqIAw3AAAgACAAKAIQQQhqNgIQIAIhAwwBCyAAKAIEIAAoAhBqIAsgBK2GIAyENwAAIAAgACgCEEEIajYCECADQUBqIQMgC0HAACAEa62IIQsLIAAgCzcDmC4gACADNgKgLiAAIAAoAmhBAWo2AmggACAAKAI8QQFrNgI8DAELCyAAIAAoAmgiAkECIAJBAkkbNgKELiAAKAIsIQIgAUEERgRAAkAgAkUNACAAQQEQUCAAQQA2AiwgACAAKAJoNgJYIAAoAgAQCiAAKAIAKAIQDQBBAg8LQQMPCyACBEBBACEDIABBABBQIABBADYCLCAAIAAoAmg2AlggACgCABAKIAAoAgAoAhBFDQELQQEhAwsgAwucAQEFfyACQQFOBEAgAiAAKAJIIAFqIgNqQQJqIQQgA0ECaiECIAAoAlQhAyAAKAJQIQUDQCAAIAItAAAgA0EFdEHg/wFxcyIDNgJUIAUgA0EBdGoiBi8BACIHIAFB//8DcUcEQCAAKAJMIAEgACgCOHFB//8DcUEBdGogBzsBACAGIAE7AQALIAFBAWohASACQQFqIgIgBEkNAAsLC1sBAn8gACAAKAJIIAFqLQACIAAoAlRBBXRB4P8BcXMiAjYCVCABIAAoAlAgAkEBdGoiAy8BACICRwRAIAAoAkwgACgCOCABcUEBdGogAjsBACADIAE7AQALIAILEwAgAUEFdEHg/wFxIAJB/wFxcwsGACABEAYLLwAjAEEQayIAJAAgAEEMaiABIAJsEIwBIQEgACgCDCECIABBEGokAEEAIAIgARsLjAoCAX4CfyMAQfAAayIGJAACQAJAAkACQAJAAkACQAJAIAQODwABBwIEBQYGBgYGBgYGAwYLQn8hBQJAIAAgBkHkAGpCDBARIgNCf1cEQCABBEAgASAAKAIMNgIAIAEgACgCEDYCBAsMAQsCQCADQgxSBEAgAQRAIAFBADYCBCABQRE2AgALDAELIAEoAhQhBEEAIQJCASEFA0AgBkHkAGogAmoiAiACLQAAIARB/f8DcSICQQJyIAJBA3NsQQh2cyICOgAAIAYgAjoAKCABAn8gASgCDEF/cyECQQAgBkEoaiIERQ0AGiACIARBAUHUgAEoAgARAAALQX9zIgI2AgwgASABKAIQIAJB/wFxakGFiKLAAGxBAWoiAjYCECAGIAJBGHY6ACggAQJ/IAEoAhRBf3MhAkEAIAZBKGoiBEUNABogAiAEQQFB1IABKAIAEQAAC0F/cyIENgIUIAVCDFIEQCAFpyECIAVCAXwhBQwBCwtCACEFIAAgBkEoahAhQQBIDQEgBigCUCEAIwBBEGsiAiQAIAIgADYCDCAGAn8gAkEMahCNASIARQRAIAZBITsBJEEADAELAn8gACgCFCIEQdAATgRAIARBCXQMAQsgAEHQADYCFEGAwAILIQQgBiAAKAIMIAQgACgCEEEFdGpqQaDAAWo7ASQgACgCBEEFdCAAKAIIQQt0aiAAKAIAQQF2ags7ASYgAkEQaiQAIAYtAG8iACAGLQBXRg0BIAYtACcgAEYNASABBEAgAUEANgIEIAFBGzYCAAsLQn8hBQsgBkHwAGokACAFDwtCfyEFIAAgAiADEBEiA0J/VwRAIAEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwGCyMAQRBrIgAkAAJAIANQDQAgASgCFCEEIAJFBEBCASEFA0AgACACIAdqLQAAIARB/f8DcSIEQQJyIARBA3NsQQh2czoADyABAn8gASgCDEF/cyEEQQAgAEEPaiIHRQ0AGiAEIAdBAUHUgAEoAgARAAALQX9zIgQ2AgwgASABKAIQIARB/wFxakGFiKLAAGxBAWoiBDYCECAAIARBGHY6AA8gAQJ/IAEoAhRBf3MhBEEAIABBD2oiB0UNABogBCAHQQFB1IABKAIAEQAAC0F/cyIENgIUIAMgBVENAiAFpyEHIAVCAXwhBQwACwALQgEhBQNAIAAgAiAHai0AACAEQf3/A3EiBEECciAEQQNzbEEIdnMiBDoADyACIAdqIAQ6AAAgAQJ/IAEoAgxBf3MhBEEAIABBD2oiB0UNABogBCAHQQFB1IABKAIAEQAAC0F/cyIENgIMIAEgASgCECAEQf8BcWpBhYiiwABsQQFqIgQ2AhAgACAEQRh2OgAPIAECfyABKAIUQX9zIQRBACAAQQ9qIgdFDQAaIAQgB0EBQdSAASgCABEAAAtBf3MiBDYCFCADIAVRDQEgBachByAFQgF8IQUMAAsACyAAQRBqJAAgAyEFDAULIAJBADsBMiACIAIpAwAiA0KAAYQ3AwAgA0IIg1ANBCACIAIpAyBCDH03AyAMBAsgBkKFgICAcDcDECAGQoOAgIDAADcDCCAGQoGAgIAgNwMAQQAgBhAkIQUMAwsgA0IIWgR+IAIgASgCADYCACACIAEoAgQ2AgRCCAVCfwshBQwCCyABEAYMAQsgAQRAIAFBADYCBCABQRI2AgALQn8hBQsgBkHwAGokACAFC60DAgJ/An4jAEEQayIGJAACQAJAAkAgBEUNACABRQ0AIAJBAUYNAQtBACEDIABBCGoiAARAIABBADYCBCAAQRI2AgALDAELIANBAXEEQEEAIQMgAEEIaiIABEAgAEEANgIEIABBGDYCAAsMAQtBGBAJIgVFBEBBACEDIABBCGoiAARAIABBADYCBCAAQQ42AgALDAELIAVBADYCCCAFQgA3AgAgBUGQ8dmiAzYCFCAFQvis0ZGR8dmiIzcCDAJAIAQQIiICRQ0AIAKtIQhBACEDQYfTru5+IQJCASEHA0AgBiADIARqLQAAOgAPIAUgBkEPaiIDBH8gAiADQQFB1IABKAIAEQAABUEAC0F/cyICNgIMIAUgBSgCECACQf8BcWpBhYiiwABsQQFqIgI2AhAgBiACQRh2OgAPIAUCfyAFKAIUQX9zIQJBACAGQQ9qIgNFDQAaIAIgA0EBQdSAASgCABEAAAtBf3M2AhQgByAIUQ0BIAUoAgxBf3MhAiAHpyEDIAdCAXwhBwwACwALIAAgAUElIAUQQiIDDQAgBRAGQQAhAwsgBkEQaiQAIAMLnRoCBn4FfyMAQdAAayILJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDhQFBhULAwQJDgACCBAKDw0HEQERDBELAkBByAAQCSIBBEAgAUIANwMAIAFCADcDMCABQQA2AiggAUIANwMgIAFCADcDGCABQgA3AxAgAUIANwMIIAFCADcDOCABQQgQCSIDNgIEIAMNASABEAYgAARAIABBADYCBCAAQQ42AgALCyAAQQA2AhQMFAsgA0IANwMAIAAgATYCFCABQUBrQgA3AwAgAUIANwM4DBQLAkACQCACUARAQcgAEAkiA0UNFCADQgA3AwAgA0IANwMwIANBADYCKCADQgA3AyAgA0IANwMYIANCADcDECADQgA3AwggA0IANwM4IANBCBAJIgE2AgQgAQ0BIAMQBiAABEAgAEEANgIEIABBDjYCAAsMFAsgAiAAKAIQIgEpAzBWBEAgAARAIABBADYCBCAAQRI2AgALDBQLIAEoAigEQCAABEAgAEEANgIEIABBHTYCAAsMFAsgASgCBCEDAkAgASkDCCIGQgF9IgdQDQADQAJAIAIgAyAHIAR9QgGIIAR8IgWnQQN0aikDAFQEQCAFQgF9IQcMAQsgBSAGUQRAIAYhBQwDCyADIAVCAXwiBKdBA3RqKQMAIAJWDQILIAQhBSAEIAdUDQALCwJAIAIgAyAFpyIKQQN0aikDAH0iBFBFBEAgASgCACIDIApBBHRqKQMIIQcMAQsgASgCACIDIAVCAX0iBadBBHRqKQMIIgchBAsgAiAHIAR9VARAIAAEQCAAQQA2AgQgAEEcNgIACwwUCyADIAVCAXwiBUEAIAAQiQEiA0UNEyADKAIAIAMoAggiCkEEdGpBCGsgBDcDACADKAIEIApBA3RqIAI3AwAgAyACNwMwIAMgASkDGCIGIAMpAwgiBEIBfSIHIAYgB1QbNwMYIAEgAzYCKCADIAE2AiggASAENwMgIAMgBTcDIAwBCyABQgA3AwALIAAgAzYCFCADIAQ3A0AgAyACNwM4QgAhBAwTCyAAKAIQIgEEQAJAIAEoAigiA0UEQCABKQMYIQIMAQsgA0EANgIoIAEoAihCADcDICABIAEpAxgiAiABKQMgIgUgAiAFVhsiAjcDGAsgASkDCCACVgRAA0AgASgCACACp0EEdGooAgAQBiACQgF8IgIgASkDCFQNAAsLIAEoAgAQBiABKAIEEAYgARAGCyAAKAIUIQEgAEEANgIUIAAgATYCEAwSCyACQghaBH4gASAAKAIANgIAIAEgACgCBDYCBEIIBUJ/CyEEDBELIAAoAhAiAQRAAkAgASgCKCIDRQRAIAEpAxghAgwBCyADQQA2AiggASgCKEIANwMgIAEgASkDGCICIAEpAyAiBSACIAVWGyICNwMYCyABKQMIIAJWBEADQCABKAIAIAKnQQR0aigCABAGIAJCAXwiAiABKQMIVA0ACwsgASgCABAGIAEoAgQQBiABEAYLIAAoAhQiAQRAAkAgASgCKCIDRQRAIAEpAxghAgwBCyADQQA2AiggASgCKEIANwMgIAEgASkDGCICIAEpAyAiBSACIAVWGyICNwMYCyABKQMIIAJWBEADQCABKAIAIAKnQQR0aigCABAGIAJCAXwiAiABKQMIVA0ACwsgASgCABAGIAEoAgQQBiABEAYLIAAQBgwQCyAAKAIQIgBCADcDOCAAQUBrQgA3AwAMDwsgAkJ/VwRAIAAEQCAAQQA2AgQgAEESNgIACwwOCyACIAAoAhAiAykDMCADKQM4IgZ9IgUgAiAFVBsiBVANDiABIAMpA0AiB6ciAEEEdCIBIAMoAgBqIgooAgAgBiADKAIEIABBA3RqKQMAfSICp2ogBSAKKQMIIAJ9IgYgBSAGVBsiBKcQByEKIAcgBCADKAIAIgAgAWopAwggAn1RrXwhAiAFIAZWBEADQCAKIASnaiAAIAKnQQR0IgFqIgAoAgAgBSAEfSIGIAApAwgiByAGIAdUGyIGpxAHGiACIAYgAygCACIAIAFqKQMIUa18IQIgBSAEIAZ8IgRWDQALCyADIAI3A0AgAyADKQM4IAR8NwM4DA4LQn8hBEHIABAJIgNFDQ0gA0IANwMAIANCADcDMCADQQA2AiggA0IANwMgIANCADcDGCADQgA3AxAgA0IANwMIIANCADcDOCADQQgQCSIBNgIEIAFFBEAgAxAGIAAEQCAAQQA2AgQgAEEONgIACwwOCyABQgA3AwAgACgCECIBBEACQCABKAIoIgpFBEAgASkDGCEEDAELIApBADYCKCABKAIoQgA3AyAgASABKQMYIgIgASkDICIFIAIgBVYbIgQ3AxgLIAEpAwggBFYEQANAIAEoAgAgBKdBBHRqKAIAEAYgBEIBfCIEIAEpAwhUDQALCyABKAIAEAYgASgCBBAGIAEQBgsgACADNgIQQgAhBAwNCyAAKAIUIgEEQAJAIAEoAigiA0UEQCABKQMYIQIMAQsgA0EANgIoIAEoAihCADcDICABIAEpAxgiAiABKQMgIgUgAiAFVhsiAjcDGAsgASkDCCACVgRAA0AgASgCACACp0EEdGooAgAQBiACQgF8IgIgASkDCFQNAAsLIAEoAgAQBiABKAIEEAYgARAGCyAAQQA2AhQMDAsgACgCECIDKQM4IAMpAzAgASACIAAQRCIHQgBTDQogAyAHNwM4AkAgAykDCCIGQgF9IgJQDQAgAygCBCEAA0ACQCAHIAAgAiAEfUIBiCAEfCIFp0EDdGopAwBUBEAgBUIBfSECDAELIAUgBlEEQCAGIQUMAwsgACAFQgF8IgSnQQN0aikDACAHVg0CCyAEIQUgAiAEVg0ACwsgAyAFNwNAQgAhBAwLCyAAKAIUIgMpAzggAykDMCABIAIgABBEIgdCAFMNCSADIAc3AzgCQCADKQMIIgZCAX0iAlANACADKAIEIQADQAJAIAcgACACIAR9QgGIIAR8IgWnQQN0aikDAFQEQCAFQgF9IQIMAQsgBSAGUQRAIAYhBQwDCyAAIAVCAXwiBKdBA3RqKQMAIAdWDQILIAQhBSACIARWDQALCyADIAU3A0BCACEEDAoLIAJCN1gEQCAABEAgAEEANgIEIABBEjYCAAsMCQsgARAqIAEgACgCDDYCKCAAKAIQKQMwIQIgAUEANgIwIAEgAjcDICABIAI3AxggAULcATcDAEI4IQQMCQsgACABKAIANgIMDAgLIAtBQGtBfzYCACALQouAgICwAjcDOCALQoyAgIDQATcDMCALQo+AgICgATcDKCALQpGAgICQATcDICALQoeAgICAATcDGCALQoWAgIDgADcDECALQoOAgIDAADcDCCALQoGAgIAgNwMAQQAgCxAkIQQMBwsgACgCECkDOCIEQn9VDQYgAARAIABBPTYCBCAAQR42AgALDAULIAAoAhQpAzgiBEJ/VQ0FIAAEQCAAQT02AgQgAEEeNgIACwwEC0J/IQQgAkJ/VwRAIAAEQCAAQQA2AgQgAEESNgIACwwFCyACIAAoAhQiAykDOCACfCIFQv//A3wiBFYEQCAABEAgAEEANgIEIABBEjYCAAsMBAsCQCAFIAMoAgQiCiADKQMIIganQQN0aikDACIHWA0AAkAgBCAHfUIQiCAGfCIIIAMpAxAiCVgNAEIQIAkgCVAbIQUDQCAFIgRCAYYhBSAEIAhUDQALIAQgCVQNACADKAIAIASnIgpBBHQQNCIMRQ0DIAMgDDYCACADKAIEIApBA3RBCGoQNCIKRQ0DIAMgBDcDECADIAo2AgQgAykDCCEGCyAGIAhaDQAgAygCACEMA0AgDCAGp0EEdGoiDUGAgAQQCSIONgIAIA5FBEAgAARAIABBADYCBCAAQQ42AgALDAYLIA1CgIAENwMIIAMgBkIBfCIFNwMIIAogBadBA3RqIAdCgIAEfCIHNwMAIAMpAwgiBiAIVA0ACwsgAykDQCEFIAMpAzghBwJAIAJQBEBCACEEDAELIAWnIgBBBHQiDCADKAIAaiINKAIAIAcgCiAAQQN0aikDAH0iBqdqIAEgAiANKQMIIAZ9IgcgAiAHVBsiBKcQBxogBSAEIAMoAgAiACAMaikDCCAGfVGtfCEFIAIgB1YEQANAIAAgBadBBHQiCmoiACgCACABIASnaiACIAR9IgYgACkDCCIHIAYgB1QbIganEAcaIAUgBiADKAIAIgAgCmopAwhRrXwhBSAEIAZ8IgQgAlQNAAsLIAMpAzghBwsgAyAFNwNAIAMgBCAHfCICNwM4IAIgAykDMFgNBCADIAI3AzAMBAsgAARAIABBADYCBCAAQRw2AgALDAILIAAEQCAAQQA2AgQgAEEONgIACyAABEAgAEEANgIEIABBDjYCAAsMAQsgAEEANgIUC0J/IQQLIAtB0ABqJAAgBAtIAQF/IABCADcCBCAAIAE2AgACQCABQQBIDQBBsBMoAgAgAUwNACABQQJ0QcATaigCAEEBRw0AQYSEASgCACECCyAAIAI2AgQLDgAgAkGx893xeWxBEHYLvgEAIwBBEGsiACQAIABBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAQRBqJAAgAkGx893xeWxBEHYLuQEBAX8jAEEQayIBJAAgAUEAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAQjgEgAUEQaiQAC78BAQF/IwBBEGsiAiQAIAJBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAIAEQkAEhACACQRBqJAAgAAu+AQEBfyMAQRBrIgIkACACQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgACABEFohACACQRBqJAAgAAu+AQEBfyMAQRBrIgIkACACQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgACABEFshACACQRBqJAAgAAu9AQEBfyMAQRBrIgMkACADQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgACABIAIQjwEgA0EQaiQAC4UBAgR/AX4jAEEQayIBJAACQCAAKQMwUARADAELA0ACQCAAIAVBACABQQ9qIAFBCGoQZiIEQX9GDQAgAS0AD0EDRw0AIAIgASgCCEGAgICAf3FBgICAgHpGaiECC0F/IQMgBEF/Rg0BIAIhAyAFQgF8IgUgACkDMFQNAAsLIAFBEGokACADCwuMdSUAQYAIC7ELaW5zdWZmaWNpZW50IG1lbW9yeQBuZWVkIGRpY3Rpb25hcnkALSsgICAwWDB4AFppcCBhcmNoaXZlIGluY29uc2lzdGVudABJbnZhbGlkIGFyZ3VtZW50AGludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==";io(Si)||(Si=b(Si));function Os(We){try{if(We==Si&&ue)return new Uint8Array(ue);var tt=ii(We);if(tt)return tt;if(F)return F(We);throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}catch(It){Ti(It)}}function so(We,tt){var It,nr,$;try{$=Os(We),nr=new WebAssembly.Module($),It=new WebAssembly.Instance(nr,tt)}catch(Ne){var me=Ne.toString();throw te("failed to compile wasm module: "+me),(me.includes("imported Memory")||me.includes("memory import"))&&te("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),Ne}return[It,nr]}function cc(){var We={a:Ma};function tt($,me){var Ne=$.exports;r.asm=Ne,Ie=r.asm.g,J(Ie.buffer),Z=r.asm.W,an(r.asm.h),Ns("wasm-instantiate")}if(Kn("wasm-instantiate"),r.instantiateWasm)try{var It=r.instantiateWasm(We,tt);return It}catch($){return te("Module.instantiateWasm callback failed with error: "+$),!1}var nr=so(Si,We);return tt(nr[0]),r.asm}function cu(We){return R.getFloat32(We,!0)}function op(We){return R.getFloat64(We,!0)}function ap(We){return R.getInt16(We,!0)}function Ms(We){return R.getInt32(We,!0)}function Dn(We,tt){R.setInt32(We,tt,!0)}function oo(We){for(;We.length>0;){var tt=We.shift();if(typeof tt=="function"){tt(r);continue}var It=tt.func;typeof It=="number"?tt.arg===void 0?Z.get(It)():Z.get(It)(tt.arg):It(tt.arg===void 0?null:tt.arg)}}function Us(We,tt){var It=new Date(Ms((We>>2)*4)*1e3);Dn((tt>>2)*4,It.getUTCSeconds()),Dn((tt+4>>2)*4,It.getUTCMinutes()),Dn((tt+8>>2)*4,It.getUTCHours()),Dn((tt+12>>2)*4,It.getUTCDate()),Dn((tt+16>>2)*4,It.getUTCMonth()),Dn((tt+20>>2)*4,It.getUTCFullYear()-1900),Dn((tt+24>>2)*4,It.getUTCDay()),Dn((tt+36>>2)*4,0),Dn((tt+32>>2)*4,0);var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((tt+28>>2)*4,$),Us.GMTString||(Us.GMTString=lt("GMT")),Dn((tt+40>>2)*4,Us.GMTString),tt}function ml(We,tt){return Us(We,tt)}function yl(We,tt,It){Re.copyWithin(We,tt,tt+It)}function ao(We){try{return Ie.grow(We-xe.byteLength+65535>>>16),J(Ie.buffer),1}catch{}}function Vn(We){var tt=Re.length;We=We>>>0;var It=2147483648;if(We>It)return!1;for(var nr=1;nr<=4;nr*=2){var $=tt*(1+.2/nr);$=Math.min($,We+100663296);var me=Math.min(It,ke(Math.max(We,$),65536)),Ne=ao(me);if(Ne)return!0}return!1}function On(We){pe(We)}function Li(We){var tt=Date.now()/1e3|0;return We&&Dn((We>>2)*4,tt),tt}function Mn(){if(Mn.called)return;Mn.called=!0;var We=new Date().getFullYear(),tt=new Date(We,0,1),It=new Date(We,6,1),nr=tt.getTimezoneOffset(),$=It.getTimezoneOffset(),me=Math.max(nr,$);Dn((ds()>>2)*4,me*60),Dn((gs()>>2)*4,Number(nr!=$));function Ne(Zr){var qi=Zr.toTimeString().match(/\(([A-Za-z ]+)\)$/);return qi?qi[1]:"GMT"}var ft=Ne(tt),pt=Ne(It),Tt=lt(ft),er=lt(pt);$>2)*4,Tt),Dn((wi()+4>>2)*4,er)):(Dn((wi()>>2)*4,er),Dn((wi()+4>>2)*4,Tt))}function _i(We){Mn();var tt=Date.UTC(Ms((We+20>>2)*4)+1900,Ms((We+16>>2)*4),Ms((We+12>>2)*4),Ms((We+8>>2)*4),Ms((We+4>>2)*4),Ms((We>>2)*4),0),It=new Date(tt);Dn((We+24>>2)*4,It.getUTCDay());var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((We+28>>2)*4,$),It.getTime()/1e3|0}var tr=typeof atob=="function"?atob:function(We){var tt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",It="",nr,$,me,Ne,ft,pt,Tt,er=0;We=We.replace(/[^A-Za-z0-9\+\/\=]/g,"");do Ne=tt.indexOf(We.charAt(er++)),ft=tt.indexOf(We.charAt(er++)),pt=tt.indexOf(We.charAt(er++)),Tt=tt.indexOf(We.charAt(er++)),nr=Ne<<2|ft>>4,$=(ft&15)<<4|pt>>2,me=(pt&3)<<6|Tt,It=It+String.fromCharCode(nr),pt!==64&&(It=It+String.fromCharCode($)),Tt!==64&&(It=It+String.fromCharCode(me));while(er0||(dt(),mr>0))return;function tt(){Pn||(Pn=!0,r.calledRun=!0,!Fe&&(jt(),o(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),$t()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),tt()},1)):tt()}if(r.run=ys,r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return ys(),e}}();typeof Qx=="object"&&typeof tU=="object"?tU.exports=eU:typeof define=="function"&&define.amd?define([],function(){return eU}):typeof Qx=="object"&&(Qx.createModule=eU)});var Lf,Tle,Lle,Nle=yt(()=>{Lf=["number","number"],Tle=(ee=>(ee[ee.ZIP_ER_OK=0]="ZIP_ER_OK",ee[ee.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",ee[ee.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",ee[ee.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",ee[ee.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",ee[ee.ZIP_ER_READ=5]="ZIP_ER_READ",ee[ee.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",ee[ee.ZIP_ER_CRC=7]="ZIP_ER_CRC",ee[ee.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",ee[ee.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",ee[ee.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",ee[ee.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",ee[ee.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",ee[ee.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",ee[ee.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",ee[ee.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",ee[ee.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",ee[ee.ZIP_ER_EOF=17]="ZIP_ER_EOF",ee[ee.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",ee[ee.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",ee[ee.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",ee[ee.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",ee[ee.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",ee[ee.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",ee[ee.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",ee[ee.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",ee[ee.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",ee[ee.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",ee[ee.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",ee[ee.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",ee[ee.ZIP_ER_TELL=30]="ZIP_ER_TELL",ee[ee.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA",ee))(Tle||{}),Lle=t=>({get HEAPU8(){return t.HEAPU8},errors:Tle,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_EXCL:2,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:t._malloc(1),uint32S:t._malloc(4),malloc:t._malloc,free:t._free,getValue:t.getValue,openFromSource:t.cwrap("zip_open_from_source","number",["number","number","number"]),close:t.cwrap("zip_close","number",["number"]),discard:t.cwrap("zip_discard",null,["number"]),getError:t.cwrap("zip_get_error","number",["number"]),getName:t.cwrap("zip_get_name","string",["number","number","number"]),getNumEntries:t.cwrap("zip_get_num_entries","number",["number","number"]),delete:t.cwrap("zip_delete","number",["number","number"]),statIndex:t.cwrap("zip_stat_index","number",["number",...Lf,"number","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...Lf,"number"]),fread:t.cwrap("zip_fread","number",["number","number","number","number"]),fclose:t.cwrap("zip_fclose","number",["number"]),dir:{add:t.cwrap("zip_dir_add","number",["number","string"])},file:{add:t.cwrap("zip_file_add","number",["number","string","number","number"]),getError:t.cwrap("zip_file_get_error","number",["number"]),getExternalAttributes:t.cwrap("zip_file_get_external_attributes","number",["number",...Lf,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...Lf,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...Lf,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...Lf,"number","number"])},ext:{countSymlinks:t.cwrap("zip_ext_count_symlinks","number",["number"])},error:{initWithCode:t.cwrap("zip_error_init_with_code",null,["number","number"]),strerror:t.cwrap("zip_error_strerror","string",["number"])},name:{locate:t.cwrap("zip_name_locate","number",["number","string","number"])},source:{fromUnattachedBuffer:t.cwrap("zip_source_buffer_create","number",["number",...Lf,"number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...Lf,"number"]),free:t.cwrap("zip_source_free",null,["number"]),keep:t.cwrap("zip_source_keep",null,["number"]),open:t.cwrap("zip_source_open","number",["number"]),close:t.cwrap("zip_source_close","number",["number"]),seek:t.cwrap("zip_source_seek","number",["number",...Lf,"number"]),tell:t.cwrap("zip_source_tell","number",["number"]),read:t.cwrap("zip_source_read","number",["number","number","number"]),error:t.cwrap("zip_source_error","number",["number"])},struct:{statS:t.cwrap("zipstruct_statS","number",[]),statSize:t.cwrap("zipstruct_stat_size","number",["number"]),statCompSize:t.cwrap("zipstruct_stat_comp_size","number",["number"]),statCompMethod:t.cwrap("zipstruct_stat_comp_method","number",["number"]),statMtime:t.cwrap("zipstruct_stat_mtime","number",["number"]),statCrc:t.cwrap("zipstruct_stat_crc","number",["number"]),errorS:t.cwrap("zipstruct_errorS","number",[]),errorCodeZip:t.cwrap("zipstruct_error_code_zip","number",["number"])}})});function rU(t,e){let r=t.indexOf(e);if(r<=0)return null;let o=r;for(;r>=0&&(o=r+e.length,t[o]!==V.sep);){if(t[r-1]===V.sep)return null;r=t.indexOf(e,o)}return t.length>o&&t[o]!==V.sep?null:t.slice(0,o)}var zl,Ole=yt(()=>{Pt();Pt();nA();zl=class extends Up{static async openPromise(e,r){let o=new zl(r);try{return await e(o)}finally{o.saveAndClose()}}constructor(e={}){let r=e.fileExtensions,o=e.readOnlyArchives,a=typeof r>"u"?A=>rU(A,".zip"):A=>{for(let p of r){let h=rU(A,p);if(h)return h}return null},n=(A,p)=>new Ji(p,{baseFs:A,readOnly:o,stats:A.statSync(p)}),u=async(A,p)=>{let h={baseFs:A,readOnly:o,stats:await A.statPromise(p)};return()=>new Ji(p,h)};super({...e,factorySync:n,factoryPromise:u,getMountPoint:a})}}});function cot(t){if(typeof t=="string"&&String(+t)===t)return+t;if(typeof t=="number"&&Number.isFinite(t))return t<0?Date.now()/1e3:t;if(Mle.types.isDate(t))return t.getTime()/1e3;throw new Error("Invalid time")}function Fx(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var ta,nU,Mle,iU,Ule,Rx,Ji,sU=yt(()=>{Pt();Pt();Pt();Pt();Pt();Pt();ta=Be("fs"),nU=Be("stream"),Mle=Be("util"),iU=$e(Be("zlib"));$4();Ule="mixed";Rx=class extends Error{constructor(r,o){super(r);this.name="Libzip Error",this.code=o}},Ji=class extends Mu{constructor(r,o={}){super();this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;let a=o;if(this.level=typeof a.level<"u"?a.level:Ule,r??=Fx(),typeof r=="string"){let{baseFs:A=new Tn}=a;this.baseFs=A,this.path=r}else this.path=null,this.baseFs=null;if(o.stats)this.stats=o.stats;else if(typeof r=="string")try{this.stats=this.baseFs.statSync(r)}catch(A){if(A.code==="ENOENT"&&a.create)this.stats=Ea.makeDefaultStats();else throw A}else this.stats=Ea.makeDefaultStats();this.libzip=P1();let n=this.libzip.malloc(4);try{let A=0;o.readOnly&&(A|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof r=="string"&&(r=a.create?Fx():this.baseFs.readFileSync(r));let p=this.allocateUnattachedSource(r);try{this.zip=this.libzip.openFromSource(p,A,n),this.lzSource=p}catch(h){throw this.libzip.source.free(p),h}if(this.zip===0){let h=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(h,this.libzip.getValue(n,"i32")),this.makeLibzipError(h)}}finally{this.libzip.free(n)}this.listings.set(Bt.root,new Set);let u=this.libzip.getNumEntries(this.zip,0);for(let A=0;Ar)throw new Error("Overread");let n=this.libzip.HEAPU8.subarray(o,o+r);return Buffer.from(n)}finally{this.libzip.free(o)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.readOnly){this.discardAndClose();return}let r=this.baseFs.existsSync(this.path)||this.stats.mode===Ea.DEFAULT_MODE?void 0:this.stats.mode;this.baseFs.writeFileSync(this.path,this.getBufferAndClose(),{mode:r}),this.ready=!1}resolve(r){return V.resolve(Bt.root,r)}async openPromise(r,o,a){return this.openSync(r,o,a)}openSync(r,o,a){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:r}),n}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(r,o){return this.opendirSync(r,o)}opendirSync(r,o={}){let a=this.resolveFilename(`opendir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`opendir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`opendir '${r}'`);let u=[...n],A=this.openSync(a,"r");return SD(this,a,u,{onClose:()=>{this.closeSync(A)}})}async readPromise(r,o,a,n,u){return this.readSync(r,o,a,n,u)}readSync(r,o,a=0,n=o.byteLength,u=-1){let A=this.fds.get(r);if(typeof A>"u")throw ar.EBADF("read");let p=u===-1||u===null?A.cursor:u,h=this.readFileSync(A.p);h.copy(o,a,p,p+n);let C=Math.max(0,Math.min(h.length-p,n));return(u===-1||u===null)&&(A.cursor+=C),C}async writePromise(r,o,a,n,u){return typeof o=="string"?this.writeSync(r,o,u):this.writeSync(r,o,a,n,u)}writeSync(r,o,a,n,u){throw typeof this.fds.get(r)>"u"?ar.EBADF("read"):new Error("Unimplemented")}async closePromise(r){return this.closeSync(r)}closeSync(r){if(typeof this.fds.get(r)>"u")throw ar.EBADF("read");this.fds.delete(r)}createReadStream(r,{encoding:o}={}){if(r===null)throw new Error("Unimplemented");let a=this.openSync(r,"r"),n=Object.assign(new nU.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(A,p)=>{clearImmediate(u),this.closeSync(a),p(A)}}),{close(){n.destroy()},bytesRead:0,path:r,pending:!1}),u=setImmediate(async()=>{try{let A=await this.readFilePromise(r,o);n.bytesRead=A.length,n.end(A)}catch(A){n.destroy(A)}});return n}createWriteStream(r,{encoding:o}={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);if(r===null)throw new Error("Unimplemented");let a=[],n=this.openSync(r,"w"),u=Object.assign(new nU.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(A,p)=>{try{A?p(A):(this.writeFileSync(r,Buffer.concat(a),o),p(null))}catch(h){p(h)}finally{this.closeSync(n)}}}),{close(){u.destroy()},bytesWritten:0,path:r,pending:!1});return u.on("data",A=>{let p=Buffer.from(A);u.bytesWritten+=p.length,a.push(p)}),u}async realpathPromise(r){return this.realpathSync(r)}realpathSync(r){let o=this.resolveFilename(`lstat '${r}'`,r);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`lstat '${r}'`);return o}async existsPromise(r){return this.existsSync(r)}existsSync(r){if(!this.ready)throw ar.EBUSY(`archive closed, existsSync '${r}'`);if(this.symlinkCount===0){let a=V.resolve(Bt.root,r);return this.entries.has(a)||this.listings.has(a)}let o;try{o=this.resolveFilename(`stat '${r}'`,r,void 0,!1)}catch{return!1}return o===void 0?!1:this.entries.has(o)||this.listings.has(o)}async accessPromise(r,o){return this.accessSync(r,o)}accessSync(r,o=ta.constants.F_OK){let a=this.resolveFilename(`access '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`access '${r}'`);if(this.readOnly&&o&ta.constants.W_OK)throw ar.EROFS(`access '${r}'`)}async statPromise(r,o={bigint:!1}){return o.bigint?this.statSync(r,{bigint:!0}):this.statSync(r)}statSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`stat '${r}'`,r,void 0,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`stat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`stat '${r}'`);return this.statImpl(`stat '${r}'`,a,o)}}async fstatPromise(r,o){return this.fstatSync(r,o)}fstatSync(r,o){let a=this.fds.get(r);if(typeof a>"u")throw ar.EBADF("fstatSync");let{p:n}=a,u=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(u)&&!this.listings.has(u))throw ar.ENOENT(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(u))throw ar.ENOTDIR(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,u,o)}async lstatPromise(r,o={bigint:!1}){return o.bigint?this.lstatSync(r,{bigint:!0}):this.lstatSync(r)}lstatSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`lstat '${r}'`,r,!1,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`lstat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`lstat '${r}'`);return this.statImpl(`lstat '${r}'`,a,o)}}statImpl(r,o,a={}){let n=this.entries.get(o);if(typeof n<"u"){let u=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,n,0,0,u)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let p=this.stats.uid,h=this.stats.gid,C=this.libzip.struct.statSize(u)>>>0,I=512,v=Math.ceil(C/I),b=(this.libzip.struct.statMtime(u)>>>0)*1e3,E=b,F=b,N=b,U=new Date(E),z=new Date(F),te=new Date(N),le=new Date(b),pe=this.listings.has(o)?ta.constants.S_IFDIR:this.isSymbolicLink(n)?ta.constants.S_IFLNK:ta.constants.S_IFREG,ue=pe===ta.constants.S_IFDIR?493:420,ye=pe|this.getUnixMode(n,ue)&511,ae=this.libzip.struct.statCrc(u),Ie=Object.assign(new Ea.StatEntry,{uid:p,gid:h,size:C,blksize:I,blocks:v,atime:U,birthtime:z,ctime:te,mtime:le,atimeMs:E,birthtimeMs:F,ctimeMs:N,mtimeMs:b,mode:ye,crc:ae});return a.bigint===!0?Ea.convertToBigIntStats(Ie):Ie}if(this.listings.has(o)){let u=this.stats.uid,A=this.stats.gid,p=0,h=512,C=0,I=this.stats.mtimeMs,v=this.stats.mtimeMs,b=this.stats.mtimeMs,E=this.stats.mtimeMs,F=new Date(I),N=new Date(v),U=new Date(b),z=new Date(E),te=ta.constants.S_IFDIR|493,le=0,pe=Object.assign(new Ea.StatEntry,{uid:u,gid:A,size:p,blksize:h,blocks:C,atime:F,birthtime:N,ctime:U,mtime:z,atimeMs:I,birthtimeMs:v,ctimeMs:b,mtimeMs:E,mode:te,crc:le});return a.bigint===!0?Ea.convertToBigIntStats(pe):pe}throw new Error("Unreachable")}getUnixMode(r,o){if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?o:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(r){let o=this.listings.get(r);if(o)return o;this.registerListing(V.dirname(r)).add(V.basename(r));let n=new Set;return this.listings.set(r,n),n}registerEntry(r,o){this.registerListing(V.dirname(r)).add(V.basename(r)),this.entries.set(r,o)}unregisterListing(r){this.listings.delete(r),this.listings.get(V.dirname(r))?.delete(V.basename(r))}unregisterEntry(r){this.unregisterListing(r);let o=this.entries.get(r);this.entries.delete(r),!(typeof o>"u")&&(this.fileSources.delete(o),this.isSymbolicLink(o)&&this.symlinkCount--)}deleteEntry(r,o){if(this.unregisterEntry(r),this.libzip.delete(this.zip,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(r,o,a=!0,n=!0){if(!this.ready)throw ar.EBUSY(`archive closed, ${r}`);let u=V.resolve(Bt.root,o);if(u==="/")return Bt.root;let A=this.entries.get(u);if(a&&A!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(A)){let p=this.getFileSource(A).toString();return this.resolveFilename(r,V.resolve(V.dirname(u),p),!0,n)}else return u;for(;;){let p=this.resolveFilename(r,V.dirname(u),!0,n);if(p===void 0)return p;let h=this.listings.has(p),C=this.entries.has(p);if(!h&&!C){if(n===!1)return;throw ar.ENOENT(r)}if(!h)throw ar.ENOTDIR(r);if(u=V.resolve(p,V.basename(u)),!a||this.symlinkCount===0)break;let I=this.libzip.name.locate(this.zip,u.slice(1),0);if(I===-1)break;if(this.isSymbolicLink(I)){let v=this.getFileSource(I).toString();u=V.resolve(V.dirname(u),v)}else break}return u}allocateBuffer(r){Buffer.isBuffer(r)||(r=Buffer.from(r));let o=this.libzip.malloc(r.byteLength);if(!o)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,o,r.byteLength).set(r),{buffer:o,byteLength:r.byteLength}}allocateUnattachedSource(r){let o=this.libzip.struct.errorS(),{buffer:a,byteLength:n}=this.allocateBuffer(r),u=this.libzip.source.fromUnattachedBuffer(a,n,0,1,o);if(u===0)throw this.libzip.free(o),this.makeLibzipError(o);return u}allocateSource(r){let{buffer:o,byteLength:a}=this.allocateBuffer(r),n=this.libzip.source.fromBuffer(this.zip,o,a,0,1);if(n===0)throw this.libzip.free(o),this.makeLibzipError(this.libzip.getError(this.zip));return n}setFileSource(r,o){let a=Buffer.isBuffer(o)?o:Buffer.from(o),n=V.relative(Bt.root,r),u=this.allocateSource(o);try{let A=this.libzip.file.add(this.zip,n,u,this.libzip.ZIP_FL_OVERWRITE);if(A===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!=="mixed"){let p=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,A,0,p,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(A,a),A}catch(A){throw this.libzip.source.free(u),A}}isSymbolicLink(r){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,"i32")>>>16&ta.constants.S_IFMT)===ta.constants.S_IFLNK}getFileSource(r,o={asyncDecompress:!1}){let a=this.fileSources.get(r);if(typeof a<"u")return a;let n=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,r,0,0,n)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let A=this.libzip.struct.statCompSize(n),p=this.libzip.struct.statCompMethod(n),h=this.libzip.malloc(A);try{let C=this.libzip.fopenIndex(this.zip,r,0,this.libzip.ZIP_FL_COMPRESSED);if(C===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let I=this.libzip.fread(C,h,A,0);if(I===-1)throw this.makeLibzipError(this.libzip.file.getError(C));if(IA)throw new Error("Overread");let v=this.libzip.HEAPU8.subarray(h,h+A),b=Buffer.from(v);if(p===0)return this.fileSources.set(r,b),b;if(o.asyncDecompress)return new Promise((E,F)=>{iU.default.inflateRaw(b,(N,U)=>{N?F(N):(this.fileSources.set(r,U),E(U))})});{let E=iU.default.inflateRawSync(b);return this.fileSources.set(r,E),E}}finally{this.libzip.fclose(C)}}finally{this.libzip.free(h)}}async fchmodPromise(r,o){return this.chmodPromise(this.fdToPath(r,"fchmod"),o)}fchmodSync(r,o){return this.chmodSync(this.fdToPath(r,"fchmodSync"),o)}async chmodPromise(r,o){return this.chmodSync(r,o)}chmodSync(r,o){if(this.readOnly)throw ar.EROFS(`chmod '${r}'`);o&=493;let a=this.resolveFilename(`chmod '${r}'`,r,!1),n=this.entries.get(a);if(typeof n>"u")throw new Error(`Assertion failed: The entry should have been registered (${a})`);let A=this.getUnixMode(n,ta.constants.S_IFREG|0)&-512|o;if(this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,A<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(r,o,a){return this.chownPromise(this.fdToPath(r,"fchown"),o,a)}fchownSync(r,o,a){return this.chownSync(this.fdToPath(r,"fchownSync"),o,a)}async chownPromise(r,o,a){return this.chownSync(r,o,a)}chownSync(r,o,a){throw new Error("Unimplemented")}async renamePromise(r,o){return this.renameSync(r,o)}renameSync(r,o){throw new Error("Unimplemented")}async copyFilePromise(r,o,a){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=await this.getFileSource(n,{asyncDecompress:!0}),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}copyFileSync(r,o,a=0){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=this.getFileSource(n),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}prepareCopyFile(r,o,a=0){if(this.readOnly)throw ar.EROFS(`copyfile '${r} -> '${o}'`);if((a&ta.constants.COPYFILE_FICLONE_FORCE)!==0)throw ar.ENOSYS("unsupported clone operation",`copyfile '${r}' -> ${o}'`);let n=this.resolveFilename(`copyfile '${r} -> ${o}'`,r),u=this.entries.get(n);if(typeof u>"u")throw ar.EINVAL(`copyfile '${r}' -> '${o}'`);let A=this.resolveFilename(`copyfile '${r}' -> ${o}'`,o),p=this.entries.get(A);if((a&(ta.constants.COPYFILE_EXCL|ta.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof p<"u")throw ar.EEXIST(`copyfile '${r}' -> '${o}'`);return{indexSource:u,resolvedDestP:A,indexDest:p}}async appendFilePromise(r,o,a){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFilePromise(r,o,a)}appendFileSync(r,o,a={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFileSync(r,o,a)}fdToPath(r,o){let a=this.fds.get(r)?.p;if(typeof a>"u")throw ar.EBADF(o);return a}async writeFilePromise(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([await this.getFileSource(A,{asyncDecompress:!0}),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&await this.chmodPromise(p,u)}writeFileSync(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([this.getFileSource(A),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&this.chmodSync(p,u)}prepareWriteFile(r,o){if(typeof r=="number"&&(r=this.fdToPath(r,"read")),this.readOnly)throw ar.EROFS(`open '${r}'`);let a=this.resolveFilename(`open '${r}'`,r);if(this.listings.has(a))throw ar.EISDIR(`open '${r}'`);let n=null,u=null;typeof o=="string"?n=o:typeof o=="object"&&({encoding:n=null,mode:u=null}=o);let A=this.entries.get(a);return{encoding:n,mode:u,resolvedP:a,index:A}}async unlinkPromise(r){return this.unlinkSync(r)}unlinkSync(r){if(this.readOnly)throw ar.EROFS(`unlink '${r}'`);let o=this.resolveFilename(`unlink '${r}'`,r);if(this.listings.has(o))throw ar.EISDIR(`unlink '${r}'`);let a=this.entries.get(o);if(typeof a>"u")throw ar.EINVAL(`unlink '${r}'`);this.deleteEntry(o,a)}async utimesPromise(r,o,a){return this.utimesSync(r,o,a)}utimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`utimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r);this.utimesImpl(n,a)}async lutimesPromise(r,o,a){return this.lutimesSync(r,o,a)}lutimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`lutimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r,!1);this.utimesImpl(n,a)}utimesImpl(r,o){this.listings.has(r)&&(this.entries.has(r)||this.hydrateDirectory(r));let a=this.entries.get(r);if(a===void 0)throw new Error("Unreachable");if(this.libzip.file.setMtime(this.zip,a,0,cot(o),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(r,o){return this.mkdirSync(r,o)}mkdirSync(r,{mode:o=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(r,{chmod:o});if(this.readOnly)throw ar.EROFS(`mkdir '${r}'`);let n=this.resolveFilename(`mkdir '${r}'`,r);if(this.entries.has(n)||this.listings.has(n))throw ar.EEXIST(`mkdir '${r}'`);this.hydrateDirectory(n),this.chmodSync(n,o)}async rmdirPromise(r,o){return this.rmdirSync(r,o)}rmdirSync(r,{recursive:o=!1}={}){if(this.readOnly)throw ar.EROFS(`rmdir '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rmdir '${r}'`,r),n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`rmdir '${r}'`);if(n.size>0)throw ar.ENOTEMPTY(`rmdir '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw ar.EINVAL(`rmdir '${r}'`);this.deleteEntry(r,u)}hydrateDirectory(r){let o=this.libzip.dir.add(this.zip,V.relative(Bt.root,r));if(o===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(r),this.registerEntry(r,o),o}async linkPromise(r,o){return this.linkSync(r,o)}linkSync(r,o){throw ar.EOPNOTSUPP(`link '${r}' -> '${o}'`)}async symlinkPromise(r,o){return this.symlinkSync(r,o)}symlinkSync(r,o){if(this.readOnly)throw ar.EROFS(`symlink '${r}' -> '${o}'`);let a=this.resolveFilename(`symlink '${r}' -> '${o}'`,o);if(this.listings.has(a))throw ar.EISDIR(`symlink '${r}' -> '${o}'`);if(this.entries.has(a))throw ar.EEXIST(`symlink '${r}' -> '${o}'`);let n=this.setFileSource(a,r);if(this.registerEntry(a,n),this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,(ta.constants.S_IFLNK|511)<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=await this.readFileBuffer(r,{asyncDecompress:!0});return o?a.toString(o):a}readFileSync(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=this.readFileBuffer(r);return o?a.toString(o):a}readFileBuffer(r,o={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdToPath(r,"read"));let a=this.resolveFilename(`open '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`open '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(a))throw ar.EISDIR("read");let n=this.entries.get(a);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,o)}async readdirPromise(r,o){return this.readdirSync(r,o)}readdirSync(r,o){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`scandir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`scandir '${r}'`);if(o?.recursive)if(o?.withFileTypes){let u=Array.from(n,A=>Object.assign(this.statImpl("lstat",V.join(r,A)),{name:A,path:Bt.dot}));for(let A of u){if(!A.isDirectory())continue;let p=V.join(A.path,A.name),h=this.listings.get(V.join(a,p));for(let C of h)u.push(Object.assign(this.statImpl("lstat",V.join(r,p,C)),{name:C,path:p}))}return u}else{let u=[...n];for(let A of u){let p=this.listings.get(V.join(a,A));if(!(typeof p>"u"))for(let h of p)u.push(V.join(A,h))}return u}else return o?.withFileTypes?Array.from(n,u=>Object.assign(this.statImpl("lstat",V.join(r,u)),{name:u,path:void 0})):[...n]}async readlinkPromise(r){let o=this.prepareReadlink(r);return(await this.getFileSource(o,{asyncDecompress:!0})).toString()}readlinkSync(r){let o=this.prepareReadlink(r);return this.getFileSource(o).toString()}prepareReadlink(r){let o=this.resolveFilename(`readlink '${r}'`,r,!1);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`readlink '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(o))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(o))throw ar.EINVAL(`readlink '${r}'`);let a=this.entries.get(o);if(a===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(a))throw ar.EINVAL(`readlink '${r}'`);return a}async truncatePromise(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=await this.getFileSource(n,{asyncDecompress:!0}),A=Buffer.alloc(o,0);return u.copy(A),await this.writeFilePromise(r,A)}truncateSync(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=this.getFileSource(n),A=Buffer.alloc(o,0);return u.copy(A),this.writeFileSync(r,A)}async ftruncatePromise(r,o){return this.truncatePromise(this.fdToPath(r,"ftruncate"),o)}ftruncateSync(r,o){return this.truncateSync(this.fdToPath(r,"ftruncateSync"),o)}watch(r,o,a){let n;switch(typeof o){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=o);break}if(!n)return{on:()=>{},close:()=>{}};let u=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(u)}}}watchFile(r,o,a){let n=V.resolve(Bt.root,r);return ry(this,n,o,a)}unwatchFile(r,o){let a=V.resolve(Bt.root,r);return Ng(this,a,o)}}});function Hle(t,e,r=Buffer.alloc(0),o){let a=new Ji(r),n=I=>I===e||I.startsWith(`${e}/`)?I.slice(0,e.length):null,u=async(I,v)=>()=>a,A=(I,v)=>a,p={...t},h=new Tn(p),C=new Up({baseFs:h,getMountPoint:n,factoryPromise:u,factorySync:A,magicByte:21,maxAge:1/0,typeCheck:o?.typeCheck});return Ww(_le.default,new _p(C)),a}var _le,jle=yt(()=>{Pt();_le=$e(Be("fs"));sU()});var qle=yt(()=>{Ole();sU();jle()});var S1={};Vt(S1,{DEFAULT_COMPRESSION_LEVEL:()=>Ule,LibzipError:()=>Rx,ZipFS:()=>Ji,ZipOpenFS:()=>zl,getArchivePart:()=>rU,getLibzipPromise:()=>Aot,getLibzipSync:()=>uot,makeEmptyArchive:()=>Fx,mountMemoryDrive:()=>Hle});function uot(){return P1()}async function Aot(){return P1()}var Gle,nA=yt(()=>{$4();Gle=$e(Rle());Nle();qle();Fle(()=>{let t=(0,Gle.default)();return Lle(t)})});var FE,Yle=yt(()=>{Pt();qt();x1();FE=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",process.cwd(),{description:"The directory to run the command in"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=this.args.length>0?`${this.commandName} ${this.args.join(" ")}`:this.commandName;return await RE(r,[],{cwd:fe.toPortablePath(this.cwd),stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}};FE.usage={description:"run a command using yarn's portable shell",details:` - This command will run a command using Yarn's portable shell. - - Make sure to escape glob patterns, redirections, and other features that might be expanded by your own shell. - - Note: To escape something from Yarn's shell, you might have to escape it twice, the first time from your own shell. - - Note: Don't use this command in Yarn scripts, as Yarn's shell is automatically used. - - For a list of features, visit: https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-shell/README.md. - `,examples:[["Run a simple command","$0 echo Hello"],["Run a command with a glob pattern","$0 echo '*.js'"],["Run a command with a redirection","$0 echo Hello World '>' hello.txt"],["Run a command with an escaped glob pattern (The double escape is needed in Unix shells)",`$0 echo '"*.js"'`],["Run a command with a variable (Double quotes are needed in Unix shells, to prevent them from expanding the variable)",'$0 "GREETING=Hello echo $GREETING World"']]}});var al,Wle=yt(()=>{al=class extends Error{constructor(e){super(e),this.name="ShellError"}}});var Nx={};Vt(Nx,{fastGlobOptions:()=>zle,isBraceExpansion:()=>oU,isGlobPattern:()=>fot,match:()=>pot,micromatchOptions:()=>Lx});function fot(t){if(!Tx.default.scan(t,Lx).isGlob)return!1;try{Tx.default.parse(t,Lx)}catch{return!1}return!0}function pot(t,{cwd:e,baseFs:r}){return(0,Kle.default)(t,{...zle,cwd:fe.fromPortablePath(e),fs:RD(Vle.default,new _p(r))})}function oU(t){return Tx.default.scan(t,Lx).isBrace}var Kle,Vle,Tx,Lx,zle,Jle=yt(()=>{Pt();Kle=$e(RS()),Vle=$e(Be("fs")),Tx=$e(Zo()),Lx={strictBrackets:!0},zle={onlyDirectories:!1,onlyFiles:!1}});function aU(){}function lU(){for(let t of bd)t.kill()}function ece(t,e,r,o){return a=>{let n=a[0]instanceof iA.Transform?"pipe":a[0],u=a[1]instanceof iA.Transform?"pipe":a[1],A=a[2]instanceof iA.Transform?"pipe":a[2],p=(0,Zle.default)(t,e,{...o,stdio:[n,u,A]});return bd.add(p),bd.size===1&&(process.on("SIGINT",aU),process.on("SIGTERM",lU)),a[0]instanceof iA.Transform&&a[0].pipe(p.stdin),a[1]instanceof iA.Transform&&p.stdout.pipe(a[1],{end:!1}),a[2]instanceof iA.Transform&&p.stderr.pipe(a[2],{end:!1}),{stdin:p.stdin,promise:new Promise(h=>{p.on("error",C=>{switch(bd.delete(p),bd.size===0&&(process.off("SIGINT",aU),process.off("SIGTERM",lU)),C.code){case"ENOENT":a[2].write(`command not found: ${t} -`),h(127);break;case"EACCES":a[2].write(`permission denied: ${t} -`),h(128);break;default:a[2].write(`uncaught error: ${C.message} -`),h(1);break}}),p.on("close",C=>{bd.delete(p),bd.size===0&&(process.off("SIGINT",aU),process.off("SIGTERM",lU)),h(C!==null?C:129)})})}}}function tce(t){return e=>{let r=e[0]==="pipe"?new iA.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}function Ox(t,e){return TE.start(t,e)}function Xle(t,e=null){let r=new iA.PassThrough,o=new $le.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` -`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",t(e!==null?`${e} ${p}`:p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&t(e!==null?`${e} ${n}`:n)}),r}function rce(t,{prefix:e}){return{stdout:Xle(r=>t.stdout.write(`${r} -`),t.stdout.isTTY?e:null),stderr:Xle(r=>t.stderr.write(`${r} -`),t.stderr.isTTY?e:null)}}var Zle,iA,$le,bd,Jl,cU,TE,uU=yt(()=>{Zle=$e(sT()),iA=Be("stream"),$le=Be("string_decoder"),bd=new Set;Jl=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},cU=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");return this.stream}},TE=class{constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=r}static start(e,{stdin:r,stdout:o,stderr:a}){let n=new TE(null,e);return n.stdin=r,n.stdout=o,n.stderr=a,n}pipeTo(e,r=1){let o=new TE(this,e),a=new cU;return o.pipe=a,o.stdout=this.stdout,o.stderr=this.stderr,(r&1)===1?this.stdout=a:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)===2?this.stderr=a:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),o}async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(this.stdin===null)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let r;if(this.stdout===null)throw new Error("Assertion failed: No output stream registered");r=this.stdout,e[1]=r.get();let o;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");o=this.stderr,e[2]=o.get();let a=this.implementation(e);return this.pipe&&this.pipe.attach(a.stdin),await a.promise.then(n=>(r.close(),o.close(),n))}async run(){let e=[];for(let o=this;o;o=o.ancestor)e.push(o.exec());return(await Promise.all(e))[0]}}});var F1={};Vt(F1,{EntryCommand:()=>FE,ShellError:()=>al,execute:()=>RE,globUtils:()=>Nx});function nce(t,e,r){let o=new ll.PassThrough({autoDestroy:!0});switch(t){case 0:(e&1)===1&&r.stdin.pipe(o,{end:!1}),(e&2)===2&&r.stdin instanceof ll.Writable&&o.pipe(r.stdin,{end:!1});break;case 1:(e&1)===1&&r.stdout.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stdout,{end:!1});break;case 2:(e&1)===1&&r.stderr.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stderr,{end:!1});break;default:throw new al(`Bad file descriptor: "${t}"`)}return o}function Ux(t,e={}){let r={...t,...e};return r.environment={...t.environment,...e.environment},r.variables={...t.variables,...e.variables},r}async function got(t,e,r){let o=[],a=new ll.PassThrough;return a.on("data",n=>o.push(n)),await _x(t,e,Ux(r,{stdout:a})),Buffer.concat(o).toString().replace(/[\r\n]+$/,"")}async function ice(t,e,r){let o=t.map(async n=>{let u=await kd(n.args,e,r);return{name:n.name,value:u.join(" ")}});return(await Promise.all(o)).reduce((n,u)=>(n[u.name]=u.value,n),{})}function Mx(t){return t.match(/[^ \r\n\t]+/g)||[]}async function uce(t,e,r,o,a=o){switch(t.name){case"$":o(String(process.pid));break;case"#":o(String(e.args.length));break;case"@":if(t.quoted)for(let n of e.args)a(n);else for(let n of e.args){let u=Mx(n);for(let A=0;A=0&&n"u"&&(t.defaultValue?u=(await kd(t.defaultValue,e,r)).join(" "):t.alternativeValue&&(u="")),typeof u>"u")throw A?new al(`Unbound argument #${n}`):new al(`Unbound variable "${t.name}"`);if(t.quoted)o(u);else{let p=Mx(u);for(let C=0;Co.push(n));let a=Number(o.join(" "));return Number.isNaN(a)?b1({type:"variable",name:o.join(" ")},e,r):b1({type:"number",value:a},e,r)}else return dot[t.type](await b1(t.left,e,r),await b1(t.right,e,r))}async function kd(t,e,r){let o=new Map,a=[],n=[],u=C=>{n.push(C)},A=()=>{n.length>0&&a.push(n.join("")),n=[]},p=C=>{u(C),A()},h=(C,I,v)=>{let b=JSON.stringify({type:C,fd:I}),E=o.get(b);typeof E>"u"&&o.set(b,E=[]),E.push(v)};for(let C of t){let I=!1;switch(C.type){case"redirection":{let v=await kd(C.args,e,r);for(let b of v)h(C.subtype,C.fd,b)}break;case"argument":for(let v of C.segments)switch(v.type){case"text":u(v.text);break;case"glob":u(v.pattern),I=!0;break;case"shell":{let b=await got(v.shell,e,r);if(v.quoted)u(b);else{let E=Mx(b);for(let F=0;F"u")throw new Error("Assertion failed: Expected a glob pattern to have been set");let b=await e.glob.match(v,{cwd:r.cwd,baseFs:e.baseFs});if(b.length===0){let E=oU(v)?". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22":"";throw new al(`No matches found: "${v}"${E}`)}for(let E of b.sort())p(E)}}if(o.size>0){let C=[];for(let[I,v]of o.entries())C.splice(C.length,0,I,String(v.length),...v);a.splice(0,0,"__ysh_set_redirects",...C,"--")}return a}function k1(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let o=fe.fromPortablePath(r.cwd),a=r.environment;typeof a.PWD<"u"&&(a={...a,PWD:o});let[n,...u]=t;if(n==="command")return ece(u[0],u.slice(1),e,{cwd:o,env:a});let A=e.builtins.get(n);if(typeof A>"u")throw new Error(`Assertion failed: A builtin should exist for "${n}"`);return tce(async({stdin:p,stdout:h,stderr:C})=>{let{stdin:I,stdout:v,stderr:b}=r;r.stdin=p,r.stdout=h,r.stderr=C;try{return await A(u,e,r)}finally{r.stdin=I,r.stdout=v,r.stderr=b}})}function mot(t,e,r){return o=>{let a=new ll.PassThrough,n=_x(t,e,Ux(r,{stdin:a}));return{stdin:a,promise:n}}}function yot(t,e,r){return o=>{let a=new ll.PassThrough,n=_x(t,e,r);return{stdin:a,promise:n}}}function sce(t,e,r,o){if(e.length===0)return t;{let a;do a=String(Math.random());while(Object.hasOwn(o.procedures,a));return o.procedures={...o.procedures},o.procedures[a]=t,k1([...e,"__ysh_run_procedure",a],r,o)}}async function oce(t,e,r){let o=t,a=null,n=null;for(;o;){let u=o.then?{...r}:r,A;switch(o.type){case"command":{let p=await kd(o.args,e,r),h=await ice(o.envs,e,r);A=o.envs.length?k1(p,e,Ux(u,{environment:h})):k1(p,e,u)}break;case"subshell":{let p=await kd(o.args,e,r),h=mot(o.subshell,e,u);A=sce(h,p,e,u)}break;case"group":{let p=await kd(o.args,e,r),h=yot(o.group,e,u);A=sce(h,p,e,u)}break;case"envs":{let p=await ice(o.envs,e,r);u.environment={...u.environment,...p},A=k1(["true"],e,u)}break}if(typeof A>"u")throw new Error("Assertion failed: An action should have been generated");if(a===null)n=Ox(A,{stdin:new Jl(u.stdin),stdout:new Jl(u.stdout),stderr:new Jl(u.stderr)});else{if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(a){case"|":n=n.pipeTo(A,1);break;case"|&":n=n.pipeTo(A,3);break}}o.then?(a=o.then.type,o=o.then.chain):o=null}if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await n.run()}async function Eot(t,e,r,{background:o=!1}={}){function a(n){let u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[n%u.length];return ace.default.hex(A)}if(o){let n=r.nextBackgroundJobIndex++,u=a(n),A=`[${n}]`,p=u(A),{stdout:h,stderr:C}=rce(r,{prefix:p});return r.backgroundJobs.push(oce(t,e,Ux(r,{stdout:h,stderr:C})).catch(I=>C.write(`${I.message} -`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${p}, '${u(cy(t))}' has ended -`)})),0}return await oce(t,e,r)}async function Cot(t,e,r,{background:o=!1}={}){let a,n=A=>{a=A,r.variables["?"]=String(A)},u=async A=>{try{return await Eot(A.chain,e,r,{background:o&&typeof A.then>"u"})}catch(p){if(!(p instanceof al))throw p;return r.stderr.write(`${p.message} -`),1}};for(n(await u(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":a===0&&n(await u(t.then.line));break;case"||":a!==0&&n(await u(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return a}async function _x(t,e,r){let o=r.backgroundJobs;r.backgroundJobs=[];let a=0;for(let{command:n,type:u}of t){if(a=await Cot(n,e,r,{background:u==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(a)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=o,a}function Ace(t){switch(t.type){case"variable":return t.name==="@"||t.name==="#"||t.name==="*"||Number.isFinite(parseInt(t.name,10))||"defaultValue"in t&&!!t.defaultValue&&t.defaultValue.some(e=>Q1(e))||"alternativeValue"in t&&!!t.alternativeValue&&t.alternativeValue.some(e=>Q1(e));case"arithmetic":return AU(t.arithmetic);case"shell":return fU(t.shell);default:return!1}}function Q1(t){switch(t.type){case"redirection":return t.args.some(e=>Q1(e));case"argument":return t.segments.some(e=>Ace(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function AU(t){switch(t.type){case"variable":return Ace(t);case"number":return!1;default:return AU(t.left)||AU(t.right)}}function fU(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let o;switch(r.type){case"subshell":o=fU(r.subshell);break;case"command":o=r.envs.some(a=>a.args.some(n=>Q1(n)))||r.args.some(a=>Q1(a));break}if(o)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function RE(t,e=[],{baseFs:r=new Tn,builtins:o={},cwd:a=fe.toPortablePath(process.cwd()),env:n=process.env,stdin:u=process.stdin,stdout:A=process.stdout,stderr:p=process.stderr,variables:h={},glob:C=Nx}={}){let I={};for(let[E,F]of Object.entries(n))typeof F<"u"&&(I[E]=F);let v=new Map(hot);for(let[E,F]of Object.entries(o))v.set(E,F);u===null&&(u=new ll.PassThrough,u.end());let b=ND(t,C);if(!fU(b)&&b.length>0&&e.length>0){let{command:E}=b[b.length-1];for(;E.then;)E=E.then.line;let F=E.chain;for(;F.then;)F=F.then.chain;F.type==="command"&&(F.args=F.args.concat(e.map(N=>({type:"argument",segments:[{type:"text",text:N}]}))))}return await _x(b,{args:e,baseFs:r,builtins:v,initialStdin:u,initialStdout:A,initialStderr:p,glob:C},{cwd:a,environment:I,exitCode:null,procedures:{},stdin:u,stdout:A,stderr:p,variables:Object.assign({},h,{["?"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var ace,lce,ll,cce,hot,dot,x1=yt(()=>{Pt();Ll();ace=$e(IL()),lce=Be("os"),ll=Be("stream"),cce=Be("timers/promises");Yle();Wle();Jle();uU();uU();hot=new Map([["cd",async([t=(0,lce.homedir)(),...e],r,o)=>{let a=V.resolve(o.cwd,fe.toPortablePath(t));if(!(await r.baseFs.statPromise(a).catch(u=>{throw u.code==="ENOENT"?new al(`cd: no such file or directory: ${t}`):u})).isDirectory())throw new al(`cd: not a directory: ${t}`);return o.cwd=a,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${fe.fromPortablePath(r.cwd)} -`),0)],[":",async(t,e,r)=>0],["true",async(t,e,r)=>0],["false",async(t,e,r)=>1],["exit",async([t,...e],r,o)=>o.exitCode=parseInt(t??o.variables["?"],10)],["echo",async(t,e,r)=>(r.stdout.write(`${t.join(" ")} -`),0)],["sleep",async([t],e,r)=>{if(typeof t>"u")throw new al("sleep: missing operand");let o=Number(t);if(Number.isNaN(o))throw new al(`sleep: invalid time interval '${t}'`);return await(0,cce.setTimeout)(1e3*o,0)}],["__ysh_run_procedure",async(t,e,r)=>{let o=r.procedures[t[0]];return await Ox(o,{stdin:new Jl(r.stdin),stdout:new Jl(r.stdout),stderr:new Jl(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let o=r.stdin,a=r.stdout,n=r.stderr,u=[],A=[],p=[],h=0;for(;t[h]!=="--";){let I=t[h++],{type:v,fd:b}=JSON.parse(I),E=z=>{switch(b){case null:case 0:u.push(z);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},F=z=>{switch(b){case null:case 1:A.push(z);break;case 2:p.push(z);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},N=Number(t[h++]),U=h+N;for(let z=h;ze.baseFs.createReadStream(V.resolve(r.cwd,fe.toPortablePath(t[z]))));break;case"<<<":E(()=>{let te=new ll.PassThrough;return process.nextTick(()=>{te.write(`${t[z]} -`),te.end()}),te});break;case"<&":E(()=>nce(Number(t[z]),1,r));break;case">":case">>":{let te=V.resolve(r.cwd,fe.toPortablePath(t[z]));F(te==="/dev/null"?new ll.Writable({autoDestroy:!0,emitClose:!0,write(le,pe,ue){setImmediate(ue)}}):e.baseFs.createWriteStream(te,v===">>"?{flags:"a"}:void 0))}break;case">&":F(nce(Number(t[z]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${v}"`)}}if(u.length>0){let I=new ll.PassThrough;o=I;let v=b=>{if(b===u.length)I.end();else{let E=u[b]();E.pipe(I,{end:!1}),E.on("end",()=>{v(b+1)})}};v(0)}if(A.length>0){let I=new ll.PassThrough;a=I;for(let v of A)I.pipe(v)}if(p.length>0){let I=new ll.PassThrough;n=I;for(let v of p)I.pipe(v)}let C=await Ox(k1(t.slice(h+1),e,r),{stdin:new Jl(o),stdout:new Jl(a),stderr:new Jl(n)}).run();return await Promise.all(A.map(I=>new Promise((v,b)=>{I.on("error",E=>{b(E)}),I.on("close",()=>{v()}),I.end()}))),await Promise.all(p.map(I=>new Promise((v,b)=>{I.on("error",E=>{b(E)}),I.on("close",()=>{v()}),I.end()}))),C}]]);dot={addition:(t,e)=>t+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)}});var Hx=_((JMt,fce)=>{function wot(t,e){for(var r=-1,o=t==null?0:t.length,a=Array(o);++r{var pce=fd(),Iot=Hx(),Bot=Hl(),vot=fE(),Dot=1/0,hce=pce?pce.prototype:void 0,gce=hce?hce.toString:void 0;function dce(t){if(typeof t=="string")return t;if(Bot(t))return Iot(t,dce)+"";if(vot(t))return gce?gce.call(t):"";var e=t+"";return e=="0"&&1/t==-Dot?"-0":e}mce.exports=dce});var R1=_((ZMt,Ece)=>{var Pot=yce();function Sot(t){return t==null?"":Pot(t)}Ece.exports=Sot});var pU=_(($Mt,Cce)=>{function xot(t,e,r){var o=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<0&&(r+=a),a=e>r?0:r-e>>>0,e>>>=0;for(var n=Array(a);++o{var bot=pU();function kot(t,e,r){var o=t.length;return r=r===void 0?o:r,!e&&r>=o?t:bot(t,e,r)}wce.exports=kot});var hU=_((t4t,Bce)=>{var Qot="\\ud800-\\udfff",Fot="\\u0300-\\u036f",Rot="\\ufe20-\\ufe2f",Tot="\\u20d0-\\u20ff",Lot=Fot+Rot+Tot,Not="\\ufe0e\\ufe0f",Oot="\\u200d",Mot=RegExp("["+Oot+Qot+Lot+Not+"]");function Uot(t){return Mot.test(t)}Bce.exports=Uot});var Dce=_((r4t,vce)=>{function _ot(t){return t.split("")}vce.exports=_ot});var Rce=_((n4t,Fce)=>{var Pce="\\ud800-\\udfff",Hot="\\u0300-\\u036f",jot="\\ufe20-\\ufe2f",qot="\\u20d0-\\u20ff",Got=Hot+jot+qot,Yot="\\ufe0e\\ufe0f",Wot="["+Pce+"]",gU="["+Got+"]",dU="\\ud83c[\\udffb-\\udfff]",Kot="(?:"+gU+"|"+dU+")",Sce="[^"+Pce+"]",xce="(?:\\ud83c[\\udde6-\\uddff]){2}",bce="[\\ud800-\\udbff][\\udc00-\\udfff]",Vot="\\u200d",kce=Kot+"?",Qce="["+Yot+"]?",zot="(?:"+Vot+"(?:"+[Sce,xce,bce].join("|")+")"+Qce+kce+")*",Jot=Qce+kce+zot,Xot="(?:"+[Sce+gU+"?",gU,xce,bce,Wot].join("|")+")",Zot=RegExp(dU+"(?="+dU+")|"+Xot+Jot,"g");function $ot(t){return t.match(Zot)||[]}Fce.exports=$ot});var Lce=_((i4t,Tce)=>{var eat=Dce(),tat=hU(),rat=Rce();function nat(t){return tat(t)?rat(t):eat(t)}Tce.exports=nat});var Oce=_((s4t,Nce)=>{var iat=Ice(),sat=hU(),oat=Lce(),aat=R1();function lat(t){return function(e){e=aat(e);var r=sat(e)?oat(e):void 0,o=r?r[0]:e.charAt(0),a=r?iat(r,1).join(""):e.slice(1);return o[t]()+a}}Nce.exports=lat});var Uce=_((o4t,Mce)=>{var cat=Oce(),uat=cat("toUpperCase");Mce.exports=uat});var mU=_((a4t,_ce)=>{var Aat=R1(),fat=Uce();function pat(t){return fat(Aat(t).toLowerCase())}_ce.exports=pat});var Hce=_((l4t,jx)=>{function hat(){var t=0,e=1,r=2,o=3,a=4,n=5,u=6,A=7,p=8,h=9,C=10,I=11,v=12,b=13,E=14,F=15,N=16,U=17,z=0,te=1,le=2,pe=3,ue=4;function ye(g,Ee){return 55296<=g.charCodeAt(Ee)&&g.charCodeAt(Ee)<=56319&&56320<=g.charCodeAt(Ee+1)&&g.charCodeAt(Ee+1)<=57343}function ae(g,Ee){Ee===void 0&&(Ee=0);var De=g.charCodeAt(Ee);if(55296<=De&&De<=56319&&Ee=1){var ce=g.charCodeAt(Ee-1),ne=De;return 55296<=ce&&ce<=56319?(ce-55296)*1024+(ne-56320)+65536:ne}return De}function Ie(g,Ee,De){var ce=[g].concat(Ee).concat([De]),ne=ce[ce.length-2],ee=De,we=ce.lastIndexOf(E);if(we>1&&ce.slice(1,we).every(function(H){return H==o})&&[o,b,U].indexOf(g)==-1)return le;var be=ce.lastIndexOf(a);if(be>0&&ce.slice(1,be).every(function(H){return H==a})&&[v,a].indexOf(ne)==-1)return ce.filter(function(H){return H==a}).length%2==1?pe:ue;if(ne==t&&ee==e)return z;if(ne==r||ne==t||ne==e)return ee==E&&Ee.every(function(H){return H==o})?le:te;if(ee==r||ee==t||ee==e)return te;if(ne==u&&(ee==u||ee==A||ee==h||ee==C))return z;if((ne==h||ne==A)&&(ee==A||ee==p))return z;if((ne==C||ne==p)&&ee==p)return z;if(ee==o||ee==F)return z;if(ee==n)return z;if(ne==v)return z;var ht=ce.indexOf(o)!=-1?ce.lastIndexOf(o)-1:ce.length-2;return[b,U].indexOf(ce[ht])!=-1&&ce.slice(ht+1,-1).every(function(H){return H==o})&&ee==E||ne==F&&[N,U].indexOf(ee)!=-1?z:Ee.indexOf(a)!=-1?le:ne==a&&ee==a?z:te}this.nextBreak=function(g,Ee){if(Ee===void 0&&(Ee=0),Ee<0)return 0;if(Ee>=g.length-1)return g.length;for(var De=Fe(ae(g,Ee)),ce=[],ne=Ee+1;ne{var gat=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,qx;function dat(){if(qx)return qx;if(typeof Intl.Segmenter<"u"){let t=new Intl.Segmenter("en",{granularity:"grapheme"});return qx=e=>Array.from(t.segment(e),({segment:r})=>r)}else{let t=Hce(),e=new t;return qx=r=>e.splitGraphemes(r)}}jce.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let o=r-e,a="",n=0,u=0;for(;t.length>0;){let A=t.match(gat)||[t,t,void 0],p=dat()(A[1]),h=Math.min(e-n,p.length);p=p.slice(h);let C=Math.min(o-u,p.length);a+=p.slice(0,C).join(""),n+=h,u+=C,typeof A[2]<"u"&&(a+=A[2]),t=t.slice(A[0].length)}return a}});var tn,T1=yt(()=>{tn=process.env.YARN_IS_TEST_ENV?"0.0.0":"4.0.0"});function zce(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let a=Wu(t===null?0:t);return!r&&t===null?_t(e,a,"grey"):a}function yU(t,{configuration:e,json:r}){let o=zce(t,{configuration:e,json:r});if(!o||t===null||t===0)return o;let a=wr[t],n=`https://yarnpkg.com/advanced/error-codes#${o}---${a}`.toLowerCase();return Xy(e,o,n)}async function LE({configuration:t,stdout:e,forceError:r},o){let a=await Lt.start({configuration:t,stdout:e,includeFooter:!1},async n=>{let u=!1,A=!1;for(let p of o)typeof p.option<"u"&&(p.error||r?(A=!0,n.reportError(50,p.message)):(u=!0,n.reportWarning(50,p.message)),p.callback?.());u&&!A&&n.reportSeparator()});return a.hasErrors()?a.exitCode():null}var Kce,Gx,mat,Gce,Yce,uh,Vce,Wce,yat,Eat,Yx,Cat,Lt,L1=yt(()=>{Kce=$e(qce()),Gx=$e($g());fP();Yl();T1();ql();mat="\xB7",Gce=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Yce=80,uh=Gx.default.GITHUB_ACTIONS?{start:t=>`::group::${t} -`,end:t=>`::endgroup:: -`}:Gx.default.TRAVIS?{start:t=>`travis_fold:start:${t} -`,end:t=>`travis_fold:end:${t} -`}:Gx.default.GITLAB?{start:t=>`section_start:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}[collapsed=true]\r\x1B[0K${t} -`,end:t=>`section_end:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}\r\x1B[0K`}:null,Vce=uh!==null,Wce=new Date,yat=["iTerm.app","Apple_Terminal","WarpTerminal","vscode"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,Eat=t=>t,Yx=Eat({patrick:{date:[17,3],chars:["\u{1F340}","\u{1F331}"],size:40},simba:{date:[19,7],chars:["\u{1F981}","\u{1F334}"],size:40},jack:{date:[31,10],chars:["\u{1F383}","\u{1F987}"],size:40},hogsfather:{date:[31,12],chars:["\u{1F389}","\u{1F384}"],size:40},default:{chars:["=","-"],size:80}}),Cat=yat&&Object.keys(Yx).find(t=>{let e=Yx[t];return!(e.date&&(e.date[0]!==Wce.getDate()||e.date[1]!==Wce.getMonth()+1))})||"default";Lt=class extends Xs{constructor({configuration:r,stdout:o,json:a=!1,forceSectionAlignment:n=!1,includeNames:u=!0,includePrefix:A=!0,includeFooter:p=!0,includeLogs:h=!a,includeInfos:C=h,includeWarnings:I=h}){super();this.uncommitted=new Set;this.warningCount=0;this.errorCount=0;this.timerFooter=[];this.startTime=Date.now();this.indent=0;this.level=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;if(zI(this,{configuration:r}),this.configuration=r,this.forceSectionAlignment=n,this.includeNames=u,this.includePrefix=A,this.includeFooter=p,this.includeInfos=C,this.includeWarnings=I,this.json=a,this.stdout=o,r.get("enableProgressBars")&&!a&&o.isTTY&&o.columns>22){let v=r.get("progressBarStyle")||Cat;if(!Object.hasOwn(Yx,v))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=Yx[v];let b=Math.min(this.getRecommendedLength(),80);this.progressMaxScaledSize=Math.floor(this.progressStyle.size*b/80)}}static async start(r,o){let a=new this(r),n=process.emitWarning;process.emitWarning=(u,A)=>{if(typeof u!="string"){let h=u;u=h.message,A=A??h.name}let p=typeof A<"u"?`${A}: ${u}`:u;a.reportWarning(0,p)},r.includeVersion&&a.reportInfo(0,md(r.configuration,`Yarn ${tn}`,2));try{await o(a)}catch(u){a.reportExceptionOnce(u)}finally{await a.finalize(),process.emitWarning=n}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}getRecommendedLength(){let o=this.progressStyle!==null?this.stdout.columns-1:super.getRecommendedLength();return Math.max(40,o-10-this.indent*2)}startSectionSync({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}async startSectionPromise({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return await n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}startTimerImpl(r,o,a){return{cb:typeof o=="function"?o:a,reportHeader:()=>{this.level+=1,this.reportInfo(null,`\u250C ${r}`),this.indent+=1,uh!==null&&!this.json&&this.includeInfos&&this.stdout.write(uh.start(r))},reportFooter:A=>{if(this.indent-=1,uh!==null&&!this.json&&this.includeInfos){this.stdout.write(uh.end(r));for(let p of this.timerFooter)p()}this.configuration.get("enableTimers")&&A>200?this.reportInfo(null,`\u2514 Completed in ${_t(this.configuration,A,Et.DURATION)}`):this.reportInfo(null,"\u2514 Completed"),this.level-=1},skipIfEmpty:(typeof o=="function"?{}:o).skipIfEmpty}}startTimerSync(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionSync(u,n)}async startTimerPromise(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionPromise(u,n)}reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(null,"")}reportInfo(r,o){if(!this.includeInfos)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"",u=`${this.formatPrefix(n,"blueBright")}${o}`;this.json?this.reportJson({type:"info",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(u)}reportWarning(r,o){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"warning",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"yellowBright")}${o}`)}reportError(r,o){this.errorCount+=1,this.timerFooter.push(()=>this.reportErrorImpl(r,o)),this.reportErrorImpl(r,o)}reportErrorImpl(r,o){this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"error",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"redBright")}${o}`,{truncate:!1})}reportFold(r,o){if(!uh)return;let a=`${uh.start(r)}${o}${uh.end(r)}`;this.timerFooter.push(()=>this.stdout.write(a))}reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(r.hasProgress&&r.hasTitle)throw new Error("Unimplemented: Progress bars can't have both progress and titles.");let o=!1,a=Promise.resolve().then(async()=>{let u={progress:r.hasProgress?0:void 0,title:r.hasTitle?"":void 0};this.progress.set(r,{definition:u,lastScaledSize:r.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:A,title:p}of r)o||u.progress===A&&u.title===p||(u.progress=A,u.title=p,this.refreshProgress());n()}),n=()=>{o||(o=!0,this.progress.delete(r),this.refreshProgress({delta:1}))};return{...a,stop:n}}reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>0?r="Failed with errors":this.warningCount>0?r="Done with warnings":r="Done";let o=_t(this.configuration,Date.now()-this.startTime,Et.DURATION),a=this.configuration.get("enableTimers")?`${r} in ${o}`:r;this.errorCount>0?this.reportError(0,a):this.warningCount>0?this.reportWarning(0,a):this.reportInfo(0,a)}writeLine(r,{truncate:o}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(r,{truncate:o})} -`),this.writeProgress()}writeLines(r,{truncate:o}={}){this.clearProgress({delta:r.length});for(let a of r)this.stdout.write(`${this.truncate(a,{truncate:o})} -`);this.writeProgress()}commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let o of r)o.committed=!0,o.action()}clearProgress({delta:r=0,clear:o=!1}){this.progressStyle!==null&&this.progress.size+r>0&&(this.stdout.write(`\x1B[${this.progress.size+r}A`),(r>0||o)&&this.stdout.write("\x1B[0J"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let r=Date.now();r-this.progressTime>Yce&&(this.progressFrame=(this.progressFrame+1)%Gce.length,this.progressTime=r);let o=Gce[this.progressFrame];for(let a of this.progress.values()){let n="";if(typeof a.lastScaledSize<"u"){let h=this.progressStyle.chars[0].repeat(a.lastScaledSize),C=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-a.lastScaledSize);n=` ${h}${C}`}let u=this.formatName(null),A=u?`${u}: `:"",p=a.definition.title?` ${a.definition.title}`:"";this.stdout.write(`${_t(this.configuration,"\u27A4","blueBright")} ${A}${o}${n}${p} -`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},Yce)}refreshProgress({delta:r=0,force:o=!1}={}){let a=!1,n=!1;if(o||this.progress.size===0)a=!0;else for(let u of this.progress.values()){let A=typeof u.definition.progress<"u"?Math.trunc(this.progressMaxScaledSize*u.definition.progress):void 0,p=u.lastScaledSize;u.lastScaledSize=A;let h=u.lastTitle;if(u.lastTitle=u.definition.title,A!==p||(n=h!==u.definition.title)){a=!0;break}}a&&(this.clearProgress({delta:r,clear:n}),this.writeProgress())}truncate(r,{truncate:o}={}){return this.progressStyle===null&&(o=!1),typeof o>"u"&&(o=this.configuration.get("preferTruncatedLines")),o&&(r=(0,Kce.default)(r,0,this.stdout.columns-1)),r}formatName(r){return this.includeNames?zce(r,{configuration:this.configuration,json:this.json}):""}formatPrefix(r,o){return this.includePrefix?`${_t(this.configuration,"\u27A4",o)} ${r}${this.formatIndent()}`:""}formatNameWithHyperlink(r){return this.includeNames?yU(r,{configuration:this.configuration,json:this.json}):""}formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ".repeat(this.indent):`${mat} `}}});var un={};Vt(un,{PackageManager:()=>Zce,detectPackageManager:()=>$ce,executePackageAccessibleBinary:()=>iue,executePackageScript:()=>Wx,executePackageShellcode:()=>EU,executeWorkspaceAccessibleBinary:()=>Sat,executeWorkspaceLifecycleScript:()=>rue,executeWorkspaceScript:()=>tue,getPackageAccessibleBinaries:()=>Kx,getWorkspaceAccessibleBinaries:()=>nue,hasPackageScript:()=>vat,hasWorkspaceScript:()=>CU,isNodeScript:()=>wU,makeScriptEnv:()=>N1,maybeExecuteWorkspaceLifecycleScript:()=>Pat,prepareExternalProject:()=>Bat});async function Ah(t,e,r,o=[]){if(process.platform==="win32"){let a=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${o.map(n=>`"${n.replace('"','""')}"`).join(" ")} %*`;await oe.writeFilePromise(V.format({dir:t,name:e,ext:".cmd"}),a)}await oe.writeFilePromise(V.join(t,e),`#!/bin/sh -exec "${r}" ${o.map(a=>`'${a.replace(/'/g,`'"'"'`)}'`).join(" ")} "$@" -`,{mode:493})}async function $ce(t){let e=await Ot.tryFind(t);if(e?.packageManager){let o=US(e.packageManager);if(o?.name){let a=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[n]=o.reference.split(".");switch(o.name){case"yarn":return{packageManagerField:!0,packageManager:Number(n)===1?"Yarn Classic":"Yarn",reason:a};case"npm":return{packageManagerField:!0,packageManager:"npm",reason:a};case"pnpm":return{packageManagerField:!0,packageManager:"pnpm",reason:a}}}}let r;try{r=await oe.readFilePromise(V.join(t,dr.lockfile),"utf8")}catch{}return r!==void 0?r.match(/^__metadata:$/m)?{packageManager:"Yarn",reason:'"__metadata" key found in yarn.lock'}:{packageManager:"Yarn Classic",reason:'"__metadata" key not found in yarn.lock, must be a Yarn classic lockfile'}:oe.existsSync(V.join(t,"package-lock.json"))?{packageManager:"npm",reason:`found npm's "package-lock.json" lockfile`}:oe.existsSync(V.join(t,"pnpm-lock.yaml"))?{packageManager:"pnpm",reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function N1({project:t,locator:e,binFolder:r,ignoreCorepack:o,lifecycleScript:a,baseEnv:n=t?.configuration.env??process.env}){let u={};for(let[C,I]of Object.entries(n))typeof I<"u"&&(u[C.toLowerCase()!=="path"?C:"PATH"]=I);let A=fe.fromPortablePath(r);u.BERRY_BIN_FOLDER=fe.fromPortablePath(A);let p=process.env.COREPACK_ROOT&&!o?fe.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([Ah(r,"node",process.execPath),...tn!==null?[Ah(r,"run",process.execPath,[p,"run"]),Ah(r,"yarn",process.execPath,[p]),Ah(r,"yarnpkg",process.execPath,[p]),Ah(r,"node-gyp",process.execPath,[p,"run","--top-level","node-gyp"])]:[]]),t&&(u.INIT_CWD=fe.cwd(),u.PROJECT_CWD=fe.fromPortablePath(t.cwd)),u.PATH=u.PATH?`${A}${fe.delimiter}${u.PATH}`:`${A}`,u.npm_execpath=`${A}${fe.sep}yarn`,u.npm_node_execpath=`${A}${fe.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let C=t.tryWorkspaceByLocator(e),I=C?C.manifest.version??"":t.storedPackages.get(e.locatorHash).version??"";u.npm_package_name=fn(e),u.npm_package_version=I;let v;if(C)v=C.cwd;else{let b=t.storedPackages.get(e.locatorHash);if(!b)throw new Error(`Package for ${jr(t.configuration,e)} not found in the project`);let E=t.configuration.getLinkers(),F={project:t,report:new Lt({stdout:new fh.PassThrough,configuration:t.configuration})},N=E.find(U=>U.supportsPackage(b,F));if(!N)throw new Error(`The package ${jr(t.configuration,b)} isn't supported by any of the available linkers`);v=await N.findPackageLocation(b,F)}u.npm_package_json=fe.fromPortablePath(V.join(v,dr.manifest))}let h=tn!==null?`yarn/${tn}`:`yarn/${zp("@yarnpkg/core").version}-core`;return u.npm_config_user_agent=`${h} npm/? node/${process.version} ${process.platform} ${process.arch}`,a&&(u.npm_lifecycle_event=a),t&&await t.configuration.triggerHook(C=>C.setupScriptEnvironment,t,u,async(C,I,v)=>await Ah(r,C,I,v)),u}async function Bat(t,e,{configuration:r,report:o,workspace:a=null,locator:n=null}){await Iat(async()=>{await oe.mktempPromise(async u=>{let A=V.join(u,"pack.log"),p=null,{stdout:h,stderr:C}=r.getSubprocessStreams(A,{prefix:fe.fromPortablePath(t),report:o}),I=n&&Hc(n)?e1(n):n,v=I?xa(I):"an external project";h.write(`Packing ${v} from sources -`);let b=await $ce(t),E;b!==null?(h.write(`Using ${b.packageManager} for bootstrap. Reason: ${b.reason} - -`),E=b.packageManager):(h.write(`No package manager configuration detected; defaulting to Yarn - -`),E="Yarn");let F=E==="Yarn"&&!b?.packageManagerField;await oe.mktempPromise(async N=>{let U=await N1({binFolder:N,ignoreCorepack:F}),te=new Map([["Yarn Classic",async()=>{let pe=a!==null?["workspace",a]:[],ue=V.join(t,dr.manifest),ye=await oe.readFilePromise(ue),ae=await Gc(process.execPath,[process.argv[1],"set","version","classic","--only-if-needed","--yarn-path"],{cwd:t,env:U,stdin:p,stdout:h,stderr:C,end:1});if(ae.code!==0)return ae.code;await oe.writeFilePromise(ue,ye),await oe.appendFilePromise(V.join(t,".npmignore"),`/.yarn -`),h.write(` -`),delete U.NODE_ENV;let Ie=await Gc("yarn",["install"],{cwd:t,env:U,stdin:p,stdout:h,stderr:C,end:1});if(Ie.code!==0)return Ie.code;h.write(` -`);let Fe=await Gc("yarn",[...pe,"pack","--filename",fe.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:C});return Fe.code!==0?Fe.code:0}],["Yarn",async()=>{let pe=a!==null?["workspace",a]:[];U.YARN_ENABLE_INLINE_BUILDS="1";let ue=V.join(t,dr.lockfile);await oe.existsPromise(ue)||await oe.writeFilePromise(ue,"");let ye=await Gc("yarn",[...pe,"pack","--install-if-needed","--filename",fe.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:C});return ye.code!==0?ye.code:0}],["npm",async()=>{if(a!==null){let Ee=new fh.PassThrough,De=Ky(Ee);Ee.pipe(h,{end:!1});let ce=await Gc("npm",["--version"],{cwd:t,env:U,stdin:p,stdout:Ee,stderr:C,end:0});if(Ee.end(),ce.code!==0)return h.end(),C.end(),ce.code;let ne=(await De).toString().trim();if(!xf(ne,">=7.x")){let ee=eA(null,"npm"),we=In(ee,ne),be=In(ee,">=7.x");throw new Error(`Workspaces aren't supported by ${qn(r,we)}; please upgrade to ${qn(r,be)} (npm has been detected as the primary package manager for ${_t(r,t,Et.PATH)})`)}}let pe=a!==null?["--workspace",a]:[];delete U.npm_config_user_agent,delete U.npm_config_production,delete U.NPM_CONFIG_PRODUCTION,delete U.NODE_ENV;let ue=await Gc("npm",["install","--legacy-peer-deps"],{cwd:t,env:U,stdin:p,stdout:h,stderr:C,end:1});if(ue.code!==0)return ue.code;let ye=new fh.PassThrough,ae=Ky(ye);ye.pipe(h);let Ie=await Gc("npm",["pack","--silent",...pe],{cwd:t,env:U,stdin:p,stdout:ye,stderr:C});if(Ie.code!==0)return Ie.code;let Fe=(await ae).toString().trim().replace(/^.*\n/s,""),g=V.resolve(t,fe.toPortablePath(Fe));return await oe.renamePromise(g,e),0}]]).get(E);if(typeof te>"u")throw new Error("Assertion failed: Unsupported workflow");let le=await te();if(!(le===0||typeof le>"u"))throw oe.detachTemp(u),new Jt(58,`Packing the package failed (exit code ${le}, logs can be found here: ${_t(r,A,Et.PATH)})`)})})})}async function vat(t,e,{project:r}){let o=r.tryWorkspaceByLocator(t);if(o!==null)return CU(o,e);let a=r.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r.configuration,t)} not found in the project`);return await zl.openPromise(async n=>{let u=r.configuration,A=r.configuration.getLinkers(),p={project:r,report:new Lt({stdout:new fh.PassThrough,configuration:u})},h=A.find(b=>b.supportsPackage(a,p));if(!h)throw new Error(`The package ${jr(r.configuration,a)} isn't supported by any of the available linkers`);let C=await h.findPackageLocation(a,p),I=new gn(C,{baseFs:n});return(await Ot.find(Bt.dot,{baseFs:I})).scripts.has(e)})}async function Wx(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{manifest:h,env:C,cwd:I}=await eue(t,{project:a,binFolder:p,cwd:o,lifecycleScript:e}),v=h.scripts.get(e);if(typeof v>"u")return 1;let b=async()=>await RE(v,r,{cwd:I,env:C,stdin:n,stdout:u,stderr:A});return await(await a.configuration.reduceHook(F=>F.wrapScriptExecution,b,a,t,e,{script:v,args:r,cwd:I,env:C,stdin:n,stdout:u,stderr:A}))()})}async function EU(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{env:h,cwd:C}=await eue(t,{project:a,binFolder:p,cwd:o});return await RE(e,r,{cwd:C,env:h,stdin:n,stdout:u,stderr:A})})}async function Dat(t,{binFolder:e,cwd:r,lifecycleScript:o}){let a=await N1({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:o});return await IU(e,await nue(t)),typeof r>"u"&&(r=V.dirname(await oe.realpathPromise(V.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:a,cwd:r}}async function eue(t,{project:e,binFolder:r,cwd:o,lifecycleScript:a}){let n=e.tryWorkspaceByLocator(t);if(n!==null)return Dat(n,{binFolder:r,cwd:o,lifecycleScript:a});let u=e.storedPackages.get(t.locatorHash);if(!u)throw new Error(`Package for ${jr(e.configuration,t)} not found in the project`);return await zl.openPromise(async A=>{let p=e.configuration,h=e.configuration.getLinkers(),C={project:e,report:new Lt({stdout:new fh.PassThrough,configuration:p})},I=h.find(N=>N.supportsPackage(u,C));if(!I)throw new Error(`The package ${jr(e.configuration,u)} isn't supported by any of the available linkers`);let v=await N1({project:e,locator:t,binFolder:r,lifecycleScript:a});await IU(r,await Kx(t,{project:e}));let b=await I.findPackageLocation(u,C),E=new gn(b,{baseFs:A}),F=await Ot.find(Bt.dot,{baseFs:E});return typeof o>"u"&&(o=b),{manifest:F,binFolder:r,env:v,cwd:o}})}async function tue(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u}){return await Wx(t.anchoredLocator,e,r,{cwd:o,project:t.project,stdin:a,stdout:n,stderr:u})}function CU(t,e){return t.manifest.scripts.has(e)}async function rue(t,e,{cwd:r,report:o}){let{configuration:a}=t.project,n=null;await oe.mktempPromise(async u=>{let A=V.join(u,`${e}.log`),p=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${fe.fromPortablePath(t.cwd)}") -`,{stdout:h,stderr:C}=a.getSubprocessStreams(A,{report:o,prefix:jr(a,t.anchoredLocator),header:p});o.reportInfo(36,`Calling the "${e}" lifecycle script`);let I=await tue(t,e,[],{cwd:r,stdin:n,stdout:h,stderr:C});if(h.end(),C.end(),I!==0)throw oe.detachTemp(u),new Jt(36,`${(0,Jce.default)(e)} script failed (exit code ${_t(a,I,Et.NUMBER)}, logs can be found here: ${_t(a,A,Et.PATH)}); run ${_t(a,`yarn ${e}`,Et.CODE)} to investigate`)})}async function Pat(t,e,r){CU(t,e)&&await rue(t,e,r)}function wU(t){let e=V.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0;if(e===".exe"||e===".bin")return!1;let r=Buffer.alloc(4),o;try{o=oe.openSync(t,"r")}catch{return!0}try{oe.readSync(o,r,0,r.length,0)}finally{oe.closeSync(o)}let a=r.readUint32BE();return!(a===3405691582||a===3489328638||a===2135247942||(a&4294901760)===1297743872)}async function Kx(t,{project:e}){let r=e.configuration,o=new Map,a=e.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r,t)} not found in the project`);let n=new fh.Writable,u=r.getLinkers(),A={project:e,report:new Lt({configuration:r,stdout:n})},p=new Set([t.locatorHash]);for(let C of a.dependencies.values()){let I=e.storedResolutions.get(C.descriptorHash);if(!I)throw new Error(`Assertion failed: The resolution (${qn(r,C)}) should have been registered`);p.add(I)}let h=await Promise.all(Array.from(p,async C=>{let I=e.storedPackages.get(C);if(!I)throw new Error(`Assertion failed: The package (${C}) should have been registered`);if(I.bin.size===0)return sl.skip;let v=u.find(E=>E.supportsPackage(I,A));if(!v)return sl.skip;let b=null;try{b=await v.findPackageLocation(I,A)}catch(E){if(E.code==="LOCATOR_NOT_INSTALLED")return sl.skip;throw E}return{dependency:I,packageLocation:b}}));for(let C of h){if(C===sl.skip)continue;let{dependency:I,packageLocation:v}=C;for(let[b,E]of I.bin){let F=V.resolve(v,E);o.set(b,[I,fe.fromPortablePath(F),wU(F)])}}return o}async function nue(t){return await Kx(t.anchoredLocator,{project:t.project})}async function IU(t,e){await Promise.all(Array.from(e,([r,[,o,a]])=>a?Ah(t,r,process.execPath,[o]):Ah(t,r,o,[])))}async function iue(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A,nodeArgs:p=[],packageAccessibleBinaries:h}){h??=await Kx(t,{project:a});let C=h.get(e);if(!C)throw new Error(`Binary not found (${e}) for ${jr(a.configuration,t)}`);return await oe.mktempPromise(async I=>{let[,v]=C,b=await N1({project:a,locator:t,binFolder:I});await IU(b.BERRY_BIN_FOLDER,h);let E=wU(fe.toPortablePath(v))?Gc(process.execPath,[...p,v,...r],{cwd:o,env:b,stdin:n,stdout:u,stderr:A}):Gc(v,r,{cwd:o,env:b,stdin:n,stdout:u,stderr:A}),F;try{F=await E}finally{await oe.removePromise(b.BERRY_BIN_FOLDER)}return F.code})}async function Sat(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A}){return await iue(t.anchoredLocator,e,r,{project:t.project,cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A})}var Jce,Xce,fh,Zce,wat,Iat,BU=yt(()=>{Pt();Pt();nA();x1();Jce=$e(mU()),Xce=$e(nd()),fh=Be("stream");AE();Yl();L1();T1();Dx();ql();jl();bf();xo();Zce=(a=>(a.Yarn1="Yarn Classic",a.Yarn2="Yarn",a.Npm="npm",a.Pnpm="pnpm",a))(Zce||{});wat=2,Iat=(0,Xce.default)(wat)});var NE=_((k4t,oue)=>{"use strict";var sue=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"]]);oue.exports=t=>t?Object.keys(t).map(e=>[sue.has(e)?sue.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var ME=_((Q4t,gue)=>{"use strict";var aue=typeof process=="object"&&process?process:{stdout:null,stderr:null},xat=Be("events"),lue=Be("stream"),cue=Be("string_decoder").StringDecoder,Nf=Symbol("EOF"),Of=Symbol("maybeEmitEnd"),ph=Symbol("emittedEnd"),Vx=Symbol("emittingEnd"),O1=Symbol("emittedError"),zx=Symbol("closed"),uue=Symbol("read"),Jx=Symbol("flush"),Aue=Symbol("flushChunk"),ka=Symbol("encoding"),Mf=Symbol("decoder"),Xx=Symbol("flowing"),M1=Symbol("paused"),OE=Symbol("resume"),Rs=Symbol("bufferLength"),vU=Symbol("bufferPush"),DU=Symbol("bufferShift"),Fo=Symbol("objectMode"),Ro=Symbol("destroyed"),PU=Symbol("emitData"),fue=Symbol("emitEnd"),SU=Symbol("emitEnd2"),Uf=Symbol("async"),U1=t=>Promise.resolve().then(t),pue=global._MP_NO_ITERATOR_SYMBOLS_!=="1",bat=pue&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),kat=pue&&Symbol.iterator||Symbol("iterator not implemented"),Qat=t=>t==="end"||t==="finish"||t==="prefinish",Fat=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Rat=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),Zx=class{constructor(e,r,o){this.src=e,this.dest=r,this.opts=o,this.ondrain=()=>e[OE](),r.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},xU=class extends Zx{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,o){super(e,r,o),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}};gue.exports=class hue extends lue{constructor(e){super(),this[Xx]=!1,this[M1]=!1,this.pipes=[],this.buffer=[],this[Fo]=e&&e.objectMode||!1,this[Fo]?this[ka]=null:this[ka]=e&&e.encoding||null,this[ka]==="buffer"&&(this[ka]=null),this[Uf]=e&&!!e.async||!1,this[Mf]=this[ka]?new cue(this[ka]):null,this[Nf]=!1,this[ph]=!1,this[Vx]=!1,this[zx]=!1,this[O1]=null,this.writable=!0,this.readable=!0,this[Rs]=0,this[Ro]=!1}get bufferLength(){return this[Rs]}get encoding(){return this[ka]}set encoding(e){if(this[Fo])throw new Error("cannot set encoding in objectMode");if(this[ka]&&e!==this[ka]&&(this[Mf]&&this[Mf].lastNeed||this[Rs]))throw new Error("cannot change encoding");this[ka]!==e&&(this[Mf]=e?new cue(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[Mf].write(r)))),this[ka]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Fo]}set objectMode(e){this[Fo]=this[Fo]||!!e}get async(){return this[Uf]}set async(e){this[Uf]=this[Uf]||!!e}write(e,r,o){if(this[Nf])throw new Error("write after end");if(this[Ro])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(o=r,r="utf8"),r||(r="utf8");let a=this[Uf]?U1:n=>n();return!this[Fo]&&!Buffer.isBuffer(e)&&(Rat(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):Fat(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),this[Fo]?(this.flowing&&this[Rs]!==0&&this[Jx](!0),this.flowing?this.emit("data",e):this[vU](e),this[Rs]!==0&&this.emit("readable"),o&&a(o),this.flowing):e.length?(typeof e=="string"&&!(r===this[ka]&&!this[Mf].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[ka]&&(e=this[Mf].write(e)),this.flowing&&this[Rs]!==0&&this[Jx](!0),this.flowing?this.emit("data",e):this[vU](e),this[Rs]!==0&&this.emit("readable"),o&&a(o),this.flowing):(this[Rs]!==0&&this.emit("readable"),o&&a(o),this.flowing)}read(e){if(this[Ro])return null;if(this[Rs]===0||e===0||e>this[Rs])return this[Of](),null;this[Fo]&&(e=null),this.buffer.length>1&&!this[Fo]&&(this.encoding?this.buffer=[this.buffer.join("")]:this.buffer=[Buffer.concat(this.buffer,this[Rs])]);let r=this[uue](e||null,this.buffer[0]);return this[Of](),r}[uue](e,r){return e===r.length||e===null?this[DU]():(this.buffer[0]=r.slice(e),r=r.slice(0,e),this[Rs]-=e),this.emit("data",r),!this.buffer.length&&!this[Nf]&&this.emit("drain"),r}end(e,r,o){return typeof e=="function"&&(o=e,e=null),typeof r=="function"&&(o=r,r="utf8"),e&&this.write(e,r),o&&this.once("end",o),this[Nf]=!0,this.writable=!1,(this.flowing||!this[M1])&&this[Of](),this}[OE](){this[Ro]||(this[M1]=!1,this[Xx]=!0,this.emit("resume"),this.buffer.length?this[Jx]():this[Nf]?this[Of]():this.emit("drain"))}resume(){return this[OE]()}pause(){this[Xx]=!1,this[M1]=!0}get destroyed(){return this[Ro]}get flowing(){return this[Xx]}get paused(){return this[M1]}[vU](e){this[Fo]?this[Rs]+=1:this[Rs]+=e.length,this.buffer.push(e)}[DU](){return this.buffer.length&&(this[Fo]?this[Rs]-=1:this[Rs]-=this.buffer[0].length),this.buffer.shift()}[Jx](e){do;while(this[Aue](this[DU]()));!e&&!this.buffer.length&&!this[Nf]&&this.emit("drain")}[Aue](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[Ro])return;let o=this[ph];return r=r||{},e===aue.stdout||e===aue.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,o?r.end&&e.end():(this.pipes.push(r.proxyErrors?new xU(this,e,r):new Zx(this,e,r)),this[Uf]?U1(()=>this[OE]()):this[OE]()),e}unpipe(e){let r=this.pipes.find(o=>o.dest===e);r&&(this.pipes.splice(this.pipes.indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let o=super.on(e,r);return e==="data"&&!this.pipes.length&&!this.flowing?this[OE]():e==="readable"&&this[Rs]!==0?super.emit("readable"):Qat(e)&&this[ph]?(super.emit(e),this.removeAllListeners(e)):e==="error"&&this[O1]&&(this[Uf]?U1(()=>r.call(this,this[O1])):r.call(this,this[O1])),o}get emittedEnd(){return this[ph]}[Of](){!this[Vx]&&!this[ph]&&!this[Ro]&&this.buffer.length===0&&this[Nf]&&(this[Vx]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[zx]&&this.emit("close"),this[Vx]=!1)}emit(e,r,...o){if(e!=="error"&&e!=="close"&&e!==Ro&&this[Ro])return;if(e==="data")return r?this[Uf]?U1(()=>this[PU](r)):this[PU](r):!1;if(e==="end")return this[fue]();if(e==="close"){if(this[zx]=!0,!this[ph]&&!this[Ro])return;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[O1]=r;let n=super.emit("error",r);return this[Of](),n}else if(e==="resume"){let n=super.emit("resume");return this[Of](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,r,...o);return this[Of](),a}[PU](e){for(let o of this.pipes)o.dest.write(e)===!1&&this.pause();let r=super.emit("data",e);return this[Of](),r}[fue](){this[ph]||(this[ph]=!0,this.readable=!1,this[Uf]?U1(()=>this[SU]()):this[SU]())}[SU](){if(this[Mf]){let r=this[Mf].end();if(r){for(let o of this.pipes)o.dest.write(r);super.emit("data",r)}}for(let r of this.pipes)r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}collect(){let e=[];this[Fo]||(e.dataLength=0);let r=this.promise();return this.on("data",o=>{e.push(o),this[Fo]||(e.dataLength+=o.length)}),r.then(()=>e)}concat(){return this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this[ka]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(Ro,()=>r(new Error("stream destroyed"))),this.on("error",o=>r(o)),this.on("end",()=>e())})}[bat](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[Nf])return Promise.resolve({done:!0});let o=null,a=null,n=h=>{this.removeListener("data",u),this.removeListener("end",A),a(h)},u=h=>{this.removeListener("error",n),this.removeListener("end",A),this.pause(),o({value:h,done:!!this[Nf]})},A=()=>{this.removeListener("error",n),this.removeListener("data",u),o({done:!0})},p=()=>n(new Error("stream destroyed"));return new Promise((h,C)=>{a=C,o=h,this.once(Ro,p),this.once("error",n),this.once("end",A),this.once("data",u)})}}}[kat](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[Ro]?(e?this.emit("error",e):this.emit(Ro),this):(this[Ro]=!0,this.buffer.length=0,this[Rs]=0,typeof this.close=="function"&&!this[zx]&&this.close(),e?this.emit("error",e):this.emit(Ro),this)}static isStream(e){return!!e&&(e instanceof hue||e instanceof lue||e instanceof xat&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var mue=_((F4t,due)=>{var Tat=Be("zlib").constants||{ZLIB_VERNUM:4736};due.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},Tat))});var GU=_(cl=>{"use strict";var RU=Be("assert"),hh=Be("buffer").Buffer,Cue=Be("zlib"),Qd=cl.constants=mue(),Lat=ME(),yue=hh.concat,Fd=Symbol("_superWrite"),_E=class extends Error{constructor(e){super("zlib: "+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return"ZlibError"}},Nat=Symbol("opts"),_1=Symbol("flushFlag"),Eue=Symbol("finishFlushFlag"),qU=Symbol("fullFlushFlag"),ti=Symbol("handle"),$x=Symbol("onError"),UE=Symbol("sawError"),bU=Symbol("level"),kU=Symbol("strategy"),QU=Symbol("ended"),R4t=Symbol("_defaultFullFlush"),eb=class extends Lat{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[UE]=!1,this[QU]=!1,this[Nat]=e,this[_1]=e.flush,this[Eue]=e.finishFlush;try{this[ti]=new Cue[r](e)}catch(o){throw new _E(o)}this[$x]=o=>{this[UE]||(this[UE]=!0,this.close(),this.emit("error",o))},this[ti].on("error",o=>this[$x](new _E(o))),this.once("end",()=>this.close)}close(){this[ti]&&(this[ti].close(),this[ti]=null,this.emit("close"))}reset(){if(!this[UE])return RU(this[ti],"zlib binding closed"),this[ti].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[qU]),this.write(Object.assign(hh.alloc(0),{[_1]:e})))}end(e,r,o){return e&&this.write(e,r),this.flush(this[Eue]),this[QU]=!0,super.end(null,null,o)}get ended(){return this[QU]}write(e,r,o){if(typeof r=="function"&&(o=r,r="utf8"),typeof e=="string"&&(e=hh.from(e,r)),this[UE])return;RU(this[ti],"zlib binding closed");let a=this[ti]._handle,n=a.close;a.close=()=>{};let u=this[ti].close;this[ti].close=()=>{},hh.concat=h=>h;let A;try{let h=typeof e[_1]=="number"?e[_1]:this[_1];A=this[ti]._processChunk(e,h),hh.concat=yue}catch(h){hh.concat=yue,this[$x](new _E(h))}finally{this[ti]&&(this[ti]._handle=a,a.close=n,this[ti].close=u,this[ti].removeAllListeners("error"))}this[ti]&&this[ti].on("error",h=>this[$x](new _E(h)));let p;if(A)if(Array.isArray(A)&&A.length>0){p=this[Fd](hh.from(A[0]));for(let h=1;h{this.flush(a),n()};try{this[ti].params(e,r)}finally{this[ti].flush=o}this[ti]&&(this[bU]=e,this[kU]=r)}}}},TU=class extends _f{constructor(e){super(e,"Deflate")}},LU=class extends _f{constructor(e){super(e,"Inflate")}},FU=Symbol("_portable"),NU=class extends _f{constructor(e){super(e,"Gzip"),this[FU]=e&&!!e.portable}[Fd](e){return this[FU]?(this[FU]=!1,e[9]=255,super[Fd](e)):super[Fd](e)}},OU=class extends _f{constructor(e){super(e,"Gunzip")}},MU=class extends _f{constructor(e){super(e,"DeflateRaw")}},UU=class extends _f{constructor(e){super(e,"InflateRaw")}},_U=class extends _f{constructor(e){super(e,"Unzip")}},tb=class extends eb{constructor(e,r){e=e||{},e.flush=e.flush||Qd.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Qd.BROTLI_OPERATION_FINISH,super(e,r),this[qU]=Qd.BROTLI_OPERATION_FLUSH}},HU=class extends tb{constructor(e){super(e,"BrotliCompress")}},jU=class extends tb{constructor(e){super(e,"BrotliDecompress")}};cl.Deflate=TU;cl.Inflate=LU;cl.Gzip=NU;cl.Gunzip=OU;cl.DeflateRaw=MU;cl.InflateRaw=UU;cl.Unzip=_U;typeof Cue.BrotliCompress=="function"?(cl.BrotliCompress=HU,cl.BrotliDecompress=jU):cl.BrotliCompress=cl.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var HE=_((N4t,wue)=>{var Oat=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;wue.exports=Oat!=="win32"?t=>t:t=>t&&t.replace(/\\/g,"/")});var rb=_((M4t,Iue)=>{"use strict";var Mat=ME(),YU=HE(),WU=Symbol("slurp");Iue.exports=class extends Mat{constructor(e,r,o){switch(super(),this.pause(),this.extended=r,this.globalExtended=o,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=YU(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=YU(e.linkpath),this.uname=e.uname,this.gname=e.gname,r&&this[WU](r),o&&this[WU](o,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let o=this.remain,a=this.blockRemain;return this.remain=Math.max(0,o-r),this.blockRemain=Math.max(0,a-r),this.ignore?!0:o>=r?super.write(e):super.write(e.slice(0,o))}[WU](e,r){for(let o in e)e[o]!==null&&e[o]!==void 0&&!(r&&o==="path")&&(this[o]=o==="path"||o==="linkpath"?YU(e[o]):e[o])}}});var KU=_(nb=>{"use strict";nb.name=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]);nb.code=new Map(Array.from(nb.name).map(t=>[t[1],t[0]]))});var Pue=_((_4t,Due)=>{"use strict";var Uat=(t,e)=>{if(Number.isSafeInteger(t))t<0?Hat(t,e):_at(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},_at=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},Hat=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var o=e.length;o>1;o--){var a=t&255;t=Math.floor(t/256),r?e[o-1]=Bue(a):a===0?e[o-1]=0:(r=!0,e[o-1]=vue(a))}},jat=t=>{let e=t[0],r=e===128?Gat(t.slice(1,t.length)):e===255?qat(t):null;if(r===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(r))throw Error("parsed number outside of javascript safe integer range");return r},qat=t=>{for(var e=t.length,r=0,o=!1,a=e-1;a>-1;a--){var n=t[a],u;o?u=Bue(n):n===0?u=n:(o=!0,u=vue(n)),u!==0&&(r-=u*Math.pow(256,e-a-1))}return r},Gat=t=>{for(var e=t.length,r=0,o=e-1;o>-1;o--){var a=t[o];a!==0&&(r+=a*Math.pow(256,e-o-1))}return r},Bue=t=>(255^t)&255,vue=t=>(255^t)+1&255;Due.exports={encode:Uat,parse:jat}});var qE=_((H4t,xue)=>{"use strict";var VU=KU(),jE=Be("path").posix,Sue=Pue(),zU=Symbol("slurp"),ul=Symbol("type"),ZU=class{constructor(e,r,o,a){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[ul]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,r||0,o,a):e&&this.set(e)}decode(e,r,o,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=Rd(e,r,100),this.mode=gh(e,r+100,8),this.uid=gh(e,r+108,8),this.gid=gh(e,r+116,8),this.size=gh(e,r+124,12),this.mtime=JU(e,r+136,12),this.cksum=gh(e,r+148,12),this[zU](o),this[zU](a,!0),this[ul]=Rd(e,r+156,1),this[ul]===""&&(this[ul]="0"),this[ul]==="0"&&this.path.substr(-1)==="/"&&(this[ul]="5"),this[ul]==="5"&&(this.size=0),this.linkpath=Rd(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=Rd(e,r+265,32),this.gname=Rd(e,r+297,32),this.devmaj=gh(e,r+329,8),this.devmin=gh(e,r+337,8),e[r+475]!==0){let u=Rd(e,r+345,155);this.path=u+"/"+this.path}else{let u=Rd(e,r+345,130);u&&(this.path=u+"/"+this.path),this.atime=JU(e,r+476,12),this.ctime=JU(e,r+488,12)}let n=8*32;for(let u=r;u=r+512))throw new Error("need 512 bytes for header");let o=this.ctime||this.atime?130:155,a=Yat(this.path||"",o),n=a[0],u=a[1];this.needPax=a[2],this.needPax=Td(e,r,100,n)||this.needPax,this.needPax=dh(e,r+100,8,this.mode)||this.needPax,this.needPax=dh(e,r+108,8,this.uid)||this.needPax,this.needPax=dh(e,r+116,8,this.gid)||this.needPax,this.needPax=dh(e,r+124,12,this.size)||this.needPax,this.needPax=XU(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[ul].charCodeAt(0),this.needPax=Td(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=Td(e,r+265,32,this.uname)||this.needPax,this.needPax=Td(e,r+297,32,this.gname)||this.needPax,this.needPax=dh(e,r+329,8,this.devmaj)||this.needPax,this.needPax=dh(e,r+337,8,this.devmin)||this.needPax,this.needPax=Td(e,r+345,o,u)||this.needPax,e[r+475]!==0?this.needPax=Td(e,r+345,155,u)||this.needPax:(this.needPax=Td(e,r+345,130,u)||this.needPax,this.needPax=XU(e,r+476,12,this.atime)||this.needPax,this.needPax=XU(e,r+488,12,this.ctime)||this.needPax);let A=8*32;for(let p=r;p{let o=t,a="",n,u=jE.parse(t).root||".";if(Buffer.byteLength(o)<100)n=[o,a,!1];else{a=jE.dirname(o),o=jE.basename(o);do Buffer.byteLength(o)<=100&&Buffer.byteLength(a)<=e?n=[o,a,!1]:Buffer.byteLength(o)>100&&Buffer.byteLength(a)<=e?n=[o.substr(0,100-1),a,!0]:(o=jE.join(jE.basename(a),o),a=jE.dirname(a));while(a!==u&&!n);n||(n=[t.substr(0,100-1),"",!0])}return n},Rd=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),JU=(t,e,r)=>Wat(gh(t,e,r)),Wat=t=>t===null?null:new Date(t*1e3),gh=(t,e,r)=>t[e]&128?Sue.parse(t.slice(e,e+r)):Vat(t,e,r),Kat=t=>isNaN(t)?null:t,Vat=(t,e,r)=>Kat(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),zat={12:8589934591,8:2097151},dh=(t,e,r,o)=>o===null?!1:o>zat[r]||o<0?(Sue.encode(o,t.slice(e,e+r)),!0):(Jat(t,e,r,o),!1),Jat=(t,e,r,o)=>t.write(Xat(o,r),e,r,"ascii"),Xat=(t,e)=>Zat(Math.floor(t).toString(8),e),Zat=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",XU=(t,e,r,o)=>o===null?!1:dh(t,e,r,o.getTime()/1e3),$at=new Array(156).join("\0"),Td=(t,e,r,o)=>o===null?!1:(t.write(o+$at,e,r,"utf8"),o.length!==Buffer.byteLength(o)||o.length>r);xue.exports=ZU});var ib=_((j4t,bue)=>{"use strict";var elt=qE(),tlt=Be("path"),H1=class{constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=r||!1}encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byteLength(e),o=512*Math.ceil(1+r/512),a=Buffer.allocUnsafe(o);for(let n=0;n<512;n++)a[n]=0;new elt({path:("PaxHeader/"+tlt.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:r,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(a),a.write(e,512,r,"utf8");for(let n=r+512;n=Math.pow(10,n)&&(n+=1),n+a+o}};H1.parse=(t,e,r)=>new H1(rlt(nlt(t),e),r);var rlt=(t,e)=>e?Object.keys(t).reduce((r,o)=>(r[o]=t[o],r),e):t,nlt=t=>t.replace(/\n$/,"").split(` -`).reduce(ilt,Object.create(null)),ilt=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let o=e.split("="),a=o.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!a)return t;let n=o.join("=");return t[a]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(a)?new Date(n*1e3):/^[0-9]+$/.test(n)?+n:n,t};bue.exports=H1});var GE=_((q4t,kue)=>{kue.exports=t=>{let e=t.length-1,r=-1;for(;e>-1&&t.charAt(e)==="/";)r=e,e--;return r===-1?t:t.slice(0,r)}});var sb=_((G4t,Que)=>{"use strict";Que.exports=t=>class extends t{warn(e,r,o={}){this.file&&(o.file=this.file),this.cwd&&(o.cwd=this.cwd),o.code=r instanceof Error&&r.code||e,o.tarCode=e,!this.strict&&o.recoverable!==!1?(r instanceof Error&&(o=Object.assign(r,o),r=r.message),this.emit("warn",o.tarCode,r,o)):r instanceof Error?this.emit("error",Object.assign(r,o)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),o))}}});var e3=_((W4t,Fue)=>{"use strict";var ob=["|","<",">","?",":"],$U=ob.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),slt=new Map(ob.map((t,e)=>[t,$U[e]])),olt=new Map($U.map((t,e)=>[t,ob[e]]));Fue.exports={encode:t=>ob.reduce((e,r)=>e.split(r).join(slt.get(r)),t),decode:t=>$U.reduce((e,r)=>e.split(r).join(olt.get(r)),t)}});var t3=_((K4t,Tue)=>{var{isAbsolute:alt,parse:Rue}=Be("path").win32;Tue.exports=t=>{let e="",r=Rue(t);for(;alt(t)||r.root;){let o=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.substr(o.length),e+=o,r=Rue(t)}return[e,t]}});var Nue=_((V4t,Lue)=>{"use strict";Lue.exports=(t,e,r)=>(t&=4095,r&&(t=(t|384)&-19),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t)});var A3=_((X4t,Jue)=>{"use strict";var que=ME(),Gue=ib(),Yue=qE(),oA=Be("fs"),Oue=Be("path"),sA=HE(),llt=GE(),Wue=(t,e)=>e?(t=sA(t).replace(/^\.(\/|$)/,""),llt(e)+"/"+t):sA(t),clt=16*1024*1024,Mue=Symbol("process"),Uue=Symbol("file"),_ue=Symbol("directory"),n3=Symbol("symlink"),Hue=Symbol("hardlink"),j1=Symbol("header"),ab=Symbol("read"),i3=Symbol("lstat"),lb=Symbol("onlstat"),s3=Symbol("onread"),o3=Symbol("onreadlink"),a3=Symbol("openfile"),l3=Symbol("onopenfile"),mh=Symbol("close"),ub=Symbol("mode"),c3=Symbol("awaitDrain"),r3=Symbol("ondrain"),aA=Symbol("prefix"),jue=Symbol("hadError"),Kue=sb(),ult=e3(),Vue=t3(),zue=Nue(),Ab=Kue(class extends que{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=sA(e),this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||clt,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=sA(r.cwd||process.cwd()),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime||null,this.prefix=r.prefix?sA(r.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Vue(this.path);a&&(this.path=n,o=a)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=ult.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=sA(r.absolute||Oue.resolve(this.cwd,e)),this.path===""&&(this.path="./"),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.statCache.has(this.absolute)?this[lb](this.statCache.get(this.absolute)):this[i3]()}emit(e,...r){return e==="error"&&(this[jue]=!0),super.emit(e,...r)}[i3](){oA.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[lb](r)})}[lb](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=flt(e),this.emit("stat",e),this[Mue]()}[Mue](){switch(this.type){case"File":return this[Uue]();case"Directory":return this[_ue]();case"SymbolicLink":return this[n3]();default:return this.end()}}[ub](e){return zue(e,this.type==="Directory",this.portable)}[aA](e){return Wue(e,this.prefix)}[j1](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new Yue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this[ub](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new Gue({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[_ue](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[j1](),this.end()}[n3](){oA.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[o3](r)})}[o3](e){this.linkpath=sA(e),this[j1](),this.end()}[Hue](e){this.type="Link",this.linkpath=sA(Oue.relative(this.cwd,e)),this.stat.size=0,this[j1](),this.end()}[Uue](){if(this.stat.nlink>1){let e=this.stat.dev+":"+this.stat.ino;if(this.linkCache.has(e)){let r=this.linkCache.get(e);if(r.indexOf(this.cwd)===0)return this[Hue](r)}this.linkCache.set(e,this.absolute)}if(this[j1](),this.stat.size===0)return this.end();this[a3]()}[a3](){oA.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[l3](r)})}[l3](e){if(this.fd=e,this[jue])return this[mh]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let r=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(r),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[ab]()}[ab](){let{fd:e,buf:r,offset:o,length:a,pos:n}=this;oA.read(e,r,o,a,n,(u,A)=>{if(u)return this[mh](()=>this.emit("error",u));this[s3](A)})}[mh](e){oA.close(this.fd,e)}[s3](e){if(e<=0&&this.remain>0){let a=new Error("encountered unexpected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[mh](()=>this.emit("error",a))}if(e>this.remain){let a=new Error("did not encounter expected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[mh](()=>this.emit("error",a))}if(e===this.remain)for(let a=e;athis[r3]())}[c3](e){this.once("drain",e)}write(e){if(this.blockRemaine?this.emit("error",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[ab]()}}),u3=class extends Ab{[i3](){this[lb](oA.lstatSync(this.absolute))}[n3](){this[o3](oA.readlinkSync(this.absolute))}[a3](){this[l3](oA.openSync(this.absolute,"r"))}[ab](){let e=!0;try{let{fd:r,buf:o,offset:a,length:n,pos:u}=this,A=oA.readSync(r,o,a,n,u);this[s3](A),e=!1}finally{if(e)try{this[mh](()=>{})}catch{}}}[c3](e){e()}[mh](e){oA.closeSync(this.fd),e()}},Alt=Kue(class extends que{constructor(e,r){r=r||{},super(r),this.preservePaths=!!r.preservePaths,this.portable=!!r.portable,this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.readEntry=e,this.type=e.type,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=r.prefix||null,this.path=sA(e.path),this.mode=this[ub](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:r.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=sA(e.linkpath),typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Vue(this.path);a&&(this.path=n,o=a)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new Yue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.header.encode()&&!this.noPax&&super.write(new Gue({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[aA](e){return Wue(e,this.prefix)}[ub](e){return zue(e,this.type==="Directory",this.portable)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=r,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});Ab.Sync=u3;Ab.Tar=Alt;var flt=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";Jue.exports=Ab});var Cb=_(($4t,nAe)=>{"use strict";var yb=class{constructor(e,r){this.path=e||"./",this.absolute=r,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},plt=ME(),hlt=GU(),glt=rb(),C3=A3(),dlt=C3.Sync,mlt=C3.Tar,ylt=IP(),Xue=Buffer.alloc(1024),hb=Symbol("onStat"),fb=Symbol("ended"),lA=Symbol("queue"),YE=Symbol("current"),Ld=Symbol("process"),pb=Symbol("processing"),Zue=Symbol("processJob"),cA=Symbol("jobs"),f3=Symbol("jobDone"),gb=Symbol("addFSEntry"),$ue=Symbol("addTarEntry"),d3=Symbol("stat"),m3=Symbol("readdir"),db=Symbol("onreaddir"),mb=Symbol("pipe"),eAe=Symbol("entry"),p3=Symbol("entryOpt"),y3=Symbol("writeEntryClass"),rAe=Symbol("write"),h3=Symbol("ondrain"),Eb=Be("fs"),tAe=Be("path"),Elt=sb(),g3=HE(),w3=Elt(class extends plt{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||"",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=g3(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[y3]=C3,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!="object"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new hlt.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[h3]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[h3]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter=="function"?e.filter:r=>!0,this[lA]=new ylt,this[cA]=0,this.jobs=+e.jobs||4,this[pb]=!1,this[fb]=!1}[rAe](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[fb]=!0,this[Ld](),this}write(e){if(this[fb])throw new Error("write after end");return e instanceof glt?this[$ue](e):this[gb](e),this.flowing}[$ue](e){let r=g3(tAe.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let o=new yb(e.path,r,!1);o.entry=new mlt(e,this[p3](o)),o.entry.on("end",a=>this[f3](o)),this[cA]+=1,this[lA].push(o)}this[Ld]()}[gb](e){let r=g3(tAe.resolve(this.cwd,e));this[lA].push(new yb(e,r)),this[Ld]()}[d3](e){e.pending=!0,this[cA]+=1;let r=this.follow?"stat":"lstat";Eb[r](e.absolute,(o,a)=>{e.pending=!1,this[cA]-=1,o?this.emit("error",o):this[hb](e,a)})}[hb](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[Ld]()}[m3](e){e.pending=!0,this[cA]+=1,Eb.readdir(e.absolute,(r,o)=>{if(e.pending=!1,this[cA]-=1,r)return this.emit("error",r);this[db](e,o)})}[db](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[Ld]()}[Ld](){if(!this[pb]){this[pb]=!0;for(let e=this[lA].head;e!==null&&this[cA]this.warn(r,o,a),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[eAe](e){this[cA]+=1;try{return new this[y3](e.path,this[p3](e)).on("end",()=>this[f3](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[h3](){this[YE]&&this[YE].entry&&this[YE].entry.resume()}[mb](e){e.piped=!0,e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[gb](u+a)});let r=e.entry,o=this.zip;o?r.on("data",a=>{o.write(a)||r.pause()}):r.on("data",a=>{super.write(a)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),E3=class extends w3{constructor(e){super(e),this[y3]=dlt}pause(){}resume(){}[d3](e){let r=this.follow?"statSync":"lstatSync";this[hb](e,Eb[r](e.absolute))}[m3](e,r){this[db](e,Eb.readdirSync(e.absolute))}[mb](e){let r=e.entry,o=this.zip;e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[gb](u+a)}),o?r.on("data",a=>{o.write(a)}):r.on("data",a=>{super[rAe](a)})}};w3.Sync=E3;nAe.exports=w3});var $E=_(G1=>{"use strict";var Clt=ME(),wlt=Be("events").EventEmitter,Qa=Be("fs"),v3=Qa.writev;if(!v3){let t=process.binding("fs"),e=t.FSReqWrap||t.FSReqCallback;v3=(r,o,a,n)=>{let u=(p,h)=>n(p,h,o),A=new e;A.oncomplete=u,t.writeBuffers(r,o,a,A)}}var XE=Symbol("_autoClose"),Yc=Symbol("_close"),q1=Symbol("_ended"),Gn=Symbol("_fd"),iAe=Symbol("_finished"),Eh=Symbol("_flags"),I3=Symbol("_flush"),D3=Symbol("_handleChunk"),P3=Symbol("_makeBuf"),Db=Symbol("_mode"),wb=Symbol("_needDrain"),zE=Symbol("_onerror"),ZE=Symbol("_onopen"),B3=Symbol("_onread"),KE=Symbol("_onwrite"),Ch=Symbol("_open"),Hf=Symbol("_path"),Nd=Symbol("_pos"),uA=Symbol("_queue"),VE=Symbol("_read"),sAe=Symbol("_readSize"),yh=Symbol("_reading"),Ib=Symbol("_remain"),oAe=Symbol("_size"),Bb=Symbol("_write"),WE=Symbol("_writing"),vb=Symbol("_defaultFlag"),JE=Symbol("_errored"),Pb=class extends Clt{constructor(e,r){if(r=r||{},super(r),this.readable=!0,this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[JE]=!1,this[Gn]=typeof r.fd=="number"?r.fd:null,this[Hf]=e,this[sAe]=r.readSize||16*1024*1024,this[yh]=!1,this[oAe]=typeof r.size=="number"?r.size:1/0,this[Ib]=this[oAe],this[XE]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[Gn]=="number"?this[VE]():this[Ch]()}get fd(){return this[Gn]}get path(){return this[Hf]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[Ch](){Qa.open(this[Hf],"r",(e,r)=>this[ZE](e,r))}[ZE](e,r){e?this[zE](e):(this[Gn]=r,this.emit("open",r),this[VE]())}[P3](){return Buffer.allocUnsafe(Math.min(this[sAe],this[Ib]))}[VE](){if(!this[yh]){this[yh]=!0;let e=this[P3]();if(e.length===0)return process.nextTick(()=>this[B3](null,0,e));Qa.read(this[Gn],e,0,e.length,null,(r,o,a)=>this[B3](r,o,a))}}[B3](e,r,o){this[yh]=!1,e?this[zE](e):this[D3](r,o)&&this[VE]()}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}[zE](e){this[yh]=!0,this[Yc](),this.emit("error",e)}[D3](e,r){let o=!1;return this[Ib]-=e,e>0&&(o=super.write(ethis[ZE](e,r))}[ZE](e,r){this[vb]&&this[Eh]==="r+"&&e&&e.code==="ENOENT"?(this[Eh]="w",this[Ch]()):e?this[zE](e):(this[Gn]=r,this.emit("open",r),this[I3]())}end(e,r){return e&&this.write(e,r),this[q1]=!0,!this[WE]&&!this[uA].length&&typeof this[Gn]=="number"&&this[KE](null,0),this}write(e,r){return typeof e=="string"&&(e=Buffer.from(e,r)),this[q1]?(this.emit("error",new Error("write() after end()")),!1):this[Gn]===null||this[WE]||this[uA].length?(this[uA].push(e),this[wb]=!0,!1):(this[WE]=!0,this[Bb](e),!0)}[Bb](e){Qa.write(this[Gn],e,0,e.length,this[Nd],(r,o)=>this[KE](r,o))}[KE](e,r){e?this[zE](e):(this[Nd]!==null&&(this[Nd]+=r),this[uA].length?this[I3]():(this[WE]=!1,this[q1]&&!this[iAe]?(this[iAe]=!0,this[Yc](),this.emit("finish")):this[wb]&&(this[wb]=!1,this.emit("drain"))))}[I3](){if(this[uA].length===0)this[q1]&&this[KE](null,0);else if(this[uA].length===1)this[Bb](this[uA].pop());else{let e=this[uA];this[uA]=[],v3(this[Gn],e,this[Nd],(r,o)=>this[KE](r,o))}}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}},x3=class extends Sb{[Ch](){let e;if(this[vb]&&this[Eh]==="r+")try{e=Qa.openSync(this[Hf],this[Eh],this[Db])}catch(r){if(r.code==="ENOENT")return this[Eh]="w",this[Ch]();throw r}else e=Qa.openSync(this[Hf],this[Eh],this[Db]);this[ZE](null,e)}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.closeSync(e),this.emit("close")}}[Bb](e){let r=!0;try{this[KE](null,Qa.writeSync(this[Gn],e,0,e.length,this[Nd])),r=!1}finally{if(r)try{this[Yc]()}catch{}}}};G1.ReadStream=Pb;G1.ReadStreamSync=S3;G1.WriteStream=Sb;G1.WriteStreamSync=x3});var Tb=_((rUt,pAe)=>{"use strict";var Ilt=sb(),Blt=qE(),vlt=Be("events"),Dlt=IP(),Plt=1024*1024,Slt=rb(),aAe=ib(),xlt=GU(),b3=Buffer.from([31,139]),Xl=Symbol("state"),Od=Symbol("writeEntry"),jf=Symbol("readEntry"),k3=Symbol("nextEntry"),lAe=Symbol("processEntry"),Zl=Symbol("extendedHeader"),Y1=Symbol("globalExtendedHeader"),wh=Symbol("meta"),cAe=Symbol("emitMeta"),fi=Symbol("buffer"),qf=Symbol("queue"),Md=Symbol("ended"),uAe=Symbol("emittedEnd"),Ud=Symbol("emit"),Fa=Symbol("unzip"),xb=Symbol("consumeChunk"),bb=Symbol("consumeChunkSub"),Q3=Symbol("consumeBody"),AAe=Symbol("consumeMeta"),fAe=Symbol("consumeHeader"),kb=Symbol("consuming"),F3=Symbol("bufferConcat"),R3=Symbol("maybeEnd"),W1=Symbol("writing"),Ih=Symbol("aborted"),Qb=Symbol("onDone"),_d=Symbol("sawValidEntry"),Fb=Symbol("sawNullBlock"),Rb=Symbol("sawEOF"),blt=t=>!0;pAe.exports=Ilt(class extends vlt{constructor(e){e=e||{},super(e),this.file=e.file||"",this[_d]=null,this.on(Qb,r=>{(this[Xl]==="begin"||this[_d]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(Qb,e.ondone):this.on(Qb,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||Plt,this.filter=typeof e.filter=="function"?e.filter:blt,this.writable=!0,this.readable=!1,this[qf]=new Dlt,this[fi]=null,this[jf]=null,this[Od]=null,this[Xl]="begin",this[wh]="",this[Zl]=null,this[Y1]=null,this[Md]=!1,this[Fa]=null,this[Ih]=!1,this[Fb]=!1,this[Rb]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[fAe](e,r){this[_d]===null&&(this[_d]=!1);let o;try{o=new Blt(e,r,this[Zl],this[Y1])}catch(a){return this.warn("TAR_ENTRY_INVALID",a)}if(o.nullBlock)this[Fb]?(this[Rb]=!0,this[Xl]==="begin"&&(this[Xl]="header"),this[Ud]("eof")):(this[Fb]=!0,this[Ud]("nullBlock"));else if(this[Fb]=!1,!o.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:o});else if(!o.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:o});else{let a=o.type;if(/^(Symbolic)?Link$/.test(a)&&!o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:o});else if(!/^(Symbolic)?Link$/.test(a)&&o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:o});else{let n=this[Od]=new Slt(o,this[Zl],this[Y1]);if(!this[_d])if(n.remain){let u=()=>{n.invalid||(this[_d]=!0)};n.on("end",u)}else this[_d]=!0;n.meta?n.size>this.maxMetaEntrySize?(n.ignore=!0,this[Ud]("ignoredEntry",n),this[Xl]="ignore",n.resume()):n.size>0&&(this[wh]="",n.on("data",u=>this[wh]+=u),this[Xl]="meta"):(this[Zl]=null,n.ignore=n.ignore||!this.filter(n.path,n),n.ignore?(this[Ud]("ignoredEntry",n),this[Xl]=n.remain?"ignore":"header",n.resume()):(n.remain?this[Xl]="body":(this[Xl]="header",n.end()),this[jf]?this[qf].push(n):(this[qf].push(n),this[k3]())))}}}[lAe](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[jf]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",o=>this[k3]()),r=!1)):(this[jf]=null,r=!1),r}[k3](){do;while(this[lAe](this[qf].shift()));if(!this[qf].length){let e=this[jf];!e||e.flowing||e.size===e.remain?this[W1]||this.emit("drain"):e.once("drain",o=>this.emit("drain"))}}[Q3](e,r){let o=this[Od],a=o.blockRemain,n=a>=e.length&&r===0?e:e.slice(r,r+a);return o.write(n),o.blockRemain||(this[Xl]="header",this[Od]=null,o.end()),n.length}[AAe](e,r){let o=this[Od],a=this[Q3](e,r);return this[Od]||this[cAe](o),a}[Ud](e,r,o){!this[qf].length&&!this[jf]?this.emit(e,r,o):this[qf].push([e,r,o])}[cAe](e){switch(this[Ud]("meta",this[wh]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[Zl]=aAe.parse(this[wh],this[Zl],!1);break;case"GlobalExtendedHeader":this[Y1]=aAe.parse(this[wh],this[Y1],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[Zl]=this[Zl]||Object.create(null),this[Zl].path=this[wh].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[Zl]=this[Zl]||Object.create(null),this[Zl].linkpath=this[wh].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[Ih]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[Ih])return;if(this[Fa]===null&&e){if(this[fi]&&(e=Buffer.concat([this[fi],e]),this[fi]=null),e.lengththis[xb](n)),this[Fa].on("error",n=>this.abort(n)),this[Fa].on("end",n=>{this[Md]=!0,this[xb]()}),this[W1]=!0;let a=this[Fa][o?"end":"write"](e);return this[W1]=!1,a}}this[W1]=!0,this[Fa]?this[Fa].write(e):this[xb](e),this[W1]=!1;let r=this[qf].length?!1:this[jf]?this[jf].flowing:!0;return!r&&!this[qf].length&&this[jf].once("drain",o=>this.emit("drain")),r}[F3](e){e&&!this[Ih]&&(this[fi]=this[fi]?Buffer.concat([this[fi],e]):e)}[R3](){if(this[Md]&&!this[uAe]&&!this[Ih]&&!this[kb]){this[uAe]=!0;let e=this[Od];if(e&&e.blockRemain){let r=this[fi]?this[fi].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[fi]&&e.write(this[fi]),e.end()}this[Ud](Qb)}}[xb](e){if(this[kb])this[F3](e);else if(!e&&!this[fi])this[R3]();else{if(this[kb]=!0,this[fi]){this[F3](e);let r=this[fi];this[fi]=null,this[bb](r)}else this[bb](e);for(;this[fi]&&this[fi].length>=512&&!this[Ih]&&!this[Rb];){let r=this[fi];this[fi]=null,this[bb](r)}this[kb]=!1}(!this[fi]||this[Md])&&this[R3]()}[bb](e){let r=0,o=e.length;for(;r+512<=o&&!this[Ih]&&!this[Rb];)switch(this[Xl]){case"begin":case"header":this[fAe](e,r),r+=512;break;case"ignore":case"body":r+=this[Q3](e,r);break;case"meta":r+=this[AAe](e,r);break;default:throw new Error("invalid state: "+this[Xl])}r{"use strict";var klt=NE(),gAe=Tb(),eC=Be("fs"),Qlt=$E(),hAe=Be("path"),T3=GE();mAe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=klt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Rlt(o,e),o.noResume||Flt(o),o.file&&o.sync?Tlt(o):o.file?Llt(o,r):dAe(o)};var Flt=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},Rlt=(t,e)=>{let r=new Map(e.map(n=>[T3(n),!0])),o=t.filter,a=(n,u)=>{let A=u||hAe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(hAe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(T3(n)):n=>a(T3(n))},Tlt=t=>{let e=dAe(t),r=t.file,o=!0,a;try{let n=eC.statSync(r),u=t.maxReadSize||16*1024*1024;if(n.size{let r=new gAe(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("end",u),eC.stat(a,(p,h)=>{if(p)A(p);else{let C=new Qlt.ReadStream(a,{readSize:o,size:h.size});C.on("error",A),C.pipe(r)}})});return e?n.then(e,e):n},dAe=t=>new gAe(t)});var BAe=_((iUt,IAe)=>{"use strict";var Nlt=NE(),Nb=Cb(),yAe=$E(),EAe=Lb(),CAe=Be("path");IAe.exports=(t,e,r)=>{if(typeof e=="function"&&(r=e),Array.isArray(t)&&(e=t,t={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let o=Nlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return o.file&&o.sync?Olt(o,e):o.file?Mlt(o,e,r):o.sync?Ult(o,e):_lt(o,e)};var Olt=(t,e)=>{let r=new Nb.Sync(t),o=new yAe.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(o),wAe(r,e)},Mlt=(t,e,r)=>{let o=new Nb(t),a=new yAe.WriteStream(t.file,{mode:t.mode||438});o.pipe(a);let n=new Promise((u,A)=>{a.on("error",A),a.on("close",u),o.on("error",A)});return L3(o,e),r?n.then(r,r):n},wAe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?EAe({file:CAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},L3=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return EAe({file:CAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>L3(t,e));t.add(r)}t.end()},Ult=(t,e)=>{let r=new Nb.Sync(t);return wAe(r,e),r},_lt=(t,e)=>{let r=new Nb(t);return L3(r,e),r}});var N3=_((sUt,kAe)=>{"use strict";var Hlt=NE(),vAe=Cb(),Al=Be("fs"),DAe=$E(),PAe=Lb(),SAe=Be("path"),xAe=qE();kAe.exports=(t,e,r)=>{let o=Hlt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),o.sync?jlt(o,e):Glt(o,e,r)};var jlt=(t,e)=>{let r=new vAe.Sync(t),o=!0,a,n;try{try{a=Al.openSync(t.file,"r+")}catch(p){if(p.code==="ENOENT")a=Al.openSync(t.file,"w+");else throw p}let u=Al.fstatSync(a),A=Buffer.alloc(512);e:for(n=0;nu.size)break;n+=h,t.mtimeCache&&t.mtimeCache.set(p.path,p.mtime)}o=!1,qlt(t,r,n,a,e)}finally{if(o)try{Al.closeSync(a)}catch{}}},qlt=(t,e,r,o,a)=>{let n=new DAe.WriteStreamSync(t.file,{fd:o,start:r});e.pipe(n),Ylt(e,a)},Glt=(t,e,r)=>{e=Array.from(e);let o=new vAe(t),a=(u,A,p)=>{let h=(E,F)=>{E?Al.close(u,N=>p(E)):p(null,F)},C=0;if(A===0)return h(null,0);let I=0,v=Buffer.alloc(512),b=(E,F)=>{if(E)return h(E);if(I+=F,I<512&&F)return Al.read(u,v,I,v.length-I,C+I,b);if(C===0&&v[0]===31&&v[1]===139)return h(new Error("cannot append to compressed archives"));if(I<512)return h(null,C);let N=new xAe(v);if(!N.cksumValid)return h(null,C);let U=512*Math.ceil(N.size/512);if(C+U+512>A||(C+=U+512,C>=A))return h(null,C);t.mtimeCache&&t.mtimeCache.set(N.path,N.mtime),I=0,Al.read(u,v,0,512,C,b)};Al.read(u,v,0,512,C,b)},n=new Promise((u,A)=>{o.on("error",A);let p="r+",h=(C,I)=>{if(C&&C.code==="ENOENT"&&p==="r+")return p="w+",Al.open(t.file,p,h);if(C)return A(C);Al.fstat(I,(v,b)=>{if(v)return Al.close(I,()=>A(v));a(I,b.size,(E,F)=>{if(E)return A(E);let N=new DAe.WriteStream(t.file,{fd:I,start:F});o.pipe(N),N.on("error",A),N.on("close",u),bAe(o,e)})})};Al.open(t.file,p,h)});return r?n.then(r,r):n},Ylt=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?PAe({file:SAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},bAe=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return PAe({file:SAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>bAe(t,e));t.add(r)}t.end()}});var FAe=_((oUt,QAe)=>{"use strict";var Wlt=NE(),Klt=N3();QAe.exports=(t,e,r)=>{let o=Wlt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),Vlt(o),Klt(o,e,r)};var Vlt=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,o)=>e(r,o)&&!(t.mtimeCache.get(r)>o.mtime):(r,o)=>!(t.mtimeCache.get(r)>o.mtime)}});var LAe=_((aUt,TAe)=>{var{promisify:RAe}=Be("util"),Bh=Be("fs"),zlt=t=>{if(!t)t={mode:511,fs:Bh};else if(typeof t=="object")t={mode:511,fs:Bh,...t};else if(typeof t=="number")t={mode:t,fs:Bh};else if(typeof t=="string")t={mode:parseInt(t,8),fs:Bh};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||Bh.mkdir,t.mkdirAsync=RAe(t.mkdir),t.stat=t.stat||t.fs.stat||Bh.stat,t.statAsync=RAe(t.stat),t.statSync=t.statSync||t.fs.statSync||Bh.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||Bh.mkdirSync,t};TAe.exports=zlt});var OAe=_((lUt,NAe)=>{var Jlt=process.platform,{resolve:Xlt,parse:Zlt}=Be("path"),$lt=t=>{if(/\0/.test(t))throw Object.assign(new TypeError("path must be a string without null bytes"),{path:t,code:"ERR_INVALID_ARG_VALUE"});if(t=Xlt(t),Jlt==="win32"){let e=/[*|"<>?:]/,{root:r}=Zlt(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};NAe.exports=$lt});var jAe=_((cUt,HAe)=>{var{dirname:MAe}=Be("path"),UAe=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(o=>o.isDirectory()?r:void 0,o=>o.code==="ENOENT"?UAe(t,MAe(e),e):void 0),_Ae=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(o){return o.code==="ENOENT"?_Ae(t,MAe(e),e):void 0}};HAe.exports={findMade:UAe,findMadeSync:_Ae}});var U3=_((uUt,GAe)=>{var{dirname:qAe}=Be("path"),O3=(t,e,r)=>{e.recursive=!1;let o=qAe(t);return o===t?e.mkdirAsync(t,e).catch(a=>{if(a.code!=="EISDIR")throw a}):e.mkdirAsync(t,e).then(()=>r||t,a=>{if(a.code==="ENOENT")return O3(o,e).then(n=>O3(t,e,n));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;return e.statAsync(t).then(n=>{if(n.isDirectory())return r;throw a},()=>{throw a})})},M3=(t,e,r)=>{let o=qAe(t);if(e.recursive=!1,o===t)try{return e.mkdirSync(t,e)}catch(a){if(a.code!=="EISDIR")throw a;return}try{return e.mkdirSync(t,e),r||t}catch(a){if(a.code==="ENOENT")return M3(t,e,M3(o,e,r));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;try{if(!e.statSync(t).isDirectory())throw a}catch{throw a}}};GAe.exports={mkdirpManual:O3,mkdirpManualSync:M3}});var KAe=_((AUt,WAe)=>{var{dirname:YAe}=Be("path"),{findMade:ect,findMadeSync:tct}=jAe(),{mkdirpManual:rct,mkdirpManualSync:nct}=U3(),ict=(t,e)=>(e.recursive=!0,YAe(t)===t?e.mkdirAsync(t,e):ect(e,t).then(o=>e.mkdirAsync(t,e).then(()=>o).catch(a=>{if(a.code==="ENOENT")return rct(t,e);throw a}))),sct=(t,e)=>{if(e.recursive=!0,YAe(t)===t)return e.mkdirSync(t,e);let o=tct(e,t);try{return e.mkdirSync(t,e),o}catch(a){if(a.code==="ENOENT")return nct(t,e);throw a}};WAe.exports={mkdirpNative:ict,mkdirpNativeSync:sct}});var XAe=_((fUt,JAe)=>{var VAe=Be("fs"),oct=process.version,_3=oct.replace(/^v/,"").split("."),zAe=+_3[0]>10||+_3[0]==10&&+_3[1]>=12,act=zAe?t=>t.mkdir===VAe.mkdir:()=>!1,lct=zAe?t=>t.mkdirSync===VAe.mkdirSync:()=>!1;JAe.exports={useNative:act,useNativeSync:lct}});var nfe=_((pUt,rfe)=>{var tC=LAe(),rC=OAe(),{mkdirpNative:ZAe,mkdirpNativeSync:$Ae}=KAe(),{mkdirpManual:efe,mkdirpManualSync:tfe}=U3(),{useNative:cct,useNativeSync:uct}=XAe(),nC=(t,e)=>(t=rC(t),e=tC(e),cct(e)?ZAe(t,e):efe(t,e)),Act=(t,e)=>(t=rC(t),e=tC(e),uct(e)?$Ae(t,e):tfe(t,e));nC.sync=Act;nC.native=(t,e)=>ZAe(rC(t),tC(e));nC.manual=(t,e)=>efe(rC(t),tC(e));nC.nativeSync=(t,e)=>$Ae(rC(t),tC(e));nC.manualSync=(t,e)=>tfe(rC(t),tC(e));rfe.exports=nC});var ufe=_((hUt,cfe)=>{"use strict";var $l=Be("fs"),Hd=Be("path"),fct=$l.lchown?"lchown":"chown",pct=$l.lchownSync?"lchownSync":"chownSync",sfe=$l.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),ife=(t,e,r)=>{try{return $l[pct](t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},hct=(t,e,r)=>{try{return $l.chownSync(t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},gct=sfe?(t,e,r,o)=>a=>{!a||a.code!=="EISDIR"?o(a):$l.chown(t,e,r,o)}:(t,e,r,o)=>o,H3=sfe?(t,e,r)=>{try{return ife(t,e,r)}catch(o){if(o.code!=="EISDIR")throw o;hct(t,e,r)}}:(t,e,r)=>ife(t,e,r),dct=process.version,ofe=(t,e,r)=>$l.readdir(t,e,r),mct=(t,e)=>$l.readdirSync(t,e);/^v4\./.test(dct)&&(ofe=(t,e,r)=>$l.readdir(t,r));var Ob=(t,e,r,o)=>{$l[fct](t,e,r,gct(t,e,r,a=>{o(a&&a.code!=="ENOENT"?a:null)}))},afe=(t,e,r,o,a)=>{if(typeof e=="string")return $l.lstat(Hd.resolve(t,e),(n,u)=>{if(n)return a(n.code!=="ENOENT"?n:null);u.name=e,afe(t,u,r,o,a)});if(e.isDirectory())j3(Hd.resolve(t,e.name),r,o,n=>{if(n)return a(n);let u=Hd.resolve(t,e.name);Ob(u,r,o,a)});else{let n=Hd.resolve(t,e.name);Ob(n,r,o,a)}},j3=(t,e,r,o)=>{ofe(t,{withFileTypes:!0},(a,n)=>{if(a){if(a.code==="ENOENT")return o();if(a.code!=="ENOTDIR"&&a.code!=="ENOTSUP")return o(a)}if(a||!n.length)return Ob(t,e,r,o);let u=n.length,A=null,p=h=>{if(!A){if(h)return o(A=h);if(--u===0)return Ob(t,e,r,o)}};n.forEach(h=>afe(t,h,e,r,p))})},yct=(t,e,r,o)=>{if(typeof e=="string")try{let a=$l.lstatSync(Hd.resolve(t,e));a.name=e,e=a}catch(a){if(a.code==="ENOENT")return;throw a}e.isDirectory()&&lfe(Hd.resolve(t,e.name),r,o),H3(Hd.resolve(t,e.name),r,o)},lfe=(t,e,r)=>{let o;try{o=mct(t,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")return;if(a.code==="ENOTDIR"||a.code==="ENOTSUP")return H3(t,e,r);throw a}return o&&o.length&&o.forEach(a=>yct(t,a,e,r)),H3(t,e,r)};cfe.exports=j3;j3.sync=lfe});var hfe=_((gUt,q3)=>{"use strict";var Afe=nfe(),ec=Be("fs"),Mb=Be("path"),ffe=ufe(),Wc=HE(),Ub=class extends Error{constructor(e,r){super("Cannot extract through symbolic link"),this.path=r,this.symlink=e}get name(){return"SylinkError"}},_b=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'"),this.path=e,this.code=r}get name(){return"CwdError"}},Hb=(t,e)=>t.get(Wc(e)),K1=(t,e,r)=>t.set(Wc(e),r),Ect=(t,e)=>{ec.stat(t,(r,o)=>{(r||!o.isDirectory())&&(r=new _b(t,r&&r.code||"ENOTDIR")),e(r)})};q3.exports=(t,e,r)=>{t=Wc(t);let o=e.umask,a=e.mode|448,n=(a&o)!==0,u=e.uid,A=e.gid,p=typeof u=="number"&&typeof A=="number"&&(u!==e.processUid||A!==e.processGid),h=e.preserve,C=e.unlink,I=e.cache,v=Wc(e.cwd),b=(N,U)=>{N?r(N):(K1(I,t,!0),U&&p?ffe(U,u,A,z=>b(z)):n?ec.chmod(t,a,r):r())};if(I&&Hb(I,t)===!0)return b();if(t===v)return Ect(t,b);if(h)return Afe(t,{mode:a}).then(N=>b(null,N),b);let F=Wc(Mb.relative(v,t)).split("/");jb(v,F,a,I,C,v,null,b)};var jb=(t,e,r,o,a,n,u,A)=>{if(!e.length)return A(null,u);let p=e.shift(),h=Wc(Mb.resolve(t+"/"+p));if(Hb(o,h))return jb(h,e,r,o,a,n,u,A);ec.mkdir(h,r,pfe(h,e,r,o,a,n,u,A))},pfe=(t,e,r,o,a,n,u,A)=>p=>{p?ec.lstat(t,(h,C)=>{if(h)h.path=h.path&&Wc(h.path),A(h);else if(C.isDirectory())jb(t,e,r,o,a,n,u,A);else if(a)ec.unlink(t,I=>{if(I)return A(I);ec.mkdir(t,r,pfe(t,e,r,o,a,n,u,A))});else{if(C.isSymbolicLink())return A(new Ub(t,t+"/"+e.join("/")));A(p)}}):(u=u||t,jb(t,e,r,o,a,n,u,A))},Cct=t=>{let e=!1,r="ENOTDIR";try{e=ec.statSync(t).isDirectory()}catch(o){r=o.code}finally{if(!e)throw new _b(t,r)}};q3.exports.sync=(t,e)=>{t=Wc(t);let r=e.umask,o=e.mode|448,a=(o&r)!==0,n=e.uid,u=e.gid,A=typeof n=="number"&&typeof u=="number"&&(n!==e.processUid||u!==e.processGid),p=e.preserve,h=e.unlink,C=e.cache,I=Wc(e.cwd),v=N=>{K1(C,t,!0),N&&A&&ffe.sync(N,n,u),a&&ec.chmodSync(t,o)};if(C&&Hb(C,t)===!0)return v();if(t===I)return Cct(I),v();if(p)return v(Afe.sync(t,o));let E=Wc(Mb.relative(I,t)).split("/"),F=null;for(let N=E.shift(),U=I;N&&(U+="/"+N);N=E.shift())if(U=Wc(Mb.resolve(U)),!Hb(C,U))try{ec.mkdirSync(U,o),F=F||U,K1(C,U,!0)}catch{let te=ec.lstatSync(U);if(te.isDirectory()){K1(C,U,!0);continue}else if(h){ec.unlinkSync(U),ec.mkdirSync(U,o),F=F||U,K1(C,U,!0);continue}else if(te.isSymbolicLink())return new Ub(U,U+"/"+E.join("/"))}return v(F)}});var Y3=_((dUt,gfe)=>{var G3=Object.create(null),{hasOwnProperty:wct}=Object.prototype;gfe.exports=t=>(wct.call(G3,t)||(G3[t]=t.normalize("NFKD")),G3[t])});var Efe=_((mUt,yfe)=>{var dfe=Be("assert"),Ict=Y3(),Bct=GE(),{join:mfe}=Be("path"),vct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,Dct=vct==="win32";yfe.exports=()=>{let t=new Map,e=new Map,r=h=>h.split("/").slice(0,-1).reduce((I,v)=>(I.length&&(v=mfe(I[I.length-1],v)),I.push(v||"/"),I),[]),o=new Set,a=h=>{let C=e.get(h);if(!C)throw new Error("function does not have any path reservations");return{paths:C.paths.map(I=>t.get(I)),dirs:[...C.dirs].map(I=>t.get(I))}},n=h=>{let{paths:C,dirs:I}=a(h);return C.every(v=>v[0]===h)&&I.every(v=>v[0]instanceof Set&&v[0].has(h))},u=h=>o.has(h)||!n(h)?!1:(o.add(h),h(()=>A(h)),!0),A=h=>{if(!o.has(h))return!1;let{paths:C,dirs:I}=e.get(h),v=new Set;return C.forEach(b=>{let E=t.get(b);dfe.equal(E[0],h),E.length===1?t.delete(b):(E.shift(),typeof E[0]=="function"?v.add(E[0]):E[0].forEach(F=>v.add(F)))}),I.forEach(b=>{let E=t.get(b);dfe(E[0]instanceof Set),E[0].size===1&&E.length===1?t.delete(b):E[0].size===1?(E.shift(),v.add(E[0])):E[0].delete(h)}),o.delete(h),v.forEach(b=>u(b)),!0};return{check:n,reserve:(h,C)=>{h=Dct?["win32 parallelization disabled"]:h.map(v=>Ict(Bct(mfe(v))).toLowerCase());let I=new Set(h.map(v=>r(v)).reduce((v,b)=>v.concat(b)));return e.set(C,{dirs:I,paths:h}),h.forEach(v=>{let b=t.get(v);b?b.push(C):t.set(v,[C])}),I.forEach(v=>{let b=t.get(v);b?b[b.length-1]instanceof Set?b[b.length-1].add(C):b.push(new Set([C])):t.set(v,[new Set([C])])}),u(C)}}}});var Ife=_((yUt,wfe)=>{var Pct=process.platform,Sct=Pct==="win32",xct=global.__FAKE_TESTING_FS__||Be("fs"),{O_CREAT:bct,O_TRUNC:kct,O_WRONLY:Qct,UV_FS_O_FILEMAP:Cfe=0}=xct.constants,Fct=Sct&&!!Cfe,Rct=512*1024,Tct=Cfe|kct|bct|Qct;wfe.exports=Fct?t=>t"w"});var e_=_((EUt,Nfe)=>{"use strict";var Lct=Be("assert"),Nct=Tb(),vn=Be("fs"),Oct=$E(),Gf=Be("path"),Rfe=hfe(),Bfe=e3(),Mct=Efe(),Uct=t3(),fl=HE(),_ct=GE(),Hct=Y3(),vfe=Symbol("onEntry"),V3=Symbol("checkFs"),Dfe=Symbol("checkFs2"),Yb=Symbol("pruneCache"),z3=Symbol("isReusable"),tc=Symbol("makeFs"),J3=Symbol("file"),X3=Symbol("directory"),Wb=Symbol("link"),Pfe=Symbol("symlink"),Sfe=Symbol("hardlink"),xfe=Symbol("unsupported"),bfe=Symbol("checkPath"),vh=Symbol("mkdir"),To=Symbol("onError"),qb=Symbol("pending"),kfe=Symbol("pend"),iC=Symbol("unpend"),W3=Symbol("ended"),K3=Symbol("maybeClose"),Z3=Symbol("skip"),V1=Symbol("doChown"),z1=Symbol("uid"),J1=Symbol("gid"),X1=Symbol("checkedCwd"),Tfe=Be("crypto"),Lfe=Ife(),jct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,Z1=jct==="win32",qct=(t,e)=>{if(!Z1)return vn.unlink(t,e);let r=t+".DELETE."+Tfe.randomBytes(16).toString("hex");vn.rename(t,r,o=>{if(o)return e(o);vn.unlink(r,e)})},Gct=t=>{if(!Z1)return vn.unlinkSync(t);let e=t+".DELETE."+Tfe.randomBytes(16).toString("hex");vn.renameSync(t,e),vn.unlinkSync(e)},Qfe=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,Ffe=t=>Hct(_ct(fl(t))).toLowerCase(),Yct=(t,e)=>{e=Ffe(e);for(let r of t.keys()){let o=Ffe(r);(o===e||o.indexOf(e+"/")===0)&&t.delete(r)}},Wct=t=>{for(let e of t.keys())t.delete(e)},$1=class extends Nct{constructor(e){if(e||(e={}),e.ondone=r=>{this[W3]=!0,this[K3]()},super(e),this[X1]=!1,this.reservations=Mct(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[qb]=0,this[W3]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid=="number"||typeof e.gid=="number"){if(typeof e.uid!="number"||typeof e.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(e.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!="number"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||Z1,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=fl(Gf.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask=="number"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on("entry",r=>this[vfe](r))}warn(e,r,o={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(o.recoverable=!1),super.warn(e,r,o)}[K3](){this[W3]&&this[qb]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[bfe](e){if(this.strip){let r=fl(e.path).split("/");if(r.length=this.strip)e.linkpath=o.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let r=fl(e.path),o=r.split("/");if(o.includes("..")||Z1&&/^[a-z]:\.\.$/i.test(o[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;let[a,n]=Uct(r);a&&(e.path=n,this.warn("TAR_ENTRY_INFO",`stripping ${a} from absolute path`,{entry:e,path:r}))}if(Gf.isAbsolute(e.path)?e.absolute=fl(Gf.resolve(e.path)):e.absolute=fl(Gf.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+"/")!==0&&e.absolute!==this.cwd)return this.warn("TAR_ENTRY_ERROR","path escaped extraction target",{entry:e,path:fl(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!=="Directory"&&e.type!=="GNUDumpDir")return!1;if(this.win32){let{root:r}=Gf.win32.parse(e.absolute);e.absolute=r+Bfe.encode(e.absolute.substr(r.length));let{root:o}=Gf.win32.parse(e.path);e.path=o+Bfe.encode(e.path.substr(o.length))}return!0}[vfe](e){if(!this[bfe](e))return e.resume();switch(Lct.equal(typeof e.absolute,"string"),e.type){case"Directory":case"GNUDumpDir":e.mode&&(e.mode=e.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[V3](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[xfe](e)}}[To](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[iC](),r.resume())}[vh](e,r,o){Rfe(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r,noChmod:this.noChmod},o)}[V1](e){return this.forceChown||this.preserveOwner&&(typeof e.uid=="number"&&e.uid!==this.processUid||typeof e.gid=="number"&&e.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[z1](e){return Qfe(this.uid,e.uid,this.processUid)}[J1](e){return Qfe(this.gid,e.gid,this.processGid)}[J3](e,r){let o=e.mode&4095||this.fmode,a=new Oct.WriteStream(e.absolute,{flags:Lfe(e.size),mode:o,autoClose:!1});a.on("error",p=>{a.fd&&vn.close(a.fd,()=>{}),a.write=()=>!0,this[To](p,e),r()});let n=1,u=p=>{if(p){a.fd&&vn.close(a.fd,()=>{}),this[To](p,e),r();return}--n===0&&vn.close(a.fd,h=>{h?this[To](h,e):this[iC](),r()})};a.on("finish",p=>{let h=e.absolute,C=a.fd;if(e.mtime&&!this.noMtime){n++;let I=e.atime||new Date,v=e.mtime;vn.futimes(C,I,v,b=>b?vn.utimes(h,I,v,E=>u(E&&b)):u())}if(this[V1](e)){n++;let I=this[z1](e),v=this[J1](e);vn.fchown(C,I,v,b=>b?vn.chown(h,I,v,E=>u(E&&b)):u())}u()});let A=this.transform&&this.transform(e)||e;A!==e&&(A.on("error",p=>{this[To](p,e),r()}),e.pipe(A)),A.pipe(a)}[X3](e,r){let o=e.mode&4095||this.dmode;this[vh](e.absolute,o,a=>{if(a){this[To](a,e),r();return}let n=1,u=A=>{--n===0&&(r(),this[iC](),e.resume())};e.mtime&&!this.noMtime&&(n++,vn.utimes(e.absolute,e.atime||new Date,e.mtime,u)),this[V1](e)&&(n++,vn.chown(e.absolute,this[z1](e),this[J1](e),u)),u()})}[xfe](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[Pfe](e,r){this[Wb](e,e.linkpath,"symlink",r)}[Sfe](e,r){let o=fl(Gf.resolve(this.cwd,e.linkpath));this[Wb](e,o,"link",r)}[kfe](){this[qb]++}[iC](){this[qb]--,this[K3]()}[Z3](e){this[iC](),e.resume()}[z3](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&!Z1}[V3](e){this[kfe]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,o=>this[Dfe](e,o))}[Yb](e){e.type==="SymbolicLink"?Wct(this.dirCache):e.type!=="Directory"&&Yct(this.dirCache,e.absolute)}[Dfe](e,r){this[Yb](e);let o=A=>{this[Yb](e),r(A)},a=()=>{this[vh](this.cwd,this.dmode,A=>{if(A){this[To](A,e),o();return}this[X1]=!0,n()})},n=()=>{if(e.absolute!==this.cwd){let A=fl(Gf.dirname(e.absolute));if(A!==this.cwd)return this[vh](A,this.dmode,p=>{if(p){this[To](p,e),o();return}u()})}u()},u=()=>{vn.lstat(e.absolute,(A,p)=>{if(p&&(this.keep||this.newer&&p.mtime>e.mtime)){this[Z3](e),o();return}if(A||this[z3](e,p))return this[tc](null,e,o);if(p.isDirectory()){if(e.type==="Directory"){let h=!this.noChmod&&e.mode&&(p.mode&4095)!==e.mode,C=I=>this[tc](I,e,o);return h?vn.chmod(e.absolute,e.mode,C):C()}if(e.absolute!==this.cwd)return vn.rmdir(e.absolute,h=>this[tc](h,e,o))}if(e.absolute===this.cwd)return this[tc](null,e,o);qct(e.absolute,h=>this[tc](h,e,o))})};this[X1]?n():a()}[tc](e,r,o){if(e){this[To](e,r),o();return}switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[J3](r,o);case"Link":return this[Sfe](r,o);case"SymbolicLink":return this[Pfe](r,o);case"Directory":case"GNUDumpDir":return this[X3](r,o)}}[Wb](e,r,o,a){vn[o](r,e.absolute,n=>{n?this[To](n,e):(this[iC](),e.resume()),a()})}},Gb=t=>{try{return[null,t()]}catch(e){return[e,null]}},$3=class extends $1{[tc](e,r){return super[tc](e,r,()=>{})}[V3](e){if(this[Yb](e),!this[X1]){let n=this[vh](this.cwd,this.dmode);if(n)return this[To](n,e);this[X1]=!0}if(e.absolute!==this.cwd){let n=fl(Gf.dirname(e.absolute));if(n!==this.cwd){let u=this[vh](n,this.dmode);if(u)return this[To](u,e)}}let[r,o]=Gb(()=>vn.lstatSync(e.absolute));if(o&&(this.keep||this.newer&&o.mtime>e.mtime))return this[Z3](e);if(r||this[z3](e,o))return this[tc](null,e);if(o.isDirectory()){if(e.type==="Directory"){let u=!this.noChmod&&e.mode&&(o.mode&4095)!==e.mode,[A]=u?Gb(()=>{vn.chmodSync(e.absolute,e.mode)}):[];return this[tc](A,e)}let[n]=Gb(()=>vn.rmdirSync(e.absolute));this[tc](n,e)}let[a]=e.absolute===this.cwd?[]:Gb(()=>Gct(e.absolute));this[tc](a,e)}[J3](e,r){let o=e.mode&4095||this.fmode,a=A=>{let p;try{vn.closeSync(n)}catch(h){p=h}(A||p)&&this[To](A||p,e),r()},n;try{n=vn.openSync(e.absolute,Lfe(e.size),o)}catch(A){return a(A)}let u=this.transform&&this.transform(e)||e;u!==e&&(u.on("error",A=>this[To](A,e)),e.pipe(u)),u.on("data",A=>{try{vn.writeSync(n,A,0,A.length)}catch(p){a(p)}}),u.on("end",A=>{let p=null;if(e.mtime&&!this.noMtime){let h=e.atime||new Date,C=e.mtime;try{vn.futimesSync(n,h,C)}catch(I){try{vn.utimesSync(e.absolute,h,C)}catch{p=I}}}if(this[V1](e)){let h=this[z1](e),C=this[J1](e);try{vn.fchownSync(n,h,C)}catch(I){try{vn.chownSync(e.absolute,h,C)}catch{p=p||I}}}a(p)})}[X3](e,r){let o=e.mode&4095||this.dmode,a=this[vh](e.absolute,o);if(a){this[To](a,e),r();return}if(e.mtime&&!this.noMtime)try{vn.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[V1](e))try{vn.chownSync(e.absolute,this[z1](e),this[J1](e))}catch{}r(),e.resume()}[vh](e,r){try{return Rfe.sync(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r})}catch(o){return o}}[Wb](e,r,o,a){try{vn[o+"Sync"](r,e.absolute),a(),e.resume()}catch(n){return this[To](n,e)}}};$1.Sync=$3;Nfe.exports=$1});var Hfe=_((CUt,_fe)=>{"use strict";var Kct=NE(),Kb=e_(),Mfe=Be("fs"),Ufe=$E(),Ofe=Be("path"),t_=GE();_fe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Kct(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Vct(o,e),o.file&&o.sync?zct(o):o.file?Jct(o,r):o.sync?Xct(o):Zct(o)};var Vct=(t,e)=>{let r=new Map(e.map(n=>[t_(n),!0])),o=t.filter,a=(n,u)=>{let A=u||Ofe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(Ofe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(t_(n)):n=>a(t_(n))},zct=t=>{let e=new Kb.Sync(t),r=t.file,o=Mfe.statSync(r),a=t.maxReadSize||16*1024*1024;new Ufe.ReadStreamSync(r,{readSize:a,size:o.size}).pipe(e)},Jct=(t,e)=>{let r=new Kb(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("close",u),Mfe.stat(a,(p,h)=>{if(p)A(p);else{let C=new Ufe.ReadStream(a,{readSize:o,size:h.size});C.on("error",A),C.pipe(r)}})});return e?n.then(e,e):n},Xct=t=>new Kb.Sync(t),Zct=t=>new Kb(t)});var jfe=_(us=>{"use strict";us.c=us.create=BAe();us.r=us.replace=N3();us.t=us.list=Lb();us.u=us.update=FAe();us.x=us.extract=Hfe();us.Pack=Cb();us.Unpack=e_();us.Parse=Tb();us.ReadEntry=rb();us.WriteEntry=A3();us.Header=qE();us.Pax=ib();us.types=KU()});var r_,qfe,Dh,e2,t2,Gfe=yt(()=>{r_=$e(nd()),qfe=Be("worker_threads"),Dh=Symbol("kTaskInfo"),e2=class{constructor(e,r){this.fn=e;this.limit=(0,r_.default)(r.poolSize)}run(e){return this.limit(()=>this.fn(e))}},t2=class{constructor(e,r){this.source=e;this.workers=[];this.limit=(0,r_.default)(r.poolSize),this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let o=this.workers.pop();o?o.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new qfe.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return e.on("message",r=>{if(!e[Dh])throw new Error("Assertion failed: Worker sent a result without having a task assigned");e[Dh].resolve(r),e[Dh]=null,e.unref(),this.workers.push(e)}),e.on("error",r=>{e[Dh]?.reject(r),e[Dh]=null}),e.on("exit",r=>{r!==0&&e[Dh]?.reject(new Error(`Worker exited with code ${r}`)),e[Dh]=null}),e}run(e){return this.limit(()=>{let r=this.workers.pop()??this.createWorker();return r.ref(),new Promise((o,a)=>{r[Dh]={resolve:o,reject:a},r.postMessage(e)})})}}});var Wfe=_((vUt,Yfe)=>{var n_;Yfe.exports.getContent=()=>(typeof n_>"u"&&(n_=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),n_)});var Xi={};Vt(Xi,{convertToZip:()=>rut,convertToZipWorker:()=>o_,extractArchiveTo:()=>Xfe,getDefaultTaskPool:()=>zfe,getTaskPoolForConfiguration:()=>Jfe,makeArchiveFromDirectory:()=>tut});function $ct(t,e){switch(t){case"async":return new e2(o_,{poolSize:e});case"workers":return new t2((0,s_.getContent)(),{poolSize:e});default:throw new Error(`Assertion failed: Unknown value ${t} for taskPoolMode`)}}function zfe(){return typeof i_>"u"&&(i_=$ct("workers",zi.availableParallelism())),i_}function Jfe(t){return typeof t>"u"?zfe():ol(eut,t,()=>{let e=t.get("taskPoolMode"),r=t.get("taskPoolConcurrency");switch(e){case"async":return new e2(o_,{poolSize:r});case"workers":return new t2((0,s_.getContent)(),{poolSize:r});default:throw new Error(`Assertion failed: Unknown value ${e} for taskPoolMode`)}})}async function o_(t){let{tmpFile:e,tgz:r,compressionLevel:o,extractBufferOpts:a}=t,n=new Ji(e,{create:!0,level:o,stats:Ea.makeDefaultStats()}),u=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return await Xfe(u,n,a),n.saveAndClose(),e}async function tut(t,{baseFs:e=new Tn,prefixPath:r=Bt.root,compressionLevel:o,inMemory:a=!1}={}){let n;if(a)n=new Ji(null,{level:o});else{let A=await oe.mktempPromise(),p=V.join(A,"archive.zip");n=new Ji(p,{create:!0,level:o})}let u=V.resolve(Bt.root,r);return await n.copyPromise(u,t,{baseFs:e,stableTime:!0,stableSort:!0}),n}async function rut(t,e={}){let r=await oe.mktempPromise(),o=V.join(r,"archive.zip"),a=e.compressionLevel??e.configuration?.get("compressionLevel")??"mixed",n={prefixPath:e.prefixPath,stripComponents:e.stripComponents};return await(e.taskPool??Jfe(e.configuration)).run({tmpFile:o,tgz:t,compressionLevel:a,extractBufferOpts:n}),new Ji(o,{level:e.compressionLevel})}async function*nut(t){let e=new Vfe.default.Parse,r=new Kfe.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",o=>{r.write(o)}),e.on("error",o=>{r.destroy(o)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let o of r){let a=o;yield a,a.resume()}}async function Xfe(t,e,{stripComponents:r=0,prefixPath:o=Bt.dot}={}){function a(n){if(n.path[0]==="/")return!0;let u=n.path.split(/\//g);return!!(u.some(A=>A==="..")||u.length<=r)}for await(let n of nut(t)){if(a(n))continue;let u=V.normalize(fe.toPortablePath(n.path)).replace(/\/$/,"").split(/\//g);if(u.length<=r)continue;let A=u.slice(r).join("/"),p=V.join(o,A),h=420;switch((n.type==="Directory"||((n.mode??0)&73)!==0)&&(h|=73),n.type){case"Directory":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.mkdirSync(p,{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.writeFileSync(p,await Ky(n),{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.symlinkSync(n.linkpath,p),e.lutimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break}}return e}var Kfe,Vfe,s_,i_,eut,Zfe=yt(()=>{Ye();Pt();nA();Kfe=Be("stream"),Vfe=$e(jfe());Gfe();jl();s_=$e(Wfe());eut=new WeakMap});var epe=_((a_,$fe)=>{(function(t,e){typeof a_=="object"?$fe.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(a_,function(){function t(a,n){var u=n?"\u2514":"\u251C";return a?u+="\u2500 ":u+="\u2500\u2500\u2510",u}function e(a,n){var u=[];for(var A in a)!a.hasOwnProperty(A)||n&&typeof a[A]=="function"||u.push(A);return u}function r(a,n,u,A,p,h,C){var I="",v=0,b,E,F=A.slice(0);if(F.push([n,u])&&A.length>0&&(A.forEach(function(U,z){z>0&&(I+=(U[1]?" ":"\u2502")+" "),!E&&U[0]===n&&(E=!0)}),I+=t(a,u)+a,p&&(typeof n!="object"||n instanceof Date)&&(I+=": "+n),E&&(I+=" (circular ref.)"),C(I)),!E&&typeof n=="object"){var N=e(n,h);N.forEach(function(U){b=++v===N.length,r(U,n[U],b,F,p,h,C)})}}var o={};return o.asLines=function(a,n,u,A){var p=typeof u!="function"?u:!1;r(".",a,!1,[],n,p,A||u)},o.asTree=function(a,n,u){var A="";return r(".",a,!1,[],n,u,function(p){A+=p+` -`}),A},o})});var $s={};Vt($s,{emitList:()=>iut,emitTree:()=>ipe,treeNodeToJson:()=>npe,treeNodeToTreeify:()=>rpe});function rpe(t,{configuration:e}){let r={},o=0,a=(n,u)=>{let A=Array.isArray(n)?n.entries():Object.entries(n);for(let[p,h]of A){if(!h)continue;let{label:C,value:I,children:v}=h,b=[];typeof C<"u"&&b.push(md(e,C,2)),typeof I<"u"&&b.push(_t(e,I[0],I[1])),b.length===0&&b.push(md(e,`${p}`,2));let E=b.join(": ").trim(),F=`\0${o++}\0`,N=u[`${F}${E}`]={};typeof v<"u"&&a(v,N)}};if(typeof t.children>"u")throw new Error("The root node must only contain children");return a(t.children,r),r}function npe(t){let e=r=>{if(typeof r.children>"u"){if(typeof r.value>"u")throw new Error("Assertion failed: Expected a value to be set if the children are missing");return yd(r.value[0],r.value[1])}let o=Array.isArray(r.children)?r.children.entries():Object.entries(r.children??{}),a=Array.isArray(r.children)?[]:{};for(let[n,u]of o)u&&(a[sut(n)]=e(u));return typeof r.value>"u"?a:{value:yd(r.value[0],r.value[1]),children:a}};return e(t)}function iut(t,{configuration:e,stdout:r,json:o}){let a=t.map(n=>({value:n}));ipe({children:a},{configuration:e,stdout:r,json:o})}function ipe(t,{configuration:e,stdout:r,json:o,separators:a=0}){if(o){let u=Array.isArray(t.children)?t.children.values():Object.values(t.children??{});for(let A of u)A&&r.write(`${JSON.stringify(npe(A))} -`);return}let n=(0,tpe.asTree)(rpe(t,{configuration:e}),!1,!1);if(n=n.replace(/\0[0-9]+\0/g,""),a>=1&&(n=n.replace(/^([├└]─)/gm,`\u2502 -$1`).replace(/^│\n/,"")),a>=2)for(let u=0;u<2;++u)n=n.replace(/^([│ ].{2}[├│ ].{2}[^\n]+\n)(([│ ]).{2}[├└].{2}[^\n]*\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3 \u2502 (\\n)? -$2`).replace(/^│\n/,"");if(a>=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(n)}function sut(t){return typeof t=="string"?t.replace(/^\0[0-9]+\0/,""):t}var tpe,spe=yt(()=>{tpe=$e(epe());ql()});function r2(t){let e=t.match(out);if(!e?.groups)throw new Error("Assertion failed: Expected the checksum to match the requested pattern");let r=e.groups.cacheVersion?parseInt(e.groups.cacheVersion):null;return{cacheKey:e.groups.cacheKey??null,cacheVersion:r,cacheSpec:e.groups.cacheSpec??null,hash:e.groups.hash}}var ope,l_,c_,Vb,Nr,out,u_=yt(()=>{Ye();Pt();Pt();nA();ope=Be("crypto"),l_=$e(Be("fs"));Yl();rh();jl();xo();c_=Vy(process.env.YARN_CACHE_CHECKPOINT_OVERRIDE??process.env.YARN_CACHE_VERSION_OVERRIDE??9),Vb=Vy(process.env.YARN_CACHE_VERSION_OVERRIDE??10),Nr=class{constructor(e,{configuration:r,immutable:o=r.get("enableImmutableCache"),check:a=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,ope.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=o,this.check=a;let{cacheSpec:n,cacheKey:u}=Nr.getCacheKey(r);this.cacheSpec=n,this.cacheKey=u}static async find(e,{immutable:r,check:o}={}){let a=new Nr(e.get("cacheFolder"),{configuration:e,immutable:r,check:o});return await a.setup(),a}static getCacheKey(e){let r=e.get("compressionLevel"),o=r!=="mixed"?`c${r}`:"";return{cacheKey:[Vb,o].join(""),cacheSpec:o}}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;let e=`${this.configuration.get("globalFolder")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${aE(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let a=r2(r).hash.slice(0,10);return`${aE(e)}-${a}.zip`}isChecksumCompatible(e){if(e===null)return!1;let{cacheVersion:r,cacheSpec:o}=r2(e);if(r===null||r{let ae=new Ji,Ie=V.join(Bt.root,nM(e));return ae.mkdirSync(Ie,{recursive:!0}),ae.writeJsonSync(V.join(Ie,dr.manifest),{name:fn(e),mocked:!0}),ae},C=async(ae,{isColdHit:Ie,controlPath:Fe=null})=>{if(Fe===null&&u.unstablePackages?.has(e.locatorHash))return{isValid:!0,hash:null};let g=r&&!Ie?r2(r).cacheKey:this.cacheKey,Ee=!u.skipIntegrityCheck||!r?`${g}/${await LS(ae)}`:r;if(Fe!==null){let ce=!u.skipIntegrityCheck||!r?`${this.cacheKey}/${await LS(Fe)}`:r;if(Ee!==ce)throw new Jt(18,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}let De=null;switch(r!==null&&Ee!==r&&(this.check?De="throw":r2(r).cacheKey!==r2(Ee).cacheKey?De="update":De=this.configuration.get("checksumBehavior")),De){case null:case"update":return{isValid:!0,hash:Ee};case"ignore":return{isValid:!0,hash:r};case"reset":return{isValid:!1,hash:r};default:case"throw":throw new Jt(18,"The remote archive doesn't match the expected checksum")}},I=async ae=>{if(!n)throw new Error(`Cache check required but no loader configured for ${jr(this.configuration,e)}`);let Ie=await n(),Fe=Ie.getRealPath();Ie.saveAndClose(),await oe.chmodPromise(Fe,420);let g=await C(ae,{controlPath:Fe,isColdHit:!1});if(!g.isValid)throw new Error("Assertion failed: Expected a valid checksum");return g.hash},v=async()=>{if(A===null||!await oe.existsPromise(A)){let ae=await n(),Ie=ae.getRealPath();return ae.saveAndClose(),{source:"loader",path:Ie}}return{source:"mirror",path:A}},b=async()=>{if(!n)throw new Error(`Cache entry required but missing for ${jr(this.configuration,e)}`);if(this.immutable)throw new Jt(56,`Cache entry required but missing for ${jr(this.configuration,e)}`);let{path:ae,source:Ie}=await v(),{hash:Fe}=await C(ae,{isColdHit:!0}),g=this.getLocatorPath(e,Fe),Ee=[];Ie!=="mirror"&&A!==null&&Ee.push(async()=>{let ce=`${A}${this.cacheId}`;await oe.copyFilePromise(ae,ce,l_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(ce,420),await oe.renamePromise(ce,A)}),(!u.mirrorWriteOnly||A===null)&&Ee.push(async()=>{let ce=`${g}${this.cacheId}`;await oe.copyFilePromise(ae,ce,l_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(ce,420),await oe.renamePromise(ce,g)});let De=u.mirrorWriteOnly?A??g:g;return await Promise.all(Ee.map(ce=>ce())),[!1,De,Fe]},E=async()=>{let Ie=(async()=>{let Fe=u.unstablePackages?.has(e.locatorHash),g=Fe||!r||this.isChecksumCompatible(r)?this.getLocatorPath(e,r):null,Ee=g!==null?this.markedFiles.has(g)||await p.existsPromise(g):!1,De=!!u.mockedPackages?.has(e.locatorHash)&&(!this.check||!Ee),ce=De||Ee,ne=ce?o:a;if(ne&&ne(),ce){let ee=null,we=g;if(!De)if(this.check)ee=await I(we);else{let be=await C(we,{isColdHit:!1});if(be.isValid)ee=be.hash;else return b()}return[De,we,ee]}else{if(this.immutable&&Fe)throw new Jt(56,`Cache entry required but missing for ${jr(this.configuration,e)}; consider defining ${de.pretty(this.configuration,"supportedArchitectures",de.Type.CODE)} to cache packages for multiple systems`);return b()}})();this.mutexes.set(e.locatorHash,Ie);try{return await Ie}finally{this.mutexes.delete(e.locatorHash)}};for(let ae;ae=this.mutexes.get(e.locatorHash);)await ae;let[F,N,U]=await E();F||this.markedFiles.add(N);let z,te=F?()=>h():()=>new Ji(N,{baseFs:p,readOnly:!0}),le=new ny(()=>CN(()=>z=te(),ae=>`Failed to open the cache entry for ${jr(this.configuration,e)}: ${ae}`),V),pe=new Uu(N,{baseFs:le,pathUtils:V}),ue=()=>{z?.discardAndClose()},ye=u.unstablePackages?.has(e.locatorHash)?null:U;return[pe,ue,ye]}},out=/^(?:(?(?[0-9]+)(?.*))\/)?(?.*)$/});var zb,ape=yt(()=>{zb=(r=>(r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE",r))(zb||{})});var aut,sC,A_=yt(()=>{Pt();Ll();bf();xo();aut=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,o)=>`${r}#commit=${o}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@.+(?:\/|(?:%2f)))?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,t=>`npm:${t}`],[/^https?:\/\/[^/]+\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>_S({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],sC=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:r}){let o=V.join(e.cwd,dr.lockfile);if(!oe.existsSync(o))return;let a=await oe.readFilePromise(o,"utf8"),n=Ki(a);if(Object.hasOwn(n,"__metadata"))return;let u=this.resolutions=new Map;for(let A of Object.keys(n)){let p=n1(A);if(!p){r.reportWarning(14,`Failed to parse the string "${A}" into a proper descriptor`);continue}let h=ba(p.range)?In(p,`npm:${p.range}`):p,{version:C,resolved:I}=n[A];if(!I)continue;let v;for(let[E,F]of aut){let N=I.match(E);if(N){v=F(C,...N);break}}if(!v){r.reportWarning(14,`${qn(e.configuration,h)}: Only some patterns can be imported from legacy lockfiles (not "${I}")`);continue}let b=h;try{let E=Id(h.range),F=n1(E.selector,!0);F&&(b=F)}catch{}u.set(h.descriptorHash,Fs(b,v))}}supportsDescriptor(e,r){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let a=this.resolutions.get(e.descriptorHash);if(!a)throw new Error("Assertion failed: The resolution should have been registered");let n=$O(a),u=o.project.configuration.normalizeDependency(n);return await this.resolver.getCandidates(u,r,o)}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}});var AA,lpe=yt(()=>{Yl();L1();ql();AA=class extends Xs{constructor({configuration:r,stdout:o,suggestInstall:a=!0}){super();this.errorCount=0;zI(this,{configuration:r}),this.configuration=r,this.stdout=o,this.suggestInstall=a}static async start(r,o){let a=new this(r);try{await o(a)}catch(n){a.reportExceptionOnce(n)}finally{await a.finalize()}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(r){}reportCacheMiss(r){}startSectionSync(r,o){return o()}async startSectionPromise(r,o){return await o()}startTimerSync(r,o,a){return(typeof o=="function"?o:a)()}async startTimerPromise(r,o,a){return await(typeof o=="function"?o:a)()}reportSeparator(){}reportInfo(r,o){}reportWarning(r,o){}reportError(r,o){this.errorCount+=1,this.stdout.write(`${_t(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(r)}: ${o} -`)}reportProgress(r){return{...Promise.resolve().then(async()=>{for await(let{}of r);}),stop:()=>{}}}reportJson(r){}reportFold(r,o){}async finalize(){this.errorCount>0&&(this.stdout.write(` -`),this.stdout.write(`${_t(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. -`),this.suggestInstall&&this.stdout.write(`${_t(this.configuration,"\u27A4","redBright")} This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help. -`))}formatNameWithHyperlink(r){return yU(r,{configuration:this.configuration,json:!1})}}});var oC,f_=yt(()=>{xo();oC=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(OS(e).locatorHash))}supportsLocator(e,r){return!!(r.project.originalPackages.has(e.locatorHash)&&!r.project.lockfileNeedsRefresh)}shouldPersistResolution(e,r){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){let a=o.project.storedResolutions.get(e.descriptorHash);if(a){let u=o.project.originalPackages.get(a);if(u)return[u]}let n=o.project.originalPackages.get(OS(e).locatorHash);if(n)return[n];throw new Error("Resolution expected from the lockfile data")}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.originalPackages.get(e.locatorHash);if(!o)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return o}}});function Yf(){}function lut(t,e,r,o,a){for(var n=0,u=e.length,A=0,p=0;nb.length?F:b}),h.value=t.join(C)}else h.value=t.join(r.slice(A,A+h.count));A+=h.count,h.added||(p+=h.count)}}var v=e[u-1];return u>1&&typeof v.value=="string"&&(v.added||v.removed)&&t.equals("",v.value)&&(e[u-2].value+=v.value,e.pop()),e}function cut(t){return{newPos:t.newPos,components:t.components.slice(0)}}function uut(t,e){if(typeof t=="function")e.callback=t;else if(t)for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}function Ape(t,e,r){return r=uut(r,{ignoreWhitespace:!0}),m_.diff(t,e,r)}function Aut(t,e,r){return y_.diff(t,e,r)}function Jb(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Jb=function(e){return typeof e}:Jb=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Jb(t)}function p_(t){return hut(t)||gut(t)||dut(t)||mut()}function hut(t){if(Array.isArray(t))return h_(t)}function gut(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function dut(t,e){if(!!t){if(typeof t=="string")return h_(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return h_(t,e)}}function h_(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r"u"&&(u.context=4);var A=Aut(r,o,u);if(!A)return;A.push({value:"",lines:[]});function p(U){return U.map(function(z){return" "+z})}for(var h=[],C=0,I=0,v=[],b=1,E=1,F=function(z){var te=A[z],le=te.lines||te.value.replace(/\n$/,"").split(` -`);if(te.lines=le,te.added||te.removed){var pe;if(!C){var ue=A[z-1];C=b,I=E,ue&&(v=u.context>0?p(ue.lines.slice(-u.context)):[],C-=v.length,I-=v.length)}(pe=v).push.apply(pe,p_(le.map(function(ce){return(te.added?"+":"-")+ce}))),te.added?E+=le.length:b+=le.length}else{if(C)if(le.length<=u.context*2&&z=A.length-2&&le.length<=u.context){var g=/\n$/.test(r),Ee=/\n$/.test(o),De=le.length==0&&v.length>Fe.oldLines;!g&&De&&r.length>0&&v.splice(Fe.oldLines,0,"\\ No newline at end of file"),(!g&&!De||!Ee)&&v.push("\\ No newline at end of file")}h.push(Fe),C=0,I=0,v=[]}b+=le.length,E+=le.length}},N=0;N{Yf.prototype={diff:function(e,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=o.callback;typeof o=="function"&&(a=o,o={}),this.options=o;var n=this;function u(F){return a?(setTimeout(function(){a(void 0,F)},0),!0):F}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var A=r.length,p=e.length,h=1,C=A+p;o.maxEditLength&&(C=Math.min(C,o.maxEditLength));var I=[{newPos:-1,components:[]}],v=this.extractCommon(I[0],r,e,0);if(I[0].newPos+1>=A&&v+1>=p)return u([{value:this.join(r),count:r.length}]);function b(){for(var F=-1*h;F<=h;F+=2){var N=void 0,U=I[F-1],z=I[F+1],te=(z?z.newPos:0)-F;U&&(I[F-1]=void 0);var le=U&&U.newPos+1=A&&te+1>=p)return u(lut(n,N.components,r,e,n.useLongestToken));I[F]=N}h++}if(a)(function F(){setTimeout(function(){if(h>C)return a();b()||F()},0)})();else for(;h<=C;){var E=b();if(E)return E}},pushComponent:function(e,r,o){var a=e[e.length-1];a&&a.added===r&&a.removed===o?e[e.length-1]={count:a.count+1,added:r,removed:o}:e.push({count:1,added:r,removed:o})},extractCommon:function(e,r,o,a){for(var n=r.length,u=o.length,A=e.newPos,p=A-a,h=0;A+1"u"?r:u}:o;return typeof t=="string"?t:JSON.stringify(g_(t,null,null,a),a," ")};n2.equals=function(t,e){return Yf.prototype.equals.call(n2,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};d_=new Yf;d_.tokenize=function(t){return t.slice()};d_.join=d_.removeEmpty=function(t){return t}});var hpe=_(($Ut,ppe)=>{var Eut=Hl(),Cut=fE(),wut=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Iut=/^\w*$/;function But(t,e){if(Eut(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||Cut(t)?!0:Iut.test(t)||!wut.test(t)||e!=null&&t in Object(e)}ppe.exports=But});var mpe=_((e3t,dpe)=>{var gpe=UP(),vut="Expected a function";function C_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(vut);var r=function(){var o=arguments,a=e?e.apply(this,o):o[0],n=r.cache;if(n.has(a))return n.get(a);var u=t.apply(this,o);return r.cache=n.set(a,u)||n,u};return r.cache=new(C_.Cache||gpe),r}C_.Cache=gpe;dpe.exports=C_});var Epe=_((t3t,ype)=>{var Dut=mpe(),Put=500;function Sut(t){var e=Dut(t,function(o){return r.size===Put&&r.clear(),o}),r=e.cache;return e}ype.exports=Sut});var w_=_((r3t,Cpe)=>{var xut=Epe(),but=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,kut=/\\(\\)?/g,Qut=xut(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(but,function(r,o,a,n){e.push(a?n.replace(kut,"$1"):o||r)}),e});Cpe.exports=Qut});var jd=_((n3t,wpe)=>{var Fut=Hl(),Rut=hpe(),Tut=w_(),Lut=R1();function Nut(t,e){return Fut(t)?t:Rut(t,e)?[t]:Tut(Lut(t))}wpe.exports=Nut});var aC=_((i3t,Ipe)=>{var Out=fE(),Mut=1/0;function Uut(t){if(typeof t=="string"||Out(t))return t;var e=t+"";return e=="0"&&1/t==-Mut?"-0":e}Ipe.exports=Uut});var Xb=_((s3t,Bpe)=>{var _ut=jd(),Hut=aC();function jut(t,e){e=_ut(e,t);for(var r=0,o=e.length;t!=null&&r{var qut=tS(),Gut=jd(),Yut=MI(),vpe=il(),Wut=aC();function Kut(t,e,r,o){if(!vpe(t))return t;e=Gut(e,t);for(var a=-1,n=e.length,u=n-1,A=t;A!=null&&++a{var Vut=Xb(),zut=I_(),Jut=jd();function Xut(t,e,r){for(var o=-1,a=e.length,n={};++o{function Zut(t,e){return t!=null&&e in Object(t)}xpe.exports=Zut});var B_=_((c3t,kpe)=>{var $ut=jd(),eAt=LI(),tAt=Hl(),rAt=MI(),nAt=GP(),iAt=aC();function sAt(t,e,r){e=$ut(e,t);for(var o=-1,a=e.length,n=!1;++o{var oAt=bpe(),aAt=B_();function lAt(t,e){return t!=null&&aAt(t,e,oAt)}Qpe.exports=lAt});var Tpe=_((A3t,Rpe)=>{var cAt=Spe(),uAt=Fpe();function AAt(t,e){return cAt(t,e,function(r,o){return uAt(t,o)})}Rpe.exports=AAt});var Mpe=_((f3t,Ope)=>{var Lpe=fd(),fAt=LI(),pAt=Hl(),Npe=Lpe?Lpe.isConcatSpreadable:void 0;function hAt(t){return pAt(t)||fAt(t)||!!(Npe&&t&&t[Npe])}Ope.exports=hAt});var Hpe=_((p3t,_pe)=>{var gAt=jP(),dAt=Mpe();function Upe(t,e,r,o,a){var n=-1,u=t.length;for(r||(r=dAt),a||(a=[]);++n0&&r(A)?e>1?Upe(A,e-1,r,o,a):gAt(a,A):o||(a[a.length]=A)}return a}_pe.exports=Upe});var qpe=_((h3t,jpe)=>{var mAt=Hpe();function yAt(t){var e=t==null?0:t.length;return e?mAt(t,1):[]}jpe.exports=yAt});var v_=_((g3t,Gpe)=>{var EAt=qpe(),CAt=fN(),wAt=pN();function IAt(t){return wAt(CAt(t,void 0,EAt),t+"")}Gpe.exports=IAt});var D_=_((d3t,Ype)=>{var BAt=Tpe(),vAt=v_(),DAt=vAt(function(t,e){return t==null?{}:BAt(t,e)});Ype.exports=DAt});var Zb,Wpe=yt(()=>{Yl();Zb=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return this.resolver.supportsDescriptor(e,r)}supportsLocator(e,r){return this.resolver.supportsLocator(e,r)}shouldPersistResolution(e,r){return this.resolver.shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.resolver.bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){throw new Jt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,o,a){throw new Jt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new Jt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}}});var Qi,P_=yt(()=>{Yl();Qi=class extends Xs{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,r){return r()}async startSectionPromise(e,r){return await r()}startTimerSync(e,r,o){return(typeof r=="function"?r:o)()}async startTimerPromise(e,r,o){return await(typeof r=="function"?r:o)()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}reportFold(e,r){}async finalize(){}}});var Kpe,lC,S_=yt(()=>{Pt();Kpe=$e(RS());AE();Bd();ql();rh();bf();xo();lC=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.project=r,this.cwd=e}async setup(){this.manifest=await Ot.tryFind(this.cwd)??new Ot,this.relativeCwd=V.relative(this.project.cwd,this.cwd)||Bt.dot;let e=this.manifest.name?this.manifest.name:eA(null,`${this.computeCandidateName()}-${Qs(this.relativeCwd).substring(0,6)}`);this.anchoredDescriptor=In(e,`${Xn.protocol}${this.relativeCwd}`),this.anchoredLocator=Fs(e,`${Xn.protocol}${this.relativeCwd}`);let r=this.manifest.workspaceDefinitions.map(({pattern:a})=>a);if(r.length===0)return;let o=await(0,Kpe.default)(r,{cwd:fe.fromPortablePath(this.cwd),onlyDirectories:!0,ignore:["**/node_modules","**/.git","**/.yarn"]});o.sort(),await o.reduce(async(a,n)=>{let u=V.resolve(this.cwd,fe.toPortablePath(n)),A=await oe.existsPromise(V.join(u,"package.json"));await a,A&&this.workspacesCwds.add(u)},Promise.resolve())}get anchoredPackage(){let e=this.project.storedPackages.get(this.anchoredLocator.locatorHash);if(!e)throw new Error(`Assertion failed: Expected workspace ${s1(this.project.configuration,this)} (${_t(this.project.configuration,V.join(this.cwd,dr.manifest),Et.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);return e}accepts(e){let r=e.indexOf(":"),o=r!==-1?e.slice(0,r+1):null,a=r!==-1?e.slice(r+1):e;if(o===Xn.protocol&&V.normalize(a)===this.relativeCwd||o===Xn.protocol&&(a==="*"||a==="^"||a==="~"))return!0;let n=ba(a);return n?o===Xn.protocol?n.test(this.manifest.version??"0.0.0"):this.project.configuration.get("enableTransparentWorkspaces")&&this.manifest.version!==null?n.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?"root-workspace":`${V.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=Ot.hardDependencies}={}){let r=new Set,o=a=>{for(let n of e)for(let u of a.manifest[n].values()){let A=this.project.tryWorkspaceByDescriptor(u);A===null||r.has(A)||(r.add(A),o(A))}};return o(this),r}getRecursiveWorkspaceDependents({dependencies:e=Ot.hardDependencies}={}){let r=new Set,o=a=>{for(let n of this.project.workspaces)e.some(A=>[...n.manifest[A].values()].some(p=>{let h=this.project.tryWorkspaceByDescriptor(p);return h!==null&&r1(h.anchoredLocator,a.anchoredLocator)}))&&!r.has(n)&&(r.add(n),o(n))};return o(this),r}getRecursiveWorkspaceChildren(){let e=[];for(let r of this.workspacesCwds){let o=this.project.workspacesByCwd.get(r);o&&e.push(o,...o.getRecursiveWorkspaceChildren())}return e}async persistManifest(){let e={};this.manifest.exportTo(e);let r=V.join(this.cwd,Ot.fileName),o=`${JSON.stringify(e,null,this.manifest.indent)} -`;await oe.changeFilePromise(r,o,{automaticNewlines:!0}),this.manifest.raw=e}}});function QAt({project:t,allDescriptors:e,allResolutions:r,allPackages:o,accessibleLocators:a=new Set,optionalBuilds:n=new Set,peerRequirements:u=new Map,peerWarnings:A=[],volatileDescriptors:p=new Set}){let h=new Map,C=[],I=new Map,v=new Map,b=new Map,E=new Map,F=new Map,N=new Map(t.workspaces.map(ue=>{let ye=ue.anchoredLocator.locatorHash,ae=o.get(ye);if(typeof ae>"u")throw new Error("Assertion failed: The workspace should have an associated package");return[ye,ZI(ae)]})),U=()=>{let ue=oe.mktempSync(),ye=V.join(ue,"stacktrace.log"),ae=String(C.length+1).length,Ie=C.map((Fe,g)=>`${`${g+1}.`.padStart(ae," ")} ${xa(Fe)} -`).join("");throw oe.writeFileSync(ye,Ie),oe.detachTemp(ue),new Jt(45,`Encountered a stack overflow when resolving peer dependencies; cf ${fe.fromPortablePath(ye)}`)},z=ue=>{let ye=r.get(ue.descriptorHash);if(typeof ye>"u")throw new Error("Assertion failed: The resolution should have been registered");let ae=o.get(ye);if(!ae)throw new Error("Assertion failed: The package could not be found");return ae},te=(ue,ye,ae,{top:Ie,optional:Fe})=>{C.length>1e3&&U(),C.push(ye);let g=le(ue,ye,ae,{top:Ie,optional:Fe});return C.pop(),g},le=(ue,ye,ae,{top:Ie,optional:Fe})=>{if(a.has(ye.locatorHash))return;a.add(ye.locatorHash),Fe||n.delete(ye.locatorHash);let g=o.get(ye.locatorHash);if(!g)throw new Error(`Assertion failed: The package (${jr(t.configuration,ye)}) should have been registered`);let Ee=[],De=[],ce=[],ne=[],ee=[];for(let be of Array.from(g.dependencies.values())){if(g.peerDependencies.has(be.identHash)&&g.locatorHash!==Ie)continue;if(Pf(be))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");p.delete(be.descriptorHash);let ht=Fe;if(!ht){let Re=g.dependenciesMeta.get(fn(be));if(typeof Re<"u"){let ze=Re.get(null);typeof ze<"u"&&ze.optional&&(ht=!0)}}let H=r.get(be.descriptorHash);if(!H)throw new Error(`Assertion failed: The resolution (${qn(t.configuration,be)}) should have been registered`);let lt=N.get(H)||o.get(H);if(!lt)throw new Error(`Assertion failed: The package (${H}, resolved from ${qn(t.configuration,be)}) should have been registered`);if(lt.peerDependencies.size===0){te(be,lt,new Map,{top:Ie,optional:ht});continue}let Te,ke,xe=new Set,He;De.push(()=>{Te=tM(be,ye.locatorHash),ke=rM(lt,ye.locatorHash),g.dependencies.delete(be.identHash),g.dependencies.set(Te.identHash,Te),r.set(Te.descriptorHash,ke.locatorHash),e.set(Te.descriptorHash,Te),o.set(ke.locatorHash,ke),Ee.push([lt,Te,ke])}),ce.push(()=>{He=new Map;for(let Re of ke.peerDependencies.values()){let ze=g.dependencies.get(Re.identHash);if(!ze&&t1(ye,Re)&&(ue.identHash===ye.identHash?ze=ue:(ze=In(ye,ue.range),e.set(ze.descriptorHash,ze),r.set(ze.descriptorHash,ye.locatorHash),p.delete(ze.descriptorHash))),(!ze||ze.range==="missing:")&&ke.dependencies.has(Re.identHash)){ke.peerDependencies.delete(Re.identHash);continue}ze||(ze=In(Re,"missing:")),ke.dependencies.set(ze.identHash,ze),Pf(ze)&&dd(b,ze.descriptorHash).add(ke.locatorHash),I.set(ze.identHash,ze),ze.range==="missing:"&&xe.add(ze.identHash),He.set(Re.identHash,ae.get(Re.identHash)??ke.locatorHash)}ke.dependencies=new Map(ks(ke.dependencies,([Re,ze])=>fn(ze)))}),ne.push(()=>{if(!o.has(ke.locatorHash))return;let Re=h.get(lt.locatorHash);typeof Re=="number"&&Re>=2&&U();let ze=h.get(lt.locatorHash),je=typeof ze<"u"?ze+1:1;h.set(lt.locatorHash,je),te(Te,ke,He,{top:Ie,optional:ht}),h.set(lt.locatorHash,je-1)}),ee.push(()=>{let Re=g.dependencies.get(be.identHash);if(typeof Re>"u")throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");let ze=r.get(Re.descriptorHash);if(typeof ze>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");if(dd(F,ze).add(ye.locatorHash),!!o.has(ke.locatorHash)){for(let je of ke.peerDependencies.values()){let x=He.get(je.identHash);if(typeof x>"u")throw new Error("Assertion failed: Expected the peer dependency ident to be registered");Gy(Yy(E,x),fn(je)).push(ke.locatorHash)}for(let je of xe)ke.dependencies.delete(je)}})}for(let be of[...De,...ce])be();let we;do{we=!0;for(let[be,ht,H]of Ee){let lt=Yy(v,be.locatorHash),Te=Qs(...[...H.dependencies.values()].map(Re=>{let ze=Re.range!=="missing:"?r.get(Re.descriptorHash):"missing:";if(typeof ze>"u")throw new Error(`Assertion failed: Expected the resolution for ${qn(t.configuration,Re)} to have been registered`);return ze===Ie?`${ze} (top)`:ze}),ht.identHash),ke=lt.get(Te);if(typeof ke>"u"){lt.set(Te,ht);continue}if(ke===ht)continue;o.delete(H.locatorHash),e.delete(ht.descriptorHash),r.delete(ht.descriptorHash),a.delete(H.locatorHash);let xe=b.get(ht.descriptorHash)||[],He=[g.locatorHash,...xe];b.delete(ht.descriptorHash);for(let Re of He){let ze=o.get(Re);typeof ze>"u"||(ze.dependencies.get(ht.identHash).descriptorHash!==ke.descriptorHash&&(we=!1),ze.dependencies.set(ht.identHash,ke))}}}while(!we);for(let be of[...ne,...ee])be()};for(let ue of t.workspaces){let ye=ue.anchoredLocator;p.delete(ue.anchoredDescriptor.descriptorHash),te(ue.anchoredDescriptor,ye,new Map,{top:ye.locatorHash,optional:!1})}let pe=new Map;for(let[ue,ye]of F){let ae=o.get(ue);if(typeof ae>"u")throw new Error("Assertion failed: Expected the root to be registered");let Ie=E.get(ue);if(!(typeof Ie>"u"))for(let Fe of ye){let g=o.get(Fe);if(!(typeof g>"u")&&!!t.tryWorkspaceByLocator(g))for(let[Ee,De]of Ie){let ce=Js(Ee);if(g.peerDependencies.has(ce.identHash))continue;let ne=`p${Qs(Fe,Ee,ue).slice(0,5)}`;u.set(ne,{subject:Fe,requested:ce,rootRequester:ue,allRequesters:De});let ee=ae.dependencies.get(ce.identHash);if(typeof ee<"u"){let we=z(ee),be=we.version??"0.0.0",ht=new Set;for(let lt of De){let Te=o.get(lt);if(typeof Te>"u")throw new Error("Assertion failed: Expected the link to be registered");let ke=Te.peerDependencies.get(ce.identHash);if(typeof ke>"u")throw new Error("Assertion failed: Expected the ident to be registered");ht.add(ke.range)}if(![...ht].every(lt=>{if(lt.startsWith(Xn.protocol)){if(!t.tryWorkspaceByLocator(we))return!1;lt=lt.slice(Xn.protocol.length),(lt==="^"||lt==="~")&&(lt="*")}return xf(be,lt)})){let lt=ol(pe,we.locatorHash,()=>({type:2,requested:ce,subject:we,dependents:new Map,requesters:new Map,links:new Map,version:be,hash:`p${Qs(Ee).slice(0,5)}`}));lt.dependents.set(g.locatorHash,g),lt.requesters.set(ae.locatorHash,ae);for(let Te of De)lt.links.set(Te,o.get(Te));A.push({type:1,subject:g,requested:ce,requester:ae,version:be,hash:ne,requirementCount:De.length})}}else ae.peerDependenciesMeta.get(Ee)?.optional||A.push({type:0,subject:g,requested:ce,requester:ae,hash:ne})}}}A.push(...pe.values())}function FAt(t,e){let r=IN(t.peerWarnings,"type"),o=r[2]?.map(n=>{let u=Array.from(n.links.values(),C=>{let I=t.storedPackages.get(C.locatorHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the package to be registered");let v=I.peerDependencies.get(n.requested.identHash);if(typeof v>"u")throw new Error("Assertion failed: Expected the ident to be registered");return v.range}),A=n.dependents.size>1?"and other dependencies request":"requests",p=sM(u),h=p?lE(t.configuration,p):_t(t.configuration,"but they have non-overlapping ranges!","redBright");return`${cs(t.configuration,n.requested)} is listed by your project with version ${i1(t.configuration,n.version)}, which doesn't satisfy what ${cs(t.configuration,n.requesters.values().next().value)} ${A} (${h}).`})??[],a=r[0]?.map(n=>`${jr(t.configuration,n.subject)} doesn't provide ${cs(t.configuration,n.requested)} (${_t(t.configuration,n.hash,Et.CODE)}), requested by ${cs(t.configuration,n.requester)}.`)??[];e.startSectionSync({reportFooter:()=>{e.reportWarning(86,`Some peer dependencies are incorrectly met; run ${_t(t.configuration,"yarn explain peer-requirements ",Et.CODE)} for details, where ${_t(t.configuration,"",Et.CODE)} is the six-letter p-prefixed code.`)},skipIfEmpty:!0},()=>{for(let n of ks(o,u=>Jy.default(u)))e.reportWarning(60,n);for(let n of ks(a,u=>Jy.default(u)))e.reportWarning(2,n)})}var $b,ek,tk,Jpe,k_,b_,Q_,rk,PAt,SAt,Vpe,xAt,bAt,kAt,pl,x_,zpe,St,Xpe=yt(()=>{Pt();Pt();Ll();qt();$b=Be("crypto");E_();ek=$e(D_()),tk=$e(nd()),Jpe=$e(Jn()),k_=Be("util"),b_=$e(Be("v8")),Q_=$e(Be("zlib"));u_();v1();A_();f_();AE();uM();Yl();Wpe();L1();P_();Bd();S_();WS();ql();rh();jl();vx();BU();bf();xo();rk=Vy(process.env.YARN_LOCKFILE_VERSION_OVERRIDE??8),PAt=3,SAt=/ *, */g,Vpe=/\/$/,xAt=32,bAt=(0,k_.promisify)(Q_.default.gzip),kAt=(0,k_.promisify)(Q_.default.gunzip),pl=(r=>(r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build",r))(pl||{}),x_={restoreLinkersCustomData:["linkersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["skippedBuilds","storedBuildState"]},zpe=t=>Qs(`${PAt}`,t),St=class{constructor(e,{configuration:r}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.skippedBuilds=new Set;this.lockfileLastVersion=null;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.peerWarnings=[];this.linkersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){if(!e.projectCwd)throw new it(`No project found in ${r}`);let o=e.projectCwd,a=r,n=null;for(;n!==e.projectCwd;){if(n=a,oe.existsSync(V.join(n,dr.manifest))){o=n;break}a=V.dirname(n)}let u=new St(e.projectCwd,{configuration:e});Ke.telemetry?.reportProject(u.cwd),await u.setupResolutions(),await u.setupWorkspaces(),Ke.telemetry?.reportWorkspaceCount(u.workspaces.length),Ke.telemetry?.reportDependencyCount(u.workspaces.reduce((E,F)=>E+F.manifest.dependencies.size+F.manifest.devDependencies.size,0));let A=u.tryWorkspaceByCwd(o);if(A)return{project:u,workspace:A,locator:A.anchoredLocator};let p=await u.findLocatorForLocation(`${o}/`,{strict:!0});if(p)return{project:u,locator:p,workspace:null};let h=_t(e,u.cwd,Et.PATH),C=_t(e,V.relative(u.cwd,o),Et.PATH),I=`- If ${h} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,v=`- If ${h} is intended to be a project, it might be that you forgot to list ${C} in its workspace configuration.`,b=`- Finally, if ${h} is fine and you intend ${C} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new it(`The nearest package directory (${_t(e,o,Et.PATH)}) doesn't seem to be part of the project declared in ${_t(e,u.cwd,Et.PATH)}. - -${[I,v,b].join(` -`)}`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=V.join(this.cwd,dr.lockfile),r=this.configuration.get("defaultLanguageName");if(oe.existsSync(e)){let o=await oe.readFilePromise(e,"utf8");this.lockFileChecksum=zpe(o);let a=Ki(o);if(a.__metadata){let n=a.__metadata.version,u=a.__metadata.cacheKey;this.lockfileLastVersion=n,this.lockfileNeedsRefresh=n"u")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${A})`);let h=Sf(p.resolution,!0),C=new Ot;C.load(p,{yamlCompatibilityMode:!0});let I=C.version,v=C.languageName||r,b=p.linkType.toUpperCase(),E=p.conditions??null,F=C.dependencies,N=C.peerDependencies,U=C.dependenciesMeta,z=C.peerDependenciesMeta,te=C.bin;if(p.checksum!=null){let pe=typeof u<"u"&&!p.checksum.includes("/")?`${u}/${p.checksum}`:p.checksum;this.storedChecksums.set(h.locatorHash,pe)}let le={...h,version:I,languageName:v,linkType:b,conditions:E,dependencies:F,peerDependencies:N,dependenciesMeta:U,peerDependenciesMeta:z,bin:te};this.originalPackages.set(le.locatorHash,le);for(let pe of A.split(SAt)){let ue=nh(pe);n<=6&&(ue=this.configuration.normalizeDependency(ue),ue=In(ue,ue.range.replace(/^patch:[^@]+@(?!npm(:|%3A))/,"$1npm%3A"))),this.storedDescriptors.set(ue.descriptorHash,ue),this.storedResolutions.set(ue.descriptorHash,h.locatorHash)}}}else o.includes("yarn lockfile v1")&&(this.lockfileLastVersion=-1)}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,r=(0,tk.default)(4),o=async(a,n)=>{if(e.has(n))return a;e.add(n);let u=new lC(n,{project:this});await r(()=>u.setup());let A=a.then(()=>{this.addWorkspace(u)});return Array.from(u.workspacesCwds).reduce(o,A)};await o(Promise.resolve(),this.cwd)}addWorkspace(e){let r=this.workspacesByIdent.get(e.anchoredLocator.identHash);if(typeof r<"u")throw new Error(`Duplicate workspace name ${cs(this.configuration,e.anchoredLocator)}: ${fe.fromPortablePath(e.cwd)} conflicts with ${fe.fromPortablePath(r.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.anchoredLocator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){V.isAbsolute(e)||(e=V.resolve(this.cwd,e)),e=V.normalize(e).replace(/\/+$/,"");let r=this.workspacesByCwd.get(e);return r||null}getWorkspaceByCwd(e){let r=this.tryWorkspaceByCwd(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByFilePath(e){let r=null;for(let o of this.workspaces)V.relative(o.cwd,e).startsWith("../")||r&&r.cwd.length>=o.cwd.length||(r=o);return r||null}getWorkspaceByFilePath(e){let r=this.tryWorkspaceByFilePath(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByIdent(e){let r=this.workspacesByIdent.get(e.identHash);return typeof r>"u"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${cs(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){if(e.range.startsWith(Xn.protocol)){let o=e.range.slice(Xn.protocol.length);if(o!=="^"&&o!=="~"&&o!=="*"&&!ba(o))return this.tryWorkspaceByCwd(o)}let r=this.tryWorkspaceByIdent(e);return r===null||(Pf(e)&&(e=$I(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${qn(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(Hc(e)&&(e=e1(e)),r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${jr(this.configuration,e)})`);return r}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if("descriptorHash"in e){let r=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let o=new Set(this.storedResolutions.values());typeof r<"u"&&!o.has(r)&&this.deleteLocator(r)}if("locatorHash"in e){this.deleteLocator(e.locatorHash);for(let[r,o]of this.storedResolutions)o===e.locatorHash&&this.deleteDescriptor(r)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),r=new Map;for(let[o,a]of this.storedResolutions.entries()){let n=r.get(a);n||r.set(a,n=new Set),n.add(o)}for(let o of this.originalPackages.values()){let a;try{a=e.shouldPersistResolution(o,{project:this,resolver:e})}catch{a=!1}if(!a){this.deleteLocator(o.locatorHash);let n=r.get(o.locatorHash);if(n){r.delete(o.locatorHash);for(let u of n)this.deleteDescriptor(u)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,o]of e.dependencies)Pf(o)&&e.dependencies.set(r,$I(o))}getDependencyMeta(e,r){let o={},n=this.topLevelWorkspace.manifest.dependenciesMeta.get(fn(e));if(!n)return o;let u=n.get(null);if(u&&Object.assign(o,u),r===null||!Jpe.default.valid(r))return o;for(let[A,p]of n)A!==null&&A===r&&Object.assign(o,p);return o}async findLocatorForLocation(e,{strict:r=!1}={}){let o=new Qi,a=this.configuration.getLinkers(),n={project:this,report:o};for(let u of a){let A=await u.findPackageLocator(e,n);if(A){if(r&&(await u.findPackageLocation(A,n)).replace(Vpe,"")!==e.replace(Vpe,""))continue;return A}}return null}async loadUserConfig(){let e=V.join(this.cwd,"yarn.config.cjs");return await oe.existsPromise(e)?zp(e):null}async preparePackage(e,{resolver:r,resolveOptions:o}){let a=await this.configuration.getPackageExtensions(),n=this.configuration.normalizePackage(e,{packageExtensions:a});for(let[u,A]of n.dependencies){let p=await this.configuration.reduceHook(C=>C.reduceDependency,A,this,n,A,{resolver:r,resolveOptions:o});if(!t1(A,p))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let h=r.bindDescriptor(p,n,o);n.dependencies.set(u,h)}return n}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions();let r=new Map(this.originalPackages),o=[];e.lockfileOnly||this.forgetTransientResolutions();let a=e.resolver||this.configuration.makeResolver(),n=new sC(a);await n.setup(this,{report:e.report});let u=e.lockfileOnly?[new Zb(a)]:[n,a],A=new vd([new oC(a),...u]),p=new vd([...u]),h=this.configuration.makeFetcher(),C=e.lockfileOnly?{project:this,report:e.report,resolver:A}:{project:this,report:e.report,resolver:A,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:h,cacheOptions:{mirrorWriteOnly:!0}}},I=new Map,v=new Map,b=new Map,E=new Map,F=new Map,N=new Map,U=this.topLevelWorkspace.anchoredLocator,z=new Set,te=[],le=M4(),pe=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(Xs.progressViaTitle(),async ce=>{let ne=async H=>{let lt=await Wy(async()=>await A.resolve(H,C),He=>`${jr(this.configuration,H)}: ${He}`);if(!r1(H,lt))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${jr(this.configuration,H)} to ${jr(this.configuration,lt)})`);E.set(lt.locatorHash,lt),!r.delete(lt.locatorHash)&&!this.tryWorkspaceByLocator(lt)&&o.push(lt);let ke=await this.preparePackage(lt,{resolver:A,resolveOptions:C}),xe=Uc([...ke.dependencies.values()].map(He=>ht(He)));return te.push(xe),xe.catch(()=>{}),v.set(ke.locatorHash,ke),ke},ee=async H=>{let lt=F.get(H.locatorHash);if(typeof lt<"u")return lt;let Te=Promise.resolve().then(()=>ne(H));return F.set(H.locatorHash,Te),Te},we=async(H,lt)=>{let Te=await ht(lt);return I.set(H.descriptorHash,H),b.set(H.descriptorHash,Te.locatorHash),Te},be=async H=>{ce.setTitle(qn(this.configuration,H));let lt=this.resolutionAliases.get(H.descriptorHash);if(typeof lt<"u")return we(H,this.storedDescriptors.get(lt));let Te=A.getResolutionDependencies(H,C),ke=Object.fromEntries(await Uc(Object.entries(Te).map(async([Re,ze])=>{let je=A.bindDescriptor(ze,U,C),x=await ht(je);return z.add(x.locatorHash),[Re,x]}))),He=(await Wy(async()=>await A.getCandidates(H,ke,C),Re=>`${qn(this.configuration,H)}: ${Re}`))[0];if(typeof He>"u")throw new Jt(82,`${qn(this.configuration,H)}: No candidates found`);if(e.checkResolutions){let{locators:Re}=await p.getSatisfying(H,ke,[He],{...C,resolver:p});if(!Re.find(ze=>ze.locatorHash===He.locatorHash))throw new Jt(78,`Invalid resolution ${JI(this.configuration,H,He)}`)}return I.set(H.descriptorHash,H),b.set(H.descriptorHash,He.locatorHash),ee(He)},ht=H=>{let lt=N.get(H.descriptorHash);if(typeof lt<"u")return lt;I.set(H.descriptorHash,H);let Te=Promise.resolve().then(()=>be(H));return N.set(H.descriptorHash,Te),Te};for(let H of this.workspaces){let lt=H.anchoredDescriptor;te.push(ht(lt))}for(;te.length>0;){let H=[...te];te.length=0,await Uc(H)}});let ue=sl(r.values(),ce=>this.tryWorkspaceByLocator(ce)?sl.skip:ce);if(o.length>0||ue.length>0){let ce=new Set(this.workspaces.flatMap(H=>{let lt=v.get(H.anchoredLocator.locatorHash);if(!lt)throw new Error("Assertion failed: The workspace should have been resolved");return Array.from(lt.dependencies.values(),Te=>{let ke=b.get(Te.descriptorHash);if(!ke)throw new Error("Assertion failed: The resolution should have been registered");return ke})})),ne=H=>ce.has(H.locatorHash)?"0":"1",ee=H=>xa(H),we=ks(o,[ne,ee]),be=ks(ue,[ne,ee]),ht=e.report.getRecommendedLength();we.length>0&&e.report.reportInfo(85,`${_t(this.configuration,"+",Et.ADDED)} ${lS(this.configuration,we,ht)}`),be.length>0&&e.report.reportInfo(85,`${_t(this.configuration,"-",Et.REMOVED)} ${lS(this.configuration,be,ht)}`)}let ye=new Set(this.resolutionAliases.values()),ae=new Set(v.keys()),Ie=new Set,Fe=new Map,g=[];QAt({project:this,accessibleLocators:Ie,volatileDescriptors:ye,optionalBuilds:ae,peerRequirements:Fe,peerWarnings:g,allDescriptors:I,allResolutions:b,allPackages:v});for(let ce of z)ae.delete(ce);for(let ce of ye)I.delete(ce),b.delete(ce);let Ee=new Set,De=new Set;for(let ce of v.values())ce.conditions!=null&&(!ae.has(ce.locatorHash)||(jS(ce,pe)||(jS(ce,le)&&e.report.reportWarningOnce(77,`${jr(this.configuration,ce)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${_t(this.configuration,"supportedArchitectures",Et.SETTING)} setting`),De.add(ce.locatorHash)),Ee.add(ce.locatorHash)));this.storedResolutions=b,this.storedDescriptors=I,this.storedPackages=v,this.accessibleLocators=Ie,this.conditionalLocators=Ee,this.disabledLocators=De,this.originalPackages=E,this.optionalBuilds=ae,this.peerRequirements=Fe,this.peerWarnings=g}async fetchEverything({cache:e,report:r,fetcher:o,mode:a,persistProject:n=!0}){let u={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},A=o||this.configuration.makeFetcher(),p={checksums:this.storedChecksums,project:this,cache:e,fetcher:A,report:r,cacheOptions:u},h=Array.from(new Set(ks(this.storedResolutions.values(),[E=>{let F=this.storedPackages.get(E);if(!F)throw new Error("Assertion failed: The locator should have been registered");return xa(F)}])));a==="update-lockfile"&&(h=h.filter(E=>!this.storedChecksums.has(E)));let C=!1,I=Xs.progressViaCounter(h.length);await r.reportProgress(I);let v=(0,tk.default)(xAt);if(await Uc(h.map(E=>v(async()=>{let F=this.storedPackages.get(E);if(!F)throw new Error("Assertion failed: The locator should have been registered");if(Hc(F))return;let N;try{N=await A.fetch(F,p)}catch(U){U.message=`${jr(this.configuration,F)}: ${U.message}`,r.reportExceptionOnce(U),C=U;return}N.checksum!=null?this.storedChecksums.set(F.locatorHash,N.checksum):this.storedChecksums.delete(F.locatorHash),N.releaseFs&&N.releaseFs()}).finally(()=>{I.tick()}))),C)throw C;let b=n&&a!=="update-lockfile"?await this.cacheCleanup({cache:e,report:r}):null;if(r.cacheMisses.size>0||b){let F=(await Promise.all([...r.cacheMisses].map(async ue=>{let ye=this.storedPackages.get(ue),ae=this.storedChecksums.get(ue)??null,Ie=e.getLocatorPath(ye,ae);return(await oe.statPromise(Ie)).size}))).reduce((ue,ye)=>ue+ye,0)-(b?.size??0),N=r.cacheMisses.size,U=b?.count??0,z=`${rS(N,{zero:"No new packages",one:"A package was",more:`${_t(this.configuration,N,Et.NUMBER)} packages were`})} added to the project`,te=`${rS(U,{zero:"none were",one:"one was",more:`${_t(this.configuration,U,Et.NUMBER)} were`})} removed`,le=F!==0?` (${_t(this.configuration,F,Et.SIZE_DIFF)})`:"",pe=U>0?N>0?`${z}, and ${te}${le}.`:`${z}, but ${te}${le}.`:`${z}${le}.`;r.reportInfo(13,pe)}}async linkEverything({cache:e,report:r,fetcher:o,mode:a}){let n={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},u=o||this.configuration.makeFetcher(),A={checksums:this.storedChecksums,project:this,cache:e,fetcher:u,report:r,cacheOptions:n},p=this.configuration.getLinkers(),h={project:this,report:r},C=new Map(p.map(ce=>{let ne=ce.makeInstaller(h),ee=ce.getCustomDataKey(),we=this.linkersCustomData.get(ee);return typeof we<"u"&&ne.attachCustomData(we),[ce,ne]})),I=new Map,v=new Map,b=new Map,E=new Map(await Uc([...this.accessibleLocators].map(async ce=>{let ne=this.storedPackages.get(ce);if(!ne)throw new Error("Assertion failed: The locator should have been registered");return[ce,await u.fetch(ne,A)]}))),F=[],N=new Set,U=[];for(let ce of this.accessibleLocators){let ne=this.storedPackages.get(ce);if(typeof ne>"u")throw new Error("Assertion failed: The locator should have been registered");let ee=E.get(ne.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The fetch result should have been registered");let we=[],be=H=>{we.push(H)},ht=this.tryWorkspaceByLocator(ne);if(ht!==null){let H=[],{scripts:lt}=ht.manifest;for(let ke of["preinstall","install","postinstall"])lt.has(ke)&&H.push({type:0,script:ke});try{for(let[ke,xe]of C)if(ke.supportsPackage(ne,h)&&(await xe.installPackage(ne,ee,{holdFetchResult:be})).buildRequest!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{we.length===0?ee.releaseFs?.():F.push(Uc(we).catch(()=>{}).then(()=>{ee.releaseFs?.()}))}let Te=V.join(ee.packageFs.getRealPath(),ee.prefixPath);v.set(ne.locatorHash,Te),!Hc(ne)&&H.length>0&&b.set(ne.locatorHash,{buildDirectives:H,buildLocations:[Te]})}else{let H=p.find(ke=>ke.supportsPackage(ne,h));if(!H)throw new Jt(12,`${jr(this.configuration,ne)} isn't supported by any available linker`);let lt=C.get(H);if(!lt)throw new Error("Assertion failed: The installer should have been registered");let Te;try{Te=await lt.installPackage(ne,ee,{holdFetchResult:be})}finally{we.length===0?ee.releaseFs?.():F.push(Uc(we).then(()=>{}).then(()=>{ee.releaseFs?.()}))}I.set(ne.locatorHash,H),v.set(ne.locatorHash,Te.packageLocation),Te.buildRequest&&Te.packageLocation&&(Te.buildRequest.skipped?(N.add(ne.locatorHash),this.skippedBuilds.has(ne.locatorHash)||U.push([ne,Te.buildRequest.explain])):b.set(ne.locatorHash,{buildDirectives:Te.buildRequest.directives,buildLocations:[Te.packageLocation]}))}}let z=new Map;for(let ce of this.accessibleLocators){let ne=this.storedPackages.get(ce);if(!ne)throw new Error("Assertion failed: The locator should have been registered");let ee=this.tryWorkspaceByLocator(ne)!==null,we=async(be,ht)=>{let H=v.get(ne.locatorHash);if(typeof H>"u")throw new Error(`Assertion failed: The package (${jr(this.configuration,ne)}) should have been registered`);let lt=[];for(let Te of ne.dependencies.values()){let ke=this.storedResolutions.get(Te.descriptorHash);if(typeof ke>"u")throw new Error(`Assertion failed: The resolution (${qn(this.configuration,Te)}, from ${jr(this.configuration,ne)})should have been registered`);let xe=this.storedPackages.get(ke);if(typeof xe>"u")throw new Error(`Assertion failed: The package (${ke}, resolved from ${qn(this.configuration,Te)}) should have been registered`);let He=this.tryWorkspaceByLocator(xe)===null?I.get(ke):null;if(typeof He>"u")throw new Error(`Assertion failed: The package (${ke}, resolved from ${qn(this.configuration,Te)}) should have been registered`);He===be||He===null?v.get(xe.locatorHash)!==null&<.push([Te,xe]):!ee&&H!==null&&Gy(z,ke).push(H)}H!==null&&await ht.attachInternalDependencies(ne,lt)};if(ee)for(let[be,ht]of C)be.supportsPackage(ne,h)&&await we(be,ht);else{let be=I.get(ne.locatorHash);if(!be)throw new Error("Assertion failed: The linker should have been found");let ht=C.get(be);if(!ht)throw new Error("Assertion failed: The installer should have been registered");await we(be,ht)}}for(let[ce,ne]of z){let ee=this.storedPackages.get(ce);if(!ee)throw new Error("Assertion failed: The package should have been registered");let we=I.get(ee.locatorHash);if(!we)throw new Error("Assertion failed: The linker should have been found");let be=C.get(we);if(!be)throw new Error("Assertion failed: The installer should have been registered");await be.attachExternalDependents(ee,ne)}let te=new Map;for(let[ce,ne]of C){let ee=await ne.finalizeInstall();for(let we of ee?.records??[])we.buildRequest.skipped?(N.add(we.locator.locatorHash),this.skippedBuilds.has(we.locator.locatorHash)||U.push([we.locator,we.buildRequest.explain])):b.set(we.locator.locatorHash,{buildDirectives:we.buildRequest.directives,buildLocations:we.buildLocations});typeof ee?.customData<"u"&&te.set(ce.getCustomDataKey(),ee.customData)}if(this.linkersCustomData=te,await Uc(F),a==="skip-build")return;for(let[,ce]of ks(U,([ne])=>xa(ne)))ce(r);let le=new Set(this.storedPackages.keys()),pe=new Set(b.keys());for(let ce of pe)le.delete(ce);let ue=(0,$b.createHash)("sha512");ue.update(process.versions.node),await this.configuration.triggerHook(ce=>ce.globalHashGeneration,this,ce=>{ue.update("\0"),ue.update(ce)});let ye=ue.digest("hex"),ae=new Map,Ie=ce=>{let ne=ae.get(ce.locatorHash);if(typeof ne<"u")return ne;let ee=this.storedPackages.get(ce.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The package should have been registered");let we=(0,$b.createHash)("sha512");we.update(ce.locatorHash),ae.set(ce.locatorHash,"");for(let be of ee.dependencies.values()){let ht=this.storedResolutions.get(be.descriptorHash);if(typeof ht>"u")throw new Error(`Assertion failed: The resolution (${qn(this.configuration,be)}) should have been registered`);let H=this.storedPackages.get(ht);if(typeof H>"u")throw new Error("Assertion failed: The package should have been registered");we.update(Ie(H))}return ne=we.digest("hex"),ae.set(ce.locatorHash,ne),ne},Fe=(ce,ne)=>{let ee=(0,$b.createHash)("sha512");ee.update(ye),ee.update(Ie(ce));for(let we of ne)ee.update(we);return ee.digest("hex")},g=new Map,Ee=!1,De=ce=>{let ne=new Set([ce.locatorHash]);for(let ee of ne){let we=this.storedPackages.get(ee);if(!we)throw new Error("Assertion failed: The package should have been registered");for(let be of we.dependencies.values()){let ht=this.storedResolutions.get(be.descriptorHash);if(!ht)throw new Error(`Assertion failed: The resolution (${qn(this.configuration,be)}) should have been registered`);if(ht!==ce.locatorHash&&pe.has(ht))return!1;let H=this.storedPackages.get(ht);if(!H)throw new Error("Assertion failed: The package should have been registered");let lt=this.tryWorkspaceByLocator(H);if(lt){if(lt.anchoredLocator.locatorHash!==ce.locatorHash&&pe.has(lt.anchoredLocator.locatorHash))return!1;ne.add(lt.anchoredLocator.locatorHash)}ne.add(ht)}}return!0};for(;pe.size>0;){let ce=pe.size,ne=[];for(let ee of pe){let we=this.storedPackages.get(ee);if(!we)throw new Error("Assertion failed: The package should have been registered");if(!De(we))continue;let be=b.get(we.locatorHash);if(!be)throw new Error("Assertion failed: The build directive should have been registered");let ht=Fe(we,be.buildLocations);if(this.storedBuildState.get(we.locatorHash)===ht){g.set(we.locatorHash,ht),pe.delete(ee);continue}Ee||(await this.persistInstallStateFile(),Ee=!0),this.storedBuildState.has(we.locatorHash)?r.reportInfo(8,`${jr(this.configuration,we)} must be rebuilt because its dependency tree changed`):r.reportInfo(7,`${jr(this.configuration,we)} must be built because it never has been before or the last one failed`);let H=be.buildLocations.map(async lt=>{if(!V.isAbsolute(lt))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${lt})`);for(let Te of be.buildDirectives){let ke=`# This file contains the result of Yarn building a package (${xa(we)}) -`;switch(Te.type){case 0:ke+=`# Script name: ${Te.script} -`;break;case 1:ke+=`# Script code: ${Te.script} -`;break}let xe=null;if(!await oe.mktempPromise(async Re=>{let ze=V.join(Re,"build.log"),{stdout:je,stderr:x}=this.configuration.getSubprocessStreams(ze,{header:ke,prefix:jr(this.configuration,we),report:r}),w;try{switch(Te.type){case 0:w=await Wx(we,Te.script,[],{cwd:lt,project:this,stdin:xe,stdout:je,stderr:x});break;case 1:w=await EU(we,Te.script,[],{cwd:lt,project:this,stdin:xe,stdout:je,stderr:x});break}}catch(R){x.write(R.stack),w=1}if(je.end(),x.end(),w===0)return!0;oe.detachTemp(Re);let S=`${jr(this.configuration,we)} couldn't be built successfully (exit code ${_t(this.configuration,w,Et.NUMBER)}, logs can be found here: ${_t(this.configuration,ze,Et.PATH)})`,y=this.optionalBuilds.has(we.locatorHash);return y?r.reportInfo(9,S):r.reportError(9,S),Vce&&r.reportFold(fe.fromPortablePath(ze),oe.readFileSync(ze,"utf8")),y}))return!1}return!0});ne.push(...H,Promise.allSettled(H).then(lt=>{pe.delete(ee),lt.every(Te=>Te.status==="fulfilled"&&Te.value===!0)&&g.set(we.locatorHash,ht)}))}if(await Uc(ne),ce===pe.size){let ee=Array.from(pe).map(we=>{let be=this.storedPackages.get(we);if(!be)throw new Error("Assertion failed: The package should have been registered");return jr(this.configuration,be)}).join(", ");r.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ee})`);break}}this.storedBuildState=g,this.skippedBuilds=N}async installWithNewReport(e,r){return(await Lt.start({configuration:this.configuration,json:e.json,stdout:e.stdout,forceSectionAlignment:!0,includeLogs:!e.json&&!e.quiet,includeVersion:!0},async a=>{await this.install({...r,report:a})})).exitCode()}async install(e){let r=this.configuration.get("nodeLinker");Ke.telemetry?.reportInstall(r);let o=!1;if(await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{this.configuration.get("enableOfflineMode")&&e.report.reportWarning(90,"Offline work is enabled; Yarn won't fetch packages from the remote registry if it can avoid it"),await this.configuration.triggerHook(C=>C.validateProject,this,{reportWarning:(C,I)=>{e.report.reportWarning(C,I)},reportError:(C,I)=>{e.report.reportError(C,I),o=!0}})}),o)return;let a=await this.configuration.getPackageExtensions();for(let C of a.values())for(let[,I]of C)for(let v of I)v.status="inactive";let n=V.join(this.cwd,dr.lockfile),u=null;if(e.immutable)try{u=await oe.readFilePromise(n,"utf8")}catch(C){throw C.code==="ENOENT"?new Jt(28,"The lockfile would have been created by this install, which is explicitly forbidden."):C}await e.report.startTimerPromise("Resolution step",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise("Post-resolution validation",{skipIfEmpty:!0},async()=>{FAt(this,e.report);for(let[,C]of a)for(let[,I]of C)for(let v of I)if(v.userProvided){let b=_t(this.configuration,v,Et.PACKAGE_EXTENSION);switch(v.status){case"inactive":e.report.reportWarning(68,`${b}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case"redundant":e.report.reportWarning(69,`${b}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(u!==null){let C=Mg(u,this.generateLockfile());if(C!==u){let I=fpe(n,n,u,C,void 0,void 0,{maxEditLength:100});if(I){e.report.reportSeparator();for(let v of I.hunks){e.report.reportInfo(null,`@@ -${v.oldStart},${v.oldLines} +${v.newStart},${v.newLines} @@`);for(let b of v.lines)b.startsWith("+")?e.report.reportError(28,_t(this.configuration,b,Et.ADDED)):b.startsWith("-")?e.report.reportError(28,_t(this.configuration,b,Et.REMOVED)):e.report.reportInfo(null,_t(this.configuration,b,"grey"))}e.report.reportSeparator()}throw new Jt(28,"The lockfile would have been modified by this install, which is explicitly forbidden.")}}});for(let C of a.values())for(let[,I]of C)for(let v of I)v.userProvided&&v.status==="active"&&Ke.telemetry?.reportPackageExtension(yd(v,Et.PACKAGE_EXTENSION));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e)});let A=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],p=await Promise.all(A.map(async C=>NS(C,{cwd:this.cwd})));(typeof e.persistProject>"u"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode==="update-lockfile"){e.report.reportWarning(73,`Skipped due to ${_t(this.configuration,"mode=update-lockfile",Et.CODE)}`);return}await this.linkEverything(e);let C=await Promise.all(A.map(async I=>NS(I,{cwd:this.cwd})));for(let I=0;I{await this.configuration.triggerHook(C=>C.validateProjectAfterInstall,this,{reportWarning:(C,I)=>{e.report.reportWarning(C,I)},reportError:(C,I)=>{e.report.reportError(C,I),h=!0}})}),!h&&await this.configuration.triggerHook(C=>C.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,u]of this.storedResolutions.entries()){let A=e.get(u);A||e.set(u,A=new Set),A.add(n)}let r={},{cacheKey:o}=Nr.getCacheKey(this.configuration);r.__metadata={version:rk,cacheKey:o};for(let[n,u]of e.entries()){let A=this.originalPackages.get(n);if(!A)continue;let p=[];for(let b of u){let E=this.storedDescriptors.get(b);if(!E)throw new Error("Assertion failed: The descriptor should have been registered");p.push(E)}let h=p.map(b=>Sa(b)).sort().join(", "),C=new Ot;C.version=A.linkType==="HARD"?A.version:"0.0.0-use.local",C.languageName=A.languageName,C.dependencies=new Map(A.dependencies),C.peerDependencies=new Map(A.peerDependencies),C.dependenciesMeta=new Map(A.dependenciesMeta),C.peerDependenciesMeta=new Map(A.peerDependenciesMeta),C.bin=new Map(A.bin);let I,v=this.storedChecksums.get(A.locatorHash);if(typeof v<"u"){let b=v.indexOf("/");if(b===-1)throw new Error("Assertion failed: Expected the checksum to reference its cache key");let E=v.slice(0,b),F=v.slice(b+1);E===o?I=F:I=v}r[h]={...C.exportTo({},{compatibilityMode:!1}),linkType:A.linkType.toLowerCase(),resolution:xa(A),checksum:I,conditions:A.conditions||void 0}}return`${[`# This file is generated by running "yarn install" inside your project. -`,`# Manual changes might be lost - proceed with caution! -`].join("")} -`+Ba(r)}async persistLockfile(){let e=V.join(this.cwd,dr.lockfile),r="";try{r=await oe.readFilePromise(e,"utf8")}catch{}let o=this.generateLockfile(),a=Mg(r,o);a!==r&&(await oe.writeFilePromise(e,a),this.lockFileChecksum=zpe(a),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let u of Object.values(x_))e.push(...u);let r=(0,ek.default)(this,e),o=b_.default.serialize(r),a=Qs(o);if(this.installStateChecksum===a)return;let n=this.configuration.get("installStatePath");await oe.mkdirPromise(V.dirname(n),{recursive:!0}),await oe.writeFilePromise(n,await bAt(o)),this.installStateChecksum=a}async restoreInstallState({restoreLinkersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:o=!0}={}){let a=this.configuration.get("installStatePath"),n;try{let u=await kAt(await oe.readFilePromise(a));n=b_.default.deserialize(u),this.installStateChecksum=Qs(u)}catch{r&&await this.applyLightResolution();return}e&&typeof n.linkersCustomData<"u"&&(this.linkersCustomData=n.linkersCustomData),o&&Object.assign(this,(0,ek.default)(n,x_.restoreBuildState)),r&&(n.lockFileChecksum===this.lockFileChecksum?Object.assign(this,(0,ek.default)(n,x_.restoreResolutions)):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new Qi}),await this.persistInstallStateFile()}async persist(){let e=(0,tk.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(r=>e(()=>r.persistManifest()))])}async cacheCleanup({cache:e,report:r}){if(this.configuration.get("enableGlobalCache"))return null;let o=new Set([".gitignore"]);if(!CM(e.cwd,this.cwd)||!await oe.existsPromise(e.cwd))return null;let a=[];for(let u of await oe.readdirPromise(e.cwd)){if(o.has(u))continue;let A=V.resolve(e.cwd,u);e.markedFiles.has(A)||(e.immutable?r.reportError(56,`${_t(this.configuration,V.basename(A),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):a.push(oe.lstatPromise(A).then(async p=>(await oe.removePromise(A),p.size))))}if(a.length===0)return null;let n=await Promise.all(a);return{count:a.length,size:n.reduce((u,A)=>u+A,0)}}}});function RAt(t){let o=Math.floor(t.timeNow/864e5),a=t.updateInterval*864e5,n=t.state.lastUpdate??t.timeNow+a+Math.floor(a*t.randomInitialInterval),u=n+a,A=t.state.lastTips??o*864e5,p=A+864e5+8*36e5-t.timeZone,h=u<=t.timeNow,C=p<=t.timeNow,I=null;return(h||C||!t.state.lastUpdate||!t.state.lastTips)&&(I={},I.lastUpdate=h?t.timeNow:n,I.lastTips=A,I.blocks=h?{}:t.state.blocks,I.displayedTips=t.state.displayedTips),{nextState:I,triggerUpdate:h,triggerTips:C,nextTips:C?o*864e5:A}}var cC,Zpe=yt(()=>{Pt();T1();rh();Ix();jl();bf();cC=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.nextTips=0;this.displayedTips=[];this.shouldCommitTips=!1;this.configuration=e;let o=this.getRegistryPath();this.isNew=!oe.existsSync(o),this.shouldShowTips=!1,this.sendReport(r),this.startBuffer()}commitTips(){this.shouldShowTips&&(this.shouldCommitTips=!0)}selectTip(e){let r=new Set(this.displayedTips),o=A=>A&&tn?xf(tn,A):!1,a=e.map((A,p)=>p).filter(A=>e[A]&&o(e[A]?.selector));if(a.length===0)return null;let n=a.filter(A=>!r.has(A));if(n.length===0){let A=Math.floor(a.length*.2);this.displayedTips=A>0?this.displayedTips.slice(-A):[],n=a.filter(p=>!r.has(p))}let u=n[Math.floor(Math.random()*n.length)];return this.displayedTips.push(u),this.commitTips(),e[u]}reportVersion(e){this.reportValue("version",e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue("commandName",e||"")}reportPluginName(e){this.reportValue("pluginName",e)}reportProject(e){this.reportEnumerator("projectCount",e)}reportInstall(e){this.reportHit("installCount",e)}reportPackageExtension(e){this.reportValue("packageExtension",e)}reportWorkspaceCount(e){this.reportValue("workspaceCount",String(e))}reportDependencyCount(e){this.reportValue("dependencyCount",String(e))}reportValue(e,r){dd(this.values,e).add(r)}reportEnumerator(e,r){dd(this.enumerators,e).add(Qs(r))}reportHit(e,r="*"){let o=Yy(this.hits,e),a=ol(o,r,()=>0);o.set(r,a+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return V.join(e,"telemetry.json")}sendReport(e){let r=this.getRegistryPath(),o;try{o=oe.readJsonSync(r)}catch{o={}}let{nextState:a,triggerUpdate:n,triggerTips:u,nextTips:A}=RAt({state:o,timeNow:Date.now(),timeZone:new Date().getTimezoneOffset()*60*1e3,randomInitialInterval:Math.random(),updateInterval:this.configuration.get("telemetryInterval")});if(this.nextTips=A,this.displayedTips=o.displayedTips??[],a!==null)try{oe.mkdirSync(V.dirname(r),{recursive:!0}),oe.writeJsonSync(r,a)}catch{return!1}if(u&&this.configuration.get("enableTips")&&(this.shouldShowTips=!0),n){let p=o.blocks??{};if(Object.keys(p).length===0){let h=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,C=I=>O4(h,I,{configuration:this.configuration}).catch(()=>{});for(let[I,v]of Object.entries(o.blocks??{})){if(Object.keys(v).length===0)continue;let b=v;b.userId=I,b.reportType="primary";for(let N of Object.keys(b.enumerators??{}))b.enumerators[N]=b.enumerators[N].length;C(b);let E=new Map,F=20;for(let[N,U]of Object.entries(b.values))U.length>0&&E.set(N,U.slice(0,F));for(;E.size>0;){let N={};N.userId=I,N.reportType="secondary",N.metrics={};for(let[U,z]of E)N.metrics[U]=z.shift(),z.length===0&&E.delete(U);C(N)}}}}return!0}applyChanges(){let e=this.getRegistryPath(),r;try{r=oe.readJsonSync(e)}catch{r={}}let o=this.configuration.get("telemetryUserId")??"*",a=r.blocks=r.blocks??{},n=a[o]=a[o]??{};for(let u of this.hits.keys()){let A=n.hits=n.hits??{},p=A[u]=A[u]??{};for(let[h,C]of this.hits.get(u))p[h]=(p[h]??0)+C}for(let u of["values","enumerators"])for(let A of this[u].keys()){let p=n[u]=n[u]??{};p[A]=[...new Set([...p[A]??[],...this[u].get(A)??[]])]}this.shouldCommitTips&&(r.lastTips=this.nextTips,r.displayedTips=this.displayedTips),oe.mkdirSync(V.dirname(e),{recursive:!0}),oe.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}}});var i2={};Vt(i2,{BuildDirectiveType:()=>zb,CACHE_CHECKPOINT:()=>c_,CACHE_VERSION:()=>Vb,Cache:()=>Nr,Configuration:()=>Ke,DEFAULT_RC_FILENAME:()=>G4,FormatType:()=>kle,InstallMode:()=>pl,LEGACY_PLUGINS:()=>I1,LOCKFILE_VERSION:()=>rk,LegacyMigrationResolver:()=>sC,LightReport:()=>AA,LinkType:()=>zy,LockfileResolver:()=>oC,Manifest:()=>Ot,MessageName:()=>wr,MultiFetcher:()=>pE,PackageExtensionStatus:()=>vN,PackageExtensionType:()=>BN,Project:()=>St,Report:()=>Xs,ReportError:()=>Jt,SettingsType:()=>B1,StreamReport:()=>Lt,TAG_REGEXP:()=>QE,TelemetryManager:()=>cC,ThrowReport:()=>Qi,VirtualFetcher:()=>hE,WindowsLinkType:()=>bx,Workspace:()=>lC,WorkspaceFetcher:()=>dE,WorkspaceResolver:()=>Xn,YarnVersion:()=>tn,execUtils:()=>Ur,folderUtils:()=>YS,formatUtils:()=>de,hashUtils:()=>wn,httpUtils:()=>rn,miscUtils:()=>_e,nodeUtils:()=>zi,parseMessageName:()=>AP,reportOptionDeprecations:()=>LE,scriptUtils:()=>un,semverUtils:()=>Qr,stringifyMessageName:()=>Wu,structUtils:()=>G,tgzUtils:()=>Xi,treeUtils:()=>$s});var Ye=yt(()=>{Dx();WS();ql();rh();Ix();jl();vx();BU();bf();xo();Zfe();spe();u_();v1();v1();ape();A_();lpe();f_();AE();fP();cM();Xpe();Yl();L1();Zpe();P_();AM();fM();Bd();S_();T1();wne()});var ihe=_((H_t,o2)=>{"use strict";var LAt=process.env.TERM_PROGRAM==="Hyper",NAt=process.platform==="win32",the=process.platform==="linux",F_={ballotDisabled:"\u2612",ballotOff:"\u2610",ballotOn:"\u2611",bullet:"\u2022",bulletWhite:"\u25E6",fullBlock:"\u2588",heart:"\u2764",identicalTo:"\u2261",line:"\u2500",mark:"\u203B",middot:"\xB7",minus:"\uFF0D",multiplication:"\xD7",obelus:"\xF7",pencilDownRight:"\u270E",pencilRight:"\u270F",pencilUpRight:"\u2710",percent:"%",pilcrow2:"\u2761",pilcrow:"\xB6",plusMinus:"\xB1",section:"\xA7",starsOff:"\u2606",starsOn:"\u2605",upDownArrow:"\u2195"},rhe=Object.assign({},F_,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),nhe=Object.assign({},F_,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:the?"\u25B8":"\u276F",pointerSmall:the?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});o2.exports=NAt&&!LAt?rhe:nhe;Reflect.defineProperty(o2.exports,"common",{enumerable:!1,value:F_});Reflect.defineProperty(o2.exports,"windows",{enumerable:!1,value:rhe});Reflect.defineProperty(o2.exports,"other",{enumerable:!1,value:nhe})});var Kc=_((j_t,R_)=>{"use strict";var OAt=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),MAt=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,she=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=n=>{let u=n.open=`\x1B[${n.codes[0]}m`,A=n.close=`\x1B[${n.codes[1]}m`,p=n.regex=new RegExp(`\\u001b\\[${n.codes[1]}m`,"g");return n.wrap=(h,C)=>{h.includes(A)&&(h=h.replace(p,A+u));let I=u+h+A;return C?I.replace(/\r*\n/g,`${A}$&${u}`):I},n},r=(n,u,A)=>typeof n=="function"?n(u):n.wrap(u,A),o=(n,u)=>{if(n===""||n==null)return"";if(t.enabled===!1)return n;if(t.visible===!1)return"";let A=""+n,p=A.includes(` -`),h=u.length;for(h>0&&u.includes("unstyle")&&(u=[...new Set(["unstyle",...u])].reverse());h-- >0;)A=r(t.styles[u[h]],A,p);return A},a=(n,u,A)=>{t.styles[n]=e({name:n,codes:u}),(t.keys[A]||(t.keys[A]=[])).push(n),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(h){t.alias(n,h)},get(){let h=C=>o(C,h.stack);return Reflect.setPrototypeOf(h,t),h.stack=this.stack?this.stack.concat(n):[n],h}})};return a("reset",[0,0],"modifier"),a("bold",[1,22],"modifier"),a("dim",[2,22],"modifier"),a("italic",[3,23],"modifier"),a("underline",[4,24],"modifier"),a("inverse",[7,27],"modifier"),a("hidden",[8,28],"modifier"),a("strikethrough",[9,29],"modifier"),a("black",[30,39],"color"),a("red",[31,39],"color"),a("green",[32,39],"color"),a("yellow",[33,39],"color"),a("blue",[34,39],"color"),a("magenta",[35,39],"color"),a("cyan",[36,39],"color"),a("white",[37,39],"color"),a("gray",[90,39],"color"),a("grey",[90,39],"color"),a("bgBlack",[40,49],"bg"),a("bgRed",[41,49],"bg"),a("bgGreen",[42,49],"bg"),a("bgYellow",[43,49],"bg"),a("bgBlue",[44,49],"bg"),a("bgMagenta",[45,49],"bg"),a("bgCyan",[46,49],"bg"),a("bgWhite",[47,49],"bg"),a("blackBright",[90,39],"bright"),a("redBright",[91,39],"bright"),a("greenBright",[92,39],"bright"),a("yellowBright",[93,39],"bright"),a("blueBright",[94,39],"bright"),a("magentaBright",[95,39],"bright"),a("cyanBright",[96,39],"bright"),a("whiteBright",[97,39],"bright"),a("bgBlackBright",[100,49],"bgBright"),a("bgRedBright",[101,49],"bgBright"),a("bgGreenBright",[102,49],"bgBright"),a("bgYellowBright",[103,49],"bgBright"),a("bgBlueBright",[104,49],"bgBright"),a("bgMagentaBright",[105,49],"bgBright"),a("bgCyanBright",[106,49],"bgBright"),a("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=MAt,t.hasColor=t.hasAnsi=n=>(t.ansiRegex.lastIndex=0,typeof n=="string"&&n!==""&&t.ansiRegex.test(n)),t.alias=(n,u)=>{let A=typeof u=="string"?t[u]:u;if(typeof A!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");A.stack||(Reflect.defineProperty(A,"name",{value:n}),t.styles[n]=A,A.stack=[n]),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(p){t.alias(n,p)},get(){let p=h=>o(h,p.stack);return Reflect.setPrototypeOf(p,t),p.stack=this.stack?this.stack.concat(A.stack):A.stack,p}})},t.theme=n=>{if(!OAt(n))throw new TypeError("Expected theme to be an object");for(let u of Object.keys(n))t.alias(u,n[u]);return t},t.alias("unstyle",n=>typeof n=="string"&&n!==""?(t.ansiRegex.lastIndex=0,n.replace(t.ansiRegex,"")):""),t.alias("noop",n=>n),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=ihe(),t.define=a,t};R_.exports=she();R_.exports.create=she});var Lo=_(nn=>{"use strict";var UAt=Object.prototype.toString,rc=Kc(),ohe=!1,T_=[],ahe={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};nn.longest=(t,e)=>t.reduce((r,o)=>Math.max(r,e?o[e].length:o.length),0);nn.hasColor=t=>!!t&&rc.hasColor(t);var ik=nn.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);nn.nativeType=t=>UAt.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");nn.isAsyncFn=t=>nn.nativeType(t)==="asyncfunction";nn.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";nn.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;nn.scrollDown=(t=[])=>[...t.slice(1),t[0]];nn.scrollUp=(t=[])=>[t.pop(),...t];nn.reorder=(t=[])=>{let e=t.slice();return e.sort((r,o)=>r.index>o.index?1:r.index{let o=t.length,a=r===o?0:r<0?o-1:r,n=t[e];t[e]=t[a],t[a]=n};nn.width=(t,e=80)=>{let r=t&&t.columns?t.columns:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[0]),process.platform==="win32"?r-1:r};nn.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};nn.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:o=` -`+r,width:a=80}=e,n=(o+r).match(/[^\S\n]/g)||[];a-=n.length;let u=`.{1,${a}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,A=t.trim(),p=new RegExp(u,"g"),h=A.match(p)||[];return h=h.map(C=>C.replace(/\n$/,"")),e.padEnd&&(h=h.map(C=>C.padEnd(a," "))),e.padStart&&(h=h.map(C=>C.padStart(a," "))),r+h.join(o)};nn.unmute=t=>{let e=t.stack.find(o=>rc.keys.color.includes(o));return e?rc[e]:t.stack.find(o=>o.slice(2)==="bg")?rc[e.slice(2)]:o=>o};nn.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";nn.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o));if(e){let o=rc["bg"+nn.pascal(e)];return o?o.black:t}let r=t.stack.find(o=>o.slice(0,2)==="bg");return r?rc[r.slice(2).toLowerCase()]||t:rc.none};nn.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o)),r=t.stack.find(o=>o.slice(0,2)==="bg");if(e&&!r)return rc[ahe[e]||e];if(r){let o=r.slice(2).toLowerCase(),a=ahe[o];return a&&rc["bg"+nn.pascal(a)]||t}return rc.none};nn.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),o=e>=12?"pm":"am";e=e%12;let a=e===0?12:e,n=r<10?"0"+r:r;return a+":"+n+" "+o};nn.set=(t={},e="",r)=>e.split(".").reduce((o,a,n,u)=>{let A=u.length-1>n?o[a]||{}:r;return!nn.isObject(A)&&n{let o=t[e]==null?e.split(".").reduce((a,n)=>a&&a[n],t):t[e];return o??r};nn.mixin=(t,e)=>{if(!ik(t))return e;if(!ik(e))return t;for(let r of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,r);if(o.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&ik(o.value)){let a=Object.getOwnPropertyDescriptor(t,r);ik(a.value)?t[r]=nn.merge({},t[r],e[r]):Reflect.defineProperty(t,r,o)}else Reflect.defineProperty(t,r,o);else Reflect.defineProperty(t,r,o)}return t};nn.merge=(...t)=>{let e={};for(let r of t)nn.mixin(e,r);return e};nn.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let o of Object.keys(r)){let a=r[o];typeof a=="function"?nn.define(t,o,a.bind(e)):nn.define(t,o,a)}};nn.onExit=t=>{let e=(r,o)=>{ohe||(ohe=!0,T_.forEach(a=>a()),r===!0&&process.exit(128+o))};T_.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),T_.push(t)};nn.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};nn.defineExport=(t,e,r)=>{let o;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(a){o=a},get(){return o?o():r()}})}});var lhe=_(pC=>{"use strict";pC.ctrl={a:"first",b:"backward",c:"cancel",d:"deleteForward",e:"last",f:"forward",g:"reset",i:"tab",k:"cutForward",l:"reset",n:"newItem",m:"cancel",j:"submit",p:"search",r:"remove",s:"save",u:"undo",w:"cutLeft",x:"toggleCursor",v:"paste"};pC.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};pC.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};pC.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};pC.keys={pageup:"pageUp",pagedown:"pageDown",home:"home",end:"end",cancel:"cancel",delete:"deleteForward",backspace:"delete",down:"down",enter:"submit",escape:"cancel",left:"left",space:"space",number:"number",return:"submit",right:"right",tab:"next",up:"up"}});var Ahe=_((Y_t,uhe)=>{"use strict";var che=Be("readline"),_At=lhe(),HAt=/^(?:\x1b)([a-zA-Z0-9])$/,jAt=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,qAt={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"};function GAt(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function YAt(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var sk=(t="",e={})=>{let r,o={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:t,raw:t,...e};if(Buffer.isBuffer(t)?t[0]>127&&t[1]===void 0?(t[0]-=128,t="\x1B"+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=o.sequence||""),o.sequence=o.sequence||t||o.name,t==="\r")o.raw=void 0,o.name="return";else if(t===` -`)o.name="enter";else if(t===" ")o.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x1B\x7F"||t==="\x1B\b")o.name="backspace",o.meta=t.charAt(0)==="\x1B";else if(t==="\x1B"||t==="\x1B\x1B")o.name="escape",o.meta=t.length===2;else if(t===" "||t==="\x1B ")o.name="space",o.meta=t.length===2;else if(t<="")o.name=String.fromCharCode(t.charCodeAt(0)+"a".charCodeAt(0)-1),o.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")o.name="number";else if(t.length===1&&t>="a"&&t<="z")o.name=t;else if(t.length===1&&t>="A"&&t<="Z")o.name=t.toLowerCase(),o.shift=!0;else if(r=HAt.exec(t))o.meta=!0,o.shift=/^[A-Z]$/.test(r[1]);else if(r=jAt.exec(t)){let a=[...t];a[0]==="\x1B"&&a[1]==="\x1B"&&(o.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),u=(r[3]||r[5]||1)-1;o.ctrl=!!(u&4),o.meta=!!(u&10),o.shift=!!(u&1),o.code=n,o.name=qAt[n],o.shift=GAt(n)||o.shift,o.ctrl=YAt(n)||o.ctrl}return o};sk.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let o=che.createInterface({terminal:!0,input:r});che.emitKeypressEvents(r,o);let a=(A,p)=>e(A,sk(A,p),o),n=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",a),o.resume(),()=>{r.isTTY&&r.setRawMode(n),r.removeListener("keypress",a),o.pause(),o.close()}};sk.action=(t,e,r)=>{let o={..._At,...r};return e.ctrl?(e.action=o.ctrl[e.name],e):e.option&&o.option?(e.action=o.option[e.name],e):e.shift?(e.action=o.shift[e.name],e):(e.action=o.keys[e.name],e)};uhe.exports=sk});var phe=_((W_t,fhe)=>{"use strict";fhe.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(!!e)for(let r of Object.keys(e)){let o=e[r];typeof o=="number"&&(o={interval:o}),WAt(t,r,o)}};function WAt(t,e,r={}){let o=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},a=r.interval||120;o.frames=r.frames||[],o.loading=!0;let n=setInterval(()=>{o.ms=Date.now()-o.start,o.tick++,t.render()},a);return o.stop=()=>{o.loading=!1,clearInterval(n)},Reflect.defineProperty(o,"interval",{value:n}),t.once("close",()=>o.stop()),o.stop}});var ghe=_((K_t,hhe)=>{"use strict";var{define:KAt,width:VAt}=Lo(),L_=class{constructor(e){let r=e.options;KAt(this,"_prompt",e),this.type=e.type,this.name=e.name,this.message="",this.header="",this.footer="",this.error="",this.hint="",this.input="",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt="",this.buffer="",this.width=VAt(r.stdout||process.stdout),Object.assign(this,r),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let r=this._color||e[this.status];return typeof r=="function"?r:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading=="boolean"?this._loading:this.loadingChoices?"choices":!1}get status(){return this.cancelled?"cancelled":this.submitted?"submitted":"pending"}};hhe.exports=L_});var mhe=_((V_t,dhe)=>{"use strict";var N_=Lo(),eo=Kc(),O_={default:eo.noop,noop:eo.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||N_.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||N_.complement(this.primary)},primary:eo.cyan,success:eo.green,danger:eo.magenta,strong:eo.bold,warning:eo.yellow,muted:eo.dim,disabled:eo.gray,dark:eo.dim.gray,underline:eo.underline,set info(t){this._info=t},get info(){return this._info||this.primary},set em(t){this._em=t},get em(){return this._em||this.primary.underline},set heading(t){this._heading=t},get heading(){return this._heading||this.muted.underline},set pending(t){this._pending=t},get pending(){return this._pending||this.primary},set submitted(t){this._submitted=t},get submitted(){return this._submitted||this.success},set cancelled(t){this._cancelled=t},get cancelled(){return this._cancelled||this.danger},set typing(t){this._typing=t},get typing(){return this._typing||this.dim},set placeholder(t){this._placeholder=t},get placeholder(){return this._placeholder||this.primary.dim},set highlight(t){this._highlight=t},get highlight(){return this._highlight||this.inverse}};O_.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(eo.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(eo.visible=t.styles.visible);let e=N_.merge({},O_,t.styles);delete e.merge;for(let r of Object.keys(eo))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});for(let r of Object.keys(eo.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});return e};dhe.exports=O_});var Ehe=_((z_t,yhe)=>{"use strict";var M_=process.platform==="win32",Wf=Kc(),zAt=Lo(),U_={...Wf.symbols,upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:Wf.symbols.check,leftAngle:"\u2039",mark:"\u203B",minus:"\u2212",multiplication:"\xD7",obelus:"\xF7",percent:"%",pilcrow:"\xB6",pilcrow2:"\u2761",pencilUpRight:"\u2710",pencilDownRight:"\u270E",pencilRight:"\u270F",plus:"+",plusMinus:"\xB1",pointRight:"\u261E",rightAngle:"\u203A",section:"\xA7",hexagon:{off:"\u2B21",on:"\u2B22",disabled:"\u2B22"},ballot:{on:"\u2611",off:"\u2610",disabled:"\u2612"},stars:{on:"\u2605",off:"\u2606",disabled:"\u2606"},folder:{on:"\u25BC",off:"\u25B6",disabled:"\u25B6"},prefix:{pending:Wf.symbols.question,submitted:Wf.symbols.check,cancelled:Wf.symbols.cross},separator:{pending:Wf.symbols.pointerSmall,submitted:Wf.symbols.middot,cancelled:Wf.symbols.middot},radio:{off:M_?"( )":"\u25EF",on:M_?"(*)":"\u25C9",disabled:M_?"(|)":"\u24BE"},numbers:["\u24EA","\u2460","\u2461","\u2462","\u2463","\u2464","\u2465","\u2466","\u2467","\u2468","\u2469","\u246A","\u246B","\u246C","\u246D","\u246E","\u246F","\u2470","\u2471","\u2472","\u2473","\u3251","\u3252","\u3253","\u3254","\u3255","\u3256","\u3257","\u3258","\u3259","\u325A","\u325B","\u325C","\u325D","\u325E","\u325F","\u32B1","\u32B2","\u32B3","\u32B4","\u32B5","\u32B6","\u32B7","\u32B8","\u32B9","\u32BA","\u32BB","\u32BC","\u32BD","\u32BE","\u32BF"]};U_.merge=t=>{let e=zAt.merge({},Wf.symbols,U_,t.symbols);return delete e.merge,e};yhe.exports=U_});var whe=_((J_t,Che)=>{"use strict";var JAt=mhe(),XAt=Ehe(),ZAt=Lo();Che.exports=t=>{t.options=ZAt.merge({},t.options.theme,t.options),t.symbols=XAt.merge(t.options),t.styles=JAt.merge(t.options)}});var Phe=_((vhe,Dhe)=>{"use strict";var Ihe=process.env.TERM_PROGRAM==="Apple_Terminal",$At=Kc(),__=Lo(),Vc=Dhe.exports=vhe,Di="\x1B[",Bhe="\x07",H_=!1,Ph=Vc.code={bell:Bhe,beep:Bhe,beginning:`${Di}G`,down:`${Di}J`,esc:Di,getPosition:`${Di}6n`,hide:`${Di}?25l`,line:`${Di}2K`,lineEnd:`${Di}K`,lineStart:`${Di}1K`,restorePosition:Di+(Ihe?"8":"u"),savePosition:Di+(Ihe?"7":"s"),screen:`${Di}2J`,show:`${Di}?25h`,up:`${Di}1J`},qd=Vc.cursor={get hidden(){return H_},hide(){return H_=!0,Ph.hide},show(){return H_=!1,Ph.show},forward:(t=1)=>`${Di}${t}C`,backward:(t=1)=>`${Di}${t}D`,nextLine:(t=1)=>`${Di}E`.repeat(t),prevLine:(t=1)=>`${Di}F`.repeat(t),up:(t=1)=>t?`${Di}${t}A`:"",down:(t=1)=>t?`${Di}${t}B`:"",right:(t=1)=>t?`${Di}${t}C`:"",left:(t=1)=>t?`${Di}${t}D`:"",to(t,e){return e?`${Di}${e+1};${t+1}H`:`${Di}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?qd.left(-t):t>0?qd.right(t):"",r+=e<0?qd.up(-e):e>0?qd.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:o,input:a,prompt:n,size:u,value:A}=t;if(o=__.isPrimitive(o)?String(o):"",a=__.isPrimitive(a)?String(a):"",A=__.isPrimitive(A)?String(A):"",u){let p=Vc.cursor.up(u)+Vc.cursor.to(n.length),h=a.length-r;return h>0&&(p+=Vc.cursor.left(h)),p}if(A||e){let p=!a&&!!o?-o.length:-a.length+r;return e&&(p-=e.length),a===""&&o&&!n.includes(o)&&(p+=o.length),Vc.cursor.move(p)}}},j_=Vc.erase={screen:Ph.screen,up:Ph.up,down:Ph.down,line:Ph.line,lineEnd:Ph.lineEnd,lineStart:Ph.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return j_.line+qd.to(0);let r=n=>[...$At.unstyle(n)].length,o=t.split(/\r?\n/),a=0;for(let n of o)a+=1+Math.floor(Math.max(r(n)-1,0)/e);return(j_.line+qd.prevLine()).repeat(a-1)+j_.line+qd.to(0)}});var hC=_((X_t,xhe)=>{"use strict";var eft=Be("events"),She=Kc(),q_=Ahe(),tft=phe(),rft=ghe(),nft=whe(),Ra=Lo(),Gd=Phe(),a2=class extends eft{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,nft(this),tft(this),this.state=new rft(this),this.initial=[e.initial,e.default].find(r=>r!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=sft(this.options.margin),this.setMaxListeners(0),ift(this)}async keypress(e,r={}){this.keypressed=!0;let o=q_.action(e,q_(e,r),this.options.actions);this.state.keypress=o,this.emit("keypress",e,o),this.emit("state",this.state.clone());let a=this.options[o.action]||this[o.action]||this.dispatch;if(typeof a=="function")return await a.call(this,e,o);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(Gd.code.beep)}cursorHide(){this.stdout.write(Gd.cursor.hide()),Ra.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(Gd.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let r=this.state.buffer;this.state.buffer="",!(!r&&!e||this.options.show===!1)&&this.stdout.write(Gd.cursor.down(e)+Gd.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:o}=this.sections(),{cursor:a,initial:n="",input:u="",value:A=""}=this,p=this.state.size=o.length,h={after:r,cursor:a,initial:n,input:u,prompt:e,size:p,value:A},C=Gd.cursor.restore(h);C&&this.stdout.write(C)}sections(){let{buffer:e,input:r,prompt:o}=this.state;o=She.unstyle(o);let a=She.unstyle(e),n=a.indexOf(o),u=a.slice(0,n),p=a.slice(n).split(` -`),h=p[0],C=p[p.length-1],v=(o+(r?" "+r:"")).length,b=ve.call(this,this.value),this.result=()=>o.call(this,this.value),typeof r.initial=="function"&&(this.initial=await r.initial.call(this,this)),typeof r.onRun=="function"&&await r.onRun.call(this,this),typeof r.onSubmit=="function"){let a=r.onSubmit.bind(this),n=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await a(this.name,this.value,this),n())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,r)=>{if(this.once("submit",e),this.once("cancel",r),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,r,o){let{options:a,state:n,symbols:u,timers:A}=this,p=A&&A[e];n.timer=p;let h=a[e]||n[e]||u[e],C=r&&r[e]!=null?r[e]:await h;if(C==="")return C;let I=await this.resolve(C,n,r,o);return!I&&r&&r[e]?this.resolve(h,n,r,o):I}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,o=this.state;return o.timer=r,Ra.isObject(e)&&(e=e[o.status]||e.pending),Ra.hasColor(e)?e:(this.styles[o.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return Ra.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,o=this.state;o.timer=r;let a=e[o.status]||e.pending||o.separator,n=await this.resolve(a,o);return Ra.isObject(n)&&(n=n[o.status]||n.pending),Ra.hasColor(n)?n:this.styles.muted(n)}async pointer(e,r){let o=await this.element("pointer",e,r);if(typeof o=="string"&&Ra.hasColor(o))return o;if(o){let a=this.styles,n=this.index===r,u=n?a.primary:h=>h,A=await this.resolve(o[n?"on":"off"]||o,this.state),p=Ra.hasColor(A)?A:u(A);return n?p:" ".repeat(A.length)}}async indicator(e,r){let o=await this.element("indicator",e,r);if(typeof o=="string"&&Ra.hasColor(o))return o;if(o){let a=this.styles,n=e.enabled===!0,u=n?a.success:a.dark,A=o[n?"on":"off"]||o;return Ra.hasColor(A)?A:u(A)}return""}body(){return null}footer(){if(this.state.status==="pending")return this.element("footer")}header(){if(this.state.status==="pending")return this.element("header")}async hint(){if(this.state.status==="pending"&&!this.isValue(this.state.input)){let e=await this.element("hint");return Ra.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?"":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==""}resolve(e,...r){return Ra.resolve(this,e,...r)}get base(){return a2.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||Ra.height(this.stdout,25)}get width(){return this.options.columns||Ra.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:r}=this.state,o=[r,e].find(this.isValue.bind(this));return this.isValue(o)?o:this.initial}static get prompt(){return e=>new this(e).run()}};function ift(t){let e=a=>t[a]===void 0||typeof t[a]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],o=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let a of Object.keys(t.options)){if(r.includes(a)||/^on[A-Z]/.test(a))continue;let n=t.options[a];typeof n=="function"&&e(a)?o.includes(a)||(t[a]=n.bind(t)):typeof t[a]!="function"&&(t[a]=n)}}function sft(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=a=>a%2===0?` -`:" ",o=[];for(let a=0;a<4;a++){let n=r(a);e[a]?o.push(n.repeat(e[a])):o.push("")}return o}xhe.exports=a2});var Qhe=_((Z_t,khe)=>{"use strict";var oft=Lo(),bhe={default(t,e){return e},checkbox(t,e){throw new Error("checkbox role is not implemented yet")},editable(t,e){throw new Error("editable role is not implemented yet")},expandable(t,e){throw new Error("expandable role is not implemented yet")},heading(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||"",e},input(t,e){throw new Error("input role is not implemented yet")},option(t,e){return bhe.default(t,e)},radio(t,e){throw new Error("radio role is not implemented yet")},separator(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||t.symbols.line.repeat(5),e},spacer(t,e){return e}};khe.exports=(t,e={})=>{let r=oft.merge({},bhe,e.roles);return r[t]||r.default}});var l2=_(($_t,The)=>{"use strict";var aft=Kc(),lft=hC(),cft=Qhe(),ok=Lo(),{reorder:G_,scrollUp:uft,scrollDown:Aft,isObject:Fhe,swap:fft}=ok,Y_=class extends lft{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){typeof this.options.initial=="function"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:r,autofocus:o,suggest:a}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(n=>n.enabled=!1),typeof a!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");Fhe(r)&&(r=Object.keys(r)),Array.isArray(r)?(o!=null&&(this.index=this.findIndex(o)),r.forEach(n=>this.enable(this.find(n))),await this.render()):(o!=null&&(r=o),typeof r=="string"&&(r=this.findIndex(r)),typeof r=="number"&&r>-1&&(this.index=Math.max(0,Math.min(r,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,r){this.state.loadingChoices=!0;let o=[],a=0,n=async(u,A)=>{typeof u=="function"&&(u=await u.call(this)),u instanceof Promise&&(u=await u);for(let p=0;p(this.state.loadingChoices=!1,u))}async toChoice(e,r,o){if(typeof e=="function"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e=="string"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let a=e.value;if(e=cft(e.role,this.options)(this,e),typeof e.disabled=="string"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint="(disabled)"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||"",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input="",e.index=r,e.cursor=0,ok.define(e,"parent",o),e.level=o?o.level+1:1,e.indent==null&&(e.indent=o?o.indent+" ":e.indent||""),e.path=o?o.path+"."+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,aft.unstyle(e.message).length));let u={...e};return e.reset=(A=u.input,p=u.value)=>{for(let h of Object.keys(u))e[h]=u[h];e.input=A,e.value=p},a==null&&typeof e.initial=="function"&&(e.input=await e.initial.call(this,this.state,e,r)),e}async onChoice(e,r){this.emit("choice",e,r,this),typeof e.onChoice=="function"&&await e.onChoice.call(this,this.state,e,r)}async addChoice(e,r,o){let a=await this.toChoice(e,r,o);return this.choices.push(a),this.index=this.choices.length-1,this.limit=this.choices.length,a}async newItem(e,r,o){let a={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(a,r,o);return n.updateChoice=()=>{delete n.newChoice,n.name=n.message=n.input,n.input="",n.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,r){if(this.multiple&&this[r.name])return this[r.name]();this.alert()}focus(e,r){return typeof r!="boolean"&&(r=e.enabled),r&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=r&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectedr.enabled);return this.choices.forEach(r=>r.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(r=>!!r.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,r){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof r!="boolean"&&(r=!e.enabled),e.enabled=r,e.choices&&e.choices.forEach(a=>this.toggle(a,r));let o=e.parent;for(;o;){let a=o.choices.filter(n=>this.isDisabled(n));o.enabled=a.every(n=>n.enabled===!0),o=o.parent}return Rhe(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let r=o=>{let a=Number(o);if(a>this.choices.length-1)return this.alert();let n=this.focused,u=this.choices.find(A=>a===A.index);if(!u.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(u)===-1){let A=G_(this.choices),p=A.indexOf(u);if(n.index>p){let h=A.slice(p,p+this.limit),C=A.filter(I=>!h.includes(I));this.choices=h.concat(C)}else{let h=p-this.limit+1;this.choices=A.slice(h).concat(A.slice(0,h))}}return this.index=this.choices.indexOf(u),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(o=>{let a=this.choices.length,n=this.num,u=(A=!1,p)=>{clearTimeout(this.numberTimeout),A&&(p=r(n)),this.num="",o(p)};if(n==="0"||n.length===1&&Number(n+"0")>a)return u(!0);if(Number(n)>a)return u(!1,this.alert());this.numberTimeout=setTimeout(()=>u(!0),this.delay)})}home(){return this.choices=G_(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=G_(this.choices);return this.choices=r.slice(e).concat(r.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===0?this.alert():e>r&&o===0?this.scrollUp():(this.index=(o-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===r-1?this.alert():e>r&&o===r-1?this.scrollDown():(this.index=(o+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=uft(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=Aft(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){fft(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(o=>e[o]===!0)?!0:e&&e.role==="heading"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(r=>this.isEnabled(r));if(e.choices){let r=e.choices.filter(o=>!this.isDisabled(o));return e.enabled&&r.every(o=>this.isEnabled(o))}return e.enabled&&!this.isDisabled(e)}isChoice(e,r){return e.name===r||e.index===Number(r)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(r=>this.isChoice(e,r)):this.isChoice(e,this.initial)}map(e=[],r="value"){return[].concat(e||[]).reduce((o,a)=>(o[a]=this.find(a,r),o),{})}filter(e,r){let a=typeof e=="function"?e:(A,p)=>[A.name,p].includes(e),u=(this.options.multiple?this.state._choices:this.choices).filter(a);return r?u.map(A=>A[r]):u}find(e,r){if(Fhe(e))return r?e[r]:e;let a=typeof e=="function"?e:(u,A)=>[u.name,A].includes(e),n=this.choices.find(a);if(n)return r?n[r]:n}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(u=>u.newChoice))return this.alert();let{reorder:r,sort:o}=this.options,a=this.multiple===!0,n=this.selected;return n===void 0?this.alert():(Array.isArray(n)&&r!==!1&&o!==!0&&(n=ok.reorder(n)),this.value=a?n.map(u=>u.name):n.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let r of e)this.state._choices.some(o=>o.name===r.name)||this.state._choices.push(r);if(!this._initial&&this.options.initial){this._initial=!0;let r=this.initial;if(typeof r=="string"||typeof r=="number"){let o=this.find(r);o&&(this.initial=o.index,this.focus(o,!0))}}}get choices(){return Rhe(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:r,choices:o}=this,a=e.limit||this._limit||r.limit||o.length;return Math.min(a,this.height)}set value(e){super.value=e}get value(){return typeof super.value!="string"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function Rhe(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(ok.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let o=r.choices.filter(a=>!t.isDisabled(a));r.enabled=o.every(a=>a.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}The.exports=Y_});var Sh=_((e8t,Lhe)=>{"use strict";var pft=l2(),W_=Lo(),K_=class extends pft{constructor(e){super(e),this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,r){if(this.multiple)return this[r.name]?await this[r.name](e,r):await super.dispatch(e,r);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,r){return!this.multiple||this.options.pointer?super.pointer(e,r):""}indicator(e,r){return this.multiple?super.indicator(e,r):""}choiceMessage(e,r){let o=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!W_.hasColor(o)&&(o=this.styles.strong(o)),this.resolve(o,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await this.indicator(e,r)+(e.pad||""),u=await this.resolve(e.hint,this.state,e,r);u&&!W_.hasColor(u)&&(u=this.styles.muted(u));let A=this.indent(e),p=await this.choiceMessage(e,r),h=()=>[this.margin[3],A+a+n,p,this.margin[1],u].filter(Boolean).join(" ");return e.role==="heading"?h():e.disabled?(W_.hasColor(p)||(p=this.styles.disabled(p)),h()):(o&&(p=this.styles.em(p)),h())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(n,u)=>await this.renderChoice(n,u)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let o=this.margin[0]+r.join(` -`),a;return this.options.choicesHeader&&(a=await this.resolve(this.options.choicesHeader,this.state)),[a,o].filter(Boolean).join(` -`)}format(){return!this.state.submitted||this.state.cancelled?"":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(", "):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:r}=this.state,o="",a=await this.header(),n=await this.prefix(),u=await this.separator(),A=await this.message();this.options.promptLine!==!1&&(o=[n,A,u,""].join(" "),this.state.prompt=o);let p=await this.format(),h=await this.error()||await this.hint(),C=await this.renderChoices(),I=await this.footer();p&&(o+=p),h&&!o.includes(h)&&(o+=" "+h),e&&!p&&!C.trim()&&this.multiple&&this.emptyError!=null&&(o+=this.styles.danger(this.emptyError)),this.clear(r),this.write([a,o,C,I].filter(Boolean).join(` -`)),this.write(this.margin[2]),this.restore()}};Lhe.exports=K_});var Ohe=_((t8t,Nhe)=>{"use strict";var hft=Sh(),gft=(t,e)=>{let r=t.toLowerCase();return o=>{let n=o.toLowerCase().indexOf(r),u=e(o.slice(n,n+r.length));return n>=0?o.slice(0,n)+u+o.slice(n+r.length):o}},V_=class extends hft{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:r,input:o}=this.state;return this.input=o.slice(0,r)+e+o.slice(r),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:r}=this.state;return r?(this.input=r.slice(0,e-1)+r.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:r}=this.state;return r[e]===void 0?this.alert():(this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,r=this.state._choices){if(typeof this.options.suggest=="function")return this.options.suggest.call(this,e,r);let o=e.toLowerCase();return r.filter(a=>a.message.toLowerCase().includes(o))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!=="pending")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,r=gft(this.input,e),o=this.choices;this.choices=o.map(a=>({...a,message:r(a.message)})),await super.render(),this.choices=o}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Nhe.exports=V_});var J_=_((r8t,Mhe)=>{"use strict";var z_=Lo();Mhe.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:o="",pos:a,showCursor:n=!0,color:u}=e,A=u||t.styles.placeholder,p=z_.inverse(t.styles.primary),h=F=>p(t.styles.black(F)),C=r,I=" ",v=h(I);if(t.blink&&t.blink.off===!0&&(h=F=>F,v=""),n&&a===0&&o===""&&r==="")return h(I);if(n&&a===0&&(r===o||r===""))return h(o[0])+A(o.slice(1));o=z_.isPrimitive(o)?`${o}`:"",r=z_.isPrimitive(r)?`${r}`:"";let b=o&&o.startsWith(r)&&o!==r,E=b?h(o[r.length]):v;if(a!==r.length&&n===!0&&(C=r.slice(0,a)+h(r[a])+r.slice(a+1),E=""),n===!1&&(E=""),b){let F=t.styles.unstyle(C+E);return C+E+A(o.slice(F.length))}return C+E}});var ak=_((n8t,Uhe)=>{"use strict";var dft=Kc(),mft=Sh(),yft=J_(),X_=class extends mft{constructor(e){super({...e,multiple:!0}),this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(r=>r!=null),this.emptyError="",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(r=>r.reset&&r.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let r=this.focused;if(!r)return this.alert();let{cursor:o,input:a}=r;return r.value=r.input=a.slice(0,o)+e+a.slice(o),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:o}=e;return e.value=e.input=o.slice(0,r-1)+o.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:o}=e;if(o[r]===void 0)return this.alert();let a=`${o}`.slice(0,r)+`${o}`.slice(r+1);return e.value=e.input=a,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,r){return this.dispatch(e,r)}number(e,r){return this.dispatch(e,r)}next(){let e=this.focused;if(!e)return this.alert();let{initial:r,input:o}=e;return r&&r.startsWith(o)&&o!==r?(e.value=e.input=r,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"\u29BF":"\u2299"}async choiceSeparator(e,r){let o=await this.resolve(e.separator,this.state,e,r)||":";return o?" "+this.styles.disabled(o):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:o,styles:a}=this,{cursor:n,initial:u="",name:A,hint:p,input:h=""}=e,{muted:C,submitted:I,primary:v,danger:b}=a,E=p,F=this.index===r,N=e.validate||(()=>!0),U=await this.choiceSeparator(e,r),z=e.message;this.align==="right"&&(z=z.padStart(this.longest+1," ")),this.align==="left"&&(z=z.padEnd(this.longest+1," "));let te=this.values[A]=h||u,le=h?"success":"dark";await N.call(e,te,this.state)!==!0&&(le="danger");let pe=a[le],ue=pe(await this.indicator(e,r))+(e.pad||""),ye=this.indent(e),ae=()=>[ye,ue,z+U,h,E].filter(Boolean).join(" ");if(o.submitted)return z=dft.unstyle(z),h=I(h),E="",ae();if(e.format)h=await e.format.call(this,h,e,r);else{let Ie=this.styles.muted;h=yft(this,{input:h,initial:u,pos:n,showCursor:F,color:Ie})}return this.isValue(h)||(h=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[A]=await e.result.call(this,te,e,r)),F&&(z=v(z)),e.error?h+=(h?" ":"")+b(e.error.trim()):e.hint&&(h+=(h?" ":"")+C(e.hint.trim())),ae()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Uhe.exports=X_});var Z_=_((i8t,Hhe)=>{"use strict";var Eft=ak(),Cft=()=>{throw new Error("expected prompt to have a custom authenticate method")},_he=(t=Cft)=>{class e extends Eft{constructor(o){super(o)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(o){return _he(o)}}return e};Hhe.exports=_he()});var Ghe=_((s8t,qhe)=>{"use strict";var wft=Z_();function Ift(t,e){return t.username===this.options.username&&t.password===this.options.password}var jhe=(t=Ift)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(o){return this.options.showPassword?o:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(o.length))}}];class r extends wft.create(t){constructor(a){super({...a,choices:e})}static create(a){return jhe(a)}}return r};qhe.exports=jhe()});var lk=_((o8t,Yhe)=>{"use strict";var Bft=hC(),{isPrimitive:vft,hasColor:Dft}=Lo(),$_=class extends Bft{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:r,state:o}=this;return o.submitted?r.success(e):r.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return vft(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return Dft(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=this.styles.muted(this.default),A=[o,n,u,a].filter(Boolean).join(" ");this.state.prompt=A;let p=await this.header(),h=this.value=this.cast(e),C=await this.format(h),I=await this.error()||await this.hint(),v=await this.footer();I&&!A.includes(I)&&(C+=" "+I),A+=" "+C,this.clear(r),this.write([p,A,v].filter(Boolean).join(` -`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Yhe.exports=$_});var Khe=_((a8t,Whe)=>{"use strict";var Pft=lk(),e8=class extends Pft{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};Whe.exports=e8});var zhe=_((l8t,Vhe)=>{"use strict";var Sft=Sh(),xft=ak(),gC=xft.prototype,t8=class extends Sft{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let o=this.focused,a=o.parent||{};return!o.editable&&!a.editable&&(e==="a"||e==="i")?super[e]():gC.dispatch.call(this,e,r)}append(e,r){return gC.append.call(this,e,r)}delete(e,r){return gC.delete.call(this,e,r)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?gC.next.call(this):super.next()}prev(){return this.focused.editable?gC.prev.call(this):super.prev()}async indicator(e,r){let o=e.indicator||"",a=e.editable?o:super.indicator(e,r);return await this.resolve(a,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?gC.renderChoice.call(this,e,r):super.renderChoice(e,r)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let r of this.choices){if(typeof r.validate!="function"||r.role==="heading")continue;let o=r.parent?this.value[r.parent.name]:this.value;if(r.editable?o=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(o=r.enabled===!0),e=await r.validate(o,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e=="string"?e:"Invalid Input"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let r=e.parent?this.value[e.parent.name]:this.value;if(e.role==="heading"){this.value[e.name]={};continue}e.editable?r[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(r[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Vhe.exports=t8});var Yd=_((c8t,Jhe)=>{"use strict";var bft=hC(),kft=J_(),{isPrimitive:Qft}=Lo(),r8=class extends bft{constructor(e){super(e),this.initial=Qft(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let o=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!o||o.name!=="return")?this.append(` -`,r):super.keypress(e,r)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,r){if(!e||r.ctrl||r.code)return this.alert();this.append(e)}append(e){let{cursor:r,input:o}=this.state;this.input=`${o}`.slice(0,r)+e+`${o}`.slice(r),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:r}=this.state;if(e<=0)return this.alert();this.input=`${r}`.slice(0,e-1)+`${r}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:r}=this.state;if(r[e]===void 0)return this.alert();this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let r=this.input.slice(0,e),o=this.input.slice(e),a=r.split(" ");this.state.clipboard.push(a.pop()),this.input=a.join(" "),this.cursor=this.input.length,this.input+=o,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let r=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||r):kft(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),o=await this.separator(),a=await this.message(),n=[r,a,o].filter(Boolean).join(" ");this.state.prompt=n;let u=await this.header(),A=await this.format(),p=await this.error()||await this.hint(),h=await this.footer();p&&!A.includes(p)&&(A+=" "+p),n+=" "+A,this.clear(e),this.write([u,n,h].filter(Boolean).join(` -`)),this.restore()}};Jhe.exports=r8});var Zhe=_((u8t,Xhe)=>{"use strict";var Fft=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),ck=t=>Fft(t).filter(Boolean);Xhe.exports=(t,e={},r="")=>{let{past:o=[],present:a=""}=e,n,u;switch(t){case"prev":case"undo":return n=o.slice(0,o.length-1),u=o[o.length-1]||"",{past:ck([r,...n]),present:u};case"next":case"redo":return n=o.slice(1),u=o[0]||"",{past:ck([...n,r]),present:u};case"save":return{past:ck([...o,r]),present:""};case"remove":return u=ck(o.filter(A=>A!==r)),a="",u.length&&(a=u.pop()),{past:u,present:a};default:throw new Error(`Invalid action: "${t}"`)}}});var i8=_((A8t,e0e)=>{"use strict";var Rft=Yd(),$he=Zhe(),n8=class extends Rft{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let o=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:o},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=$he(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion("prev")}altDown(){return this.completion("next")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=$he("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};e0e.exports=n8});var r0e=_((f8t,t0e)=>{"use strict";var Tft=Yd(),s8=class extends Tft{format(){return""}};t0e.exports=s8});var i0e=_((p8t,n0e)=>{"use strict";var Lft=Yd(),o8=class extends Lft{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||""}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:r=>r;return this.list.map(e).join(", ")}async submit(e){let r=this.state.error||await this.validate(this.list,this.state);return r!==!0?(this.state.error=r,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};n0e.exports=o8});var o0e=_((h8t,s0e)=>{"use strict";var Nft=Sh(),a8=class extends Nft{constructor(e){super({...e,multiple:!0})}};s0e.exports=a8});var c8=_((g8t,a0e)=>{"use strict";var Oft=Yd(),l8=class extends Oft{constructor(e={}){super({style:"number",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e==="."&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let r=e||this.minor,o=this.toNumber(this.input);return o>this.max+r?this.alert():(this.input=`${o+r}`,this.render())}down(e){let r=e||this.minor,o=this.toNumber(this.input);return othis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};a0e.exports=l8});var c0e=_((d8t,l0e)=>{l0e.exports=c8()});var A0e=_((m8t,u0e)=>{"use strict";var Mft=Yd(),u8=class extends Mft{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):""}};u0e.exports=u8});var h0e=_((y8t,p0e)=>{"use strict";var Uft=Kc(),_ft=l2(),f0e=Lo(),A8=class extends _ft{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||"left"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||` - `;let r=e.startNumber||1;typeof this.scale=="number"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((o,a)=>({name:a+r})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let r of this.choices){e=Math.max(e,r.message.length),r.scaleIndex=r.initial||2,r.scale=[];for(let o=0;o=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return""}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.index)).join(", "):""}pointer(){return""}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?"":["",...this.scale.map(o=>` ${o.name} - ${o.message}`)].map(o=>this.styles.muted(o)).join(` -`)}renderScaleHeading(e){let r=this.scale.map(p=>p.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let o=this.scaleLength-r.join("").length,a=Math.round(o/(r.length-1)),u=r.map(p=>this.styles.strong(p)).join(" ".repeat(a)),A=" ".repeat(this.widths[0]);return this.margin[3]+A+this.margin[1]+u}scaleIndicator(e,r,o){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,o);let a=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):a?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let o=e.scale.map(n=>this.scaleIndicator(e,n,r)),a=this.term==="Hyper"?"":" ";return o.join(a+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await e.hint;n&&!f0e.hasColor(n)&&(n=this.styles.muted(n));let u=E=>this.margin[3]+E.replace(/\s+$/,"").padEnd(this.widths[0]," "),A=this.newline,p=this.indent(e),h=await this.resolve(e.message,this.state,e,r),C=await this.renderScale(e,r),I=this.margin[1]+this.margin[3];this.scaleLength=Uft.unstyle(C).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-I.length);let b=f0e.wordWrap(h,{width:this.widths[0],newline:A}).split(` -`).map(E=>u(E)+this.margin[1]);return o&&(C=this.styles.info(C),b=b.map(E=>this.styles.info(E))),b[0]+=C,this.linebreak&&b.push(""),[p+a,b.join(` -`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return"";this.tableize();let e=this.visible.map(async(a,n)=>await this.renderChoice(a,n)),r=await Promise.all(e),o=await this.renderScaleHeading();return this.margin[0]+[o,...r.map(a=>a.join(" "))].join(` -`)}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u="";this.options.promptLine!==!1&&(u=[o,n,a,""].join(" "),this.state.prompt=u);let A=await this.header(),p=await this.format(),h=await this.renderScaleKey(),C=await this.error()||await this.hint(),I=await this.renderChoices(),v=await this.footer(),b=this.emptyError;p&&(u+=p),C&&!u.includes(C)&&(u+=" "+C),e&&!p&&!I.trim()&&this.multiple&&b!=null&&(u+=this.styles.danger(b)),this.clear(r),this.write([A,u,h,I,v].filter(Boolean).join(` -`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};p0e.exports=A8});var m0e=_((E8t,d0e)=>{"use strict";var g0e=Kc(),Hft=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",p8=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=Hft(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},jft=async(t={},e={},r=o=>o)=>{let o=new Set,a=t.fields||[],n=t.template,u=[],A=[],p=[],h=1;typeof n=="function"&&(n=await n());let C=-1,I=()=>n[++C],v=()=>n[C+1],b=E=>{E.line=h,u.push(E)};for(b({type:"bos",value:""});Cle.name===U.key);U.field=a.find(le=>le.name===U.key),te||(te=new p8(U),A.push(te)),te.lines.push(U.line-1);continue}let F=u[u.length-1];F.type==="text"&&F.line===h?F.value+=E:b({type:"text",value:E})}return b({type:"eos",value:""}),{input:n,tabstops:u,unique:o,keys:p,items:A}};d0e.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),o={...e.values,...e.initial},{tabstops:a,items:n,keys:u}=await jft(e,o),A=f8("result",t,e),p=f8("format",t,e),h=f8("validate",t,e,!0),C=t.isValue.bind(t);return async(I={},v=!1)=>{let b=0;I.required=r,I.items=n,I.keys=u,I.output="";let E=async(z,te,le,pe)=>{let ue=await h(z,te,le,pe);return ue===!1?"Invalid field "+le.name:ue};for(let z of a){let te=z.value,le=z.key;if(z.type!=="template"){te&&(I.output+=te);continue}if(z.type==="template"){let pe=n.find(Fe=>Fe.name===le);e.required===!0&&I.required.add(pe.name);let ue=[pe.input,I.values[pe.value],pe.value,te].find(C),ae=(pe.field||{}).message||z.inner;if(v){let Fe=await E(I.values[le],I,pe,b);if(Fe&&typeof Fe=="string"||Fe===!1){I.invalid.set(le,Fe);continue}I.invalid.delete(le);let g=await A(I.values[le],I,pe,b);I.output+=g0e.unstyle(g);continue}pe.placeholder=!1;let Ie=te;te=await p(te,I,pe,b),ue!==te?(I.values[le]=ue,te=t.styles.typing(ue),I.missing.delete(ae)):(I.values[le]=void 0,ue=`<${ae}>`,te=t.styles.primary(ue),pe.placeholder=!0,I.required.has(le)&&I.missing.add(ae)),I.missing.has(ae)&&I.validating&&(te=t.styles.warning(ue)),I.invalid.has(le)&&I.validating&&(te=t.styles.danger(ue)),b===I.index&&(Ie!==te?te=t.styles.underline(te):te=t.styles.heading(g0e.unstyle(te))),b++}te&&(I.output+=te)}let F=I.output.split(` -`).map(z=>" "+z),N=n.length,U=0;for(let z of n)I.invalid.has(z.name)&&z.lines.forEach(te=>{F[te][0]===" "&&(F[te]=I.styles.danger(I.symbols.bullet)+F[te].slice(1))}),t.isValue(I.values[z.name])&&U++;return I.completed=(U/N*100).toFixed(0),I.output=F.join(` -`),I.output}};function f8(t,e,r,o){return(a,n,u,A)=>typeof u.field[t]=="function"?u.field[t].call(e,a,n,u,A):[o,a].find(p=>e.isValue(p))}});var E0e=_((C8t,y0e)=>{"use strict";var qft=Kc(),Gft=m0e(),Yft=hC(),h8=class extends Yft{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await Gft(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let r=this.getItem();this.cursor+=e,r.cursor+=e}dispatch(e,r){if(!r.code&&!r.ctrl&&e!=null&&this.getItem()){this.append(e,r);return}this.alert()}append(e,r){let o=this.getItem(),a=o.input.slice(0,this.cursor),n=o.input.slice(this.cursor);this.input=o.input=`${a}${e}${n}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let r=e.input.slice(this.cursor),o=e.input.slice(0,this.cursor-1);this.input=e.input=`${o}${r}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let r=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(r=this.styles.danger),r(`${this.state.completed}% completed`)}async render(){let{index:e,keys:r=[],submitted:o,size:a}=this.state,n=[this.options.newline,` -`].find(z=>z!=null),u=await this.prefix(),A=await this.separator(),p=await this.message(),h=[u,p,A].filter(Boolean).join(" ");this.state.prompt=h;let C=await this.header(),I=await this.error()||"",v=await this.hint()||"",b=o?"":await this.interpolate(this.state),E=this.state.key=r[e]||"",F=await this.format(E),N=await this.footer();F&&(h+=" "+F),v&&!F&&this.state.completed===0&&(h+=" "+v),this.clear(a);let U=[C,h,b,N,I.trim()];this.write(U.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:r,keys:o,index:a}=this.state,n=r.find(u=>u.name===o[a]);return n&&n.input!=null&&(this.input=n.input,this.cursor=n.cursor),n}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:o,values:a}=this.state;if(e.size){let A="";for(let[p,h]of e)A+=`Invalid ${p}: ${h} -`;return this.state.error=A,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let u=qft.unstyle(o).split(` -`).map(A=>A.slice(1)).join(` -`);return this.value={values:a,result:u},super.submit()}};y0e.exports=h8});var w0e=_((w8t,C0e)=>{"use strict";var Wft="(Use + to sort)",Kft=Sh(),g8=class extends Kft{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,Wft].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let o=await super.renderChoice(e,r),a=this.symbols.identicalTo+" ",n=this.index===r&&this.sorting?this.styles.muted(a):" ";return this.options.drag===!1&&(n=""),this.options.numbered===!0?n+`${r+1} - `+o:n+o}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};C0e.exports=g8});var B0e=_((I8t,I0e)=>{"use strict";var Vft=l2(),d8=class extends Vft{constructor(e={}){if(super(e),this.emptyError=e.emptyError||"No items were selected",this.term=process.env.TERM_PROGRAM,!this.options.header){let r=["","4 - Strongly Agree","3 - Agree","2 - Neutral","1 - Disagree","0 - Strongly Disagree",""];r=r.map(o=>this.styles.muted(o)),this.state.header=r.join(` - `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let o of r)o.scale=zft(5,this.options),o.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],o=r.selected;return e.scale.forEach(a=>a.selected=!1),r.selected=!o,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=this.term==="Hyper",n=a?9:8,u=a?"":" ",A=this.symbols.line.repeat(n),p=" ".repeat(n+(a?0:1)),h=te=>(te?this.styles.success("\u25C9"):"\u25EF")+u,C=r+1+".",I=o?this.styles.heading:this.styles.noop,v=await this.resolve(e.message,this.state,e,r),b=this.indent(e),E=b+e.scale.map((te,le)=>h(le===e.scaleIdx)).join(A),F=te=>te===e.scaleIdx?I(te):te,N=b+e.scale.map((te,le)=>F(le)).join(p),U=()=>[C,v].filter(Boolean).join(" "),z=()=>[U(),E,N," "].filter(Boolean).join(` -`);return o&&(E=this.styles.cyan(E),N=this.styles.cyan(N)),z()}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(o,a)=>await this.renderChoice(o,a)),r=await Promise.all(e);return r.length||r.push(this.styles.danger("No matching choices")),r.join(` -`)}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.scaleIdx)).join(", "):""}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=[o,n,a].filter(Boolean).join(" ");this.state.prompt=u;let A=await this.header(),p=await this.format(),h=await this.error()||await this.hint(),C=await this.renderChoices(),I=await this.footer();(p||!h)&&(u+=" "+p),h&&!u.includes(h)&&(u+=" "+h),e&&!p&&!C&&this.multiple&&this.type!=="form"&&(u+=this.styles.danger(this.emptyError)),this.clear(r),this.write([u,A,C,I].filter(Boolean).join(` -`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function zft(t,e={}){if(Array.isArray(e.scale))return e.scale.map(o=>({...o}));let r=[];for(let o=1;o{v0e.exports=i8()});var S0e=_((v8t,P0e)=>{"use strict";var Jft=lk(),m8=class extends Jft{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",r){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=o=>this.styles.primary.underline(o);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,r=await this.header(),o=await this.prefix(),a=await this.separator(),n=await this.message(),u=await this.format(),A=await this.error()||await this.hint(),p=await this.footer(),h=[o,n,a,u].join(" ");this.state.prompt=h,A&&!h.includes(A)&&(h+=" "+A),this.clear(e),this.write([r,h,p].filter(Boolean).join(` -`)),this.write(this.margin[2]),this.restore()}};P0e.exports=m8});var b0e=_((D8t,x0e)=>{"use strict";var Xft=Sh(),y8=class extends Xft{constructor(e){if(super(e),typeof this.options.correctChoice!="number"||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,r){let o=await super.toChoices(e,r);if(o.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>o.length)throw new Error("Please specify the index of the correct answer from the list of choices");return o}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};x0e.exports=y8});var Q0e=_(E8=>{"use strict";var k0e=Lo(),As=(t,e)=>{k0e.defineExport(E8,t,e),k0e.defineExport(E8,t.toLowerCase(),e)};As("AutoComplete",()=>Ohe());As("BasicAuth",()=>Ghe());As("Confirm",()=>Khe());As("Editable",()=>zhe());As("Form",()=>ak());As("Input",()=>i8());As("Invisible",()=>r0e());As("List",()=>i0e());As("MultiSelect",()=>o0e());As("Numeral",()=>c0e());As("Password",()=>A0e());As("Scale",()=>h0e());As("Select",()=>Sh());As("Snippet",()=>E0e());As("Sort",()=>w0e());As("Survey",()=>B0e());As("Text",()=>D0e());As("Toggle",()=>S0e());As("Quiz",()=>b0e())});var R0e=_((S8t,F0e)=>{F0e.exports={ArrayPrompt:l2(),AuthPrompt:Z_(),BooleanPrompt:lk(),NumberPrompt:c8(),StringPrompt:Yd()}});var u2=_((x8t,L0e)=>{"use strict";var T0e=Be("assert"),w8=Be("events"),xh=Lo(),zc=class extends w8{constructor(e,r){super(),this.options=xh.merge({},e),this.answers={...r}}register(e,r){if(xh.isObject(e)){for(let a of Object.keys(e))this.register(a,e[a]);return this}T0e.equal(typeof r,"function","expected a function");let o=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[o]=r:this.prompts[o]=r(this.Prompt,this),this}async prompt(e=[]){for(let r of[].concat(e))try{typeof r=="function"&&(r=await r.call(this)),await this.ask(xh.merge({},this.options,r))}catch(o){return Promise.reject(o)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=xh.merge({},this.options,e),{type:o,name:a}=e,{set:n,get:u}=xh;if(typeof o=="function"&&(o=await o.call(this,e,this.answers)),!o)return this.answers[a];T0e(this.prompts[o],`Prompt "${o}" is not registered`);let A=new this.prompts[o](r),p=u(this.answers,a);A.state.answers=this.answers,A.enquirer=this,a&&A.on("submit",C=>{this.emit("answer",a,C,A),n(this.answers,a,C)});let h=A.emit.bind(A);return A.emit=(...C)=>(this.emit.call(this,...C),h(...C)),this.emit("prompt",A,this),r.autofill&&p!=null?(A.value=A.input=p,r.autofill==="show"&&await A.submit()):p=A.value=await A.run(),p}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||hC()}static get prompts(){return Q0e()}static get types(){return R0e()}static get prompt(){let e=(r,...o)=>{let a=new this(...o),n=a.emit.bind(a);return a.emit=(...u)=>(e.emit(...u),n(...u)),a.prompt(r)};return xh.mixinEmitter(e,new w8),e}};xh.mixinEmitter(zc,new w8);var C8=zc.prompts;for(let t of Object.keys(C8)){let e=t.toLowerCase(),r=o=>new C8[t](o).run();zc.prompt[e]=r,zc[e]=r,zc[t]||Reflect.defineProperty(zc,t,{get:()=>C8[t]})}var c2=t=>{xh.defineExport(zc,t,()=>zc.types[t])};c2("ArrayPrompt");c2("AuthPrompt");c2("BooleanPrompt");c2("NumberPrompt");c2("StringPrompt");L0e.exports=zc});var h2=_((uHt,j0e)=>{var npt=Xb();function ipt(t,e,r){var o=t==null?void 0:npt(t,e);return o===void 0?r:o}j0e.exports=ipt});var Y0e=_((dHt,G0e)=>{function spt(t,e){for(var r=-1,o=t==null?0:t.length;++r{var opt=gd(),apt=zP();function lpt(t,e){return t&&opt(e,apt(e),t)}W0e.exports=lpt});var z0e=_((yHt,V0e)=>{var cpt=gd(),upt=qy();function Apt(t,e){return t&&cpt(e,upt(e),t)}V0e.exports=Apt});var X0e=_((EHt,J0e)=>{var fpt=gd(),ppt=qP();function hpt(t,e){return fpt(t,ppt(t),e)}J0e.exports=hpt});var S8=_((CHt,Z0e)=>{var gpt=jP(),dpt=eS(),mpt=qP(),ypt=KL(),Ept=Object.getOwnPropertySymbols,Cpt=Ept?function(t){for(var e=[];t;)gpt(e,mpt(t)),t=dpt(t);return e}:ypt;Z0e.exports=Cpt});var ege=_((wHt,$0e)=>{var wpt=gd(),Ipt=S8();function Bpt(t,e){return wpt(t,Ipt(t),e)}$0e.exports=Bpt});var x8=_((IHt,tge)=>{var vpt=WL(),Dpt=S8(),Ppt=qy();function Spt(t){return vpt(t,Ppt,Dpt)}tge.exports=Spt});var nge=_((BHt,rge)=>{var xpt=Object.prototype,bpt=xpt.hasOwnProperty;function kpt(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&bpt.call(t,"index")&&(r.index=t.index,r.input=t.input),r}rge.exports=kpt});var sge=_((vHt,ige)=>{var Qpt=ZP();function Fpt(t,e){var r=e?Qpt(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}ige.exports=Fpt});var age=_((DHt,oge)=>{var Rpt=/\w*$/;function Tpt(t){var e=new t.constructor(t.source,Rpt.exec(t));return e.lastIndex=t.lastIndex,e}oge.exports=Tpt});var fge=_((PHt,Age)=>{var lge=fd(),cge=lge?lge.prototype:void 0,uge=cge?cge.valueOf:void 0;function Lpt(t){return uge?Object(uge.call(t)):{}}Age.exports=Lpt});var hge=_((SHt,pge)=>{var Npt=ZP(),Opt=sge(),Mpt=age(),Upt=fge(),_pt=aN(),Hpt="[object Boolean]",jpt="[object Date]",qpt="[object Map]",Gpt="[object Number]",Ypt="[object RegExp]",Wpt="[object Set]",Kpt="[object String]",Vpt="[object Symbol]",zpt="[object ArrayBuffer]",Jpt="[object DataView]",Xpt="[object Float32Array]",Zpt="[object Float64Array]",$pt="[object Int8Array]",eht="[object Int16Array]",tht="[object Int32Array]",rht="[object Uint8Array]",nht="[object Uint8ClampedArray]",iht="[object Uint16Array]",sht="[object Uint32Array]";function oht(t,e,r){var o=t.constructor;switch(e){case zpt:return Npt(t);case Hpt:case jpt:return new o(+t);case Jpt:return Opt(t,r);case Xpt:case Zpt:case $pt:case eht:case tht:case rht:case nht:case iht:case sht:return _pt(t,r);case qpt:return new o;case Gpt:case Kpt:return new o(t);case Ypt:return Mpt(t);case Wpt:return new o;case Vpt:return Upt(t)}}pge.exports=oht});var dge=_((xHt,gge)=>{var aht=jI(),lht=zu(),cht="[object Map]";function uht(t){return lht(t)&&aht(t)==cht}gge.exports=uht});var Cge=_((bHt,Ege)=>{var Aht=dge(),fht=YP(),mge=WP(),yge=mge&&mge.isMap,pht=yge?fht(yge):Aht;Ege.exports=pht});var Ige=_((kHt,wge)=>{var hht=jI(),ght=zu(),dht="[object Set]";function mht(t){return ght(t)&&hht(t)==dht}wge.exports=mht});var Pge=_((QHt,Dge)=>{var yht=Ige(),Eht=YP(),Bge=WP(),vge=Bge&&Bge.isSet,Cht=vge?Eht(vge):yht;Dge.exports=Cht});var b8=_((FHt,kge)=>{var wht=_P(),Iht=Y0e(),Bht=tS(),vht=K0e(),Dht=z0e(),Pht=oN(),Sht=$P(),xht=X0e(),bht=ege(),kht=XL(),Qht=x8(),Fht=jI(),Rht=nge(),Tht=hge(),Lht=lN(),Nht=Hl(),Oht=OI(),Mht=Cge(),Uht=il(),_ht=Pge(),Hht=zP(),jht=qy(),qht=1,Ght=2,Yht=4,Sge="[object Arguments]",Wht="[object Array]",Kht="[object Boolean]",Vht="[object Date]",zht="[object Error]",xge="[object Function]",Jht="[object GeneratorFunction]",Xht="[object Map]",Zht="[object Number]",bge="[object Object]",$ht="[object RegExp]",e0t="[object Set]",t0t="[object String]",r0t="[object Symbol]",n0t="[object WeakMap]",i0t="[object ArrayBuffer]",s0t="[object DataView]",o0t="[object Float32Array]",a0t="[object Float64Array]",l0t="[object Int8Array]",c0t="[object Int16Array]",u0t="[object Int32Array]",A0t="[object Uint8Array]",f0t="[object Uint8ClampedArray]",p0t="[object Uint16Array]",h0t="[object Uint32Array]",ri={};ri[Sge]=ri[Wht]=ri[i0t]=ri[s0t]=ri[Kht]=ri[Vht]=ri[o0t]=ri[a0t]=ri[l0t]=ri[c0t]=ri[u0t]=ri[Xht]=ri[Zht]=ri[bge]=ri[$ht]=ri[e0t]=ri[t0t]=ri[r0t]=ri[A0t]=ri[f0t]=ri[p0t]=ri[h0t]=!0;ri[zht]=ri[xge]=ri[n0t]=!1;function Ak(t,e,r,o,a,n){var u,A=e&qht,p=e&Ght,h=e&Yht;if(r&&(u=a?r(t,o,a,n):r(t)),u!==void 0)return u;if(!Uht(t))return t;var C=Nht(t);if(C){if(u=Rht(t),!A)return Sht(t,u)}else{var I=Fht(t),v=I==xge||I==Jht;if(Oht(t))return Pht(t,A);if(I==bge||I==Sge||v&&!a){if(u=p||v?{}:Lht(t),!A)return p?bht(t,Dht(u,t)):xht(t,vht(u,t))}else{if(!ri[I])return a?t:{};u=Tht(t,I,A)}}n||(n=new wht);var b=n.get(t);if(b)return b;n.set(t,u),_ht(t)?t.forEach(function(N){u.add(Ak(N,e,r,N,t,n))}):Mht(t)&&t.forEach(function(N,U){u.set(U,Ak(N,e,r,U,t,n))});var E=h?p?Qht:kht:p?jht:Hht,F=C?void 0:E(t);return Iht(F||t,function(N,U){F&&(U=N,N=t[U]),Bht(u,U,Ak(N,e,r,U,t,n))}),u}kge.exports=Ak});var k8=_((RHt,Qge)=>{var g0t=b8(),d0t=1,m0t=4;function y0t(t){return g0t(t,d0t|m0t)}Qge.exports=y0t});var Q8=_((THt,Fge)=>{var E0t=I_();function C0t(t,e,r){return t==null?t:E0t(t,e,r)}Fge.exports=C0t});var Oge=_((_Ht,Nge)=>{var w0t=Object.prototype,I0t=w0t.hasOwnProperty;function B0t(t,e){return t!=null&&I0t.call(t,e)}Nge.exports=B0t});var Uge=_((HHt,Mge)=>{var v0t=Oge(),D0t=B_();function P0t(t,e){return t!=null&&D0t(t,e,v0t)}Mge.exports=P0t});var Hge=_((jHt,_ge)=>{function S0t(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}_ge.exports=S0t});var qge=_((qHt,jge)=>{var x0t=Xb(),b0t=pU();function k0t(t,e){return e.length<2?t:x0t(t,b0t(e,0,-1))}jge.exports=k0t});var R8=_((GHt,Gge)=>{var Q0t=jd(),F0t=Hge(),R0t=qge(),T0t=aC();function L0t(t,e){return e=Q0t(e,t),t=R0t(t,e),t==null||delete t[T0t(F0t(e))]}Gge.exports=L0t});var T8=_((YHt,Yge)=>{var N0t=R8();function O0t(t,e){return t==null?!0:N0t(t,e)}Yge.exports=O0t});var Jge=_((C6t,_0t)=>{_0t.exports={name:"@yarnpkg/cli",version:"4.0.0",license:"BSD-2-Clause",main:"./sources/index.ts",exports:{".":"./sources/index.ts","./polyfills":"./sources/polyfills.ts","./package.json":"./package.json"},dependencies:{"@yarnpkg/core":"workspace:^","@yarnpkg/fslib":"workspace:^","@yarnpkg/libzip":"workspace:^","@yarnpkg/parsers":"workspace:^","@yarnpkg/plugin-compat":"workspace:^","@yarnpkg/plugin-constraints":"workspace:^","@yarnpkg/plugin-dlx":"workspace:^","@yarnpkg/plugin-essentials":"workspace:^","@yarnpkg/plugin-exec":"workspace:^","@yarnpkg/plugin-file":"workspace:^","@yarnpkg/plugin-git":"workspace:^","@yarnpkg/plugin-github":"workspace:^","@yarnpkg/plugin-http":"workspace:^","@yarnpkg/plugin-init":"workspace:^","@yarnpkg/plugin-interactive-tools":"workspace:^","@yarnpkg/plugin-link":"workspace:^","@yarnpkg/plugin-nm":"workspace:^","@yarnpkg/plugin-npm":"workspace:^","@yarnpkg/plugin-npm-cli":"workspace:^","@yarnpkg/plugin-pack":"workspace:^","@yarnpkg/plugin-patch":"workspace:^","@yarnpkg/plugin-pnp":"workspace:^","@yarnpkg/plugin-pnpm":"workspace:^","@yarnpkg/plugin-stage":"workspace:^","@yarnpkg/plugin-typescript":"workspace:^","@yarnpkg/plugin-version":"workspace:^","@yarnpkg/plugin-workspace-tools":"workspace:^","@yarnpkg/shell":"workspace:^","ci-info":"^3.2.0",clipanion:"^4.0.0-rc.2",semver:"^7.1.2",tslib:"^2.4.0",typanion:"^3.14.0"},devDependencies:{"@types/semver":"^7.1.0","@yarnpkg/builder":"workspace:^","@yarnpkg/monorepo":"workspace:^","@yarnpkg/pnpify":"workspace:^"},peerDependencies:{"@yarnpkg/core":"workspace:^"},scripts:{postpack:"rm -rf lib",prepack:'run build:compile "$(pwd)"',"build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},publishConfig:{main:"./lib/index.js",bin:null,exports:{".":"./lib/index.js","./package.json":"./package.json"}},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]}},repository:{type:"git",url:"ssh://git@github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=18.12.0"}}});var q8=_((XGt,cde)=>{"use strict";cde.exports=function(e,r){r===!0&&(r=0);var o="";if(typeof e=="string")try{o=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(o=e.protocol);var a=o.split(/\:|\+/).filter(Boolean);return typeof r=="number"?a[r]:a}});var Ade=_((ZGt,ude)=>{"use strict";var igt=q8();function sgt(t){var e={protocols:[],protocol:null,port:null,resource:"",host:"",user:"",password:"",pathname:"",hash:"",search:"",href:t,query:{},parse_failed:!1};try{var r=new URL(t);e.protocols=igt(r),e.protocol=e.protocols[0],e.port=r.port,e.resource=r.hostname,e.host=r.host,e.user=r.username||"",e.password=r.password||"",e.pathname=r.pathname,e.hash=r.hash.slice(1),e.search=r.search.slice(1),e.href=r.href,e.query=Object.fromEntries(r.searchParams)}catch{e.protocols=["file"],e.protocol=e.protocols[0],e.port="",e.resource="",e.user="",e.pathname="",e.hash="",e.search="",e.href=t,e.query={},e.parse_failed=!0}return e}ude.exports=sgt});var hde=_(($Gt,pde)=>{"use strict";var ogt=Ade();function agt(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var lgt=agt(ogt),cgt="text/plain",ugt="us-ascii",fde=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),Agt=(t,{stripHash:e})=>{let r=/^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(t);if(!r)throw new Error(`Invalid URL: ${t}`);let{type:o,data:a,hash:n}=r.groups,u=o.split(";");n=e?"":n;let A=!1;u[u.length-1]==="base64"&&(u.pop(),A=!0);let p=(u.shift()||"").toLowerCase(),C=[...u.map(I=>{let[v,b=""]=I.split("=").map(E=>E.trim());return v==="charset"&&(b=b.toLowerCase(),b===ugt)?"":`${v}${b?`=${b}`:""}`}).filter(Boolean)];return A&&C.push("base64"),(C.length>0||p&&p!==cgt)&&C.unshift(p),`data:${C.join(";")},${A?a.trim():a}${n?`#${n}`:""}`};function fgt(t,e){if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},t=t.trim(),/^data:/i.test(t))return Agt(t,e);if(/^view-source:/i.test(t))throw new Error("`view-source:` is not supported as it is a non-standard protocol");let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new URL(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash?a.hash="":e.stripTextFragment&&(a.hash=a.hash.replace(/#?:~:text.*?$/i,"")),a.pathname){let u=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,A=0,p="";for(;;){let C=u.exec(a.pathname);if(!C)break;let I=C[0],v=C.index,b=a.pathname.slice(A,v);p+=b.replace(/\/{2,}/g,"/"),p+=I,A=v+I.length}let h=a.pathname.slice(A,a.pathname.length);p+=h.replace(/\/{2,}/g,"/"),a.pathname=p}if(a.pathname)try{a.pathname=decodeURI(a.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let u=a.pathname.split("/"),A=u[u.length-1];fde(A,e.removeDirectoryIndex)&&(u=u.slice(0,-1),a.pathname=u.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let u of[...a.searchParams.keys()])fde(u,e.removeQueryParameters)&&a.searchParams.delete(u);if(e.removeQueryParameters===!0&&(a.search=""),e.sortQueryParameters){a.searchParams.sort();try{a.search=decodeURIComponent(a.search)}catch{}}e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,""));let n=t;return t=a.toString(),!e.removeSingleSlash&&a.pathname==="/"&&!n.endsWith("/")&&a.hash===""&&(t=t.replace(/\/$/,"")),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&e.removeSingleSlash&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t}var G8=(t,e=!1)=>{let r=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:]([\~,\.\w,\-,\_,\/]+?(?:\.git|\/)?)$/,o=n=>{let u=new Error(n);throw u.subject_url=t,u};(typeof t!="string"||!t.trim())&&o("Invalid url."),t.length>G8.MAX_INPUT_LENGTH&&o("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH."),e&&(typeof e!="object"&&(e={stripHash:!1}),t=fgt(t,e));let a=lgt.default(t);if(a.parse_failed){let n=a.href.match(r);n?(a.protocols=["ssh"],a.protocol="ssh",a.resource=n[2],a.host=n[2],a.user=n[1],a.pathname=`/${n[3]}`,a.parse_failed=!1):o("URL parsing failed.")}return a};G8.MAX_INPUT_LENGTH=2048;pde.exports=G8});var mde=_((e5t,dde)=>{"use strict";var pgt=q8();function gde(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=pgt(t);if(t=t.substring(t.indexOf("://")+3),gde(e))return!0;var r=new RegExp(".([a-zA-Z\\d]+):(\\d+)/");return!t.match(r)&&t.indexOf("@"){"use strict";var hgt=hde(),yde=mde();function ggt(t){var e=hgt(t);return e.token="",e.password==="x-oauth-basic"?e.token=e.user:e.user==="x-token-auth"&&(e.token=e.password),yde(e.protocols)||e.protocols.length===0&&yde(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol="file",e.protocols=["file"]),e.href=e.href.replace(/\/$/,""),e}Ede.exports=ggt});var Ide=_((r5t,wde)=>{"use strict";var dgt=Cde();function Y8(t){if(typeof t!="string")throw new Error("The url must be a string.");var e=/^([a-z\d-]{1,39})\/([-\.\w]{1,100})$/i;e.test(t)&&(t="https://github.com/"+t);var r=dgt(t),o=r.resource.split("."),a=null;switch(r.toString=function(N){return Y8.stringify(this,N)},r.source=o.length>2?o.slice(1-o.length).join("."):r.source=r.resource,r.git_suffix=/\.git$/.test(r.pathname),r.name=decodeURIComponent((r.pathname||r.href).replace(/(^\/)|(\/$)/g,"").replace(/\.git$/,"")),r.owner=decodeURIComponent(r.user),r.source){case"git.cloudforge.com":r.owner=r.user,r.organization=o[0],r.source="cloudforge.com";break;case"visualstudio.com":if(r.resource==="vs-ssh.visualstudio.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3],r.full_name=a[2]+"/"+a[3]);break}else{a=r.name.split("/"),a.length===2?(r.owner=a[1],r.name=a[1],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name);break}case"dev.azure.com":case"azure.com":if(r.resource==="ssh.dev.azure.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3]);break}else{a=r.name.split("/"),a.length===5?(r.organization=a[0],r.owner=a[1],r.name=a[4],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name),r.query&&r.query.path&&(r.filepath=r.query.path.replace(/^\/+/g,"")),r.query&&r.query.version&&(r.ref=r.query.version.replace(/^GB/,""));break}default:a=r.name.split("/");var n=a.length-1;if(a.length>=2){var u=a.indexOf("-",2),A=a.indexOf("blob",2),p=a.indexOf("tree",2),h=a.indexOf("commit",2),C=a.indexOf("src",2),I=a.indexOf("raw",2),v=a.indexOf("edit",2);n=u>0?u-1:A>0?A-1:p>0?p-1:h>0?h-1:C>0?C-1:I>0?I-1:v>0?v-1:n,r.owner=a.slice(0,n).join("/"),r.name=a[n],h&&(r.commit=a[n+2])}r.ref="",r.filepathtype="",r.filepath="";var b=a.length>n&&a[n+1]==="-"?n+1:n;a.length>b+2&&["raw","src","blob","tree","edit"].indexOf(a[b+1])>=0&&(r.filepathtype=a[b+1],r.ref=a[b+2],a.length>b+3&&(r.filepath=a.slice(b+3).join("/"))),r.organization=r.owner;break}r.full_name||(r.full_name=r.owner,r.name&&(r.full_name&&(r.full_name+="/"),r.full_name+=r.name)),r.owner.startsWith("scm/")&&(r.source="bitbucket-server",r.owner=r.owner.replace("scm/",""),r.organization=r.owner,r.full_name=r.owner+"/"+r.name);var E=/(projects|users)\/(.*?)\/repos\/(.*?)((\/.*$)|$)/,F=E.exec(r.pathname);return F!=null&&(r.source="bitbucket-server",F[1]==="users"?r.owner="~"+F[2]:r.owner=F[2],r.organization=r.owner,r.name=F[3],a=F[4].split("/"),a.length>1&&(["raw","browse"].indexOf(a[1])>=0?(r.filepathtype=a[1],a.length>2&&(r.filepath=a.slice(2).join("/"))):a[1]==="commits"&&a.length>2&&(r.commit=a[2])),r.full_name=r.owner+"/"+r.name,r.query.at?r.ref=r.query.at:r.ref=""),r}Y8.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",o=t.user||"git",a=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+o+"@"+t.resource+r+"/"+t.full_name+a:o+"@"+t.resource+":"+t.full_name+a;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+o+"@"+t.resource+r+"/"+t.full_name+a;case"http":case"https":var n=t.token?mgt(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+n+t.resource+r+"/"+ygt(t)+a;default:return t.href}};function mgt(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}function ygt(t){switch(t.source){case"bitbucket-server":return"scm/"+t.full_name;default:return""+t.full_name}}wde.exports=Y8});var Mde=_((L9t,Ode)=>{var bgt=Hx(),kgt=$P(),Qgt=Hl(),Fgt=fE(),Rgt=w_(),Tgt=aC(),Lgt=R1();function Ngt(t){return Qgt(t)?bgt(t,Tgt):Fgt(t)?[t]:kgt(Rgt(Lgt(t)))}Ode.exports=Ngt});function _gt(t,e){return e===1&&Ugt.has(t[0])}function w2(t){let e=Array.isArray(t)?t:(0,Hde.default)(t);return e.map((o,a)=>Ogt.test(o)?`[${o}]`:Mgt.test(o)&&!_gt(e,a)?`.${o}`:`[${JSON.stringify(o)}]`).join("").replace(/^\./,"")}function Hgt(t,e){let r=[];if(e.methodName!==null&&r.push(de.pretty(t,e.methodName,de.Type.CODE)),e.file!==null){let o=[];o.push(de.pretty(t,e.file,de.Type.PATH)),e.line!==null&&(o.push(de.pretty(t,e.line,de.Type.NUMBER)),e.column!==null&&o.push(de.pretty(t,e.column,de.Type.NUMBER))),r.push(`(${o.join(de.pretty(t,":","grey"))})`)}return r.join(" ")}function gk(t,{manifestUpdates:e,reportedErrors:r},{fix:o}={}){let a=new Map,n=new Map,u=[...r.keys()].map(A=>[A,new Map]);for(let[A,p]of[...u,...e]){let h=r.get(A)?.map(b=>({text:b,fixable:!1}))??[],C=!1,I=t.getWorkspaceByCwd(A),v=I.manifest.exportTo({});for(let[b,E]of p){if(E.size>1){let F=[...E].map(([N,U])=>{let z=de.pretty(t.configuration,N,de.Type.INSPECT),te=U.size>0?Hgt(t.configuration,U.values().next().value):null;return te!==null?` -${z} at ${te}`:` -${z}`}).join("");h.push({text:`Conflict detected in constraint targeting ${de.pretty(t.configuration,b,de.Type.CODE)}; conflicting values are:${F}`,fixable:!1})}else{let[[F]]=E,N=(0,Ude.default)(v,b);if(N===F)continue;if(!o){let U=typeof N>"u"?`Missing field ${de.pretty(t.configuration,b,de.Type.CODE)}; expected ${de.pretty(t.configuration,F,de.Type.INSPECT)}`:typeof F>"u"?`Extraneous field ${de.pretty(t.configuration,b,de.Type.CODE)} currently set to ${de.pretty(t.configuration,N,de.Type.INSPECT)}`:`Invalid field ${de.pretty(t.configuration,b,de.Type.CODE)}; expected ${de.pretty(t.configuration,F,de.Type.INSPECT)}, found ${de.pretty(t.configuration,N,de.Type.INSPECT)}`;h.push({text:U,fixable:!0});continue}typeof F>"u"?(0,jde.default)(v,b):(0,_de.default)(v,b,F),C=!0}C&&a.set(I,v)}h.length>0&&n.set(I,h)}return{changedWorkspaces:a,remainingErrors:n}}function qde(t,{configuration:e}){let r={children:[]};for(let[o,a]of t){let n=[];for(let A of a){let p=A.text.split(/\n/);A.fixable&&(p[0]=`${de.pretty(e,"\u2699","gray")} ${p[0]}`),n.push({value:de.tuple(de.Type.NO_HINT,p[0]),children:p.slice(1).map(h=>({value:de.tuple(de.Type.NO_HINT,h)}))})}let u={value:de.tuple(de.Type.LOCATOR,o.anchoredLocator),children:_e.sortMap(n,A=>A.value[1])};r.children.push(u)}return r.children=_e.sortMap(r.children,o=>o.value[1]),r}var Ude,_de,Hde,jde,CC,Ogt,Mgt,Ugt,I2=yt(()=>{Ye();Ude=$e(h2()),_de=$e(Q8()),Hde=$e(Mde()),jde=$e(T8()),CC=class{constructor(e){this.indexedFields=e;this.items=[];this.indexes={};this.clear()}clear(){this.items=[];for(let e of this.indexedFields)this.indexes[e]=new Map}insert(e){this.items.push(e);for(let r of this.indexedFields){let o=Object.hasOwn(e,r)?e[r]:void 0;if(typeof o>"u")continue;_e.getArrayWithDefault(this.indexes[r],o).push(e)}return e}find(e){if(typeof e>"u")return this.items;let r=Object.entries(e);if(r.length===0)return this.items;let o=[],a;for(let[u,A]of r){let p=u,h=Object.hasOwn(this.indexes,p)?this.indexes[p]:void 0;if(typeof h>"u"){o.push([p,A]);continue}let C=new Set(h.get(A)??[]);if(C.size===0)return[];if(typeof a>"u")a=C;else for(let I of a)C.has(I)||a.delete(I);if(a.size===0)break}let n=[...a??[]];return o.length>0&&(n=n.filter(u=>{for(let[A,p]of o)if(!(typeof p<"u"?Object.hasOwn(u,A)&&u[A]===p:Object.hasOwn(u,A)===!1))return!1;return!0})),n}},Ogt=/^[0-9]+$/,Mgt=/^[a-zA-Z0-9_]+$/,Ugt=new Set(["scripts",...Ot.allDependencies])});var Gde=_((K9t,sH)=>{var jgt;(function(t){var e=function(){return{"append/2":[new t.type.Rule(new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("L")]),new t.type.Term("foldl",[new t.type.Term("append",[]),new t.type.Var("X"),new t.type.Term("[]",[]),new t.type.Var("L")]))],"append/3":[new t.type.Rule(new t.type.Term("append",[new t.type.Term("[]",[]),new t.type.Var("X"),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("append",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("append",[new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("S")]))],"member/2":[new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("_")])]),null),new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")])]),new t.type.Term("member",[new t.type.Var("X"),new t.type.Var("Xs")]))],"permutation/2":[new t.type.Rule(new t.type.Term("permutation",[new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("permutation",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("permutation",[new t.type.Var("T"),new t.type.Var("P")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("P")]),new t.type.Term("append",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("Y")]),new t.type.Var("S")])])]))],"maplist/2":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("X")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("Xs")])]))],"maplist/3":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs")])]))],"maplist/4":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs")])]))],"maplist/5":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds")])]))],"maplist/6":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es")])]))],"maplist/7":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs")])]))],"maplist/8":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")]),new t.type.Term(".",[new t.type.Var("G"),new t.type.Var("Gs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F"),new t.type.Var("G")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs"),new t.type.Var("Gs")])]))],"include/3":[new t.type.Rule(new t.type.Term("include",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("include",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("A")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("A"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("F"),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("F")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("L"),new t.type.Var("S")])]),new t.type.Term("include",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("S")])])])])]))],"exclude/3":[new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("E")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("Q")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("R"),new t.type.Var("Q")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("!",[]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("E")])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("E")])])])])])])]))],"foldl/4":[new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Var("I"),new t.type.Var("I")]),null),new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("I"),new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("I"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])])])]),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P2"),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P2")]),new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("R")])])])])]))],"select/3":[new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Xs")]),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term("select",[new t.type.Var("E"),new t.type.Var("Xs"),new t.type.Var("Ys")]))],"sum_list/2":[new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term("[]",[]),new t.type.Num(0,!1)]),null),new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("sum_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("+",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"max_list/2":[new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("max_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"min_list/2":[new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("min_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("=<",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"prod_list/2":[new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term("[]",[]),new t.type.Num(1,!1)]),null),new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("prod_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("*",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"last/2":[new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")]),new t.type.Var("X")]),new t.type.Term("last",[new t.type.Var("Xs"),new t.type.Var("X")]))],"prefix/2":[new t.type.Rule(new t.type.Term("prefix",[new t.type.Var("Part"),new t.type.Var("Whole")]),new t.type.Term("append",[new t.type.Var("Part"),new t.type.Var("_"),new t.type.Var("Whole")]))],"nth0/3":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth1/3":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth0/4":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth1/4":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth/5":[new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("N"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("X"),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("O"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("Y"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term(",",[new t.type.Term("is",[new t.type.Var("M"),new t.type.Term("+",[new t.type.Var("N"),new t.type.Num(1,!1)])]),new t.type.Term("nth",[new t.type.Var("M"),new t.type.Var("O"),new t.type.Var("Xs"),new t.type.Var("Y"),new t.type.Var("Ys")])]))],"length/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(!t.type.is_variable(A)&&!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(t.type.is_integer(A)&&A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else{var p=new t.type.Term("length",[u,new t.type.Num(0,!1),A]);t.type.is_integer(A)&&(p=new t.type.Term(",",[p,new t.type.Term("!",[])])),o.prepend([new t.type.State(a.goal.replace(p),a.substitution,a)])}},"length/3":[new t.type.Rule(new t.type.Term("length",[new t.type.Term("[]",[]),new t.type.Var("N"),new t.type.Var("N")]),null),new t.type.Rule(new t.type.Term("length",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("X")]),new t.type.Var("A"),new t.type.Var("N")]),new t.type.Term(",",[new t.type.Term("succ",[new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("length",[new t.type.Var("X"),new t.type.Var("B"),new t.type.Var("N")])]))],"replicate/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=new t.type.Term("[]"),C=0;C0;I--)C[I].equals(C[I-1])&&C.splice(I,1);for(var v=new t.type.Term("[]"),I=C.length-1;I>=0;I--)v=new t.type.Term(".",[C[I],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"msort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h=u;h.indicator==="./2";)p.push(h.args[0]),h=h.args[1];if(t.type.is_variable(h))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(h))o.throw_error(t.error.type("list",u,n.indicator));else{for(var C=p.sort(t.compare),I=new t.type.Term("[]"),v=C.length-1;v>=0;v--)I=new t.type.Term(".",[C[v],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,A])),a.substitution,a)])}}},"keysort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h,C=u;C.indicator==="./2";){if(h=C.args[0],t.type.is_variable(h)){o.throw_error(t.error.instantiation(n.indicator));return}else if(!t.type.is_term(h)||h.indicator!=="-/2"){o.throw_error(t.error.type("pair",h,n.indicator));return}h.args[0].pair=h.args[1],p.push(h.args[0]),C=C.args[1]}if(t.type.is_variable(C))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(C))o.throw_error(t.error.type("list",u,n.indicator));else{for(var I=p.sort(t.compare),v=new t.type.Term("[]"),b=I.length-1;b>=0;b--)v=new t.type.Term(".",[new t.type.Term("-",[I[b],I[b].pair]),v]),delete I[b].pair;o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"take/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,C=[],I=A;h>0&&I.indicator==="./2";)C.push(I.args[0]),I=I.args[1],h--;if(h===0){for(var v=new t.type.Term("[]"),h=C.length-1;h>=0;h--)v=new t.type.Term(".",[C[h],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,p])),a.substitution,a)])}}},"drop/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,C=[],I=A;h>0&&I.indicator==="./2";)C.push(I.args[0]),I=I.args[1],h--;h===0&&o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p])),a.substitution,a)])}},"reverse/2":function(o,a,n){var u=n.args[0],A=n.args[1],p=t.type.is_instantiated_list(u),h=t.type.is_instantiated_list(A);if(t.type.is_variable(u)&&t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(u)&&!t.type.is_fully_list(u))o.throw_error(t.error.type("list",u,n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!p&&!h)o.throw_error(t.error.instantiation(n.indicator));else{for(var C=p?u:A,I=new t.type.Term("[]",[]);C.indicator==="./2";)I=new t.type.Term(".",[C.args[0],I]),C=C.args[1];o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p?A:u])),a.substitution,a)])}},"list_to_set/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else{for(var p=u,h=[];p.indicator==="./2";)h.push(p.args[0]),p=p.args[1];if(t.type.is_variable(p))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_term(p)||p.indicator!=="[]/0")o.throw_error(t.error.type("list",u,n.indicator));else{for(var C=[],I=new t.type.Term("[]",[]),v,b=0;b=0;b--)I=new t.type.Term(".",[C[b],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[A,I])),a.substitution,a)])}}}}},r=["append/2","append/3","member/2","permutation/2","maplist/2","maplist/3","maplist/4","maplist/5","maplist/6","maplist/7","maplist/8","include/3","exclude/3","foldl/4","sum_list/2","max_list/2","min_list/2","prod_list/2","last/2","prefix/2","nth0/3","nth1/3","nth0/4","nth1/4","length/2","replicate/3","select/3","sort/2","msort/2","keysort/2","take/3","drop/3","reverse/2","list_to_set/2"];typeof sH<"u"?sH.exports=function(o){t=o,new t.type.Module("lists",e(),r)}:new t.type.Module("lists",e(),r)})(jgt)});var sme=_(Yr=>{"use strict";var Zd=process.platform==="win32",oH="aes-256-cbc",qgt="sha256",Kde="The current environment doesn't support interactive reading from TTY.",Yn=Be("fs"),Yde=process.binding("tty_wrap").TTY,lH=Be("child_process"),l0=Be("path"),cH={prompt:"> ",hideEchoBack:!1,mask:"*",limit:[],limitMessage:"Input another, please.$<( [)limit(])>",defaultInput:"",trueValue:[],falseValue:[],caseSensitive:!1,keepWhitespace:!1,encoding:"utf8",bufferSize:1024,print:void 0,history:!0,cd:!1,phContent:void 0,preCheck:void 0},Vf="none",Xc,IC,Wde=!1,a0,mk,aH,Ggt=0,hH="",Xd=[],yk,Vde=!1,uH=!1,B2=!1;function zde(t){function e(r){return r.replace(/[^\w\u0080-\uFFFF]/g,function(o){return"#"+o.charCodeAt(0)+";"})}return mk.concat(function(r){var o=[];return Object.keys(r).forEach(function(a){r[a]==="boolean"?t[a]&&o.push("--"+a):r[a]==="string"&&t[a]&&o.push("--"+a,e(t[a]))}),o}({display:"string",displayOnly:"boolean",keyIn:"boolean",hideEchoBack:"boolean",mask:"string",limit:"string",caseSensitive:"boolean"}))}function Ygt(t,e){function r(U){var z,te="",le;for(aH=aH||Be("os").tmpdir();;){z=l0.join(aH,U+te);try{le=Yn.openSync(z,"wx")}catch(pe){if(pe.code==="EEXIST"){te++;continue}else throw pe}Yn.closeSync(le);break}return z}var o,a,n,u={},A,p,h=r("readline-sync.stdout"),C=r("readline-sync.stderr"),I=r("readline-sync.exit"),v=r("readline-sync.done"),b=Be("crypto"),E,F,N;E=b.createHash(qgt),E.update(""+process.pid+Ggt+++Math.random()),N=E.digest("hex"),F=b.createDecipher(oH,N),o=zde(t),Zd?(a=process.env.ComSpec||"cmd.exe",process.env.Q='"',n=["/V:ON","/S","/C","(%Q%"+a+"%Q% /V:ON /S /C %Q%%Q%"+a0+"%Q%"+o.map(function(U){return" %Q%"+U+"%Q%"}).join("")+" & (echo !ERRORLEVEL!)>%Q%"+I+"%Q%%Q%) 2>%Q%"+C+"%Q% |%Q%"+process.execPath+"%Q% %Q%"+__dirname+"\\encrypt.js%Q% %Q%"+oH+"%Q% %Q%"+N+"%Q% >%Q%"+h+"%Q% & (echo 1)>%Q%"+v+"%Q%"]):(a="/bin/sh",n=["-c",'("'+a0+'"'+o.map(function(U){return" '"+U.replace(/'/g,"'\\''")+"'"}).join("")+'; echo $?>"'+I+'") 2>"'+C+'" |"'+process.execPath+'" "'+__dirname+'/encrypt.js" "'+oH+'" "'+N+'" >"'+h+'"; echo 1 >"'+v+'"']),B2&&B2("_execFileSync",o);try{lH.spawn(a,n,e)}catch(U){u.error=new Error(U.message),u.error.method="_execFileSync - spawn",u.error.program=a,u.error.args=n}for(;Yn.readFileSync(v,{encoding:t.encoding}).trim()!=="1";);return(A=Yn.readFileSync(I,{encoding:t.encoding}).trim())==="0"?u.input=F.update(Yn.readFileSync(h,{encoding:"binary"}),"hex",t.encoding)+F.final(t.encoding):(p=Yn.readFileSync(C,{encoding:t.encoding}).trim(),u.error=new Error(Kde+(p?` -`+p:"")),u.error.method="_execFileSync",u.error.program=a,u.error.args=n,u.error.extMessage=p,u.error.exitCode=+A),Yn.unlinkSync(h),Yn.unlinkSync(C),Yn.unlinkSync(I),Yn.unlinkSync(v),u}function Wgt(t){var e,r={},o,a={env:process.env,encoding:t.encoding};if(a0||(Zd?process.env.PSModulePath?(a0="powershell.exe",mk=["-ExecutionPolicy","Bypass","-File",__dirname+"\\read.ps1"]):(a0="cscript.exe",mk=["//nologo",__dirname+"\\read.cs.js"]):(a0="/bin/sh",mk=[__dirname+"/read.sh"])),Zd&&!process.env.PSModulePath&&(a.stdio=[process.stdin]),lH.execFileSync){e=zde(t),B2&&B2("execFileSync",e);try{r.input=lH.execFileSync(a0,e,a)}catch(n){o=n.stderr?(n.stderr+"").trim():"",r.error=new Error(Kde+(o?` -`+o:"")),r.error.method="execFileSync",r.error.program=a0,r.error.args=e,r.error.extMessage=o,r.error.exitCode=n.status,r.error.code=n.code,r.error.signal=n.signal}}else r=Ygt(t,a);return r.error||(r.input=r.input.replace(/^\s*'|'\s*$/g,""),t.display=""),r}function AH(t){var e="",r=t.display,o=!t.display&&t.keyIn&&t.hideEchoBack&&!t.mask;function a(){var n=Wgt(t);if(n.error)throw n.error;return n.input}return uH&&uH(t),function(){var n,u,A;function p(){return n||(n=process.binding("fs"),u=process.binding("constants")),n}if(typeof Vf=="string")if(Vf=null,Zd){if(A=function(h){var C=h.replace(/^\D+/,"").split("."),I=0;return(C[0]=+C[0])&&(I+=C[0]*1e4),(C[1]=+C[1])&&(I+=C[1]*100),(C[2]=+C[2])&&(I+=C[2]),I}(process.version),!(A>=20302&&A<40204||A>=5e4&&A<50100||A>=50600&&A<60200)&&process.stdin.isTTY)process.stdin.pause(),Vf=process.stdin.fd,IC=process.stdin._handle;else try{Vf=p().open("CONIN$",u.O_RDWR,parseInt("0666",8)),IC=new Yde(Vf,!0)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else{try{Xc=Yn.openSync("\\\\.\\CON","w")}catch{}if(typeof Xc!="number")try{Xc=p().open("CONOUT$",u.O_RDWR,parseInt("0666",8))}catch{}}}else{if(process.stdin.isTTY){process.stdin.pause();try{Vf=Yn.openSync("/dev/tty","r"),IC=process.stdin._handle}catch{}}else try{Vf=Yn.openSync("/dev/tty","r"),IC=new Yde(Vf,!1)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else try{Xc=Yn.openSync("/dev/tty","w")}catch{}}}(),function(){var n,u,A=!t.hideEchoBack&&!t.keyIn,p,h,C,I,v;yk="";function b(E){return E===Wde?!0:IC.setRawMode(E)!==0?!1:(Wde=E,!0)}if(Vde||!IC||typeof Xc!="number"&&(t.display||!A)){e=a();return}if(t.display&&(Yn.writeSync(Xc,t.display),t.display=""),!t.displayOnly){if(!b(!A)){e=a();return}for(h=t.keyIn?1:t.bufferSize,p=Buffer.allocUnsafe&&Buffer.alloc?Buffer.alloc(h):new Buffer(h),t.keyIn&&t.limit&&(u=new RegExp("[^"+t.limit+"]","g"+(t.caseSensitive?"":"i")));;){C=0;try{C=Yn.readSync(Vf,p,0,h)}catch(E){if(E.code!=="EOF"){b(!1),e+=a();return}}if(C>0?(I=p.toString(t.encoding,0,C),yk+=I):(I=` -`,yk+=String.fromCharCode(0)),I&&typeof(v=(I.match(/^(.*?)[\r\n]/)||[])[1])=="string"&&(I=v,n=!0),I&&(I=I.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")),I&&u&&(I=I.replace(u,"")),I&&(A||(t.hideEchoBack?t.mask&&Yn.writeSync(Xc,new Array(I.length+1).join(t.mask)):Yn.writeSync(Xc,I)),e+=I),!t.keyIn&&n||t.keyIn&&e.length>=h)break}!A&&!o&&Yn.writeSync(Xc,` -`),b(!1)}}(),t.print&&!o&&t.print(r+(t.displayOnly?"":(t.hideEchoBack?new Array(e.length+1).join(t.mask):e)+` -`),t.encoding),t.displayOnly?"":hH=t.keepWhitespace||t.keyIn?e:e.trim()}function Kgt(t,e){var r=[];function o(a){a!=null&&(Array.isArray(a)?a.forEach(o):(!e||e(a))&&r.push(a))}return o(t),r}function gH(t){return t.replace(/[\x00-\x7f]/g,function(e){return"\\x"+("00"+e.charCodeAt().toString(16)).substr(-2)})}function Ts(){var t=Array.prototype.slice.call(arguments),e,r;return t.length&&typeof t[0]=="boolean"&&(r=t.shift(),r&&(e=Object.keys(cH),t.unshift(cH))),t.reduce(function(o,a){return a==null||(a.hasOwnProperty("noEchoBack")&&!a.hasOwnProperty("hideEchoBack")&&(a.hideEchoBack=a.noEchoBack,delete a.noEchoBack),a.hasOwnProperty("noTrim")&&!a.hasOwnProperty("keepWhitespace")&&(a.keepWhitespace=a.noTrim,delete a.noTrim),r||(e=Object.keys(a)),e.forEach(function(n){var u;if(!!a.hasOwnProperty(n))switch(u=a[n],n){case"mask":case"limitMessage":case"defaultInput":case"encoding":u=u!=null?u+"":"",u&&n!=="limitMessage"&&(u=u.replace(/[\r\n]/g,"")),o[n]=u;break;case"bufferSize":!isNaN(u=parseInt(u,10))&&typeof u=="number"&&(o[n]=u);break;case"displayOnly":case"keyIn":case"hideEchoBack":case"caseSensitive":case"keepWhitespace":case"history":case"cd":o[n]=!!u;break;case"limit":case"trueValue":case"falseValue":o[n]=Kgt(u,function(A){var p=typeof A;return p==="string"||p==="number"||p==="function"||A instanceof RegExp}).map(function(A){return typeof A=="string"?A.replace(/[\r\n]/g,""):A});break;case"print":case"phContent":case"preCheck":o[n]=typeof u=="function"?u:void 0;break;case"prompt":case"display":o[n]=u??"";break}})),o},{})}function fH(t,e,r){return e.some(function(o){var a=typeof o;return a==="string"?r?t===o:t.toLowerCase()===o.toLowerCase():a==="number"?parseFloat(t)===o:a==="function"?o(t):o instanceof RegExp?o.test(t):!1})}function dH(t,e){var r=l0.normalize(Zd?(process.env.HOMEDRIVE||"")+(process.env.HOMEPATH||""):process.env.HOME||"").replace(/[\/\\]+$/,"");return t=l0.normalize(t),e?t.replace(/^~(?=\/|\\|$)/,r):t.replace(new RegExp("^"+gH(r)+"(?=\\/|\\\\|$)",Zd?"i":""),"~")}function BC(t,e){var r="(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?",o=new RegExp("(\\$)?(\\$<"+r+">)","g"),a=new RegExp("(\\$)?(\\$\\{"+r+"\\})","g");function n(u,A,p,h,C,I){var v;return A||typeof(v=e(C))!="string"?p:v?(h||"")+v+(I||""):""}return t.replace(o,n).replace(a,n)}function Jde(t,e,r){var o,a=[],n=-1,u=0,A="",p;function h(C,I){return I.length>3?(C.push(I[0]+"..."+I[I.length-1]),p=!0):I.length&&(C=C.concat(I)),C}return o=t.reduce(function(C,I){return C.concat((I+"").split(""))},[]).reduce(function(C,I){var v,b;return e||(I=I.toLowerCase()),v=/^\d$/.test(I)?1:/^[A-Z]$/.test(I)?2:/^[a-z]$/.test(I)?3:0,r&&v===0?A+=I:(b=I.charCodeAt(0),v&&v===n&&b===u+1?a.push(I):(C=h(C,a),a=[I],n=v),u=b),C},[]),o=h(o,a),A&&(o.push(A),p=!0),{values:o,suppressed:p}}function Xde(t,e){return t.join(t.length>2?", ":e?" / ":"/")}function Zde(t,e){var r,o,a={},n;if(e.phContent&&(r=e.phContent(t,e)),typeof r!="string")switch(t){case"hideEchoBack":case"mask":case"defaultInput":case"caseSensitive":case"keepWhitespace":case"encoding":case"bufferSize":case"history":case"cd":r=e.hasOwnProperty(t)?typeof e[t]=="boolean"?e[t]?"on":"off":e[t]+"":"";break;case"limit":case"trueValue":case"falseValue":o=e[e.hasOwnProperty(t+"Src")?t+"Src":t],e.keyIn?(a=Jde(o,e.caseSensitive),o=a.values):o=o.filter(function(u){var A=typeof u;return A==="string"||A==="number"}),r=Xde(o,a.suppressed);break;case"limitCount":case"limitCountNotZero":r=e[e.hasOwnProperty("limitSrc")?"limitSrc":"limit"].length,r=r||t!=="limitCountNotZero"?r+"":"";break;case"lastInput":r=hH;break;case"cwd":case"CWD":case"cwdHome":r=process.cwd(),t==="CWD"?r=l0.basename(r):t==="cwdHome"&&(r=dH(r));break;case"date":case"time":case"localeDate":case"localeTime":r=new Date()["to"+t.replace(/^./,function(u){return u.toUpperCase()})+"String"]();break;default:typeof(n=(t.match(/^history_m(\d+)$/)||[])[1])=="string"&&(r=Xd[Xd.length-n]||"")}return r}function $de(t){var e=/^(.)-(.)$/.exec(t),r="",o,a,n,u;if(!e)return null;for(o=e[1].charCodeAt(0),a=e[2].charCodeAt(0),u=o -And the length must be: $`,trueValue:null,falseValue:null,caseSensitive:!0},e,{history:!1,cd:!1,phContent:function(b){return b==="charlist"?r.text:b==="length"?o+"..."+a:null}}),u,A,p,h,C,I,v;for(e=e||{},u=BC(e.charlist?e.charlist+"":"$",$de),(isNaN(o=parseInt(e.min,10))||typeof o!="number")&&(o=12),(isNaN(a=parseInt(e.max,10))||typeof a!="number")&&(a=24),h=new RegExp("^["+gH(u)+"]{"+o+","+a+"}$"),r=Jde([u],n.caseSensitive,!0),r.text=Xde(r.values,r.suppressed),A=e.confirmMessage!=null?e.confirmMessage:"Reinput a same one to confirm it: ",p=e.unmatchMessage!=null?e.unmatchMessage:"It differs from first one. Hit only the Enter key if you want to retry from first one.",t==null&&(t="Input new password: "),C=n.limitMessage;!v;)n.limit=h,n.limitMessage=C,I=Yr.question(t,n),n.limit=[I,""],n.limitMessage=p,v=Yr.question(A,n);return I};function rme(t,e,r){var o;function a(n){return o=r(n),!isNaN(o)&&typeof o=="number"}return Yr.question(t,Ts({limitMessage:"Input valid number, please."},e,{limit:a,cd:!1})),o}Yr.questionInt=function(t,e){return rme(t,e,function(r){return parseInt(r,10)})};Yr.questionFloat=function(t,e){return rme(t,e,parseFloat)};Yr.questionPath=function(t,e){var r,o="",a=Ts({hideEchoBack:!1,limitMessage:`$Input valid path, please.$<( Min:)min>$<( Max:)max>`,history:!0,cd:!0},e,{keepWhitespace:!1,limit:function(n){var u,A,p;n=dH(n,!0),o="";function h(C){C.split(/\/|\\/).reduce(function(I,v){var b=l0.resolve(I+=v+l0.sep);if(!Yn.existsSync(b))Yn.mkdirSync(b);else if(!Yn.statSync(b).isDirectory())throw new Error("Non directory already exists: "+b);return I},"")}try{if(u=Yn.existsSync(n),r=u?Yn.realpathSync(n):l0.resolve(n),!e.hasOwnProperty("exists")&&!u||typeof e.exists=="boolean"&&e.exists!==u)return o=(u?"Already exists":"No such file or directory")+": "+r,!1;if(!u&&e.create&&(e.isDirectory?h(r):(h(l0.dirname(r)),Yn.closeSync(Yn.openSync(r,"w"))),r=Yn.realpathSync(r)),u&&(e.min||e.max||e.isFile||e.isDirectory)){if(A=Yn.statSync(r),e.isFile&&!A.isFile())return o="Not file: "+r,!1;if(e.isDirectory&&!A.isDirectory())return o="Not directory: "+r,!1;if(e.min&&A.size<+e.min||e.max&&A.size>+e.max)return o="Size "+A.size+" is out of range: "+r,!1}if(typeof e.validate=="function"&&(p=e.validate(r))!==!0)return typeof p=="string"&&(o=p),!1}catch(C){return o=C+"",!1}return!0},phContent:function(n){return n==="error"?o:n!=="min"&&n!=="max"?null:e.hasOwnProperty(n)?e[n]+"":""}});return e=e||{},t==null&&(t='Input path (you can "cd" and "pwd"): '),Yr.question(t,a),r};function nme(t,e){var r={},o={};return typeof t=="object"?(Object.keys(t).forEach(function(a){typeof t[a]=="function"&&(o[e.caseSensitive?a:a.toLowerCase()]=t[a])}),r.preCheck=function(a){var n;return r.args=pH(a),n=r.args[0]||"",e.caseSensitive||(n=n.toLowerCase()),r.hRes=n!=="_"&&o.hasOwnProperty(n)?o[n].apply(a,r.args.slice(1)):o.hasOwnProperty("_")?o._.apply(a,r.args):null,{res:a,forceNext:!1}},o.hasOwnProperty("_")||(r.limit=function(){var a=r.args[0]||"";return e.caseSensitive||(a=a.toLowerCase()),o.hasOwnProperty(a)})):r.preCheck=function(a){return r.args=pH(a),r.hRes=typeof t=="function"?t.apply(a,r.args):!0,{res:a,forceNext:!1}},r}Yr.promptCL=function(t,e){var r=Ts({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=nme(t,r);return r.limit=o.limit,r.preCheck=o.preCheck,Yr.prompt(r),o.args};Yr.promptLoop=function(t,e){for(var r=Ts({hideEchoBack:!1,trueValue:null,falseValue:null,caseSensitive:!1,history:!0},e);!t(Yr.prompt(r)););};Yr.promptCLLoop=function(t,e){var r=Ts({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=nme(t,r);for(r.limit=o.limit,r.preCheck=o.preCheck;Yr.prompt(r),!o.hRes;);};Yr.promptSimShell=function(t){return Yr.prompt(Ts({hideEchoBack:!1,history:!0},t,{prompt:function(){return Zd?"$>":(process.env.USER||"")+(process.env.HOSTNAME?"@"+process.env.HOSTNAME.replace(/\..*$/,""):"")+":$$ "}()}))};function ime(t,e,r){var o;return t==null&&(t="Are you sure? "),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s*:?\s*$/,"")+" [y/n]: "),o=Yr.keyIn(t,Ts(e,{hideEchoBack:!1,limit:r,trueValue:"y",falseValue:"n",caseSensitive:!1})),typeof o=="boolean"?o:""}Yr.keyInYN=function(t,e){return ime(t,e)};Yr.keyInYNStrict=function(t,e){return ime(t,e,"yn")};Yr.keyInPause=function(t,e){t==null&&(t="Continue..."),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s+$/,"")+" (Hit any key)"),Yr.keyIn(t,Ts({limit:null},e,{hideEchoBack:!0,mask:""}))};Yr.keyInSelect=function(t,e,r){var o=Ts({hideEchoBack:!1},r,{trueValue:null,falseValue:null,caseSensitive:!1,phContent:function(p){return p==="itemsCount"?t.length+"":p==="firstItem"?(t[0]+"").trim():p==="lastItem"?(t[t.length-1]+"").trim():null}}),a="",n={},u=49,A=` -`;if(!Array.isArray(t)||!t.length||t.length>35)throw"`items` must be Array (max length: 35).";return t.forEach(function(p,h){var C=String.fromCharCode(u);a+=C,n[C]=h,A+="["+C+"] "+(p+"").trim()+` -`,u=u===57?97:u+1}),(!r||r.cancel!==!1)&&(a+="0",n[0]=-1,A+="[0] "+(r&&r.cancel!=null&&typeof r.cancel!="boolean"?(r.cancel+"").trim():"CANCEL")+` -`),o.limit=a,A+=` -`,e==null&&(e="Choose one from list: "),(e+="")&&((!r||r.guide!==!1)&&(e=e.replace(/\s*:?\s*$/,"")+" [$]: "),A+=e),n[Yr.keyIn(A,o).toLowerCase()]};Yr.getRawInput=function(){return yk};function v2(t,e){var r;return e.length&&(r={},r[t]=e[0]),Yr.setDefaultOptions(r)[t]}Yr.setPrint=function(){return v2("print",arguments)};Yr.setPrompt=function(){return v2("prompt",arguments)};Yr.setEncoding=function(){return v2("encoding",arguments)};Yr.setMask=function(){return v2("mask",arguments)};Yr.setBufferSize=function(){return v2("bufferSize",arguments)}});var mH=_((z9t,hl)=>{(function(){var t={major:0,minor:2,patch:66,status:"beta"};tau_file_system={files:{},open:function(w,S,y){var R=tau_file_system.files[w];if(!R){if(y==="read")return null;R={path:w,text:"",type:S,get:function(J,X){return X===this.text.length||X>this.text.length?"end_of_file":this.text.substring(X,X+J)},put:function(J,X){return X==="end_of_file"?(this.text+=J,!0):X==="past_end_of_file"?null:(this.text=this.text.substring(0,X)+J+this.text.substring(X+J.length),!0)},get_byte:function(J){if(J==="end_of_stream")return-1;var X=Math.floor(J/2);if(this.text.length<=X)return-1;var Z=n(this.text[Math.floor(J/2)],0);return J%2===0?Z&255:Z/256>>>0},put_byte:function(J,X){var Z=X==="end_of_stream"?this.text.length:Math.floor(X/2);if(this.text.length>>0,ie=(ie&255)<<8|J&255):(ie=ie&255,ie=(J&255)<<8|ie&255),this.text.length===Z?this.text+=u(ie):this.text=this.text.substring(0,Z)+u(ie)+this.text.substring(Z+1),!0},flush:function(){return!0},close:function(){var J=tau_file_system.files[this.path];return J?!0:null}},tau_file_system.files[w]=R}return y==="write"&&(R.text=""),R}},tau_user_input={buffer:"",get:function(w,S){for(var y;tau_user_input.buffer.length\?\@\^\~\\]+|'(?:[^']*?(?:\\(?:x?\d+)?\\)*(?:'')*(?:\\')*)*')/,number:/^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abfnrtv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/,string:/^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/,l_brace:/^(?:\[)/,r_brace:/^(?:\])/,l_bracket:/^(?:\{)/,r_bracket:/^(?:\})/,bar:/^(?:\|)/,l_paren:/^(?:\()/,r_paren:/^(?:\))/};function N(w,S){return w.get_flag("char_conversion").id==="on"?S.replace(/./g,function(y){return w.get_char_conversion(y)}):S}function U(w){this.thread=w,this.text="",this.tokens=[]}U.prototype.set_last_tokens=function(w){return this.tokens=w},U.prototype.new_text=function(w){this.text=w,this.tokens=[]},U.prototype.get_tokens=function(w){var S,y=0,R=0,J=0,X=[],Z=!1;if(w){var ie=this.tokens[w-1];y=ie.len,S=N(this.thread,this.text.substr(ie.len)),R=ie.line,J=ie.start}else S=this.text;if(/^\s*$/.test(S))return null;for(;S!=="";){var Pe=[],Le=!1;if(/^\n/.exec(S)!==null){R++,J=0,y++,S=S.replace(/\n/,""),Z=!0;continue}for(var ot in F)if(F.hasOwnProperty(ot)){var dt=F[ot].exec(S);dt&&Pe.push({value:dt[0],name:ot,matches:dt})}if(!Pe.length)return this.set_last_tokens([{value:S,matches:[],name:"lexical",line:R,start:J}]);var ie=r(Pe,function(kr,mr){return kr.value.length>=mr.value.length?kr:mr});switch(ie.start=J,ie.line=R,S=S.replace(ie.value,""),J+=ie.value.length,y+=ie.value.length,ie.name){case"atom":ie.raw=ie.value,ie.value.charAt(0)==="'"&&(ie.value=v(ie.value.substr(1,ie.value.length-2),"'"),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence"));break;case"number":ie.float=ie.value.substring(0,2)!=="0x"&&ie.value.match(/[.eE]/)!==null&&ie.value!=="0'.",ie.value=E(ie.value),ie.blank=Le;break;case"string":var jt=ie.value.charAt(0);ie.value=v(ie.value.substr(1,ie.value.length-2),jt),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence");break;case"whitespace":var $t=X[X.length-1];$t&&($t.space=!0),Le=!0;continue;case"r_bracket":X.length>0&&X[X.length-1].name==="l_bracket"&&(ie=X.pop(),ie.name="atom",ie.value="{}",ie.raw="{}",ie.space=!1);break;case"r_brace":X.length>0&&X[X.length-1].name==="l_brace"&&(ie=X.pop(),ie.name="atom",ie.value="[]",ie.raw="[]",ie.space=!1);break}ie.len=y,X.push(ie),Le=!1}var xt=this.set_last_tokens(X);return xt.length===0?null:xt};function z(w,S,y,R,J){if(!S[y])return{type:A,value:x.error.syntax(S[y-1],"expression expected",!0)};var X;if(R==="0"){var Z=S[y];switch(Z.name){case"number":return{type:p,len:y+1,value:new x.type.Num(Z.value,Z.float)};case"variable":return{type:p,len:y+1,value:new x.type.Var(Z.value)};case"string":var ie;switch(w.get_flag("double_quotes").id){case"atom":ie=new H(Z.value,[]);break;case"codes":ie=new H("[]",[]);for(var Pe=Z.value.length-1;Pe>=0;Pe--)ie=new H(".",[new x.type.Num(n(Z.value,Pe),!1),ie]);break;case"chars":ie=new H("[]",[]);for(var Pe=Z.value.length-1;Pe>=0;Pe--)ie=new H(".",[new x.type.Term(Z.value.charAt(Pe),[]),ie]);break}return{type:p,len:y+1,value:ie};case"l_paren":var xt=z(w,S,y+1,w.__get_max_priority(),!0);return xt.type!==p?xt:S[xt.len]&&S[xt.len].name==="r_paren"?(xt.len++,xt):{type:A,derived:!0,value:x.error.syntax(S[xt.len]?S[xt.len]:S[xt.len-1],") or operator expected",!S[xt.len])};case"l_bracket":var xt=z(w,S,y+1,w.__get_max_priority(),!0);return xt.type!==p?xt:S[xt.len]&&S[xt.len].name==="r_bracket"?(xt.len++,xt.value=new H("{}",[xt.value]),xt):{type:A,derived:!0,value:x.error.syntax(S[xt.len]?S[xt.len]:S[xt.len-1],"} or operator expected",!S[xt.len])}}var Le=te(w,S,y,J);return Le.type===p||Le.derived||(Le=le(w,S,y),Le.type===p||Le.derived)?Le:{type:A,derived:!1,value:x.error.syntax(S[y],"unexpected token")}}var ot=w.__get_max_priority(),dt=w.__get_next_priority(R),jt=y;if(S[y].name==="atom"&&S[y+1]&&(S[y].space||S[y+1].name!=="l_paren")){var Z=S[y++],$t=w.__lookup_operator_classes(R,Z.value);if($t&&$t.indexOf("fy")>-1){var xt=z(w,S,y,R,J);if(xt.type!==A)return Z.value==="-"&&!Z.space&&x.type.is_number(xt.value)?{value:new x.type.Num(-xt.value.value,xt.value.is_float),len:xt.len,type:p}:{value:new x.type.Term(Z.value,[xt.value]),len:xt.len,type:p};X=xt}else if($t&&$t.indexOf("fx")>-1){var xt=z(w,S,y,dt,J);if(xt.type!==A)return{value:new x.type.Term(Z.value,[xt.value]),len:xt.len,type:p};X=xt}}y=jt;var xt=z(w,S,y,dt,J);if(xt.type===p){y=xt.len;var Z=S[y];if(S[y]&&(S[y].name==="atom"&&w.__lookup_operator_classes(R,Z.value)||S[y].name==="bar"&&w.__lookup_operator_classes(R,"|"))){var an=dt,kr=R,$t=w.__lookup_operator_classes(R,Z.value);if($t.indexOf("xf")>-1)return{value:new x.type.Term(Z.value,[xt.value]),len:++xt.len,type:p};if($t.indexOf("xfx")>-1){var mr=z(w,S,y+1,an,J);return mr.type===p?{value:new x.type.Term(Z.value,[xt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if($t.indexOf("xfy")>-1){var mr=z(w,S,y+1,kr,J);return mr.type===p?{value:new x.type.Term(Z.value,[xt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if(xt.type!==A)for(;;){y=xt.len;var Z=S[y];if(Z&&Z.name==="atom"&&w.__lookup_operator_classes(R,Z.value)){var $t=w.__lookup_operator_classes(R,Z.value);if($t.indexOf("yf")>-1)xt={value:new x.type.Term(Z.value,[xt.value]),len:++y,type:p};else if($t.indexOf("yfx")>-1){var mr=z(w,S,++y,an,J);if(mr.type===A)return mr.derived=!0,mr;y=mr.len,xt={value:new x.type.Term(Z.value,[xt.value,mr.value]),len:y,type:p}}else break}else break}}else X={type:A,value:x.error.syntax(S[xt.len-1],"operator expected")};return xt}return xt}function te(w,S,y,R){if(!S[y]||S[y].name==="atom"&&S[y].raw==="."&&!R&&(S[y].space||!S[y+1]||S[y+1].name!=="l_paren"))return{type:A,derived:!1,value:x.error.syntax(S[y-1],"unfounded token")};var J=S[y],X=[];if(S[y].name==="atom"&&S[y].raw!==","){if(y++,S[y-1].space)return{type:p,len:y,value:new x.type.Term(J.value,X)};if(S[y]&&S[y].name==="l_paren"){if(S[y+1]&&S[y+1].name==="r_paren")return{type:A,derived:!0,value:x.error.syntax(S[y+1],"argument expected")};var Z=z(w,S,++y,"999",!0);if(Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],"argument expected",!S[y])};for(X.push(Z.value),y=Z.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(Z=z(w,S,y+1,"999",!0),Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X.push(Z.value),y=Z.len}if(S[y]&&S[y].name==="r_paren")y++;else return{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],", or ) expected",!S[y])}}return{type:p,len:y,value:new x.type.Term(J.value,X)}}return{type:A,derived:!1,value:x.error.syntax(S[y],"term expected")}}function le(w,S,y){if(!S[y])return{type:A,derived:!1,value:x.error.syntax(S[y-1],"[ expected")};if(S[y]&&S[y].name==="l_brace"){var R=z(w,S,++y,"999",!0),J=[R.value],X=void 0;if(R.type===A)return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:new x.type.Term("[]",[])}:{type:A,derived:!0,value:x.error.syntax(S[y],"] expected")};for(y=R.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(R=z(w,S,y+1,"999",!0),R.type===A)return R.derived?R:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};J.push(R.value),y=R.len}var Z=!1;if(S[y]&&S[y].name==="bar"){if(Z=!0,R=z(w,S,y+1,"999",!0),R.type===A)return R.derived?R:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X=R.value,y=R.len}return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:g(J,X)}:{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],Z?"] expected":", or | or ] expected",!S[y])}}return{type:A,derived:!1,value:x.error.syntax(S[y],"list expected")}}function pe(w,S,y){var R=S[y].line,J=z(w,S,y,w.__get_max_priority(),!1),X=null,Z;if(J.type!==A)if(y=J.len,S[y]&&S[y].name==="atom"&&S[y].raw===".")if(y++,x.type.is_term(J.value)){if(J.value.indicator===":-/2"?(X=new x.type.Rule(J.value.args[0],Fe(J.value.args[1])),Z={value:X,len:y,type:p}):J.value.indicator==="-->/2"?(X=ae(new x.type.Rule(J.value.args[0],J.value.args[1]),w),X.body=Fe(X.body),Z={value:X,len:y,type:x.type.is_rule(X)?p:A}):(X=new x.type.Rule(J.value,null),Z={value:X,len:y,type:p}),X){var ie=X.singleton_variables();ie.length>0&&w.throw_warning(x.warning.singleton(ie,X.head.indicator,R))}return Z}else return{type:A,value:x.error.syntax(S[y],"callable expected")};else return{type:A,value:x.error.syntax(S[y]?S[y]:S[y-1],". or operator expected")};return J}function ue(w,S,y){y=y||{},y.from=y.from?y.from:"$tau-js",y.reconsult=y.reconsult!==void 0?y.reconsult:!0;var R=new U(w),J={},X;R.new_text(S);var Z=0,ie=R.get_tokens(Z);do{if(ie===null||!ie[Z])break;var Pe=pe(w,ie,Z);if(Pe.type===A)return new H("throw",[Pe.value]);if(Pe.value.body===null&&Pe.value.head.indicator==="?-/1"){var Le=new ze(w.session);Le.add_goal(Pe.value.head.args[0]),Le.answer(function(dt){x.type.is_error(dt)?w.throw_warning(dt.args[0]):(dt===!1||dt===null)&&w.throw_warning(x.warning.failed_goal(Pe.value.head.args[0],Pe.len))}),Z=Pe.len;var ot=!0}else if(Pe.value.body===null&&Pe.value.head.indicator===":-/1"){var ot=w.run_directive(Pe.value.head.args[0]);Z=Pe.len,Pe.value.head.args[0].indicator==="char_conversion/2"&&(ie=R.get_tokens(Z),Z=0)}else{X=Pe.value.head.indicator,y.reconsult!==!1&&J[X]!==!0&&!w.is_multifile_predicate(X)&&(w.session.rules[X]=a(w.session.rules[X]||[],function(jt){return jt.dynamic}),J[X]=!0);var ot=w.add_rule(Pe.value,y);Z=Pe.len}if(!ot)return ot}while(!0);return!0}function ye(w,S){var y=new U(w);y.new_text(S);var R=0;do{var J=y.get_tokens(R);if(J===null)break;var X=z(w,J,0,w.__get_max_priority(),!1);if(X.type!==A){var Z=X.len,ie=Z;if(J[Z]&&J[Z].name==="atom"&&J[Z].raw===".")w.add_goal(Fe(X.value));else{var Pe=J[Z];return new H("throw",[x.error.syntax(Pe||J[Z-1],". or operator expected",!Pe)])}R=X.len+1}else return new H("throw",[X.value])}while(!0);return!0}function ae(w,S){w=w.rename(S);var y=S.next_free_variable(),R=Ie(w.body,y,S);return R.error?R.value:(w.body=R.value,w.head.args=w.head.args.concat([y,R.variable]),w.head=new H(w.head.id,w.head.args),w)}function Ie(w,S,y){var R;if(x.type.is_term(w)&&w.indicator==="!/0")return{value:w,variable:S,error:!1};if(x.type.is_term(w)&&w.indicator===",/2"){var J=Ie(w.args[0],S,y);if(J.error)return J;var X=Ie(w.args[1],J.variable,y);return X.error?X:{value:new H(",",[J.value,X.value]),variable:X.variable,error:!1}}else{if(x.type.is_term(w)&&w.indicator==="{}/1")return{value:w.args[0],variable:S,error:!1};if(x.type.is_empty_list(w))return{value:new H("true",[]),variable:S,error:!1};if(x.type.is_list(w)){R=y.next_free_variable();for(var Z=w,ie;Z.indicator==="./2";)ie=Z,Z=Z.args[1];return x.type.is_variable(Z)?{value:x.error.instantiation("DCG"),variable:S,error:!0}:x.type.is_empty_list(Z)?(ie.args[1]=R,{value:new H("=",[S,w]),variable:R,error:!1}):{value:x.error.type("list",w,"DCG"),variable:S,error:!0}}else return x.type.is_callable(w)?(R=y.next_free_variable(),w.args=w.args.concat([S,R]),w=new H(w.id,w.args),{value:w,variable:R,error:!1}):{value:x.error.type("callable",w,"DCG"),variable:S,error:!0}}}function Fe(w){return x.type.is_variable(w)?new H("call",[w]):x.type.is_term(w)&&[",/2",";/2","->/2"].indexOf(w.indicator)!==-1?new H(w.id,[Fe(w.args[0]),Fe(w.args[1])]):w}function g(w,S){for(var y=S||new x.type.Term("[]",[]),R=w.length-1;R>=0;R--)y=new x.type.Term(".",[w[R],y]);return y}function Ee(w,S){for(var y=w.length-1;y>=0;y--)w[y]===S&&w.splice(y,1)}function De(w){for(var S={},y=[],R=0;R=0;S--)if(w.charAt(S)==="/")return new H("/",[new H(w.substring(0,S)),new be(parseInt(w.substring(S+1)),!1)])}function we(w){this.id=w}function be(w,S){this.is_float=S!==void 0?S:parseInt(w)!==w,this.value=this.is_float?w:parseInt(w)}var ht=0;function H(w,S,y){this.ref=y||++ht,this.id=w,this.args=S||[],this.indicator=w+"/"+this.args.length}var lt=0;function Te(w,S,y,R,J,X){this.id=lt++,this.stream=w,this.mode=S,this.alias=y,this.type=R!==void 0?R:"text",this.reposition=J!==void 0?J:!0,this.eof_action=X!==void 0?X:"eof_code",this.position=this.mode==="append"?"end_of_stream":0,this.output=this.mode==="write"||this.mode==="append",this.input=this.mode==="read"}function ke(w){w=w||{},this.links=w}function xe(w,S,y){S=S||new ke,y=y||null,this.goal=w,this.substitution=S,this.parent=y}function He(w,S,y){this.head=w,this.body=S,this.dynamic=y||!1}function Re(w){w=w===void 0||w<=0?1e3:w,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new ze(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=w,this.streams={user_input:new Te(typeof hl<"u"&&hl.exports?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Te(typeof hl<"u"&&hl.exports?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=typeof hl<"u"&&hl.exports?nodejs_file_system:tau_file_system,this.standard_input=this.streams.user_input,this.standard_output=this.streams.user_output,this.current_input=this.streams.user_input,this.current_output=this.streams.user_output,this.format_success=function(S){return S.substitution},this.format_error=function(S){return S.goal},this.flag={bounded:x.flag.bounded.value,max_integer:x.flag.max_integer.value,min_integer:x.flag.min_integer.value,integer_rounding_function:x.flag.integer_rounding_function.value,char_conversion:x.flag.char_conversion.value,debug:x.flag.debug.value,max_arity:x.flag.max_arity.value,unknown:x.flag.unknown.value,double_quotes:x.flag.double_quotes.value,occurs_check:x.flag.occurs_check.value,dialect:x.flag.dialect.value,version_data:x.flag.version_data.value,nodejs:x.flag.nodejs.value},this.__loaded_modules=[],this.__char_conversion={},this.__operators={1200:{":-":["fx","xfx"],"-->":["xfx"],"?-":["fx"]},1100:{";":["xfy"]},1050:{"->":["xfy"]},1e3:{",":["xfy"]},900:{"\\+":["fy"]},700:{"=":["xfx"],"\\=":["xfx"],"==":["xfx"],"\\==":["xfx"],"@<":["xfx"],"@=<":["xfx"],"@>":["xfx"],"@>=":["xfx"],"=..":["xfx"],is:["xfx"],"=:=":["xfx"],"=\\=":["xfx"],"<":["xfx"],"=<":["xfx"],">":["xfx"],">=":["xfx"]},600:{":":["xfy"]},500:{"+":["yfx"],"-":["yfx"],"/\\":["yfx"],"\\/":["yfx"]},400:{"*":["yfx"],"/":["yfx"],"//":["yfx"],rem:["yfx"],mod:["yfx"],"<<":["yfx"],">>":["yfx"]},200:{"**":["xfx"],"^":["xfy"],"-":["fy"],"+":["fy"],"\\":["fy"]}}}function ze(w){this.epoch=Date.now(),this.session=w,this.session.total_threads++,this.total_steps=0,this.cpu_time=0,this.cpu_time_last=0,this.points=[],this.debugger=!1,this.debugger_states=[],this.level="top_level/0",this.__calls=[],this.current_limit=this.session.limit,this.warnings=[]}function je(w,S,y){this.id=w,this.rules=S,this.exports=y,x.module[w]=this}je.prototype.exports_predicate=function(w){return this.exports.indexOf(w)!==-1},we.prototype.unify=function(w,S){if(S&&e(w.variables(),this.id)!==-1&&!x.type.is_variable(w))return null;var y={};return y[this.id]=w,new ke(y)},be.prototype.unify=function(w,S){return x.type.is_number(w)&&this.value===w.value&&this.is_float===w.is_float?new ke:null},H.prototype.unify=function(w,S){if(x.type.is_term(w)&&this.indicator===w.indicator){for(var y=new ke,R=0;R=0){var R=this.args[0].value,J=Math.floor(R/26),X=R%26;return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[X]+(J!==0?J:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(w)+"}";case"./2":for(var Z="["+this.args[0].toString(w),ie=this.args[1];ie.indicator==="./2";)Z+=", "+ie.args[0].toString(w),ie=ie.args[1];return ie.indicator!=="[]/0"&&(Z+="|"+ie.toString(w)),Z+="]",Z;case",/2":return"("+this.args[0].toString(w)+", "+this.args[1].toString(w)+")";default:var Pe=this.id,Le=w.session?w.session.lookup_operator(this.id,this.args.length):null;if(w.session===void 0||w.ignore_ops||Le===null)return w.quoted&&!/^(!|,|;|[a-z][0-9a-zA-Z_]*)$/.test(Pe)&&Pe!=="{}"&&Pe!=="[]"&&(Pe="'"+b(Pe)+"'"),Pe+(this.args.length?"("+o(this.args,function($t){return $t.toString(w)}).join(", ")+")":"");var ot=Le.priority>S.priority||Le.priority===S.priority&&(Le.class==="xfy"&&this.indicator!==S.indicator||Le.class==="yfx"&&this.indicator!==S.indicator||this.indicator===S.indicator&&Le.class==="yfx"&&y==="right"||this.indicator===S.indicator&&Le.class==="xfy"&&y==="left");Le.indicator=this.indicator;var dt=ot?"(":"",jt=ot?")":"";return this.args.length===0?"("+this.id+")":["fy","fx"].indexOf(Le.class)!==-1?dt+Pe+" "+this.args[0].toString(w,Le)+jt:["yf","xf"].indexOf(Le.class)!==-1?dt+this.args[0].toString(w,Le)+" "+Pe+jt:dt+this.args[0].toString(w,Le,"left")+" "+this.id+" "+this.args[1].toString(w,Le,"right")+jt}},Te.prototype.toString=function(w){return"("+this.id+")"},ke.prototype.toString=function(w){var S="{";for(var y in this.links)!this.links.hasOwnProperty(y)||(S!=="{"&&(S+=", "),S+=y+"/"+this.links[y].toString(w));return S+="}",S},xe.prototype.toString=function(w){return this.goal===null?"<"+this.substitution.toString(w)+">":"<"+this.goal.toString(w)+", "+this.substitution.toString(w)+">"},He.prototype.toString=function(w){return this.body?this.head.toString(w)+" :- "+this.body.toString(w)+".":this.head.toString(w)+"."},Re.prototype.toString=function(w){for(var S="",y=0;y=0;J--)R=new H(".",[S[J],R]);return R}return new H(this.id,o(this.args,function(X){return X.apply(w)}),this.ref)},Te.prototype.apply=function(w){return this},He.prototype.apply=function(w){return new He(this.head.apply(w),this.body!==null?this.body.apply(w):null)},ke.prototype.apply=function(w){var S,y={};for(S in this.links)!this.links.hasOwnProperty(S)||(y[S]=this.links[S].apply(w));return new ke(y)},H.prototype.select=function(){for(var w=this;w.indicator===",/2";)w=w.args[0];return w},H.prototype.replace=function(w){return this.indicator===",/2"?this.args[0].indicator===",/2"?new H(",",[this.args[0].replace(w),this.args[1]]):w===null?this.args[1]:new H(",",[w,this.args[1]]):w},H.prototype.search=function(w){if(x.type.is_term(w)&&w.ref!==void 0&&this.ref===w.ref)return!0;for(var S=0;SS&&R0&&(S=this.head_point().substitution.domain());e(S,x.format_variable(this.session.rename))!==-1;)this.session.rename++;if(w.id==="_")return new we(x.format_variable(this.session.rename));this.session.renamed_variables[w.id]=x.format_variable(this.session.rename)}return new we(this.session.renamed_variables[w.id])},Re.prototype.next_free_variable=function(){return this.thread.next_free_variable()},ze.prototype.next_free_variable=function(){this.session.rename++;var w=[];for(this.points.length>0&&(w=this.head_point().substitution.domain());e(w,x.format_variable(this.session.rename))!==-1;)this.session.rename++;return new we(x.format_variable(this.session.rename))},Re.prototype.is_public_predicate=function(w){return!this.public_predicates.hasOwnProperty(w)||this.public_predicates[w]===!0},ze.prototype.is_public_predicate=function(w){return this.session.is_public_predicate(w)},Re.prototype.is_multifile_predicate=function(w){return this.multifile_predicates.hasOwnProperty(w)&&this.multifile_predicates[w]===!0},ze.prototype.is_multifile_predicate=function(w){return this.session.is_multifile_predicate(w)},Re.prototype.prepend=function(w){return this.thread.prepend(w)},ze.prototype.prepend=function(w){for(var S=w.length-1;S>=0;S--)this.points.push(w[S])},Re.prototype.success=function(w,S){return this.thread.success(w,S)},ze.prototype.success=function(w,y){var y=typeof y>"u"?w:y;this.prepend([new xe(w.goal.replace(null),w.substitution,y)])},Re.prototype.throw_error=function(w){return this.thread.throw_error(w)},ze.prototype.throw_error=function(w){this.prepend([new xe(new H("throw",[w]),new ke,null,null)])},Re.prototype.step_rule=function(w,S){return this.thread.step_rule(w,S)},ze.prototype.step_rule=function(w,S){var y=S.indicator;if(w==="user"&&(w=null),w===null&&this.session.rules.hasOwnProperty(y))return this.session.rules[y];for(var R=w===null?this.session.modules:e(this.session.modules,w)===-1?[]:[w],J=0;J1)&&this.again()},Re.prototype.answers=function(w,S,y){return this.thread.answers(w,S,y)},ze.prototype.answers=function(w,S,y){var R=S||1e3,J=this;if(S<=0){y&&y();return}this.answer(function(X){w(X),X!==!1?setTimeout(function(){J.answers(w,S-1,y)},1):y&&y()})},Re.prototype.again=function(w){return this.thread.again(w)},ze.prototype.again=function(w){for(var S,y=Date.now();this.__calls.length>0;){for(this.warnings=[],w!==!1&&(this.current_limit=this.session.limit);this.current_limit>0&&this.points.length>0&&this.head_point().goal!==null&&!x.type.is_error(this.head_point().goal);)if(this.current_limit--,this.step()===!0)return;var R=Date.now();this.cpu_time_last=R-y,this.cpu_time+=this.cpu_time_last;var J=this.__calls.shift();this.current_limit<=0?J(null):this.points.length===0?J(!1):x.type.is_error(this.head_point().goal)?(S=this.session.format_error(this.points.pop()),this.points=[],J(S)):(this.debugger&&this.debugger_states.push(this.head_point()),S=this.session.format_success(this.points.pop()),J(S))}},Re.prototype.unfold=function(w){if(w.body===null)return!1;var S=w.head,y=w.body,R=y.select(),J=new ze(this),X=[];J.add_goal(R),J.step();for(var Z=J.points.length-1;Z>=0;Z--){var ie=J.points[Z],Pe=S.apply(ie.substitution),Le=y.replace(ie.goal);Le!==null&&(Le=Le.apply(ie.substitution)),X.push(new He(Pe,Le))}var ot=this.rules[S.indicator],dt=e(ot,w);return X.length>0&&dt!==-1?(ot.splice.apply(ot,[dt,1].concat(X)),!0):!1},ze.prototype.unfold=function(w){return this.session.unfold(w)},we.prototype.interpret=function(w){return x.error.instantiation(w.level)},be.prototype.interpret=function(w){return this},H.prototype.interpret=function(w){return x.type.is_unitary_list(this)?this.args[0].interpret(w):x.operate(w,this)},we.prototype.compare=function(w){return this.idw.id?1:0},be.prototype.compare=function(w){if(this.value===w.value&&this.is_float===w.is_float)return 0;if(this.valuew.value)return 1},H.prototype.compare=function(w){if(this.args.lengthw.args.length||this.args.length===w.args.length&&this.id>w.id)return 1;for(var S=0;SR)return 1;if(w.constructor===be){if(w.is_float&&S.is_float)return 0;if(w.is_float)return-1;if(S.is_float)return 1}return 0},is_substitution:function(w){return w instanceof ke},is_state:function(w){return w instanceof xe},is_rule:function(w){return w instanceof He},is_variable:function(w){return w instanceof we},is_stream:function(w){return w instanceof Te},is_anonymous_var:function(w){return w instanceof we&&w.id==="_"},is_callable:function(w){return w instanceof H},is_number:function(w){return w instanceof be},is_integer:function(w){return w instanceof be&&!w.is_float},is_float:function(w){return w instanceof be&&w.is_float},is_term:function(w){return w instanceof H},is_atom:function(w){return w instanceof H&&w.args.length===0},is_ground:function(w){if(w instanceof we)return!1;if(w instanceof H){for(var S=0;S0},is_list:function(w){return w instanceof H&&(w.indicator==="[]/0"||w.indicator==="./2")},is_empty_list:function(w){return w instanceof H&&w.indicator==="[]/0"},is_non_empty_list:function(w){return w instanceof H&&w.indicator==="./2"},is_fully_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof we||w instanceof H&&w.indicator==="[]/0"},is_instantiated_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof H&&w.indicator==="[]/0"},is_unitary_list:function(w){return w instanceof H&&w.indicator==="./2"&&w.args[1]instanceof H&&w.args[1].indicator==="[]/0"},is_character:function(w){return w instanceof H&&(w.id.length===1||w.id.length>0&&w.id.length<=2&&n(w.id,0)>=65536)},is_character_code:function(w){return w instanceof be&&!w.is_float&&w.value>=0&&w.value<=1114111},is_byte:function(w){return w instanceof be&&!w.is_float&&w.value>=0&&w.value<=255},is_operator:function(w){return w instanceof H&&x.arithmetic.evaluation[w.indicator]},is_directive:function(w){return w instanceof H&&x.directive[w.indicator]!==void 0},is_builtin:function(w){return w instanceof H&&x.predicate[w.indicator]!==void 0},is_error:function(w){return w instanceof H&&w.indicator==="throw/1"},is_predicate_indicator:function(w){return w instanceof H&&w.indicator==="//2"&&w.args[0]instanceof H&&w.args[0].args.length===0&&w.args[1]instanceof be&&w.args[1].is_float===!1},is_flag:function(w){return w instanceof H&&w.args.length===0&&x.flag[w.id]!==void 0},is_value_flag:function(w,S){if(!x.type.is_flag(w))return!1;for(var y in x.flag[w.id].allowed)if(!!x.flag[w.id].allowed.hasOwnProperty(y)&&x.flag[w.id].allowed[y].equals(S))return!0;return!1},is_io_mode:function(w){return x.type.is_atom(w)&&["read","write","append"].indexOf(w.id)!==-1},is_stream_option:function(w){return x.type.is_term(w)&&(w.indicator==="alias/1"&&x.type.is_atom(w.args[0])||w.indicator==="reposition/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="type/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary")||w.indicator==="eof_action/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))},is_stream_position:function(w){return x.type.is_integer(w)&&w.value>=0||x.type.is_atom(w)&&(w.id==="end_of_stream"||w.id==="past_end_of_stream")},is_stream_property:function(w){return x.type.is_term(w)&&(w.indicator==="input/0"||w.indicator==="output/0"||w.indicator==="alias/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="file_name/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="position/1"&&(x.type.is_variable(w.args[0])||x.type.is_stream_position(w.args[0]))||w.indicator==="reposition/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))||w.indicator==="type/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary"))||w.indicator==="mode/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="read"||w.args[0].id==="write"||w.args[0].id==="append"))||w.indicator==="eof_action/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))||w.indicator==="end_of_stream/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="at"||w.args[0].id==="past"||w.args[0].id==="not")))},is_streamable:function(w){return w.__proto__.stream!==void 0},is_read_option:function(w){return x.type.is_term(w)&&["variables/1","variable_names/1","singletons/1"].indexOf(w.indicator)!==-1},is_write_option:function(w){return x.type.is_term(w)&&(w.indicator==="quoted/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="ignore_ops/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="numbervars/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))},is_close_option:function(w){return x.type.is_term(w)&&w.indicator==="force/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")},is_modifiable_flag:function(w){return x.type.is_flag(w)&&x.flag[w.id].changeable},is_module:function(w){return w instanceof H&&w.indicator==="library/1"&&w.args[0]instanceof H&&w.args[0].args.length===0&&x.module[w.args[0].id]!==void 0}},arithmetic:{evaluation:{"e/0":{type_args:null,type_result:!0,fn:function(w){return Math.E}},"pi/0":{type_args:null,type_result:!0,fn:function(w){return Math.PI}},"tau/0":{type_args:null,type_result:!0,fn:function(w){return 2*Math.PI}},"epsilon/0":{type_args:null,type_result:!0,fn:function(w){return Number.EPSILON}},"+/1":{type_args:null,type_result:null,fn:function(w,S){return w}},"-/1":{type_args:null,type_result:null,fn:function(w,S){return-w}},"\\/1":{type_args:!1,type_result:!1,fn:function(w,S){return~w}},"abs/1":{type_args:null,type_result:null,fn:function(w,S){return Math.abs(w)}},"sign/1":{type_args:null,type_result:null,fn:function(w,S){return Math.sign(w)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(w,S){return w-parseInt(w)}},"float/1":{type_args:null,type_result:!0,fn:function(w,S){return parseFloat(w)}},"floor/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.floor(w)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"round/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.round(w)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.ceil(w)}},"sin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sin(w)}},"cos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.cos(w)}},"tan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.tan(w)}},"asin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.asin(w)}},"acos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.acos(w)}},"atan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.atan(w)}},"atan2/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.atan2(w,S)}},"exp/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.exp(w)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sqrt(w)}},"log/1":{type_args:null,type_result:!0,fn:function(w,S){return w>0?Math.log(w):x.error.evaluation("undefined",S.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(w,S,y){return w+S}},"-/2":{type_args:null,type_result:null,fn:function(w,S,y){return w-S}},"*/2":{type_args:null,type_result:null,fn:function(w,S,y){return w*S}},"//2":{type_args:null,type_result:!0,fn:function(w,S,y){return S?w/S:x.error.evaluation("zero_division",y.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?parseInt(w/S):x.error.evaluation("zero_division",y.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.pow(w,S)}},"^/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.pow(w,S)}},"<>/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w>>S}},"/\\/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w&S}},"\\//2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w|S}},"xor/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w^S}},"rem/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w%S:x.error.evaluation("zero_division",y.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w-parseInt(w/S)*S:x.error.evaluation("zero_division",y.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.max(w,S)}},"min/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.min(w,S)}}}},directive:{"dynamic/1":function(w,S){var y=S.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_compound(y)||y.indicator!=="//2")w.throw_error(x.error.type("predicate_indicator",y,S.indicator));else if(x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1]))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],S.indicator));else if(!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],S.indicator));else{var R=S.args[0].args[0].id+"/"+S.args[0].args[1].value;w.session.public_predicates[R]=!0,w.session.rules[R]||(w.session.rules[R]=[])}},"multifile/1":function(w,S){var y=S.args[0];x.type.is_variable(y)?w.throw_error(x.error.instantiation(S.indicator)):!x.type.is_compound(y)||y.indicator!=="//2"?w.throw_error(x.error.type("predicate_indicator",y,S.indicator)):x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1])?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_atom(y.args[0])?x.type.is_integer(y.args[1])?w.session.multifile_predicates[S.args[0].args[0].id+"/"+S.args[0].args[1].value]=!0:w.throw_error(x.error.type("integer",y.args[1],S.indicator)):w.throw_error(x.error.type("atom",y.args[0],S.indicator))},"set_prolog_flag/2":function(w,S){var y=S.args[0],R=S.args[1];x.type.is_variable(y)||x.type.is_variable(R)?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_atom(y)?x.type.is_flag(y)?x.type.is_value_flag(y,R)?x.type.is_modifiable_flag(y)?w.session.flag[y.id]=R:w.throw_error(x.error.permission("modify","flag",y)):w.throw_error(x.error.domain("flag_value",new H("+",[y,R]),S.indicator)):w.throw_error(x.error.domain("prolog_flag",y,S.indicator)):w.throw_error(x.error.type("atom",y,S.indicator))},"use_module/1":function(w,S){var y=S.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_term(y))w.throw_error(x.error.type("term",y,S.indicator));else if(x.type.is_module(y)){var R=y.args[0].id;e(w.session.modules,R)===-1&&w.session.modules.push(R)}},"char_conversion/2":function(w,S){var y=S.args[0],R=S.args[1];x.type.is_variable(y)||x.type.is_variable(R)?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_character(y)?x.type.is_character(R)?y.id===R.id?delete w.session.__char_conversion[y.id]:w.session.__char_conversion[y.id]=R.id:w.throw_error(x.error.type("character",R,S.indicator)):w.throw_error(x.error.type("character",y,S.indicator))},"op/3":function(w,S){var y=S.args[0],R=S.args[1],J=S.args[2];if(x.type.is_variable(y)||x.type.is_variable(R)||x.type.is_variable(J))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_integer(y))w.throw_error(x.error.type("integer",y,S.indicator));else if(!x.type.is_atom(R))w.throw_error(x.error.type("atom",R,S.indicator));else if(!x.type.is_atom(J))w.throw_error(x.error.type("atom",J,S.indicator));else if(y.value<0||y.value>1200)w.throw_error(x.error.domain("operator_priority",y,S.indicator));else if(J.id===",")w.throw_error(x.error.permission("modify","operator",J,S.indicator));else if(J.id==="|"&&(y.value<1001||R.id.length!==3))w.throw_error(x.error.permission("modify","operator",J,S.indicator));else if(["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(R.id)===-1)w.throw_error(x.error.domain("operator_specifier",R,S.indicator));else{var X={prefix:null,infix:null,postfix:null};for(var Z in w.session.__operators)if(!!w.session.__operators.hasOwnProperty(Z)){var ie=w.session.__operators[Z][J.id];ie&&(e(ie,"fx")!==-1&&(X.prefix={priority:Z,type:"fx"}),e(ie,"fy")!==-1&&(X.prefix={priority:Z,type:"fy"}),e(ie,"xf")!==-1&&(X.postfix={priority:Z,type:"xf"}),e(ie,"yf")!==-1&&(X.postfix={priority:Z,type:"yf"}),e(ie,"xfx")!==-1&&(X.infix={priority:Z,type:"xfx"}),e(ie,"xfy")!==-1&&(X.infix={priority:Z,type:"xfy"}),e(ie,"yfx")!==-1&&(X.infix={priority:Z,type:"yfx"}))}var Pe;switch(R.id){case"fy":case"fx":Pe="prefix";break;case"yf":case"xf":Pe="postfix";break;default:Pe="infix";break}if(((X.prefix&&Pe==="prefix"||X.postfix&&Pe==="postfix"||X.infix&&Pe==="infix")&&X[Pe].type!==R.id||X.infix&&Pe==="postfix"||X.postfix&&Pe==="infix")&&y.value!==0)w.throw_error(x.error.permission("create","operator",J,S.indicator));else return X[Pe]&&(Ee(w.session.__operators[X[Pe].priority][J.id],R.id),w.session.__operators[X[Pe].priority][J.id].length===0&&delete w.session.__operators[X[Pe].priority][J.id]),y.value>0&&(w.session.__operators[y.value]||(w.session.__operators[y.value.toString()]={}),w.session.__operators[y.value][J.id]||(w.session.__operators[y.value][J.id]=[]),w.session.__operators[y.value][J.id].push(R.id)),!0}}},predicate:{"op/3":function(w,S,y){x.directive["op/3"](w,y)&&w.success(S)},"current_op/3":function(w,S,y){var R=y.args[0],J=y.args[1],X=y.args[2],Z=[];for(var ie in w.session.__operators)for(var Pe in w.session.__operators[ie])for(var Le=0;Le/2"){var R=w.points,J=w.session.format_success,X=w.session.format_error;w.session.format_success=function(Le){return Le.substitution},w.session.format_error=function(Le){return Le.goal},w.points=[new xe(y.args[0].args[0],S.substitution,S)];var Z=function(Le){w.points=R,w.session.format_success=J,w.session.format_error=X,Le===!1?w.prepend([new xe(S.goal.replace(y.args[1]),S.substitution,S)]):x.type.is_error(Le)?w.throw_error(Le.args[0]):Le===null?(w.prepend([S]),w.__calls.shift()(null)):w.prepend([new xe(S.goal.replace(y.args[0].args[1]).apply(Le),S.substitution.apply(Le),S)])};w.__calls.unshift(Z)}else{var ie=new xe(S.goal.replace(y.args[0]),S.substitution,S),Pe=new xe(S.goal.replace(y.args[1]),S.substitution,S);w.prepend([ie,Pe])}},"!/0":function(w,S,y){var R,J,X=[];for(R=S,J=null;R.parent!==null&&R.parent.goal.search(y);)if(J=R,R=R.parent,R.goal!==null){var Z=R.goal.select();if(Z&&Z.id==="call"&&Z.search(y)){R=J;break}}for(var ie=w.points.length-1;ie>=0;ie--){for(var Pe=w.points[ie],Le=Pe.parent;Le!==null&&Le!==R.parent;)Le=Le.parent;Le===null&&Le!==R.parent&&X.push(Pe)}w.points=X.reverse(),w.success(S)},"\\+/1":function(w,S,y){var R=y.args[0];x.type.is_variable(R)?w.throw_error(x.error.instantiation(w.level)):x.type.is_callable(R)?w.prepend([new xe(S.goal.replace(new H(",",[new H(",",[new H("call",[R]),new H("!",[])]),new H("fail",[])])),S.substitution,S),new xe(S.goal.replace(null),S.substitution,S)]):w.throw_error(x.error.type("callable",R,w.level))},"->/2":function(w,S,y){var R=S.goal.replace(new H(",",[y.args[0],new H(",",[new H("!"),y.args[1]])]));w.prepend([new xe(R,S.substitution,S)])},"fail/0":function(w,S,y){},"false/0":function(w,S,y){},"true/0":function(w,S,y){w.success(S)},"call/1":ne(1),"call/2":ne(2),"call/3":ne(3),"call/4":ne(4),"call/5":ne(5),"call/6":ne(6),"call/7":ne(7),"call/8":ne(8),"once/1":function(w,S,y){var R=y.args[0];w.prepend([new xe(S.goal.replace(new H(",",[new H("call",[R]),new H("!",[])])),S.substitution,S)])},"forall/2":function(w,S,y){var R=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("\\+",[new H(",",[new H("call",[R]),new H("\\+",[new H("call",[J])])])])),S.substitution,S)])},"repeat/0":function(w,S,y){w.prepend([new xe(S.goal.replace(null),S.substitution,S),S])},"throw/1":function(w,S,y){x.type.is_variable(y.args[0])?w.throw_error(x.error.instantiation(w.level)):w.throw_error(y.args[0])},"catch/3":function(w,S,y){var R=w.points;w.points=[],w.prepend([new xe(y.args[0],S.substitution,S)]);var J=w.session.format_success,X=w.session.format_error;w.session.format_success=function(ie){return ie.substitution},w.session.format_error=function(ie){return ie.goal};var Z=function(ie){var Pe=w.points;if(w.points=R,w.session.format_success=J,w.session.format_error=X,x.type.is_error(ie)){for(var Le=[],ot=w.points.length-1;ot>=0;ot--){for(var $t=w.points[ot],dt=$t.parent;dt!==null&&dt!==S.parent;)dt=dt.parent;dt===null&&dt!==S.parent&&Le.push($t)}w.points=Le;var jt=w.get_flag("occurs_check").indicator==="true/0",$t=new xe,xt=x.unify(ie.args[0],y.args[1],jt);xt!==null?($t.substitution=S.substitution.apply(xt),$t.goal=S.goal.replace(y.args[2]).apply(xt),$t.parent=S,w.prepend([$t])):w.throw_error(ie.args[0])}else if(ie!==!1){for(var an=ie===null?[]:[new xe(S.goal.apply(ie).replace(null),S.substitution.apply(ie),S)],kr=[],ot=Pe.length-1;ot>=0;ot--){kr.push(Pe[ot]);var mr=Pe[ot].goal!==null?Pe[ot].goal.select():null;if(x.type.is_term(mr)&&mr.indicator==="!/0")break}var xr=o(kr,function(Wr){return Wr.goal===null&&(Wr.goal=new H("true",[])),Wr=new xe(S.goal.replace(new H("catch",[Wr.goal,y.args[1],y.args[2]])),S.substitution.apply(Wr.substitution),Wr.parent),Wr.exclude=y.args[0].variables(),Wr}).reverse();w.prepend(xr),w.prepend(an),ie===null&&(this.current_limit=0,w.__calls.shift()(null))}};w.__calls.unshift(Z)},"=/2":function(w,S,y){var R=w.get_flag("occurs_check").indicator==="true/0",J=new xe,X=x.unify(y.args[0],y.args[1],R);X!==null&&(J.goal=S.goal.apply(X).replace(null),J.substitution=S.substitution.apply(X),J.parent=S,w.prepend([J]))},"unify_with_occurs_check/2":function(w,S,y){var R=new xe,J=x.unify(y.args[0],y.args[1],!0);J!==null&&(R.goal=S.goal.apply(J).replace(null),R.substitution=S.substitution.apply(J),R.parent=S,w.prepend([R]))},"\\=/2":function(w,S,y){var R=w.get_flag("occurs_check").indicator==="true/0",J=x.unify(y.args[0],y.args[1],R);J===null&&w.success(S)},"subsumes_term/2":function(w,S,y){var R=w.get_flag("occurs_check").indicator==="true/0",J=x.unify(y.args[1],y.args[0],R);J!==null&&y.args[1].apply(J).equals(y.args[1])&&w.success(S)},"findall/3":function(w,S,y){var R=y.args[0],J=y.args[1],X=y.args[2];if(x.type.is_variable(J))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(J))w.throw_error(x.error.type("callable",J,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=w.next_free_variable(),ie=new H(",",[J,new H("=",[Z,R])]),Pe=w.points,Le=w.session.limit,ot=w.session.format_success;w.session.format_success=function($t){return $t.substitution},w.add_goal(ie,!0,S);var dt=[],jt=function($t){if($t!==!1&&$t!==null&&!x.type.is_error($t))w.__calls.unshift(jt),dt.push($t.links[Z.id]),w.session.limit=w.current_limit;else if(w.points=Pe,w.session.limit=Le,w.session.format_success=ot,x.type.is_error($t))w.throw_error($t.args[0]);else if(w.current_limit>0){for(var xt=new H("[]"),an=dt.length-1;an>=0;an--)xt=new H(".",[dt[an],xt]);w.prepend([new xe(S.goal.replace(new H("=",[X,xt])),S.substitution,S)])}};w.__calls.unshift(jt)}},"bagof/3":function(w,S,y){var R,J=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(X))w.throw_error(x.error.type("callable",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Pe;X.indicator==="^/2"?(Pe=X.args[0].variables(),X=X.args[1]):Pe=[],Pe=Pe.concat(J.variables());for(var Le=X.variables().filter(function(xr){return e(Pe,xr)===-1}),ot=new H("[]"),dt=Le.length-1;dt>=0;dt--)ot=new H(".",[new we(Le[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,J])])]),$t=w.points,xt=w.session.limit,an=w.session.format_success;w.session.format_success=function(xr){return xr.substitution},w.add_goal(jt,!0,S);var kr=[],mr=function(xr){if(xr!==!1&&xr!==null&&!x.type.is_error(xr)){w.__calls.unshift(mr);var Wr=!1,Kn=xr.links[ie.id].args[0],Ns=xr.links[ie.id].args[1];for(var Ti in kr)if(!!kr.hasOwnProperty(Ti)){var ps=kr[Ti];if(ps.variables.equals(Kn)){ps.answers.push(Ns),Wr=!0;break}}Wr||kr.push({variables:Kn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=xt,w.session.format_success=an,x.type.is_error(xr))w.throw_error(xr.args[0]);else if(w.current_limit>0){for(var io=[],Si=0;Si=0;so--)Os=new H(".",[xr[so],Os]);io.push(new xe(S.goal.replace(new H(",",[new H("=",[ot,kr[Si].variables]),new H("=",[Z,Os])])),S.substitution,S))}w.prepend(io)}};w.__calls.unshift(mr)}},"setof/3":function(w,S,y){var R,J=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(X))w.throw_error(x.error.type("callable",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Pe;X.indicator==="^/2"?(Pe=X.args[0].variables(),X=X.args[1]):Pe=[],Pe=Pe.concat(J.variables());for(var Le=X.variables().filter(function(xr){return e(Pe,xr)===-1}),ot=new H("[]"),dt=Le.length-1;dt>=0;dt--)ot=new H(".",[new we(Le[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,J])])]),$t=w.points,xt=w.session.limit,an=w.session.format_success;w.session.format_success=function(xr){return xr.substitution},w.add_goal(jt,!0,S);var kr=[],mr=function(xr){if(xr!==!1&&xr!==null&&!x.type.is_error(xr)){w.__calls.unshift(mr);var Wr=!1,Kn=xr.links[ie.id].args[0],Ns=xr.links[ie.id].args[1];for(var Ti in kr)if(!!kr.hasOwnProperty(Ti)){var ps=kr[Ti];if(ps.variables.equals(Kn)){ps.answers.push(Ns),Wr=!0;break}}Wr||kr.push({variables:Kn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=xt,w.session.format_success=an,x.type.is_error(xr))w.throw_error(xr.args[0]);else if(w.current_limit>0){for(var io=[],Si=0;Si=0;so--)Os=new H(".",[xr[so],Os]);io.push(new xe(S.goal.replace(new H(",",[new H("=",[ot,kr[Si].variables]),new H("=",[Z,Os])])),S.substitution,S))}w.prepend(io)}};w.__calls.unshift(mr)}},"functor/3":function(w,S,y){var R,J=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(J)&&(x.type.is_variable(X)||x.type.is_variable(Z)))w.throw_error(x.error.instantiation("functor/3"));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",y.args[2],"functor/3"));else if(!x.type.is_variable(X)&&!x.type.is_atomic(X))w.throw_error(x.error.type("atomic",y.args[1],"functor/3"));else if(x.type.is_integer(X)&&x.type.is_integer(Z)&&Z.value!==0)w.throw_error(x.error.type("atom",y.args[1],"functor/3"));else if(x.type.is_variable(J)){if(y.args[2].value>=0){for(var ie=[],Pe=0;Pe0&&R<=y.args[1].args.length){var J=new H("=",[y.args[1].args[R-1],y.args[2]]);w.prepend([new xe(S.goal.replace(J),S.substitution,S)])}}},"=../2":function(w,S,y){var R;if(x.type.is_variable(y.args[0])&&(x.type.is_variable(y.args[1])||x.type.is_non_empty_list(y.args[1])&&x.type.is_variable(y.args[1].args[0])))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_fully_list(y.args[1]))w.throw_error(x.error.type("list",y.args[1],y.indicator));else if(x.type.is_variable(y.args[0])){if(!x.type.is_variable(y.args[1])){var X=[];for(R=y.args[1].args[1];R.indicator==="./2";)X.push(R.args[0]),R=R.args[1];x.type.is_variable(y.args[0])&&x.type.is_variable(R)?w.throw_error(x.error.instantiation(y.indicator)):X.length===0&&x.type.is_compound(y.args[1].args[0])?w.throw_error(x.error.type("atomic",y.args[1].args[0],y.indicator)):X.length>0&&(x.type.is_compound(y.args[1].args[0])||x.type.is_number(y.args[1].args[0]))?w.throw_error(x.error.type("atom",y.args[1].args[0],y.indicator)):X.length===0?w.prepend([new xe(S.goal.replace(new H("=",[y.args[1].args[0],y.args[0]],S)),S.substitution,S)]):w.prepend([new xe(S.goal.replace(new H("=",[new H(y.args[1].args[0].id,X),y.args[0]])),S.substitution,S)])}}else{if(x.type.is_atomic(y.args[0]))R=new H(".",[y.args[0],new H("[]")]);else{R=new H("[]");for(var J=y.args[0].args.length-1;J>=0;J--)R=new H(".",[y.args[0].args[J],R]);R=new H(".",[new H(y.args[0].id),R])}w.prepend([new xe(S.goal.replace(new H("=",[R,y.args[1]])),S.substitution,S)])}},"copy_term/2":function(w,S,y){var R=y.args[0].rename(w);w.prepend([new xe(S.goal.replace(new H("=",[R,y.args[1]])),S.substitution,S.parent)])},"term_variables/2":function(w,S,y){var R=y.args[0],J=y.args[1];if(!x.type.is_fully_list(J))w.throw_error(x.error.type("list",J,y.indicator));else{var X=g(o(De(R.variables()),function(Z){return new we(Z)}));w.prepend([new xe(S.goal.replace(new H("=",[J,X])),S.substitution,S)])}},"clause/2":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_callable(y.args[1]))w.throw_error(x.error.type("callable",y.args[1],y.indicator));else if(w.session.rules[y.args[0].indicator]!==void 0)if(w.is_public_predicate(y.args[0].indicator)){var R=[];for(var J in w.session.rules[y.args[0].indicator])if(!!w.session.rules[y.args[0].indicator].hasOwnProperty(J)){var X=w.session.rules[y.args[0].indicator][J];w.session.renamed_variables={},X=X.rename(w),X.body===null&&(X.body=new H("true"));var Z=new H(",",[new H("=",[X.head,y.args[0]]),new H("=",[X.body,y.args[1]])]);R.push(new xe(S.goal.replace(Z),S.substitution,S))}w.prepend(R)}else w.throw_error(x.error.permission("access","private_procedure",y.args[0].indicator,y.indicator))},"current_predicate/1":function(w,S,y){var R=y.args[0];if(!x.type.is_variable(R)&&(!x.type.is_compound(R)||R.indicator!=="//2"))w.throw_error(x.error.type("predicate_indicator",R,y.indicator));else if(!x.type.is_variable(R)&&!x.type.is_variable(R.args[0])&&!x.type.is_atom(R.args[0]))w.throw_error(x.error.type("atom",R.args[0],y.indicator));else if(!x.type.is_variable(R)&&!x.type.is_variable(R.args[1])&&!x.type.is_integer(R.args[1]))w.throw_error(x.error.type("integer",R.args[1],y.indicator));else{var J=[];for(var X in w.session.rules)if(!!w.session.rules.hasOwnProperty(X)){var Z=X.lastIndexOf("/"),ie=X.substr(0,Z),Pe=parseInt(X.substr(Z+1,X.length-(Z+1))),Le=new H("/",[new H(ie),new be(Pe,!1)]),ot=new H("=",[Le,R]);J.push(new xe(S.goal.replace(ot),S.substitution,S))}w.prepend(J)}},"asserta/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var R,J;y.args[0].indicator===":-/2"?(R=y.args[0].args[0],J=Fe(y.args[0].args[1])):(R=y.args[0],J=null),x.type.is_callable(R)?J!==null&&!x.type.is_callable(J)?w.throw_error(x.error.type("callable",J,y.indicator)):w.is_public_predicate(R.indicator)?(w.session.rules[R.indicator]===void 0&&(w.session.rules[R.indicator]=[]),w.session.public_predicates[R.indicator]=!0,w.session.rules[R.indicator]=[new He(R,J,!0)].concat(w.session.rules[R.indicator]),w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",R.indicator,y.indicator)):w.throw_error(x.error.type("callable",R,y.indicator))}},"assertz/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var R,J;y.args[0].indicator===":-/2"?(R=y.args[0].args[0],J=Fe(y.args[0].args[1])):(R=y.args[0],J=null),x.type.is_callable(R)?J!==null&&!x.type.is_callable(J)?w.throw_error(x.error.type("callable",J,y.indicator)):w.is_public_predicate(R.indicator)?(w.session.rules[R.indicator]===void 0&&(w.session.rules[R.indicator]=[]),w.session.public_predicates[R.indicator]=!0,w.session.rules[R.indicator].push(new He(R,J,!0)),w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",R.indicator,y.indicator)):w.throw_error(x.error.type("callable",R,y.indicator))}},"retract/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var R,J;if(y.args[0].indicator===":-/2"?(R=y.args[0].args[0],J=y.args[0].args[1]):(R=y.args[0],J=new H("true")),typeof S.retract>"u")if(w.is_public_predicate(R.indicator)){if(w.session.rules[R.indicator]!==void 0){for(var X=[],Z=0;Zw.get_flag("max_arity").value)w.throw_error(x.error.representation("max_arity",y.indicator));else{var R=y.args[0].args[0].id+"/"+y.args[0].args[1].value;w.is_public_predicate(R)?(delete w.session.rules[R],w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",R,y.indicator))}},"atom_length/2":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],y.indicator));else if(x.type.is_integer(y.args[1])&&y.args[1].value<0)w.throw_error(x.error.domain("not_less_than_zero",y.args[1],y.indicator));else{var R=new be(y.args[0].id.length,!1);w.prepend([new xe(S.goal.replace(new H("=",[R,y.args[1]])),S.substitution,S)])}},"atom_concat/3":function(w,S,y){var R,J,X=y.args[0],Z=y.args[1],ie=y.args[2];if(x.type.is_variable(ie)&&(x.type.is_variable(X)||x.type.is_variable(Z)))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_atom(X))w.throw_error(x.error.type("atom",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_atom(Z))w.throw_error(x.error.type("atom",Z,y.indicator));else if(!x.type.is_variable(ie)&&!x.type.is_atom(ie))w.throw_error(x.error.type("atom",ie,y.indicator));else{var Pe=x.type.is_variable(X),Le=x.type.is_variable(Z);if(!Pe&&!Le)J=new H("=",[ie,new H(X.id+Z.id)]),w.prepend([new xe(S.goal.replace(J),S.substitution,S)]);else if(Pe&&!Le)R=ie.id.substr(0,ie.id.length-Z.id.length),R+Z.id===ie.id&&(J=new H("=",[X,new H(R)]),w.prepend([new xe(S.goal.replace(J),S.substitution,S)]));else if(Le&&!Pe)R=ie.id.substr(X.id.length),X.id+R===ie.id&&(J=new H("=",[Z,new H(R)]),w.prepend([new xe(S.goal.replace(J),S.substitution,S)]));else{for(var ot=[],dt=0;dt<=ie.id.length;dt++){var jt=new H(ie.id.substr(0,dt)),$t=new H(ie.id.substr(dt));J=new H(",",[new H("=",[jt,X]),new H("=",[$t,Z])]),ot.push(new xe(S.goal.replace(J),S.substitution,S))}w.prepend(ot)}}},"sub_atom/5":function(w,S,y){var R,J=y.args[0],X=y.args[1],Z=y.args[2],ie=y.args[3],Pe=y.args[4];if(x.type.is_variable(J))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_integer(X))w.throw_error(x.error.type("integer",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",Z,y.indicator));else if(!x.type.is_variable(ie)&&!x.type.is_integer(ie))w.throw_error(x.error.type("integer",ie,y.indicator));else if(x.type.is_integer(X)&&X.value<0)w.throw_error(x.error.domain("not_less_than_zero",X,y.indicator));else if(x.type.is_integer(Z)&&Z.value<0)w.throw_error(x.error.domain("not_less_than_zero",Z,y.indicator));else if(x.type.is_integer(ie)&&ie.value<0)w.throw_error(x.error.domain("not_less_than_zero",ie,y.indicator));else{var Le=[],ot=[],dt=[];if(x.type.is_variable(X))for(R=0;R<=J.id.length;R++)Le.push(R);else Le.push(X.value);if(x.type.is_variable(Z))for(R=0;R<=J.id.length;R++)ot.push(R);else ot.push(Z.value);if(x.type.is_variable(ie))for(R=0;R<=J.id.length;R++)dt.push(R);else dt.push(ie.value);var jt=[];for(var $t in Le)if(!!Le.hasOwnProperty($t)){R=Le[$t];for(var xt in ot)if(!!ot.hasOwnProperty(xt)){var an=ot[xt],kr=J.id.length-R-an;if(e(dt,kr)!==-1&&R+an+kr===J.id.length){var mr=J.id.substr(R,an);if(J.id===J.id.substr(0,R)+mr+J.id.substr(R+an,kr)){var xr=new H("=",[new H(mr),Pe]),Wr=new H("=",[X,new be(R)]),Kn=new H("=",[Z,new be(an)]),Ns=new H("=",[ie,new be(kr)]),Ti=new H(",",[new H(",",[new H(",",[Wr,Kn]),Ns]),xr]);jt.push(new xe(S.goal.replace(Ti),S.substitution,S))}}}}w.prepend(jt)}},"atom_chars/2":function(w,S,y){var R=y.args[0],J=y.args[1];if(x.type.is_variable(R)&&x.type.is_variable(J))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(R)&&!x.type.is_atom(R))w.throw_error(x.error.type("atom",R,y.indicator));else if(x.type.is_variable(R)){for(var ie=J,Pe=x.type.is_variable(R),Le="";ie.indicator==="./2";){if(x.type.is_character(ie.args[0]))Le+=ie.args[0].id;else if(x.type.is_variable(ie.args[0])&&Pe){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}x.type.is_variable(ie)&&Pe?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)?w.throw_error(x.error.type("list",J,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[new H(Le),R])),S.substitution,S)])}else{for(var X=new H("[]"),Z=R.id.length-1;Z>=0;Z--)X=new H(".",[new H(R.id.charAt(Z)),X]);w.prepend([new xe(S.goal.replace(new H("=",[J,X])),S.substitution,S)])}},"atom_codes/2":function(w,S,y){var R=y.args[0],J=y.args[1];if(x.type.is_variable(R)&&x.type.is_variable(J))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(R)&&!x.type.is_atom(R))w.throw_error(x.error.type("atom",R,y.indicator));else if(x.type.is_variable(R)){for(var ie=J,Pe=x.type.is_variable(R),Le="";ie.indicator==="./2";){if(x.type.is_character_code(ie.args[0]))Le+=u(ie.args[0].value);else if(x.type.is_variable(ie.args[0])&&Pe){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.representation("character_code",y.indicator));return}ie=ie.args[1]}x.type.is_variable(ie)&&Pe?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)?w.throw_error(x.error.type("list",J,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[new H(Le),R])),S.substitution,S)])}else{for(var X=new H("[]"),Z=R.id.length-1;Z>=0;Z--)X=new H(".",[new be(n(R.id,Z),!1),X]);w.prepend([new xe(S.goal.replace(new H("=",[J,X])),S.substitution,S)])}},"char_code/2":function(w,S,y){var R=y.args[0],J=y.args[1];if(x.type.is_variable(R)&&x.type.is_variable(J))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(R)&&!x.type.is_character(R))w.throw_error(x.error.type("character",R,y.indicator));else if(!x.type.is_variable(J)&&!x.type.is_integer(J))w.throw_error(x.error.type("integer",J,y.indicator));else if(!x.type.is_variable(J)&&!x.type.is_character_code(J))w.throw_error(x.error.representation("character_code",y.indicator));else if(x.type.is_variable(J)){var X=new be(n(R.id,0),!1);w.prepend([new xe(S.goal.replace(new H("=",[X,J])),S.substitution,S)])}else{var Z=new H(u(J.value));w.prepend([new xe(S.goal.replace(new H("=",[Z,R])),S.substitution,S)])}},"number_chars/2":function(w,S,y){var R,J=y.args[0],X=y.args[1];if(x.type.is_variable(J)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(J)&&!x.type.is_number(J))w.throw_error(x.error.type("number",J,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=x.type.is_variable(J);if(!x.type.is_variable(X)){var ie=X,Pe=!0;for(R="";ie.indicator==="./2";){if(x.type.is_character(ie.args[0]))R+=ie.args[0].id;else if(x.type.is_variable(ie.args[0]))Pe=!1;else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Pe=Pe&&x.type.is_empty_list(ie),!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)){w.throw_error(x.error.type("list",X,y.indicator));return}if(!Pe&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else if(Pe)if(x.type.is_variable(ie)&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else{var Le=w.parse(R),ot=Le.value;!x.type.is_number(ot)||Le.tokens[Le.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[J,ot])),S.substitution,S)]);return}}if(!Z){R=J.toString();for(var dt=new H("[]"),jt=R.length-1;jt>=0;jt--)dt=new H(".",[new H(R.charAt(jt)),dt]);w.prepend([new xe(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"number_codes/2":function(w,S,y){var R,J=y.args[0],X=y.args[1];if(x.type.is_variable(J)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(J)&&!x.type.is_number(J))w.throw_error(x.error.type("number",J,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=x.type.is_variable(J);if(!x.type.is_variable(X)){var ie=X,Pe=!0;for(R="";ie.indicator==="./2";){if(x.type.is_character_code(ie.args[0]))R+=u(ie.args[0].value);else if(x.type.is_variable(ie.args[0]))Pe=!1;else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character_code",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Pe=Pe&&x.type.is_empty_list(ie),!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)){w.throw_error(x.error.type("list",X,y.indicator));return}if(!Pe&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else if(Pe)if(x.type.is_variable(ie)&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else{var Le=w.parse(R),ot=Le.value;!x.type.is_number(ot)||Le.tokens[Le.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[J,ot])),S.substitution,S)]);return}}if(!Z){R=J.toString();for(var dt=new H("[]"),jt=R.length-1;jt>=0;jt--)dt=new H(".",[new be(n(R,jt),!1),dt]);w.prepend([new xe(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"upcase_atom/2":function(w,S,y){var R=y.args[0],J=y.args[1];x.type.is_variable(R)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(R)?!x.type.is_variable(J)&&!x.type.is_atom(J)?w.throw_error(x.error.type("atom",J,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[J,new H(R.id.toUpperCase(),[])])),S.substitution,S)]):w.throw_error(x.error.type("atom",R,y.indicator))},"downcase_atom/2":function(w,S,y){var R=y.args[0],J=y.args[1];x.type.is_variable(R)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(R)?!x.type.is_variable(J)&&!x.type.is_atom(J)?w.throw_error(x.error.type("atom",J,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[J,new H(R.id.toLowerCase(),[])])),S.substitution,S)]):w.throw_error(x.error.type("atom",R,y.indicator))},"atomic_list_concat/2":function(w,S,y){var R=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("atomic_list_concat",[R,new H("",[]),J])),S.substitution,S)])},"atomic_list_concat/3":function(w,S,y){var R=y.args[0],J=y.args[1],X=y.args[2];if(x.type.is_variable(J)||x.type.is_variable(R)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(R)&&!x.type.is_list(R))w.throw_error(x.error.type("list",R,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_atom(X))w.throw_error(x.error.type("atom",X,y.indicator));else if(x.type.is_variable(X)){for(var ie="",Pe=R;x.type.is_term(Pe)&&Pe.indicator==="./2";){if(!x.type.is_atom(Pe.args[0])&&!x.type.is_number(Pe.args[0])){w.throw_error(x.error.type("atomic",Pe.args[0],y.indicator));return}ie!==""&&(ie+=J.id),x.type.is_atom(Pe.args[0])?ie+=Pe.args[0].id:ie+=""+Pe.args[0].value,Pe=Pe.args[1]}ie=new H(ie,[]),x.type.is_variable(Pe)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_term(Pe)||Pe.indicator!=="[]/0"?w.throw_error(x.error.type("list",R,y.indicator)):w.prepend([new xe(S.goal.replace(new H("=",[ie,X])),S.substitution,S)])}else{var Z=g(o(X.id.split(J.id),function(Le){return new H(Le,[])}));w.prepend([new xe(S.goal.replace(new H("=",[Z,R])),S.substitution,S)])}},"@=/2":function(w,S,y){x.compare(y.args[0],y.args[1])>0&&w.success(S)},"@>=/2":function(w,S,y){x.compare(y.args[0],y.args[1])>=0&&w.success(S)},"compare/3":function(w,S,y){var R=y.args[0],J=y.args[1],X=y.args[2];if(!x.type.is_variable(R)&&!x.type.is_atom(R))w.throw_error(x.error.type("atom",R,y.indicator));else if(x.type.is_atom(R)&&["<",">","="].indexOf(R.id)===-1)w.throw_error(x.type.domain("order",R,y.indicator));else{var Z=x.compare(J,X);Z=Z===0?"=":Z===-1?"<":">",w.prepend([new xe(S.goal.replace(new H("=",[R,new H(Z,[])])),S.substitution,S)])}},"is/2":function(w,S,y){var R=y.args[1].interpret(w);x.type.is_number(R)?w.prepend([new xe(S.goal.replace(new H("=",[y.args[0],R],w.level)),S.substitution,S)]):w.throw_error(R)},"between/3":function(w,S,y){var R=y.args[0],J=y.args[1],X=y.args[2];if(x.type.is_variable(R)||x.type.is_variable(J))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_integer(R))w.throw_error(x.error.type("integer",R,y.indicator));else if(!x.type.is_integer(J))w.throw_error(x.error.type("integer",J,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_integer(X))w.throw_error(x.error.type("integer",X,y.indicator));else if(x.type.is_variable(X)){var Z=[new xe(S.goal.replace(new H("=",[X,R])),S.substitution,S)];R.value=X.value&&w.success(S)},"succ/2":function(w,S,y){var R=y.args[0],J=y.args[1];x.type.is_variable(R)&&x.type.is_variable(J)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_variable(R)&&!x.type.is_integer(R)?w.throw_error(x.error.type("integer",R,y.indicator)):!x.type.is_variable(J)&&!x.type.is_integer(J)?w.throw_error(x.error.type("integer",J,y.indicator)):!x.type.is_variable(R)&&R.value<0?w.throw_error(x.error.domain("not_less_than_zero",R,y.indicator)):!x.type.is_variable(J)&&J.value<0?w.throw_error(x.error.domain("not_less_than_zero",J,y.indicator)):(x.type.is_variable(J)||J.value>0)&&(x.type.is_variable(R)?w.prepend([new xe(S.goal.replace(new H("=",[R,new be(J.value-1,!1)])),S.substitution,S)]):w.prepend([new xe(S.goal.replace(new H("=",[J,new be(R.value+1,!1)])),S.substitution,S)]))},"=:=/2":function(w,S,y){var R=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(R)?w.throw_error(R):R===0&&w.success(S)},"=\\=/2":function(w,S,y){var R=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(R)?w.throw_error(R):R!==0&&w.success(S)},"/2":function(w,S,y){var R=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(R)?w.throw_error(R):R>0&&w.success(S)},">=/2":function(w,S,y){var R=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(R)?w.throw_error(R):R>=0&&w.success(S)},"var/1":function(w,S,y){x.type.is_variable(y.args[0])&&w.success(S)},"atom/1":function(w,S,y){x.type.is_atom(y.args[0])&&w.success(S)},"atomic/1":function(w,S,y){x.type.is_atomic(y.args[0])&&w.success(S)},"compound/1":function(w,S,y){x.type.is_compound(y.args[0])&&w.success(S)},"integer/1":function(w,S,y){x.type.is_integer(y.args[0])&&w.success(S)},"float/1":function(w,S,y){x.type.is_float(y.args[0])&&w.success(S)},"number/1":function(w,S,y){x.type.is_number(y.args[0])&&w.success(S)},"nonvar/1":function(w,S,y){x.type.is_variable(y.args[0])||w.success(S)},"ground/1":function(w,S,y){y.variables().length===0&&w.success(S)},"acyclic_term/1":function(w,S,y){for(var R=S.substitution.apply(S.substitution),J=y.args[0].variables(),X=0;X0?xt[xt.length-1]:null,xt!==null&&(jt=z(w,xt,0,w.__get_max_priority(),!1))}if(jt.type===p&&jt.len===xt.length-1&&an.value==="."){jt=jt.value.rename(w);var kr=new H("=",[J,jt]);if(ie.variables){var mr=g(o(De(jt.variables()),function(xr){return new we(xr)}));kr=new H(",",[kr,new H("=",[ie.variables,mr])])}if(ie.variable_names){var mr=g(o(De(jt.variables()),function(Wr){var Kn;for(Kn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Kn)&&w.session.renamed_variables[Kn]===Wr)break;return new H("=",[new H(Kn,[]),new we(Wr)])}));kr=new H(",",[kr,new H("=",[ie.variable_names,mr])])}if(ie.singletons){var mr=g(o(new He(jt,null).singleton_variables(),function(Wr){var Kn;for(Kn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Kn)&&w.session.renamed_variables[Kn]===Wr)break;return new H("=",[new H(Kn,[]),new we(Wr)])}));kr=new H(",",[kr,new H("=",[ie.singletons,mr])])}w.prepend([new xe(S.goal.replace(kr),S.substitution,S)])}else jt.type===p?w.throw_error(x.error.syntax(xt[jt.len],"unexpected token",!1)):w.throw_error(jt.value)}}},"write/1":function(w,S,y){var R=y.args[0];w.prepend([new xe(S.goal.replace(new H(",",[new H("current_output",[new we("S")]),new H("write",[new we("S"),R])])),S.substitution,S)])},"write/2":function(w,S,y){var R=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("write_term",[R,J,new H(".",[new H("quoted",[new H("false",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"writeq/1":function(w,S,y){var R=y.args[0];w.prepend([new xe(S.goal.replace(new H(",",[new H("current_output",[new we("S")]),new H("writeq",[new we("S"),R])])),S.substitution,S)])},"writeq/2":function(w,S,y){var R=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("write_term",[R,J,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"write_canonical/1":function(w,S,y){var R=y.args[0];w.prepend([new xe(S.goal.replace(new H(",",[new H("current_output",[new we("S")]),new H("write_canonical",[new we("S"),R])])),S.substitution,S)])},"write_canonical/2":function(w,S,y){var R=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H("write_term",[R,J,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("true")]),new H(".",[new H("numbervars",[new H("false")]),new H("[]",[])])])])])),S.substitution,S)])},"write_term/2":function(w,S,y){var R=y.args[0],J=y.args[1];w.prepend([new xe(S.goal.replace(new H(",",[new H("current_output",[new we("S")]),new H("write_term",[new we("S"),R,J])])),S.substitution,S)])},"write_term/3":function(w,S,y){var R=y.args[0],J=y.args[1],X=y.args[2],Z=x.type.is_stream(R)?R:w.get_stream_by_alias(R.id);if(x.type.is_variable(R)||x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else if(!x.type.is_stream(R)&&!x.type.is_atom(R))w.throw_error(x.error.domain("stream_or_alias",R,y.indicator));else if(!x.type.is_stream(Z)||Z.stream===null)w.throw_error(x.error.existence("stream",R,y.indicator));else if(Z.input)w.throw_error(x.error.permission("output","stream",R,y.indicator));else if(Z.type==="binary")w.throw_error(x.error.permission("output","binary_stream",R,y.indicator));else if(Z.position==="past_end_of_stream"&&Z.eof_action==="error")w.throw_error(x.error.permission("output","past_end_of_stream",R,y.indicator));else{for(var ie={},Pe=X,Le;x.type.is_term(Pe)&&Pe.indicator==="./2";){if(Le=Pe.args[0],x.type.is_variable(Le)){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_write_option(Le)){w.throw_error(x.error.domain("write_option",Le,y.indicator));return}ie[Le.id]=Le.args[0].id==="true",Pe=Pe.args[1]}if(Pe.indicator!=="[]/0"){x.type.is_variable(Pe)?w.throw_error(x.error.instantiation(y.indicator)):w.throw_error(x.error.type("list",X,y.indicator));return}else{ie.session=w.session;var ot=J.toString(ie);Z.stream.put(ot,Z.position),typeof Z.position=="number"&&(Z.position+=ot.length),w.success(S)}}},"halt/0":function(w,S,y){w.points=[]},"halt/1":function(w,S,y){var R=y.args[0];x.type.is_variable(R)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_integer(R)?w.points=[]:w.throw_error(x.error.type("integer",R,y.indicator))},"current_prolog_flag/2":function(w,S,y){var R=y.args[0],J=y.args[1];if(!x.type.is_variable(R)&&!x.type.is_atom(R))w.throw_error(x.error.type("atom",R,y.indicator));else if(!x.type.is_variable(R)&&!x.type.is_flag(R))w.throw_error(x.error.domain("prolog_flag",R,y.indicator));else{var X=[];for(var Z in x.flag)if(!!x.flag.hasOwnProperty(Z)){var ie=new H(",",[new H("=",[new H(Z),R]),new H("=",[w.get_flag(Z),J])]);X.push(new xe(S.goal.replace(ie),S.substitution,S))}w.prepend(X)}},"set_prolog_flag/2":function(w,S,y){var R=y.args[0],J=y.args[1];x.type.is_variable(R)||x.type.is_variable(J)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(R)?x.type.is_flag(R)?x.type.is_value_flag(R,J)?x.type.is_modifiable_flag(R)?(w.session.flag[R.id]=J,w.success(S)):w.throw_error(x.error.permission("modify","flag",R)):w.throw_error(x.error.domain("flag_value",new H("+",[R,J]),y.indicator)):w.throw_error(x.error.domain("prolog_flag",R,y.indicator)):w.throw_error(x.error.type("atom",R,y.indicator))}},flag:{bounded:{allowed:[new H("true"),new H("false")],value:new H("true"),changeable:!1},max_integer:{allowed:[new be(Number.MAX_SAFE_INTEGER)],value:new be(Number.MAX_SAFE_INTEGER),changeable:!1},min_integer:{allowed:[new be(Number.MIN_SAFE_INTEGER)],value:new be(Number.MIN_SAFE_INTEGER),changeable:!1},integer_rounding_function:{allowed:[new H("down"),new H("toward_zero")],value:new H("toward_zero"),changeable:!1},char_conversion:{allowed:[new H("on"),new H("off")],value:new H("on"),changeable:!0},debug:{allowed:[new H("on"),new H("off")],value:new H("off"),changeable:!0},max_arity:{allowed:[new H("unbounded")],value:new H("unbounded"),changeable:!1},unknown:{allowed:[new H("error"),new H("fail"),new H("warning")],value:new H("error"),changeable:!0},double_quotes:{allowed:[new H("chars"),new H("codes"),new H("atom")],value:new H("codes"),changeable:!0},occurs_check:{allowed:[new H("false"),new H("true")],value:new H("false"),changeable:!0},dialect:{allowed:[new H("tau")],value:new H("tau"),changeable:!1},version_data:{allowed:[new H("tau",[new be(t.major,!1),new be(t.minor,!1),new be(t.patch,!1),new H(t.status)])],value:new H("tau",[new be(t.major,!1),new be(t.minor,!1),new be(t.patch,!1),new H(t.status)]),changeable:!1},nodejs:{allowed:[new H("yes"),new H("no")],value:new H(typeof hl<"u"&&hl.exports?"yes":"no"),changeable:!1}},unify:function(w,S,y){y=y===void 0?!1:y;for(var R=[{left:w,right:S}],J={};R.length!==0;){var X=R.pop();if(w=X.left,S=X.right,x.type.is_term(w)&&x.type.is_term(S)){if(w.indicator!==S.indicator)return null;for(var Z=0;ZJ.value?1:0:J}else return R},operate:function(w,S){if(x.type.is_operator(S)){for(var y=x.type.is_operator(S),R=[],J,X=!1,Z=0;Zw.get_flag("max_integer").value||J0?w.start+w.matches[0].length:w.start,J=y?new H("token_not_found"):new H("found",[new H(w.value.toString())]),X=new H(".",[new H("line",[new be(w.line+1)]),new H(".",[new H("column",[new be(R+1)]),new H(".",[J,new H("[]",[])])])]);return new H("error",[new H("syntax_error",[new H(S)]),X])},syntax_by_predicate:function(w,S){return new H("error",[new H("syntax_error",[new H(w)]),ee(S)])}},warning:{singleton:function(w,S,y){for(var R=new H("[]"),J=w.length-1;J>=0;J--)R=new H(".",[new we(w[J]),R]);return new H("warning",[new H("singleton_variables",[R,ee(S)]),new H(".",[new H("line",[new be(y,!1)]),new H("[]")])])},failed_goal:function(w,S){return new H("warning",[new H("failed_goal",[w]),new H(".",[new H("line",[new be(S,!1)]),new H("[]")])])}},format_variable:function(w){return"_"+w},format_answer:function(w,S,R){S instanceof Re&&(S=S.thread);var R=R||{};if(R.session=S?S.session:void 0,x.type.is_error(w))return"uncaught exception: "+w.args[0].toString();if(w===!1)return"false.";if(w===null)return"limit exceeded ;";var J=0,X="";if(x.type.is_substitution(w)){var Z=w.domain(!0);w=w.filter(function(Le,ot){return!x.type.is_variable(ot)||Z.indexOf(ot.id)!==-1&&Le!==ot.id})}for(var ie in w.links)!w.links.hasOwnProperty(ie)||(J++,X!==""&&(X+=", "),X+=ie.toString(R)+" = "+w.links[ie].toString(R));var Pe=typeof S>"u"||S.points.length>0?" ;":".";return J===0?"true"+Pe:X+Pe},flatten_error:function(w){if(!x.type.is_error(w))return null;w=w.args[0];var S={};return S.type=w.args[0].id,S.thrown=S.type==="syntax_error"?null:w.args[1].id,S.expected=null,S.found=null,S.representation=null,S.existence=null,S.existence_type=null,S.line=null,S.column=null,S.permission_operation=null,S.permission_type=null,S.evaluation_type=null,S.type==="type_error"||S.type==="domain_error"?(S.expected=w.args[0].args[0].id,S.found=w.args[0].args[1].toString()):S.type==="syntax_error"?w.args[1].indicator==="./2"?(S.expected=w.args[0].args[0].id,S.found=w.args[1].args[1].args[1].args[0],S.found=S.found.id==="token_not_found"?S.found.id:S.found.args[0].id,S.line=w.args[1].args[0].args[0].value,S.column=w.args[1].args[1].args[0].args[0].value):S.thrown=w.args[1].id:S.type==="permission_error"?(S.found=w.args[0].args[2].toString(),S.permission_operation=w.args[0].args[0].id,S.permission_type=w.args[0].args[1].id):S.type==="evaluation_error"?S.evaluation_type=w.args[0].args[0].id:S.type==="representation_error"?S.representation=w.args[0].args[0].id:S.type==="existence_error"&&(S.existence=w.args[0].args[1].toString(),S.existence_type=w.args[0].args[0].id),S},create:function(w){return new x.type.Session(w)}};typeof hl<"u"?hl.exports=x:window.pl=x})()});function ome(t,e,r){t.prepend(r.map(o=>new Ta.default.type.State(e.goal.replace(o),e.substitution,e)))}function yH(t){let e=lme.get(t.session);if(e==null)throw new Error("Assertion failed: A project should have been registered for the active session");return e}function cme(t,e){lme.set(t,e),t.consult(`:- use_module(library(${Jgt.id})).`)}var EH,Ta,ame,c0,Vgt,zgt,lme,Jgt,ume=yt(()=>{Ye();EH=$e(h2()),Ta=$e(mH()),ame=$e(Be("vm")),{is_atom:c0,is_variable:Vgt,is_instantiated_list:zgt}=Ta.default.type;lme=new WeakMap;Jgt=new Ta.default.type.Module("constraints",{["project_workspaces_by_descriptor/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!c0(o)||!c0(a)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let u=G.parseIdent(o.id),A=G.makeDescriptor(u,a.id),h=yH(t).tryWorkspaceByDescriptor(A);Vgt(n)&&h!==null&&ome(t,e,[new Ta.default.type.Term("=",[n,new Ta.default.type.Term(String(h.relativeCwd))])]),c0(n)&&h!==null&&h.relativeCwd===n.id&&t.success(e)},["workspace_field/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!c0(o)||!c0(a)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let A=yH(t).tryWorkspaceByCwd(o.id);if(A==null)return;let p=(0,EH.default)(A.manifest.raw,a.id);typeof p>"u"||ome(t,e,[new Ta.default.type.Term("=",[n,new Ta.default.type.Term(typeof p=="object"?JSON.stringify(p):p)])])},["workspace_field_test/3"]:(t,e,r)=>{let[o,a,n]=r.args;t.prepend([new Ta.default.type.State(e.goal.replace(new Ta.default.type.Term("workspace_field_test",[o,a,n,new Ta.default.type.Term("[]",[])])),e.substitution,e)])},["workspace_field_test/4"]:(t,e,r)=>{let[o,a,n,u]=r.args;if(!c0(o)||!c0(a)||!c0(n)||!zgt(u)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let p=yH(t).tryWorkspaceByCwd(o.id);if(p==null)return;let h=(0,EH.default)(p.manifest.raw,a.id);if(typeof h>"u")return;let C={$$:h};for(let[v,b]of u.toJavaScript().entries())C[`$${v}`]=b;ame.default.runInNewContext(n.id,C)&&t.success(e)}},["project_workspaces_by_descriptor/3","workspace_field/3","workspace_field_test/3","workspace_field_test/4"])});var P2={};Vt(P2,{Constraints:()=>D2,DependencyType:()=>hme});function to(t){if(t instanceof vC.default.type.Num)return t.value;if(t instanceof vC.default.type.Term)switch(t.indicator){case"throw/1":return to(t.args[0]);case"error/1":return to(t.args[0]);case"error/2":if(t.args[0]instanceof vC.default.type.Term&&t.args[0].indicator==="syntax_error/1")return Object.assign(to(t.args[0]),...to(t.args[1]));{let e=to(t.args[0]);return e.message+=` (in ${to(t.args[1])})`,e}case"syntax_error/1":return new Jt(43,`Syntax error: ${to(t.args[0])}`);case"existence_error/2":return new Jt(44,`Existence error: ${to(t.args[0])} ${to(t.args[1])} not found`);case"instantiation_error/0":return new Jt(75,"Instantiation error: an argument is variable when an instantiated argument was expected");case"line/1":return{line:to(t.args[0])};case"column/1":return{column:to(t.args[0])};case"found/1":return{found:to(t.args[0])};case"./2":return[to(t.args[0])].concat(to(t.args[1]));case"//2":return`${to(t.args[0])}/${to(t.args[1])}`;default:return t.id}throw`couldn't pretty print because of unsupported node ${t}`}function fme(t){let e;try{e=to(t)}catch(r){throw typeof r=="string"?new Jt(42,`Unknown error: ${t} (note: ${r})`):r}return typeof e.line<"u"&&typeof e.column<"u"&&(e.message+=` at line ${e.line}, column ${e.column}`),e}function $d(t){return t.id==="null"?null:`${t.toJavaScript()}`}function Xgt(t){if(t.id==="null")return null;{let e=t.toJavaScript();if(typeof e!="string")return JSON.stringify(e);try{return JSON.stringify(JSON.parse(e))}catch{return JSON.stringify(e)}}}function u0(t){return typeof t=="string"?`'${t}'`:"[]"}var pme,vC,hme,Ame,CH,D2,S2=yt(()=>{Ye();Ye();Pt();pme=$e(Gde()),vC=$e(mH());I2();ume();(0,pme.default)(vC.default);hme=(o=>(o.Dependencies="dependencies",o.DevDependencies="devDependencies",o.PeerDependencies="peerDependencies",o))(hme||{}),Ame=["dependencies","devDependencies","peerDependencies"];CH=class{constructor(e,r){let o=1e3*e.workspaces.length;this.session=vC.default.create(o),cme(this.session,e),this.session.consult(":- use_module(library(lists))."),this.session.consult(r)}fetchNextAnswer(){return new Promise(e=>{this.session.answer(r=>{e(r)})})}async*makeQuery(e){let r=this.session.query(e);if(r!==!0)throw fme(r);for(;;){let o=await this.fetchNextAnswer();if(o===null)throw new Jt(79,"Resolution limit exceeded");if(!o)break;if(o.id==="throw")throw fme(o);yield o}}};D2=class{constructor(e){this.source="";this.project=e;let r=e.configuration.get("constraintsPath");oe.existsSync(r)&&(this.source=oe.readFileSync(r,"utf8"))}static async find(e){return new D2(e)}getProjectDatabase(){let e="";for(let r of Ame)e+=`dependency_type(${r}). -`;for(let r of this.project.workspacesByCwd.values()){let o=r.relativeCwd;e+=`workspace(${u0(o)}). -`,e+=`workspace_ident(${u0(o)}, ${u0(G.stringifyIdent(r.anchoredLocator))}). -`,e+=`workspace_version(${u0(o)}, ${u0(r.manifest.version)}). -`;for(let a of Ame)for(let n of r.manifest[a].values())e+=`workspace_has_dependency(${u0(o)}, ${u0(G.stringifyIdent(n))}, ${u0(n.range)}, ${a}). -`}return e+=`workspace(_) :- false. -`,e+=`workspace_ident(_, _) :- false. -`,e+=`workspace_version(_, _) :- false. -`,e+=`workspace_has_dependency(_, _, _, _) :- false. -`,e}getDeclarations(){let e="";return e+=`gen_enforced_dependency(_, _, _, _) :- false. -`,e+=`gen_enforced_field(_, _, _) :- false. -`,e}get fullSource(){return`${this.getProjectDatabase()} -${this.source} -${this.getDeclarations()}`}createSession(){return new CH(this.project,this.fullSource)}async processClassic(){let e=this.createSession();return{enforcedDependencies:await this.genEnforcedDependencies(e),enforcedFields:await this.genEnforcedFields(e)}}async process(){let{enforcedDependencies:e,enforcedFields:r}=await this.processClassic(),o=new Map;for(let{workspace:a,dependencyIdent:n,dependencyRange:u,dependencyType:A}of e){let p=w2([A,G.stringifyIdent(n)]),h=_e.getMapWithDefault(o,a.cwd);_e.getMapWithDefault(h,p).set(u??void 0,new Set)}for(let{workspace:a,fieldPath:n,fieldValue:u}of r){let A=w2(n),p=_e.getMapWithDefault(o,a.cwd);_e.getMapWithDefault(p,A).set(JSON.parse(u)??void 0,new Set)}return{manifestUpdates:o,reportedErrors:new Map}}async genEnforcedDependencies(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), dependency_type(DependencyType), gen_enforced_dependency(WorkspaceCwd, DependencyIdent, DependencyRange, DependencyType).")){let a=V.resolve(this.project.cwd,$d(o.links.WorkspaceCwd)),n=$d(o.links.DependencyIdent),u=$d(o.links.DependencyRange),A=$d(o.links.DependencyType);if(a===null||n===null)throw new Error("Invalid rule");let p=this.project.getWorkspaceByCwd(a),h=G.parseIdent(n);r.push({workspace:p,dependencyIdent:h,dependencyRange:u,dependencyType:A})}return _e.sortMap(r,[({dependencyRange:o})=>o!==null?"0":"1",({workspace:o})=>G.stringifyIdent(o.anchoredLocator),({dependencyIdent:o})=>G.stringifyIdent(o)])}async genEnforcedFields(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), gen_enforced_field(WorkspaceCwd, FieldPath, FieldValue).")){let a=V.resolve(this.project.cwd,$d(o.links.WorkspaceCwd)),n=$d(o.links.FieldPath),u=Xgt(o.links.FieldValue);if(a===null||n===null)throw new Error("Invalid rule");let A=this.project.getWorkspaceByCwd(a);r.push({workspace:A,fieldPath:n,fieldValue:u})}return _e.sortMap(r,[({workspace:o})=>G.stringifyIdent(o.anchoredLocator),({fieldPath:o})=>o])}async*query(e){let r=this.createSession();for await(let o of r.makeQuery(e)){let a={};for(let[n,u]of Object.entries(o.links))n!=="_"&&(a[n]=$d(u));yield a}}}});var Ime=_(Ik=>{"use strict";Object.defineProperty(Ik,"__esModule",{value:!0});function q2(t){let e=[...t.caches],r=e.shift();return r===void 0?wme():{get(o,a,n={miss:()=>Promise.resolve()}){return r.get(o,a,n).catch(()=>q2({caches:e}).get(o,a,n))},set(o,a){return r.set(o,a).catch(()=>q2({caches:e}).set(o,a))},delete(o){return r.delete(o).catch(()=>q2({caches:e}).delete(o))},clear(){return r.clear().catch(()=>q2({caches:e}).clear())}}}function wme(){return{get(t,e,r={miss:()=>Promise.resolve()}){return e().then(a=>Promise.all([a,r.miss(a)])).then(([a])=>a)},set(t,e){return Promise.resolve(e)},delete(t){return Promise.resolve()},clear(){return Promise.resolve()}}}Ik.createFallbackableCache=q2;Ik.createNullCache=wme});var vme=_((xWt,Bme)=>{Bme.exports=Ime()});var Dme=_(TH=>{"use strict";Object.defineProperty(TH,"__esModule",{value:!0});function ddt(t={serializable:!0}){let e={};return{get(r,o,a={miss:()=>Promise.resolve()}){let n=JSON.stringify(r);if(n in e)return Promise.resolve(t.serializable?JSON.parse(e[n]):e[n]);let u=o(),A=a&&a.miss||(()=>Promise.resolve());return u.then(p=>A(p)).then(()=>u)},set(r,o){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete(r){return delete e[JSON.stringify(r)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}TH.createInMemoryCache=ddt});var Sme=_((kWt,Pme)=>{Pme.exports=Dme()});var bme=_(Zc=>{"use strict";Object.defineProperty(Zc,"__esModule",{value:!0});function mdt(t,e,r){let o={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t===LH.WithinHeaders?o:{}},queryParameters(){return t===LH.WithinQueryParameters?o:{}}}}function ydt(t){let e=0,r=()=>(e++,new Promise(o=>{setTimeout(()=>{o(t(r))},Math.min(100*e,1e3))}));return t(r)}function xme(t,e=(r,o)=>Promise.resolve()){return Object.assign(t,{wait(r){return xme(t.then(o=>Promise.all([e(o,r),o])).then(o=>o[1]))}})}function Edt(t){let e=t.length-1;for(e;e>0;e--){let r=Math.floor(Math.random()*(e+1)),o=t[e];t[e]=t[r],t[r]=o}return t}function Cdt(t,e){return e&&Object.keys(e).forEach(r=>{t[r]=e[r](t)}),t}function wdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}var Idt="4.14.2",Bdt=t=>()=>t.transporter.requester.destroy(),LH={WithinQueryParameters:0,WithinHeaders:1};Zc.AuthMode=LH;Zc.addMethods=Cdt;Zc.createAuth=mdt;Zc.createRetryablePromise=ydt;Zc.createWaitablePromise=xme;Zc.destroy=Bdt;Zc.encode=wdt;Zc.shuffle=Edt;Zc.version=Idt});var G2=_((FWt,kme)=>{kme.exports=bme()});var Qme=_(NH=>{"use strict";Object.defineProperty(NH,"__esModule",{value:!0});var vdt={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};NH.MethodEnum=vdt});var Y2=_((TWt,Fme)=>{Fme.exports=Qme()});var Kme=_(Fi=>{"use strict";Object.defineProperty(Fi,"__esModule",{value:!0});var Tme=Y2();function OH(t,e){let r=t||{},o=r.data||{};return Object.keys(r).forEach(a=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(a)===-1&&(o[a]=r[a])}),{data:Object.entries(o).length>0?o:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var W2={Read:1,Write:2,Any:3},xC={Up:1,Down:2,Timeouted:3},Lme=2*60*1e3;function UH(t,e=xC.Up){return{...t,status:e,lastUpdate:Date.now()}}function Nme(t){return t.status===xC.Up||Date.now()-t.lastUpdate>Lme}function Ome(t){return t.status===xC.Timeouted&&Date.now()-t.lastUpdate<=Lme}function _H(t){return typeof t=="string"?{protocol:"https",url:t,accept:W2.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||W2.Any}}function Ddt(t,e){return Promise.all(e.map(r=>t.get(r,()=>Promise.resolve(UH(r))))).then(r=>{let o=r.filter(A=>Nme(A)),a=r.filter(A=>Ome(A)),n=[...o,...a],u=n.length>0?n.map(A=>_H(A)):e;return{getTimeout(A,p){return(a.length===0&&A===0?1:a.length+3+A)*p},statelessHosts:u}})}var Pdt=({isTimedOut:t,status:e})=>!t&&~~e===0,Sdt=t=>{let e=t.status;return t.isTimedOut||Pdt(t)||~~(e/100)!==2&&~~(e/100)!==4},xdt=({status:t})=>~~(t/100)===2,bdt=(t,e)=>Sdt(t)?e.onRetry(t):xdt(t)?e.onSuccess(t):e.onFail(t);function Rme(t,e,r,o){let a=[],n=jme(r,o),u=qme(t,o),A=r.method,p=r.method!==Tme.MethodEnum.Get?{}:{...r.data,...o.data},h={"x-algolia-agent":t.userAgent.value,...t.queryParameters,...p,...o.queryParameters},C=0,I=(v,b)=>{let E=v.pop();if(E===void 0)throw Wme(MH(a));let F={data:n,headers:u,method:A,url:_me(E,r.path,h),connectTimeout:b(C,t.timeouts.connect),responseTimeout:b(C,o.timeout)},N=z=>{let te={request:F,response:z,host:E,triesLeft:v.length};return a.push(te),te},U={onSuccess:z=>Mme(z),onRetry(z){let te=N(z);return z.isTimedOut&&C++,Promise.all([t.logger.info("Retryable failure",HH(te)),t.hostsCache.set(E,UH(E,z.isTimedOut?xC.Timeouted:xC.Down))]).then(()=>I(v,b))},onFail(z){throw N(z),Ume(z,MH(a))}};return t.requester.send(F).then(z=>bdt(z,U))};return Ddt(t.hostsCache,e).then(v=>I([...v.statelessHosts].reverse(),v.getTimeout))}function kdt(t){let{hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,hosts:p,queryParameters:h,headers:C}=t,I={hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,headers:C,queryParameters:h,hosts:p.map(v=>_H(v)),read(v,b){let E=OH(b,I.timeouts.read),F=()=>Rme(I,I.hosts.filter(z=>(z.accept&W2.Read)!==0),v,E);if((E.cacheable!==void 0?E.cacheable:v.cacheable)!==!0)return F();let U={request:v,mappedRequestOptions:E,transporter:{queryParameters:I.queryParameters,headers:I.headers}};return I.responsesCache.get(U,()=>I.requestsCache.get(U,()=>I.requestsCache.set(U,F()).then(z=>Promise.all([I.requestsCache.delete(U),z]),z=>Promise.all([I.requestsCache.delete(U),Promise.reject(z)])).then(([z,te])=>te)),{miss:z=>I.responsesCache.set(U,z)})},write(v,b){return Rme(I,I.hosts.filter(E=>(E.accept&W2.Write)!==0),v,OH(b,I.timeouts.write))}};return I}function Qdt(t){let e={value:`Algolia for JavaScript (${t})`,add(r){let o=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return e.value.indexOf(o)===-1&&(e.value=`${e.value}${o}`),e}};return e}function Mme(t){try{return JSON.parse(t.content)}catch(e){throw Yme(e.message,t)}}function Ume({content:t,status:e},r){let o=t;try{o=JSON.parse(t).message}catch{}return Gme(o,e,r)}function Fdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}function _me(t,e,r){let o=Hme(r),a=`${t.protocol}://${t.url}/${e.charAt(0)==="/"?e.substr(1):e}`;return o.length&&(a+=`?${o}`),a}function Hme(t){let e=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(t).map(r=>Fdt("%s=%s",r,e(t[r])?JSON.stringify(t[r]):t[r])).join("&")}function jme(t,e){if(t.method===Tme.MethodEnum.Get||t.data===void 0&&e.data===void 0)return;let r=Array.isArray(t.data)?t.data:{...t.data,...e.data};return JSON.stringify(r)}function qme(t,e){let r={...t.headers,...e.headers},o={};return Object.keys(r).forEach(a=>{let n=r[a];o[a.toLowerCase()]=n}),o}function MH(t){return t.map(e=>HH(e))}function HH(t){let e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...t,request:{...t.request,headers:{...t.request.headers,...e}}}}function Gme(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}function Yme(t,e){return{name:"DeserializationError",message:t,response:e}}function Wme(t){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:t}}Fi.CallEnum=W2;Fi.HostStatusEnum=xC;Fi.createApiError=Gme;Fi.createDeserializationError=Yme;Fi.createMappedRequestOptions=OH;Fi.createRetryError=Wme;Fi.createStatefulHost=UH;Fi.createStatelessHost=_H;Fi.createTransporter=kdt;Fi.createUserAgent=Qdt;Fi.deserializeFailure=Ume;Fi.deserializeSuccess=Mme;Fi.isStatefulHostTimeouted=Ome;Fi.isStatefulHostUp=Nme;Fi.serializeData=jme;Fi.serializeHeaders=qme;Fi.serializeQueryParameters=Hme;Fi.serializeUrl=_me;Fi.stackFrameWithoutCredentials=HH;Fi.stackTraceWithoutCredentials=MH});var K2=_((NWt,Vme)=>{Vme.exports=Kme()});var zme=_(d0=>{"use strict";Object.defineProperty(d0,"__esModule",{value:!0});var bC=G2(),Rdt=K2(),V2=Y2(),Tdt=t=>{let e=t.region||"us",r=bC.createAuth(bC.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Rdt.createTransporter({hosts:[{url:`analytics.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a=t.appId;return bC.addMethods({appId:a,transporter:o},t.methods)},Ldt=t=>(e,r)=>t.transporter.write({method:V2.MethodEnum.Post,path:"2/abtests",data:e},r),Ndt=t=>(e,r)=>t.transporter.write({method:V2.MethodEnum.Delete,path:bC.encode("2/abtests/%s",e)},r),Odt=t=>(e,r)=>t.transporter.read({method:V2.MethodEnum.Get,path:bC.encode("2/abtests/%s",e)},r),Mdt=t=>e=>t.transporter.read({method:V2.MethodEnum.Get,path:"2/abtests"},e),Udt=t=>(e,r)=>t.transporter.write({method:V2.MethodEnum.Post,path:bC.encode("2/abtests/%s/stop",e)},r);d0.addABTest=Ldt;d0.createAnalyticsClient=Tdt;d0.deleteABTest=Ndt;d0.getABTest=Odt;d0.getABTests=Mdt;d0.stopABTest=Udt});var Xme=_((MWt,Jme)=>{Jme.exports=zme()});var $me=_(z2=>{"use strict";Object.defineProperty(z2,"__esModule",{value:!0});var jH=G2(),_dt=K2(),Zme=Y2(),Hdt=t=>{let e=t.region||"us",r=jH.createAuth(jH.AuthMode.WithinHeaders,t.appId,t.apiKey),o=_dt.createTransporter({hosts:[{url:`personalization.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}});return jH.addMethods({appId:t.appId,transporter:o},t.methods)},jdt=t=>e=>t.transporter.read({method:Zme.MethodEnum.Get,path:"1/strategies/personalization"},e),qdt=t=>(e,r)=>t.transporter.write({method:Zme.MethodEnum.Post,path:"1/strategies/personalization",data:e},r);z2.createPersonalizationClient=Hdt;z2.getPersonalizationStrategy=jdt;z2.setPersonalizationStrategy=qdt});var tye=_((_Wt,eye)=>{eye.exports=$me()});var gye=_(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});var Gt=G2(),La=K2(),Ir=Y2(),Gdt=Be("crypto");function Bk(t){let e=r=>t.request(r).then(o=>{if(t.batch!==void 0&&t.batch(o.hits),!t.shouldStop(o))return o.cursor?e({cursor:o.cursor}):e({page:(r.page||0)+1})});return e({})}var Ydt=t=>{let e=t.appId,r=Gt.createAuth(t.authMode!==void 0?t.authMode:Gt.AuthMode.WithinHeaders,e,t.apiKey),o=La.createTransporter({hosts:[{url:`${e}-dsn.algolia.net`,accept:La.CallEnum.Read},{url:`${e}.algolia.net`,accept:La.CallEnum.Write}].concat(Gt.shuffle([{url:`${e}-1.algolianet.com`},{url:`${e}-2.algolianet.com`},{url:`${e}-3.algolianet.com`}])),...t,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a={transporter:o,appId:e,addAlgoliaAgent(n,u){o.userAgent.add({segment:n,version:u})},clearCache(){return Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(()=>{})}};return Gt.addMethods(a,t.methods)};function rye(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function nye(){return{name:"ObjectNotFoundError",message:"Object not found."}}function iye(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Wdt=t=>(e,r)=>{let{queryParameters:o,...a}=r||{},n={acl:e,...o!==void 0?{queryParameters:o}:{}},u=(A,p)=>Gt.createRetryablePromise(h=>J2(t)(A.key,p).catch(C=>{if(C.status!==404)throw C;return h()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/keys",data:n},a),u)},Kdt=t=>(e,r,o)=>{let a=La.createMappedRequestOptions(o);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},a)},Vdt=t=>(e,r,o)=>t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},o),zdt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(o,a)=>kC(t)(o.taskID,a)),vk=t=>(e,r,o)=>{let a=(n,u)=>X2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},o),a)},Jdt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Pk.Rules]}),Xdt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Pk.Settings]}),Zdt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Pk.Synonyms]}),$dt=t=>(e,r)=>e.method===Ir.MethodEnum.Get?t.transporter.read(e,r):t.transporter.write(e,r),emt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>J2(t)(e,n).then(u).catch(A=>{if(A.status!==404)throw A}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/keys/%s",e)},r),o)},tmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"deleteEntry",body:{objectID:n}}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},rmt=()=>(t,e)=>{let r=La.serializeQueryParameters(e),o=Gdt.createHmac("sha256",t).update(r).digest("hex");return Buffer.from(o+r).toString("base64")},J2=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/keys/%s",e)},r),sye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/task/%s",e.toString())},r),nmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"/1/dictionaries/*/settings"},e),imt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/logs"},e),smt=()=>t=>{let e=Buffer.from(t,"base64").toString("ascii"),r=/validUntil=(\d+)/,o=e.match(r);if(o===null)throw iye();return parseInt(o[1],10)-Math.round(new Date().getTime()/1e3)},omt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/top"},e),amt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/clusters/mapping/%s",e)},r),lmt=t=>e=>{let{retrieveMappings:r,...o}=e||{};return r===!0&&(o.getClusters=!0),t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/pending"},o)},X2=t=>(e,r={})=>{let o={transporter:t.transporter,appId:t.appId,indexName:e};return Gt.addMethods(o,r.methods)},cmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/keys"},e),umt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters"},e),Amt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/indexes"},e),fmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping"},e),pmt=t=>(e,r,o)=>{let a=(n,u)=>X2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},o),a)},hmt=t=>(e,r)=>{let o=(a,n)=>Promise.all(Object.keys(a.taskID).map(u=>X2(t)(u,{methods:{waitTask:Zi}}).waitTask(a.taskID[u],n)));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:e}},r),o)},gmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:e}},r),dmt=t=>(e,r)=>{let o=e.map(a=>({...a,params:La.serializeQueryParameters(a.params||{})}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},r)},mmt=t=>(e,r)=>Promise.all(e.map(o=>{let{facetName:a,facetQuery:n,...u}=o.params;return X2(t)(o.indexName,{methods:{searchForFacetValues:fye}}).searchForFacetValues(a,n,{...r,...u})})),ymt=t=>(e,r)=>{let o=La.createMappedRequestOptions(r);return o.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Delete,path:"1/clusters/mapping"},o)},Emt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},Cmt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>J2(t)(e,n).catch(A=>{if(A.status!==404)throw A;return u()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/keys/%s/restore",e)},r),o)},wmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},Imt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},o),Bmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:e}},r),vmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:"/1/dictionaries/*/settings",data:e},r),(o,a)=>kC(t)(o.taskID,a)),Dmt=t=>(e,r)=>{let o=Object.assign({},r),{queryParameters:a,...n}=r||{},u=a?{queryParameters:a}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],p=C=>Object.keys(o).filter(I=>A.indexOf(I)!==-1).every(I=>C[I]===o[I]),h=(C,I)=>Gt.createRetryablePromise(v=>J2(t)(e,I).then(b=>p(b)?Promise.resolve():v()));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/keys/%s",e),data:u},n),h)},kC=t=>(e,r)=>Gt.createRetryablePromise(o=>sye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),oye=t=>(e,r)=>{let o=(a,n)=>Zi(t)(a.taskID,n);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),o)},Pmt=t=>e=>Bk({shouldStop:r=>r.cursor===void 0,...e,request:r=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/browse",t.indexName),data:r},e)}),Smt=t=>e=>{let r={hitsPerPage:1e3,...e};return Bk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},xmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Bk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Dk=t=>(e,r,o)=>{let{batchSize:a,...n}=o||{},u={taskIDs:[],objectIDs:[]},A=(p=0)=>{let h=[],C;for(C=p;C({action:r,body:I})),n).then(I=>(u.objectIDs=u.objectIDs.concat(I.objectIDs),u.taskIDs.push(I.taskID),C++,A(C)))};return Gt.createWaitablePromise(A(),(p,h)=>Promise.all(p.taskIDs.map(C=>Zi(t)(C,h))))},bmt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/clear",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),kmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=La.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Qmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=La.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Fmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/deleteByQuery",t.indexName),data:e},r),(o,a)=>Zi(t)(o.taskID,a)),Rmt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Tmt=t=>(e,r)=>Gt.createWaitablePromise(aye(t)([e],r).then(o=>({taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),aye=t=>(e,r)=>{let o=e.map(a=>({objectID:a}));return Dk(t)(o,rm.DeleteObject,r)},Lmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=La.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Nmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=La.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Omt=t=>e=>lye(t)(e).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),Mmt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},o),Umt=t=>(e,r)=>{let{query:o,paginate:a,...n}=r||{},u=0,A=()=>Aye(t)(o||"",{...n,page:u}).then(p=>{for(let[h,C]of Object.entries(p.hits))if(e(C))return{object:C,position:parseInt(h,10),page:u};if(u++,a===!1||u>=p.nbPages)throw nye();return A()});return A()},_mt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/%s",t.indexName,e)},r),Hmt=()=>(t,e)=>{for(let[r,o]of Object.entries(t.hits))if(o.objectID===e)return parseInt(r,10);return-1},jmt=t=>(e,r)=>{let{attributesToRetrieve:o,...a}=r||{},n=e.map(u=>({indexName:t.indexName,objectID:u,...o?{attributesToRetrieve:o}:{}}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:n}},a)},qmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},r),lye=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:{getVersion:2}},e),Gmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},r),cye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/task/%s",t.indexName,e.toString())},r),Ymt=t=>(e,r)=>Gt.createWaitablePromise(uye(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),uye=t=>(e,r)=>{let{createIfNotExists:o,...a}=r||{},n=o?rm.PartialUpdateObject:rm.PartialUpdateObjectNoCreate;return Dk(t)(e,n,a)},Wmt=t=>(e,r)=>{let{safe:o,autoGenerateObjectIDIfNotExist:a,batchSize:n,...u}=r||{},A=(E,F,N,U)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",E),data:{operation:N,destination:F}},U),(z,te)=>Zi(t)(z.taskID,te)),p=Math.random().toString(36).substring(7),h=`${t.indexName}_tmp_${p}`,C=qH({appId:t.appId,transporter:t.transporter,indexName:h}),I=[],v=A(t.indexName,h,"copy",{...u,scope:["settings","synonyms","rules"]});I.push(v);let b=(o?v.wait(u):v).then(()=>{let E=C(e,{...u,autoGenerateObjectIDIfNotExist:a,batchSize:n});return I.push(E),o?E.wait(u):E}).then(()=>{let E=A(h,t.indexName,"move",u);return I.push(E),o?E.wait(u):E}).then(()=>Promise.all(I)).then(([E,F,N])=>({objectIDs:F.objectIDs,taskIDs:[E.taskID,...F.taskIDs,N.taskID]}));return Gt.createWaitablePromise(b,(E,F)=>Promise.all(I.map(N=>N.wait(F))))},Kmt=t=>(e,r)=>GH(t)(e,{...r,clearExistingRules:!0}),Vmt=t=>(e,r)=>YH(t)(e,{...r,clearExistingSynonyms:!0}),zmt=t=>(e,r)=>Gt.createWaitablePromise(qH(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),qH=t=>(e,r)=>{let{autoGenerateObjectIDIfNotExist:o,...a}=r||{},n=o?rm.AddObject:rm.UpdateObject;if(n===rm.UpdateObject){for(let u of e)if(u.objectID===void 0)return Gt.createWaitablePromise(Promise.reject(rye()))}return Dk(t)(e,n,a)},Jmt=t=>(e,r)=>GH(t)([e],r),GH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingRules:a,...n}=r||{},u=La.createMappedRequestOptions(n);return o&&(u.queryParameters.forwardToReplicas=1),a&&(u.queryParameters.clearExistingRules=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/batch",t.indexName),data:e},u),(A,p)=>Zi(t)(A.taskID,p))},Xmt=t=>(e,r)=>YH(t)([e],r),YH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingSynonyms:a,replaceExistingSynonyms:n,...u}=r||{},A=La.createMappedRequestOptions(u);return o&&(A.queryParameters.forwardToReplicas=1),(n||a)&&(A.queryParameters.replaceExistingSynonyms=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/batch",t.indexName),data:e},A),(p,h)=>Zi(t)(p.taskID,h))},Aye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},r),fye=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:r},cacheable:!0},o),pye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/search",t.indexName),data:{query:e}},r),hye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/search",t.indexName),data:{query:e}},r),Zmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=La.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:e},n),(u,A)=>Zi(t)(u.taskID,A))},Zi=t=>(e,r)=>Gt.createRetryablePromise(o=>cye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),$mt={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Personalization:"personalization",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},rm={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject",DeleteIndex:"delete",ClearIndex:"clear"},Pk={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},eyt={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},tyt={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};Ft.ApiKeyACLEnum=$mt;Ft.BatchActionEnum=rm;Ft.ScopeEnum=Pk;Ft.StrategyEnum=eyt;Ft.SynonymEnum=tyt;Ft.addApiKey=Wdt;Ft.assignUserID=Kdt;Ft.assignUserIDs=Vdt;Ft.batch=oye;Ft.browseObjects=Pmt;Ft.browseRules=Smt;Ft.browseSynonyms=xmt;Ft.chunkedBatch=Dk;Ft.clearDictionaryEntries=zdt;Ft.clearObjects=bmt;Ft.clearRules=kmt;Ft.clearSynonyms=Qmt;Ft.copyIndex=vk;Ft.copyRules=Jdt;Ft.copySettings=Xdt;Ft.copySynonyms=Zdt;Ft.createBrowsablePromise=Bk;Ft.createMissingObjectIDError=rye;Ft.createObjectNotFoundError=nye;Ft.createSearchClient=Ydt;Ft.createValidUntilNotFoundError=iye;Ft.customRequest=$dt;Ft.deleteApiKey=emt;Ft.deleteBy=Fmt;Ft.deleteDictionaryEntries=tmt;Ft.deleteIndex=Rmt;Ft.deleteObject=Tmt;Ft.deleteObjects=aye;Ft.deleteRule=Lmt;Ft.deleteSynonym=Nmt;Ft.exists=Omt;Ft.findAnswers=Mmt;Ft.findObject=Umt;Ft.generateSecuredApiKey=rmt;Ft.getApiKey=J2;Ft.getAppTask=sye;Ft.getDictionarySettings=nmt;Ft.getLogs=imt;Ft.getObject=_mt;Ft.getObjectPosition=Hmt;Ft.getObjects=jmt;Ft.getRule=qmt;Ft.getSecuredApiKeyRemainingValidity=smt;Ft.getSettings=lye;Ft.getSynonym=Gmt;Ft.getTask=cye;Ft.getTopUserIDs=omt;Ft.getUserID=amt;Ft.hasPendingMappings=lmt;Ft.initIndex=X2;Ft.listApiKeys=cmt;Ft.listClusters=umt;Ft.listIndices=Amt;Ft.listUserIDs=fmt;Ft.moveIndex=pmt;Ft.multipleBatch=hmt;Ft.multipleGetObjects=gmt;Ft.multipleQueries=dmt;Ft.multipleSearchForFacetValues=mmt;Ft.partialUpdateObject=Ymt;Ft.partialUpdateObjects=uye;Ft.removeUserID=ymt;Ft.replaceAllObjects=Wmt;Ft.replaceAllRules=Kmt;Ft.replaceAllSynonyms=Vmt;Ft.replaceDictionaryEntries=Emt;Ft.restoreApiKey=Cmt;Ft.saveDictionaryEntries=wmt;Ft.saveObject=zmt;Ft.saveObjects=qH;Ft.saveRule=Jmt;Ft.saveRules=GH;Ft.saveSynonym=Xmt;Ft.saveSynonyms=YH;Ft.search=Aye;Ft.searchDictionaryEntries=Imt;Ft.searchForFacetValues=fye;Ft.searchRules=pye;Ft.searchSynonyms=hye;Ft.searchUserIDs=Bmt;Ft.setDictionarySettings=vmt;Ft.setSettings=Zmt;Ft.updateApiKey=Dmt;Ft.waitAppTask=kC;Ft.waitTask=Zi});var mye=_((jWt,dye)=>{dye.exports=gye()});var yye=_(Sk=>{"use strict";Object.defineProperty(Sk,"__esModule",{value:!0});function ryt(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var nyt={Debug:1,Info:2,Error:3};Sk.LogLevelEnum=nyt;Sk.createNullLogger=ryt});var Cye=_((GWt,Eye)=>{Eye.exports=yye()});var vye=_(WH=>{"use strict";Object.defineProperty(WH,"__esModule",{value:!0});var wye=Be("http"),Iye=Be("https"),iyt=Be("url"),Bye={keepAlive:!0},syt=new wye.Agent(Bye),oyt=new Iye.Agent(Bye);function ayt({agent:t,httpAgent:e,httpsAgent:r,requesterOptions:o={}}={}){let a=e||t||syt,n=r||t||oyt;return{send(u){return new Promise(A=>{let p=iyt.parse(u.url),h=p.query===null?p.pathname:`${p.pathname}?${p.query}`,C={...o,agent:p.protocol==="https:"?n:a,hostname:p.hostname,path:h,method:u.method,headers:{...o&&o.headers?o.headers:{},...u.headers},...p.port!==void 0?{port:p.port||""}:{}},I=(p.protocol==="https:"?Iye:wye).request(C,F=>{let N=[];F.on("data",U=>{N=N.concat(U)}),F.on("end",()=>{clearTimeout(b),clearTimeout(E),A({status:F.statusCode||0,content:Buffer.concat(N).toString(),isTimedOut:!1})})}),v=(F,N)=>setTimeout(()=>{I.abort(),A({status:0,content:N,isTimedOut:!0})},F*1e3),b=v(u.connectTimeout,"Connection timeout"),E;I.on("error",F=>{clearTimeout(b),clearTimeout(E),A({status:0,content:F.message,isTimedOut:!1})}),I.once("response",()=>{clearTimeout(b),E=v(u.responseTimeout,"Socket timeout")}),u.data!==void 0&&I.write(u.data),I.end()})},destroy(){return a.destroy(),n.destroy(),Promise.resolve()}}}WH.createNodeHttpRequester=ayt});var Pye=_((WWt,Dye)=>{Dye.exports=vye()});var kye=_((KWt,bye)=>{"use strict";var Sye=vme(),lyt=Sme(),QC=Xme(),VH=G2(),KH=tye(),Mt=mye(),cyt=Cye(),uyt=Pye(),Ayt=K2();function xye(t,e,r){let o={appId:t,apiKey:e,timeouts:{connect:2,read:5,write:30},requester:uyt.createNodeHttpRequester(),logger:cyt.createNullLogger(),responsesCache:Sye.createNullCache(),requestsCache:Sye.createNullCache(),hostsCache:lyt.createInMemoryCache(),userAgent:Ayt.createUserAgent(VH.version).add({segment:"Node.js",version:process.versions.node})},a={...o,...r},n=()=>u=>KH.createPersonalizationClient({...o,...u,methods:{getPersonalizationStrategy:KH.getPersonalizationStrategy,setPersonalizationStrategy:KH.setPersonalizationStrategy}});return Mt.createSearchClient({...a,methods:{search:Mt.multipleQueries,searchForFacetValues:Mt.multipleSearchForFacetValues,multipleBatch:Mt.multipleBatch,multipleGetObjects:Mt.multipleGetObjects,multipleQueries:Mt.multipleQueries,copyIndex:Mt.copyIndex,copySettings:Mt.copySettings,copyRules:Mt.copyRules,copySynonyms:Mt.copySynonyms,moveIndex:Mt.moveIndex,listIndices:Mt.listIndices,getLogs:Mt.getLogs,listClusters:Mt.listClusters,multipleSearchForFacetValues:Mt.multipleSearchForFacetValues,getApiKey:Mt.getApiKey,addApiKey:Mt.addApiKey,listApiKeys:Mt.listApiKeys,updateApiKey:Mt.updateApiKey,deleteApiKey:Mt.deleteApiKey,restoreApiKey:Mt.restoreApiKey,assignUserID:Mt.assignUserID,assignUserIDs:Mt.assignUserIDs,getUserID:Mt.getUserID,searchUserIDs:Mt.searchUserIDs,listUserIDs:Mt.listUserIDs,getTopUserIDs:Mt.getTopUserIDs,removeUserID:Mt.removeUserID,hasPendingMappings:Mt.hasPendingMappings,generateSecuredApiKey:Mt.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:Mt.getSecuredApiKeyRemainingValidity,destroy:VH.destroy,clearDictionaryEntries:Mt.clearDictionaryEntries,deleteDictionaryEntries:Mt.deleteDictionaryEntries,getDictionarySettings:Mt.getDictionarySettings,getAppTask:Mt.getAppTask,replaceDictionaryEntries:Mt.replaceDictionaryEntries,saveDictionaryEntries:Mt.saveDictionaryEntries,searchDictionaryEntries:Mt.searchDictionaryEntries,setDictionarySettings:Mt.setDictionarySettings,waitAppTask:Mt.waitAppTask,customRequest:Mt.customRequest,initIndex:u=>A=>Mt.initIndex(u)(A,{methods:{batch:Mt.batch,delete:Mt.deleteIndex,findAnswers:Mt.findAnswers,getObject:Mt.getObject,getObjects:Mt.getObjects,saveObject:Mt.saveObject,saveObjects:Mt.saveObjects,search:Mt.search,searchForFacetValues:Mt.searchForFacetValues,waitTask:Mt.waitTask,setSettings:Mt.setSettings,getSettings:Mt.getSettings,partialUpdateObject:Mt.partialUpdateObject,partialUpdateObjects:Mt.partialUpdateObjects,deleteObject:Mt.deleteObject,deleteObjects:Mt.deleteObjects,deleteBy:Mt.deleteBy,clearObjects:Mt.clearObjects,browseObjects:Mt.browseObjects,getObjectPosition:Mt.getObjectPosition,findObject:Mt.findObject,exists:Mt.exists,saveSynonym:Mt.saveSynonym,saveSynonyms:Mt.saveSynonyms,getSynonym:Mt.getSynonym,searchSynonyms:Mt.searchSynonyms,browseSynonyms:Mt.browseSynonyms,deleteSynonym:Mt.deleteSynonym,clearSynonyms:Mt.clearSynonyms,replaceAllObjects:Mt.replaceAllObjects,replaceAllSynonyms:Mt.replaceAllSynonyms,searchRules:Mt.searchRules,getRule:Mt.getRule,deleteRule:Mt.deleteRule,saveRule:Mt.saveRule,saveRules:Mt.saveRules,replaceAllRules:Mt.replaceAllRules,browseRules:Mt.browseRules,clearRules:Mt.clearRules}}),initAnalytics:()=>u=>QC.createAnalyticsClient({...o,...u,methods:{addABTest:QC.addABTest,getABTest:QC.getABTest,getABTests:QC.getABTests,stopABTest:QC.stopABTest,deleteABTest:QC.deleteABTest}}),initPersonalization:n,initRecommendation:()=>u=>(a.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),n()(u))}})}xye.version=VH.version;bye.exports=xye});var JH=_((VWt,zH)=>{var Qye=kye();zH.exports=Qye;zH.exports.default=Qye});var $H=_((JWt,Tye)=>{"use strict";var Rye=Object.getOwnPropertySymbols,pyt=Object.prototype.hasOwnProperty,hyt=Object.prototype.propertyIsEnumerable;function gyt(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function dyt(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de",Object.getOwnPropertyNames(t)[0]==="5")return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;var o=Object.getOwnPropertyNames(e).map(function(n){return e[n]});if(o.join("")!=="0123456789")return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(n){a[n]=n}),Object.keys(Object.assign({},a)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Tye.exports=dyt()?Object.assign:function(t,e){for(var r,o=gyt(t),a,n=1;n{"use strict";var i6=$H(),$c=typeof Symbol=="function"&&Symbol.for,Z2=$c?Symbol.for("react.element"):60103,myt=$c?Symbol.for("react.portal"):60106,yyt=$c?Symbol.for("react.fragment"):60107,Eyt=$c?Symbol.for("react.strict_mode"):60108,Cyt=$c?Symbol.for("react.profiler"):60114,wyt=$c?Symbol.for("react.provider"):60109,Iyt=$c?Symbol.for("react.context"):60110,Byt=$c?Symbol.for("react.forward_ref"):60112,vyt=$c?Symbol.for("react.suspense"):60113,Dyt=$c?Symbol.for("react.memo"):60115,Pyt=$c?Symbol.for("react.lazy"):60116,Lye=typeof Symbol=="function"&&Symbol.iterator;function $2(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;rxk.length&&xk.push(t)}function t6(t,e,r,o){var a=typeof t;(a==="undefined"||a==="boolean")&&(t=null);var n=!1;if(t===null)n=!0;else switch(a){case"string":case"number":n=!0;break;case"object":switch(t.$$typeof){case Z2:case myt:n=!0}}if(n)return r(o,t,e===""?"."+e6(t,0):e),1;if(n=0,e=e===""?".":e+":",Array.isArray(t))for(var u=0;u{"use strict";Kye.exports=Wye()});var u6=_(($Wt,c6)=>{"use strict";var An=c6.exports;c6.exports.default=An;var Nn="\x1B[",eB="\x1B]",RC="\x07",bk=";",Vye=process.env.TERM_PROGRAM==="Apple_Terminal";An.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?Nn+(t+1)+"G":Nn+(e+1)+";"+(t+1)+"H"};An.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=Nn+-t+"D":t>0&&(r+=Nn+t+"C"),e<0?r+=Nn+-e+"A":e>0&&(r+=Nn+e+"B"),r};An.cursorUp=(t=1)=>Nn+t+"A";An.cursorDown=(t=1)=>Nn+t+"B";An.cursorForward=(t=1)=>Nn+t+"C";An.cursorBackward=(t=1)=>Nn+t+"D";An.cursorLeft=Nn+"G";An.cursorSavePosition=Vye?"\x1B7":Nn+"s";An.cursorRestorePosition=Vye?"\x1B8":Nn+"u";An.cursorGetPosition=Nn+"6n";An.cursorNextLine=Nn+"E";An.cursorPrevLine=Nn+"F";An.cursorHide=Nn+"?25l";An.cursorShow=Nn+"?25h";An.eraseLines=t=>{let e="";for(let r=0;r[eB,"8",bk,bk,e,RC,t,eB,"8",bk,bk,RC].join("");An.image=(t,e={})=>{let r=`${eB}1337;File=inline=1`;return e.width&&(r+=`;width=${e.width}`),e.height&&(r+=`;height=${e.height}`),e.preserveAspectRatio===!1&&(r+=";preserveAspectRatio=0"),r+":"+t.toString("base64")+RC};An.iTerm={setCwd:(t=process.cwd())=>`${eB}50;CurrentDir=${t}${RC}`,annotation:(t,e={})=>{let r=`${eB}1337;`,o=typeof e.x<"u",a=typeof e.y<"u";if((o||a)&&!(o&&a&&typeof e.length<"u"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return t=t.replace(/\|/g,""),r+=e.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",e.length>0?r+=(o?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+RC}}});var Jye=_((eKt,A6)=>{"use strict";var zye=(t,e)=>{for(let r of Reflect.ownKeys(e))Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t};A6.exports=zye;A6.exports.default=zye});var Zye=_((tKt,Qk)=>{"use strict";var Fyt=Jye(),kk=new WeakMap,Xye=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,o=0,a=t.displayName||t.name||"",n=function(...u){if(kk.set(n,++o),o===1)r=t.apply(this,u),t=null;else if(e.throw===!0)throw new Error(`Function \`${a}\` can only be called once`);return r};return Fyt(n,t),kk.set(n,o),n};Qk.exports=Xye;Qk.exports.default=Xye;Qk.exports.callCount=t=>{if(!kk.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return kk.get(t)}});var $ye=_((rKt,Fk)=>{Fk.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&Fk.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Fk.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var h6=_((nKt,NC)=>{var Ei=global.process,nm=function(t){return t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function"};nm(Ei)?(eEe=Be("assert"),TC=$ye(),tEe=/^win/i.test(Ei.platform),tB=Be("events"),typeof tB!="function"&&(tB=tB.EventEmitter),Ei.__signal_exit_emitter__?Ls=Ei.__signal_exit_emitter__:(Ls=Ei.__signal_exit_emitter__=new tB,Ls.count=0,Ls.emitted={}),Ls.infinite||(Ls.setMaxListeners(1/0),Ls.infinite=!0),NC.exports=function(t,e){if(!nm(global.process))return function(){};eEe.equal(typeof t,"function","a callback must be provided for exit handler"),LC===!1&&f6();var r="exit";e&&e.alwaysLast&&(r="afterexit");var o=function(){Ls.removeListener(r,t),Ls.listeners("exit").length===0&&Ls.listeners("afterexit").length===0&&Rk()};return Ls.on(r,t),o},Rk=function(){!LC||!nm(global.process)||(LC=!1,TC.forEach(function(e){try{Ei.removeListener(e,Tk[e])}catch{}}),Ei.emit=Lk,Ei.reallyExit=p6,Ls.count-=1)},NC.exports.unload=Rk,im=function(e,r,o){Ls.emitted[e]||(Ls.emitted[e]=!0,Ls.emit(e,r,o))},Tk={},TC.forEach(function(t){Tk[t]=function(){if(!!nm(global.process)){var r=Ei.listeners(t);r.length===Ls.count&&(Rk(),im("exit",null,t),im("afterexit",null,t),tEe&&t==="SIGHUP"&&(t="SIGINT"),Ei.kill(Ei.pid,t))}}}),NC.exports.signals=function(){return TC},LC=!1,f6=function(){LC||!nm(global.process)||(LC=!0,Ls.count+=1,TC=TC.filter(function(e){try{return Ei.on(e,Tk[e]),!0}catch{return!1}}),Ei.emit=nEe,Ei.reallyExit=rEe)},NC.exports.load=f6,p6=Ei.reallyExit,rEe=function(e){!nm(global.process)||(Ei.exitCode=e||0,im("exit",Ei.exitCode,null),im("afterexit",Ei.exitCode,null),p6.call(Ei,Ei.exitCode))},Lk=Ei.emit,nEe=function(e,r){if(e==="exit"&&nm(global.process)){r!==void 0&&(Ei.exitCode=r);var o=Lk.apply(this,arguments);return im("exit",Ei.exitCode,null),im("afterexit",Ei.exitCode,null),o}else return Lk.apply(this,arguments)}):NC.exports=function(){return function(){}};var eEe,TC,tEe,tB,Ls,Rk,im,Tk,LC,f6,p6,rEe,Lk,nEe});var sEe=_((iKt,iEe)=>{"use strict";var Ryt=Zye(),Tyt=h6();iEe.exports=Ryt(()=>{Tyt(()=>{process.stderr.write("\x1B[?25h")},{alwaysLast:!0})})});var g6=_(OC=>{"use strict";var Lyt=sEe(),Nk=!1;OC.show=(t=process.stderr)=>{!t.isTTY||(Nk=!1,t.write("\x1B[?25h"))};OC.hide=(t=process.stderr)=>{!t.isTTY||(Lyt(),Nk=!0,t.write("\x1B[?25l"))};OC.toggle=(t,e)=>{t!==void 0&&(Nk=t),Nk?OC.show(e):OC.hide(e)}});var cEe=_(rB=>{"use strict";var lEe=rB&&rB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(rB,"__esModule",{value:!0});var oEe=lEe(u6()),aEe=lEe(g6()),Nyt=(t,{showCursor:e=!1}={})=>{let r=0,o="",a=!1,n=u=>{!e&&!a&&(aEe.default.hide(),a=!0);let A=u+` -`;A!==o&&(o=A,t.write(oEe.default.eraseLines(r)+A),r=A.split(` -`).length)};return n.clear=()=>{t.write(oEe.default.eraseLines(r)),o="",r=0},n.done=()=>{o="",r=0,e||(aEe.default.show(),a=!1)},n};rB.default={create:Nyt}});var uEe=_((aKt,Oyt)=>{Oyt.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var pEe=_(gl=>{"use strict";var fEe=uEe(),pA=process.env;Object.defineProperty(gl,"_vendors",{value:fEe.map(function(t){return t.constant})});gl.name=null;gl.isPR=null;fEe.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(o){return AEe(o)});if(gl[t.constant]=r,r)switch(gl.name=t.name,typeof t.pr){case"string":gl.isPR=!!pA[t.pr];break;case"object":"env"in t.pr?gl.isPR=t.pr.env in pA&&pA[t.pr.env]!==t.pr.ne:"any"in t.pr?gl.isPR=t.pr.any.some(function(o){return!!pA[o]}):gl.isPR=AEe(t.pr);break;default:gl.isPR=null}});gl.isCI=!!(pA.CI||pA.CONTINUOUS_INTEGRATION||pA.BUILD_NUMBER||pA.RUN_ID||gl.name);function AEe(t){return typeof t=="string"?!!pA[t]:Object.keys(t).every(function(e){return pA[e]===t[e]})}});var gEe=_((cKt,hEe)=>{"use strict";hEe.exports=pEe().isCI});var mEe=_((uKt,dEe)=>{"use strict";var Myt=t=>{let e=new Set;do for(let r of Reflect.ownKeys(t))e.add([t,r]);while((t=Reflect.getPrototypeOf(t))&&t!==Object.prototype);return e};dEe.exports=(t,{include:e,exclude:r}={})=>{let o=a=>{let n=u=>typeof u=="string"?a===u:u.test(a);return e?e.some(n):r?!r.some(n):!0};for(let[a,n]of Myt(t.constructor.prototype)){if(n==="constructor"||!o(n))continue;let u=Reflect.getOwnPropertyDescriptor(a,n);u&&typeof u.value=="function"&&(t[n]=t[n].bind(t))}return t}});var vEe=_(kn=>{"use strict";Object.defineProperty(kn,"__esModule",{value:!0});var UC,sB,Hk,jk,I6;typeof window>"u"||typeof MessageChannel!="function"?(MC=null,d6=null,m6=function(){if(MC!==null)try{var t=kn.unstable_now();MC(!0,t),MC=null}catch(e){throw setTimeout(m6,0),e}},yEe=Date.now(),kn.unstable_now=function(){return Date.now()-yEe},UC=function(t){MC!==null?setTimeout(UC,0,t):(MC=t,setTimeout(m6,0))},sB=function(t,e){d6=setTimeout(t,e)},Hk=function(){clearTimeout(d6)},jk=function(){return!1},I6=kn.unstable_forceFrameRate=function(){}):(Ok=window.performance,y6=window.Date,EEe=window.setTimeout,CEe=window.clearTimeout,typeof console<"u"&&(wEe=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof wEe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Ok=="object"&&typeof Ok.now=="function"?kn.unstable_now=function(){return Ok.now()}:(IEe=y6.now(),kn.unstable_now=function(){return y6.now()-IEe}),nB=!1,iB=null,Mk=-1,E6=5,C6=0,jk=function(){return kn.unstable_now()>=C6},I6=function(){},kn.unstable_forceFrameRate=function(t){0>t||125_k(u,r))p!==void 0&&0>_k(p,u)?(t[o]=p,t[A]=r,o=A):(t[o]=u,t[n]=r,o=n);else if(p!==void 0&&0>_k(p,r))t[o]=p,t[A]=r,o=A;else break e}}return e}return null}function _k(t,e){var r=t.sortIndex-e.sortIndex;return r!==0?r:t.id-e.id}var eu=[],m0=[],Uyt=1,na=null,No=3,Gk=!1,sm=!1,oB=!1;function Yk(t){for(var e=nc(m0);e!==null;){if(e.callback===null)qk(m0);else if(e.startTime<=t)qk(m0),e.sortIndex=e.expirationTime,B6(eu,e);else break;e=nc(m0)}}function v6(t){if(oB=!1,Yk(t),!sm)if(nc(eu)!==null)sm=!0,UC(D6);else{var e=nc(m0);e!==null&&sB(v6,e.startTime-t)}}function D6(t,e){sm=!1,oB&&(oB=!1,Hk()),Gk=!0;var r=No;try{for(Yk(e),na=nc(eu);na!==null&&(!(na.expirationTime>e)||t&&!jk());){var o=na.callback;if(o!==null){na.callback=null,No=na.priorityLevel;var a=o(na.expirationTime<=e);e=kn.unstable_now(),typeof a=="function"?na.callback=a:na===nc(eu)&&qk(eu),Yk(e)}else qk(eu);na=nc(eu)}if(na!==null)var n=!0;else{var u=nc(m0);u!==null&&sB(v6,u.startTime-e),n=!1}return n}finally{na=null,No=r,Gk=!1}}function BEe(t){switch(t){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var _yt=I6;kn.unstable_ImmediatePriority=1;kn.unstable_UserBlockingPriority=2;kn.unstable_NormalPriority=3;kn.unstable_IdlePriority=5;kn.unstable_LowPriority=4;kn.unstable_runWithPriority=function(t,e){switch(t){case 1:case 2:case 3:case 4:case 5:break;default:t=3}var r=No;No=t;try{return e()}finally{No=r}};kn.unstable_next=function(t){switch(No){case 1:case 2:case 3:var e=3;break;default:e=No}var r=No;No=e;try{return t()}finally{No=r}};kn.unstable_scheduleCallback=function(t,e,r){var o=kn.unstable_now();if(typeof r=="object"&&r!==null){var a=r.delay;a=typeof a=="number"&&0o?(t.sortIndex=a,B6(m0,t),nc(eu)===null&&t===nc(m0)&&(oB?Hk():oB=!0,sB(v6,a-o))):(t.sortIndex=r,B6(eu,t),sm||Gk||(sm=!0,UC(D6))),t};kn.unstable_cancelCallback=function(t){t.callback=null};kn.unstable_wrapCallback=function(t){var e=No;return function(){var r=No;No=e;try{return t.apply(this,arguments)}finally{No=r}}};kn.unstable_getCurrentPriorityLevel=function(){return No};kn.unstable_shouldYield=function(){var t=kn.unstable_now();Yk(t);var e=nc(eu);return e!==na&&na!==null&&e!==null&&e.callback!==null&&e.startTime<=t&&e.expirationTime{"use strict";DEe.exports=vEe()});var PEe=_((pKt,aB)=>{aB.exports=function t(e){"use strict";var r=$H(),o=sn(),a=P6();function n(P){for(var D="https://reactjs.org/docs/error-decoder.html?invariant="+P,T=1;Tao||(P.current=yl[ao],yl[ao]=null,ao--)}function On(P,D){ao++,yl[ao]=P.current,P.current=D}var Li={},Mn={current:Li},_i={current:!1},tr=Li;function Oe(P,D){var T=P.type.contextTypes;if(!T)return Li;var j=P.stateNode;if(j&&j.__reactInternalMemoizedUnmaskedChildContext===D)return j.__reactInternalMemoizedMaskedChildContext;var W={},Ae;for(Ae in T)W[Ae]=D[Ae];return j&&(P=P.stateNode,P.__reactInternalMemoizedUnmaskedChildContext=D,P.__reactInternalMemoizedMaskedChildContext=W),W}function ii(P){return P=P.childContextTypes,P!=null}function Ma(P){Vn(_i,P),Vn(Mn,P)}function hr(P){Vn(_i,P),Vn(Mn,P)}function uc(P,D,T){if(Mn.current!==Li)throw Error(n(168));On(Mn,D,P),On(_i,T,P)}function uu(P,D,T){var j=P.stateNode;if(P=D.childContextTypes,typeof j.getChildContext!="function")return T;j=j.getChildContext();for(var W in j)if(!(W in P))throw Error(n(108,ae(D)||"Unknown",W));return r({},T,{},j)}function Ac(P){var D=P.stateNode;return D=D&&D.__reactInternalMemoizedMergedChildContext||Li,tr=Mn.current,On(Mn,D,P),On(_i,_i.current,P),!0}function El(P,D,T){var j=P.stateNode;if(!j)throw Error(n(169));T?(D=uu(P,D,tr),j.__reactInternalMemoizedMergedChildContext=D,Vn(_i,P),Vn(Mn,P),On(Mn,D,P)):Vn(_i,P),On(_i,T,P)}var vA=a.unstable_runWithPriority,Au=a.unstable_scheduleCallback,Ce=a.unstable_cancelCallback,Rt=a.unstable_shouldYield,fc=a.unstable_requestPaint,Hi=a.unstable_now,fu=a.unstable_getCurrentPriorityLevel,Yt=a.unstable_ImmediatePriority,Cl=a.unstable_UserBlockingPriority,DA=a.unstable_NormalPriority,lp=a.unstable_LowPriority,pc=a.unstable_IdlePriority,PA={},Qn=fc!==void 0?fc:function(){},hi=null,hc=null,SA=!1,sa=Hi(),Ni=1e4>sa?Hi:function(){return Hi()-sa};function _o(){switch(fu()){case Yt:return 99;case Cl:return 98;case DA:return 97;case lp:return 96;case pc:return 95;default:throw Error(n(332))}}function Ze(P){switch(P){case 99:return Yt;case 98:return Cl;case 97:return DA;case 96:return lp;case 95:return pc;default:throw Error(n(332))}}function lo(P,D){return P=Ze(P),vA(P,D)}function gc(P,D,T){return P=Ze(P),Au(P,D,T)}function pu(P){return hi===null?(hi=[P],hc=Au(Yt,hu)):hi.push(P),PA}function ji(){if(hc!==null){var P=hc;hc=null,Ce(P)}hu()}function hu(){if(!SA&&hi!==null){SA=!0;var P=0;try{var D=hi;lo(99,function(){for(;P=D&&(qo=!0),P.firstContext=null)}function ms(P,D){if(aa!==P&&D!==!1&&D!==0)if((typeof D!="number"||D===1073741823)&&(aa=P,D=1073741823),D={context:P,observedBits:D,next:null},_s===null){if(co===null)throw Error(n(308));_s=D,co.dependencies={expirationTime:0,firstContext:D,responders:null}}else _s=_s.next=D;return x?P._currentValue:P._currentValue2}var Hs=!1;function Un(P){return{baseState:P,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Pn(P){return{baseState:P.baseState,firstUpdate:P.firstUpdate,lastUpdate:P.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function ys(P,D){return{expirationTime:P,suspenseConfig:D,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function We(P,D){P.lastUpdate===null?P.firstUpdate=P.lastUpdate=D:(P.lastUpdate.next=D,P.lastUpdate=D)}function tt(P,D){var T=P.alternate;if(T===null){var j=P.updateQueue,W=null;j===null&&(j=P.updateQueue=Un(P.memoizedState))}else j=P.updateQueue,W=T.updateQueue,j===null?W===null?(j=P.updateQueue=Un(P.memoizedState),W=T.updateQueue=Un(T.memoizedState)):j=P.updateQueue=Pn(W):W===null&&(W=T.updateQueue=Pn(j));W===null||j===W?We(j,D):j.lastUpdate===null||W.lastUpdate===null?(We(j,D),We(W,D)):(We(j,D),W.lastUpdate=D)}function It(P,D){var T=P.updateQueue;T=T===null?P.updateQueue=Un(P.memoizedState):nr(P,T),T.lastCapturedUpdate===null?T.firstCapturedUpdate=T.lastCapturedUpdate=D:(T.lastCapturedUpdate.next=D,T.lastCapturedUpdate=D)}function nr(P,D){var T=P.alternate;return T!==null&&D===T.updateQueue&&(D=P.updateQueue=Pn(D)),D}function $(P,D,T,j,W,Ae){switch(T.tag){case 1:return P=T.payload,typeof P=="function"?P.call(Ae,j,W):P;case 3:P.effectTag=P.effectTag&-4097|64;case 0:if(P=T.payload,W=typeof P=="function"?P.call(Ae,j,W):P,W==null)break;return r({},j,W);case 2:Hs=!0}return j}function me(P,D,T,j,W){Hs=!1,D=nr(P,D);for(var Ae=D.baseState,ve=null,vt=0,wt=D.firstUpdate,bt=Ae;wt!==null;){var _r=wt.expirationTime;_rxn?(ai=Fr,Fr=null):ai=Fr.sibling;var en=di(rt,Fr,At[xn],Wt);if(en===null){Fr===null&&(Fr=ai);break}P&&Fr&&en.alternate===null&&D(rt,Fr),Ve=Ae(en,Ve,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en,Fr=ai}if(xn===At.length)return T(rt,Fr),vr;if(Fr===null){for(;xnxn?(ai=Fr,Fr=null):ai=Fr.sibling;var ho=di(rt,Fr,en.value,Wt);if(ho===null){Fr===null&&(Fr=ai);break}P&&Fr&&ho.alternate===null&&D(rt,Fr),Ve=Ae(ho,Ve,xn),Sn===null?vr=ho:Sn.sibling=ho,Sn=ho,Fr=ai}if(en.done)return T(rt,Fr),vr;if(Fr===null){for(;!en.done;xn++,en=At.next())en=is(rt,en.value,Wt),en!==null&&(Ve=Ae(en,Ve,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en);return vr}for(Fr=j(rt,Fr);!en.done;xn++,en=At.next())en=po(Fr,rt,xn,en.value,Wt),en!==null&&(P&&en.alternate!==null&&Fr.delete(en.key===null?xn:en.key),Ve=Ae(en,Ve,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en);return P&&Fr.forEach(function(vF){return D(rt,vF)}),vr}return function(rt,Ve,At,Wt){var vr=typeof At=="object"&&At!==null&&At.type===C&&At.key===null;vr&&(At=At.props.children);var Sn=typeof At=="object"&&At!==null;if(Sn)switch(At.$$typeof){case p:e:{for(Sn=At.key,vr=Ve;vr!==null;){if(vr.key===Sn)if(vr.tag===7?At.type===C:vr.elementType===At.type){T(rt,vr.sibling),Ve=W(vr,At.type===C?At.props.children:At.props,Wt),Ve.ref=kA(rt,vr,At),Ve.return=rt,rt=Ve;break e}else{T(rt,vr);break}else D(rt,vr);vr=vr.sibling}At.type===C?(Ve=xu(At.props.children,rt.mode,Wt,At.key),Ve.return=rt,rt=Ve):(Wt=Hm(At.type,At.key,At.props,null,rt.mode,Wt),Wt.ref=kA(rt,Ve,At),Wt.return=rt,rt=Wt)}return ve(rt);case h:e:{for(vr=At.key;Ve!==null;){if(Ve.key===vr)if(Ve.tag===4&&Ve.stateNode.containerInfo===At.containerInfo&&Ve.stateNode.implementation===At.implementation){T(rt,Ve.sibling),Ve=W(Ve,At.children||[],Wt),Ve.return=rt,rt=Ve;break e}else{T(rt,Ve);break}else D(rt,Ve);Ve=Ve.sibling}Ve=Fw(At,rt.mode,Wt),Ve.return=rt,rt=Ve}return ve(rt)}if(typeof At=="string"||typeof At=="number")return At=""+At,Ve!==null&&Ve.tag===6?(T(rt,Ve.sibling),Ve=W(Ve,At,Wt),Ve.return=rt,rt=Ve):(T(rt,Ve),Ve=Qw(At,rt.mode,Wt),Ve.return=rt,rt=Ve),ve(rt);if(bA(At))return KA(rt,Ve,At,Wt);if(ue(At))return Yo(rt,Ve,At,Wt);if(Sn&&cp(rt,At),typeof At>"u"&&!vr)switch(rt.tag){case 1:case 0:throw rt=rt.type,Error(n(152,rt.displayName||rt.name||"Component"))}return T(rt,Ve)}}var gu=rg(!0),ng=rg(!1),du={},uo={current:du},QA={current:du},mc={current:du};function ca(P){if(P===du)throw Error(n(174));return P}function ig(P,D){On(mc,D,P),On(QA,P,P),On(uo,du,P),D=ne(D),Vn(uo,P),On(uo,D,P)}function yc(P){Vn(uo,P),Vn(QA,P),Vn(mc,P)}function Pm(P){var D=ca(mc.current),T=ca(uo.current);D=ee(T,P.type,D),T!==D&&(On(QA,P,P),On(uo,D,P))}function sg(P){QA.current===P&&(Vn(uo,P),Vn(QA,P))}var $n={current:0};function up(P){for(var D=P;D!==null;){if(D.tag===13){var T=D.memoizedState;if(T!==null&&(T=T.dehydrated,T===null||Os(T)||so(T)))return D}else if(D.tag===19&&D.memoizedProps.revealOrder!==void 0){if((D.effectTag&64)!==0)return D}else if(D.child!==null){D.child.return=D,D=D.child;continue}if(D===P)break;for(;D.sibling===null;){if(D.return===null||D.return===P)return null;D=D.return}D.sibling.return=D.return,D=D.sibling}return null}function og(P,D){return{responder:P,props:D}}var FA=u.ReactCurrentDispatcher,js=u.ReactCurrentBatchConfig,mu=0,Ha=null,Gi=null,ua=null,yu=null,Es=null,Ec=null,Cc=0,Y=null,Dt=0,wl=!1,bi=null,wc=0;function ct(){throw Error(n(321))}function Eu(P,D){if(D===null)return!1;for(var T=0;TCc&&(Cc=_r,_m(Cc))):(Pw(_r,wt.suspenseConfig),Ae=wt.eagerReducer===P?wt.eagerState:P(Ae,wt.action)),ve=wt,wt=wt.next}while(wt!==null&&wt!==j);bt||(vt=ve,W=Ae),hs(Ae,D.memoizedState)||(qo=!0),D.memoizedState=Ae,D.baseUpdate=vt,D.baseState=W,T.lastRenderedState=Ae}return[D.memoizedState,T.dispatch]}function lg(P){var D=RA();return typeof P=="function"&&(P=P()),D.memoizedState=D.baseState=P,P=D.queue={last:null,dispatch:null,lastRenderedReducer:Br,lastRenderedState:P},P=P.dispatch=pg.bind(null,Ha,P),[D.memoizedState,P]}function cg(P){return Cs(Br,P)}function ug(P,D,T,j){return P={tag:P,create:D,destroy:T,deps:j,next:null},Y===null?(Y={lastEffect:null},Y.lastEffect=P.next=P):(D=Y.lastEffect,D===null?Y.lastEffect=P.next=P:(T=D.next,D.next=P,P.next=T,Y.lastEffect=P)),P}function fp(P,D,T,j){var W=RA();Dt|=P,W.memoizedState=ug(D,T,void 0,j===void 0?null:j)}function Ic(P,D,T,j){var W=Ap();j=j===void 0?null:j;var Ae=void 0;if(Gi!==null){var ve=Gi.memoizedState;if(Ae=ve.destroy,j!==null&&Eu(j,ve.deps)){ug(0,T,Ae,j);return}}Dt|=P,W.memoizedState=ug(D,T,Ae,j)}function Ct(P,D){return fp(516,192,P,D)}function Sm(P,D){return Ic(516,192,P,D)}function Ag(P,D){if(typeof D=="function")return P=P(),D(P),function(){D(null)};if(D!=null)return P=P(),D.current=P,function(){D.current=null}}function fg(){}function Cu(P,D){return RA().memoizedState=[P,D===void 0?null:D],P}function xm(P,D){var T=Ap();D=D===void 0?null:D;var j=T.memoizedState;return j!==null&&D!==null&&Eu(D,j[1])?j[0]:(T.memoizedState=[P,D],P)}function pg(P,D,T){if(!(25>wc))throw Error(n(301));var j=P.alternate;if(P===Ha||j!==null&&j===Ha)if(wl=!0,P={expirationTime:mu,suspenseConfig:null,action:T,eagerReducer:null,eagerState:null,next:null},bi===null&&(bi=new Map),T=bi.get(D),T===void 0)bi.set(D,P);else{for(D=T;D.next!==null;)D=D.next;D.next=P}else{var W=ga(),Ae=pt.suspense;W=HA(W,P,Ae),Ae={expirationTime:W,suspenseConfig:Ae,action:T,eagerReducer:null,eagerState:null,next:null};var ve=D.last;if(ve===null)Ae.next=Ae;else{var vt=ve.next;vt!==null&&(Ae.next=vt),ve.next=Ae}if(D.last=Ae,P.expirationTime===0&&(j===null||j.expirationTime===0)&&(j=D.lastRenderedReducer,j!==null))try{var wt=D.lastRenderedState,bt=j(wt,T);if(Ae.eagerReducer=j,Ae.eagerState=bt,hs(bt,wt))return}catch{}finally{}Sc(P,W)}}var wu={readContext:ms,useCallback:ct,useContext:ct,useEffect:ct,useImperativeHandle:ct,useLayoutEffect:ct,useMemo:ct,useReducer:ct,useRef:ct,useState:ct,useDebugValue:ct,useResponder:ct,useDeferredValue:ct,useTransition:ct},yw={readContext:ms,useCallback:Cu,useContext:ms,useEffect:Ct,useImperativeHandle:function(P,D,T){return T=T!=null?T.concat([P]):null,fp(4,36,Ag.bind(null,D,P),T)},useLayoutEffect:function(P,D){return fp(4,36,P,D)},useMemo:function(P,D){var T=RA();return D=D===void 0?null:D,P=P(),T.memoizedState=[P,D],P},useReducer:function(P,D,T){var j=RA();return D=T!==void 0?T(D):D,j.memoizedState=j.baseState=D,P=j.queue={last:null,dispatch:null,lastRenderedReducer:P,lastRenderedState:D},P=P.dispatch=pg.bind(null,Ha,P),[j.memoizedState,P]},useRef:function(P){var D=RA();return P={current:P},D.memoizedState=P},useState:lg,useDebugValue:fg,useResponder:og,useDeferredValue:function(P,D){var T=lg(P),j=T[0],W=T[1];return Ct(function(){a.unstable_next(function(){var Ae=js.suspense;js.suspense=D===void 0?null:D;try{W(P)}finally{js.suspense=Ae}})},[P,D]),j},useTransition:function(P){var D=lg(!1),T=D[0],j=D[1];return[Cu(function(W){j(!0),a.unstable_next(function(){var Ae=js.suspense;js.suspense=P===void 0?null:P;try{j(!1),W()}finally{js.suspense=Ae}})},[P,T]),T]}},bm={readContext:ms,useCallback:xm,useContext:ms,useEffect:Sm,useImperativeHandle:function(P,D,T){return T=T!=null?T.concat([P]):null,Ic(4,36,Ag.bind(null,D,P),T)},useLayoutEffect:function(P,D){return Ic(4,36,P,D)},useMemo:function(P,D){var T=Ap();D=D===void 0?null:D;var j=T.memoizedState;return j!==null&&D!==null&&Eu(D,j[1])?j[0]:(P=P(),T.memoizedState=[P,D],P)},useReducer:Cs,useRef:function(){return Ap().memoizedState},useState:cg,useDebugValue:fg,useResponder:og,useDeferredValue:function(P,D){var T=cg(P),j=T[0],W=T[1];return Sm(function(){a.unstable_next(function(){var Ae=js.suspense;js.suspense=D===void 0?null:D;try{W(P)}finally{js.suspense=Ae}})},[P,D]),j},useTransition:function(P){var D=cg(!1),T=D[0],j=D[1];return[xm(function(W){j(!0),a.unstable_next(function(){var Ae=js.suspense;js.suspense=P===void 0?null:P;try{j(!1),W()}finally{js.suspense=Ae}})},[P,T]),T]}},Aa=null,Bc=null,Il=!1;function Iu(P,D){var T=Dl(5,null,null,0);T.elementType="DELETED",T.type="DELETED",T.stateNode=D,T.return=P,T.effectTag=8,P.lastEffect!==null?(P.lastEffect.nextEffect=T,P.lastEffect=T):P.firstEffect=P.lastEffect=T}function hg(P,D){switch(P.tag){case 5:return D=io(D,P.type,P.pendingProps),D!==null?(P.stateNode=D,!0):!1;case 6:return D=Si(D,P.pendingProps),D!==null?(P.stateNode=D,!0):!1;case 13:return!1;default:return!1}}function TA(P){if(Il){var D=Bc;if(D){var T=D;if(!hg(P,D)){if(D=cc(T),!D||!hg(P,D)){P.effectTag=P.effectTag&-1025|2,Il=!1,Aa=P;return}Iu(Aa,T)}Aa=P,Bc=cu(D)}else P.effectTag=P.effectTag&-1025|2,Il=!1,Aa=P}}function pp(P){for(P=P.return;P!==null&&P.tag!==5&&P.tag!==3&&P.tag!==13;)P=P.return;Aa=P}function ja(P){if(!y||P!==Aa)return!1;if(!Il)return pp(P),Il=!0,!1;var D=P.type;if(P.tag!==5||D!=="head"&&D!=="body"&&!ke(D,P.memoizedProps))for(D=Bc;D;)Iu(P,D),D=cc(D);if(pp(P),P.tag===13){if(!y)throw Error(n(316));if(P=P.memoizedState,P=P!==null?P.dehydrated:null,!P)throw Error(n(317));Bc=Ms(P)}else Bc=Aa?cc(P.stateNode):null;return!0}function gg(){y&&(Bc=Aa=null,Il=!1)}var hp=u.ReactCurrentOwner,qo=!1;function ws(P,D,T,j){D.child=P===null?ng(D,null,T,j):gu(D,P.child,T,j)}function Ii(P,D,T,j,W){T=T.render;var Ae=D.ref;return ds(D,W),j=ag(P,D,T,j,Ae,W),P!==null&&!qo?(D.updateQueue=P.updateQueue,D.effectTag&=-517,P.expirationTime<=W&&(P.expirationTime=0),si(P,D,W)):(D.effectTag|=1,ws(P,D,j,W),D.child)}function km(P,D,T,j,W,Ae){if(P===null){var ve=T.type;return typeof ve=="function"&&!kw(ve)&&ve.defaultProps===void 0&&T.compare===null&&T.defaultProps===void 0?(D.tag=15,D.type=ve,Qm(P,D,ve,j,W,Ae)):(P=Hm(T.type,null,j,null,D.mode,Ae),P.ref=D.ref,P.return=D,D.child=P)}return ve=P.child,WD)&&_A.set(P,D)))}}function Bg(P,D){P.expirationTimeP?D:P)}function fo(P){if(P.lastExpiredTime!==0)P.callbackExpirationTime=1073741823,P.callbackPriority=99,P.callbackNode=pu(Dw.bind(null,P));else{var D=Um(P),T=P.callbackNode;if(D===0)T!==null&&(P.callbackNode=null,P.callbackExpirationTime=0,P.callbackPriority=90);else{var j=ga();if(D===1073741823?j=99:D===1||D===2?j=95:(j=10*(1073741821-D)-10*(1073741821-j),j=0>=j?99:250>=j?98:5250>=j?97:95),T!==null){var W=P.callbackPriority;if(P.callbackExpirationTime===D&&W>=j)return;T!==PA&&Ce(T)}P.callbackExpirationTime=D,P.callbackPriority=j,D=D===1073741823?pu(Dw.bind(null,P)):gc(j,Wv.bind(null,P),{timeout:10*(1073741821-D)-Ni()}),P.callbackNode=D}}}function Wv(P,D){if(Mm=0,D)return D=ga(),jm(P,D),fo(P),null;var T=Um(P);if(T!==0){if(D=P.callbackNode,(yr&(rs|qs))!==En)throw Error(n(327));if(wp(),P===gi&&T===ns||Pu(P,T),Or!==null){var j=yr;yr|=rs;var W=qA(P);do try{pF();break}catch(vt){jA(P,vt)}while(1);if(la(),yr=j,yp.current=W,Yi===Tm)throw D=Lm,Pu(P,T),WA(P,T),fo(P),D;if(Or===null)switch(W=P.finishedWork=P.current.alternate,P.finishedExpirationTime=T,j=Yi,gi=null,j){case Bu:case Tm:throw Error(n(345));case Bi:jm(P,2=T){P.lastPingedTime=T,Pu(P,T);break}}if(Ae=Um(P),Ae!==0&&Ae!==T)break;if(j!==0&&j!==T){P.lastPingedTime=j;break}P.timeoutHandle=Re(Su.bind(null,P),W);break}Su(P);break;case vl:if(WA(P,T),j=P.lastSuspendedTime,T===j&&(P.nextKnownPendingLevel=Sw(W)),MA&&(W=P.lastPingedTime,W===0||W>=T)){P.lastPingedTime=T,Pu(P,T);break}if(W=Um(P),W!==0&&W!==T)break;if(j!==0&&j!==T){P.lastPingedTime=j;break}if(OA!==1073741823?j=10*(1073741821-OA)-Ni():Ya===1073741823?j=0:(j=10*(1073741821-Ya)-5e3,W=Ni(),T=10*(1073741821-T)-W,j=W-j,0>j&&(j=0),j=(120>j?120:480>j?480:1080>j?1080:1920>j?1920:3e3>j?3e3:4320>j?4320:1960*Cw(j/1960))-j,T=j?j=0:(W=ve.busyDelayMs|0,Ae=Ni()-(10*(1073741821-Ae)-(ve.timeoutMs|0||5e3)),j=Ae<=W?0:W+j-Ae),10 component higher in the tree to provide a loading indicator or placeholder to display.`+ml(W))}Yi!==Pc&&(Yi=Bi),Ae=mg(Ae,W),wt=j;do{switch(wt.tag){case 3:ve=Ae,wt.effectTag|=4096,wt.expirationTime=D;var Ve=Gv(wt,ve,D);It(wt,Ve);break e;case 1:ve=Ae;var At=wt.type,Wt=wt.stateNode;if((wt.effectTag&64)===0&&(typeof At.getDerivedStateFromError=="function"||Wt!==null&&typeof Wt.componentDidCatch=="function"&&(Du===null||!Du.has(Wt)))){wt.effectTag|=4096,wt.expirationTime=D;var vr=Yv(wt,ve,D);It(wt,vr);break e}}wt=wt.return}while(wt!==null)}Or=Jv(Or)}catch(Sn){D=Sn;continue}break}while(1)}function qA(){var P=yp.current;return yp.current=wu,P===null?wu:P}function Pw(P,D){PEp&&(Ep=P)}function fF(){for(;Or!==null;)Or=zv(Or)}function pF(){for(;Or!==null&&!Rt();)Or=zv(Or)}function zv(P){var D=Zv(P.alternate,P,ns);return P.memoizedProps=P.pendingProps,D===null&&(D=Jv(P)),ww.current=null,D}function Jv(P){Or=P;do{var D=Or.alternate;if(P=Or.return,(Or.effectTag&2048)===0){e:{var T=D;D=Or;var j=ns,W=D.pendingProps;switch(D.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:ii(D.type)&&Ma(D);break;case 3:yc(D),hr(D),W=D.stateNode,W.pendingContext&&(W.context=W.pendingContext,W.pendingContext=null),(T===null||T.child===null)&&ja(D)&&pa(D),Bl(D);break;case 5:sg(D);var Ae=ca(mc.current);if(j=D.type,T!==null&&D.stateNode!=null)ts(T,D,j,W,Ae),T.ref!==D.ref&&(D.effectTag|=128);else if(W){if(T=ca(uo.current),ja(D)){if(W=D,!y)throw Error(n(175));T=op(W.stateNode,W.type,W.memoizedProps,Ae,T,W),W.updateQueue=T,T=T!==null,T&&pa(D)}else{var ve=ht(j,W,Ae,T,D);vc(ve,D,!1,!1),D.stateNode=ve,lt(ve,j,W,Ae,T)&&pa(D)}D.ref!==null&&(D.effectTag|=128)}else if(D.stateNode===null)throw Error(n(166));break;case 6:if(T&&D.stateNode!=null)Gr(T,D,T.memoizedProps,W);else{if(typeof W!="string"&&D.stateNode===null)throw Error(n(166));if(T=ca(mc.current),Ae=ca(uo.current),ja(D)){if(T=D,!y)throw Error(n(176));(T=ap(T.stateNode,T.memoizedProps,T))&&pa(D)}else D.stateNode=He(W,T,Ae,D)}break;case 11:break;case 13:if(Vn($n,D),W=D.memoizedState,(D.effectTag&64)!==0){D.expirationTime=j;break e}W=W!==null,Ae=!1,T===null?D.memoizedProps.fallback!==void 0&&ja(D):(j=T.memoizedState,Ae=j!==null,W||j===null||(j=T.child.sibling,j!==null&&(ve=D.firstEffect,ve!==null?(D.firstEffect=j,j.nextEffect=ve):(D.firstEffect=D.lastEffect=j,j.nextEffect=null),j.effectTag=8))),W&&!Ae&&(D.mode&2)!==0&&(T===null&&D.memoizedProps.unstable_avoidThisFallback!==!0||($n.current&1)!==0?Yi===Bu&&(Yi=ha):((Yi===Bu||Yi===ha)&&(Yi=vl),Ep!==0&&gi!==null&&(WA(gi,ns),eD(gi,Ep)))),S&&W&&(D.effectTag|=4),w&&(W||Ae)&&(D.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:yc(D),Bl(D);break;case 10:wi(D);break;case 9:break;case 14:break;case 17:ii(D.type)&&Ma(D);break;case 19:if(Vn($n,D),W=D.memoizedState,W===null)break;if(Ae=(D.effectTag&64)!==0,ve=W.rendering,ve===null){if(Ae)Dc(W,!1);else if(Yi!==Bu||T!==null&&(T.effectTag&64)!==0)for(T=D.child;T!==null;){if(ve=up(T),ve!==null){for(D.effectTag|=64,Dc(W,!1),T=ve.updateQueue,T!==null&&(D.updateQueue=T,D.effectTag|=4),W.lastEffect===null&&(D.firstEffect=null),D.lastEffect=W.lastEffect,T=j,W=D.child;W!==null;)Ae=W,j=T,Ae.effectTag&=2,Ae.nextEffect=null,Ae.firstEffect=null,Ae.lastEffect=null,ve=Ae.alternate,ve===null?(Ae.childExpirationTime=0,Ae.expirationTime=j,Ae.child=null,Ae.memoizedProps=null,Ae.memoizedState=null,Ae.updateQueue=null,Ae.dependencies=null):(Ae.childExpirationTime=ve.childExpirationTime,Ae.expirationTime=ve.expirationTime,Ae.child=ve.child,Ae.memoizedProps=ve.memoizedProps,Ae.memoizedState=ve.memoizedState,Ae.updateQueue=ve.updateQueue,j=ve.dependencies,Ae.dependencies=j===null?null:{expirationTime:j.expirationTime,firstContext:j.firstContext,responders:j.responders}),W=W.sibling;On($n,$n.current&1|2,D),D=D.child;break e}T=T.sibling}}else{if(!Ae)if(T=up(ve),T!==null){if(D.effectTag|=64,Ae=!0,T=T.updateQueue,T!==null&&(D.updateQueue=T,D.effectTag|=4),Dc(W,!0),W.tail===null&&W.tailMode==="hidden"&&!ve.alternate){D=D.lastEffect=W.lastEffect,D!==null&&(D.nextEffect=null);break}}else Ni()>W.tailExpiration&&1W&&(W=j),ve>W&&(W=ve),Ae=Ae.sibling;T.childExpirationTime=W}if(D!==null)return D;P!==null&&(P.effectTag&2048)===0&&(P.firstEffect===null&&(P.firstEffect=Or.firstEffect),Or.lastEffect!==null&&(P.lastEffect!==null&&(P.lastEffect.nextEffect=Or.firstEffect),P.lastEffect=Or.lastEffect),1P?D:P}function Su(P){var D=_o();return lo(99,hF.bind(null,P,D)),null}function hF(P,D){do wp();while(wg!==null);if((yr&(rs|qs))!==En)throw Error(n(327));var T=P.finishedWork,j=P.finishedExpirationTime;if(T===null)return null;if(P.finishedWork=null,P.finishedExpirationTime=0,T===P.current)throw Error(n(177));P.callbackNode=null,P.callbackExpirationTime=0,P.callbackPriority=90,P.nextKnownPendingLevel=0;var W=Sw(T);if(P.firstPendingTime=W,j<=P.lastSuspendedTime?P.firstSuspendedTime=P.lastSuspendedTime=P.nextKnownPendingLevel=0:j<=P.firstSuspendedTime&&(P.firstSuspendedTime=j-1),j<=P.lastPingedTime&&(P.lastPingedTime=0),j<=P.lastExpiredTime&&(P.lastExpiredTime=0),P===gi&&(Or=gi=null,ns=0),1=T?ln(P,D,T):(On($n,$n.current&1,D),D=si(P,D,T),D!==null?D.sibling:null);On($n,$n.current&1,D);break;case 19:if(j=D.childExpirationTime>=T,(P.effectTag&64)!==0){if(j)return qa(P,D,T);D.effectTag|=64}if(W=D.memoizedState,W!==null&&(W.rendering=null,W.tail=null),On($n,$n.current,D),!j)return null}return si(P,D,T)}qo=!1}}else qo=!1;switch(D.expirationTime=0,D.tag){case 2:if(j=D.type,P!==null&&(P.alternate=null,D.alternate=null,D.effectTag|=2),P=D.pendingProps,W=Oe(D,Mn.current),ds(D,T),W=ag(null,D,j,P,W,T),D.effectTag|=1,typeof W=="object"&&W!==null&&typeof W.render=="function"&&W.$$typeof===void 0){if(D.tag=1,mw(),ii(j)){var Ae=!0;Ac(D)}else Ae=!1;D.memoizedState=W.state!==null&&W.state!==void 0?W.state:null;var ve=j.getDerivedStateFromProps;typeof ve=="function"&&er(D,j,ve,P),W.updater=Zr,D.stateNode=W,W._reactInternalFiber=D,jo(D,j,P,T),D=dp(null,D,j,!0,Ae,T)}else D.tag=0,ws(null,D,W,T),D=D.child;return D;case 16:if(W=D.elementType,P!==null&&(P.alternate=null,D.alternate=null,D.effectTag|=2),P=D.pendingProps,ye(W),W._status!==1)throw W._result;switch(W=W._result,D.type=W,Ae=D.tag=wF(W),P=Ci(W,P),Ae){case 0:D=LA(null,D,W,P,T);break;case 1:D=gp(null,D,W,P,T);break;case 11:D=Ii(null,D,W,P,T);break;case 14:D=km(null,D,W,Ci(W.type,P),j,T);break;default:throw Error(n(306,W,""))}return D;case 0:return j=D.type,W=D.pendingProps,W=D.elementType===j?W:Ci(j,W),LA(P,D,j,W,T);case 1:return j=D.type,W=D.pendingProps,W=D.elementType===j?W:Ci(j,W),gp(P,D,j,W,T);case 3:if(dg(D),j=D.updateQueue,j===null)throw Error(n(282));if(W=D.memoizedState,W=W!==null?W.element:null,me(D,j,D.pendingProps,null,T),j=D.memoizedState.element,j===W)gg(),D=si(P,D,T);else{if((W=D.stateNode.hydrate)&&(y?(Bc=cu(D.stateNode.containerInfo),Aa=D,W=Il=!0):W=!1),W)for(T=ng(D,null,j,T),D.child=T;T;)T.effectTag=T.effectTag&-3|1024,T=T.sibling;else ws(P,D,j,T),gg();D=D.child}return D;case 5:return Pm(D),P===null&&TA(D),j=D.type,W=D.pendingProps,Ae=P!==null?P.memoizedProps:null,ve=W.children,ke(j,W)?ve=null:Ae!==null&&ke(j,Ae)&&(D.effectTag|=16),Go(P,D),D.mode&4&&T!==1&&xe(j,W)?(D.expirationTime=D.childExpirationTime=1,D=null):(ws(P,D,ve,T),D=D.child),D;case 6:return P===null&&TA(D),null;case 13:return ln(P,D,T);case 4:return ig(D,D.stateNode.containerInfo),j=D.pendingProps,P===null?D.child=gu(D,null,j,T):ws(P,D,j,T),D.child;case 11:return j=D.type,W=D.pendingProps,W=D.elementType===j?W:Ci(j,W),Ii(P,D,j,W,T);case 7:return ws(P,D,D.pendingProps,T),D.child;case 8:return ws(P,D,D.pendingProps.children,T),D.child;case 12:return ws(P,D,D.pendingProps.children,T),D.child;case 10:e:{if(j=D.type._context,W=D.pendingProps,ve=D.memoizedProps,Ae=W.value,Ho(D,Ae),ve!==null){var vt=ve.value;if(Ae=hs(vt,Ae)?0:(typeof j._calculateChangedBits=="function"?j._calculateChangedBits(vt,Ae):1073741823)|0,Ae===0){if(ve.children===W.children&&!_i.current){D=si(P,D,T);break e}}else for(vt=D.child,vt!==null&&(vt.return=D);vt!==null;){var wt=vt.dependencies;if(wt!==null){ve=vt.child;for(var bt=wt.firstContext;bt!==null;){if(bt.context===j&&(bt.observedBits&Ae)!==0){vt.tag===1&&(bt=ys(T,null),bt.tag=2,tt(vt,bt)),vt.expirationTime"u")return!1;var D=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(D.isDisabled||!D.supportsFiber)return!0;try{var T=D.inject(P);xw=function(j){try{D.onCommitFiberRoot(T,j,void 0,(j.current.effectTag&64)===64)}catch{}},bw=function(j){try{D.onCommitFiberUnmount(T,j)}catch{}}}catch{}return!0}function CF(P,D,T,j){this.tag=P,this.key=T,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=D,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=j,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Dl(P,D,T,j){return new CF(P,D,T,j)}function kw(P){return P=P.prototype,!(!P||!P.isReactComponent)}function wF(P){if(typeof P=="function")return kw(P)?1:0;if(P!=null){if(P=P.$$typeof,P===N)return 11;if(P===te)return 14}return 2}function YA(P,D){var T=P.alternate;return T===null?(T=Dl(P.tag,D,P.key,P.mode),T.elementType=P.elementType,T.type=P.type,T.stateNode=P.stateNode,T.alternate=P,P.alternate=T):(T.pendingProps=D,T.effectTag=0,T.nextEffect=null,T.firstEffect=null,T.lastEffect=null),T.childExpirationTime=P.childExpirationTime,T.expirationTime=P.expirationTime,T.child=P.child,T.memoizedProps=P.memoizedProps,T.memoizedState=P.memoizedState,T.updateQueue=P.updateQueue,D=P.dependencies,T.dependencies=D===null?null:{expirationTime:D.expirationTime,firstContext:D.firstContext,responders:D.responders},T.sibling=P.sibling,T.index=P.index,T.ref=P.ref,T}function Hm(P,D,T,j,W,Ae){var ve=2;if(j=P,typeof P=="function")kw(P)&&(ve=1);else if(typeof P=="string")ve=5;else e:switch(P){case C:return xu(T.children,W,Ae,D);case F:ve=8,W|=7;break;case I:ve=8,W|=1;break;case v:return P=Dl(12,T,D,W|8),P.elementType=v,P.type=v,P.expirationTime=Ae,P;case U:return P=Dl(13,T,D,W),P.type=U,P.elementType=U,P.expirationTime=Ae,P;case z:return P=Dl(19,T,D,W),P.elementType=z,P.expirationTime=Ae,P;default:if(typeof P=="object"&&P!==null)switch(P.$$typeof){case b:ve=10;break e;case E:ve=9;break e;case N:ve=11;break e;case te:ve=14;break e;case le:ve=16,j=null;break e}throw Error(n(130,P==null?P:typeof P,""))}return D=Dl(ve,T,D,W),D.elementType=P,D.type=j,D.expirationTime=Ae,D}function xu(P,D,T,j){return P=Dl(7,P,j,D),P.expirationTime=T,P}function Qw(P,D,T){return P=Dl(6,P,null,D),P.expirationTime=T,P}function Fw(P,D,T){return D=Dl(4,P.children!==null?P.children:[],P.key,D),D.expirationTime=T,D.stateNode={containerInfo:P.containerInfo,pendingChildren:null,implementation:P.implementation},D}function IF(P,D,T){this.tag=D,this.current=null,this.containerInfo=P,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=je,this.pendingContext=this.context=null,this.hydrate=T,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function $v(P,D){var T=P.firstSuspendedTime;return P=P.lastSuspendedTime,T!==0&&T>=D&&P<=D}function WA(P,D){var T=P.firstSuspendedTime,j=P.lastSuspendedTime;TD||T===0)&&(P.lastSuspendedTime=D),D<=P.lastPingedTime&&(P.lastPingedTime=0),D<=P.lastExpiredTime&&(P.lastExpiredTime=0)}function eD(P,D){D>P.firstPendingTime&&(P.firstPendingTime=D);var T=P.firstSuspendedTime;T!==0&&(D>=T?P.firstSuspendedTime=P.lastSuspendedTime=P.nextKnownPendingLevel=0:D>=P.lastSuspendedTime&&(P.lastSuspendedTime=D+1),D>P.nextKnownPendingLevel&&(P.nextKnownPendingLevel=D))}function jm(P,D){var T=P.lastExpiredTime;(T===0||T>D)&&(P.lastExpiredTime=D)}function tD(P){var D=P._reactInternalFiber;if(D===void 0)throw typeof P.render=="function"?Error(n(188)):Error(n(268,Object.keys(P)));return P=Ee(D),P===null?null:P.stateNode}function rD(P,D){P=P.memoizedState,P!==null&&P.dehydrated!==null&&P.retryTime{"use strict";SEe.exports=PEe()});var kEe=_((gKt,bEe)=>{"use strict";var Hyt={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};bEe.exports=Hyt});var TEe=_((dKt,REe)=>{"use strict";var jyt=Object.assign||function(t){for(var e=1;e"}}]),t}(),QEe=function(){Wk(t,null,[{key:"fromJS",value:function(r){var o=r.width,a=r.height;return new t(o,a)}}]);function t(e,r){x6(this,t),this.width=e,this.height=r}return Wk(t,[{key:"fromJS",value:function(r){r(this.width,this.height)}},{key:"toString",value:function(){return""}}]),t}(),FEe=function(){function t(e,r){x6(this,t),this.unit=e,this.value=r}return Wk(t,[{key:"fromJS",value:function(r){r(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case tu.UNIT_POINT:return String(this.value);case tu.UNIT_PERCENT:return this.value+"%";case tu.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),t}();REe.exports=function(t,e){function r(u,A,p){var h=u[A];u[A]=function(){for(var C=arguments.length,I=Array(C),v=0;v1?I-1:0),b=1;b1&&arguments[1]!==void 0?arguments[1]:NaN,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,h=arguments.length>3&&arguments[3]!==void 0?arguments[3]:tu.DIRECTION_LTR;return u.call(this,A,p,h)}),jyt({Config:e.Config,Node:e.Node,Layout:t("Layout",qyt),Size:t("Size",QEe),Value:t("Value",FEe),getInstanceCount:function(){return e.getInstanceCount.apply(e,arguments)}},tu)}});var LEe=_((exports,module)=>{(function(t,e){typeof define=="function"&&define.amd?define([],function(){return e}):typeof module=="object"&&module.exports?module.exports=e:(t.nbind=t.nbind||{}).init=e})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(t,e){return function(){t&&t.apply(this,arguments);try{Module.ccall("nbind_init")}catch(r){e(r);return}e(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module<"u"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof Be=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(e,r){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),e=nodePath.normalize(e);var o=nodeFS.readFileSync(e);return r?o:o.toString()},Module.readBinary=function(e){var r=Module.read(e,!0);return r.buffer||(r=new Uint8Array(r)),assert(r.buffer),r},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module<"u"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr<"u"&&(Module.printErr=printErr),typeof read<"u"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(e));var r=read(e,"binary");return assert(typeof r=="object"),r},typeof scriptArgs<"u"?Module.arguments=scriptArgs:typeof arguments<"u"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(t,e){quit(t)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),Module.readAsync=function(e,r,o){var a=new XMLHttpRequest;a.open("GET",e,!0),a.responseType="arraybuffer",a.onload=function(){a.status==200||a.status==0&&a.response?r(a.response):o()},a.onerror=o,a.send(null)},typeof arguments<"u"&&(Module.arguments=arguments),typeof console<"u")Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump<"u"?function(t){dump(t)}:function(t){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle>"u"&&(Module.setWindowTitle=function(t){document.title=t})}else throw"Unknown runtime environment. Where are we?";function globalEval(t){eval.call(null,t)}!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(t,e){throw e}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(t){return tempRet0=t,t},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(t){STACKTOP=t},getNativeTypeSize:function(t){switch(t){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(t[t.length-1]==="*")return Runtime.QUANTUM_SIZE;if(t[0]==="i"){var e=parseInt(t.substr(1));return assert(e%8===0),e/8}else return 0}}},getNativeFieldSize:function(t){return Math.max(Runtime.getNativeTypeSize(t),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(t,e){return e==="double"||e==="i64"?t&7&&(assert((t&7)===4),t+=4):assert((t&3)===0),t},getAlignSize:function(t,e,r){return!r&&(t=="i64"||t=="double")?8:t?Math.min(e||(t?Runtime.getNativeFieldSize(t):0),Runtime.QUANTUM_SIZE):Math.min(e,8)},dynCall:function(t,e,r){return r&&r.length?Module["dynCall_"+t].apply(null,[e].concat(r)):Module["dynCall_"+t].call(null,e)},functionPointers:[],addFunction:function(t){for(var e=0;e>2],r=(e+t+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=r,r>=TOTAL_MEMORY){var o=enlargeMemory();if(!o)return HEAP32[DYNAMICTOP_PTR>>2]=e,0}return e},alignMemory:function(t,e){var r=t=Math.ceil(t/(e||16))*(e||16);return r},makeBigInt:function(t,e,r){var o=r?+(t>>>0)+ +(e>>>0)*4294967296:+(t>>>0)+ +(e|0)*4294967296;return o},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(t,e){t||abort("Assertion failed: "+e)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(t){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(t){var e=Runtime.stackAlloc(t.length);return writeArrayToMemory(t,e),e},stringToC:function(t){var e=0;if(t!=null&&t!==0){var r=(t.length<<2)+1;e=Runtime.stackAlloc(r),stringToUTF8(t,e,r)}return e}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,o,a,n){var u=getCFunc(e),A=[],p=0;if(a)for(var h=0;h>0]=e;break;case"i8":HEAP8[t>>0]=e;break;case"i16":HEAP16[t>>1]=e;break;case"i32":HEAP32[t>>2]=e;break;case"i64":tempI64=[e>>>0,(tempDouble=e,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[t>>2]=tempI64[0],HEAP32[t+4>>2]=tempI64[1];break;case"float":HEAPF32[t>>2]=e;break;case"double":HEAPF64[t>>3]=e;break;default:abort("invalid type for setValue: "+r)}}Module.setValue=setValue;function getValue(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return HEAP8[t>>0];case"i8":return HEAP8[t>>0];case"i16":return HEAP16[t>>1];case"i32":return HEAP32[t>>2];case"i64":return HEAP32[t>>2];case"float":return HEAPF32[t>>2];case"double":return HEAPF64[t>>3];default:abort("invalid type for setValue: "+e)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(t,e,r,o){var a,n;typeof t=="number"?(a=!0,n=t):(a=!1,n=t.length);var u=typeof e=="string"?e:null,A;if(r==ALLOC_NONE?A=o:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][r===void 0?ALLOC_STATIC:r](Math.max(n,u?1:e.length)),a){var o=A,p;for(assert((A&3)==0),p=A+(n&-4);o>2]=0;for(p=A+n;o>0]=0;return A}if(u==="i8")return t.subarray||t.slice?HEAPU8.set(t,A):HEAPU8.set(new Uint8Array(t),A),A;for(var h=0,C,I,v;h>0],r|=o,!(o==0&&!e||(a++,e&&a==e)););e||(e=a);var n="";if(r<128){for(var u=1024,A;e>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(t,t+Math.min(e,u))),n=n?n+A:A,t+=u,e-=u;return n}return Module.UTF8ToString(t)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(t){for(var e="";;){var r=HEAP8[t++>>0];if(!r)return e;e+=String.fromCharCode(r)}}Module.AsciiToString=AsciiToString;function stringToAscii(t,e){return writeAsciiToMemory(t,e,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(t,e){for(var r=e;t[r];)++r;if(r-e>16&&t.subarray&&UTF8Decoder)return UTF8Decoder.decode(t.subarray(e,r));for(var o,a,n,u,A,p,h="";;){if(o=t[e++],!o)return h;if(!(o&128)){h+=String.fromCharCode(o);continue}if(a=t[e++]&63,(o&224)==192){h+=String.fromCharCode((o&31)<<6|a);continue}if(n=t[e++]&63,(o&240)==224?o=(o&15)<<12|a<<6|n:(u=t[e++]&63,(o&248)==240?o=(o&7)<<18|a<<12|n<<6|u:(A=t[e++]&63,(o&252)==248?o=(o&3)<<24|a<<18|n<<12|u<<6|A:(p=t[e++]&63,o=(o&1)<<30|a<<24|n<<18|u<<12|A<<6|p))),o<65536)h+=String.fromCharCode(o);else{var C=o-65536;h+=String.fromCharCode(55296|C>>10,56320|C&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(t){return UTF8ArrayToString(HEAPU8,t)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(t,e,r,o){if(!(o>0))return 0;for(var a=r,n=r+o-1,u=0;u=55296&&A<=57343&&(A=65536+((A&1023)<<10)|t.charCodeAt(++u)&1023),A<=127){if(r>=n)break;e[r++]=A}else if(A<=2047){if(r+1>=n)break;e[r++]=192|A>>6,e[r++]=128|A&63}else if(A<=65535){if(r+2>=n)break;e[r++]=224|A>>12,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=2097151){if(r+3>=n)break;e[r++]=240|A>>18,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=67108863){if(r+4>=n)break;e[r++]=248|A>>24,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else{if(r+5>=n)break;e[r++]=252|A>>30,e[r++]=128|A>>24&63,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}}return e[r]=0,r-a}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(t,e,r){return stringToUTF8Array(t,HEAPU8,e,r)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(t){for(var e=0,r=0;r=55296&&o<=57343&&(o=65536+((o&1023)<<10)|t.charCodeAt(++r)&1023),o<=127?++e:o<=2047?e+=2:o<=65535?e+=3:o<=2097151?e+=4:o<=67108863?e+=5:e+=6}return e}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function demangle(t){var e=Module.___cxa_demangle||Module.__cxa_demangle;if(e){try{var r=t.substr(1),o=lengthBytesUTF8(r)+1,a=_malloc(o);stringToUTF8(r,a,o);var n=_malloc(4),u=e(a,0,0,n);if(getValue(n,"i32")===0&&u)return Pointer_stringify(u)}catch{}finally{a&&_free(a),n&&_free(n),u&&_free(u)}return t}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),t}function demangleAll(t){var e=/__Z[\w\d_]+/g;return t.replace(e,function(r){var o=demangle(r);return r===o?r:r+" ["+o+"]"})}function jsStackTrace(){var t=new Error;if(!t.stack){try{throw new Error(0)}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function stackTrace(){var t=jsStackTrace();return Module.extraStackTrace&&(t+=` -`+Module.extraStackTrace()),demangleAll(t)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var e=t.shift();if(typeof e=="function"){e();continue}var r=e.func;typeof r=="number"?e.arg===void 0?Module.dynCall_v(r):Module.dynCall_vi(r,e.arg):r(e.arg===void 0?null:e.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(t){__ATPRERUN__.unshift(t)}Module.addOnPreRun=addOnPreRun;function addOnInit(t){__ATINIT__.unshift(t)}Module.addOnInit=addOnInit;function addOnPreMain(t){__ATMAIN__.unshift(t)}Module.addOnPreMain=addOnPreMain;function addOnExit(t){__ATEXIT__.unshift(t)}Module.addOnExit=addOnExit;function addOnPostRun(t){__ATPOSTRUN__.unshift(t)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(t,e,r){var o=r>0?r:lengthBytesUTF8(t)+1,a=new Array(o),n=stringToUTF8Array(t,a,0,a.length);return e&&(a.length=n),a}Module.intArrayFromString=intArrayFromString;function intArrayToString(t){for(var e=[],r=0;r255&&(o&=255),e.push(String.fromCharCode(o))}return e.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(t,e,r){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var o,a;r&&(a=e+lengthBytesUTF8(t),o=HEAP8[a]),stringToUTF8(t,e,1/0),r&&(HEAP8[a]=o)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(t,e){HEAP8.set(t,e)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(t,e,r){for(var o=0;o>0]=t.charCodeAt(o);r||(HEAP8[e>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function t(e,r){var o=e>>>16,a=e&65535,n=r>>>16,u=r&65535;return a*u+(o*u+a*n<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(t){return froundBuffer[0]=t,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(t){t=t>>>0;for(var e=0;e<32;e++)if(t&1<<31-e)return e;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(t){return t<0?Math.ceil(t):Math.floor(t)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(t){return t}function addRunDependency(t){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(t){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var e=dependenciesFulfilled;dependenciesFulfilled=null,e()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(t,e,r,o,a,n,u,A){return _nbind.callbackSignatureList[t].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(t,e,r,o,a,n,u,A){return ASM_CONSTS[t](e,r,o,a,n,u,A)}function _emscripten_asm_const_iiiii(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiidddddd(t,e,r,o,a,n,u,A,p){return ASM_CONSTS[t](e,r,o,a,n,u,A,p)}function _emscripten_asm_const_iiididi(t,e,r,o,a,n,u){return ASM_CONSTS[t](e,r,o,a,n,u)}function _emscripten_asm_const_iiii(t,e,r,o){return ASM_CONSTS[t](e,r,o)}function _emscripten_asm_const_iiiid(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiiiii(t,e,r,o,a,n){return ASM_CONSTS[t](e,r,o,a,n)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(t,e){__ATEXIT__.unshift({func:t,arg:e})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(t,e,r,o){var a=arguments.length,n=a<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,r):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(t,e,r,o);else for(var A=t.length-1;A>=0;A--)(u=t[A])&&(n=(a<3?u(n):a>3?u(e,r,n):u(e,r))||n);return a>3&&n&&Object.defineProperty(e,r,n),n}function _defineHidden(t){return function(e,r){Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:t,writable:!0})}}var _nbind={};function __nbind_free_external(t){_nbind.externalList[t].dereference(t)}function __nbind_reference_external(t){_nbind.externalList[t].reference()}function _llvm_stackrestore(t){var e=_llvm_stacksave,r=e.LLVM_SAVEDSTACKS[t];e.LLVM_SAVEDSTACKS.splice(t,1),Runtime.stackRestore(r)}function __nbind_register_pool(t,e,r,o){_nbind.Pool.pageSize=t,_nbind.Pool.usedPtr=e/4,_nbind.Pool.rootPtr=r,_nbind.Pool.pagePtr=o/4,HEAP32[e/4]=16909060,HEAP8[e]==1&&(_nbind.bigEndian=!0),HEAP32[e/4]=0,_nbind.makeTypeKindTbl=(n={},n[1024]=_nbind.PrimitiveType,n[64]=_nbind.Int64Type,n[2048]=_nbind.BindClass,n[3072]=_nbind.BindClassPtr,n[4096]=_nbind.SharedClassPtr,n[5120]=_nbind.ArrayType,n[6144]=_nbind.ArrayType,n[7168]=_nbind.CStringType,n[9216]=_nbind.CallbackType,n[10240]=_nbind.BindType,n),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var a=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});a.proto=Module,_nbind.BindClass.list.push(a);var n}function _emscripten_set_main_loop_timing(t,e){if(Browser.mainLoop.timingMode=t,Browser.mainLoop.timingValue=e,!Browser.mainLoop.func)return 1;if(t==0)Browser.mainLoop.scheduler=function(){var u=Math.max(0,Browser.mainLoop.tickStartTime+e-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,u)},Browser.mainLoop.method="timeout";else if(t==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(t==2){if(!window.setImmediate){let n=function(u){u.source===window&&u.data===o&&(u.stopPropagation(),r.shift()())};var a=n,r=[],o="setimmediate";window.addEventListener("message",n,!0),window.setImmediate=function(A){r.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:o})):window.postMessage(o,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(t,e,r,o,a){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=t,Browser.mainLoop.arg=o;var n;typeof o<"u"?n=function(){Module.dynCall_vi(t,o)}:n=function(){Module.dynCall_v(t)};var u=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var p=Date.now(),h=Browser.mainLoop.queue.shift();if(h.func(h.arg),Browser.mainLoop.remainingBlockers){var C=Browser.mainLoop.remainingBlockers,I=C%1==0?C-1:Math.floor(C);h.counted?Browser.mainLoop.remainingBlockers=I:(I=I+.5,Browser.mainLoop.remainingBlockers=(8*C+I)/9)}if(console.log('main loop blocker "'+h.name+'" took '+(Date.now()-p)+" ms"),Browser.mainLoop.updateStatus(),u1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(n),!(u0?_emscripten_set_main_loop_timing(0,1e3/e):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),r)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var t=Browser.mainLoop.timingMode,e=Browser.mainLoop.timingValue,r=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(r,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(t,e),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var t=Module.statusMessage||"Please wait...",e=Browser.mainLoop.remainingBlockers,r=Browser.mainLoop.expectedBlockers;e?e"u"&&(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var t={};t.canHandle=function(n){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(n)},t.handle=function(n,u,A,p){var h=null;if(Browser.hasBlobConstructor)try{h=new Blob([n],{type:Browser.getMimetype(u)}),h.size!==n.length&&(h=new Blob([new Uint8Array(n).buffer],{type:Browser.getMimetype(u)}))}catch(b){Runtime.warnOnce("Blob constructor present but fails: "+b+"; falling back to blob builder")}if(!h){var C=new Browser.BlobBuilder;C.append(new Uint8Array(n).buffer),h=C.getBlob()}var I=Browser.URLObject.createObjectURL(h),v=new Image;v.onload=function(){assert(v.complete,"Image "+u+" could not be decoded");var E=document.createElement("canvas");E.width=v.width,E.height=v.height;var F=E.getContext("2d");F.drawImage(v,0,0),Module.preloadedImages[u]=E,Browser.URLObject.revokeObjectURL(I),A&&A(n)},v.onerror=function(E){console.log("Image "+I+" could not be decoded"),p&&p()},v.src=I},Module.preloadPlugins.push(t);var e={};e.canHandle=function(n){return!Module.noAudioDecoding&&n.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},e.handle=function(n,u,A,p){var h=!1;function C(F){h||(h=!0,Module.preloadedAudios[u]=F,A&&A(n))}function I(){h||(h=!0,Module.preloadedAudios[u]=new Audio,p&&p())}if(Browser.hasBlobConstructor){try{var v=new Blob([n],{type:Browser.getMimetype(u)})}catch{return I()}var b=Browser.URLObject.createObjectURL(v),E=new Audio;E.addEventListener("canplaythrough",function(){C(E)},!1),E.onerror=function(N){if(h)return;console.log("warning: browser could not fully decode audio "+u+", trying slower base64 approach");function U(z){for(var te="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",le="=",pe="",ue=0,ye=0,ae=0;ae=6;){var Ie=ue>>ye-6&63;ye-=6,pe+=te[Ie]}return ye==2?(pe+=te[(ue&3)<<4],pe+=le+le):ye==4&&(pe+=te[(ue&15)<<2],pe+=le),pe}E.src="data:audio/x-"+u.substr(-3)+";base64,"+U(n),C(E)},E.src=b,Browser.safeSetTimeout(function(){C(E)},1e4)}else return I()},Module.preloadPlugins.push(e);function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var o=Module.canvas;o&&(o.requestPointerLock=o.requestPointerLock||o.mozRequestPointerLock||o.webkitRequestPointerLock||o.msRequestPointerLock||function(){},o.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},o.exitPointerLock=o.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&o.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))},createContext:function(t,e,r,o){if(e&&Module.ctx&&t==Module.canvas)return Module.ctx;var a,n;if(e){var u={antialias:!1,alpha:!1};if(o)for(var A in o)u[A]=o[A];n=GL.createContext(t,u),n&&(a=GL.getContext(n).GLctx)}else a=t.getContext("2d");return a?(r&&(e||assert(typeof GLctx>"u","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=a,e&&GL.makeContextCurrent(n),Module.useWebGL=e,Browser.moduleContextCreatedCallbacks.forEach(function(p){p()}),Browser.init()),a):null},destroyContext:function(t,e,r){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(t,e,r){Browser.lockPointer=t,Browser.resizeCanvas=e,Browser.vrDevice=r,typeof Browser.lockPointer>"u"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas>"u"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice>"u"&&(Browser.vrDevice=null);var o=Module.canvas;function a(){Browser.isFullscreen=!1;var u=o.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===u?(o.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},o.exitFullscreen=o.exitFullscreen.bind(document),Browser.lockPointer&&o.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(u.parentNode.insertBefore(o,u),u.parentNode.removeChild(u),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(o)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",a,!1),document.addEventListener("mozfullscreenchange",a,!1),document.addEventListener("webkitfullscreenchange",a,!1),document.addEventListener("MSFullscreenChange",a,!1));var n=document.createElement("div");o.parentNode.insertBefore(n,o),n.appendChild(o),n.requestFullscreen=n.requestFullscreen||n.mozRequestFullScreen||n.msRequestFullscreen||(n.webkitRequestFullscreen?function(){n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(n.webkitRequestFullScreen?function(){n.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),r?n.requestFullscreen({vrDisplay:r}):n.requestFullscreen()},requestFullScreen:function(t,e,r){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(o,a,n){return Browser.requestFullscreen(o,a,n)},Browser.requestFullscreen(t,e,r)},nextRAF:0,fakeRequestAnimationFrame:function(t){var e=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=e+1e3/60;else for(;e+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var r=Math.max(Browser.nextRAF-e,0);setTimeout(t,r)},requestAnimationFrame:function t(e){typeof window>"u"?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(t){return function(){if(!ABORT)return t.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var t=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],t.forEach(function(e){e()})}},safeRequestAnimationFrame:function(t){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))})},safeSetTimeout:function(t,e){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))},e)},safeSetInterval:function(t,e){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&t()},e)},getMimetype:function(t){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[t.substr(t.lastIndexOf(".")+1)]},getUserMedia:function(t){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(t)},getMovementX:function(t){return t.movementX||t.mozMovementX||t.webkitMovementX||0},getMovementY:function(t){return t.movementY||t.mozMovementY||t.webkitMovementY||0},getMouseWheelDelta:function(t){var e=0;switch(t.type){case"DOMMouseScroll":e=t.detail;break;case"mousewheel":e=t.wheelDelta;break;case"wheel":e=t.deltaY;break;default:throw"unrecognized mouse wheel event: "+t.type}return e},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(t){if(Browser.pointerLock)t.type!="mousemove"&&"mozMovementX"in t?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(t),Browser.mouseMovementY=Browser.getMovementY(t)),typeof SDL<"u"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var e=Module.canvas.getBoundingClientRect(),r=Module.canvas.width,o=Module.canvas.height,a=typeof window.scrollX<"u"?window.scrollX:window.pageXOffset,n=typeof window.scrollY<"u"?window.scrollY:window.pageYOffset;if(t.type==="touchstart"||t.type==="touchend"||t.type==="touchmove"){var u=t.touch;if(u===void 0)return;var A=u.pageX-(a+e.left),p=u.pageY-(n+e.top);A=A*(r/e.width),p=p*(o/e.height);var h={x:A,y:p};if(t.type==="touchstart")Browser.lastTouches[u.identifier]=h,Browser.touches[u.identifier]=h;else if(t.type==="touchend"||t.type==="touchmove"){var C=Browser.touches[u.identifier];C||(C=h),Browser.lastTouches[u.identifier]=C,Browser.touches[u.identifier]=h}return}var I=t.pageX-(a+e.left),v=t.pageY-(n+e.top);I=I*(r/e.width),v=v*(o/e.height),Browser.mouseMovementX=I-Browser.mouseX,Browser.mouseMovementY=v-Browser.mouseY,Browser.mouseX=I,Browser.mouseY=v}},asyncLoad:function(t,e,r,o){var a=o?"":"al "+t;Module.readAsync(t,function(n){assert(n,'Loading data file "'+t+'" failed (no arrayBuffer).'),e(new Uint8Array(n)),a&&removeRunDependency(a)},function(n){if(r)r();else throw'Loading data file "'+t+'" failed.'}),a&&addRunDependency(a)},resizeListeners:[],updateResizeListeners:function(){var t=Module.canvas;Browser.resizeListeners.forEach(function(e){e(t.width,t.height)})},setCanvasSize:function(t,e,r){var o=Module.canvas;Browser.updateCanvasDimensions(o,t,e),r||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t&-8388609,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},updateCanvasDimensions:function(t,e,r){e&&r?(t.widthNative=e,t.heightNative=r):(e=t.widthNative,r=t.heightNative);var o=e,a=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(o/a>2];return e},getStr:function(){var t=Pointer_stringify(SYSCALLS.get());return t},get64:function(){var t=SYSCALLS.get(),e=SYSCALLS.get();return t>=0?assert(e===0):assert(e===-1),t},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD();return FS.close(r),0}catch(o){return(typeof FS>"u"||!(o instanceof FS.ErrnoError))&&abort(o),-o.errno}}function ___syscall54(t,e){SYSCALLS.varargs=e;try{return 0}catch(r){return(typeof FS>"u"||!(r instanceof FS.ErrnoError))&&abort(r),-r.errno}}function _typeModule(t){var e=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function r(p,h,C,I,v,b){if(h==1){var E=I&896;(E==128||E==256||E==384)&&(p="X const")}var F;return b?F=C.replace("X",p).replace("Y",v):F=p.replace("X",C).replace("Y",v),F.replace(/([*&]) (?=[*&])/g,"$1")}function o(p,h,C,I,v){throw new Error(p+" type "+C.replace("X",h+"?")+(I?" with flag "+I:"")+" in "+v)}function a(p,h,C,I,v,b,E,F){b===void 0&&(b="X"),F===void 0&&(F=1);var N=C(p);if(N)return N;var U=I(p),z=U.placeholderFlag,te=e[z];E&&te&&(b=r(E[2],E[0],b,te[0],"?",!0));var le;z==0&&(le="Unbound"),z>=10&&(le="Corrupt"),F>20&&(le="Deeply nested"),le&&o(le,p,b,z,v||"?");var pe=U.paramList[0],ue=a(pe,h,C,I,v,b,te,F+1),ye,ae={flags:te[0],id:p,name:"",paramList:[ue]},Ie=[],Fe="?";switch(U.placeholderFlag){case 1:ye=ue.spec;break;case 2:if((ue.flags&15360)==1024&&ue.spec.ptrSize==1){ae.flags=7168;break}case 3:case 6:case 5:ye=ue.spec,ue.flags&15360;break;case 8:Fe=""+U.paramList[1],ae.paramList.push(U.paramList[1]);break;case 9:for(var g=0,Ee=U.paramList[1];g>2]=t),t}function _llvm_stacksave(){var t=_llvm_stacksave;return t.LLVM_SAVEDSTACKS||(t.LLVM_SAVEDSTACKS=[]),t.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),t.LLVM_SAVEDSTACKS.length-1}function ___syscall140(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=SYSCALLS.get(),u=SYSCALLS.get(),A=a;return FS.llseek(r,A,u),HEAP32[n>>2]=r.position,r.getdents&&A===0&&u===0&&(r.getdents=null),0}catch(p){return(typeof FS>"u"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall146(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.get(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(C,I){var v=___syscall146.buffers[C];assert(v),I===0||I===10?((C===1?Module.print:Module.printErr)(UTF8ArrayToString(v,0)),v.length=0):v.push(I)});for(var u=0;u>2],p=HEAP32[o+(u*8+4)>>2],h=0;h"u"||!(C instanceof FS.ErrnoError))&&abort(C),-C.errno}}function __nbind_finish(){for(var t=0,e=_nbind.BindClass.list;tt.pageSize/2||e>t.pageSize-r){var o=_nbind.typeNameTbl.NBind.proto;return o.lalloc(e)}else return HEAPU32[t.usedPtr]=r+e,t.rootPtr+r},t.lreset=function(e,r){var o=HEAPU32[t.pagePtr];if(o){var a=_nbind.typeNameTbl.NBind.proto;a.lreset(e,r)}else HEAPU32[t.usedPtr]=e},t}();_nbind.Pool=Pool;function constructType(t,e){var r=t==10240?_nbind.makeTypeNameTbl[e.name]||_nbind.BindType:_nbind.makeTypeKindTbl[t],o=new r(e);return typeIdTbl[e.id]=o,_nbind.typeNameTbl[e.name]=o,o}_nbind.constructType=constructType;function getType(t){return typeIdTbl[t]}_nbind.getType=getType;function queryType(t){var e=HEAPU8[t],r=_nbind.structureList[e][1];t/=4,r<0&&(++t,r=HEAPU32[t]+1);var o=Array.prototype.slice.call(HEAPU32.subarray(t+1,t+1+r));return e==9&&(o=[o[0],o.slice(1)]),{paramList:o,placeholderFlag:e}}_nbind.queryType=queryType;function getTypes(t,e){return t.map(function(r){return typeof r=="number"?_nbind.getComplexType(r,constructType,getType,queryType,e):_nbind.typeNameTbl[r]})}_nbind.getTypes=getTypes;function readTypeIdList(t,e){return Array.prototype.slice.call(HEAPU32,t/4,t/4+e)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(t){for(var e=t;HEAPU8[e++];);return String.fromCharCode.apply("",HEAPU8.subarray(t,e-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(t){var e={};if(t)for(;;){var r=HEAPU32[t/4];if(!r)break;e[readAsciiString(r)]=!0,t+=4}return e}_nbind.readPolicyList=readPolicyList;function getDynCall(t,e){var r={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},o=t.map(function(n){return r[n.name]||"i"}).join(""),a=Module["dynCall_"+o];if(!a)throw new Error("dynCall_"+o+" not found for "+e+"("+t.map(function(n){return n.name}).join(", ")+")");return a}_nbind.getDynCall=getDynCall;function addMethod(t,e,r,o){var a=t[e];t.hasOwnProperty(e)&&a?((a.arity||a.arity===0)&&(a=_nbind.makeOverloader(a,a.arity),t[e]=a),a.addMethod(r,o)):(r.arity=o,t[e]=r)}_nbind.addMethod=addMethod;function throwError(t){throw new Error(t)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.heap=HEAPU32,r.ptrSize=4,r}return e.prototype.needsWireRead=function(r){return!!this.wireRead||!!this.makeWireRead},e.prototype.needsWireWrite=function(r){return!!this.wireWrite||!!this.makeWireWrite},e}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(t){__extends(e,t);function e(r){var o=t.call(this,r)||this,a=r.flags&32?{32:HEAPF32,64:HEAPF64}:r.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return o.heap=a[r.ptrSize*8],o.ptrSize=r.ptrSize,o}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="number")return a;throw new Error("Type mismatch")}},e}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(t,e){if(t==null){if(e&&e.Nullable)return 0;throw new Error("Type mismatch")}if(e&&e.Strict){if(typeof t!="string")throw new Error("Type mismatch")}else t=t.toString();var r=Module.lengthBytesUTF8(t)+1,o=_nbind.Pool.lalloc(r);return Module.stringToUTF8Array(t,HEAPU8,o,r),o}_nbind.pushCString=pushCString;function popCString(t){return t===0?null:Module.Pointer_stringify(t)}_nbind.popCString=popCString;var CStringType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=popCString,r.wireWrite=pushCString,r.readResources=[_nbind.resources.pool],r.writeResources=[_nbind.resources.pool],r}return e.prototype.makeWireWrite=function(r,o){return function(a){return pushCString(a,o)}},e}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=function(o){return!!o},r}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireRead=function(r){return"!!("+r+")"},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="boolean")return a;throw new Error("Type mismatch")}||r},e}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function t(){}return t.prototype.persist=function(){this.__nbindState|=1},t}();_nbind.Wrapper=Wrapper;function makeBound(t,e){var r=function(o){__extends(a,o);function a(n,u,A,p){var h=o.call(this)||this;if(!(h instanceof a))return new(Function.prototype.bind.apply(a,Array.prototype.concat.apply([null],arguments)));var C=u,I=A,v=p;if(n!==_nbind.ptrMarker){var b=h.__nbindConstructor.apply(h,arguments);C=4608,v=HEAPU32[b/4],I=HEAPU32[b/4+1]}var E={configurable:!0,enumerable:!1,value:null,writable:!1},F={__nbindFlags:C,__nbindPtr:I};v&&(F.__nbindShared=v,_nbind.mark(h));for(var N=0,U=Object.keys(F);N>=1;var r=_nbind.valueList[t];return _nbind.valueList[t]=firstFreeValue,firstFreeValue=t,r}else{if(e)return _nbind.popShared(t,e);throw new Error("Invalid value slot "+t)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(t){return typeof t=="number"?t:pushValue(t)*4096+valueBase}function pop64(t){return t=3?u=Buffer.from(n):u=new Buffer(n),u.copy(o)}else getBuffer(o).set(n)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var t=0,e=dirtyList;t>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(t,e,r,o,a,n){try{Module.dynCall_viiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_vif(t,e,r){try{Module.dynCall_vif(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_vid(t,e,r){try{Module.dynCall_vid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_fiff(t,e,r,o){try{return Module.dynCall_fiff(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vi(t,e){try{Module.dynCall_vi(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_vii(t,e,r){try{Module.dynCall_vii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_ii(t,e){try{return Module.dynCall_ii(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_viddi(t,e,r,o,a){try{Module.dynCall_viddi(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_vidd(t,e,r,o){try{Module.dynCall_vidd(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iiii(t,e,r,o){try{return Module.dynCall_iiii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_diii(t,e,r,o){try{return Module.dynCall_diii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_di(t,e){try{return Module.dynCall_di(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_iid(t,e,r){try{return Module.dynCall_iid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iii(t,e,r){try{return Module.dynCall_iii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiddi(t,e,r,o,a,n){try{Module.dynCall_viiddi(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiiiii(t,e,r,o,a,n,u){try{Module.dynCall_viiiiii(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(t,e,r){try{return Module.dynCall_dii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_i(t){try{return Module.dynCall_i(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_iiiiii(t,e,r,o,a,n){try{return Module.dynCall_iiiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiid(t,e,r,o,a){try{Module.dynCall_viiid(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_viififi(t,e,r,o,a,n,u){try{Module.dynCall_viififi(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(t,e,r,o){try{Module.dynCall_viii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_v(t){try{Module.dynCall_v(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_viid(t,e,r,o){try{Module.dynCall_viid(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_idd(t,e,r){try{return Module.dynCall_idd(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiii(t,e,r,o,a){try{Module.dynCall_viiii(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(t,e,r){var o=new t.Int8Array(r),a=new t.Int16Array(r),n=new t.Int32Array(r),u=new t.Uint8Array(r),A=new t.Uint16Array(r),p=new t.Uint32Array(r),h=new t.Float32Array(r),C=new t.Float64Array(r),I=e.DYNAMICTOP_PTR|0,v=e.tempDoublePtr|0,b=e.ABORT|0,E=e.STACKTOP|0,F=e.STACK_MAX|0,N=e.cttz_i8|0,U=e.___dso_handle|0,z=0,te=0,le=0,pe=0,ue=t.NaN,ye=t.Infinity,ae=0,Ie=0,Fe=0,g=0,Ee=0,De=0,ce=t.Math.floor,ne=t.Math.abs,ee=t.Math.sqrt,we=t.Math.pow,be=t.Math.cos,ht=t.Math.sin,H=t.Math.tan,lt=t.Math.acos,Te=t.Math.asin,ke=t.Math.atan,xe=t.Math.atan2,He=t.Math.exp,Re=t.Math.log,ze=t.Math.ceil,je=t.Math.imul,x=t.Math.min,w=t.Math.max,S=t.Math.clz32,y=t.Math.fround,R=e.abort,J=e.assert,X=e.enlargeMemory,Z=e.getTotalMemory,ie=e.abortOnCannotGrowMemory,Pe=e.invoke_viiiii,Le=e.invoke_vif,ot=e.invoke_vid,dt=e.invoke_fiff,jt=e.invoke_vi,$t=e.invoke_vii,xt=e.invoke_ii,an=e.invoke_viddi,kr=e.invoke_vidd,mr=e.invoke_iiii,xr=e.invoke_diii,Wr=e.invoke_di,Kn=e.invoke_iid,Ns=e.invoke_iii,Ti=e.invoke_viiddi,ps=e.invoke_viiiiii,io=e.invoke_dii,Si=e.invoke_i,Os=e.invoke_iiiiii,so=e.invoke_viiid,cc=e.invoke_viififi,cu=e.invoke_viii,op=e.invoke_v,ap=e.invoke_viid,Ms=e.invoke_idd,Dn=e.invoke_viiii,oo=e._emscripten_asm_const_iiiii,Us=e._emscripten_asm_const_iiidddddd,ml=e._emscripten_asm_const_iiiid,yl=e.__nbind_reference_external,ao=e._emscripten_asm_const_iiiiiiii,Vn=e._removeAccessorPrefix,On=e._typeModule,Li=e.__nbind_register_pool,Mn=e.__decorate,_i=e._llvm_stackrestore,tr=e.___cxa_atexit,Oe=e.__extends,ii=e.__nbind_get_value_object,Ma=e.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,hr=e._emscripten_set_main_loop_timing,uc=e.__nbind_register_primitive,uu=e.__nbind_register_type,Ac=e._emscripten_memcpy_big,El=e.__nbind_register_function,vA=e.___setErrNo,Au=e.__nbind_register_class,Ce=e.__nbind_finish,Rt=e._abort,fc=e._nbind_value,Hi=e._llvm_stacksave,fu=e.___syscall54,Yt=e._defineHidden,Cl=e._emscripten_set_main_loop,DA=e._emscripten_get_now,lp=e.__nbind_register_callback_signature,pc=e._emscripten_asm_const_iiiiii,PA=e.__nbind_free_external,Qn=e._emscripten_asm_const_iiii,hi=e._emscripten_asm_const_iiididi,hc=e.___syscall6,SA=e._atexit,sa=e.___syscall140,Ni=e.___syscall146,_o=y(0);let Ze=y(0);function lo(s){s=s|0;var l=0;return l=E,E=E+s|0,E=E+15&-16,l|0}function gc(){return E|0}function pu(s){s=s|0,E=s}function ji(s,l){s=s|0,l=l|0,E=s,F=l}function hu(s,l){s=s|0,l=l|0,z||(z=s,te=l)}function xA(s){s=s|0,De=s}function Ua(){return De|0}function dc(){var s=0,l=0;Dr(8104,8,400)|0,Dr(8504,408,540)|0,s=9044,l=s+44|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o[9088]=0,o[9089]=1,n[2273]=0,n[2274]=948,n[2275]=948,tr(17,8104,U|0)|0}function hs(s){s=s|0,ft(s+948|0)}function Ut(s){return s=y(s),((Du(s)|0)&2147483647)>>>0>2139095040|0}function Fn(s,l,c){s=s|0,l=l|0,c=c|0;e:do if(n[s+(l<<3)+4>>2]|0)s=s+(l<<3)|0;else{if((l|2|0)==3&&n[s+60>>2]|0){s=s+56|0;break}switch(l|0){case 0:case 2:case 4:case 5:{if(n[s+52>>2]|0){s=s+48|0;break e}break}default:}if(n[s+68>>2]|0){s=s+64|0;break}else{s=(l|1|0)==5?948:c;break}}while(0);return s|0}function Ci(s){s=s|0;var l=0;return l=pD(1e3)|0,oa(s,(l|0)!=0,2456),n[2276]=(n[2276]|0)+1,Dr(l|0,8104,1e3)|0,o[s+2>>0]|0&&(n[l+4>>2]=2,n[l+12>>2]=4),n[l+976>>2]=s,l|0}function oa(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=E,E=E+16|0,f=d,l||(n[f>>2]=c,mg(s,5,3197,f)),E=d}function co(){return Ci(956)|0}function _s(s){s=s|0;var l=0;return l=Kt(1e3)|0,aa(l,s),oa(n[s+976>>2]|0,1,2456),n[2276]=(n[2276]|0)+1,n[l+944>>2]=0,l|0}function aa(s,l){s=s|0,l=l|0;var c=0;Dr(s|0,l|0,948)|0,Fm(s+948|0,l+948|0),c=s+960|0,s=l+960|0,l=c+40|0;do n[c>>2]=n[s>>2],c=c+4|0,s=s+4|0;while((c|0)<(l|0))}function la(s){s=s|0;var l=0,c=0,f=0,d=0;if(l=s+944|0,c=n[l>>2]|0,c|0&&(Ho(c+948|0,s)|0,n[l>>2]=0),c=wi(s)|0,c|0){l=0;do n[(gs(s,l)|0)+944>>2]=0,l=l+1|0;while((l|0)!=(c|0))}c=s+948|0,f=n[c>>2]|0,d=s+952|0,l=n[d>>2]|0,(l|0)!=(f|0)&&(n[d>>2]=l+(~((l+-4-f|0)>>>2)<<2)),ds(c),hD(s),n[2276]=(n[2276]|0)+-1}function Ho(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0;f=n[s>>2]|0,k=s+4|0,c=n[k>>2]|0,m=c;e:do if((f|0)==(c|0))d=f,B=4;else for(s=f;;){if((n[s>>2]|0)==(l|0)){d=s,B=4;break e}if(s=s+4|0,(s|0)==(c|0)){s=0;break}}while(0);return(B|0)==4&&((d|0)!=(c|0)?(f=d+4|0,s=m-f|0,l=s>>2,l&&(Ow(d|0,f|0,s|0)|0,c=n[k>>2]|0),s=d+(l<<2)|0,(c|0)==(s|0)||(n[k>>2]=c+(~((c+-4-s|0)>>>2)<<2)),s=1):s=0),s|0}function wi(s){return s=s|0,(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2|0}function gs(s,l){s=s|0,l=l|0;var c=0;return c=n[s+948>>2]|0,(n[s+952>>2]|0)-c>>2>>>0>l>>>0?s=n[c+(l<<2)>>2]|0:s=0,s|0}function ds(s){s=s|0;var l=0,c=0,f=0,d=0;f=E,E=E+32|0,l=f,d=n[s>>2]|0,c=(n[s+4>>2]|0)-d|0,((n[s+8>>2]|0)-d|0)>>>0>c>>>0&&(d=c>>2,Cp(l,d,d,s+8|0),wg(s,l),UA(l)),E=f}function ms(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;M=wi(s)|0;do if(M|0){if((n[(gs(s,0)|0)+944>>2]|0)==(s|0)){if(!(Ho(s+948|0,l)|0))break;Dr(l+400|0,8504,540)|0,n[l+944>>2]=0,Ne(s);break}B=n[(n[s+976>>2]|0)+12>>2]|0,k=s+948|0,Q=(B|0)==0,c=0,m=0;do f=n[(n[k>>2]|0)+(m<<2)>>2]|0,(f|0)==(l|0)?Ne(s):(d=_s(f)|0,n[(n[k>>2]|0)+(c<<2)>>2]=d,n[d+944>>2]=s,Q||TR[B&15](f,d,s,c),c=c+1|0),m=m+1|0;while((m|0)!=(M|0));if(c>>>0>>0){Q=s+948|0,k=s+952|0,B=c,c=n[k>>2]|0;do m=(n[Q>>2]|0)+(B<<2)|0,f=m+4|0,d=c-f|0,l=d>>2,l&&(Ow(m|0,f|0,d|0)|0,c=n[k>>2]|0),d=c,f=m+(l<<2)|0,(d|0)!=(f|0)&&(c=d+(~((d+-4-f|0)>>>2)<<2)|0,n[k>>2]=c),B=B+1|0;while((B|0)!=(M|0))}}while(0)}function Hs(s){s=s|0;var l=0,c=0,f=0,d=0;Un(s,(wi(s)|0)==0,2491),Un(s,(n[s+944>>2]|0)==0,2545),l=s+948|0,c=n[l>>2]|0,f=s+952|0,d=n[f>>2]|0,(d|0)!=(c|0)&&(n[f>>2]=d+(~((d+-4-c|0)>>>2)<<2)),ds(l),l=s+976|0,c=n[l>>2]|0,Dr(s|0,8104,1e3)|0,o[c+2>>0]|0&&(n[s+4>>2]=2,n[s+12>>2]=4),n[l>>2]=c}function Un(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=E,E=E+16|0,f=d,l||(n[f>>2]=c,Ao(s,5,3197,f)),E=d}function Pn(){return n[2276]|0}function ys(){var s=0;return s=pD(20)|0,We((s|0)!=0,2592),n[2277]=(n[2277]|0)+1,n[s>>2]=n[239],n[s+4>>2]=n[240],n[s+8>>2]=n[241],n[s+12>>2]=n[242],n[s+16>>2]=n[243],s|0}function We(s,l){s=s|0,l=l|0;var c=0,f=0;f=E,E=E+16|0,c=f,s||(n[c>>2]=l,Ao(0,5,3197,c)),E=f}function tt(s){s=s|0,hD(s),n[2277]=(n[2277]|0)+-1}function It(s,l){s=s|0,l=l|0;var c=0;l?(Un(s,(wi(s)|0)==0,2629),c=1):(c=0,l=0),n[s+964>>2]=l,n[s+988>>2]=c}function nr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=E,E=E+16|0,m=f+8|0,d=f+4|0,B=f,n[d>>2]=l,Un(s,(n[l+944>>2]|0)==0,2709),Un(s,(n[s+964>>2]|0)==0,2763),$(s),l=s+948|0,n[B>>2]=(n[l>>2]|0)+(c<<2),n[m>>2]=n[B>>2],me(l,m,d)|0,n[(n[d>>2]|0)+944>>2]=s,Ne(s),E=f}function $(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;if(c=wi(s)|0,c|0&&(n[(gs(s,0)|0)+944>>2]|0)!=(s|0)){f=n[(n[s+976>>2]|0)+12>>2]|0,d=s+948|0,m=(f|0)==0,l=0;do B=n[(n[d>>2]|0)+(l<<2)>>2]|0,k=_s(B)|0,n[(n[d>>2]|0)+(l<<2)>>2]=k,n[k+944>>2]=s,m||TR[f&15](B,k,s,l),l=l+1|0;while((l|0)!=(c|0))}}function me(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0;et=E,E=E+64|0,q=et+52|0,k=et+48|0,se=et+28|0,Ge=et+24|0,Me=et+20|0,Qe=et,f=n[s>>2]|0,m=f,l=f+((n[l>>2]|0)-m>>2<<2)|0,f=s+4|0,d=n[f>>2]|0,B=s+8|0;do if(d>>>0<(n[B>>2]|0)>>>0){if((l|0)==(d|0)){n[l>>2]=n[c>>2],n[f>>2]=(n[f>>2]|0)+4;break}_A(s,l,d,l+4|0),l>>>0<=c>>>0&&(c=(n[f>>2]|0)>>>0>c>>>0?c+4|0:c),n[l>>2]=n[c>>2]}else{f=(d-m>>2)+1|0,d=L(s)|0,d>>>0>>0&&Jr(s),O=n[s>>2]|0,M=(n[B>>2]|0)-O|0,m=M>>1,Cp(Qe,M>>2>>>0>>1>>>0?m>>>0>>0?f:m:d,l-O>>2,s+8|0),O=Qe+8|0,f=n[O>>2]|0,m=Qe+12|0,M=n[m>>2]|0,B=M,Q=f;do if((f|0)==(M|0)){if(M=Qe+4|0,f=n[M>>2]|0,Xe=n[Qe>>2]|0,d=Xe,f>>>0<=Xe>>>0){f=B-d>>1,f=(f|0)==0?1:f,Cp(se,f,f>>>2,n[Qe+16>>2]|0),n[Ge>>2]=n[M>>2],n[Me>>2]=n[O>>2],n[k>>2]=n[Ge>>2],n[q>>2]=n[Me>>2],vw(se,k,q),f=n[Qe>>2]|0,n[Qe>>2]=n[se>>2],n[se>>2]=f,f=se+4|0,Xe=n[M>>2]|0,n[M>>2]=n[f>>2],n[f>>2]=Xe,f=se+8|0,Xe=n[O>>2]|0,n[O>>2]=n[f>>2],n[f>>2]=Xe,f=se+12|0,Xe=n[m>>2]|0,n[m>>2]=n[f>>2],n[f>>2]=Xe,UA(se),f=n[O>>2]|0;break}m=f,B=((m-d>>2)+1|0)/-2|0,k=f+(B<<2)|0,d=Q-m|0,m=d>>2,m&&(Ow(k|0,f|0,d|0)|0,f=n[M>>2]|0),Xe=k+(m<<2)|0,n[O>>2]=Xe,n[M>>2]=f+(B<<2),f=Xe}while(0);n[f>>2]=n[c>>2],n[O>>2]=(n[O>>2]|0)+4,l=Ig(s,Qe,l)|0,UA(Qe)}while(0);return E=et,l|0}function Ne(s){s=s|0;var l=0;do{if(l=s+984|0,o[l>>0]|0)break;o[l>>0]=1,h[s+504>>2]=y(ue),s=n[s+944>>2]|0}while((s|0)!=0)}function ft(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function pt(s){return s=s|0,n[s+944>>2]|0}function Tt(s){s=s|0,Un(s,(n[s+964>>2]|0)!=0,2832),Ne(s)}function er(s){return s=s|0,(o[s+984>>0]|0)!=0|0}function Zr(s,l){s=s|0,l=l|0,TUe(s,l,400)|0&&(Dr(s|0,l|0,400)|0,Ne(s))}function qi(s){s=s|0;var l=Ze;return l=y(h[s+44>>2]),s=Ut(l)|0,y(s?y(0):l)}function es(s){s=s|0;var l=Ze;return l=y(h[s+48>>2]),Ut(l)|0&&(l=o[(n[s+976>>2]|0)+2>>0]|0?y(1):y(0)),y(l)}function xi(s,l){s=s|0,l=l|0,n[s+980>>2]=l}function jo(s){return s=s|0,n[s+980>>2]|0}function bA(s,l){s=s|0,l=l|0;var c=0;c=s+4|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function kA(s){return s=s|0,n[s+4>>2]|0}function cp(s,l){s=s|0,l=l|0;var c=0;c=s+8|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function rg(s){return s=s|0,n[s+8>>2]|0}function gu(s,l){s=s|0,l=l|0;var c=0;c=s+12|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function ng(s){return s=s|0,n[s+12>>2]|0}function du(s,l){s=s|0,l=l|0;var c=0;c=s+16|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function uo(s){return s=s|0,n[s+16>>2]|0}function QA(s,l){s=s|0,l=l|0;var c=0;c=s+20|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function mc(s){return s=s|0,n[s+20>>2]|0}function ca(s,l){s=s|0,l=l|0;var c=0;c=s+24|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function ig(s){return s=s|0,n[s+24>>2]|0}function yc(s,l){s=s|0,l=l|0;var c=0;c=s+28|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function Pm(s){return s=s|0,n[s+28>>2]|0}function sg(s,l){s=s|0,l=l|0;var c=0;c=s+32|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function $n(s){return s=s|0,n[s+32>>2]|0}function up(s,l){s=s|0,l=l|0;var c=0;c=s+36|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function og(s){return s=s|0,n[s+36>>2]|0}function FA(s,l){s=s|0,l=y(l);var c=0;c=s+40|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function js(s,l){s=s|0,l=y(l);var c=0;c=s+44|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function mu(s,l){s=s|0,l=y(l);var c=0;c=s+48|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function Ha(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ut(l)|0,c=(m^1)&1,f=s+52|0,d=s+56|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function Gi(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+52|0,c=s+56|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=Ut(l)|0,n[c>>2]=f?3:2,Ne(s))}function ua(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+52|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function yu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ut(c)|0,f=(m^1)&1,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function Es(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ut(c)|0,f=m?0:2,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function Ec(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+132+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Cc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ut(c)|0,f=(m^1)&1,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function Y(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ut(c)|0,f=m?0:2,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function Dt(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+60+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function wl(s,l){s=s|0,l=l|0;var c=0;c=s+60+(l<<3)+4|0,(n[c>>2]|0)!=3&&(h[s+60+(l<<3)>>2]=y(ue),n[c>>2]=3,Ne(s))}function bi(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ut(c)|0,f=(m^1)&1,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function wc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ut(c)|0,f=m?0:2,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function ct(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+204+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Eu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ut(c)|0,f=(m^1)&1,d=s+276+(l<<3)|0,l=s+276+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function ag(s,l){return s=s|0,l=l|0,y(h[s+276+(l<<3)>>2])}function mw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ut(l)|0,c=(m^1)&1,f=s+348|0,d=s+352|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function RA(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+348|0,c=s+352|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=Ut(l)|0,n[c>>2]=f?3:2,Ne(s))}function Ap(s){s=s|0;var l=0;l=s+352|0,(n[l>>2]|0)!=3&&(h[s+348>>2]=y(ue),n[l>>2]=3,Ne(s))}function Br(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+348|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cs(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ut(l)|0,c=(m^1)&1,f=s+356|0,d=s+360|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function lg(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+356|0,c=s+360|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=Ut(l)|0,n[c>>2]=f?3:2,Ne(s))}function cg(s){s=s|0;var l=0;l=s+360|0,(n[l>>2]|0)!=3&&(h[s+356>>2]=y(ue),n[l>>2]=3,Ne(s))}function ug(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+356|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function fp(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ut(l)|0,c=(m^1)&1,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function Ic(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ut(l)|0,c=m?0:2,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function Ct(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+364|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Sm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ut(l)|0,c=(m^1)&1,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function Ag(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ut(l)|0,c=m?0:2,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function fg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+372|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ut(l)|0,c=(m^1)&1,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function xm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ut(l)|0,c=m?0:2,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function pg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+380|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function wu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ut(l)|0,c=(m^1)&1,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function yw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ut(l)|0,c=m?0:2,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function bm(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+388|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Aa(s,l){s=s|0,l=y(l);var c=0;c=s+396|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function Bc(s){return s=s|0,y(h[s+396>>2])}function Il(s){return s=s|0,y(h[s+400>>2])}function Iu(s){return s=s|0,y(h[s+404>>2])}function hg(s){return s=s|0,y(h[s+408>>2])}function TA(s){return s=s|0,y(h[s+412>>2])}function pp(s){return s=s|0,y(h[s+416>>2])}function ja(s){return s=s|0,y(h[s+420>>2])}function gg(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+424+(l<<2)>>2])}function hp(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+448+(l<<2)>>2])}function qo(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+472+(l<<2)>>2])}function ws(s,l){s=s|0,l=l|0;var c=0,f=Ze;return c=n[s+4>>2]|0,(c|0)==(n[l+4>>2]|0)?c?(f=y(h[s>>2]),s=y(ne(y(f-y(h[l>>2]))))>2]=0,n[f+4>>2]=0,n[f+8>>2]=0,Ma(f|0,s|0,l|0,0),Ao(s,3,(o[f+11>>0]|0)<0?n[f>>2]|0:f,c),n3e(f),E=c}function Go(s,l,c,f){s=y(s),l=y(l),c=c|0,f=f|0;var d=Ze;s=y(s*l),d=y(xR(s,y(1)));do if(Ii(d,y(0))|0)s=y(s-d);else{if(s=y(s-d),Ii(d,y(1))|0){s=y(s+y(1));break}if(c){s=y(s+y(1));break}f||(d>y(.5)?d=y(1):(f=Ii(d,y(.5))|0,d=y(f?1:0)),s=y(s+d))}while(0);return y(s/l)}function LA(s,l,c,f,d,m,B,k,Q,M,O,q,se){s=s|0,l=y(l),c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,k=y(k),Q=y(Q),M=y(M),O=y(O),q=y(q),se=se|0;var Ge=0,Me=Ze,Qe=Ze,et=Ze,Xe=Ze,at=Ze,Ue=Ze;return Q>2]),Me!=y(0))?(et=y(Go(l,Me,0,0)),Xe=y(Go(f,Me,0,0)),Qe=y(Go(m,Me,0,0)),Me=y(Go(k,Me,0,0))):(Qe=m,et=l,Me=k,Xe=f),(d|0)==(s|0)?Ge=Ii(Qe,et)|0:Ge=0,(B|0)==(c|0)?se=Ii(Me,Xe)|0:se=0,!Ge&&(at=y(l-O),!(gp(s,at,Q)|0))&&!(dp(s,at,d,Q)|0)?Ge=dg(s,at,d,m,Q)|0:Ge=1,!se&&(Ue=y(f-q),!(gp(c,Ue,M)|0))&&!(dp(c,Ue,B,M)|0)?se=dg(c,Ue,B,k,M)|0:se=1,se=Ge&se),se|0}function gp(s,l,c){return s=s|0,l=y(l),c=y(c),(s|0)==1?s=Ii(l,c)|0:s=0,s|0}function dp(s,l,c,f){return s=s|0,l=y(l),c=c|0,f=y(f),(s|0)==2&(c|0)==0?l>=f?s=1:s=Ii(l,f)|0:s=0,s|0}function dg(s,l,c,f,d){return s=s|0,l=y(l),c=c|0,f=y(f),d=y(d),(s|0)==2&(c|0)==2&f>l?d<=l?s=1:s=Ii(l,d)|0:s=0,s|0}function fa(s,l,c,f,d,m,B,k,Q,M,O){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,M=M|0,O=O|0;var q=0,se=0,Ge=0,Me=0,Qe=Ze,et=Ze,Xe=0,at=0,Ue=0,qe=0,Nt=0,Mr=0,or=0,Xt=0,Pr=0,Lr=0,ir=0,bn=Ze,go=Ze,mo=Ze,yo=0,ya=0;ir=E,E=E+160|0,Xt=ir+152|0,or=ir+120|0,Mr=ir+104|0,Ue=ir+72|0,Me=ir+56|0,Nt=ir+8|0,at=ir,qe=(n[2279]|0)+1|0,n[2279]=qe,Pr=s+984|0,(o[Pr>>0]|0)!=0&&(n[s+512>>2]|0)!=(n[2278]|0)?Xe=4:(n[s+516>>2]|0)==(f|0)?Lr=0:Xe=4,(Xe|0)==4&&(n[s+520>>2]=0,n[s+924>>2]=-1,n[s+928>>2]=-1,h[s+932>>2]=y(-1),h[s+936>>2]=y(-1),Lr=1);e:do if(n[s+964>>2]|0)if(Qe=y(ln(s,2,B)),et=y(ln(s,0,B)),q=s+916|0,mo=y(h[q>>2]),go=y(h[s+920>>2]),bn=y(h[s+932>>2]),LA(d,l,m,c,n[s+924>>2]|0,mo,n[s+928>>2]|0,go,bn,y(h[s+936>>2]),Qe,et,O)|0)Xe=22;else if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(q=s+524+(se*24|0)|0,bn=y(h[q>>2]),go=y(h[s+524+(se*24|0)+4>>2]),mo=y(h[s+524+(se*24|0)+16>>2]),LA(d,l,m,c,n[s+524+(se*24|0)+8>>2]|0,bn,n[s+524+(se*24|0)+12>>2]|0,go,mo,y(h[s+524+(se*24|0)+20>>2]),Qe,et,O)|0){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}else{if(Q){if(q=s+916|0,!(Ii(y(h[q>>2]),l)|0)){Xe=21;break}if(!(Ii(y(h[s+920>>2]),c)|0)){Xe=21;break}if((n[s+924>>2]|0)!=(d|0)){Xe=21;break}q=(n[s+928>>2]|0)==(m|0)?q:0,Xe=22;break}if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(q=s+524+(se*24|0)|0,Ii(y(h[q>>2]),l)|0&&Ii(y(h[s+524+(se*24|0)+4>>2]),c)|0&&(n[s+524+(se*24|0)+8>>2]|0)==(d|0)&&(n[s+524+(se*24|0)+12>>2]|0)==(m|0)){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}}while(0);do if((Xe|0)==21)o[11697]|0?(q=0,Xe=28):(q=0,Xe=31);else if((Xe|0)==22){if(se=(o[11697]|0)!=0,!((q|0)!=0&(Lr^1)))if(se){Xe=28;break}else{Xe=31;break}Me=q+16|0,n[s+908>>2]=n[Me>>2],Ge=q+20|0,n[s+912>>2]=n[Ge>>2],(o[11698]|0)==0|se^1||(n[at>>2]=NA(qe)|0,n[at+4>>2]=qe,Ao(s,4,2972,at),se=n[s+972>>2]|0,se|0&&ef[se&127](s),d=qa(d,Q)|0,m=qa(m,Q)|0,ya=+y(h[Me>>2]),yo=+y(h[Ge>>2]),n[Nt>>2]=d,n[Nt+4>>2]=m,C[Nt+8>>3]=+l,C[Nt+16>>3]=+c,C[Nt+24>>3]=ya,C[Nt+32>>3]=yo,n[Nt+40>>2]=M,Ao(s,4,2989,Nt))}while(0);return(Xe|0)==28&&(se=NA(qe)|0,n[Me>>2]=se,n[Me+4>>2]=qe,n[Me+8>>2]=Lr?3047:11699,Ao(s,4,3038,Me),se=n[s+972>>2]|0,se|0&&ef[se&127](s),Nt=qa(d,Q)|0,Xe=qa(m,Q)|0,n[Ue>>2]=Nt,n[Ue+4>>2]=Xe,C[Ue+8>>3]=+l,C[Ue+16>>3]=+c,n[Ue+24>>2]=M,Ao(s,4,3049,Ue),Xe=31),(Xe|0)==31&&(si(s,l,c,f,d,m,B,k,Q,O),o[11697]|0&&(se=n[2279]|0,Nt=NA(se)|0,n[Mr>>2]=Nt,n[Mr+4>>2]=se,n[Mr+8>>2]=Lr?3047:11699,Ao(s,4,3083,Mr),se=n[s+972>>2]|0,se|0&&ef[se&127](s),Nt=qa(d,Q)|0,Mr=qa(m,Q)|0,yo=+y(h[s+908>>2]),ya=+y(h[s+912>>2]),n[or>>2]=Nt,n[or+4>>2]=Mr,C[or+8>>3]=yo,C[or+16>>3]=ya,n[or+24>>2]=M,Ao(s,4,3092,or)),n[s+516>>2]=f,q||(se=s+520|0,q=n[se>>2]|0,(q|0)==16&&(o[11697]|0&&Ao(s,4,3124,Xt),n[se>>2]=0,q=0),Q?q=s+916|0:(n[se>>2]=q+1,q=s+524+(q*24|0)|0),h[q>>2]=l,h[q+4>>2]=c,n[q+8>>2]=d,n[q+12>>2]=m,n[q+16>>2]=n[s+908>>2],n[q+20>>2]=n[s+912>>2],q=0)),Q&&(n[s+416>>2]=n[s+908>>2],n[s+420>>2]=n[s+912>>2],o[s+985>>0]=1,o[Pr>>0]=0),n[2279]=(n[2279]|0)+-1,n[s+512>>2]=n[2278],E=ir,Lr|(q|0)==0|0}function ln(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(K(s,l,c)),y(f+y(re(s,l,c)))}function Ao(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=E,E=E+16|0,d=m,n[d>>2]=f,s?f=n[s+976>>2]|0:f=0,yg(f,s,l,c,d),E=m}function NA(s){return s=s|0,(s>>>0>60?3201:3201+(60-s)|0)|0}function qa(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=E,E=E+32|0,c=d+12|0,f=d,n[c>>2]=n[254],n[c+4>>2]=n[255],n[c+8>>2]=n[256],n[f>>2]=n[257],n[f+4>>2]=n[258],n[f+8>>2]=n[259],(s|0)>2?s=11699:s=n[(l?f:c)+(s<<2)>>2]|0,E=d,s|0}function si(s,l,c,f,d,m,B,k,Q,M){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,M=M|0;var O=0,q=0,se=0,Ge=0,Me=Ze,Qe=Ze,et=Ze,Xe=Ze,at=Ze,Ue=Ze,qe=Ze,Nt=0,Mr=0,or=0,Xt=Ze,Pr=Ze,Lr=0,ir=Ze,bn=0,go=0,mo=0,yo=0,ya=0,kp=0,Qp=0,xl=0,Fp=0,Fu=0,Ru=0,Rp=0,Tp=0,Lp=0,Xr=0,bl=0,Np=0,bc=0,Op=Ze,Mp=Ze,Tu=Ze,Lu=Ze,kc=Ze,Gs=0,Ja=0,Wo=0,kl=0,rf=0,nf=Ze,Nu=Ze,sf=Ze,of=Ze,Ys=Ze,vs=Ze,Ql=0,Rn=Ze,af=Ze,Eo=Ze,Qc=Ze,Co=Ze,Fc=Ze,lf=0,cf=0,Rc=Ze,Ws=Ze,Fl=0,uf=0,Af=0,ff=0,br=Ze,zn=0,Ds=0,wo=0,Ks=0,Rr=0,ur=0,Rl=0,zt=Ze,pf=0,li=0;Rl=E,E=E+16|0,Gs=Rl+12|0,Ja=Rl+8|0,Wo=Rl+4|0,kl=Rl,Un(s,(d|0)==0|(Ut(l)|0)^1,3326),Un(s,(m|0)==0|(Ut(c)|0)^1,3406),Ds=mt(s,f)|0,n[s+496>>2]=Ds,Rr=fr(2,Ds)|0,ur=fr(0,Ds)|0,h[s+440>>2]=y(K(s,Rr,B)),h[s+444>>2]=y(re(s,Rr,B)),h[s+428>>2]=y(K(s,ur,B)),h[s+436>>2]=y(re(s,ur,B)),h[s+464>>2]=y(Cr(s,Rr)),h[s+468>>2]=y(yn(s,Rr)),h[s+452>>2]=y(Cr(s,ur)),h[s+460>>2]=y(yn(s,ur)),h[s+488>>2]=y(oi(s,Rr,B)),h[s+492>>2]=y(Oi(s,Rr,B)),h[s+476>>2]=y(oi(s,ur,B)),h[s+484>>2]=y(Oi(s,ur,B));do if(n[s+964>>2]|0)Cg(s,l,c,d,m,B,k);else{if(wo=s+948|0,Ks=(n[s+952>>2]|0)-(n[wo>>2]|0)>>2,!Ks){Gv(s,l,c,d,m,B,k);break}if(!Q&&Yv(s,l,c,d,m,B,k)|0)break;$(s),bl=s+508|0,o[bl>>0]=0,Rr=fr(n[s+4>>2]|0,Ds)|0,ur=Cw(Rr,Ds)|0,zn=he(Rr)|0,Np=n[s+8>>2]|0,uf=s+28|0,bc=(n[uf>>2]|0)!=0,Co=zn?B:k,Rc=zn?k:B,Op=y(yp(s,Rr,B)),Mp=y(ww(s,Rr,B)),Me=y(yp(s,ur,B)),Fc=y(En(s,Rr,B)),Ws=y(En(s,ur,B)),or=zn?d:m,Fl=zn?m:d,br=zn?Fc:Ws,at=zn?Ws:Fc,Qc=y(ln(s,2,B)),Xe=y(ln(s,0,B)),Qe=y(y(Gr(s+364|0,B))-br),et=y(y(Gr(s+380|0,B))-br),Ue=y(y(Gr(s+372|0,k))-at),qe=y(y(Gr(s+388|0,k))-at),Tu=zn?Qe:Ue,Lu=zn?et:qe,Qc=y(l-Qc),l=y(Qc-br),Ut(l)|0?br=l:br=y(_n(y(Fg(l,et)),Qe)),af=y(c-Xe),l=y(af-at),Ut(l)|0?Eo=l:Eo=y(_n(y(Fg(l,qe)),Ue)),Qe=zn?br:Eo,Rn=zn?Eo:br;e:do if((or|0)==1)for(f=0,q=0;;){if(O=gs(s,q)|0,!f)y(rs(O))>y(0)&&y(qs(O))>y(0)?f=O:f=0;else if(Rm(O)|0){Ge=0;break e}if(q=q+1|0,q>>>0>=Ks>>>0){Ge=f;break}}else Ge=0;while(0);Nt=Ge+500|0,Mr=Ge+504|0,f=0,O=0,l=y(0),se=0;do{if(q=n[(n[wo>>2]|0)+(se<<2)>>2]|0,(n[q+36>>2]|0)==1)Bu(q),o[q+985>>0]=1,o[q+984>>0]=0;else{Bl(q),Q&&mp(q,mt(q,Ds)|0,Qe,Rn,br);do if((n[q+24>>2]|0)!=1)if((q|0)==(Ge|0)){n[Nt>>2]=n[2278],h[Mr>>2]=y(0);break}else{Tm(s,q,br,d,Eo,br,Eo,m,Ds,M);break}else O|0&&(n[O+960>>2]=q),n[q+960>>2]=0,O=q,f=(f|0)==0?q:f;while(0);vs=y(h[q+504>>2]),l=y(l+y(vs+y(ln(q,Rr,br))))}se=se+1|0}while((se|0)!=(Ks|0));for(mo=l>Qe,Ql=bc&((or|0)==2&mo)?1:or,bn=(Fl|0)==1,ya=bn&(Q^1),kp=(Ql|0)==1,Qp=(Ql|0)==2,xl=976+(Rr<<2)|0,Fp=(Fl|2|0)==2,Lp=bn&(bc^1),Fu=1040+(ur<<2)|0,Ru=1040+(Rr<<2)|0,Rp=976+(ur<<2)|0,Tp=(Fl|0)!=1,mo=bc&((or|0)!=0&mo),go=s+976|0,bn=bn^1,l=Qe,Lr=0,yo=0,vs=y(0),kc=y(0);;){e:do if(Lr>>>0>>0)for(Mr=n[wo>>2]|0,se=0,qe=y(0),Ue=y(0),et=y(0),Qe=y(0),q=0,O=0,Ge=Lr;;){if(Nt=n[Mr+(Ge<<2)>>2]|0,(n[Nt+36>>2]|0)!=1&&(n[Nt+940>>2]=yo,(n[Nt+24>>2]|0)!=1)){if(Xe=y(ln(Nt,Rr,br)),Xr=n[xl>>2]|0,c=y(Gr(Nt+380+(Xr<<3)|0,Co)),at=y(h[Nt+504>>2]),c=y(Fg(c,at)),c=y(_n(y(Gr(Nt+364+(Xr<<3)|0,Co)),c)),bc&(se|0)!=0&y(Xe+y(Ue+c))>l){m=se,Xe=qe,or=Ge;break e}Xe=y(Xe+c),c=y(Ue+Xe),Xe=y(qe+Xe),Rm(Nt)|0&&(et=y(et+y(rs(Nt))),Qe=y(Qe-y(at*y(qs(Nt))))),O|0&&(n[O+960>>2]=Nt),n[Nt+960>>2]=0,se=se+1|0,O=Nt,q=(q|0)==0?Nt:q}else Xe=qe,c=Ue;if(Ge=Ge+1|0,Ge>>>0>>0)qe=Xe,Ue=c;else{m=se,or=Ge;break}}else m=0,Xe=y(0),et=y(0),Qe=y(0),q=0,or=Lr;while(0);Xr=et>y(0)&ety(0)&QeLu&((Ut(Lu)|0)^1))l=Lu,Xr=51;else if(o[(n[go>>2]|0)+3>>0]|0)Xr=51;else{if(Xt!=y(0)&&y(rs(s))!=y(0)){Xr=53;break}l=Xe,Xr=53}while(0);if((Xr|0)==51&&(Xr=0,Ut(l)|0?Xr=53:(Pr=y(l-Xe),ir=l)),(Xr|0)==53&&(Xr=0,Xe>2]|0,Ge=Pry(0),Ue=y(Pr/Xt),et=y(0),Xe=y(0),l=y(0),O=q;do c=y(Gr(O+380+(se<<3)|0,Co)),Qe=y(Gr(O+364+(se<<3)|0,Co)),Qe=y(Fg(c,y(_n(Qe,y(h[O+504>>2]))))),Ge?(c=y(Qe*y(qs(O))),c!=y(-0)&&(zt=y(Qe-y(at*c)),nf=y(Bi(O,Rr,zt,ir,br)),zt!=nf)&&(et=y(et-y(nf-Qe)),l=y(l+c))):Nt&&(Nu=y(rs(O)),Nu!=y(0))&&(zt=y(Qe+y(Ue*Nu)),sf=y(Bi(O,Rr,zt,ir,br)),zt!=sf)&&(et=y(et-y(sf-Qe)),Xe=y(Xe-Nu)),O=n[O+960>>2]|0;while((O|0)!=0);if(l=y(qe+l),Qe=y(Pr+et),rf)l=y(0);else{at=y(Xt+Xe),Ge=n[xl>>2]|0,Nt=Qey(0),at=y(Qe/at),l=y(0);do{zt=y(Gr(q+380+(Ge<<3)|0,Co)),et=y(Gr(q+364+(Ge<<3)|0,Co)),et=y(Fg(zt,y(_n(et,y(h[q+504>>2]))))),Nt?(zt=y(et*y(qs(q))),Qe=y(-zt),zt!=y(-0)?(zt=y(Ue*Qe),Qe=y(Bi(q,Rr,y(et+(Mr?Qe:zt)),ir,br))):Qe=et):se&&(of=y(rs(q)),of!=y(0))?Qe=y(Bi(q,Rr,y(et+y(at*of)),ir,br)):Qe=et,l=y(l-y(Qe-et)),Xe=y(ln(q,Rr,br)),c=y(ln(q,ur,br)),Qe=y(Qe+Xe),h[Ja>>2]=Qe,n[kl>>2]=1,et=y(h[q+396>>2]);e:do if(Ut(et)|0){O=Ut(Rn)|0;do if(!O){if(mo|(ts(q,ur,Rn)|0|bn)||(ha(s,q)|0)!=4||(n[(vl(q,ur)|0)+4>>2]|0)==3||(n[(Pc(q,ur)|0)+4>>2]|0)==3)break;h[Gs>>2]=Rn,n[Wo>>2]=1;break e}while(0);if(ts(q,ur,Rn)|0){O=n[q+992+(n[Rp>>2]<<2)>>2]|0,zt=y(c+y(Gr(O,Rn))),h[Gs>>2]=zt,O=Tp&(n[O+4>>2]|0)==2,n[Wo>>2]=((Ut(zt)|0|O)^1)&1;break}else{h[Gs>>2]=Rn,n[Wo>>2]=O?0:2;break}}else zt=y(Qe-Xe),Xt=y(zt/et),zt=y(et*zt),n[Wo>>2]=1,h[Gs>>2]=y(c+(zn?Xt:zt));while(0);yr(q,Rr,ir,br,kl,Ja),yr(q,ur,Rn,br,Wo,Gs);do if(!(ts(q,ur,Rn)|0)&&(ha(s,q)|0)==4){if((n[(vl(q,ur)|0)+4>>2]|0)==3){O=0;break}O=(n[(Pc(q,ur)|0)+4>>2]|0)!=3}else O=0;while(0);zt=y(h[Ja>>2]),Xt=y(h[Gs>>2]),pf=n[kl>>2]|0,li=n[Wo>>2]|0,fa(q,zn?zt:Xt,zn?Xt:zt,Ds,zn?pf:li,zn?li:pf,br,Eo,Q&(O^1),3488,M)|0,o[bl>>0]=o[bl>>0]|o[q+508>>0],q=n[q+960>>2]|0}while((q|0)!=0)}}else l=y(0);if(l=y(Pr+l),li=l>0]=li|u[bl>>0],Qp&l>y(0)?(O=n[xl>>2]|0,(n[s+364+(O<<3)+4>>2]|0)!=0&&(Ys=y(Gr(s+364+(O<<3)|0,Co)),Ys>=y(0))?Qe=y(_n(y(0),y(Ys-y(ir-l)))):Qe=y(0)):Qe=l,Nt=Lr>>>0>>0,Nt){Ge=n[wo>>2]|0,se=Lr,O=0;do q=n[Ge+(se<<2)>>2]|0,n[q+24>>2]|0||(O=((n[(vl(q,Rr)|0)+4>>2]|0)==3&1)+O|0,O=O+((n[(Pc(q,Rr)|0)+4>>2]|0)==3&1)|0),se=se+1|0;while((se|0)!=(or|0));O?(Xe=y(0),c=y(0)):Xr=101}else Xr=101;e:do if((Xr|0)==101)switch(Xr=0,Np|0){case 1:{O=0,Xe=y(Qe*y(.5)),c=y(0);break e}case 2:{O=0,Xe=Qe,c=y(0);break e}case 3:{if(m>>>0<=1){O=0,Xe=y(0),c=y(0);break e}c=y((m+-1|0)>>>0),O=0,Xe=y(0),c=y(y(_n(Qe,y(0)))/c);break e}case 5:{c=y(Qe/y((m+1|0)>>>0)),O=0,Xe=c;break e}case 4:{c=y(Qe/y(m>>>0)),O=0,Xe=y(c*y(.5));break e}default:{O=0,Xe=y(0),c=y(0);break e}}while(0);if(l=y(Op+Xe),Nt){et=y(Qe/y(O|0)),se=n[wo>>2]|0,q=Lr,Qe=y(0);do{O=n[se+(q<<2)>>2]|0;e:do if((n[O+36>>2]|0)!=1){switch(n[O+24>>2]|0){case 1:{if(gi(O,Rr)|0){if(!Q)break e;zt=y(Or(O,Rr,ir)),zt=y(zt+y(Cr(s,Rr))),zt=y(zt+y(K(O,Rr,br))),h[O+400+(n[Ru>>2]<<2)>>2]=zt;break e}break}case 0:if(li=(n[(vl(O,Rr)|0)+4>>2]|0)==3,zt=y(et+l),l=li?zt:l,Q&&(li=O+400+(n[Ru>>2]<<2)|0,h[li>>2]=y(l+y(h[li>>2]))),li=(n[(Pc(O,Rr)|0)+4>>2]|0)==3,zt=y(et+l),l=li?zt:l,ya){zt=y(c+y(ln(O,Rr,br))),Qe=Rn,l=y(l+y(zt+y(h[O+504>>2])));break e}else{l=y(l+y(c+y(ns(O,Rr,br)))),Qe=y(_n(Qe,y(ns(O,ur,br))));break e}default:}Q&&(zt=y(Xe+y(Cr(s,Rr))),li=O+400+(n[Ru>>2]<<2)|0,h[li>>2]=y(zt+y(h[li>>2])))}while(0);q=q+1|0}while((q|0)!=(or|0))}else Qe=y(0);if(c=y(Mp+l),Fp?Xe=y(y(Bi(s,ur,y(Ws+Qe),Rc,B))-Ws):Xe=Rn,et=y(y(Bi(s,ur,y(Ws+(Lp?Rn:Qe)),Rc,B))-Ws),Nt&Q){q=Lr;do{se=n[(n[wo>>2]|0)+(q<<2)>>2]|0;do if((n[se+36>>2]|0)!=1){if((n[se+24>>2]|0)==1){if(gi(se,ur)|0){if(zt=y(Or(se,ur,Rn)),zt=y(zt+y(Cr(s,ur))),zt=y(zt+y(K(se,ur,br))),O=n[Fu>>2]|0,h[se+400+(O<<2)>>2]=zt,!(Ut(zt)|0))break}else O=n[Fu>>2]|0;zt=y(Cr(s,ur)),h[se+400+(O<<2)>>2]=y(zt+y(K(se,ur,br)));break}O=ha(s,se)|0;do if((O|0)==4){if((n[(vl(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if((n[(Pc(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if(ts(se,ur,Rn)|0){l=Me;break}pf=n[se+908+(n[xl>>2]<<2)>>2]|0,n[Gs>>2]=pf,l=y(h[se+396>>2]),li=Ut(l)|0,Qe=(n[v>>2]=pf,y(h[v>>2])),li?l=et:(Pr=y(ln(se,ur,br)),zt=y(Qe/l),l=y(l*Qe),l=y(Pr+(zn?zt:l))),h[Ja>>2]=l,h[Gs>>2]=y(y(ln(se,Rr,br))+Qe),n[Wo>>2]=1,n[kl>>2]=1,yr(se,Rr,ir,br,Wo,Gs),yr(se,ur,Rn,br,kl,Ja),l=y(h[Gs>>2]),Pr=y(h[Ja>>2]),zt=zn?l:Pr,l=zn?Pr:l,li=((Ut(zt)|0)^1)&1,fa(se,zt,l,Ds,li,((Ut(l)|0)^1)&1,br,Eo,1,3493,M)|0,l=Me}else Xr=139;while(0);e:do if((Xr|0)==139){Xr=0,l=y(Xe-y(ns(se,ur,br)));do if((n[(vl(se,ur)|0)+4>>2]|0)==3){if((n[(Pc(se,ur)|0)+4>>2]|0)!=3)break;l=y(Me+y(_n(y(0),y(l*y(.5)))));break e}while(0);if((n[(Pc(se,ur)|0)+4>>2]|0)==3){l=Me;break}if((n[(vl(se,ur)|0)+4>>2]|0)==3){l=y(Me+y(_n(y(0),l)));break}switch(O|0){case 1:{l=Me;break e}case 2:{l=y(Me+y(l*y(.5)));break e}default:{l=y(Me+l);break e}}}while(0);zt=y(vs+l),li=se+400+(n[Fu>>2]<<2)|0,h[li>>2]=y(zt+y(h[li>>2]))}while(0);q=q+1|0}while((q|0)!=(or|0))}if(vs=y(vs+et),kc=y(_n(kc,c)),m=yo+1|0,or>>>0>=Ks>>>0)break;l=ir,Lr=or,yo=m}do if(Q){if(O=m>>>0>1,!O&&!(Yi(s)|0))break;if(!(Ut(Rn)|0)){l=y(Rn-vs);e:do switch(n[s+12>>2]|0){case 3:{Me=y(Me+l),Ue=y(0);break}case 2:{Me=y(Me+y(l*y(.5))),Ue=y(0);break}case 4:{Rn>vs?Ue=y(l/y(m>>>0)):Ue=y(0);break}case 7:if(Rn>vs){Me=y(Me+y(l/y(m<<1>>>0))),Ue=y(l/y(m>>>0)),Ue=O?Ue:y(0);break e}else{Me=y(Me+y(l*y(.5))),Ue=y(0);break e}case 6:{Ue=y(l/y(yo>>>0)),Ue=Rn>vs&O?Ue:y(0);break}default:Ue=y(0)}while(0);if(m|0)for(Nt=1040+(ur<<2)|0,Mr=976+(ur<<2)|0,Ge=0,q=0;;){e:do if(q>>>0>>0)for(Qe=y(0),et=y(0),l=y(0),se=q;;){O=n[(n[wo>>2]|0)+(se<<2)>>2]|0;do if((n[O+36>>2]|0)!=1&&(n[O+24>>2]|0)==0){if((n[O+940>>2]|0)!=(Ge|0))break e;if(Lm(O,ur)|0&&(zt=y(h[O+908+(n[Mr>>2]<<2)>>2]),l=y(_n(l,y(zt+y(ln(O,ur,br)))))),(ha(s,O)|0)!=5)break;Ys=y(Ya(O)),Ys=y(Ys+y(K(O,0,br))),zt=y(h[O+912>>2]),zt=y(y(zt+y(ln(O,0,br)))-Ys),Ys=y(_n(et,Ys)),zt=y(_n(Qe,zt)),Qe=zt,et=Ys,l=y(_n(l,y(Ys+zt)))}while(0);if(O=se+1|0,O>>>0>>0)se=O;else{se=O;break}}else et=y(0),l=y(0),se=q;while(0);if(at=y(Ue+l),c=Me,Me=y(Me+at),q>>>0>>0){Xe=y(c+et),O=q;do{q=n[(n[wo>>2]|0)+(O<<2)>>2]|0;e:do if((n[q+36>>2]|0)!=1&&(n[q+24>>2]|0)==0)switch(ha(s,q)|0){case 1:{zt=y(c+y(K(q,ur,br))),h[q+400+(n[Nt>>2]<<2)>>2]=zt;break e}case 3:{zt=y(y(Me-y(re(q,ur,br)))-y(h[q+908+(n[Mr>>2]<<2)>>2])),h[q+400+(n[Nt>>2]<<2)>>2]=zt;break e}case 2:{zt=y(c+y(y(at-y(h[q+908+(n[Mr>>2]<<2)>>2]))*y(.5))),h[q+400+(n[Nt>>2]<<2)>>2]=zt;break e}case 4:{if(zt=y(c+y(K(q,ur,br))),h[q+400+(n[Nt>>2]<<2)>>2]=zt,ts(q,ur,Rn)|0||(zn?(Qe=y(h[q+908>>2]),l=y(Qe+y(ln(q,Rr,br))),et=at):(et=y(h[q+912>>2]),et=y(et+y(ln(q,ur,br))),l=at,Qe=y(h[q+908>>2])),Ii(l,Qe)|0&&Ii(et,y(h[q+912>>2]))|0))break e;fa(q,l,et,Ds,1,1,br,Eo,1,3501,M)|0;break e}case 5:{h[q+404>>2]=y(y(Xe-y(Ya(q)))+y(Or(q,0,Rn)));break e}default:break e}while(0);O=O+1|0}while((O|0)!=(se|0))}if(Ge=Ge+1|0,(Ge|0)==(m|0))break;q=se}}}while(0);if(h[s+908>>2]=y(Bi(s,2,Qc,B,B)),h[s+912>>2]=y(Bi(s,0,af,k,B)),(Ql|0)!=0&&(lf=n[s+32>>2]|0,cf=(Ql|0)==2,!(cf&(lf|0)!=2))?cf&(lf|0)==2&&(l=y(Fc+ir),l=y(_n(y(Fg(l,y(OA(s,Rr,kc,Co)))),Fc)),Xr=198):(l=y(Bi(s,Rr,kc,Co,B)),Xr=198),(Xr|0)==198&&(h[s+908+(n[976+(Rr<<2)>>2]<<2)>>2]=l),(Fl|0)!=0&&(Af=n[s+32>>2]|0,ff=(Fl|0)==2,!(ff&(Af|0)!=2))?ff&(Af|0)==2&&(l=y(Ws+Rn),l=y(_n(y(Fg(l,y(OA(s,ur,y(Ws+vs),Rc)))),Ws)),Xr=204):(l=y(Bi(s,ur,y(Ws+vs),Rc,B)),Xr=204),(Xr|0)==204&&(h[s+908+(n[976+(ur<<2)>>2]<<2)>>2]=l),Q){if((n[uf>>2]|0)==2){q=976+(ur<<2)|0,se=1040+(ur<<2)|0,O=0;do Ge=gs(s,O)|0,n[Ge+24>>2]|0||(pf=n[q>>2]|0,zt=y(h[s+908+(pf<<2)>>2]),li=Ge+400+(n[se>>2]<<2)|0,zt=y(zt-y(h[li>>2])),h[li>>2]=y(zt-y(h[Ge+908+(pf<<2)>>2]))),O=O+1|0;while((O|0)!=(Ks|0))}if(f|0){O=zn?Ql:d;do Nm(s,f,br,O,Eo,Ds,M),f=n[f+960>>2]|0;while((f|0)!=0)}if(O=(Rr|2|0)==3,q=(ur|2|0)==3,O|q){f=0;do se=n[(n[wo>>2]|0)+(f<<2)>>2]|0,(n[se+36>>2]|0)!=1&&(O&&Ep(s,se,Rr),q&&Ep(s,se,ur)),f=f+1|0;while((f|0)!=(Ks|0))}}}while(0);E=Rl}function pa(s,l){s=s|0,l=y(l);var c=0;oa(s,l>=y(0),3147),c=l==y(0),h[s+4>>2]=c?y(0):l}function vc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=f|0;var d=Ze,m=Ze,B=0,k=0,Q=0;n[2278]=(n[2278]|0)+1,Bl(s),ts(s,2,l)|0?(d=y(Gr(n[s+992>>2]|0,l)),Q=1,d=y(d+y(ln(s,2,l)))):(d=y(Gr(s+380|0,l)),d>=y(0)?Q=2:(Q=((Ut(l)|0)^1)&1,d=l)),ts(s,0,c)|0?(m=y(Gr(n[s+996>>2]|0,c)),k=1,m=y(m+y(ln(s,0,l)))):(m=y(Gr(s+388|0,c)),m>=y(0)?k=2:(k=((Ut(c)|0)^1)&1,m=c)),B=s+976|0,fa(s,d,m,f,Q,k,l,c,1,3189,n[B>>2]|0)|0&&(mp(s,n[s+496>>2]|0,l,c,l),Dc(s,y(h[(n[B>>2]|0)+4>>2]),y(0),y(0)),o[11696]|0)&&km(s,7)}function Bl(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;k=E,E=E+32|0,B=k+24|0,m=k+16|0,f=k+8|0,d=k,c=0;do l=s+380+(c<<3)|0,(n[s+380+(c<<3)+4>>2]|0)!=0&&(Q=l,M=n[Q+4>>2]|0,O=f,n[O>>2]=n[Q>>2],n[O+4>>2]=M,O=s+364+(c<<3)|0,M=n[O+4>>2]|0,Q=d,n[Q>>2]=n[O>>2],n[Q+4>>2]=M,n[m>>2]=n[f>>2],n[m+4>>2]=n[f+4>>2],n[B>>2]=n[d>>2],n[B+4>>2]=n[d+4>>2],ws(m,B)|0)||(l=s+348+(c<<3)|0),n[s+992+(c<<2)>>2]=l,c=c+1|0;while((c|0)!=2);E=k}function ts(s,l,c){s=s|0,l=l|0,c=y(c);var f=0;switch(s=n[s+992+(n[976+(l<<2)>>2]<<2)>>2]|0,n[s+4>>2]|0){case 0:case 3:{s=0;break}case 1:{y(h[s>>2])>2])>2]|0){case 2:{l=y(y(y(h[s>>2])*l)/y(100));break}case 1:{l=y(h[s>>2]);break}default:l=y(ue)}return y(l)}function mp(s,l,c,f,d){s=s|0,l=l|0,c=y(c),f=y(f),d=y(d);var m=0,B=Ze;l=n[s+944>>2]|0?l:1,m=fr(n[s+4>>2]|0,l)|0,l=Cw(m,l)|0,c=y(Om(s,m,c)),f=y(Om(s,l,f)),B=y(c+y(K(s,m,d))),h[s+400+(n[1040+(m<<2)>>2]<<2)>>2]=B,c=y(c+y(re(s,m,d))),h[s+400+(n[1e3+(m<<2)>>2]<<2)>>2]=c,c=y(f+y(K(s,l,d))),h[s+400+(n[1040+(l<<2)>>2]<<2)>>2]=c,d=y(f+y(re(s,l,d))),h[s+400+(n[1e3+(l<<2)>>2]<<2)>>2]=d}function Dc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=y(f);var d=0,m=0,B=Ze,k=Ze,Q=0,M=0,O=Ze,q=0,se=Ze,Ge=Ze,Me=Ze,Qe=Ze;if(l!=y(0)&&(d=s+400|0,Qe=y(h[d>>2]),m=s+404|0,Me=y(h[m>>2]),q=s+416|0,Ge=y(h[q>>2]),M=s+420|0,B=y(h[M>>2]),se=y(Qe+c),O=y(Me+f),f=y(se+Ge),k=y(O+B),Q=(n[s+988>>2]|0)==1,h[d>>2]=y(Go(Qe,l,0,Q)),h[m>>2]=y(Go(Me,l,0,Q)),c=y(xR(y(Ge*l),y(1))),Ii(c,y(0))|0?m=0:m=(Ii(c,y(1))|0)^1,c=y(xR(y(B*l),y(1))),Ii(c,y(0))|0?d=0:d=(Ii(c,y(1))|0)^1,Qe=y(Go(f,l,Q&m,Q&(m^1))),h[q>>2]=y(Qe-y(Go(se,l,0,Q))),Qe=y(Go(k,l,Q&d,Q&(d^1))),h[M>>2]=y(Qe-y(Go(O,l,0,Q))),m=(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2,m|0)){d=0;do Dc(gs(s,d)|0,l,se,O),d=d+1|0;while((d|0)!=(m|0))}}function Ew(s,l,c,f,d){switch(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,c|0){case 5:case 0:{s=o7(n[489]|0,f,d)|0;break}default:s=$Ue(f,d)|0}return s|0}function mg(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;d=E,E=E+16|0,m=d,n[m>>2]=f,yg(s,0,l,c,m),E=d}function yg(s,l,c,f,d){if(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,s=s|0?s:956,S7[n[s+8>>2]&1](s,l,c,f,d)|0,(c|0)==5)Rt();else return}function Ga(s,l,c){s=s|0,l=l|0,c=c|0,o[s+l>>0]=c&1}function Fm(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(Eg(s,f),Qt(s,n[l>>2]|0,n[c>>2]|0,f))}function Eg(s,l){s=s|0,l=l|0;var c=0;if((L(s)|0)>>>0>>0&&Jr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function Qt(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function L(s){return s=s|0,1073741823}function K(s,l,c){return s=s|0,l=l|0,c=y(c),he(l)|0&&(n[s+96>>2]|0)!=0?s=s+92|0:s=Fn(s+60|0,n[1040+(l<<2)>>2]|0,992)|0,y(Je(s,c))}function re(s,l,c){return s=s|0,l=l|0,c=y(c),he(l)|0&&(n[s+104>>2]|0)!=0?s=s+100|0:s=Fn(s+60|0,n[1e3+(l<<2)>>2]|0,992)|0,y(Je(s,c))}function he(s){return s=s|0,(s|1|0)==3|0}function Je(s,l){return s=s|0,l=y(l),(n[s+4>>2]|0)==3?l=y(0):l=y(Gr(s,l)),y(l)}function mt(s,l){return s=s|0,l=l|0,s=n[s>>2]|0,((s|0)==0?(l|0)>1?l:1:s)|0}function fr(s,l){s=s|0,l=l|0;var c=0;e:do if((l|0)==2){switch(s|0){case 2:{s=3;break e}case 3:break;default:{c=4;break e}}s=2}else c=4;while(0);return s|0}function Cr(s,l){s=s|0,l=l|0;var c=Ze;return he(l)|0&&(n[s+312>>2]|0)!=0&&(c=y(h[s+308>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1040+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function yn(s,l){s=s|0,l=l|0;var c=Ze;return he(l)|0&&(n[s+320>>2]|0)!=0&&(c=y(h[s+316>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1e3+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return he(l)|0&&(n[s+240>>2]|0)!=0&&(f=y(Gr(s+236|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1040+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return he(l)|0&&(n[s+248>>2]|0)!=0&&(f=y(Gr(s+244|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1e3+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Cg(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,M=Ze,O=Ze,q=Ze,se=Ze,Ge=0,Me=0,Qe=0;Qe=E,E=E+16|0,Ge=Qe,Me=s+964|0,Un(s,(n[Me>>2]|0)!=0,3519),k=y(En(s,2,l)),Q=y(En(s,0,l)),M=y(ln(s,2,l)),O=y(ln(s,0,l)),Ut(l)|0?q=l:q=y(_n(y(0),y(y(l-M)-k))),Ut(c)|0?se=c:se=y(_n(y(0),y(y(c-O)-Q))),(f|0)==1&(d|0)==1?(h[s+908>>2]=y(Bi(s,2,y(l-M),m,m)),l=y(Bi(s,0,y(c-O),B,m))):(x7[n[Me>>2]&1](Ge,s,q,f,se,d),q=y(k+y(h[Ge>>2])),se=y(l-M),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?q:se,m,m)),se=y(Q+y(h[Ge+4>>2])),l=y(c-O),l=y(Bi(s,0,(d|2|0)==2?se:l,B,m))),h[s+912>>2]=l,E=Qe}function Gv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,M=Ze,O=Ze;M=y(En(s,2,m)),k=y(En(s,0,m)),O=y(ln(s,2,m)),Q=y(ln(s,0,m)),l=y(l-O),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?M:l,m,m)),c=y(c-Q),h[s+912>>2]=y(Bi(s,0,(d|2|0)==2?k:c,B,m))}function Yv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=0,Q=Ze,M=Ze;return k=(f|0)==2,!(l<=y(0)&k)&&!(c<=y(0)&(d|0)==2)&&!((f|0)==1&(d|0)==1)?s=0:(Q=y(ln(s,0,m)),M=y(ln(s,2,m)),k=l>2]=y(Bi(s,2,k?y(0):l,m,m)),l=y(c-Q),k=c>2]=y(Bi(s,0,k?y(0):l,B,m)),s=1),s|0}function Cw(s,l){return s=s|0,l=l|0,MA(s)|0?s=fr(2,l)|0:s=0,s|0}function yp(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(oi(s,l,c)),y(c+y(Cr(s,l)))}function ww(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(Oi(s,l,c)),y(c+y(yn(s,l)))}function En(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(yp(s,l,c)),y(f+y(ww(s,l,c)))}function Rm(s){return s=s|0,n[s+24>>2]|0?s=0:y(rs(s))!=y(0)?s=1:s=y(qs(s))!=y(0),s|0}function rs(s){s=s|0;var l=Ze;if(n[s+944>>2]|0){if(l=y(h[s+44>>2]),Ut(l)|0)return l=y(h[s+40>>2]),s=l>y(0)&((Ut(l)|0)^1),y(s?l:y(0))}else l=y(0);return y(l)}function qs(s){s=s|0;var l=Ze,c=0,f=Ze;do if(n[s+944>>2]|0){if(l=y(h[s+48>>2]),Ut(l)|0){if(c=o[(n[s+976>>2]|0)+2>>0]|0,c<<24>>24==0&&(f=y(h[s+40>>2]),f>24?y(1):y(0)}}else l=y(0);while(0);return y(l)}function Bu(s){s=s|0;var l=0,c=0;if(Jm(s+400|0,0,540)|0,o[s+985>>0]=1,$(s),c=wi(s)|0,c|0){l=s+948|0,s=0;do Bu(n[(n[l>>2]|0)+(s<<2)>>2]|0),s=s+1|0;while((s|0)!=(c|0))}}function Tm(s,l,c,f,d,m,B,k,Q,M){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=y(m),B=y(B),k=k|0,Q=Q|0,M=M|0;var O=0,q=Ze,se=0,Ge=0,Me=Ze,Qe=Ze,et=0,Xe=Ze,at=0,Ue=Ze,qe=0,Nt=0,Mr=0,or=0,Xt=0,Pr=0,Lr=0,ir=0,bn=0,go=0;bn=E,E=E+16|0,Mr=bn+12|0,or=bn+8|0,Xt=bn+4|0,Pr=bn,ir=fr(n[s+4>>2]|0,Q)|0,qe=he(ir)|0,q=y(Gr(Iw(l)|0,qe?m:B)),Nt=ts(l,2,m)|0,Lr=ts(l,0,B)|0;do if(!(Ut(q)|0)&&!(Ut(qe?c:d)|0)){if(O=l+504|0,!(Ut(y(h[O>>2]))|0)&&(!(Bw(n[l+976>>2]|0,0)|0)||(n[l+500>>2]|0)==(n[2278]|0)))break;h[O>>2]=y(_n(q,y(En(l,ir,m))))}else se=7;while(0);do if((se|0)==7){if(at=qe^1,!(at|Nt^1)){B=y(Gr(n[l+992>>2]|0,m)),h[l+504>>2]=y(_n(B,y(En(l,2,m))));break}if(!(qe|Lr^1)){B=y(Gr(n[l+996>>2]|0,B)),h[l+504>>2]=y(_n(B,y(En(l,0,m))));break}h[Mr>>2]=y(ue),h[or>>2]=y(ue),n[Xt>>2]=0,n[Pr>>2]=0,Xe=y(ln(l,2,m)),Ue=y(ln(l,0,m)),Nt?(Me=y(Xe+y(Gr(n[l+992>>2]|0,m))),h[Mr>>2]=Me,n[Xt>>2]=1,Ge=1):(Ge=0,Me=y(ue)),Lr?(q=y(Ue+y(Gr(n[l+996>>2]|0,B))),h[or>>2]=q,n[Pr>>2]=1,O=1):(O=0,q=y(ue)),se=n[s+32>>2]|0,qe&(se|0)==2?se=2:Ut(Me)|0&&!(Ut(c)|0)&&(h[Mr>>2]=c,n[Xt>>2]=2,Ge=2,Me=c),!((se|0)==2&at)&&Ut(q)|0&&!(Ut(d)|0)&&(h[or>>2]=d,n[Pr>>2]=2,O=2,q=d),Qe=y(h[l+396>>2]),et=Ut(Qe)|0;do if(et)se=Ge;else{if((Ge|0)==1&at){h[or>>2]=y(y(Me-Xe)/Qe),n[Pr>>2]=1,O=1,se=1;break}qe&(O|0)==1?(h[Mr>>2]=y(Qe*y(q-Ue)),n[Xt>>2]=1,O=1,se=1):se=Ge}while(0);go=Ut(c)|0,Ge=(ha(s,l)|0)!=4,!(qe|Nt|((f|0)!=1|go)|(Ge|(se|0)==1))&&(h[Mr>>2]=c,n[Xt>>2]=1,!et)&&(h[or>>2]=y(y(c-Xe)/Qe),n[Pr>>2]=1,O=1),!(Lr|at|((k|0)!=1|(Ut(d)|0))|(Ge|(O|0)==1))&&(h[or>>2]=d,n[Pr>>2]=1,!et)&&(h[Mr>>2]=y(Qe*y(d-Ue)),n[Xt>>2]=1),yr(l,2,m,m,Xt,Mr),yr(l,0,B,m,Pr,or),c=y(h[Mr>>2]),d=y(h[or>>2]),fa(l,c,d,Q,n[Xt>>2]|0,n[Pr>>2]|0,m,B,0,3565,M)|0,B=y(h[l+908+(n[976+(ir<<2)>>2]<<2)>>2]),h[l+504>>2]=y(_n(B,y(En(l,ir,m))))}while(0);n[l+500>>2]=n[2278],E=bn}function Bi(s,l,c,f,d){return s=s|0,l=l|0,c=y(c),f=y(f),d=y(d),f=y(OA(s,l,c,f)),y(_n(f,y(En(s,l,d))))}function ha(s,l){return s=s|0,l=l|0,l=l+20|0,l=n[((n[l>>2]|0)==0?s+16|0:l)>>2]|0,(l|0)==5&&MA(n[s+4>>2]|0)|0&&(l=1),l|0}function vl(s,l){return s=s|0,l=l|0,he(l)|0&&(n[s+96>>2]|0)!=0?l=4:l=n[1040+(l<<2)>>2]|0,s+60+(l<<3)|0}function Pc(s,l){return s=s|0,l=l|0,he(l)|0&&(n[s+104>>2]|0)!=0?l=5:l=n[1e3+(l<<2)>>2]|0,s+60+(l<<3)|0}function yr(s,l,c,f,d,m){switch(s=s|0,l=l|0,c=y(c),f=y(f),d=d|0,m=m|0,c=y(Gr(s+380+(n[976+(l<<2)>>2]<<3)|0,c)),c=y(c+y(ln(s,l,f))),n[d>>2]|0){case 2:case 1:{d=Ut(c)|0,f=y(h[m>>2]),h[m>>2]=d|f>2]=2,h[m>>2]=c);break}default:}}function gi(s,l){return s=s|0,l=l|0,s=s+132|0,he(l)|0&&(n[(Fn(s,4,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1040+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function Or(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,he(l)|0&&(f=Fn(s,4,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1040+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function ns(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),f=y(f+y(K(s,l,c))),y(f+y(re(s,l,c)))}function Yi(s){s=s|0;var l=0,c=0,f=0;e:do if(MA(n[s+4>>2]|0)|0)l=0;else if((n[s+16>>2]|0)!=5)if(c=wi(s)|0,!c)l=0;else for(l=0;;){if(f=gs(s,l)|0,(n[f+24>>2]|0)==0&&(n[f+20>>2]|0)==5){l=1;break e}if(l=l+1|0,l>>>0>=c>>>0){l=0;break}}else l=1;while(0);return l|0}function Lm(s,l){s=s|0,l=l|0;var c=Ze;return c=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),c>=y(0)&((Ut(c)|0)^1)|0}function Ya(s){s=s|0;var l=Ze,c=0,f=0,d=0,m=0,B=0,k=0,Q=Ze;if(c=n[s+968>>2]|0,c)Q=y(h[s+908>>2]),l=y(h[s+912>>2]),l=y(B7[c&0](s,Q,l)),Un(s,(Ut(l)|0)^1,3573);else{m=wi(s)|0;do if(m|0){for(c=0,d=0;;){if(f=gs(s,d)|0,n[f+940>>2]|0){B=8;break}if((n[f+24>>2]|0)!=1)if(k=(ha(s,f)|0)==5,k){c=f;break}else c=(c|0)==0?f:c;if(d=d+1|0,d>>>0>=m>>>0){B=8;break}}if((B|0)==8&&!c)break;return l=y(Ya(c)),y(l+y(h[c+404>>2]))}while(0);l=y(h[s+912>>2])}return y(l)}function OA(s,l,c,f){s=s|0,l=l|0,c=y(c),f=y(f);var d=Ze,m=0;return MA(l)|0?(l=1,m=3):he(l)|0?(l=0,m=3):(f=y(ue),d=y(ue)),(m|0)==3&&(d=y(Gr(s+364+(l<<3)|0,f)),f=y(Gr(s+380+(l<<3)|0,f))),m=f=y(0)&((Ut(f)|0)^1)),c=m?f:c,m=d>=y(0)&((Ut(d)|0)^1)&c>2]|0,m)|0,Me=Cw(et,m)|0,Qe=he(et)|0,q=y(ln(l,2,c)),se=y(ln(l,0,c)),ts(l,2,c)|0?k=y(q+y(Gr(n[l+992>>2]|0,c))):gi(l,2)|0&&sr(l,2)|0?(k=y(h[s+908>>2]),Q=y(Cr(s,2)),Q=y(k-y(Q+y(yn(s,2)))),k=y(Or(l,2,c)),k=y(Bi(l,2,y(Q-y(k+y(vu(l,2,c)))),c,c))):k=y(ue),ts(l,0,d)|0?Q=y(se+y(Gr(n[l+996>>2]|0,d))):gi(l,0)|0&&sr(l,0)|0?(Q=y(h[s+912>>2]),at=y(Cr(s,0)),at=y(Q-y(at+y(yn(s,0)))),Q=y(Or(l,0,d)),Q=y(Bi(l,0,y(at-y(Q+y(vu(l,0,d)))),d,c))):Q=y(ue),M=Ut(k)|0,O=Ut(Q)|0;do if(M^O&&(Ge=y(h[l+396>>2]),!(Ut(Ge)|0)))if(M){k=y(q+y(y(Q-se)*Ge));break}else{at=y(se+y(y(k-q)/Ge)),Q=O?at:Q;break}while(0);O=Ut(k)|0,M=Ut(Q)|0,O|M&&(Ue=(O^1)&1,f=c>y(0)&((f|0)!=0&O),k=Qe?k:f?c:k,fa(l,k,Q,m,Qe?Ue:f?2:Ue,O&(M^1)&1,k,Q,0,3623,B)|0,k=y(h[l+908>>2]),k=y(k+y(ln(l,2,c))),Q=y(h[l+912>>2]),Q=y(Q+y(ln(l,0,c)))),fa(l,k,Q,m,1,1,k,Q,1,3635,B)|0,sr(l,et)|0&&!(gi(l,et)|0)?(Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),at=y(at-y(yn(s,et))),at=y(at-y(re(l,et,c))),at=y(at-y(vu(l,et,Qe?c:d))),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at):Xe=21;do if((Xe|0)==21){if(!(gi(l,et)|0)&&(n[s+8>>2]|0)==1){Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(y(at-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at;break}!(gi(l,et)|0)&&(n[s+8>>2]|0)==2&&(Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at)}while(0);sr(l,Me)|0&&!(gi(l,Me)|0)?(Ue=n[976+(Me<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),at=y(at-y(yn(s,Me))),at=y(at-y(re(l,Me,c))),at=y(at-y(vu(l,Me,Qe?d:c))),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=at):Xe=30;do if((Xe|0)==30&&!(gi(l,Me)|0)){if((ha(s,l)|0)==2){Ue=n[976+(Me<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(y(at-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=at;break}Ue=(ha(s,l)|0)==3,Ue^(n[s+28>>2]|0)==2&&(Ue=n[976+(Me<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=at)}while(0)}function Ep(s,l,c){s=s|0,l=l|0,c=c|0;var f=Ze,d=0;d=n[976+(c<<2)>>2]|0,f=y(h[l+908+(d<<2)>>2]),f=y(y(h[s+908+(d<<2)>>2])-f),f=y(f-y(h[l+400+(n[1040+(c<<2)>>2]<<2)>>2])),h[l+400+(n[1e3+(c<<2)>>2]<<2)>>2]=f}function MA(s){return s=s|0,(s|1|0)==1|0}function Iw(s){s=s|0;var l=Ze;switch(n[s+56>>2]|0){case 0:case 3:{l=y(h[s+40>>2]),l>y(0)&((Ut(l)|0)^1)?s=o[(n[s+976>>2]|0)+2>>0]|0?1056:992:s=1056;break}default:s=s+52|0}return s|0}function Bw(s,l){return s=s|0,l=l|0,(o[s+l>>0]|0)!=0|0}function sr(s,l){return s=s|0,l=l|0,s=s+132|0,he(l)|0&&(n[(Fn(s,5,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1e3+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function vu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,he(l)|0&&(f=Fn(s,5,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1e3+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function Om(s,l,c){return s=s|0,l=l|0,c=y(c),gi(s,l)|0?c=y(Or(s,l,c)):c=y(-y(vu(s,l,c))),y(c)}function Du(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function Cp(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function wg(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function UA(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function _A(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;if(B=s+4|0,k=n[B>>2]|0,d=k-f|0,m=d>>2,s=l+(m<<2)|0,s>>>0>>0){f=k;do n[f>>2]=n[s>>2],s=s+4|0,f=(n[B>>2]|0)+4|0,n[B>>2]=f;while(s>>>0>>0)}m|0&&Ow(k+(0-m<<2)|0,l|0,d|0)|0}function Ig(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return k=l+4|0,Q=n[k>>2]|0,d=n[s>>2]|0,B=c,m=B-d|0,f=Q+(0-(m>>2)<<2)|0,n[k>>2]=f,(m|0)>0&&Dr(f|0,d|0,m|0)|0,d=s+4|0,m=l+8|0,f=(n[d>>2]|0)-B|0,(f|0)>0&&(Dr(n[m>>2]|0,c|0,f|0)|0,n[m>>2]=(n[m>>2]|0)+(f>>>2<<2)),B=n[s>>2]|0,n[s>>2]=n[k>>2],n[k>>2]=B,B=n[d>>2]|0,n[d>>2]=n[m>>2],n[m>>2]=B,B=s+8|0,c=l+12|0,s=n[B>>2]|0,n[B>>2]=n[c>>2],n[c>>2]=s,n[l>>2]=n[k>>2],Q|0}function vw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(B=n[l>>2]|0,m=n[c>>2]|0,(B|0)!=(m|0)){d=s+8|0,c=((m+-4-B|0)>>>2)+1|0,s=B,f=n[d>>2]|0;do n[f>>2]=n[s>>2],f=(n[d>>2]|0)+4|0,n[d>>2]=f,s=s+4|0;while((s|0)!=(m|0));n[l>>2]=B+(c<<2)}}function Mm(){dc()}function ga(){var s=0;return s=Kt(4)|0,HA(s),s|0}function HA(s){s=s|0,n[s>>2]=ys()|0}function Sc(s){s=s|0,s|0&&(Bg(s),gt(s))}function Bg(s){s=s|0,tt(n[s>>2]|0)}function Um(s,l,c){s=s|0,l=l|0,c=c|0,Ga(n[s>>2]|0,l,c)}function fo(s,l){s=s|0,l=y(l),pa(n[s>>2]|0,l)}function Wv(s,l){return s=s|0,l=l|0,Bw(n[s>>2]|0,l)|0}function Dw(){var s=0;return s=Kt(8)|0,Kv(s,0),s|0}function Kv(s,l){s=s|0,l=l|0,l?l=Ci(n[l>>2]|0)|0:l=co()|0,n[s>>2]=l,n[s+4>>2]=0,xi(l,s)}function AF(s){s=s|0;var l=0;return l=Kt(8)|0,Kv(l,s),l|0}function Vv(s){s=s|0,s|0&&(Pu(s),gt(s))}function Pu(s){s=s|0;var l=0;la(n[s>>2]|0),l=s+4|0,s=n[l>>2]|0,n[l>>2]=0,s|0&&(jA(s),gt(s))}function jA(s){s=s|0,qA(s)}function qA(s){s=s|0,s=n[s>>2]|0,s|0&&PA(s|0)}function Pw(s){return s=s|0,jo(s)|0}function _m(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),Hs(n[s>>2]|0)}function fF(s,l){s=s|0,l=l|0,Zr(n[s>>2]|0,n[l>>2]|0)}function pF(s,l){s=s|0,l=l|0,ca(n[s>>2]|0,l)}function zv(s,l,c){s=s|0,l=l|0,c=+c,yu(n[s>>2]|0,l,y(c))}function Jv(s,l,c){s=s|0,l=l|0,c=+c,Es(n[s>>2]|0,l,y(c))}function Sw(s,l){s=s|0,l=l|0,gu(n[s>>2]|0,l)}function Su(s,l){s=s|0,l=l|0,du(n[s>>2]|0,l)}function hF(s,l){s=s|0,l=l|0,QA(n[s>>2]|0,l)}function gF(s,l){s=s|0,l=l|0,bA(n[s>>2]|0,l)}function wp(s,l){s=s|0,l=l|0,yc(n[s>>2]|0,l)}function dF(s,l){s=s|0,l=l|0,cp(n[s>>2]|0,l)}function Xv(s,l,c){s=s|0,l=l|0,c=+c,Cc(n[s>>2]|0,l,y(c))}function GA(s,l,c){s=s|0,l=l|0,c=+c,Y(n[s>>2]|0,l,y(c))}function mF(s,l){s=s|0,l=l|0,wl(n[s>>2]|0,l)}function yF(s,l){s=s|0,l=l|0,sg(n[s>>2]|0,l)}function Zv(s,l){s=s|0,l=l|0,up(n[s>>2]|0,l)}function xw(s,l){s=s|0,l=+l,FA(n[s>>2]|0,y(l))}function bw(s,l){s=s|0,l=+l,Ha(n[s>>2]|0,y(l))}function EF(s,l){s=s|0,l=+l,Gi(n[s>>2]|0,y(l))}function CF(s,l){s=s|0,l=+l,js(n[s>>2]|0,y(l))}function Dl(s,l){s=s|0,l=+l,mu(n[s>>2]|0,y(l))}function kw(s,l){s=s|0,l=+l,mw(n[s>>2]|0,y(l))}function wF(s,l){s=s|0,l=+l,RA(n[s>>2]|0,y(l))}function YA(s){s=s|0,Ap(n[s>>2]|0)}function Hm(s,l){s=s|0,l=+l,Cs(n[s>>2]|0,y(l))}function xu(s,l){s=s|0,l=+l,lg(n[s>>2]|0,y(l))}function Qw(s){s=s|0,cg(n[s>>2]|0)}function Fw(s,l){s=s|0,l=+l,fp(n[s>>2]|0,y(l))}function IF(s,l){s=s|0,l=+l,Ic(n[s>>2]|0,y(l))}function $v(s,l){s=s|0,l=+l,Sm(n[s>>2]|0,y(l))}function WA(s,l){s=s|0,l=+l,Ag(n[s>>2]|0,y(l))}function eD(s,l){s=s|0,l=+l,Cu(n[s>>2]|0,y(l))}function jm(s,l){s=s|0,l=+l,xm(n[s>>2]|0,y(l))}function tD(s,l){s=s|0,l=+l,wu(n[s>>2]|0,y(l))}function rD(s,l){s=s|0,l=+l,yw(n[s>>2]|0,y(l))}function qm(s,l){s=s|0,l=+l,Aa(n[s>>2]|0,y(l))}function nD(s,l,c){s=s|0,l=l|0,c=+c,Eu(n[s>>2]|0,l,y(c))}function BF(s,l,c){s=s|0,l=l|0,c=+c,bi(n[s>>2]|0,l,y(c))}function P(s,l,c){s=s|0,l=l|0,c=+c,wc(n[s>>2]|0,l,y(c))}function D(s){return s=s|0,ig(n[s>>2]|0)|0}function T(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=E,E=E+16|0,d=f,Ec(d,n[l>>2]|0,c),j(s,d),E=f}function j(s,l){s=s|0,l=l|0,W(s,n[l+4>>2]|0,+y(h[l>>2]))}function W(s,l,c){s=s|0,l=l|0,c=+c,n[s>>2]=l,C[s+8>>3]=c}function Ae(s){return s=s|0,ng(n[s>>2]|0)|0}function ve(s){return s=s|0,uo(n[s>>2]|0)|0}function vt(s){return s=s|0,mc(n[s>>2]|0)|0}function wt(s){return s=s|0,kA(n[s>>2]|0)|0}function bt(s){return s=s|0,Pm(n[s>>2]|0)|0}function _r(s){return s=s|0,rg(n[s>>2]|0)|0}function is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=E,E=E+16|0,d=f,Dt(d,n[l>>2]|0,c),j(s,d),E=f}function di(s){return s=s|0,$n(n[s>>2]|0)|0}function po(s){return s=s|0,og(n[s>>2]|0)|0}function KA(s,l){s=s|0,l=l|0;var c=0,f=0;c=E,E=E+16|0,f=c,ua(f,n[l>>2]|0),j(s,f),E=c}function Yo(s){return s=s|0,+ +y(qi(n[s>>2]|0))}function rt(s){return s=s|0,+ +y(es(n[s>>2]|0))}function Ve(s,l){s=s|0,l=l|0;var c=0,f=0;c=E,E=E+16|0,f=c,Br(f,n[l>>2]|0),j(s,f),E=c}function At(s,l){s=s|0,l=l|0;var c=0,f=0;c=E,E=E+16|0,f=c,ug(f,n[l>>2]|0),j(s,f),E=c}function Wt(s,l){s=s|0,l=l|0;var c=0,f=0;c=E,E=E+16|0,f=c,Ct(f,n[l>>2]|0),j(s,f),E=c}function vr(s,l){s=s|0,l=l|0;var c=0,f=0;c=E,E=E+16|0,f=c,fg(f,n[l>>2]|0),j(s,f),E=c}function Sn(s,l){s=s|0,l=l|0;var c=0,f=0;c=E,E=E+16|0,f=c,pg(f,n[l>>2]|0),j(s,f),E=c}function Fr(s,l){s=s|0,l=l|0;var c=0,f=0;c=E,E=E+16|0,f=c,bm(f,n[l>>2]|0),j(s,f),E=c}function xn(s){return s=s|0,+ +y(Bc(n[s>>2]|0))}function ai(s,l){return s=s|0,l=l|0,+ +y(ag(n[s>>2]|0,l))}function en(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=E,E=E+16|0,d=f,ct(d,n[l>>2]|0,c),j(s,d),E=f}function ho(s,l,c){s=s|0,l=l|0,c=c|0,nr(n[s>>2]|0,n[l>>2]|0,c)}function vF(s,l){s=s|0,l=l|0,ms(n[s>>2]|0,n[l>>2]|0)}function nve(s){return s=s|0,wi(n[s>>2]|0)|0}function ive(s){return s=s|0,s=pt(n[s>>2]|0)|0,s?s=Pw(s)|0:s=0,s|0}function sve(s,l){return s=s|0,l=l|0,s=gs(n[s>>2]|0,l)|0,s?s=Pw(s)|0:s=0,s|0}function ove(s,l){s=s|0,l=l|0;var c=0,f=0;f=Kt(4)|0,ZG(f,l),c=s+4|0,l=n[c>>2]|0,n[c>>2]=f,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,1)}function ZG(s,l){s=s|0,l=l|0,yve(s,l)}function ave(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0;var B=0,k=0;B=E,E=E+16|0,k=B,lve(k,jo(l)|0,+c,f,+d,m),h[s>>2]=y(+C[k>>3]),h[s+4>>2]=y(+C[k+8>>3]),E=B}function lve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0,k=0,Q=0,M=0,O=0;B=E,E=E+32|0,O=B+8|0,M=B+20|0,Q=B,k=B+16|0,C[O>>3]=c,n[M>>2]=f,C[Q>>3]=d,n[k>>2]=m,cve(s,n[l+4>>2]|0,O,M,Q,k),E=B}function cve(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0;B=E,E=E+16|0,k=B,Ka(k),l=da(l)|0,uve(s,l,+C[c>>3],n[f>>2]|0,+C[d>>3],n[m>>2]|0),Va(k),E=B}function da(s){return s=s|0,n[s>>2]|0}function uve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0;B=Pl(Ave()|0)|0,c=+VA(c),f=DF(f)|0,d=+VA(d),fve(s,hi(0,B|0,l|0,+c,f|0,+d,DF(m)|0)|0)}function Ave(){var s=0;return o[7608]|0||(dve(9120),s=7608,n[s>>2]=1,n[s+4>>2]=0),9120}function Pl(s){return s=s|0,n[s+8>>2]|0}function VA(s){return s=+s,+ +PF(s)}function DF(s){return s=s|0,e5(s)|0}function fve(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=E,E=E+32|0,c=d,f=l,f&1?(pve(c,0),ii(f|0,c|0)|0,hve(s,c),gve(c)):(n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]),E=d}function pve(s,l){s=s|0,l=l|0,$G(s,l),n[s+8>>2]=0,o[s+24>>0]=0}function hve(s,l){s=s|0,l=l|0,l=l+8|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]}function gve(s){s=s|0,o[s+24>>0]=0}function $G(s,l){s=s|0,l=l|0,n[s>>2]=l}function e5(s){return s=s|0,s|0}function PF(s){return s=+s,+s}function dve(s){s=s|0,Sl(s,mve()|0,4)}function mve(){return 1064}function Sl(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=lp(l|0,c+1|0)|0}function yve(s,l){s=s|0,l=l|0,l=n[l>>2]|0,n[s>>2]=l,yl(l|0)}function Eve(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,0)}function Cve(s){s=s|0,Tt(n[s>>2]|0)}function wve(s){return s=s|0,er(n[s>>2]|0)|0}function Ive(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,vc(n[s>>2]|0,y(l),y(c),f)}function Bve(s){return s=s|0,+ +y(Il(n[s>>2]|0))}function vve(s){return s=s|0,+ +y(hg(n[s>>2]|0))}function Dve(s){return s=s|0,+ +y(Iu(n[s>>2]|0))}function Pve(s){return s=s|0,+ +y(TA(n[s>>2]|0))}function Sve(s){return s=s|0,+ +y(pp(n[s>>2]|0))}function xve(s){return s=s|0,+ +y(ja(n[s>>2]|0))}function bve(s,l){s=s|0,l=l|0,C[s>>3]=+y(Il(n[l>>2]|0)),C[s+8>>3]=+y(hg(n[l>>2]|0)),C[s+16>>3]=+y(Iu(n[l>>2]|0)),C[s+24>>3]=+y(TA(n[l>>2]|0)),C[s+32>>3]=+y(pp(n[l>>2]|0)),C[s+40>>3]=+y(ja(n[l>>2]|0))}function kve(s,l){return s=s|0,l=l|0,+ +y(gg(n[s>>2]|0,l))}function Qve(s,l){return s=s|0,l=l|0,+ +y(hp(n[s>>2]|0,l))}function Fve(s,l){return s=s|0,l=l|0,+ +y(qo(n[s>>2]|0,l))}function Rve(){return Pn()|0}function Tve(){Lve(),Nve(),Ove(),Mve(),Uve(),_ve()}function Lve(){ULe(11713,4938,1)}function Nve(){iLe(10448)}function Ove(){UTe(10408)}function Mve(){lTe(10324)}function Uve(){dFe(10096)}function _ve(){Hve(9132)}function Hve(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Nt=0,Mr=0,or=0,Xt=0,Pr=0,Lr=0,ir=0,bn=0,go=0,mo=0,yo=0,ya=0,kp=0,Qp=0,xl=0,Fp=0,Fu=0,Ru=0,Rp=0,Tp=0,Lp=0,Xr=0,bl=0,Np=0,bc=0,Op=0,Mp=0,Tu=0,Lu=0,kc=0,Gs=0,Ja=0,Wo=0,kl=0,rf=0,nf=0,Nu=0,sf=0,of=0,Ys=0,vs=0,Ql=0,Rn=0,af=0,Eo=0,Qc=0,Co=0,Fc=0,lf=0,cf=0,Rc=0,Ws=0,Fl=0,uf=0,Af=0,ff=0,br=0,zn=0,Ds=0,wo=0,Ks=0,Rr=0,ur=0,Rl=0;l=E,E=E+672|0,c=l+656|0,Rl=l+648|0,ur=l+640|0,Rr=l+632|0,Ks=l+624|0,wo=l+616|0,Ds=l+608|0,zn=l+600|0,br=l+592|0,ff=l+584|0,Af=l+576|0,uf=l+568|0,Fl=l+560|0,Ws=l+552|0,Rc=l+544|0,cf=l+536|0,lf=l+528|0,Fc=l+520|0,Co=l+512|0,Qc=l+504|0,Eo=l+496|0,af=l+488|0,Rn=l+480|0,Ql=l+472|0,vs=l+464|0,Ys=l+456|0,of=l+448|0,sf=l+440|0,Nu=l+432|0,nf=l+424|0,rf=l+416|0,kl=l+408|0,Wo=l+400|0,Ja=l+392|0,Gs=l+384|0,kc=l+376|0,Lu=l+368|0,Tu=l+360|0,Mp=l+352|0,Op=l+344|0,bc=l+336|0,Np=l+328|0,bl=l+320|0,Xr=l+312|0,Lp=l+304|0,Tp=l+296|0,Rp=l+288|0,Ru=l+280|0,Fu=l+272|0,Fp=l+264|0,xl=l+256|0,Qp=l+248|0,kp=l+240|0,ya=l+232|0,yo=l+224|0,mo=l+216|0,go=l+208|0,bn=l+200|0,ir=l+192|0,Lr=l+184|0,Pr=l+176|0,Xt=l+168|0,or=l+160|0,Mr=l+152|0,Nt=l+144|0,qe=l+136|0,Ue=l+128|0,at=l+120|0,Xe=l+112|0,et=l+104|0,Qe=l+96|0,Me=l+88|0,Ge=l+80|0,se=l+72|0,q=l+64|0,O=l+56|0,M=l+48|0,Q=l+40|0,k=l+32|0,B=l+24|0,m=l+16|0,d=l+8|0,f=l,jve(s,3646),qve(s,3651,2)|0,Gve(s,3665,2)|0,Yve(s,3682,18)|0,n[Rl>>2]=19,n[Rl+4>>2]=0,n[c>>2]=n[Rl>>2],n[c+4>>2]=n[Rl+4>>2],Rw(s,3690,c)|0,n[ur>>2]=1,n[ur+4>>2]=0,n[c>>2]=n[ur>>2],n[c+4>>2]=n[ur+4>>2],Wve(s,3696,c)|0,n[Rr>>2]=2,n[Rr+4>>2]=0,n[c>>2]=n[Rr>>2],n[c+4>>2]=n[Rr+4>>2],bu(s,3706,c)|0,n[Ks>>2]=1,n[Ks+4>>2]=0,n[c>>2]=n[Ks>>2],n[c+4>>2]=n[Ks+4>>2],vg(s,3722,c)|0,n[wo>>2]=2,n[wo+4>>2]=0,n[c>>2]=n[wo>>2],n[c+4>>2]=n[wo+4>>2],vg(s,3734,c)|0,n[Ds>>2]=3,n[Ds+4>>2]=0,n[c>>2]=n[Ds>>2],n[c+4>>2]=n[Ds+4>>2],bu(s,3753,c)|0,n[zn>>2]=4,n[zn+4>>2]=0,n[c>>2]=n[zn>>2],n[c+4>>2]=n[zn+4>>2],bu(s,3769,c)|0,n[br>>2]=5,n[br+4>>2]=0,n[c>>2]=n[br>>2],n[c+4>>2]=n[br+4>>2],bu(s,3783,c)|0,n[ff>>2]=6,n[ff+4>>2]=0,n[c>>2]=n[ff>>2],n[c+4>>2]=n[ff+4>>2],bu(s,3796,c)|0,n[Af>>2]=7,n[Af+4>>2]=0,n[c>>2]=n[Af>>2],n[c+4>>2]=n[Af+4>>2],bu(s,3813,c)|0,n[uf>>2]=8,n[uf+4>>2]=0,n[c>>2]=n[uf>>2],n[c+4>>2]=n[uf+4>>2],bu(s,3825,c)|0,n[Fl>>2]=3,n[Fl+4>>2]=0,n[c>>2]=n[Fl>>2],n[c+4>>2]=n[Fl+4>>2],vg(s,3843,c)|0,n[Ws>>2]=4,n[Ws+4>>2]=0,n[c>>2]=n[Ws>>2],n[c+4>>2]=n[Ws+4>>2],vg(s,3853,c)|0,n[Rc>>2]=9,n[Rc+4>>2]=0,n[c>>2]=n[Rc>>2],n[c+4>>2]=n[Rc+4>>2],bu(s,3870,c)|0,n[cf>>2]=10,n[cf+4>>2]=0,n[c>>2]=n[cf>>2],n[c+4>>2]=n[cf+4>>2],bu(s,3884,c)|0,n[lf>>2]=11,n[lf+4>>2]=0,n[c>>2]=n[lf>>2],n[c+4>>2]=n[lf+4>>2],bu(s,3896,c)|0,n[Fc>>2]=1,n[Fc+4>>2]=0,n[c>>2]=n[Fc>>2],n[c+4>>2]=n[Fc+4>>2],Is(s,3907,c)|0,n[Co>>2]=2,n[Co+4>>2]=0,n[c>>2]=n[Co>>2],n[c+4>>2]=n[Co+4>>2],Is(s,3915,c)|0,n[Qc>>2]=3,n[Qc+4>>2]=0,n[c>>2]=n[Qc>>2],n[c+4>>2]=n[Qc+4>>2],Is(s,3928,c)|0,n[Eo>>2]=4,n[Eo+4>>2]=0,n[c>>2]=n[Eo>>2],n[c+4>>2]=n[Eo+4>>2],Is(s,3948,c)|0,n[af>>2]=5,n[af+4>>2]=0,n[c>>2]=n[af>>2],n[c+4>>2]=n[af+4>>2],Is(s,3960,c)|0,n[Rn>>2]=6,n[Rn+4>>2]=0,n[c>>2]=n[Rn>>2],n[c+4>>2]=n[Rn+4>>2],Is(s,3974,c)|0,n[Ql>>2]=7,n[Ql+4>>2]=0,n[c>>2]=n[Ql>>2],n[c+4>>2]=n[Ql+4>>2],Is(s,3983,c)|0,n[vs>>2]=20,n[vs+4>>2]=0,n[c>>2]=n[vs>>2],n[c+4>>2]=n[vs+4>>2],Rw(s,3999,c)|0,n[Ys>>2]=8,n[Ys+4>>2]=0,n[c>>2]=n[Ys>>2],n[c+4>>2]=n[Ys+4>>2],Is(s,4012,c)|0,n[of>>2]=9,n[of+4>>2]=0,n[c>>2]=n[of>>2],n[c+4>>2]=n[of+4>>2],Is(s,4022,c)|0,n[sf>>2]=21,n[sf+4>>2]=0,n[c>>2]=n[sf>>2],n[c+4>>2]=n[sf+4>>2],Rw(s,4039,c)|0,n[Nu>>2]=10,n[Nu+4>>2]=0,n[c>>2]=n[Nu>>2],n[c+4>>2]=n[Nu+4>>2],Is(s,4053,c)|0,n[nf>>2]=11,n[nf+4>>2]=0,n[c>>2]=n[nf>>2],n[c+4>>2]=n[nf+4>>2],Is(s,4065,c)|0,n[rf>>2]=12,n[rf+4>>2]=0,n[c>>2]=n[rf>>2],n[c+4>>2]=n[rf+4>>2],Is(s,4084,c)|0,n[kl>>2]=13,n[kl+4>>2]=0,n[c>>2]=n[kl>>2],n[c+4>>2]=n[kl+4>>2],Is(s,4097,c)|0,n[Wo>>2]=14,n[Wo+4>>2]=0,n[c>>2]=n[Wo>>2],n[c+4>>2]=n[Wo+4>>2],Is(s,4117,c)|0,n[Ja>>2]=15,n[Ja+4>>2]=0,n[c>>2]=n[Ja>>2],n[c+4>>2]=n[Ja+4>>2],Is(s,4129,c)|0,n[Gs>>2]=16,n[Gs+4>>2]=0,n[c>>2]=n[Gs>>2],n[c+4>>2]=n[Gs+4>>2],Is(s,4148,c)|0,n[kc>>2]=17,n[kc+4>>2]=0,n[c>>2]=n[kc>>2],n[c+4>>2]=n[kc+4>>2],Is(s,4161,c)|0,n[Lu>>2]=18,n[Lu+4>>2]=0,n[c>>2]=n[Lu>>2],n[c+4>>2]=n[Lu+4>>2],Is(s,4181,c)|0,n[Tu>>2]=5,n[Tu+4>>2]=0,n[c>>2]=n[Tu>>2],n[c+4>>2]=n[Tu+4>>2],vg(s,4196,c)|0,n[Mp>>2]=6,n[Mp+4>>2]=0,n[c>>2]=n[Mp>>2],n[c+4>>2]=n[Mp+4>>2],vg(s,4206,c)|0,n[Op>>2]=7,n[Op+4>>2]=0,n[c>>2]=n[Op>>2],n[c+4>>2]=n[Op+4>>2],vg(s,4217,c)|0,n[bc>>2]=3,n[bc+4>>2]=0,n[c>>2]=n[bc>>2],n[c+4>>2]=n[bc+4>>2],zA(s,4235,c)|0,n[Np>>2]=1,n[Np+4>>2]=0,n[c>>2]=n[Np>>2],n[c+4>>2]=n[Np+4>>2],SF(s,4251,c)|0,n[bl>>2]=4,n[bl+4>>2]=0,n[c>>2]=n[bl>>2],n[c+4>>2]=n[bl+4>>2],zA(s,4263,c)|0,n[Xr>>2]=5,n[Xr+4>>2]=0,n[c>>2]=n[Xr>>2],n[c+4>>2]=n[Xr+4>>2],zA(s,4279,c)|0,n[Lp>>2]=6,n[Lp+4>>2]=0,n[c>>2]=n[Lp>>2],n[c+4>>2]=n[Lp+4>>2],zA(s,4293,c)|0,n[Tp>>2]=7,n[Tp+4>>2]=0,n[c>>2]=n[Tp>>2],n[c+4>>2]=n[Tp+4>>2],zA(s,4306,c)|0,n[Rp>>2]=8,n[Rp+4>>2]=0,n[c>>2]=n[Rp>>2],n[c+4>>2]=n[Rp+4>>2],zA(s,4323,c)|0,n[Ru>>2]=9,n[Ru+4>>2]=0,n[c>>2]=n[Ru>>2],n[c+4>>2]=n[Ru+4>>2],zA(s,4335,c)|0,n[Fu>>2]=2,n[Fu+4>>2]=0,n[c>>2]=n[Fu>>2],n[c+4>>2]=n[Fu+4>>2],SF(s,4353,c)|0,n[Fp>>2]=12,n[Fp+4>>2]=0,n[c>>2]=n[Fp>>2],n[c+4>>2]=n[Fp+4>>2],Dg(s,4363,c)|0,n[xl>>2]=1,n[xl+4>>2]=0,n[c>>2]=n[xl>>2],n[c+4>>2]=n[xl+4>>2],JA(s,4376,c)|0,n[Qp>>2]=2,n[Qp+4>>2]=0,n[c>>2]=n[Qp>>2],n[c+4>>2]=n[Qp+4>>2],JA(s,4388,c)|0,n[kp>>2]=13,n[kp+4>>2]=0,n[c>>2]=n[kp>>2],n[c+4>>2]=n[kp+4>>2],Dg(s,4402,c)|0,n[ya>>2]=14,n[ya+4>>2]=0,n[c>>2]=n[ya>>2],n[c+4>>2]=n[ya+4>>2],Dg(s,4411,c)|0,n[yo>>2]=15,n[yo+4>>2]=0,n[c>>2]=n[yo>>2],n[c+4>>2]=n[yo+4>>2],Dg(s,4421,c)|0,n[mo>>2]=16,n[mo+4>>2]=0,n[c>>2]=n[mo>>2],n[c+4>>2]=n[mo+4>>2],Dg(s,4433,c)|0,n[go>>2]=17,n[go+4>>2]=0,n[c>>2]=n[go>>2],n[c+4>>2]=n[go+4>>2],Dg(s,4446,c)|0,n[bn>>2]=18,n[bn+4>>2]=0,n[c>>2]=n[bn>>2],n[c+4>>2]=n[bn+4>>2],Dg(s,4458,c)|0,n[ir>>2]=3,n[ir+4>>2]=0,n[c>>2]=n[ir>>2],n[c+4>>2]=n[ir+4>>2],JA(s,4471,c)|0,n[Lr>>2]=1,n[Lr+4>>2]=0,n[c>>2]=n[Lr>>2],n[c+4>>2]=n[Lr+4>>2],iD(s,4486,c)|0,n[Pr>>2]=10,n[Pr+4>>2]=0,n[c>>2]=n[Pr>>2],n[c+4>>2]=n[Pr+4>>2],zA(s,4496,c)|0,n[Xt>>2]=11,n[Xt+4>>2]=0,n[c>>2]=n[Xt>>2],n[c+4>>2]=n[Xt+4>>2],zA(s,4508,c)|0,n[or>>2]=3,n[or+4>>2]=0,n[c>>2]=n[or>>2],n[c+4>>2]=n[or+4>>2],SF(s,4519,c)|0,n[Mr>>2]=4,n[Mr+4>>2]=0,n[c>>2]=n[Mr>>2],n[c+4>>2]=n[Mr+4>>2],Kve(s,4530,c)|0,n[Nt>>2]=19,n[Nt+4>>2]=0,n[c>>2]=n[Nt>>2],n[c+4>>2]=n[Nt+4>>2],Vve(s,4542,c)|0,n[qe>>2]=12,n[qe+4>>2]=0,n[c>>2]=n[qe>>2],n[c+4>>2]=n[qe+4>>2],zve(s,4554,c)|0,n[Ue>>2]=13,n[Ue+4>>2]=0,n[c>>2]=n[Ue>>2],n[c+4>>2]=n[Ue+4>>2],Jve(s,4568,c)|0,n[at>>2]=2,n[at+4>>2]=0,n[c>>2]=n[at>>2],n[c+4>>2]=n[at+4>>2],Xve(s,4578,c)|0,n[Xe>>2]=20,n[Xe+4>>2]=0,n[c>>2]=n[Xe>>2],n[c+4>>2]=n[Xe+4>>2],Zve(s,4587,c)|0,n[et>>2]=22,n[et+4>>2]=0,n[c>>2]=n[et>>2],n[c+4>>2]=n[et+4>>2],Rw(s,4602,c)|0,n[Qe>>2]=23,n[Qe+4>>2]=0,n[c>>2]=n[Qe>>2],n[c+4>>2]=n[Qe+4>>2],Rw(s,4619,c)|0,n[Me>>2]=14,n[Me+4>>2]=0,n[c>>2]=n[Me>>2],n[c+4>>2]=n[Me+4>>2],$ve(s,4629,c)|0,n[Ge>>2]=1,n[Ge+4>>2]=0,n[c>>2]=n[Ge>>2],n[c+4>>2]=n[Ge+4>>2],eDe(s,4637,c)|0,n[se>>2]=4,n[se+4>>2]=0,n[c>>2]=n[se>>2],n[c+4>>2]=n[se+4>>2],JA(s,4653,c)|0,n[q>>2]=5,n[q+4>>2]=0,n[c>>2]=n[q>>2],n[c+4>>2]=n[q+4>>2],JA(s,4669,c)|0,n[O>>2]=6,n[O+4>>2]=0,n[c>>2]=n[O>>2],n[c+4>>2]=n[O+4>>2],JA(s,4686,c)|0,n[M>>2]=7,n[M+4>>2]=0,n[c>>2]=n[M>>2],n[c+4>>2]=n[M+4>>2],JA(s,4701,c)|0,n[Q>>2]=8,n[Q+4>>2]=0,n[c>>2]=n[Q>>2],n[c+4>>2]=n[Q+4>>2],JA(s,4719,c)|0,n[k>>2]=9,n[k+4>>2]=0,n[c>>2]=n[k>>2],n[c+4>>2]=n[k+4>>2],JA(s,4736,c)|0,n[B>>2]=21,n[B+4>>2]=0,n[c>>2]=n[B>>2],n[c+4>>2]=n[B+4>>2],tDe(s,4754,c)|0,n[m>>2]=2,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],iD(s,4772,c)|0,n[d>>2]=3,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],iD(s,4790,c)|0,n[f>>2]=4,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],iD(s,4808,c)|0,E=l}function jve(s,l){s=s|0,l=l|0;var c=0;c=aFe()|0,n[s>>2]=c,lFe(c,l),Sp(n[s>>2]|0)}function qve(s,l,c){return s=s|0,l=l|0,c=c|0,KQe(s,pn(l)|0,c,0),s|0}function Gve(s,l,c){return s=s|0,l=l|0,c=c|0,QQe(s,pn(l)|0,c,0),s|0}function Yve(s,l,c){return s=s|0,l=l|0,c=c|0,mQe(s,pn(l)|0,c,0),s|0}function Rw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],tQe(s,l,d),E=f,s|0}function Wve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Nke(s,l,d),E=f,s|0}function bu(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Cke(s,l,d),E=f,s|0}function vg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ike(s,l,d),E=f,s|0}function Is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jbe(s,l,d),E=f,s|0}function zA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Pbe(s,l,d),E=f,s|0}function SF(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ube(s,l,d),E=f,s|0}function Dg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Nxe(s,l,d),E=f,s|0}function JA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Cxe(s,l,d),E=f,s|0}function iD(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ixe(s,l,d),E=f,s|0}function Kve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jSe(s,l,d),E=f,s|0}function Vve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],PSe(s,l,d),E=f,s|0}function zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ASe(s,l,d),E=f,s|0}function Jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],JPe(s,l,d),E=f,s|0}function Xve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],RPe(s,l,d),E=f,s|0}function Zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],dPe(s,l,d),E=f,s|0}function $ve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ePe(s,l,d),E=f,s|0}function eDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],NDe(s,l,d),E=f,s|0}function tDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rDe(s,l,d),E=f,s|0}function rDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],nDe(s,c,d,1),E=f}function pn(s){return s=s|0,s|0}function nDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=xF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=iDe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,sDe(m,f)|0,f),E=d}function xF(){var s=0,l=0;if(o[7616]|0||(n5(9136),tr(24,9136,U|0)|0,l=7616,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9136)|0)){s=9136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));n5(9136)}return 9136}function iDe(s){return s=s|0,0}function sDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=xF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],r5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(lDe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function hn(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,q=0,se=0,Ge=0;B=E,E=E+32|0,se=B+24|0,q=B+20|0,Q=B+16|0,O=B+12|0,M=B+8|0,k=B+4|0,Ge=B,n[q>>2]=l,n[Q>>2]=c,n[O>>2]=f,n[M>>2]=d,n[k>>2]=m,m=s+28|0,n[Ge>>2]=n[m>>2],n[se>>2]=n[Ge>>2],oDe(s+24|0,se,q,O,M,Q,k)|0,n[m>>2]=n[n[m>>2]>>2],E=B}function oDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,s=aDe(l)|0,l=Kt(24)|0,t5(l+4|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0,n[B>>2]|0),n[l>>2]=n[s>>2],n[s>>2]=l,l|0}function aDe(s){return s=s|0,n[s>>2]|0}function t5(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function gr(s,l){return s=s|0,l=l|0,l|s|0}function r5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function lDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=cDe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,uDe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],r5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,ADe(s,k),fDe(k),E=M;return}}function cDe(s){return s=s|0,357913941}function uDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function ADe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function fDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function n5(s){s=s|0,gDe(s)}function pDe(s){s=s|0,hDe(s+24|0)}function Tr(s){return s=s|0,n[s>>2]|0}function hDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function gDe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,3,l,dDe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Kr(){return 9228}function dDe(){return 1140}function mDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=E,E=E+16|0,f=c+8|0,d=c,m=yDe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=EDe(l,f)|0,E=c,l|0}function Vr(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function yDe(s){return s=s|0,(n[(xF()|0)+24>>2]|0)+(s*12|0)|0}function EDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=E,E=E+48|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&31](f,s),f=CDe(f)|0,E=d,f|0}function CDe(s){s=s|0;var l=0,c=0,f=0,d=0;return d=E,E=E+32|0,l=d+12|0,c=d,f=bF(i5()|0)|0,f?(kF(l,f),QF(c,l),wDe(s,c),s=FF(l)|0):s=IDe(s)|0,E=d,s|0}function i5(){var s=0;return o[7632]|0||(FDe(9184),tr(25,9184,U|0)|0,s=7632,n[s>>2]=1,n[s+4>>2]=0),9184}function bF(s){return s=s|0,n[s+36>>2]|0}function kF(s,l){s=s|0,l=l|0,n[s>>2]=l,n[s+4>>2]=s,n[s+8>>2]=0}function QF(s,l){s=s|0,l=l|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=0}function wDe(s,l){s=s|0,l=l|0,PDe(l,s,s+8|0,s+16|0,s+24|0,s+32|0,s+40|0)|0}function FF(s){return s=s|0,n[(n[s+4>>2]|0)+8>>2]|0}function IDe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;Q=E,E=E+16|0,c=Q+4|0,f=Q,d=Wa(8)|0,m=d,B=Kt(48)|0,k=B,l=k+48|0;do n[k>>2]=n[s>>2],k=k+4|0,s=s+4|0;while((k|0)<(l|0));return l=m+4|0,n[l>>2]=B,k=Kt(8)|0,B=n[l>>2]|0,n[f>>2]=0,n[c>>2]=n[f>>2],s5(k,B,c),n[d>>2]=k,E=Q,m|0}function s5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1092,n[c+12>>2]=l,n[s+4>>2]=c}function BDe(s){s=s|0,zm(s),gt(s)}function vDe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function DDe(s){s=s|0,gt(s)}function PDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,m=SDe(n[s>>2]|0,l,c,f,d,m,B)|0,B=s+4|0,n[(n[B>>2]|0)+8>>2]=m,n[(n[B>>2]|0)+8>>2]|0}function SDe(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0;var k=0,Q=0;return k=E,E=E+16|0,Q=k,Ka(Q),s=da(s)|0,B=xDe(s,+C[l>>3],+C[c>>3],+C[f>>3],+C[d>>3],+C[m>>3],+C[B>>3])|0,Va(Q),E=k,B|0}function xDe(s,l,c,f,d,m,B){s=s|0,l=+l,c=+c,f=+f,d=+d,m=+m,B=+B;var k=0;return k=Pl(bDe()|0)|0,l=+VA(l),c=+VA(c),f=+VA(f),d=+VA(d),m=+VA(m),Us(0,k|0,s|0,+l,+c,+f,+d,+m,+ +VA(B))|0}function bDe(){var s=0;return o[7624]|0||(kDe(9172),s=7624,n[s>>2]=1,n[s+4>>2]=0),9172}function kDe(s){s=s|0,Sl(s,QDe()|0,6)}function QDe(){return 1112}function FDe(s){s=s|0,Ip(s)}function RDe(s){s=s|0,o5(s+24|0),a5(s+16|0)}function o5(s){s=s|0,LDe(s)}function a5(s){s=s|0,TDe(s)}function TDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function LDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function Ip(s){s=s|0;var l=0;n[s+16>>2]=0,n[s+20>>2]=0,l=s+24|0,n[l>>2]=0,n[s+28>>2]=l,n[s+36>>2]=0,o[s+40>>0]=0,o[s+41>>0]=0}function NDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ODe(s,c,d,0),E=f}function ODe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=RF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=MDe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,UDe(m,f)|0,f),E=d}function RF(){var s=0,l=0;if(o[7640]|0||(c5(9232),tr(26,9232,U|0)|0,l=7640,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9232)|0)){s=9232,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));c5(9232)}return 9232}function MDe(s){return s=s|0,0}function UDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=RF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],l5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(_De(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function l5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function _De(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=HDe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,jDe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],l5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,qDe(s,k),GDe(k),E=M;return}}function HDe(s){return s=s|0,357913941}function jDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function qDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function GDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function c5(s){s=s|0,KDe(s)}function YDe(s){s=s|0,WDe(s+24|0)}function WDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function KDe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,VDe()|0,3),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VDe(){return 1144}function zDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0;m=E,E=E+16|0,B=m+8|0,k=m,Q=JDe(s)|0,s=n[Q+4>>2]|0,n[k>>2]=n[Q>>2],n[k+4>>2]=s,n[B>>2]=n[k>>2],n[B+4>>2]=n[k+4>>2],XDe(l,B,c,f,d),E=m}function JDe(s){return s=s|0,(n[(RF()|0)+24>>2]|0)+(s*12|0)|0}function XDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0,M=0;M=E,E=E+16|0,B=M+2|0,k=M+1|0,Q=M,m=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(m=n[(n[s>>2]|0)+m>>2]|0),ku(B,c),c=+Qu(B,c),ku(k,f),f=+Qu(k,f),XA(Q,d),Q=ZA(Q,d)|0,v7[m&1](s,c,f,Q),E=M}function ku(s,l){s=s|0,l=+l}function Qu(s,l){return s=s|0,l=+l,+ +$De(l)}function XA(s,l){s=s|0,l=l|0}function ZA(s,l){return s=s|0,l=l|0,ZDe(l)|0}function ZDe(s){return s=s|0,s|0}function $De(s){return s=+s,+s}function ePe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],tPe(s,c,d,1),E=f}function tPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=TF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=rPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,nPe(m,f)|0,f),E=d}function TF(){var s=0,l=0;if(o[7648]|0||(A5(9268),tr(27,9268,U|0)|0,l=7648,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9268)|0)){s=9268,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));A5(9268)}return 9268}function rPe(s){return s=s|0,0}function nPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=TF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],u5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(iPe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function u5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function iPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=sPe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,oPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],u5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,aPe(s,k),lPe(k),E=M;return}}function sPe(s){return s=s|0,357913941}function oPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function aPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function lPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function A5(s){s=s|0,APe(s)}function cPe(s){s=s|0,uPe(s+24|0)}function uPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function APe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,4,l,fPe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function fPe(){return 1160}function pPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=E,E=E+16|0,f=c+8|0,d=c,m=hPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=gPe(l,f)|0,E=c,l|0}function hPe(s){return s=s|0,(n[(TF()|0)+24>>2]|0)+(s*12|0)|0}function gPe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),f5(Tg[c&31](s)|0)|0}function f5(s){return s=s|0,s&1|0}function dPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],mPe(s,c,d,0),E=f}function mPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=LF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=yPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,EPe(m,f)|0,f),E=d}function LF(){var s=0,l=0;if(o[7656]|0||(h5(9304),tr(28,9304,U|0)|0,l=7656,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9304)|0)){s=9304,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));h5(9304)}return 9304}function yPe(s){return s=s|0,0}function EPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=LF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],p5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(CPe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function p5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function CPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=wPe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,IPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],p5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,BPe(s,k),vPe(k),E=M;return}}function wPe(s){return s=s|0,357913941}function IPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function BPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function vPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function h5(s){s=s|0,SPe(s)}function DPe(s){s=s|0,PPe(s+24|0)}function PPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function SPe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,xPe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function xPe(){return 1164}function bPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=E,E=E+16|0,d=f+8|0,m=f,B=kPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],QPe(l,d,c),E=f}function kPe(s){return s=s|0,(n[(LF()|0)+24>>2]|0)+(s*12|0)|0}function QPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=E,E=E+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Bp(d,c),c=vp(d,c)|0,tf[f&31](s,c),Dp(d),E=m}function Bp(s,l){s=s|0,l=l|0,FPe(s,l)}function vp(s,l){return s=s|0,l=l|0,s|0}function Dp(s){s=s|0,jA(s)}function FPe(s,l){s=s|0,l=l|0,NF(s,l)}function NF(s,l){s=s|0,l=l|0,n[s>>2]=l}function RPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],TPe(s,c,d,0),E=f}function TPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=OF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=LPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,NPe(m,f)|0,f),E=d}function OF(){var s=0,l=0;if(o[7664]|0||(d5(9340),tr(29,9340,U|0)|0,l=7664,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9340)|0)){s=9340,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));d5(9340)}return 9340}function LPe(s){return s=s|0,0}function NPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=OF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],g5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(OPe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function g5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function OPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=MPe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,UPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],g5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,_Pe(s,k),HPe(k),E=M;return}}function MPe(s){return s=s|0,357913941}function UPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function _Pe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function HPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function d5(s){s=s|0,GPe(s)}function jPe(s){s=s|0,qPe(s+24|0)}function qPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function GPe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,4,l,YPe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function YPe(){return 1180}function WPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=KPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=VPe(l,d,c)|0,E=f,c|0}function KPe(s){return s=s|0,(n[(OF()|0)+24>>2]|0)+(s*12|0)|0}function VPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=E,E=E+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Pg(d,c),d=Sg(d,c)|0,d=sD(RR[f&15](s,d)|0)|0,E=m,d|0}function Pg(s,l){s=s|0,l=l|0}function Sg(s,l){return s=s|0,l=l|0,zPe(l)|0}function sD(s){return s=s|0,s|0}function zPe(s){return s=s|0,s|0}function JPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],XPe(s,c,d,0),E=f}function XPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=MF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=ZPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,$Pe(m,f)|0,f),E=d}function MF(){var s=0,l=0;if(o[7672]|0||(y5(9376),tr(30,9376,U|0)|0,l=7672,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9376)|0)){s=9376,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));y5(9376)}return 9376}function ZPe(s){return s=s|0,0}function $Pe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=MF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],m5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(eSe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function m5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function eSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=tSe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,rSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],m5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,nSe(s,k),iSe(k),E=M;return}}function tSe(s){return s=s|0,357913941}function rSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function nSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function iSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function y5(s){s=s|0,aSe(s)}function sSe(s){s=s|0,oSe(s+24|0)}function oSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function aSe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,E5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function E5(){return 1196}function lSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=E,E=E+16|0,f=c+8|0,d=c,m=cSe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=uSe(l,f)|0,E=c,l|0}function cSe(s){return s=s|0,(n[(MF()|0)+24>>2]|0)+(s*12|0)|0}function uSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),sD(Tg[c&31](s)|0)|0}function ASe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],fSe(s,c,d,1),E=f}function fSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=UF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=pSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,hSe(m,f)|0,f),E=d}function UF(){var s=0,l=0;if(o[7680]|0||(w5(9412),tr(31,9412,U|0)|0,l=7680,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9412)|0)){s=9412,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));w5(9412)}return 9412}function pSe(s){return s=s|0,0}function hSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=UF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],C5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(gSe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function C5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function gSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=dSe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,mSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],C5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,ySe(s,k),ESe(k),E=M;return}}function dSe(s){return s=s|0,357913941}function mSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function ySe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ESe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function w5(s){s=s|0,ISe(s)}function CSe(s){s=s|0,wSe(s+24|0)}function wSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function ISe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,6,l,I5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function I5(){return 1200}function BSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=E,E=E+16|0,f=c+8|0,d=c,m=vSe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=DSe(l,f)|0,E=c,l|0}function vSe(s){return s=s|0,(n[(UF()|0)+24>>2]|0)+(s*12|0)|0}function DSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),oD(Tg[c&31](s)|0)|0}function oD(s){return s=s|0,s|0}function PSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],SSe(s,c,d,0),E=f}function SSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=_F()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=xSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,bSe(m,f)|0,f),E=d}function _F(){var s=0,l=0;if(o[7688]|0||(v5(9448),tr(32,9448,U|0)|0,l=7688,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9448)|0)){s=9448,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));v5(9448)}return 9448}function xSe(s){return s=s|0,0}function bSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=_F()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],B5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(kSe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function B5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function kSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=QSe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,FSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],B5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,RSe(s,k),TSe(k),E=M;return}}function QSe(s){return s=s|0,357913941}function FSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function RSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function TSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function v5(s){s=s|0,OSe(s)}function LSe(s){s=s|0,NSe(s+24|0)}function NSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function OSe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,6,l,D5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function D5(){return 1204}function MSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=E,E=E+16|0,d=f+8|0,m=f,B=USe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],_Se(l,d,c),E=f}function USe(s){return s=s|0,(n[(_F()|0)+24>>2]|0)+(s*12|0)|0}function _Se(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=E,E=E+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),HF(d,c),d=jF(d,c)|0,tf[f&31](s,d),E=m}function HF(s,l){s=s|0,l=l|0}function jF(s,l){return s=s|0,l=l|0,HSe(l)|0}function HSe(s){return s=s|0,s|0}function jSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],qSe(s,c,d,0),E=f}function qSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=qF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=GSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,YSe(m,f)|0,f),E=d}function qF(){var s=0,l=0;if(o[7696]|0||(S5(9484),tr(33,9484,U|0)|0,l=7696,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9484)|0)){s=9484,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));S5(9484)}return 9484}function GSe(s){return s=s|0,0}function YSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=qF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],P5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(WSe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function P5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function WSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=KSe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,VSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],P5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,zSe(s,k),JSe(k),E=M;return}}function KSe(s){return s=s|0,357913941}function VSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function zSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function S5(s){s=s|0,$Se(s)}function XSe(s){s=s|0,ZSe(s+24|0)}function ZSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function $Se(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,exe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function exe(){return 1212}function txe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=E,E=E+16|0,m=d+8|0,B=d,k=rxe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],nxe(l,m,c,f),E=d}function rxe(s){return s=s|0,(n[(qF()|0)+24>>2]|0)+(s*12|0)|0}function nxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=E,E=E+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),HF(m,c),m=jF(m,c)|0,Pg(B,f),B=Sg(B,f)|0,_w[d&15](s,m,B),E=k}function ixe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],sxe(s,c,d,1),E=f}function sxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=GF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=oxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,axe(m,f)|0,f),E=d}function GF(){var s=0,l=0;if(o[7704]|0||(b5(9520),tr(34,9520,U|0)|0,l=7704,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9520)|0)){s=9520,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));b5(9520)}return 9520}function oxe(s){return s=s|0,0}function axe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=GF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],x5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(lxe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function x5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function lxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=cxe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,uxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],x5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Axe(s,k),fxe(k),E=M;return}}function cxe(s){return s=s|0,357913941}function uxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Axe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function fxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function b5(s){s=s|0,gxe(s)}function pxe(s){s=s|0,hxe(s+24|0)}function hxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function gxe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,dxe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function dxe(){return 1224}function mxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;return d=E,E=E+16|0,m=d+8|0,B=d,k=yxe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],f=+Exe(l,m,c),E=d,+f}function yxe(s){return s=s|0,(n[(GF()|0)+24>>2]|0)+(s*12|0)|0}function Exe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return m=E,E=E+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,B=+PF(+P7[f&7](s,d)),E=m,+B}function Cxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],wxe(s,c,d,1),E=f}function wxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=YF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Ixe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Bxe(m,f)|0,f),E=d}function YF(){var s=0,l=0;if(o[7712]|0||(Q5(9556),tr(35,9556,U|0)|0,l=7712,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9556)|0)){s=9556,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Q5(9556)}return 9556}function Ixe(s){return s=s|0,0}function Bxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=YF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],k5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(vxe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function k5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function vxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Dxe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,Pxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],k5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Sxe(s,k),xxe(k),E=M;return}}function Dxe(s){return s=s|0,357913941}function Pxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Sxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function xxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function Q5(s){s=s|0,Qxe(s)}function bxe(s){s=s|0,kxe(s+24|0)}function kxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Qxe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,Fxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Fxe(){return 1232}function Rxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=Txe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=+Lxe(l,d),E=f,+c}function Txe(s){return s=s|0,(n[(YF()|0)+24>>2]|0)+(s*12|0)|0}function Lxe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),+ +PF(+D7[c&15](s))}function Nxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Oxe(s,c,d,1),E=f}function Oxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=WF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Mxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Uxe(m,f)|0,f),E=d}function WF(){var s=0,l=0;if(o[7720]|0||(R5(9592),tr(36,9592,U|0)|0,l=7720,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9592)|0)){s=9592,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));R5(9592)}return 9592}function Mxe(s){return s=s|0,0}function Uxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=WF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],F5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(_xe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function F5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function _xe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Hxe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,jxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],F5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,qxe(s,k),Gxe(k),E=M;return}}function Hxe(s){return s=s|0,357913941}function jxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function qxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Gxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function R5(s){s=s|0,Kxe(s)}function Yxe(s){s=s|0,Wxe(s+24|0)}function Wxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Kxe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,7,l,Vxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Vxe(){return 1276}function zxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=E,E=E+16|0,f=c+8|0,d=c,m=Jxe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=Xxe(l,f)|0,E=c,l|0}function Jxe(s){return s=s|0,(n[(WF()|0)+24>>2]|0)+(s*12|0)|0}function Xxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=E,E=E+16|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&31](f,s),f=T5(f)|0,E=d,f|0}function T5(s){s=s|0;var l=0,c=0,f=0,d=0;return d=E,E=E+32|0,l=d+12|0,c=d,f=bF(L5()|0)|0,f?(kF(l,f),QF(c,l),Zxe(s,c),s=FF(l)|0):s=$xe(s)|0,E=d,s|0}function L5(){var s=0;return o[7736]|0||(cbe(9640),tr(25,9640,U|0)|0,s=7736,n[s>>2]=1,n[s+4>>2]=0),9640}function Zxe(s,l){s=s|0,l=l|0,nbe(l,s,s+8|0)|0}function $xe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=E,E=E+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Kt(16)|0,n[k>>2]=n[s>>2],n[k+4>>2]=n[s+4>>2],n[k+8>>2]=n[s+8>>2],n[k+12>>2]=n[s+12>>2],m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],KF(s,m,d),n[f>>2]=s,E=c,l|0}function KF(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1244,n[c+12>>2]=l,n[s+4>>2]=c}function ebe(s){s=s|0,zm(s),gt(s)}function tbe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function rbe(s){s=s|0,gt(s)}function nbe(s,l,c){return s=s|0,l=l|0,c=c|0,l=ibe(n[s>>2]|0,l,c)|0,c=s+4|0,n[(n[c>>2]|0)+8>>2]=l,n[(n[c>>2]|0)+8>>2]|0}function ibe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return f=E,E=E+16|0,d=f,Ka(d),s=da(s)|0,c=sbe(s,n[l>>2]|0,+C[c>>3])|0,Va(d),E=f,c|0}function sbe(s,l,c){s=s|0,l=l|0,c=+c;var f=0;return f=Pl(obe()|0)|0,l=DF(l)|0,ml(0,f|0,s|0,l|0,+ +VA(c))|0}function obe(){var s=0;return o[7728]|0||(abe(9628),s=7728,n[s>>2]=1,n[s+4>>2]=0),9628}function abe(s){s=s|0,Sl(s,lbe()|0,2)}function lbe(){return 1264}function cbe(s){s=s|0,Ip(s)}function ube(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Abe(s,c,d,1),E=f}function Abe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=VF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=fbe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,pbe(m,f)|0,f),E=d}function VF(){var s=0,l=0;if(o[7744]|0||(O5(9684),tr(37,9684,U|0)|0,l=7744,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9684)|0)){s=9684,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));O5(9684)}return 9684}function fbe(s){return s=s|0,0}function pbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=VF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],N5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(hbe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function N5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function hbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=gbe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,dbe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],N5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,mbe(s,k),ybe(k),E=M;return}}function gbe(s){return s=s|0,357913941}function dbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function mbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ybe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function O5(s){s=s|0,wbe(s)}function Ebe(s){s=s|0,Cbe(s+24|0)}function Cbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function wbe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,Ibe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Ibe(){return 1280}function Bbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=vbe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=Dbe(l,d,c)|0,E=f,c|0}function vbe(s){return s=s|0,(n[(VF()|0)+24>>2]|0)+(s*12|0)|0}function Dbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return B=E,E=E+32|0,d=B,m=B+16|0,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(m,c),m=ZA(m,c)|0,_w[f&15](d,s,m),m=T5(d)|0,E=B,m|0}function Pbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Sbe(s,c,d,1),E=f}function Sbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=zF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=xbe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,bbe(m,f)|0,f),E=d}function zF(){var s=0,l=0;if(o[7752]|0||(U5(9720),tr(38,9720,U|0)|0,l=7752,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9720)|0)){s=9720,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));U5(9720)}return 9720}function xbe(s){return s=s|0,0}function bbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=zF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],M5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(kbe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function M5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function kbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Qbe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,Fbe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],M5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Rbe(s,k),Tbe(k),E=M;return}}function Qbe(s){return s=s|0,357913941}function Fbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Rbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Tbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function U5(s){s=s|0,Obe(s)}function Lbe(s){s=s|0,Nbe(s+24|0)}function Nbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Obe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,8,l,Mbe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Mbe(){return 1288}function Ube(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=E,E=E+16|0,f=c+8|0,d=c,m=_be(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=Hbe(l,f)|0,E=c,l|0}function _be(s){return s=s|0,(n[(zF()|0)+24>>2]|0)+(s*12|0)|0}function Hbe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),e5(Tg[c&31](s)|0)|0}function jbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],qbe(s,c,d,0),E=f}function qbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=JF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Gbe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Ybe(m,f)|0,f),E=d}function JF(){var s=0,l=0;if(o[7760]|0||(H5(9756),tr(39,9756,U|0)|0,l=7760,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9756)|0)){s=9756,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));H5(9756)}return 9756}function Gbe(s){return s=s|0,0}function Ybe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=JF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],_5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Wbe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function _5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Wbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Kbe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,Vbe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],_5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,zbe(s,k),Jbe(k),E=M;return}}function Kbe(s){return s=s|0,357913941}function Vbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function zbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Jbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function H5(s){s=s|0,$be(s)}function Xbe(s){s=s|0,Zbe(s+24|0)}function Zbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function $be(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,8,l,eke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function eke(){return 1292}function tke(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=E,E=E+16|0,d=f+8|0,m=f,B=rke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],nke(l,d,c),E=f}function rke(s){return s=s|0,(n[(JF()|0)+24>>2]|0)+(s*12|0)|0}function nke(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0;m=E,E=E+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ku(d,c),c=+Qu(d,c),I7[f&31](s,c),E=m}function ike(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ske(s,c,d,0),E=f}function ske(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=XF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=oke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,ake(m,f)|0,f),E=d}function XF(){var s=0,l=0;if(o[7768]|0||(q5(9792),tr(40,9792,U|0)|0,l=7768,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9792)|0)){s=9792,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));q5(9792)}return 9792}function oke(s){return s=s|0,0}function ake(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=XF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],j5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(lke(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function j5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function lke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=cke(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,uke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],j5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Ake(s,k),fke(k),E=M;return}}function cke(s){return s=s|0,357913941}function uke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Ake(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function fke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function q5(s){s=s|0,gke(s)}function pke(s){s=s|0,hke(s+24|0)}function hke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function gke(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,dke()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function dke(){return 1300}function mke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;d=E,E=E+16|0,m=d+8|0,B=d,k=yke(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],Eke(l,m,c,f),E=d}function yke(s){return s=s|0,(n[(XF()|0)+24>>2]|0)+(s*12|0)|0}function Eke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;k=E,E=E+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),XA(m,c),m=ZA(m,c)|0,ku(B,f),f=+Qu(B,f),k7[d&15](s,m,f),E=k}function Cke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],wke(s,c,d,0),E=f}function wke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=ZF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Ike(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Bke(m,f)|0,f),E=d}function ZF(){var s=0,l=0;if(o[7776]|0||(Y5(9828),tr(41,9828,U|0)|0,l=7776,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9828)|0)){s=9828,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Y5(9828)}return 9828}function Ike(s){return s=s|0,0}function Bke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=ZF()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],G5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(vke(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function G5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function vke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Dke(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,Pke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],G5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Ske(s,k),xke(k),E=M;return}}function Dke(s){return s=s|0,357913941}function Pke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Ske(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function xke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function Y5(s){s=s|0,Qke(s)}function bke(s){s=s|0,kke(s+24|0)}function kke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Qke(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,7,l,Fke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Fke(){return 1312}function Rke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=E,E=E+16|0,d=f+8|0,m=f,B=Tke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Lke(l,d,c),E=f}function Tke(s){return s=s|0,(n[(ZF()|0)+24>>2]|0)+(s*12|0)|0}function Lke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=E,E=E+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,tf[f&31](s,d),E=m}function Nke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Oke(s,c,d,0),E=f}function Oke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=$F()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Mke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Uke(m,f)|0,f),E=d}function $F(){var s=0,l=0;if(o[7784]|0||(K5(9864),tr(42,9864,U|0)|0,l=7784,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9864)|0)){s=9864,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));K5(9864)}return 9864}function Mke(s){return s=s|0,0}function Uke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=$F()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],W5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(_ke(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function W5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function _ke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Hke(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,jke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],W5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,qke(s,k),Gke(k),E=M;return}}function Hke(s){return s=s|0,357913941}function jke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function qke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Gke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function K5(s){s=s|0,Kke(s)}function Yke(s){s=s|0,Wke(s+24|0)}function Wke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Kke(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,8,l,Vke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Vke(){return 1320}function zke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=E,E=E+16|0,d=f+8|0,m=f,B=Jke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Xke(l,d,c),E=f}function Jke(s){return s=s|0,(n[($F()|0)+24>>2]|0)+(s*12|0)|0}function Xke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=E,E=E+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Zke(d,c),d=$ke(d,c)|0,tf[f&31](s,d),E=m}function Zke(s,l){s=s|0,l=l|0}function $ke(s,l){return s=s|0,l=l|0,eQe(l)|0}function eQe(s){return s=s|0,s|0}function tQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rQe(s,c,d,0),E=f}function rQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=eR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=nQe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,iQe(m,f)|0,f),E=d}function eR(){var s=0,l=0;if(o[7792]|0||(z5(9900),tr(43,9900,U|0)|0,l=7792,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9900)|0)){s=9900,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));z5(9900)}return 9900}function nQe(s){return s=s|0,0}function iQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=eR()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],V5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(sQe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function V5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function sQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=oQe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,aQe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],V5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,lQe(s,k),cQe(k),E=M;return}}function oQe(s){return s=s|0,357913941}function aQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function lQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function cQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function z5(s){s=s|0,fQe(s)}function uQe(s){s=s|0,AQe(s+24|0)}function AQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function fQe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,22,l,pQe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function pQe(){return 1344}function hQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;c=E,E=E+16|0,f=c+8|0,d=c,m=gQe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],dQe(l,f),E=c}function gQe(s){return s=s|0,(n[(eR()|0)+24>>2]|0)+(s*12|0)|0}function dQe(s,l){s=s|0,l=l|0;var c=0;c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),ef[c&127](s)}function mQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=tR()|0,s=yQe(c)|0,hn(m,l,d,s,EQe(c,f)|0,f)}function tR(){var s=0,l=0;if(o[7800]|0||(X5(9936),tr(44,9936,U|0)|0,l=7800,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9936)|0)){s=9936,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));X5(9936)}return 9936}function yQe(s){return s=s|0,s|0}function EQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=E,E=E+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=tR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(J5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(CQe(B,d,m),l=n[c>>2]|0),E=k,(l-(n[B>>2]|0)>>3)+-1|0}function J5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function CQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=E,E=E+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=wQe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,IQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,J5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,BQe(s,d),vQe(d),E=k;return}}function wQe(s){return s=s|0,536870911}function IQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function BQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function vQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function X5(s){s=s|0,SQe(s)}function DQe(s){s=s|0,PQe(s+24|0)}function PQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function SQe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,23,l,D5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function xQe(s,l){s=s|0,l=l|0,kQe(n[(bQe(s)|0)>>2]|0,l)}function bQe(s){return s=s|0,(n[(tR()|0)+24>>2]|0)+(s<<3)|0}function kQe(s,l){s=s|0,l=l|0;var c=0,f=0;c=E,E=E+16|0,f=c,HF(f,l),l=jF(f,l)|0,ef[s&127](l),E=c}function QQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=rR()|0,s=FQe(c)|0,hn(m,l,d,s,RQe(c,f)|0,f)}function rR(){var s=0,l=0;if(o[7808]|0||($5(9972),tr(45,9972,U|0)|0,l=7808,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9972)|0)){s=9972,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));$5(9972)}return 9972}function FQe(s){return s=s|0,s|0}function RQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=E,E=E+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=rR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(Z5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(TQe(B,d,m),l=n[c>>2]|0),E=k,(l-(n[B>>2]|0)>>3)+-1|0}function Z5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function TQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=E,E=E+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=LQe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,NQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,Z5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,OQe(s,d),MQe(d),E=k;return}}function LQe(s){return s=s|0,536870911}function NQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function OQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function MQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function $5(s){s=s|0,HQe(s)}function UQe(s){s=s|0,_Qe(s+24|0)}function _Qe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function HQe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,9,l,jQe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function jQe(){return 1348}function qQe(s,l){return s=s|0,l=l|0,YQe(n[(GQe(s)|0)>>2]|0,l)|0}function GQe(s){return s=s|0,(n[(rR()|0)+24>>2]|0)+(s<<3)|0}function YQe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=E,E=E+16|0,f=c,e9(f,l),l=t9(f,l)|0,l=sD(Tg[s&31](l)|0)|0,E=c,l|0}function e9(s,l){s=s|0,l=l|0}function t9(s,l){return s=s|0,l=l|0,WQe(l)|0}function WQe(s){return s=s|0,s|0}function KQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=nR()|0,s=VQe(c)|0,hn(m,l,d,s,zQe(c,f)|0,f)}function nR(){var s=0,l=0;if(o[7816]|0||(n9(10008),tr(46,10008,U|0)|0,l=7816,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10008)|0)){s=10008,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));n9(10008)}return 10008}function VQe(s){return s=s|0,s|0}function zQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=E,E=E+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=nR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(r9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(JQe(B,d,m),l=n[c>>2]|0),E=k,(l-(n[B>>2]|0)>>3)+-1|0}function r9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function JQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=E,E=E+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=XQe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,ZQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,r9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,$Qe(s,d),eFe(d),E=k;return}}function XQe(s){return s=s|0,536870911}function ZQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function $Qe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function eFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function n9(s){s=s|0,nFe(s)}function tFe(s){s=s|0,rFe(s+24|0)}function rFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function nFe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,15,l,E5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function iFe(s){return s=s|0,oFe(n[(sFe(s)|0)>>2]|0)|0}function sFe(s){return s=s|0,(n[(nR()|0)+24>>2]|0)+(s<<3)|0}function oFe(s){return s=s|0,sD(CD[s&7]()|0)|0}function aFe(){var s=0;return o[7832]|0||(gFe(10052),tr(25,10052,U|0)|0,s=7832,n[s>>2]=1,n[s+4>>2]=0),10052}function lFe(s,l){s=s|0,l=l|0,n[s>>2]=cFe()|0,n[s+4>>2]=uFe()|0,n[s+12>>2]=l,n[s+8>>2]=AFe()|0,n[s+32>>2]=2}function cFe(){return 11709}function uFe(){return 1188}function AFe(){return aD()|0}function fFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Pp(f,896)|0)==512?c|0&&(pFe(c),gt(c)):l|0&&(Pu(l),gt(l))}function Pp(s,l){return s=s|0,l=l|0,l&s|0}function pFe(s){s=s|0,s=n[s+4>>2]|0,s|0&&xp(s)}function aD(){var s=0;return o[7824]|0||(n[2511]=hFe()|0,n[2512]=0,s=7824,n[s>>2]=1,n[s+4>>2]=0),10044}function hFe(){return 0}function gFe(s){s=s|0,Ip(s)}function dFe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0;l=E,E=E+32|0,c=l+24|0,m=l+16|0,d=l+8|0,f=l,mFe(s,4827),yFe(s,4834,3)|0,EFe(s,3682,47)|0,n[m>>2]=9,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],CFe(s,4841,c)|0,n[d>>2]=1,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],wFe(s,4871,c)|0,n[f>>2]=10,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],IFe(s,4891,c)|0,E=l}function mFe(s,l){s=s|0,l=l|0;var c=0;c=eTe()|0,n[s>>2]=c,tTe(c,l),Sp(n[s>>2]|0)}function yFe(s,l,c){return s=s|0,l=l|0,c=c|0,MRe(s,pn(l)|0,c,0),s|0}function EFe(s,l,c){return s=s|0,l=l|0,c=c|0,BRe(s,pn(l)|0,c,0),s|0}function CFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],iRe(s,l,d),E=f,s|0}function wFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],UFe(s,l,d),E=f,s|0}function IFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],BFe(s,l,d),E=f,s|0}function BFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vFe(s,c,d,1),E=f}function vFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=iR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=DFe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,PFe(m,f)|0,f),E=d}function iR(){var s=0,l=0;if(o[7840]|0||(s9(10100),tr(48,10100,U|0)|0,l=7840,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10100)|0)){s=10100,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));s9(10100)}return 10100}function DFe(s){return s=s|0,0}function PFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=iR()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],i9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(SFe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function i9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function SFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=xFe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,bFe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],i9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,kFe(s,k),QFe(k),E=M;return}}function xFe(s){return s=s|0,357913941}function bFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function kFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function QFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function s9(s){s=s|0,TFe(s)}function FFe(s){s=s|0,RFe(s+24|0)}function RFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function TFe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,6,l,LFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function LFe(){return 1364}function NFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=E,E=E+16|0,d=f+8|0,m=f,B=OFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=MFe(l,d,c)|0,E=f,c|0}function OFe(s){return s=s|0,(n[(iR()|0)+24>>2]|0)+(s*12|0)|0}function MFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=E,E=E+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,d=f5(RR[f&15](s,d)|0)|0,E=m,d|0}function UFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],_Fe(s,c,d,0),E=f}function _Fe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=sR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=HFe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,jFe(m,f)|0,f),E=d}function sR(){var s=0,l=0;if(o[7848]|0||(a9(10136),tr(49,10136,U|0)|0,l=7848,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10136)|0)){s=10136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));a9(10136)}return 10136}function HFe(s){return s=s|0,0}function jFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=sR()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],o9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(qFe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function o9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function qFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=GFe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,YFe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],o9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,WFe(s,k),KFe(k),E=M;return}}function GFe(s){return s=s|0,357913941}function YFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function WFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function KFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function a9(s){s=s|0,JFe(s)}function VFe(s){s=s|0,zFe(s+24|0)}function zFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function JFe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,9,l,XFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function XFe(){return 1372}function ZFe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=E,E=E+16|0,d=f+8|0,m=f,B=$Fe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],eRe(l,d,c),E=f}function $Fe(s){return s=s|0,(n[(sR()|0)+24>>2]|0)+(s*12|0)|0}function eRe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=Ze;m=E,E=E+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),tRe(d,c),B=y(rRe(d,c)),w7[f&1](s,B),E=m}function tRe(s,l){s=s|0,l=+l}function rRe(s,l){return s=s|0,l=+l,y(nRe(l))}function nRe(s){return s=+s,y(s)}function iRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],sRe(s,c,d,0),E=f}function sRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=E,E=E+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=oR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=oRe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,aRe(m,f)|0,f),E=d}function oR(){var s=0,l=0;if(o[7856]|0||(c9(10172),tr(50,10172,U|0)|0,l=7856,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10172)|0)){s=10172,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));c9(10172)}return 10172}function oRe(s){return s=s|0,0}function aRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0;return O=E,E=E+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=oR()|0,M=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],l9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(lRe(M,k,Q),s=n[l>>2]|0),E=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function l9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function lRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;if(M=E,E=E+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=cRe(s)|0,m>>>0>>0)Jr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,q=se<<1,uRe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],l9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,ARe(s,k),fRe(k),E=M;return}}function cRe(s){return s=s|0,357913941}function uRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function ARe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function fRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function c9(s){s=s|0,gRe(s)}function pRe(s){s=s|0,hRe(s+24|0)}function hRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function gRe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,3,l,dRe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function dRe(){return 1380}function mRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=E,E=E+16|0,m=d+8|0,B=d,k=yRe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],ERe(l,m,c,f),E=d}function yRe(s){return s=s|0,(n[(oR()|0)+24>>2]|0)+(s*12|0)|0}function ERe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=E,E=E+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),XA(m,c),m=ZA(m,c)|0,CRe(B,f),B=wRe(B,f)|0,_w[d&15](s,m,B),E=k}function CRe(s,l){s=s|0,l=l|0}function wRe(s,l){return s=s|0,l=l|0,IRe(l)|0}function IRe(s){return s=s|0,(s|0)!=0|0}function BRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=aR()|0,s=vRe(c)|0,hn(m,l,d,s,DRe(c,f)|0,f)}function aR(){var s=0,l=0;if(o[7864]|0||(A9(10208),tr(51,10208,U|0)|0,l=7864,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10208)|0)){s=10208,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));A9(10208)}return 10208}function vRe(s){return s=s|0,s|0}function DRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=E,E=E+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=aR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(u9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(PRe(B,d,m),l=n[c>>2]|0),E=k,(l-(n[B>>2]|0)>>3)+-1|0}function u9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function PRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=E,E=E+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=SRe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,xRe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,u9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,bRe(s,d),kRe(d),E=k;return}}function SRe(s){return s=s|0,536870911}function xRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function bRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function kRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function A9(s){s=s|0,RRe(s)}function QRe(s){s=s|0,FRe(s+24|0)}function FRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function RRe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,24,l,TRe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function TRe(){return 1392}function LRe(s,l){s=s|0,l=l|0,ORe(n[(NRe(s)|0)>>2]|0,l)}function NRe(s){return s=s|0,(n[(aR()|0)+24>>2]|0)+(s<<3)|0}function ORe(s,l){s=s|0,l=l|0;var c=0,f=0;c=E,E=E+16|0,f=c,e9(f,l),l=t9(f,l)|0,ef[s&127](l),E=c}function MRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=lR()|0,s=URe(c)|0,hn(m,l,d,s,_Re(c,f)|0,f)}function lR(){var s=0,l=0;if(o[7872]|0||(p9(10244),tr(52,10244,U|0)|0,l=7872,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10244)|0)){s=10244,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));p9(10244)}return 10244}function URe(s){return s=s|0,s|0}function _Re(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=E,E=E+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=lR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(f9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(HRe(B,d,m),l=n[c>>2]|0),E=k,(l-(n[B>>2]|0)>>3)+-1|0}function f9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function HRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=E,E=E+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=jRe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,qRe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,f9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,GRe(s,d),YRe(d),E=k;return}}function jRe(s){return s=s|0,536870911}function qRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function GRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function YRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function p9(s){s=s|0,VRe(s)}function WRe(s){s=s|0,KRe(s+24|0)}function KRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function VRe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,16,l,zRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zRe(){return 1400}function JRe(s){return s=s|0,ZRe(n[(XRe(s)|0)>>2]|0)|0}function XRe(s){return s=s|0,(n[(lR()|0)+24>>2]|0)+(s<<3)|0}function ZRe(s){return s=s|0,$Re(CD[s&7]()|0)|0}function $Re(s){return s=s|0,s|0}function eTe(){var s=0;return o[7880]|0||(aTe(10280),tr(25,10280,U|0)|0,s=7880,n[s>>2]=1,n[s+4>>2]=0),10280}function tTe(s,l){s=s|0,l=l|0,n[s>>2]=rTe()|0,n[s+4>>2]=nTe()|0,n[s+12>>2]=l,n[s+8>>2]=iTe()|0,n[s+32>>2]=4}function rTe(){return 11711}function nTe(){return 1356}function iTe(){return aD()|0}function sTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Pp(f,896)|0)==512?c|0&&(oTe(c),gt(c)):l|0&&(Bg(l),gt(l))}function oTe(s){s=s|0,s=n[s+4>>2]|0,s|0&&xp(s)}function aTe(s){s=s|0,Ip(s)}function lTe(s){s=s|0,cTe(s,4920),uTe(s)|0,ATe(s)|0}function cTe(s,l){s=s|0,l=l|0;var c=0;c=L5()|0,n[s>>2]=c,FTe(c,l),Sp(n[s>>2]|0)}function uTe(s){s=s|0;var l=0;return l=n[s>>2]|0,xg(l,ITe()|0),s|0}function ATe(s){s=s|0;var l=0;return l=n[s>>2]|0,xg(l,fTe()|0),s|0}function fTe(){var s=0;return o[7888]|0||(h9(10328),tr(53,10328,U|0)|0,s=7888,n[s>>2]=1,n[s+4>>2]=0),Tr(10328)|0||h9(10328),10328}function xg(s,l){s=s|0,l=l|0,hn(s,0,l,0,0,0)}function h9(s){s=s|0,gTe(s),bg(s,10)}function pTe(s){s=s|0,hTe(s+24|0)}function hTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function gTe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,1,l,ETe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function dTe(s,l,c){s=s|0,l=l|0,c=+c,mTe(s,l,c)}function bg(s,l){s=s|0,l=l|0,n[s+20>>2]=l}function mTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+16|0,m=f+8|0,k=f+13|0,d=f,B=f+12|0,XA(k,l),n[m>>2]=ZA(k,l)|0,ku(B,c),C[d>>3]=+Qu(B,c),yTe(s,m,d),E=f}function yTe(s,l,c){s=s|0,l=l|0,c=c|0,W(s+8|0,n[l>>2]|0,+C[c>>3]),o[s+24>>0]=1}function ETe(){return 1404}function CTe(s,l){return s=s|0,l=+l,wTe(s,l)|0}function wTe(s,l){s=s|0,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=E,E=E+16|0,m=f+4|0,B=f+8|0,k=f,d=Wa(8)|0,c=d,Q=Kt(16)|0,XA(m,s),s=ZA(m,s)|0,ku(B,l),W(Q,s,+Qu(B,l)),B=c+4|0,n[B>>2]=Q,s=Kt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],KF(s,B,m),n[d>>2]=s,E=f,c|0}function ITe(){var s=0;return o[7896]|0||(g9(10364),tr(54,10364,U|0)|0,s=7896,n[s>>2]=1,n[s+4>>2]=0),Tr(10364)|0||g9(10364),10364}function g9(s){s=s|0,DTe(s),bg(s,55)}function BTe(s){s=s|0,vTe(s+24|0)}function vTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function DTe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,4,l,bTe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function PTe(s){s=s|0,STe(s)}function STe(s){s=s|0,xTe(s)}function xTe(s){s=s|0,d9(s+8|0),o[s+24>>0]=1}function d9(s){s=s|0,n[s>>2]=0,C[s+8>>3]=0}function bTe(){return 1424}function kTe(){return QTe()|0}function QTe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=E,E=E+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Kt(16)|0,d9(f),m=s+4|0,n[m>>2]=f,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],KF(f,m,d),n[c>>2]=f,E=l,s|0}function FTe(s,l){s=s|0,l=l|0,n[s>>2]=RTe()|0,n[s+4>>2]=TTe()|0,n[s+12>>2]=l,n[s+8>>2]=LTe()|0,n[s+32>>2]=5}function RTe(){return 11710}function TTe(){return 1416}function LTe(){return lD()|0}function NTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Pp(f,896)|0)==512?c|0&&(OTe(c),gt(c)):l|0&>(l)}function OTe(s){s=s|0,s=n[s+4>>2]|0,s|0&&xp(s)}function lD(){var s=0;return o[7904]|0||(n[2600]=MTe()|0,n[2601]=0,s=7904,n[s>>2]=1,n[s+4>>2]=0),10400}function MTe(){return n[357]|0}function UTe(s){s=s|0,_Te(s,4926),HTe(s)|0}function _Te(s,l){s=s|0,l=l|0;var c=0;c=i5()|0,n[s>>2]=c,ZTe(c,l),Sp(n[s>>2]|0)}function HTe(s){s=s|0;var l=0;return l=n[s>>2]|0,xg(l,jTe()|0),s|0}function jTe(){var s=0;return o[7912]|0||(m9(10412),tr(56,10412,U|0)|0,s=7912,n[s>>2]=1,n[s+4>>2]=0),Tr(10412)|0||m9(10412),10412}function m9(s){s=s|0,YTe(s),bg(s,57)}function qTe(s){s=s|0,GTe(s+24|0)}function GTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function YTe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,5,l,zTe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function WTe(s){s=s|0,KTe(s)}function KTe(s){s=s|0,VTe(s)}function VTe(s){s=s|0;var l=0,c=0;l=s+8|0,c=l+48|0;do n[l>>2]=0,l=l+4|0;while((l|0)<(c|0));o[s+56>>0]=1}function zTe(){return 1432}function JTe(){return XTe()|0}function XTe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0;B=E,E=E+16|0,s=B+4|0,l=B,c=Wa(8)|0,f=c,d=Kt(48)|0,m=d,k=m+48|0;do n[m>>2]=0,m=m+4|0;while((m|0)<(k|0));return m=f+4|0,n[m>>2]=d,k=Kt(8)|0,m=n[m>>2]|0,n[l>>2]=0,n[s>>2]=n[l>>2],s5(k,m,s),n[c>>2]=k,E=B,f|0}function ZTe(s,l){s=s|0,l=l|0,n[s>>2]=$Te()|0,n[s+4>>2]=eLe()|0,n[s+12>>2]=l,n[s+8>>2]=tLe()|0,n[s+32>>2]=6}function $Te(){return 11704}function eLe(){return 1436}function tLe(){return lD()|0}function rLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Pp(f,896)|0)==512?c|0&&(nLe(c),gt(c)):l|0&>(l)}function nLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&xp(s)}function iLe(s){s=s|0,sLe(s,4933),oLe(s)|0,aLe(s)|0}function sLe(s,l){s=s|0,l=l|0;var c=0;c=QLe()|0,n[s>>2]=c,FLe(c,l),Sp(n[s>>2]|0)}function oLe(s){s=s|0;var l=0;return l=n[s>>2]|0,xg(l,wLe()|0),s|0}function aLe(s){s=s|0;var l=0;return l=n[s>>2]|0,xg(l,lLe()|0),s|0}function lLe(){var s=0;return o[7920]|0||(y9(10452),tr(58,10452,U|0)|0,s=7920,n[s>>2]=1,n[s+4>>2]=0),Tr(10452)|0||y9(10452),10452}function y9(s){s=s|0,ALe(s),bg(s,1)}function cLe(s){s=s|0,uLe(s+24|0)}function uLe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function ALe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,1,l,gLe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function fLe(s,l,c){s=s|0,l=+l,c=+c,pLe(s,l,c)}function pLe(s,l,c){s=s|0,l=+l,c=+c;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+32|0,m=f+8|0,k=f+17|0,d=f,B=f+16|0,ku(k,l),C[m>>3]=+Qu(k,l),ku(B,c),C[d>>3]=+Qu(B,c),hLe(s,m,d),E=f}function hLe(s,l,c){s=s|0,l=l|0,c=c|0,E9(s+8|0,+C[l>>3],+C[c>>3]),o[s+24>>0]=1}function E9(s,l,c){s=s|0,l=+l,c=+c,C[s>>3]=l,C[s+8>>3]=c}function gLe(){return 1472}function dLe(s,l){return s=+s,l=+l,mLe(s,l)|0}function mLe(s,l){s=+s,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=E,E=E+16|0,B=f+4|0,k=f+8|0,Q=f,d=Wa(8)|0,c=d,m=Kt(16)|0,ku(B,s),s=+Qu(B,s),ku(k,l),E9(m,s,+Qu(k,l)),k=c+4|0,n[k>>2]=m,m=Kt(8)|0,k=n[k>>2]|0,n[Q>>2]=0,n[B>>2]=n[Q>>2],C9(m,k,B),n[d>>2]=m,E=f,c|0}function C9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1452,n[c+12>>2]=l,n[s+4>>2]=c}function yLe(s){s=s|0,zm(s),gt(s)}function ELe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function CLe(s){s=s|0,gt(s)}function wLe(){var s=0;return o[7928]|0||(w9(10488),tr(59,10488,U|0)|0,s=7928,n[s>>2]=1,n[s+4>>2]=0),Tr(10488)|0||w9(10488),10488}function w9(s){s=s|0,vLe(s),bg(s,60)}function ILe(s){s=s|0,BLe(s+24|0)}function BLe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function vLe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,6,l,xLe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function DLe(s){s=s|0,PLe(s)}function PLe(s){s=s|0,SLe(s)}function SLe(s){s=s|0,I9(s+8|0),o[s+24>>0]=1}function I9(s){s=s|0,n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,n[s+12>>2]=0}function xLe(){return 1492}function bLe(){return kLe()|0}function kLe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=E,E=E+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Kt(16)|0,I9(f),m=s+4|0,n[m>>2]=f,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],C9(f,m,d),n[c>>2]=f,E=l,s|0}function QLe(){var s=0;return o[7936]|0||(MLe(10524),tr(25,10524,U|0)|0,s=7936,n[s>>2]=1,n[s+4>>2]=0),10524}function FLe(s,l){s=s|0,l=l|0,n[s>>2]=RLe()|0,n[s+4>>2]=TLe()|0,n[s+12>>2]=l,n[s+8>>2]=LLe()|0,n[s+32>>2]=7}function RLe(){return 11700}function TLe(){return 1484}function LLe(){return lD()|0}function NLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Pp(f,896)|0)==512?c|0&&(OLe(c),gt(c)):l|0&>(l)}function OLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&xp(s)}function MLe(s){s=s|0,Ip(s)}function ULe(s,l,c){s=s|0,l=l|0,c=c|0,s=pn(l)|0,l=_Le(c)|0,c=HLe(c,0)|0,mNe(s,l,c,cR()|0,0)}function _Le(s){return s=s|0,s|0}function HLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=E,E=E+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=cR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(v9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(VLe(B,d,m),l=n[c>>2]|0),E=k,(l-(n[B>>2]|0)>>3)+-1|0}function cR(){var s=0,l=0;if(o[7944]|0||(B9(10568),tr(61,10568,U|0)|0,l=7944,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10568)|0)){s=10568,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));B9(10568)}return 10568}function B9(s){s=s|0,GLe(s)}function jLe(s){s=s|0,qLe(s+24|0)}function qLe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function GLe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,17,l,I5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function YLe(s){return s=s|0,KLe(n[(WLe(s)|0)>>2]|0)|0}function WLe(s){return s=s|0,(n[(cR()|0)+24>>2]|0)+(s<<3)|0}function KLe(s){return s=s|0,oD(CD[s&7]()|0)|0}function v9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function VLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=E,E=E+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=zLe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,JLe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,v9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,XLe(s,d),ZLe(d),E=k;return}}function zLe(s){return s=s|0,536870911}function JLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function XLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ZLe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function $Le(){eNe()}function eNe(){tNe(10604)}function tNe(s){s=s|0,rNe(s,4955)}function rNe(s,l){s=s|0,l=l|0;var c=0;c=nNe()|0,n[s>>2]=c,iNe(c,l),Sp(n[s>>2]|0)}function nNe(){var s=0;return o[7952]|0||(pNe(10612),tr(25,10612,U|0)|0,s=7952,n[s>>2]=1,n[s+4>>2]=0),10612}function iNe(s,l){s=s|0,l=l|0,n[s>>2]=lNe()|0,n[s+4>>2]=cNe()|0,n[s+12>>2]=l,n[s+8>>2]=uNe()|0,n[s+32>>2]=8}function Sp(s){s=s|0;var l=0,c=0;l=E,E=E+16|0,c=l,Gm()|0,n[c>>2]=s,sNe(10608,c),E=l}function Gm(){return o[11714]|0||(n[2652]=0,tr(62,10608,U|0)|0,o[11714]=1),10608}function sNe(s,l){s=s|0,l=l|0;var c=0;c=Kt(8)|0,n[c+4>>2]=n[l>>2],n[c>>2]=n[s>>2],n[s>>2]=c}function oNe(s){s=s|0,aNe(s)}function aNe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function lNe(){return 11715}function cNe(){return 1496}function uNe(){return aD()|0}function ANe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Pp(f,896)|0)==512?c|0&&(fNe(c),gt(c)):l|0&>(l)}function fNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&xp(s)}function pNe(s){s=s|0,Ip(s)}function hNe(s,l){s=s|0,l=l|0;var c=0,f=0;Gm()|0,c=n[2652]|0;e:do if(c|0){for(;f=n[c+4>>2]|0,!(f|0&&(s7(uR(f)|0,s)|0)==0);)if(c=n[c>>2]|0,!c)break e;gNe(f,l)}while(0)}function uR(s){return s=s|0,n[s+12>>2]|0}function gNe(s,l){s=s|0,l=l|0;var c=0;s=s+36|0,c=n[s>>2]|0,c|0&&(jA(c),gt(c)),c=Kt(4)|0,ZG(c,l),n[s>>2]=c}function AR(){return o[11716]|0||(n[2664]=0,tr(63,10656,U|0)|0,o[11716]=1),10656}function D9(){var s=0;return o[11717]|0?s=n[2665]|0:(dNe(),n[2665]=1504,o[11717]=1,s=1504),s|0}function dNe(){o[11740]|0||(o[11718]=gr(gr(8,0)|0,0)|0,o[11719]=gr(gr(0,0)|0,0)|0,o[11720]=gr(gr(0,16)|0,0)|0,o[11721]=gr(gr(8,0)|0,0)|0,o[11722]=gr(gr(0,0)|0,0)|0,o[11723]=gr(gr(8,0)|0,0)|0,o[11724]=gr(gr(0,0)|0,0)|0,o[11725]=gr(gr(8,0)|0,0)|0,o[11726]=gr(gr(0,0)|0,0)|0,o[11727]=gr(gr(8,0)|0,0)|0,o[11728]=gr(gr(0,0)|0,0)|0,o[11729]=gr(gr(0,0)|0,32)|0,o[11730]=gr(gr(0,0)|0,32)|0,o[11740]=1)}function P9(){return 1572}function mNe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0;m=E,E=E+32|0,O=m+16|0,M=m+12|0,Q=m+8|0,k=m+4|0,B=m,n[O>>2]=s,n[M>>2]=l,n[Q>>2]=c,n[k>>2]=f,n[B>>2]=d,AR()|0,yNe(10656,O,M,Q,k,B),E=m}function yNe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0;B=Kt(24)|0,t5(B+4|0,n[l>>2]|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0),n[B>>2]=n[s>>2],n[s>>2]=B}function S9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,at=0;if(at=E,E=E+32|0,Me=at+20|0,Qe=at+8|0,et=at+4|0,Xe=at,l=n[l>>2]|0,l|0){Ge=Me+4|0,Q=Me+8|0,M=Qe+4|0,O=Qe+8|0,q=Qe+8|0,se=Me+8|0;do{if(B=l+4|0,k=fR(B)|0,k|0){if(d=Tw(k)|0,n[Me>>2]=0,n[Ge>>2]=0,n[Q>>2]=0,f=(Lw(k)|0)+1|0,ENe(Me,f),f|0)for(;f=f+-1|0,xc(Qe,n[d>>2]|0),m=n[Ge>>2]|0,m>>>0<(n[se>>2]|0)>>>0?(n[m>>2]=n[Qe>>2],n[Ge>>2]=(n[Ge>>2]|0)+4):pR(Me,Qe),f;)d=d+4|0;f=Nw(k)|0,n[Qe>>2]=0,n[M>>2]=0,n[O>>2]=0;e:do if(n[f>>2]|0)for(d=0,m=0;;){if((d|0)==(m|0)?CNe(Qe,f):(n[d>>2]=n[f>>2],n[M>>2]=(n[M>>2]|0)+4),f=f+4|0,!(n[f>>2]|0))break e;d=n[M>>2]|0,m=n[q>>2]|0}while(0);n[et>>2]=cD(B)|0,n[Xe>>2]=Tr(k)|0,wNe(c,s,et,Xe,Me,Qe),hR(Qe),$A(Me)}l=n[l>>2]|0}while((l|0)!=0)}E=at}function fR(s){return s=s|0,n[s+12>>2]|0}function Tw(s){return s=s|0,n[s+12>>2]|0}function Lw(s){return s=s|0,n[s+16>>2]|0}function ENe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=E,E=E+32|0,c=d,f=n[s>>2]|0,(n[s+8>>2]|0)-f>>2>>>0>>0&&(L9(c,l,(n[s+4>>2]|0)-f>>2,s+8|0),N9(s,c),O9(c)),E=d}function pR(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;if(B=E,E=E+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=T9(s)|0,m>>>0>>0)Jr(s);else{k=n[s>>2]|0,M=(n[s+8>>2]|0)-k|0,Q=M>>1,L9(c,M>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,N9(s,c),O9(c),E=B;return}}function Nw(s){return s=s|0,n[s+8>>2]|0}function CNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;if(B=E,E=E+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=R9(s)|0,m>>>0>>0)Jr(s);else{k=n[s>>2]|0,M=(n[s+8>>2]|0)-k|0,Q=M>>1,_Ne(c,M>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,HNe(s,c),jNe(c),E=B;return}}function cD(s){return s=s|0,n[s>>2]|0}function wNe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,INe(s,l,c,f,d,m)}function hR(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function $A(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function INe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,q=0;B=E,E=E+48|0,O=B+40|0,k=B+32|0,q=B+24|0,Q=B+12|0,M=B,Ka(k),s=da(s)|0,n[q>>2]=n[l>>2],c=n[c>>2]|0,f=n[f>>2]|0,gR(Q,d),BNe(M,m),n[O>>2]=n[q>>2],vNe(s,O,c,f,Q,M),hR(M),$A(Q),Va(k),E=B}function gR(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(MNe(s,f),UNe(s,n[l>>2]|0,n[c>>2]|0,f))}function BNe(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(NNe(s,f),ONe(s,n[l>>2]|0,n[c>>2]|0,f))}function vNe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,q=0;B=E,E=E+32|0,O=B+28|0,q=B+24|0,k=B+12|0,Q=B,M=Pl(DNe()|0)|0,n[q>>2]=n[l>>2],n[O>>2]=n[q>>2],l=kg(O)|0,c=x9(c)|0,f=dR(f)|0,n[k>>2]=n[d>>2],O=d+4|0,n[k+4>>2]=n[O>>2],q=d+8|0,n[k+8>>2]=n[q>>2],n[q>>2]=0,n[O>>2]=0,n[d>>2]=0,d=mR(k)|0,n[Q>>2]=n[m>>2],O=m+4|0,n[Q+4>>2]=n[O>>2],q=m+8|0,n[Q+8>>2]=n[q>>2],n[q>>2]=0,n[O>>2]=0,n[m>>2]=0,ao(0,M|0,s|0,l|0,c|0,f|0,d|0,PNe(Q)|0)|0,hR(Q),$A(k),E=B}function DNe(){var s=0;return o[7968]|0||(TNe(10708),s=7968,n[s>>2]=1,n[s+4>>2]=0),10708}function kg(s){return s=s|0,k9(s)|0}function x9(s){return s=s|0,b9(s)|0}function dR(s){return s=s|0,oD(s)|0}function mR(s){return s=s|0,xNe(s)|0}function PNe(s){return s=s|0,SNe(s)|0}function SNe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=b9(n[(n[s>>2]|0)+(l<<2)>>2]|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function b9(s){return s=s|0,s|0}function xNe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=k9((n[s>>2]|0)+(l<<2)|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function k9(s){s=s|0;var l=0,c=0,f=0,d=0;return d=E,E=E+32|0,l=d+12|0,c=d,f=bF(Q9()|0)|0,f?(kF(l,f),QF(c,l),uUe(s,c),s=FF(l)|0):s=bNe(s)|0,E=d,s|0}function Q9(){var s=0;return o[7960]|0||(RNe(10664),tr(25,10664,U|0)|0,s=7960,n[s>>2]=1,n[s+4>>2]=0),10664}function bNe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=E,E=E+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Kt(4)|0,n[k>>2]=n[s>>2],m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],F9(s,m,d),n[f>>2]=s,E=c,l|0}function F9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1656,n[c+12>>2]=l,n[s+4>>2]=c}function kNe(s){s=s|0,zm(s),gt(s)}function QNe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function FNe(s){s=s|0,gt(s)}function RNe(s){s=s|0,Ip(s)}function TNe(s){s=s|0,Sl(s,LNe()|0,5)}function LNe(){return 1676}function NNe(s,l){s=s|0,l=l|0;var c=0;if((R9(s)|0)>>>0>>0&&Jr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function ONe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function R9(s){return s=s|0,1073741823}function MNe(s,l){s=s|0,l=l|0;var c=0;if((T9(s)|0)>>>0>>0&&Jr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function UNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function T9(s){return s=s|0,1073741823}function _Ne(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function HNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function jNe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function L9(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function N9(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function O9(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function qNe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0,Ge=0,Me=0,Qe=0;if(Qe=E,E=E+32|0,O=Qe+20|0,q=Qe+12|0,M=Qe+16|0,se=Qe+4|0,Ge=Qe,Me=Qe+8|0,k=D9()|0,m=n[k>>2]|0,B=n[m>>2]|0,B|0)for(Q=n[k+8>>2]|0,k=n[k+4>>2]|0;xc(O,B),GNe(s,O,k,Q),m=m+4|0,B=n[m>>2]|0,B;)Q=Q+1|0,k=k+1|0;if(m=P9()|0,B=n[m>>2]|0,B|0)do xc(O,B),n[q>>2]=n[m+4>>2],YNe(l,O,q),m=m+8|0,B=n[m>>2]|0;while((B|0)!=0);if(m=n[(Gm()|0)>>2]|0,m|0)do l=n[m+4>>2]|0,xc(O,n[(Ym(l)|0)>>2]|0),n[q>>2]=uR(l)|0,WNe(c,O,q),m=n[m>>2]|0;while((m|0)!=0);if(xc(M,0),m=AR()|0,n[O>>2]=n[M>>2],S9(O,m,d),m=n[(Gm()|0)>>2]|0,m|0){s=O+4|0,l=O+8|0,c=O+8|0;do{if(Q=n[m+4>>2]|0,xc(q,n[(Ym(Q)|0)>>2]|0),KNe(se,M9(Q)|0),B=n[se>>2]|0,B|0){n[O>>2]=0,n[s>>2]=0,n[l>>2]=0;do xc(Ge,n[(Ym(n[B+4>>2]|0)|0)>>2]|0),k=n[s>>2]|0,k>>>0<(n[c>>2]|0)>>>0?(n[k>>2]=n[Ge>>2],n[s>>2]=(n[s>>2]|0)+4):pR(O,Ge),B=n[B>>2]|0;while((B|0)!=0);VNe(f,q,O),$A(O)}n[Me>>2]=n[q>>2],M=U9(Q)|0,n[O>>2]=n[Me>>2],S9(O,M,d),a5(se),m=n[m>>2]|0}while((m|0)!=0)}E=Qe}function GNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,oOe(s,l,c,f)}function YNe(s,l,c){s=s|0,l=l|0,c=c|0,sOe(s,l,c)}function Ym(s){return s=s|0,s|0}function WNe(s,l,c){s=s|0,l=l|0,c=c|0,tOe(s,l,c)}function M9(s){return s=s|0,s+16|0}function KNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(m=E,E=E+16|0,d=m+8|0,c=m,n[s>>2]=0,f=n[l>>2]|0,n[d>>2]=f,n[c>>2]=s,c=eOe(c)|0,f|0){if(f=Kt(12)|0,B=(_9(d)|0)+4|0,s=n[B+4>>2]|0,l=f+4|0,n[l>>2]=n[B>>2],n[l+4>>2]=s,l=n[n[d>>2]>>2]|0,n[d>>2]=l,!l)s=f;else for(l=f;s=Kt(12)|0,Q=(_9(d)|0)+4|0,k=n[Q+4>>2]|0,B=s+4|0,n[B>>2]=n[Q>>2],n[B+4>>2]=k,n[l>>2]=s,B=n[n[d>>2]>>2]|0,n[d>>2]=B,B;)l=s;n[s>>2]=n[c>>2],n[c>>2]=f}E=m}function VNe(s,l,c){s=s|0,l=l|0,c=c|0,zNe(s,l,c)}function U9(s){return s=s|0,s+24|0}function zNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+32|0,B=f+24|0,d=f+16|0,k=f+12|0,m=f,Ka(d),s=da(s)|0,n[k>>2]=n[l>>2],gR(m,c),n[B>>2]=n[k>>2],JNe(s,B,m),$A(m),Va(d),E=f}function JNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=E,E=E+32|0,B=f+16|0,k=f+12|0,d=f,m=Pl(XNe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=kg(B)|0,n[d>>2]=n[c>>2],B=c+4|0,n[d+4>>2]=n[B>>2],k=c+8|0,n[d+8>>2]=n[k>>2],n[k>>2]=0,n[B>>2]=0,n[c>>2]=0,oo(0,m|0,s|0,l|0,mR(d)|0)|0,$A(d),E=f}function XNe(){var s=0;return o[7976]|0||(ZNe(10720),s=7976,n[s>>2]=1,n[s+4>>2]=0),10720}function ZNe(s){s=s|0,Sl(s,$Ne()|0,2)}function $Ne(){return 1732}function eOe(s){return s=s|0,n[s>>2]|0}function _9(s){return s=s|0,n[s>>2]|0}function tOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=E,E=E+32|0,m=f+16|0,d=f+8|0,B=f,Ka(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],H9(s,m,c),Va(d),E=f}function H9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=E,E=E+16|0,m=f+4|0,B=f,d=Pl(rOe()|0)|0,n[B>>2]=n[l>>2],n[m>>2]=n[B>>2],l=kg(m)|0,oo(0,d|0,s|0,l|0,x9(c)|0)|0,E=f}function rOe(){var s=0;return o[7984]|0||(nOe(10732),s=7984,n[s>>2]=1,n[s+4>>2]=0),10732}function nOe(s){s=s|0,Sl(s,iOe()|0,2)}function iOe(){return 1744}function sOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=E,E=E+32|0,m=f+16|0,d=f+8|0,B=f,Ka(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],H9(s,m,c),Va(d),E=f}function oOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=E,E=E+32|0,B=d+16|0,m=d+8|0,k=d,Ka(m),s=da(s)|0,n[k>>2]=n[l>>2],c=o[c>>0]|0,f=o[f>>0]|0,n[B>>2]=n[k>>2],aOe(s,B,c,f),Va(m),E=d}function aOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=E,E=E+16|0,B=d+4|0,k=d,m=Pl(lOe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=kg(B)|0,c=Wm(c)|0,pc(0,m|0,s|0,l|0,c|0,Wm(f)|0)|0,E=d}function lOe(){var s=0;return o[7992]|0||(uOe(10744),s=7992,n[s>>2]=1,n[s+4>>2]=0),10744}function Wm(s){return s=s|0,cOe(s)|0}function cOe(s){return s=s|0,s&255|0}function uOe(s){s=s|0,Sl(s,AOe()|0,3)}function AOe(){return 1756}function fOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;switch(se=E,E=E+32|0,k=se+8|0,Q=se+4|0,M=se+20|0,O=se,NF(s,0),f=cUe(l)|0,n[k>>2]=0,q=k+4|0,n[q>>2]=0,n[k+8>>2]=0,f<<24>>24){case 0:{o[M>>0]=0,pOe(Q,c,M),uD(s,Q)|0,qA(Q);break}case 8:{q=BR(l)|0,o[M>>0]=8,xc(O,n[q+4>>2]|0),hOe(Q,c,M,O,q+8|0),uD(s,Q)|0,qA(Q);break}case 9:{if(m=BR(l)|0,l=n[m+4>>2]|0,l|0)for(B=k+8|0,d=m+12|0;l=l+-1|0,xc(Q,n[d>>2]|0),f=n[q>>2]|0,f>>>0<(n[B>>2]|0)>>>0?(n[f>>2]=n[Q>>2],n[q>>2]=(n[q>>2]|0)+4):pR(k,Q),l;)d=d+4|0;o[M>>0]=9,xc(O,n[m+8>>2]|0),gOe(Q,c,M,O,k),uD(s,Q)|0,qA(Q);break}default:q=BR(l)|0,o[M>>0]=f,xc(O,n[q+4>>2]|0),dOe(Q,c,M,O),uD(s,Q)|0,qA(Q)}$A(k),E=se}function pOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=E,E=E+16|0,d=f,Ka(d),l=da(l)|0,bOe(s,l,o[c>>0]|0),Va(d),E=f}function uD(s,l){s=s|0,l=l|0;var c=0;return c=n[s>>2]|0,c|0&&PA(c|0),n[s>>2]=n[l>>2],n[l>>2]=0,s|0}function hOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=E,E=E+32|0,k=m+16|0,B=m+8|0,Q=m,Ka(B),l=da(l)|0,c=o[c>>0]|0,n[Q>>2]=n[f>>2],d=n[d>>2]|0,n[k>>2]=n[Q>>2],DOe(s,l,c,k,d),Va(B),E=m}function gOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0;m=E,E=E+32|0,Q=m+24|0,B=m+16|0,M=m+12|0,k=m,Ka(B),l=da(l)|0,c=o[c>>0]|0,n[M>>2]=n[f>>2],gR(k,d),n[Q>>2]=n[M>>2],wOe(s,l,c,Q,k),$A(k),Va(B),E=m}function dOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=E,E=E+32|0,B=d+16|0,m=d+8|0,k=d,Ka(m),l=da(l)|0,c=o[c>>0]|0,n[k>>2]=n[f>>2],n[B>>2]=n[k>>2],mOe(s,l,c,B),Va(m),E=d}function mOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=E,E=E+16|0,m=d+4|0,k=d,B=Pl(yOe()|0)|0,c=Wm(c)|0,n[k>>2]=n[f>>2],n[m>>2]=n[k>>2],AD(s,oo(0,B|0,l|0,c|0,kg(m)|0)|0),E=d}function yOe(){var s=0;return o[8e3]|0||(EOe(10756),s=8e3,n[s>>2]=1,n[s+4>>2]=0),10756}function AD(s,l){s=s|0,l=l|0,NF(s,l)}function EOe(s){s=s|0,Sl(s,COe()|0,2)}function COe(){return 1772}function wOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0;m=E,E=E+32|0,Q=m+16|0,M=m+12|0,B=m,k=Pl(IOe()|0)|0,c=Wm(c)|0,n[M>>2]=n[f>>2],n[Q>>2]=n[M>>2],f=kg(Q)|0,n[B>>2]=n[d>>2],Q=d+4|0,n[B+4>>2]=n[Q>>2],M=d+8|0,n[B+8>>2]=n[M>>2],n[M>>2]=0,n[Q>>2]=0,n[d>>2]=0,AD(s,pc(0,k|0,l|0,c|0,f|0,mR(B)|0)|0),$A(B),E=m}function IOe(){var s=0;return o[8008]|0||(BOe(10768),s=8008,n[s>>2]=1,n[s+4>>2]=0),10768}function BOe(s){s=s|0,Sl(s,vOe()|0,3)}function vOe(){return 1784}function DOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=E,E=E+16|0,k=m+4|0,Q=m,B=Pl(POe()|0)|0,c=Wm(c)|0,n[Q>>2]=n[f>>2],n[k>>2]=n[Q>>2],f=kg(k)|0,AD(s,pc(0,B|0,l|0,c|0,f|0,dR(d)|0)|0),E=m}function POe(){var s=0;return o[8016]|0||(SOe(10780),s=8016,n[s>>2]=1,n[s+4>>2]=0),10780}function SOe(s){s=s|0,Sl(s,xOe()|0,3)}function xOe(){return 1800}function bOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=Pl(kOe()|0)|0,AD(s,Qn(0,f|0,l|0,Wm(c)|0)|0)}function kOe(){var s=0;return o[8024]|0||(QOe(10792),s=8024,n[s>>2]=1,n[s+4>>2]=0),10792}function QOe(s){s=s|0,Sl(s,FOe()|0,1)}function FOe(){return 1816}function ROe(){TOe(),LOe(),NOe()}function TOe(){n[2702]=g7(65536)|0}function LOe(){rMe(10856)}function NOe(){OOe(10816)}function OOe(s){s=s|0,MOe(s,5044),UOe(s)|0}function MOe(s,l){s=s|0,l=l|0;var c=0;c=Q9()|0,n[s>>2]=c,JOe(c,l),Sp(n[s>>2]|0)}function UOe(s){s=s|0;var l=0;return l=n[s>>2]|0,xg(l,_Oe()|0),s|0}function _Oe(){var s=0;return o[8032]|0||(j9(10820),tr(64,10820,U|0)|0,s=8032,n[s>>2]=1,n[s+4>>2]=0),Tr(10820)|0||j9(10820),10820}function j9(s){s=s|0,qOe(s),bg(s,25)}function HOe(s){s=s|0,jOe(s+24|0)}function jOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function qOe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,18,l,KOe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function GOe(s,l){s=s|0,l=l|0,YOe(s,l)}function YOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;c=E,E=E+16|0,f=c,d=c+4|0,Pg(d,l),n[f>>2]=Sg(d,l)|0,WOe(s,f),E=c}function WOe(s,l){s=s|0,l=l|0,q9(s+4|0,n[l>>2]|0),o[s+8>>0]=1}function q9(s,l){s=s|0,l=l|0,n[s>>2]=l}function KOe(){return 1824}function VOe(s){return s=s|0,zOe(s)|0}function zOe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=E,E=E+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Kt(4)|0,Pg(d,s),q9(k,Sg(d,s)|0),m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],F9(s,m,d),n[f>>2]=s,E=c,l|0}function Wa(s){s=s|0;var l=0,c=0;return s=s+7&-8,s>>>0<=32768&&(l=n[2701]|0,s>>>0<=(65536-l|0)>>>0)?(c=(n[2702]|0)+l|0,n[2701]=l+s,s=c):(s=g7(s+8|0)|0,n[s>>2]=n[2703],n[2703]=s,s=s+8|0),s|0}function JOe(s,l){s=s|0,l=l|0,n[s>>2]=XOe()|0,n[s+4>>2]=ZOe()|0,n[s+12>>2]=l,n[s+8>>2]=$Oe()|0,n[s+32>>2]=9}function XOe(){return 11744}function ZOe(){return 1832}function $Oe(){return lD()|0}function eMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Pp(f,896)|0)==512?c|0&&(tMe(c),gt(c)):l|0&>(l)}function tMe(s){s=s|0,s=n[s+4>>2]|0,s|0&&xp(s)}function rMe(s){s=s|0,nMe(s,5052),iMe(s)|0,sMe(s,5058,26)|0,oMe(s,5069,1)|0,aMe(s,5077,10)|0,lMe(s,5087,19)|0,cMe(s,5094,27)|0}function nMe(s,l){s=s|0,l=l|0;var c=0;c=tUe()|0,n[s>>2]=c,rUe(c,l),Sp(n[s>>2]|0)}function iMe(s){s=s|0;var l=0;return l=n[s>>2]|0,xg(l,H4e()|0),s|0}function sMe(s,l,c){return s=s|0,l=l|0,c=c|0,B4e(s,pn(l)|0,c,0),s|0}function oMe(s,l,c){return s=s|0,l=l|0,c=c|0,l4e(s,pn(l)|0,c,0),s|0}function aMe(s,l,c){return s=s|0,l=l|0,c=c|0,_Me(s,pn(l)|0,c,0),s|0}function lMe(s,l,c){return s=s|0,l=l|0,c=c|0,DMe(s,pn(l)|0,c,0),s|0}function G9(s,l){s=s|0,l=l|0;var c=0,f=0;e:for(;;){for(c=n[2703]|0;;){if((c|0)==(l|0))break e;if(f=n[c>>2]|0,n[2703]=f,!c)c=f;else break}gt(c)}n[2701]=s}function cMe(s,l,c){return s=s|0,l=l|0,c=c|0,uMe(s,pn(l)|0,c,0),s|0}function uMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=yR()|0,s=AMe(c)|0,hn(m,l,d,s,fMe(c,f)|0,f)}function yR(){var s=0,l=0;if(o[8040]|0||(W9(10860),tr(65,10860,U|0)|0,l=8040,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10860)|0)){s=10860,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));W9(10860)}return 10860}function AMe(s){return s=s|0,s|0}function fMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=E,E=E+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=yR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(Y9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(pMe(B,d,m),l=n[c>>2]|0),E=k,(l-(n[B>>2]|0)>>3)+-1|0}function Y9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function pMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=E,E=E+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=hMe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,gMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,Y9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,dMe(s,d),mMe(d),E=k;return}}function hMe(s){return s=s|0,536870911}function gMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function dMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function mMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function W9(s){s=s|0,CMe(s)}function yMe(s){s=s|0,EMe(s+24|0)}function EMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function CMe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,11,l,wMe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function wMe(){return 1840}function IMe(s,l,c){s=s|0,l=l|0,c=c|0,vMe(n[(BMe(s)|0)>>2]|0,l,c)}function BMe(s){return s=s|0,(n[(yR()|0)+24>>2]|0)+(s<<3)|0}function vMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=E,E=E+16|0,m=f+1|0,d=f,Pg(m,l),l=Sg(m,l)|0,Pg(d,c),c=Sg(d,c)|0,tf[s&31](l,c),E=f}function DMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=ER()|0,s=PMe(c)|0,hn(m,l,d,s,SMe(c,f)|0,f)}function ER(){var s=0,l=0;if(o[8048]|0||(V9(10896),tr(66,10896,U|0)|0,l=8048,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10896)|0)){s=10896,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));V9(10896)}return 10896}function PMe(s){return s=s|0,s|0}function SMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=E,E=E+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=ER()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(K9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(xMe(B,d,m),l=n[c>>2]|0),E=k,(l-(n[B>>2]|0)>>3)+-1|0}function K9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function xMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=E,E=E+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=bMe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,kMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,K9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,QMe(s,d),FMe(d),E=k;return}}function bMe(s){return s=s|0,536870911}function kMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function QMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function FMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function V9(s){s=s|0,LMe(s)}function RMe(s){s=s|0,TMe(s+24|0)}function TMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function LMe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,11,l,NMe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function NMe(){return 1852}function OMe(s,l){return s=s|0,l=l|0,UMe(n[(MMe(s)|0)>>2]|0,l)|0}function MMe(s){return s=s|0,(n[(ER()|0)+24>>2]|0)+(s<<3)|0}function UMe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=E,E=E+16|0,f=c,Pg(f,l),l=Sg(f,l)|0,l=oD(Tg[s&31](l)|0)|0,E=c,l|0}function _Me(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=CR()|0,s=HMe(c)|0,hn(m,l,d,s,jMe(c,f)|0,f)}function CR(){var s=0,l=0;if(o[8056]|0||(J9(10932),tr(67,10932,U|0)|0,l=8056,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10932)|0)){s=10932,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));J9(10932)}return 10932}function HMe(s){return s=s|0,s|0}function jMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=E,E=E+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=CR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(z9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(qMe(B,d,m),l=n[c>>2]|0),E=k,(l-(n[B>>2]|0)>>3)+-1|0}function z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function qMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=E,E=E+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=GMe(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,YMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,z9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,WMe(s,d),KMe(d),E=k;return}}function GMe(s){return s=s|0,536870911}function YMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function WMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function KMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function J9(s){s=s|0,JMe(s)}function VMe(s){s=s|0,zMe(s+24|0)}function zMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function JMe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,7,l,XMe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function XMe(){return 1860}function ZMe(s,l,c){return s=s|0,l=l|0,c=c|0,e4e(n[($Me(s)|0)>>2]|0,l,c)|0}function $Me(s){return s=s|0,(n[(CR()|0)+24>>2]|0)+(s<<3)|0}function e4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return f=E,E=E+32|0,B=f+12|0,m=f+8|0,k=f,Q=f+16|0,d=f+4|0,t4e(Q,l),r4e(k,Q,l),Bp(d,c),c=vp(d,c)|0,n[B>>2]=n[k>>2],_w[s&15](m,B,c),c=n4e(m)|0,qA(m),Dp(d),E=f,c|0}function t4e(s,l){s=s|0,l=l|0}function r4e(s,l,c){s=s|0,l=l|0,c=c|0,i4e(s,c)}function n4e(s){return s=s|0,da(s)|0}function i4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=E,E=E+16|0,c=d,f=l,f&1?(s4e(c,0),ii(f|0,c|0)|0,o4e(s,c),a4e(c)):n[s>>2]=n[l>>2],E=d}function s4e(s,l){s=s|0,l=l|0,$G(s,l),n[s+4>>2]=0,o[s+8>>0]=0}function o4e(s,l){s=s|0,l=l|0,n[s>>2]=n[l+4>>2]}function a4e(s){s=s|0,o[s+8>>0]=0}function l4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=wR()|0,s=c4e(c)|0,hn(m,l,d,s,u4e(c,f)|0,f)}function wR(){var s=0,l=0;if(o[8064]|0||(Z9(10968),tr(68,10968,U|0)|0,l=8064,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10968)|0)){s=10968,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Z9(10968)}return 10968}function c4e(s){return s=s|0,s|0}function u4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=E,E=E+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=wR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(X9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(A4e(B,d,m),l=n[c>>2]|0),E=k,(l-(n[B>>2]|0)>>3)+-1|0}function X9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function A4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=E,E=E+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=f4e(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,p4e(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,X9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,h4e(s,d),g4e(d),E=k;return}}function f4e(s){return s=s|0,536870911}function p4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function h4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function g4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function Z9(s){s=s|0,y4e(s)}function d4e(s){s=s|0,m4e(s+24|0)}function m4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function y4e(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,1,l,E4e()|0,5),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function E4e(){return 1872}function C4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,I4e(n[(w4e(s)|0)>>2]|0,l,c,f,d,m)}function w4e(s){return s=s|0,(n[(wR()|0)+24>>2]|0)+(s<<3)|0}function I4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,q=0;B=E,E=E+32|0,k=B+16|0,Q=B+12|0,M=B+8|0,O=B+4|0,q=B,Bp(k,l),l=vp(k,l)|0,Bp(Q,c),c=vp(Q,c)|0,Bp(M,f),f=vp(M,f)|0,Bp(O,d),d=vp(O,d)|0,Bp(q,m),m=vp(q,m)|0,C7[s&1](l,c,f,d,m),Dp(q),Dp(O),Dp(M),Dp(Q),Dp(k),E=B}function B4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=IR()|0,s=v4e(c)|0,hn(m,l,d,s,D4e(c,f)|0,f)}function IR(){var s=0,l=0;if(o[8072]|0||(e7(11004),tr(69,11004,U|0)|0,l=8072,n[l>>2]=1,n[l+4>>2]=0),!(Tr(11004)|0)){s=11004,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));e7(11004)}return 11004}function v4e(s){return s=s|0,s|0}function D4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=E,E=E+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=IR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?($9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(P4e(B,d,m),l=n[c>>2]|0),E=k,(l-(n[B>>2]|0)>>3)+-1|0}function $9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function P4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=E,E=E+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=S4e(s)|0,f>>>0>>0)Jr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,x4e(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,$9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,b4e(s,d),k4e(d),E=k;return}}function S4e(s){return s=s|0,536870911}function x4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function b4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function k4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function e7(s){s=s|0,R4e(s)}function Q4e(s){s=s|0,F4e(s+24|0)}function F4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function R4e(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,12,l,T4e()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function T4e(){return 1896}function L4e(s,l,c){s=s|0,l=l|0,c=c|0,O4e(n[(N4e(s)|0)>>2]|0,l,c)}function N4e(s){return s=s|0,(n[(IR()|0)+24>>2]|0)+(s<<3)|0}function O4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=E,E=E+16|0,m=f+4|0,d=f,M4e(m,l),l=U4e(m,l)|0,Bp(d,c),c=vp(d,c)|0,tf[s&31](l,c),Dp(d),E=f}function M4e(s,l){s=s|0,l=l|0}function U4e(s,l){return s=s|0,l=l|0,_4e(l)|0}function _4e(s){return s=s|0,s|0}function H4e(){var s=0;return o[8080]|0||(t7(11040),tr(70,11040,U|0)|0,s=8080,n[s>>2]=1,n[s+4>>2]=0),Tr(11040)|0||t7(11040),11040}function t7(s){s=s|0,G4e(s),bg(s,71)}function j4e(s){s=s|0,q4e(s+24|0)}function q4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function G4e(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,7,l,V4e()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Y4e(s){s=s|0,W4e(s)}function W4e(s){s=s|0,K4e(s)}function K4e(s){s=s|0,o[s+8>>0]=1}function V4e(){return 1936}function z4e(){return J4e()|0}function J4e(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=E,E=E+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,m=s+4|0,n[m>>2]=Kt(1)|0,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],X4e(f,m,d),n[c>>2]=f,E=l,s|0}function X4e(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1916,n[c+12>>2]=l,n[s+4>>2]=c}function Z4e(s){s=s|0,zm(s),gt(s)}function $4e(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function eUe(s){s=s|0,gt(s)}function tUe(){var s=0;return o[8088]|0||(lUe(11076),tr(25,11076,U|0)|0,s=8088,n[s>>2]=1,n[s+4>>2]=0),11076}function rUe(s,l){s=s|0,l=l|0,n[s>>2]=nUe()|0,n[s+4>>2]=iUe()|0,n[s+12>>2]=l,n[s+8>>2]=sUe()|0,n[s+32>>2]=10}function nUe(){return 11745}function iUe(){return 1940}function sUe(){return aD()|0}function oUe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Pp(f,896)|0)==512?c|0&&(aUe(c),gt(c)):l|0&>(l)}function aUe(s){s=s|0,s=n[s+4>>2]|0,s|0&&xp(s)}function lUe(s){s=s|0,Ip(s)}function xc(s,l){s=s|0,l=l|0,n[s>>2]=l}function BR(s){return s=s|0,n[s>>2]|0}function cUe(s){return s=s|0,o[n[s>>2]>>0]|0}function uUe(s,l){s=s|0,l=l|0;var c=0,f=0;c=E,E=E+16|0,f=c,n[f>>2]=n[s>>2],AUe(l,f)|0,E=c}function AUe(s,l){s=s|0,l=l|0;var c=0;return c=fUe(n[s>>2]|0,l)|0,l=s+4|0,n[(n[l>>2]|0)+8>>2]=c,n[(n[l>>2]|0)+8>>2]|0}function fUe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=E,E=E+16|0,f=c,Ka(f),s=da(s)|0,l=pUe(s,n[l>>2]|0)|0,Va(f),E=c,l|0}function Ka(s){s=s|0,n[s>>2]=n[2701],n[s+4>>2]=n[2703]}function pUe(s,l){s=s|0,l=l|0;var c=0;return c=Pl(hUe()|0)|0,Qn(0,c|0,s|0,dR(l)|0)|0}function Va(s){s=s|0,G9(n[s>>2]|0,n[s+4>>2]|0)}function hUe(){var s=0;return o[8096]|0||(gUe(11120),s=8096,n[s>>2]=1,n[s+4>>2]=0),11120}function gUe(s){s=s|0,Sl(s,dUe()|0,1)}function dUe(){return 1948}function mUe(){yUe()}function yUe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0,Ge=0,Me=0,Qe=0;if(Me=E,E=E+16|0,O=Me+4|0,q=Me,Li(65536,10804,n[2702]|0,10812),c=D9()|0,l=n[c>>2]|0,s=n[l>>2]|0,s|0)for(f=n[c+8>>2]|0,c=n[c+4>>2]|0;uc(s|0,u[c>>0]|0|0,o[f>>0]|0),l=l+4|0,s=n[l>>2]|0,s;)f=f+1|0,c=c+1|0;if(s=P9()|0,l=n[s>>2]|0,l|0)do uu(l|0,n[s+4>>2]|0),s=s+8|0,l=n[s>>2]|0;while((l|0)!=0);uu(EUe()|0,5167),M=Gm()|0,s=n[M>>2]|0;e:do if(s|0){do CUe(n[s+4>>2]|0),s=n[s>>2]|0;while((s|0)!=0);if(s=n[M>>2]|0,s|0){Q=M;do{for(;d=s,s=n[s>>2]|0,d=n[d+4>>2]|0,!!(wUe(d)|0);)if(n[q>>2]=Q,n[O>>2]=n[q>>2],IUe(M,O)|0,!s)break e;if(BUe(d),Q=n[Q>>2]|0,l=r7(d)|0,m=Hi()|0,B=E,E=E+((1*(l<<2)|0)+15&-16)|0,k=E,E=E+((1*(l<<2)|0)+15&-16)|0,l=n[(M9(d)|0)>>2]|0,l|0)for(c=B,f=k;n[c>>2]=n[(Ym(n[l+4>>2]|0)|0)>>2],n[f>>2]=n[l+8>>2],l=n[l>>2]|0,l;)c=c+4|0,f=f+4|0;Qe=Ym(d)|0,l=vUe(d)|0,c=r7(d)|0,f=DUe(d)|0,Au(Qe|0,l|0,B|0,k|0,c|0,f|0,uR(d)|0),_i(m|0)}while((s|0)!=0)}}while(0);if(s=n[(AR()|0)>>2]|0,s|0)do Qe=s+4|0,M=fR(Qe)|0,d=Nw(M)|0,m=Tw(M)|0,B=(Lw(M)|0)+1|0,k=fD(M)|0,Q=n7(Qe)|0,M=Tr(M)|0,O=cD(Qe)|0,q=vR(Qe)|0,El(0,d|0,m|0,B|0,k|0,Q|0,M|0,O|0,q|0,DR(Qe)|0),s=n[s>>2]|0;while((s|0)!=0);s=n[(Gm()|0)>>2]|0;e:do if(s|0){t:for(;;){if(l=n[s+4>>2]|0,l|0&&(se=n[(Ym(l)|0)>>2]|0,Ge=n[(U9(l)|0)>>2]|0,Ge|0)){c=Ge;do{l=c+4|0,f=fR(l)|0;r:do if(f|0)switch(Tr(f)|0){case 0:break t;case 4:case 3:case 2:{k=Nw(f)|0,Q=Tw(f)|0,M=(Lw(f)|0)+1|0,O=fD(f)|0,q=Tr(f)|0,Qe=cD(l)|0,El(se|0,k|0,Q|0,M|0,O|0,0,q|0,Qe|0,vR(l)|0,DR(l)|0);break r}case 1:{B=Nw(f)|0,k=Tw(f)|0,Q=(Lw(f)|0)+1|0,M=fD(f)|0,O=n7(l)|0,q=Tr(f)|0,Qe=cD(l)|0,El(se|0,B|0,k|0,Q|0,M|0,O|0,q|0,Qe|0,vR(l)|0,DR(l)|0);break r}case 5:{M=Nw(f)|0,O=Tw(f)|0,q=(Lw(f)|0)+1|0,Qe=fD(f)|0,El(se|0,M|0,O|0,q|0,Qe|0,PUe(f)|0,Tr(f)|0,0,0,0);break r}default:break r}while(0);c=n[c>>2]|0}while((c|0)!=0)}if(s=n[s>>2]|0,!s)break e}Rt()}while(0);Ce(),E=Me}function EUe(){return 11703}function CUe(s){s=s|0,o[s+40>>0]=0}function wUe(s){return s=s|0,(o[s+40>>0]|0)!=0|0}function IUe(s,l){return s=s|0,l=l|0,l=SUe(l)|0,s=n[l>>2]|0,n[l>>2]=n[s>>2],gt(s),n[l>>2]|0}function BUe(s){s=s|0,o[s+40>>0]=1}function r7(s){return s=s|0,n[s+20>>2]|0}function vUe(s){return s=s|0,n[s+8>>2]|0}function DUe(s){return s=s|0,n[s+32>>2]|0}function fD(s){return s=s|0,n[s+4>>2]|0}function n7(s){return s=s|0,n[s+4>>2]|0}function vR(s){return s=s|0,n[s+8>>2]|0}function DR(s){return s=s|0,n[s+16>>2]|0}function PUe(s){return s=s|0,n[s+20>>2]|0}function SUe(s){return s=s|0,n[s>>2]|0}function pD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Nt=0;Nt=E,E=E+16|0,se=Nt;do if(s>>>0<245){if(M=s>>>0<11?16:s+11&-8,s=M>>>3,q=n[2783]|0,c=q>>>s,c&3|0)return l=(c&1^1)+s|0,s=11172+(l<<1<<2)|0,c=s+8|0,f=n[c>>2]|0,d=f+8|0,m=n[d>>2]|0,(s|0)==(m|0)?n[2783]=q&~(1<>2]=s,n[c>>2]=m),qe=l<<3,n[f+4>>2]=qe|3,qe=f+qe+4|0,n[qe>>2]=n[qe>>2]|1,qe=d,E=Nt,qe|0;if(O=n[2785]|0,M>>>0>O>>>0){if(c|0)return l=2<>>12&16,l=l>>>B,c=l>>>5&8,l=l>>>c,d=l>>>2&4,l=l>>>d,s=l>>>1&2,l=l>>>s,f=l>>>1&1,f=(c|B|d|s|f)+(l>>>f)|0,l=11172+(f<<1<<2)|0,s=l+8|0,d=n[s>>2]|0,B=d+8|0,c=n[B>>2]|0,(l|0)==(c|0)?(s=q&~(1<>2]=l,n[s>>2]=c,s=q),m=(f<<3)-M|0,n[d+4>>2]=M|3,f=d+M|0,n[f+4>>2]=m|1,n[f+m>>2]=m,O|0&&(d=n[2788]|0,l=O>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=d,n[l+12>>2]=d,n[d+8>>2]=l,n[d+12>>2]=c),n[2785]=m,n[2788]=f,qe=B,E=Nt,qe|0;if(k=n[2784]|0,k){if(c=(k&0-k)+-1|0,B=c>>>12&16,c=c>>>B,m=c>>>5&8,c=c>>>m,Q=c>>>2&4,c=c>>>Q,f=c>>>1&2,c=c>>>f,s=c>>>1&1,s=n[11436+((m|B|Q|f|s)+(c>>>s)<<2)>>2]|0,c=(n[s+4>>2]&-8)-M|0,f=n[s+16+(((n[s+16>>2]|0)==0&1)<<2)>>2]|0,!f)Q=s,m=c;else{do B=(n[f+4>>2]&-8)-M|0,Q=B>>>0>>0,c=Q?B:c,s=Q?f:s,f=n[f+16+(((n[f+16>>2]|0)==0&1)<<2)>>2]|0;while((f|0)!=0);Q=s,m=c}if(B=Q+M|0,Q>>>0>>0){d=n[Q+24>>2]|0,l=n[Q+12>>2]|0;do if((l|0)==(Q|0)){if(s=Q+20|0,l=n[s>>2]|0,!l&&(s=Q+16|0,l=n[s>>2]|0,!l)){c=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0,c=l}else c=n[Q+8>>2]|0,n[c+12>>2]=l,n[l+8>>2]=c,c=l;while(0);do if(d|0){if(l=n[Q+28>>2]|0,s=11436+(l<<2)|0,(Q|0)==(n[s>>2]|0)){if(n[s>>2]=c,!c){n[2784]=k&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=d,l=n[Q+16>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),l=n[Q+20>>2]|0,l|0&&(n[c+20>>2]=l,n[l+24>>2]=c)}while(0);return m>>>0<16?(qe=m+M|0,n[Q+4>>2]=qe|3,qe=Q+qe+4|0,n[qe>>2]=n[qe>>2]|1):(n[Q+4>>2]=M|3,n[B+4>>2]=m|1,n[B+m>>2]=m,O|0&&(f=n[2788]|0,l=O>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=q|l,l=c,s=c+8|0),n[s>>2]=f,n[l+12>>2]=f,n[f+8>>2]=l,n[f+12>>2]=c),n[2785]=m,n[2788]=B),qe=Q+8|0,E=Nt,qe|0}else q=M}else q=M}else q=M}else if(s>>>0<=4294967231)if(s=s+11|0,M=s&-8,Q=n[2784]|0,Q){f=0-M|0,s=s>>>8,s?M>>>0>16777215?k=31:(q=(s+1048320|0)>>>16&8,Ue=s<>>16&4,Ue=Ue<>>16&2,k=14-(O|q|k)+(Ue<>>15)|0,k=M>>>(k+7|0)&1|k<<1):k=0,c=n[11436+(k<<2)>>2]|0;e:do if(!c)c=0,s=0,Ue=57;else for(s=0,B=M<<((k|0)==31?0:25-(k>>>1)|0),m=0;;){if(d=(n[c+4>>2]&-8)-M|0,d>>>0>>0)if(d)s=c,f=d;else{s=c,f=0,d=c,Ue=61;break e}if(d=n[c+20>>2]|0,c=n[c+16+(B>>>31<<2)>>2]|0,m=(d|0)==0|(d|0)==(c|0)?m:d,d=(c|0)==0,d){c=m,Ue=57;break}else B=B<<((d^1)&1)}while(0);if((Ue|0)==57){if((c|0)==0&(s|0)==0){if(s=2<>>12&16,q=q>>>B,m=q>>>5&8,q=q>>>m,k=q>>>2&4,q=q>>>k,O=q>>>1&2,q=q>>>O,c=q>>>1&1,s=0,c=n[11436+((m|B|k|O|c)+(q>>>c)<<2)>>2]|0}c?(d=c,Ue=61):(k=s,B=f)}if((Ue|0)==61)for(;;)if(Ue=0,c=(n[d+4>>2]&-8)-M|0,q=c>>>0>>0,c=q?c:f,s=q?d:s,d=n[d+16+(((n[d+16>>2]|0)==0&1)<<2)>>2]|0,d)f=c,Ue=61;else{k=s,B=c;break}if((k|0)!=0&&B>>>0<((n[2785]|0)-M|0)>>>0){if(m=k+M|0,k>>>0>=m>>>0)return qe=0,E=Nt,qe|0;d=n[k+24>>2]|0,l=n[k+12>>2]|0;do if((l|0)==(k|0)){if(s=k+20|0,l=n[s>>2]|0,!l&&(s=k+16|0,l=n[s>>2]|0,!l)){l=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0}else qe=n[k+8>>2]|0,n[qe+12>>2]=l,n[l+8>>2]=qe;while(0);do if(d){if(s=n[k+28>>2]|0,c=11436+(s<<2)|0,(k|0)==(n[c>>2]|0)){if(n[c>>2]=l,!l){f=Q&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=l,!l){f=Q;break}n[l+24>>2]=d,s=n[k+16>>2]|0,s|0&&(n[l+16>>2]=s,n[s+24>>2]=l),s=n[k+20>>2]|0,s&&(n[l+20>>2]=s,n[s+24>>2]=l),f=Q}else f=Q;while(0);do if(B>>>0>=16){if(n[k+4>>2]=M|3,n[m+4>>2]=B|1,n[m+B>>2]=B,l=B>>>3,B>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=m,n[l+12>>2]=m,n[m+8>>2]=l,n[m+12>>2]=c;break}if(l=B>>>8,l?B>>>0>16777215?l=31:(Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,l=14-(at|Ue|l)+(qe<>>15)|0,l=B>>>(l+7|0)&1|l<<1):l=0,c=11436+(l<<2)|0,n[m+28>>2]=l,s=m+16|0,n[s+4>>2]=0,n[s>>2]=0,s=1<>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}for(s=B<<((l|0)==31?0:25-(l>>>1)|0),c=n[c>>2]|0;;){if((n[c+4>>2]&-8|0)==(B|0)){Ue=97;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=96;break}}if((Ue|0)==96){n[f>>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}else if((Ue|0)==97){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=m,n[Ue>>2]=m,n[m+8>>2]=qe,n[m+12>>2]=c,n[m+24>>2]=0;break}}else qe=B+M|0,n[k+4>>2]=qe|3,qe=k+qe+4|0,n[qe>>2]=n[qe>>2]|1;while(0);return qe=k+8|0,E=Nt,qe|0}else q=M}else q=M;else q=-1;while(0);if(c=n[2785]|0,c>>>0>=q>>>0)return l=c-q|0,s=n[2788]|0,l>>>0>15?(qe=s+q|0,n[2788]=qe,n[2785]=l,n[qe+4>>2]=l|1,n[qe+l>>2]=l,n[s+4>>2]=q|3):(n[2785]=0,n[2788]=0,n[s+4>>2]=c|3,qe=s+c+4|0,n[qe>>2]=n[qe>>2]|1),qe=s+8|0,E=Nt,qe|0;if(B=n[2786]|0,B>>>0>q>>>0)return at=B-q|0,n[2786]=at,qe=n[2789]|0,Ue=qe+q|0,n[2789]=Ue,n[Ue+4>>2]=at|1,n[qe+4>>2]=q|3,qe=qe+8|0,E=Nt,qe|0;if(n[2901]|0?s=n[2903]|0:(n[2903]=4096,n[2902]=4096,n[2904]=-1,n[2905]=-1,n[2906]=0,n[2894]=0,s=se&-16^1431655768,n[se>>2]=s,n[2901]=s,s=4096),k=q+48|0,Q=q+47|0,m=s+Q|0,d=0-s|0,M=m&d,M>>>0<=q>>>0||(s=n[2893]|0,s|0&&(O=n[2891]|0,se=O+M|0,se>>>0<=O>>>0|se>>>0>s>>>0)))return qe=0,E=Nt,qe|0;e:do if(n[2894]&4)l=0,Ue=133;else{c=n[2789]|0;t:do if(c){for(f=11580;s=n[f>>2]|0,!(s>>>0<=c>>>0&&(Qe=f+4|0,(s+(n[Qe>>2]|0)|0)>>>0>c>>>0));)if(s=n[f+8>>2]|0,s)f=s;else{Ue=118;break t}if(l=m-B&d,l>>>0<2147483647)if(s=bp(l|0)|0,(s|0)==((n[f>>2]|0)+(n[Qe>>2]|0)|0)){if((s|0)!=-1){B=l,m=s,Ue=135;break e}}else f=s,Ue=126;else l=0}else Ue=118;while(0);do if((Ue|0)==118)if(c=bp(0)|0,(c|0)!=-1&&(l=c,Ge=n[2902]|0,Me=Ge+-1|0,l=((Me&l|0)==0?0:(Me+l&0-Ge)-l|0)+M|0,Ge=n[2891]|0,Me=l+Ge|0,l>>>0>q>>>0&l>>>0<2147483647)){if(Qe=n[2893]|0,Qe|0&&Me>>>0<=Ge>>>0|Me>>>0>Qe>>>0){l=0;break}if(s=bp(l|0)|0,(s|0)==(c|0)){B=l,m=c,Ue=135;break e}else f=s,Ue=126}else l=0;while(0);do if((Ue|0)==126){if(c=0-l|0,!(k>>>0>l>>>0&(l>>>0<2147483647&(f|0)!=-1)))if((f|0)==-1){l=0;break}else{B=l,m=f,Ue=135;break e}if(s=n[2903]|0,s=Q-l+s&0-s,s>>>0>=2147483647){B=l,m=f,Ue=135;break e}if((bp(s|0)|0)==-1){bp(c|0)|0,l=0;break}else{B=s+l|0,m=f,Ue=135;break e}}while(0);n[2894]=n[2894]|4,Ue=133}while(0);if((Ue|0)==133&&M>>>0<2147483647&&(at=bp(M|0)|0,Qe=bp(0)|0,et=Qe-at|0,Xe=et>>>0>(q+40|0)>>>0,!((at|0)==-1|Xe^1|at>>>0>>0&((at|0)!=-1&(Qe|0)!=-1)^1))&&(B=Xe?et:l,m=at,Ue=135),(Ue|0)==135){l=(n[2891]|0)+B|0,n[2891]=l,l>>>0>(n[2892]|0)>>>0&&(n[2892]=l),Q=n[2789]|0;do if(Q){for(l=11580;;){if(s=n[l>>2]|0,c=l+4|0,f=n[c>>2]|0,(m|0)==(s+f|0)){Ue=145;break}if(d=n[l+8>>2]|0,d)l=d;else break}if((Ue|0)==145&&(n[l+12>>2]&8|0)==0&&Q>>>0>>0&Q>>>0>=s>>>0){n[c>>2]=f+B,qe=Q+8|0,qe=(qe&7|0)==0?0:0-qe&7,Ue=Q+qe|0,qe=(n[2786]|0)+(B-qe)|0,n[2789]=Ue,n[2786]=qe,n[Ue+4>>2]=qe|1,n[Ue+qe+4>>2]=40,n[2790]=n[2905];break}for(m>>>0<(n[2787]|0)>>>0&&(n[2787]=m),c=m+B|0,l=11580;;){if((n[l>>2]|0)==(c|0)){Ue=153;break}if(s=n[l+8>>2]|0,s)l=s;else break}if((Ue|0)==153&&(n[l+12>>2]&8|0)==0){n[l>>2]=m,O=l+4|0,n[O>>2]=(n[O>>2]|0)+B,O=m+8|0,O=m+((O&7|0)==0?0:0-O&7)|0,l=c+8|0,l=c+((l&7|0)==0?0:0-l&7)|0,M=O+q|0,k=l-O-q|0,n[O+4>>2]=q|3;do if((l|0)!=(Q|0)){if((l|0)==(n[2788]|0)){qe=(n[2785]|0)+k|0,n[2785]=qe,n[2788]=M,n[M+4>>2]=qe|1,n[M+qe>>2]=qe;break}if(s=n[l+4>>2]|0,(s&3|0)==1){B=s&-8,f=s>>>3;e:do if(s>>>0<256)if(s=n[l+8>>2]|0,c=n[l+12>>2]|0,(c|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=c,n[c+8>>2]=s;break}else{m=n[l+24>>2]|0,s=n[l+12>>2]|0;do if((s|0)==(l|0)){if(f=l+16|0,c=f+4|0,s=n[c>>2]|0,!s)if(s=n[f>>2]|0,s)c=f;else{s=0;break}for(;;){if(f=s+20|0,d=n[f>>2]|0,d|0){s=d,c=f;continue}if(f=s+16|0,d=n[f>>2]|0,d)s=d,c=f;else break}n[c>>2]=0}else qe=n[l+8>>2]|0,n[qe+12>>2]=s,n[s+8>>2]=qe;while(0);if(!m)break;c=n[l+28>>2]|0,f=11436+(c<<2)|0;do if((l|0)!=(n[f>>2]|0)){if(n[m+16+(((n[m+16>>2]|0)!=(l|0)&1)<<2)>>2]=s,!s)break e}else{if(n[f>>2]=s,s|0)break;n[2784]=n[2784]&~(1<>2]=m,c=l+16|0,f=n[c>>2]|0,f|0&&(n[s+16>>2]=f,n[f+24>>2]=s),c=n[c+4>>2]|0,!c)break;n[s+20>>2]=c,n[c+24>>2]=s}while(0);l=l+B|0,d=B+k|0}else d=k;if(l=l+4|0,n[l>>2]=n[l>>2]&-2,n[M+4>>2]=d|1,n[M+d>>2]=d,l=d>>>3,d>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=M,n[l+12>>2]=M,n[M+8>>2]=l,n[M+12>>2]=c;break}l=d>>>8;do if(!l)l=0;else{if(d>>>0>16777215){l=31;break}Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,l=14-(at|Ue|l)+(qe<>>15)|0,l=d>>>(l+7|0)&1|l<<1}while(0);if(f=11436+(l<<2)|0,n[M+28>>2]=l,s=M+16|0,n[s+4>>2]=0,n[s>>2]=0,s=n[2784]|0,c=1<>2]=M,n[M+24>>2]=f,n[M+12>>2]=M,n[M+8>>2]=M;break}for(s=d<<((l|0)==31?0:25-(l>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){Ue=194;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=193;break}}if((Ue|0)==193){n[f>>2]=M,n[M+24>>2]=c,n[M+12>>2]=M,n[M+8>>2]=M;break}else if((Ue|0)==194){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=M,n[Ue>>2]=M,n[M+8>>2]=qe,n[M+12>>2]=c,n[M+24>>2]=0;break}}else qe=(n[2786]|0)+k|0,n[2786]=qe,n[2789]=M,n[M+4>>2]=qe|1;while(0);return qe=O+8|0,E=Nt,qe|0}for(l=11580;s=n[l>>2]|0,!(s>>>0<=Q>>>0&&(qe=s+(n[l+4>>2]|0)|0,qe>>>0>Q>>>0));)l=n[l+8>>2]|0;d=qe+-47|0,s=d+8|0,s=d+((s&7|0)==0?0:0-s&7)|0,d=Q+16|0,s=s>>>0>>0?Q:s,l=s+8|0,c=m+8|0,c=(c&7|0)==0?0:0-c&7,Ue=m+c|0,c=B+-40-c|0,n[2789]=Ue,n[2786]=c,n[Ue+4>>2]=c|1,n[Ue+c+4>>2]=40,n[2790]=n[2905],c=s+4|0,n[c>>2]=27,n[l>>2]=n[2895],n[l+4>>2]=n[2896],n[l+8>>2]=n[2897],n[l+12>>2]=n[2898],n[2895]=m,n[2896]=B,n[2898]=0,n[2897]=l,l=s+24|0;do Ue=l,l=l+4|0,n[l>>2]=7;while((Ue+8|0)>>>0>>0);if((s|0)!=(Q|0)){if(m=s-Q|0,n[c>>2]=n[c>>2]&-2,n[Q+4>>2]=m|1,n[s>>2]=m,l=m>>>3,m>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=Q,n[l+12>>2]=Q,n[Q+8>>2]=l,n[Q+12>>2]=c;break}if(l=m>>>8,l?m>>>0>16777215?c=31:(Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,c=14-(at|Ue|c)+(qe<>>15)|0,c=m>>>(c+7|0)&1|c<<1):c=0,f=11436+(c<<2)|0,n[Q+28>>2]=c,n[Q+20>>2]=0,n[d>>2]=0,l=n[2784]|0,s=1<>2]=Q,n[Q+24>>2]=f,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}for(s=m<<((c|0)==31?0:25-(c>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(m|0)){Ue=216;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=215;break}}if((Ue|0)==215){n[f>>2]=Q,n[Q+24>>2]=c,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}else if((Ue|0)==216){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=Q,n[Ue>>2]=Q,n[Q+8>>2]=qe,n[Q+12>>2]=c,n[Q+24>>2]=0;break}}}else{qe=n[2787]|0,(qe|0)==0|m>>>0>>0&&(n[2787]=m),n[2895]=m,n[2896]=B,n[2898]=0,n[2792]=n[2901],n[2791]=-1,l=0;do qe=11172+(l<<1<<2)|0,n[qe+12>>2]=qe,n[qe+8>>2]=qe,l=l+1|0;while((l|0)!=32);qe=m+8|0,qe=(qe&7|0)==0?0:0-qe&7,Ue=m+qe|0,qe=B+-40-qe|0,n[2789]=Ue,n[2786]=qe,n[Ue+4>>2]=qe|1,n[Ue+qe+4>>2]=40,n[2790]=n[2905]}while(0);if(l=n[2786]|0,l>>>0>q>>>0)return at=l-q|0,n[2786]=at,qe=n[2789]|0,Ue=qe+q|0,n[2789]=Ue,n[Ue+4>>2]=at|1,n[qe+4>>2]=q|3,qe=qe+8|0,E=Nt,qe|0}return n[(Km()|0)>>2]=12,qe=0,E=Nt,qe|0}function hD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(!!s){c=s+-8|0,d=n[2787]|0,s=n[s+-4>>2]|0,l=s&-8,Q=c+l|0;do if(s&1)k=c,B=c;else{if(f=n[c>>2]|0,!(s&3)||(B=c+(0-f)|0,m=f+l|0,B>>>0>>0))return;if((B|0)==(n[2788]|0)){if(s=Q+4|0,l=n[s>>2]|0,(l&3|0)!=3){k=B,l=m;break}n[2785]=m,n[s>>2]=l&-2,n[B+4>>2]=m|1,n[B+m>>2]=m;return}if(c=f>>>3,f>>>0<256)if(s=n[B+8>>2]|0,l=n[B+12>>2]|0,(l|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=l,n[l+8>>2]=s,k=B,l=m;break}d=n[B+24>>2]|0,s=n[B+12>>2]|0;do if((s|0)==(B|0)){if(c=B+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{s=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0}else k=n[B+8>>2]|0,n[k+12>>2]=s,n[s+8>>2]=k;while(0);if(d){if(l=n[B+28>>2]|0,c=11436+(l<<2)|0,(B|0)==(n[c>>2]|0)){if(n[c>>2]=s,!s){n[2784]=n[2784]&~(1<>2]|0)!=(B|0)&1)<<2)>>2]=s,!s){k=B,l=m;break}n[s+24>>2]=d,l=B+16|0,c=n[l>>2]|0,c|0&&(n[s+16>>2]=c,n[c+24>>2]=s),l=n[l+4>>2]|0,l?(n[s+20>>2]=l,n[l+24>>2]=s,k=B,l=m):(k=B,l=m)}else k=B,l=m}while(0);if(!(B>>>0>=Q>>>0)&&(s=Q+4|0,f=n[s>>2]|0,!!(f&1))){if(f&2)n[s>>2]=f&-2,n[k+4>>2]=l|1,n[B+l>>2]=l,d=l;else{if(s=n[2788]|0,(Q|0)==(n[2789]|0)){if(Q=(n[2786]|0)+l|0,n[2786]=Q,n[2789]=k,n[k+4>>2]=Q|1,(k|0)!=(s|0))return;n[2788]=0,n[2785]=0;return}if((Q|0)==(s|0)){Q=(n[2785]|0)+l|0,n[2785]=Q,n[2788]=B,n[k+4>>2]=Q|1,n[B+Q>>2]=Q;return}d=(f&-8)+l|0,c=f>>>3;do if(f>>>0<256)if(l=n[Q+8>>2]|0,s=n[Q+12>>2]|0,(s|0)==(l|0)){n[2783]=n[2783]&~(1<>2]=s,n[s+8>>2]=l;break}else{m=n[Q+24>>2]|0,s=n[Q+12>>2]|0;do if((s|0)==(Q|0)){if(c=Q+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{c=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0,c=s}else c=n[Q+8>>2]|0,n[c+12>>2]=s,n[s+8>>2]=c,c=s;while(0);if(m|0){if(s=n[Q+28>>2]|0,l=11436+(s<<2)|0,(Q|0)==(n[l>>2]|0)){if(n[l>>2]=c,!c){n[2784]=n[2784]&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=m,s=Q+16|0,l=n[s>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),s=n[s+4>>2]|0,s|0&&(n[c+20>>2]=s,n[s+24>>2]=c)}}while(0);if(n[k+4>>2]=d|1,n[B+d>>2]=d,(k|0)==(n[2788]|0)){n[2785]=d;return}}if(s=d>>>3,d>>>0<256){c=11172+(s<<1<<2)|0,l=n[2783]|0,s=1<>2]|0):(n[2783]=l|s,s=c,l=c+8|0),n[l>>2]=k,n[s+12>>2]=k,n[k+8>>2]=s,n[k+12>>2]=c;return}s=d>>>8,s?d>>>0>16777215?s=31:(B=(s+1048320|0)>>>16&8,Q=s<>>16&4,Q=Q<>>16&2,s=14-(m|B|s)+(Q<>>15)|0,s=d>>>(s+7|0)&1|s<<1):s=0,f=11436+(s<<2)|0,n[k+28>>2]=s,n[k+20>>2]=0,n[k+16>>2]=0,l=n[2784]|0,c=1<>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){s=73;break}if(f=c+16+(l>>>31<<2)|0,s=n[f>>2]|0,s)l=l<<1,c=s;else{s=72;break}}if((s|0)==72){n[f>>2]=k,n[k+24>>2]=c,n[k+12>>2]=k,n[k+8>>2]=k;break}else if((s|0)==73){B=c+8|0,Q=n[B>>2]|0,n[Q+12>>2]=k,n[B>>2]=k,n[k+8>>2]=Q,n[k+12>>2]=c,n[k+24>>2]=0;break}}else n[2784]=l|c,n[f>>2]=k,n[k+24>>2]=f,n[k+12>>2]=k,n[k+8>>2]=k;while(0);if(Q=(n[2791]|0)+-1|0,n[2791]=Q,!Q)s=11588;else return;for(;s=n[s>>2]|0,s;)s=s+8|0;n[2791]=-1}}}function xUe(){return 11628}function bUe(s){s=s|0;var l=0,c=0;return l=E,E=E+16|0,c=l,n[c>>2]=FUe(n[s+60>>2]|0)|0,s=gD(hc(6,c|0)|0)|0,E=l,s|0}function i7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0,Ge=0;q=E,E=E+48|0,M=q+16|0,m=q,d=q+32|0,k=s+28|0,f=n[k>>2]|0,n[d>>2]=f,Q=s+20|0,f=(n[Q>>2]|0)-f|0,n[d+4>>2]=f,n[d+8>>2]=l,n[d+12>>2]=c,f=f+c|0,B=s+60|0,n[m>>2]=n[B>>2],n[m+4>>2]=d,n[m+8>>2]=2,m=gD(Ni(146,m|0)|0)|0;e:do if((f|0)!=(m|0)){for(l=2;!((m|0)<0);)if(f=f-m|0,Ge=n[d+4>>2]|0,se=m>>>0>Ge>>>0,d=se?d+8|0:d,l=(se<<31>>31)+l|0,Ge=m-(se?Ge:0)|0,n[d>>2]=(n[d>>2]|0)+Ge,se=d+4|0,n[se>>2]=(n[se>>2]|0)-Ge,n[M>>2]=n[B>>2],n[M+4>>2]=d,n[M+8>>2]=l,m=gD(Ni(146,M|0)|0)|0,(f|0)==(m|0)){O=3;break e}n[s+16>>2]=0,n[k>>2]=0,n[Q>>2]=0,n[s>>2]=n[s>>2]|32,(l|0)==2?c=0:c=c-(n[d+4>>2]|0)|0}else O=3;while(0);return(O|0)==3&&(Ge=n[s+44>>2]|0,n[s+16>>2]=Ge+(n[s+48>>2]|0),n[k>>2]=Ge,n[Q>>2]=Ge),E=q,c|0}function kUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return d=E,E=E+32|0,m=d,f=d+20|0,n[m>>2]=n[s+60>>2],n[m+4>>2]=0,n[m+8>>2]=l,n[m+12>>2]=f,n[m+16>>2]=c,(gD(sa(140,m|0)|0)|0)<0?(n[f>>2]=-1,s=-1):s=n[f>>2]|0,E=d,s|0}function gD(s){return s=s|0,s>>>0>4294963200&&(n[(Km()|0)>>2]=0-s,s=-1),s|0}function Km(){return(QUe()|0)+64|0}function QUe(){return PR()|0}function PR(){return 2084}function FUe(s){return s=s|0,s|0}function RUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return d=E,E=E+32|0,f=d,n[s+36>>2]=1,(n[s>>2]&64|0)==0&&(n[f>>2]=n[s+60>>2],n[f+4>>2]=21523,n[f+8>>2]=d+16,fu(54,f|0)|0)&&(o[s+75>>0]=-1),f=i7(s,l,c)|0,E=d,f|0}function s7(s,l){s=s|0,l=l|0;var c=0,f=0;if(c=o[s>>0]|0,f=o[l>>0]|0,c<<24>>24==0||c<<24>>24!=f<<24>>24)s=f;else{do s=s+1|0,l=l+1|0,c=o[s>>0]|0,f=o[l>>0]|0;while(!(c<<24>>24==0||c<<24>>24!=f<<24>>24));s=f}return(c&255)-(s&255)|0}function TUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;e:do if(!c)s=0;else{for(;f=o[s>>0]|0,d=o[l>>0]|0,f<<24>>24==d<<24>>24;)if(c=c+-1|0,c)s=s+1|0,l=l+1|0;else{s=0;break e}s=(f&255)-(d&255)|0}while(0);return s|0}function o7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0,Ge=0,Me=0,Qe=0;Qe=E,E=E+224|0,O=Qe+120|0,q=Qe+80|0,Ge=Qe,Me=Qe+136|0,f=q,d=f+40|0;do n[f>>2]=0,f=f+4|0;while((f|0)<(d|0));return n[O>>2]=n[c>>2],(SR(0,l,O,Ge,q)|0)<0?c=-1:((n[s+76>>2]|0)>-1?se=LUe(s)|0:se=0,c=n[s>>2]|0,M=c&32,(o[s+74>>0]|0)<1&&(n[s>>2]=c&-33),f=s+48|0,n[f>>2]|0?c=SR(s,l,O,Ge,q)|0:(d=s+44|0,m=n[d>>2]|0,n[d>>2]=Me,B=s+28|0,n[B>>2]=Me,k=s+20|0,n[k>>2]=Me,n[f>>2]=80,Q=s+16|0,n[Q>>2]=Me+80,c=SR(s,l,O,Ge,q)|0,m&&(ED[n[s+36>>2]&7](s,0,0)|0,c=(n[k>>2]|0)==0?-1:c,n[d>>2]=m,n[f>>2]=0,n[Q>>2]=0,n[B>>2]=0,n[k>>2]=0)),f=n[s>>2]|0,n[s>>2]=f|M,se|0&&NUe(s),c=(f&32|0)==0?c:-1),E=Qe,c|0}function SR(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Nt=0,Mr=0,or=0,Xt=0,Pr=0,Lr=0,ir=0;ir=E,E=E+64|0,or=ir+16|0,Xt=ir,Nt=ir+24|0,Pr=ir+8|0,Lr=ir+20|0,n[or>>2]=l,at=(s|0)!=0,Ue=Nt+40|0,qe=Ue,Nt=Nt+39|0,Mr=Pr+4|0,B=0,m=0,O=0;e:for(;;){do if((m|0)>-1)if((B|0)>(2147483647-m|0)){n[(Km()|0)>>2]=75,m=-1;break}else{m=B+m|0;break}while(0);if(B=o[l>>0]|0,B<<24>>24)k=l;else{Xe=87;break}t:for(;;){switch(B<<24>>24){case 37:{B=k,Xe=9;break t}case 0:{B=k;break t}default:}et=k+1|0,n[or>>2]=et,B=o[et>>0]|0,k=et}t:do if((Xe|0)==9)for(;;){if(Xe=0,(o[k+1>>0]|0)!=37)break t;if(B=B+1|0,k=k+2|0,n[or>>2]=k,(o[k>>0]|0)==37)Xe=9;else break}while(0);if(B=B-l|0,at&&ss(s,l,B),B|0){l=k;continue}Q=k+1|0,B=(o[Q>>0]|0)+-48|0,B>>>0<10?(et=(o[k+2>>0]|0)==36,Qe=et?B:-1,O=et?1:O,Q=et?k+3|0:Q):Qe=-1,n[or>>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0;t:do if(k>>>0<32)for(M=0,q=B;;){if(B=1<>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0,k>>>0>=32)break;q=B}else M=0;while(0);if(B<<24>>24==42){if(k=Q+1|0,B=(o[k>>0]|0)+-48|0,B>>>0<10&&(o[Q+2>>0]|0)==36)n[d+(B<<2)>>2]=10,B=n[f+((o[k>>0]|0)+-48<<3)>>2]|0,O=1,Q=Q+3|0;else{if(O|0){m=-1;break}at?(O=(n[c>>2]|0)+(4-1)&~(4-1),B=n[O>>2]|0,n[c>>2]=O+4,O=0,Q=k):(B=0,O=0,Q=k)}n[or>>2]=Q,et=(B|0)<0,B=et?0-B|0:B,M=et?M|8192:M}else{if(B=a7(or)|0,(B|0)<0){m=-1;break}Q=n[or>>2]|0}do if((o[Q>>0]|0)==46){if((o[Q+1>>0]|0)!=42){n[or>>2]=Q+1,k=a7(or)|0,Q=n[or>>2]|0;break}if(q=Q+2|0,k=(o[q>>0]|0)+-48|0,k>>>0<10&&(o[Q+3>>0]|0)==36){n[d+(k<<2)>>2]=10,k=n[f+((o[q>>0]|0)+-48<<3)>>2]|0,Q=Q+4|0,n[or>>2]=Q;break}if(O|0){m=-1;break e}at?(et=(n[c>>2]|0)+(4-1)&~(4-1),k=n[et>>2]|0,n[c>>2]=et+4):k=0,n[or>>2]=q,Q=q}else k=-1;while(0);for(Me=0;;){if(((o[Q>>0]|0)+-65|0)>>>0>57){m=-1;break e}if(et=Q+1|0,n[or>>2]=et,q=o[(o[Q>>0]|0)+-65+(5178+(Me*58|0))>>0]|0,se=q&255,(se+-1|0)>>>0<8)Me=se,Q=et;else break}if(!(q<<24>>24)){m=-1;break}Ge=(Qe|0)>-1;do if(q<<24>>24==19)if(Ge){m=-1;break e}else Xe=49;else{if(Ge){n[d+(Qe<<2)>>2]=se,Ge=f+(Qe<<3)|0,Qe=n[Ge+4>>2]|0,Xe=Xt,n[Xe>>2]=n[Ge>>2],n[Xe+4>>2]=Qe,Xe=49;break}if(!at){m=0;break e}l7(Xt,se,c)}while(0);if((Xe|0)==49&&(Xe=0,!at)){B=0,l=et;continue}Q=o[Q>>0]|0,Q=(Me|0)!=0&(Q&15|0)==3?Q&-33:Q,Ge=M&-65537,Qe=(M&8192|0)==0?M:Ge;t:do switch(Q|0){case 110:switch((Me&255)<<24>>24){case 0:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 1:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 2:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}case 3:{a[n[Xt>>2]>>1]=m,B=0,l=et;continue e}case 4:{o[n[Xt>>2]>>0]=m,B=0,l=et;continue e}case 6:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 7:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}default:{B=0,l=et;continue e}}case 112:{Q=120,k=k>>>0>8?k:8,l=Qe|8,Xe=61;break}case 88:case 120:{l=Qe,Xe=61;break}case 111:{Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,se=MUe(l,Q,Ue)|0,Ge=qe-se|0,M=0,q=5642,k=(Qe&8|0)==0|(k|0)>(Ge|0)?k:Ge+1|0,Ge=Qe,Xe=67;break}case 105:case 100:if(Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,(Q|0)<0){l=dD(0,0,l|0,Q|0)|0,Q=De,M=Xt,n[M>>2]=l,n[M+4>>2]=Q,M=1,q=5642,Xe=66;break t}else{M=(Qe&2049|0)!=0&1,q=(Qe&2048|0)==0?(Qe&1|0)==0?5642:5644:5643,Xe=66;break t}case 117:{Q=Xt,M=0,q=5642,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,Xe=66;break}case 99:{o[Nt>>0]=n[Xt>>2],l=Nt,M=0,q=5642,se=Ue,Q=1,k=Ge;break}case 109:{Q=UUe(n[(Km()|0)>>2]|0)|0,Xe=71;break}case 115:{Q=n[Xt>>2]|0,Q=Q|0?Q:5652,Xe=71;break}case 67:{n[Pr>>2]=n[Xt>>2],n[Mr>>2]=0,n[Xt>>2]=Pr,se=-1,Q=Pr,Xe=75;break}case 83:{l=n[Xt>>2]|0,k?(se=k,Q=l,Xe=75):(Bs(s,32,B,0,Qe),l=0,Xe=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{B=HUe(s,+C[Xt>>3],B,k,Qe,Q)|0,l=et;continue e}default:M=0,q=5642,se=Ue,Q=k,k=Qe}while(0);t:do if((Xe|0)==61)Qe=Xt,Me=n[Qe>>2]|0,Qe=n[Qe+4>>2]|0,se=OUe(Me,Qe,Ue,Q&32)|0,q=(l&8|0)==0|(Me|0)==0&(Qe|0)==0,M=q?0:2,q=q?5642:5642+(Q>>4)|0,Ge=l,l=Me,Q=Qe,Xe=67;else if((Xe|0)==66)se=Vm(l,Q,Ue)|0,Ge=Qe,Xe=67;else if((Xe|0)==71)Xe=0,Qe=_Ue(Q,0,k)|0,Me=(Qe|0)==0,l=Q,M=0,q=5642,se=Me?Q+k|0:Qe,Q=Me?k:Qe-Q|0,k=Ge;else if((Xe|0)==75){for(Xe=0,q=Q,l=0,k=0;M=n[q>>2]|0,!(!M||(k=c7(Lr,M)|0,(k|0)<0|k>>>0>(se-l|0)>>>0));)if(l=k+l|0,se>>>0>l>>>0)q=q+4|0;else break;if((k|0)<0){m=-1;break e}if(Bs(s,32,B,l,Qe),!l)l=0,Xe=84;else for(M=0;;){if(k=n[Q>>2]|0,!k){Xe=84;break t}if(k=c7(Lr,k)|0,M=k+M|0,(M|0)>(l|0)){Xe=84;break t}if(ss(s,Lr,k),M>>>0>=l>>>0){Xe=84;break}else Q=Q+4|0}}while(0);if((Xe|0)==67)Xe=0,Q=(l|0)!=0|(Q|0)!=0,Qe=(k|0)!=0|Q,Q=((Q^1)&1)+(qe-se)|0,l=Qe?se:Ue,se=Ue,Q=Qe?(k|0)>(Q|0)?k:Q:k,k=(k|0)>-1?Ge&-65537:Ge;else if((Xe|0)==84){Xe=0,Bs(s,32,B,l,Qe^8192),B=(B|0)>(l|0)?B:l,l=et;continue}Me=se-l|0,Ge=(Q|0)<(Me|0)?Me:Q,Qe=Ge+M|0,B=(B|0)<(Qe|0)?Qe:B,Bs(s,32,B,Qe,k),ss(s,q,M),Bs(s,48,B,Qe,k^65536),Bs(s,48,Ge,Me,0),ss(s,l,Me),Bs(s,32,B,Qe,k^8192),l=et}e:do if((Xe|0)==87&&!s)if(!O)m=0;else{for(m=1;l=n[d+(m<<2)>>2]|0,!!l;)if(l7(f+(m<<3)|0,l,c),m=m+1|0,(m|0)>=10){m=1;break e}for(;;){if(n[d+(m<<2)>>2]|0){m=-1;break e}if(m=m+1|0,(m|0)>=10){m=1;break}}}while(0);return E=ir,m|0}function LUe(s){return s=s|0,0}function NUe(s){s=s|0}function ss(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]&32||JUe(l,c,s)|0}function a7(s){s=s|0;var l=0,c=0,f=0;if(c=n[s>>2]|0,f=(o[c>>0]|0)+-48|0,f>>>0<10){l=0;do l=f+(l*10|0)|0,c=c+1|0,n[s>>2]=c,f=(o[c>>0]|0)+-48|0;while(f>>>0<10)}else l=0;return l|0}function l7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;e:do if(l>>>0<=20)do switch(l|0){case 9:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,n[s>>2]=l;break e}case 10:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=((l|0)<0)<<31>>31;break e}case 11:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=0;break e}case 12:{f=(n[c>>2]|0)+(8-1)&~(8-1),l=f,d=n[l>>2]|0,l=n[l+4>>2]|0,n[c>>2]=f+8,f=s,n[f>>2]=d,n[f+4>>2]=l;break e}case 13:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&65535)<<16>>16,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 14:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&65535,n[d+4>>2]=0;break e}case 15:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&255)<<24>>24,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 16:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&255,n[d+4>>2]=0;break e}case 17:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+C[d>>3],n[c>>2]=d+8,C[s>>3]=m;break e}case 18:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+C[d>>3],n[c>>2]=d+8,C[s>>3]=m;break e}default:break e}while(0);while(0)}function OUe(s,l,c,f){if(s=s|0,l=l|0,c=c|0,f=f|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=u[5694+(s&15)>>0]|0|f,s=mD(s|0,l|0,4)|0,l=De;while(!((s|0)==0&(l|0)==0));return c|0}function MUe(s,l,c){if(s=s|0,l=l|0,c=c|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=s&7|48,s=mD(s|0,l|0,3)|0,l=De;while(!((s|0)==0&(l|0)==0));return c|0}function Vm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if(l>>>0>0|(l|0)==0&s>>>0>4294967295){for(;f=QR(s|0,l|0,10,0)|0,c=c+-1|0,o[c>>0]=f&255|48,f=s,s=kR(s|0,l|0,10,0)|0,l>>>0>9|(l|0)==9&f>>>0>4294967295;)l=De;l=s}else l=s;if(l)for(;c=c+-1|0,o[c>>0]=(l>>>0)%10|0|48,!(l>>>0<10);)l=(l>>>0)/10|0;return c|0}function UUe(s){return s=s|0,WUe(s,n[(YUe()|0)+188>>2]|0)|0}function _Ue(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;m=l&255,f=(c|0)!=0;e:do if(f&(s&3|0)!=0)for(d=l&255;;){if((o[s>>0]|0)==d<<24>>24){B=6;break e}if(s=s+1|0,c=c+-1|0,f=(c|0)!=0,!(f&(s&3|0)!=0)){B=5;break}}else B=5;while(0);(B|0)==5&&(f?B=6:c=0);e:do if((B|0)==6&&(d=l&255,(o[s>>0]|0)!=d<<24>>24)){f=je(m,16843009)|0;t:do if(c>>>0>3){for(;m=n[s>>2]^f,!((m&-2139062144^-2139062144)&m+-16843009|0);)if(s=s+4|0,c=c+-4|0,c>>>0<=3){B=11;break t}}else B=11;while(0);if((B|0)==11&&!c){c=0;break}for(;;){if((o[s>>0]|0)==d<<24>>24)break e;if(s=s+1|0,c=c+-1|0,!c){c=0;break}}}while(0);return(c|0?s:0)|0}function Bs(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0;if(B=E,E=E+256|0,m=B,(c|0)>(f|0)&(d&73728|0)==0){if(d=c-f|0,Jm(m|0,l|0,(d>>>0<256?d:256)|0)|0,d>>>0>255){l=c-f|0;do ss(s,m,256),d=d+-256|0;while(d>>>0>255);d=l&255}ss(s,m,d)}E=B}function c7(s,l){return s=s|0,l=l|0,s?s=qUe(s,l,0)|0:s=0,s|0}function HUe(s,l,c,f,d,m){s=s|0,l=+l,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,q=0,se=0,Ge=0,Me=0,Qe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Nt=0,Mr=0,or=0,Xt=0,Pr=0,Lr=0,ir=0,bn=0;bn=E,E=E+560|0,Q=bn+8|0,et=bn,ir=bn+524|0,Lr=ir,M=bn+512|0,n[et>>2]=0,Pr=M+12|0,u7(l)|0,(De|0)<0?(l=-l,or=1,Mr=5659):(or=(d&2049|0)!=0&1,Mr=(d&2048|0)==0?(d&1|0)==0?5660:5665:5662),u7(l)|0,Xt=De&2146435072;do if(Xt>>>0<2146435072|(Xt|0)==2146435072&0<0){if(Ge=+jUe(l,et)*2,B=Ge!=0,B&&(n[et>>2]=(n[et>>2]|0)+-1),at=m|32,(at|0)==97){Me=m&32,se=(Me|0)==0?Mr:Mr+9|0,q=or|2,B=12-f|0;do if(f>>>0>11|(B|0)==0)l=Ge;else{l=8;do B=B+-1|0,l=l*16;while((B|0)!=0);if((o[se>>0]|0)==45){l=-(l+(-Ge-l));break}else{l=Ge+l-l;break}}while(0);k=n[et>>2]|0,B=(k|0)<0?0-k|0:k,B=Vm(B,((B|0)<0)<<31>>31,Pr)|0,(B|0)==(Pr|0)&&(B=M+11|0,o[B>>0]=48),o[B+-1>>0]=(k>>31&2)+43,O=B+-2|0,o[O>>0]=m+15,M=(f|0)<1,Q=(d&8|0)==0,B=ir;do Xt=~~l,k=B+1|0,o[B>>0]=u[5694+Xt>>0]|Me,l=(l-+(Xt|0))*16,(k-Lr|0)==1&&!(Q&(M&l==0))?(o[k>>0]=46,B=B+2|0):B=k;while(l!=0);Xt=B-Lr|0,Lr=Pr-O|0,Pr=(f|0)!=0&(Xt+-2|0)<(f|0)?f+2|0:Xt,B=Lr+q+Pr|0,Bs(s,32,c,B,d),ss(s,se,q),Bs(s,48,c,B,d^65536),ss(s,ir,Xt),Bs(s,48,Pr-Xt|0,0,0),ss(s,O,Lr),Bs(s,32,c,B,d^8192);break}k=(f|0)<0?6:f,B?(B=(n[et>>2]|0)+-28|0,n[et>>2]=B,l=Ge*268435456):(l=Ge,B=n[et>>2]|0),Xt=(B|0)<0?Q:Q+288|0,Q=Xt;do qe=~~l>>>0,n[Q>>2]=qe,Q=Q+4|0,l=(l-+(qe>>>0))*1e9;while(l!=0);if((B|0)>0)for(M=Xt,q=Q;;){if(O=(B|0)<29?B:29,B=q+-4|0,B>>>0>=M>>>0){Q=0;do Ue=d7(n[B>>2]|0,0,O|0)|0,Ue=bR(Ue|0,De|0,Q|0,0)|0,qe=De,Xe=QR(Ue|0,qe|0,1e9,0)|0,n[B>>2]=Xe,Q=kR(Ue|0,qe|0,1e9,0)|0,B=B+-4|0;while(B>>>0>=M>>>0);Q&&(M=M+-4|0,n[M>>2]=Q)}for(Q=q;!(Q>>>0<=M>>>0);)if(B=Q+-4|0,!(n[B>>2]|0))Q=B;else break;if(B=(n[et>>2]|0)-O|0,n[et>>2]=B,(B|0)>0)q=Q;else break}else M=Xt;if((B|0)<0){f=((k+25|0)/9|0)+1|0,Qe=(at|0)==102;do{if(Me=0-B|0,Me=(Me|0)<9?Me:9,M>>>0>>0){O=(1<>>Me,se=0,B=M;do qe=n[B>>2]|0,n[B>>2]=(qe>>>Me)+se,se=je(qe&O,q)|0,B=B+4|0;while(B>>>0>>0);B=(n[M>>2]|0)==0?M+4|0:M,se?(n[Q>>2]=se,M=B,B=Q+4|0):(M=B,B=Q)}else M=(n[M>>2]|0)==0?M+4|0:M,B=Q;Q=Qe?Xt:M,Q=(B-Q>>2|0)>(f|0)?Q+(f<<2)|0:B,B=(n[et>>2]|0)+Me|0,n[et>>2]=B}while((B|0)<0);B=M,f=Q}else B=M,f=Q;if(qe=Xt,B>>>0>>0){if(Q=(qe-B>>2)*9|0,O=n[B>>2]|0,O>>>0>=10){M=10;do M=M*10|0,Q=Q+1|0;while(O>>>0>=M>>>0)}}else Q=0;if(Qe=(at|0)==103,Xe=(k|0)!=0,M=k-((at|0)!=102?Q:0)+((Xe&Qe)<<31>>31)|0,(M|0)<(((f-qe>>2)*9|0)+-9|0)){if(M=M+9216|0,Me=Xt+4+(((M|0)/9|0)+-1024<<2)|0,M=((M|0)%9|0)+1|0,(M|0)<9){O=10;do O=O*10|0,M=M+1|0;while((M|0)!=9)}else O=10;if(q=n[Me>>2]|0,se=(q>>>0)%(O>>>0)|0,M=(Me+4|0)==(f|0),M&(se|0)==0)M=Me;else if(Ge=(((q>>>0)/(O>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,Ue=(O|0)/2|0,l=se>>>0>>0?.5:M&(se|0)==(Ue|0)?1:1.5,or&&(Ue=(o[Mr>>0]|0)==45,l=Ue?-l:l,Ge=Ue?-Ge:Ge),M=q-se|0,n[Me>>2]=M,Ge+l!=Ge){if(Ue=M+O|0,n[Me>>2]=Ue,Ue>>>0>999999999)for(Q=Me;M=Q+-4|0,n[Q>>2]=0,M>>>0>>0&&(B=B+-4|0,n[B>>2]=0),Ue=(n[M>>2]|0)+1|0,n[M>>2]=Ue,Ue>>>0>999999999;)Q=M;else M=Me;if(Q=(qe-B>>2)*9|0,q=n[B>>2]|0,q>>>0>=10){O=10;do O=O*10|0,Q=Q+1|0;while(q>>>0>=O>>>0)}}else M=Me;M=M+4|0,M=f>>>0>M>>>0?M:f,Ue=B}else M=f,Ue=B;for(at=M;;){if(at>>>0<=Ue>>>0){et=0;break}if(B=at+-4|0,!(n[B>>2]|0))at=B;else{et=1;break}}f=0-Q|0;do if(Qe)if(B=((Xe^1)&1)+k|0,(B|0)>(Q|0)&(Q|0)>-5?(O=m+-1|0,k=B+-1-Q|0):(O=m+-2|0,k=B+-1|0),B=d&8,B)Me=B;else{if(et&&(Nt=n[at+-4>>2]|0,(Nt|0)!=0))if((Nt>>>0)%10|0)M=0;else{M=0,B=10;do B=B*10|0,M=M+1|0;while(!((Nt>>>0)%(B>>>0)|0|0))}else M=9;if(B=((at-qe>>2)*9|0)+-9|0,(O|32|0)==102){Me=B-M|0,Me=(Me|0)>0?Me:0,k=(k|0)<(Me|0)?k:Me,Me=0;break}else{Me=B+Q-M|0,Me=(Me|0)>0?Me:0,k=(k|0)<(Me|0)?k:Me,Me=0;break}}else O=m,Me=d&8;while(0);if(Qe=k|Me,q=(Qe|0)!=0&1,se=(O|32|0)==102,se)Xe=0,B=(Q|0)>0?Q:0;else{if(B=(Q|0)<0?f:Q,B=Vm(B,((B|0)<0)<<31>>31,Pr)|0,M=Pr,(M-B|0)<2)do B=B+-1|0,o[B>>0]=48;while((M-B|0)<2);o[B+-1>>0]=(Q>>31&2)+43,B=B+-2|0,o[B>>0]=O,Xe=B,B=M-B|0}if(B=or+1+k+q+B|0,Bs(s,32,c,B,d),ss(s,Mr,or),Bs(s,48,c,B,d^65536),se){O=Ue>>>0>Xt>>>0?Xt:Ue,Me=ir+9|0,q=Me,se=ir+8|0,M=O;do{if(Q=Vm(n[M>>2]|0,0,Me)|0,(M|0)==(O|0))(Q|0)==(Me|0)&&(o[se>>0]=48,Q=se);else if(Q>>>0>ir>>>0){Jm(ir|0,48,Q-Lr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}ss(s,Q,q-Q|0),M=M+4|0}while(M>>>0<=Xt>>>0);if(Qe|0&&ss(s,5710,1),M>>>0>>0&(k|0)>0)for(;;){if(Q=Vm(n[M>>2]|0,0,Me)|0,Q>>>0>ir>>>0){Jm(ir|0,48,Q-Lr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}if(ss(s,Q,(k|0)<9?k:9),M=M+4|0,Q=k+-9|0,M>>>0>>0&(k|0)>9)k=Q;else{k=Q;break}}Bs(s,48,k+9|0,9,0)}else{if(Qe=et?at:Ue+4|0,(k|0)>-1){et=ir+9|0,Me=(Me|0)==0,f=et,q=0-Lr|0,se=ir+8|0,O=Ue;do{Q=Vm(n[O>>2]|0,0,et)|0,(Q|0)==(et|0)&&(o[se>>0]=48,Q=se);do if((O|0)==(Ue|0)){if(M=Q+1|0,ss(s,Q,1),Me&(k|0)<1){Q=M;break}ss(s,5710,1),Q=M}else{if(Q>>>0<=ir>>>0)break;Jm(ir|0,48,Q+q|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}while(0);Lr=f-Q|0,ss(s,Q,(k|0)>(Lr|0)?Lr:k),k=k-Lr|0,O=O+4|0}while(O>>>0>>0&(k|0)>-1)}Bs(s,48,k+18|0,18,0),ss(s,Xe,Pr-Xe|0)}Bs(s,32,c,B,d^8192)}else ir=(m&32|0)!=0,B=or+3|0,Bs(s,32,c,B,d&-65537),ss(s,Mr,or),ss(s,l!=l|!1?ir?5686:5690:ir?5678:5682,3),Bs(s,32,c,B,d^8192);while(0);return E=bn,((B|0)<(c|0)?c:B)|0}function u7(s){s=+s;var l=0;return C[v>>3]=s,l=n[v>>2]|0,De=n[v+4>>2]|0,l|0}function jUe(s,l){return s=+s,l=l|0,+ +A7(s,l)}function A7(s,l){s=+s,l=l|0;var c=0,f=0,d=0;switch(C[v>>3]=s,c=n[v>>2]|0,f=n[v+4>>2]|0,d=mD(c|0,f|0,52)|0,d&2047){case 0:{s!=0?(s=+A7(s*18446744073709552e3,l),c=(n[l>>2]|0)+-64|0):c=0,n[l>>2]=c;break}case 2047:break;default:n[l>>2]=(d&2047)+-1022,n[v>>2]=c,n[v+4>>2]=f&-2146435073|1071644672,s=+C[v>>3]}return+s}function qUe(s,l,c){s=s|0,l=l|0,c=c|0;do if(s){if(l>>>0<128){o[s>>0]=l,s=1;break}if(!(n[n[(GUe()|0)+188>>2]>>2]|0))if((l&-128|0)==57216){o[s>>0]=l,s=1;break}else{n[(Km()|0)>>2]=84,s=-1;break}if(l>>>0<2048){o[s>>0]=l>>>6|192,o[s+1>>0]=l&63|128,s=2;break}if(l>>>0<55296|(l&-8192|0)==57344){o[s>>0]=l>>>12|224,o[s+1>>0]=l>>>6&63|128,o[s+2>>0]=l&63|128,s=3;break}if((l+-65536|0)>>>0<1048576){o[s>>0]=l>>>18|240,o[s+1>>0]=l>>>12&63|128,o[s+2>>0]=l>>>6&63|128,o[s+3>>0]=l&63|128,s=4;break}else{n[(Km()|0)>>2]=84,s=-1;break}}else s=1;while(0);return s|0}function GUe(){return PR()|0}function YUe(){return PR()|0}function WUe(s,l){s=s|0,l=l|0;var c=0,f=0;for(f=0;;){if((u[5712+f>>0]|0)==(s|0)){s=2;break}if(c=f+1|0,(c|0)==87){c=5800,f=87,s=5;break}else f=c}if((s|0)==2&&(f?(c=5800,s=5):c=5800),(s|0)==5)for(;;){do s=c,c=c+1|0;while((o[s>>0]|0)!=0);if(f=f+-1|0,f)s=5;else break}return KUe(c,n[l+20>>2]|0)|0}function KUe(s,l){return s=s|0,l=l|0,VUe(s,l)|0}function VUe(s,l){return s=s|0,l=l|0,l?l=zUe(n[l>>2]|0,n[l+4>>2]|0,s)|0:l=0,(l|0?l:s)|0}function zUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0;se=(n[s>>2]|0)+1794895138|0,m=Qg(n[s+8>>2]|0,se)|0,f=Qg(n[s+12>>2]|0,se)|0,d=Qg(n[s+16>>2]|0,se)|0;e:do if(m>>>0>>2>>>0&&(q=l-(m<<2)|0,f>>>0>>0&d>>>0>>0)&&((d|f)&3|0)==0){for(q=f>>>2,O=d>>>2,M=0;;){if(k=m>>>1,Q=M+k|0,B=Q<<1,d=B+q|0,f=Qg(n[s+(d<<2)>>2]|0,se)|0,d=Qg(n[s+(d+1<<2)>>2]|0,se)|0,!(d>>>0>>0&f>>>0<(l-d|0)>>>0)){f=0;break e}if(o[s+(d+f)>>0]|0){f=0;break e}if(f=s7(c,s+d|0)|0,!f)break;if(f=(f|0)<0,(m|0)==1){f=0;break e}else M=f?M:Q,m=f?k:m-k|0}f=B+O|0,d=Qg(n[s+(f<<2)>>2]|0,se)|0,f=Qg(n[s+(f+1<<2)>>2]|0,se)|0,f>>>0>>0&d>>>0<(l-f|0)>>>0?f=(o[s+(f+d)>>0]|0)==0?s+f|0:0:f=0}else f=0;while(0);return f|0}function Qg(s,l){s=s|0,l=l|0;var c=0;return c=E7(s|0)|0,((l|0)==0?s:c)|0}function JUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=c+16|0,d=n[f>>2]|0,d?m=5:XUe(c)|0?f=0:(d=n[f>>2]|0,m=5);e:do if((m|0)==5){if(k=c+20|0,B=n[k>>2]|0,f=B,(d-B|0)>>>0>>0){f=ED[n[c+36>>2]&7](c,s,l)|0;break}t:do if((o[c+75>>0]|0)>-1){for(B=l;;){if(!B){m=0,d=s;break t}if(d=B+-1|0,(o[s+d>>0]|0)==10)break;B=d}if(f=ED[n[c+36>>2]&7](c,s,B)|0,f>>>0>>0)break e;m=B,d=s+B|0,l=l-B|0,f=n[k>>2]|0}else m=0,d=s;while(0);Dr(f|0,d|0,l|0)|0,n[k>>2]=(n[k>>2]|0)+l,f=m+l|0}while(0);return f|0}function XUe(s){s=s|0;var l=0,c=0;return l=s+74|0,c=o[l>>0]|0,o[l>>0]=c+255|c,l=n[s>>2]|0,l&8?(n[s>>2]=l|32,s=-1):(n[s+8>>2]=0,n[s+4>>2]=0,c=n[s+44>>2]|0,n[s+28>>2]=c,n[s+20>>2]=c,n[s+16>>2]=c+(n[s+48>>2]|0),s=0),s|0}function _n(s,l){s=y(s),l=y(l);var c=0,f=0;c=f7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=f7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?l:s;break}else{s=s>2]=s,n[v>>2]|0|0}function Fg(s,l){s=y(s),l=y(l);var c=0,f=0;c=p7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=p7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?s:l;break}else{s=s>2]=s,n[v>>2]|0|0}function xR(s,l){s=y(s),l=y(l);var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;m=(h[v>>2]=s,n[v>>2]|0),k=(h[v>>2]=l,n[v>>2]|0),c=m>>>23&255,B=k>>>23&255,Q=m&-2147483648,d=k<<1;e:do if((d|0)!=0&&!((c|0)==255|((ZUe(l)|0)&2147483647)>>>0>2139095040)){if(f=m<<1,f>>>0<=d>>>0)return l=y(s*y(0)),y((f|0)==(d|0)?l:s);if(c)f=m&8388607|8388608;else{if(c=m<<9,(c|0)>-1){f=c,c=0;do c=c+-1|0,f=f<<1;while((f|0)>-1)}else c=0;f=m<<1-c}if(B)k=k&8388607|8388608;else{if(m=k<<9,(m|0)>-1){d=0;do d=d+-1|0,m=m<<1;while((m|0)>-1)}else d=0;B=d,k=k<<1-d}d=f-k|0,m=(d|0)>-1;t:do if((c|0)>(B|0)){for(;;){if(m)if(d)f=d;else break;if(f=f<<1,c=c+-1|0,d=f-k|0,m=(d|0)>-1,(c|0)<=(B|0))break t}l=y(s*y(0));break e}while(0);if(m)if(d)f=d;else{l=y(s*y(0));break}if(f>>>0<8388608)do f=f<<1,c=c+-1|0;while(f>>>0<8388608);(c|0)>0?c=f+-8388608|c<<23:c=f>>>(1-c|0),l=(n[v>>2]=c|Q,y(h[v>>2]))}else M=3;while(0);return(M|0)==3&&(l=y(s*l),l=y(l/l)),y(l)}function ZUe(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function $Ue(s,l){return s=s|0,l=l|0,o7(n[582]|0,s,l)|0}function Jr(s){s=s|0,Rt()}function zm(s){s=s|0}function e3e(s,l){return s=s|0,l=l|0,0}function t3e(s){return s=s|0,(h7(s+4|0)|0)==-1?(ef[n[(n[s>>2]|0)+8>>2]&127](s),s=1):s=0,s|0}function h7(s){s=s|0;var l=0;return l=n[s>>2]|0,n[s>>2]=l+-1,l+-1|0}function xp(s){s=s|0,t3e(s)|0&&r3e(s)}function r3e(s){s=s|0;var l=0;l=s+8|0,(n[l>>2]|0)!=0&&(h7(l)|0)!=-1||ef[n[(n[s>>2]|0)+16>>2]&127](s)}function Kt(s){s=s|0;var l=0;for(l=(s|0)==0?1:s;s=pD(l)|0,!(s|0);){if(s=i3e()|0,!s){s=0;break}b7[s&0]()}return s|0}function g7(s){return s=s|0,Kt(s)|0}function gt(s){s=s|0,hD(s)}function n3e(s){s=s|0,(o[s+11>>0]|0)<0&>(n[s>>2]|0)}function i3e(){var s=0;return s=n[2923]|0,n[2923]=s+0,s|0}function s3e(){}function dD(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,f=l-f-(c>>>0>s>>>0|0)>>>0,De=f,s-c>>>0|0|0}function bR(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,c=s+c>>>0,De=l+f+(c>>>0>>0|0)>>>0,c|0|0}function Jm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(m=s+c|0,l=l&255,(c|0)>=67){for(;s&3;)o[s>>0]=l,s=s+1|0;for(f=m&-4|0,d=f-64|0,B=l|l<<8|l<<16|l<<24;(s|0)<=(d|0);)n[s>>2]=B,n[s+4>>2]=B,n[s+8>>2]=B,n[s+12>>2]=B,n[s+16>>2]=B,n[s+20>>2]=B,n[s+24>>2]=B,n[s+28>>2]=B,n[s+32>>2]=B,n[s+36>>2]=B,n[s+40>>2]=B,n[s+44>>2]=B,n[s+48>>2]=B,n[s+52>>2]=B,n[s+56>>2]=B,n[s+60>>2]=B,s=s+64|0;for(;(s|0)<(f|0);)n[s>>2]=B,s=s+4|0}for(;(s|0)<(m|0);)o[s>>0]=l,s=s+1|0;return m-c|0}function d7(s,l,c){return s=s|0,l=l|0,c=c|0,(c|0)<32?(De=l<>>32-c,s<>>c,s>>>c|(l&(1<>>c-32|0)}function Dr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;if((c|0)>=8192)return Ac(s|0,l|0,c|0)|0;if(m=s|0,d=s+c|0,(s&3)==(l&3)){for(;s&3;){if(!c)return m|0;o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0,c=c-1|0}for(c=d&-4|0,f=c-64|0;(s|0)<=(f|0);)n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2],n[s+16>>2]=n[l+16>>2],n[s+20>>2]=n[l+20>>2],n[s+24>>2]=n[l+24>>2],n[s+28>>2]=n[l+28>>2],n[s+32>>2]=n[l+32>>2],n[s+36>>2]=n[l+36>>2],n[s+40>>2]=n[l+40>>2],n[s+44>>2]=n[l+44>>2],n[s+48>>2]=n[l+48>>2],n[s+52>>2]=n[l+52>>2],n[s+56>>2]=n[l+56>>2],n[s+60>>2]=n[l+60>>2],s=s+64|0,l=l+64|0;for(;(s|0)<(c|0);)n[s>>2]=n[l>>2],s=s+4|0,l=l+4|0}else for(c=d-4|0;(s|0)<(c|0);)o[s>>0]=o[l>>0]|0,o[s+1>>0]=o[l+1>>0]|0,o[s+2>>0]=o[l+2>>0]|0,o[s+3>>0]=o[l+3>>0]|0,s=s+4|0,l=l+4|0;for(;(s|0)<(d|0);)o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0;return m|0}function m7(s){s=s|0;var l=0;return l=o[N+(s&255)>>0]|0,(l|0)<8?l|0:(l=o[N+(s>>8&255)>>0]|0,(l|0)<8?l+8|0:(l=o[N+(s>>16&255)>>0]|0,(l|0)<8?l+16|0:(o[N+(s>>>24)>>0]|0)+24|0))}function y7(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,q=0,se=0,Ge=0,Me=0;if(O=s,Q=l,M=Q,B=c,se=f,k=se,!M)return m=(d|0)!=0,k?m?(n[d>>2]=s|0,n[d+4>>2]=l&0,se=0,d=0,De=se,d|0):(se=0,d=0,De=se,d|0):(m&&(n[d>>2]=(O>>>0)%(B>>>0),n[d+4>>2]=0),se=0,d=(O>>>0)/(B>>>0)>>>0,De=se,d|0);m=(k|0)==0;do if(B){if(!m){if(m=(S(k|0)|0)-(S(M|0)|0)|0,m>>>0<=31){q=m+1|0,k=31-m|0,l=m-31>>31,B=q,s=O>>>(q>>>0)&l|M<>>(q>>>0)&l,m=0,k=O<>2]=s|0,n[d+4>>2]=Q|l&0,se=0,d=0,De=se,d|0):(se=0,d=0,De=se,d|0)}if(m=B-1|0,m&B|0){k=(S(B|0)|0)+33-(S(M|0)|0)|0,Me=64-k|0,q=32-k|0,Q=q>>31,Ge=k-32|0,l=Ge>>31,B=k,s=q-1>>31&M>>>(Ge>>>0)|(M<>>(k>>>0))&l,l=l&M>>>(k>>>0),m=O<>>(Ge>>>0))&Q|O<>31;break}return d|0&&(n[d>>2]=m&O,n[d+4>>2]=0),(B|0)==1?(Ge=Q|l&0,Me=s|0|0,De=Ge,Me|0):(Me=m7(B|0)|0,Ge=M>>>(Me>>>0)|0,Me=M<<32-Me|O>>>(Me>>>0)|0,De=Ge,Me|0)}else{if(m)return d|0&&(n[d>>2]=(M>>>0)%(B>>>0),n[d+4>>2]=0),Ge=0,Me=(M>>>0)/(B>>>0)>>>0,De=Ge,Me|0;if(!O)return d|0&&(n[d>>2]=0,n[d+4>>2]=(M>>>0)%(k>>>0)),Ge=0,Me=(M>>>0)/(k>>>0)>>>0,De=Ge,Me|0;if(m=k-1|0,!(m&k))return d|0&&(n[d>>2]=s|0,n[d+4>>2]=m&M|l&0),Ge=0,Me=M>>>((m7(k|0)|0)>>>0),De=Ge,Me|0;if(m=(S(k|0)|0)-(S(M|0)|0)|0,m>>>0<=30){l=m+1|0,k=31-m|0,B=l,s=M<>>(l>>>0),l=M>>>(l>>>0),m=0,k=O<>2]=s|0,n[d+4>>2]=Q|l&0,Ge=0,Me=0,De=Ge,Me|0):(Ge=0,Me=0,De=Ge,Me|0)}while(0);if(!B)M=k,Q=0,k=0;else{q=c|0|0,O=se|f&0,M=bR(q|0,O|0,-1,-1)|0,c=De,Q=k,k=0;do f=Q,Q=m>>>31|Q<<1,m=k|m<<1,f=s<<1|f>>>31|0,se=s>>>31|l<<1|0,dD(M|0,c|0,f|0,se|0)|0,Me=De,Ge=Me>>31|((Me|0)<0?-1:0)<<1,k=Ge&1,s=dD(f|0,se|0,Ge&q|0,(((Me|0)<0?-1:0)>>31|((Me|0)<0?-1:0)<<1)&O|0)|0,l=De,B=B-1|0;while((B|0)!=0);M=Q,Q=0}return B=0,d|0&&(n[d>>2]=s,n[d+4>>2]=l),Ge=(m|0)>>>31|(M|B)<<1|(B<<1|m>>>31)&0|Q,Me=(m<<1|0>>>31)&-2|k,De=Ge,Me|0}function kR(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,y7(s,l,c,f,0)|0}function bp(s){s=s|0;var l=0,c=0;return c=s+15&-16|0,l=n[I>>2]|0,s=l+c|0,(c|0)>0&(s|0)<(l|0)|(s|0)<0?(ie()|0,vA(12),-1):(n[I>>2]=s,(s|0)>(Z()|0)&&(X()|0)==0?(n[I>>2]=l,vA(12),-1):l|0)}function Ow(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if((l|0)<(s|0)&(s|0)<(l+c|0)){for(f=s,l=l+c|0,s=s+c|0;(c|0)>0;)s=s-1|0,l=l-1|0,c=c-1|0,o[s>>0]=o[l>>0]|0;s=f}else Dr(s,l,c)|0;return s|0}function QR(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;return m=E,E=E+16|0,d=m|0,y7(s,l,c,f,d)|0,E=m,De=n[d+4>>2]|0,n[d>>2]|0|0}function E7(s){return s=s|0,(s&255)<<24|(s>>8&255)<<16|(s>>16&255)<<8|s>>>24|0}function o3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,C7[s&1](l|0,c|0,f|0,d|0,m|0)}function a3e(s,l,c){s=s|0,l=l|0,c=y(c),w7[s&1](l|0,y(c))}function l3e(s,l,c){s=s|0,l=l|0,c=+c,I7[s&31](l|0,+c)}function c3e(s,l,c,f){return s=s|0,l=l|0,c=y(c),f=y(f),y(B7[s&0](l|0,y(c),y(f)))}function u3e(s,l){s=s|0,l=l|0,ef[s&127](l|0)}function A3e(s,l,c){s=s|0,l=l|0,c=c|0,tf[s&31](l|0,c|0)}function f3e(s,l){return s=s|0,l=l|0,Tg[s&31](l|0)|0}function p3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,v7[s&1](l|0,+c,+f,d|0)}function h3e(s,l,c,f){s=s|0,l=l|0,c=+c,f=+f,V3e[s&1](l|0,+c,+f)}function g3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,ED[s&7](l|0,c|0,f|0)|0}function d3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,+z3e[s&1](l|0,c|0,f|0)}function m3e(s,l){return s=s|0,l=l|0,+D7[s&15](l|0)}function y3e(s,l,c){return s=s|0,l=l|0,c=+c,J3e[s&1](l|0,+c)|0}function E3e(s,l,c){return s=s|0,l=l|0,c=c|0,RR[s&15](l|0,c|0)|0}function C3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=+f,d=+d,m=m|0,X3e[s&1](l|0,c|0,+f,+d,m|0)}function w3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,Z3e[s&1](l|0,c|0,f|0,d|0,m|0,B|0)}function I3e(s,l,c){return s=s|0,l=l|0,c=c|0,+P7[s&7](l|0,c|0)}function B3e(s){return s=s|0,CD[s&7]()|0}function v3e(s,l,c,f,d,m){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,S7[s&1](l|0,c|0,f|0,d|0,m|0)|0}function D3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=+d,$3e[s&1](l|0,c|0,f|0,+d)}function P3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,x7[s&1](l|0,c|0,y(f),d|0,y(m),B|0)}function S3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,_w[s&15](l|0,c|0,f|0)}function x3e(s){s=s|0,b7[s&0]()}function b3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,k7[s&15](l|0,c|0,+f)}function k3e(s,l,c){return s=s|0,l=+l,c=+c,e_e[s&1](+l,+c)|0}function Q3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,TR[s&15](l|0,c|0,f|0,d|0)}function F3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,R(0)}function R3e(s,l){s=s|0,l=y(l),R(1)}function ma(s,l){s=s|0,l=+l,R(2)}function T3e(s,l,c){return s=s|0,l=y(l),c=y(c),R(3),Ze}function Er(s){s=s|0,R(4)}function Mw(s,l){s=s|0,l=l|0,R(5)}function za(s){return s=s|0,R(6),0}function L3e(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,R(7)}function N3e(s,l,c){s=s|0,l=+l,c=+c,R(8)}function O3e(s,l,c){return s=s|0,l=l|0,c=c|0,R(9),0}function M3e(s,l,c){return s=s|0,l=l|0,c=c|0,R(10),0}function Rg(s){return s=s|0,R(11),0}function U3e(s,l){return s=s|0,l=+l,R(12),0}function Uw(s,l){return s=s|0,l=l|0,R(13),0}function _3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,R(14)}function H3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,R(15)}function FR(s,l){return s=s|0,l=l|0,R(16),0}function j3e(){return R(17),0}function q3e(s,l,c,f,d){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,R(18),0}function G3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,R(19)}function Y3e(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0,R(20)}function yD(s,l,c){s=s|0,l=l|0,c=c|0,R(21)}function W3e(){R(22)}function Xm(s,l,c){s=s|0,l=l|0,c=+c,R(23)}function K3e(s,l){return s=+s,l=+l,R(24),0}function Zm(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,R(25)}var C7=[F3e,qNe],w7=[R3e,fo],I7=[ma,xw,bw,EF,CF,Dl,kw,wF,Hm,xu,Fw,IF,$v,WA,eD,jm,tD,rD,qm,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma],B7=[T3e],ef=[Er,zm,BDe,vDe,DDe,ebe,tbe,rbe,yLe,ELe,CLe,kNe,QNe,FNe,Z4e,$4e,eUe,hs,Vv,_m,YA,Qw,Eve,Cve,pDe,RDe,YDe,cPe,DPe,jPe,sSe,CSe,LSe,XSe,pxe,bxe,Yxe,Ebe,Lbe,Xbe,pke,bke,Yke,uQe,DQe,UQe,tFe,Sc,FFe,VFe,pRe,QRe,WRe,pTe,BTe,PTe,qTe,WTe,cLe,ILe,DLe,jLe,oNe,o5,HOe,yMe,RMe,VMe,d4e,Q4e,j4e,Y4e,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er],tf=[Mw,fF,pF,Sw,Su,hF,gF,wp,dF,mF,yF,Zv,KA,Ve,At,Wt,vr,Sn,Fr,vF,ove,bve,hQe,xQe,LRe,GOe,hNe,G9,Mw,Mw,Mw,Mw],Tg=[za,bUe,AF,D,Ae,ve,vt,wt,bt,_r,di,po,nve,ive,wve,iFe,JRe,YLe,VOe,Wa,za,za,za,za,za,za,za,za,za,za,za,za],v7=[L3e,Ive],V3e=[N3e,fLe],ED=[O3e,i7,kUe,RUe,WPe,Bbe,NFe,ZMe],z3e=[M3e,mxe],D7=[Rg,Yo,rt,xn,Bve,vve,Dve,Pve,Sve,xve,Rg,Rg,Rg,Rg,Rg,Rg],J3e=[U3e,CTe],RR=[Uw,e3e,sve,mDe,pPe,lSe,BSe,zxe,Ube,qQe,Wv,OMe,Uw,Uw,Uw,Uw],X3e=[_3e,zDe],Z3e=[H3e,C4e],P7=[FR,ai,kve,Qve,Fve,Rxe,FR,FR],CD=[j3e,Rve,Dw,ga,kTe,JTe,bLe,z4e],S7=[q3e,Ew],$3e=[G3e,mke],x7=[Y3e,ave],_w=[yD,T,is,en,ho,bPe,MSe,Rke,zke,Um,fOe,IMe,L4e,yD,yD,yD],b7=[W3e],k7=[Xm,zv,Jv,Xv,GA,nD,BF,P,tke,ZFe,dTe,Xm,Xm,Xm,Xm,Xm],e_e=[K3e,dLe],TR=[Zm,txe,fFe,mRe,sTe,NTe,rLe,NLe,ANe,eMe,oUe,Zm,Zm,Zm,Zm,Zm];return{_llvm_bswap_i32:E7,dynCall_idd:k3e,dynCall_i:B3e,_i64Subtract:dD,___udivdi3:kR,dynCall_vif:a3e,setThrew:hu,dynCall_viii:S3e,_bitshift64Lshr:mD,_bitshift64Shl:d7,dynCall_vi:u3e,dynCall_viiddi:C3e,dynCall_diii:d3e,dynCall_iii:E3e,_memset:Jm,_sbrk:bp,_memcpy:Dr,__GLOBAL__sub_I_Yoga_cpp:Mm,dynCall_vii:A3e,___uremdi3:QR,dynCall_vid:l3e,stackAlloc:lo,_nbind_init:mUe,getTempRet0:Ua,dynCall_di:m3e,dynCall_iid:y3e,setTempRet0:xA,_i64Add:bR,dynCall_fiff:c3e,dynCall_iiii:g3e,_emscripten_get_global_libc:xUe,dynCall_viid:b3e,dynCall_viiid:D3e,dynCall_viififi:P3e,dynCall_ii:f3e,__GLOBAL__sub_I_Binding_cc:ROe,dynCall_viiii:Q3e,dynCall_iiiiii:v3e,stackSave:gc,dynCall_viiiii:o3e,__GLOBAL__sub_I_nbind_cc:Tve,dynCall_vidd:h3e,_free:hD,runPostSets:s3e,dynCall_viiiiii:w3e,establishStackSpace:ji,_memmove:Ow,stackRestore:pu,_malloc:pD,__GLOBAL__sub_I_common_cc:$Le,dynCall_viddi:p3e,dynCall_dii:I3e,dynCall_v:x3e}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function t(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=t)},Module.callMain=Module.callMain=function t(e){e=e||[],ensureInitRuntime();var r=e.length+1;function o(){for(var p=0;p<4-1;p++)a.push(0)}var a=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];o();for(var n=0;n0||(preRun(),runDependencies>0)||Module.calledRun)return;function e(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(t),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),e()},1)):e()}Module.run=Module.run=run;function exit(t,e){e&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=t,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(t)),ENVIRONMENT_IS_NODE&&process.exit(t),Module.quit(t,new ExitStatus(t)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(t){Module.onAbort&&Module.onAbort(t),t!==void 0?(Module.print(t),Module.printErr(t),t=JSON.stringify(t)):t="",ABORT=!0,EXITSTATUS=1;var e=` -If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,r="abort("+t+") at "+stackTrace()+e;throw abortDecorators&&abortDecorators.forEach(function(o){r=o(r,t)}),r}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var om=_((yKt,NEe)=>{"use strict";var Gyt=TEe(),Yyt=LEe(),b6=!1,k6=null;Yyt({},function(t,e){if(!b6){if(b6=!0,t)throw t;k6=e}});if(!b6)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");NEe.exports=Gyt(k6.bind,k6.lib)});var F6=_((EKt,Q6)=>{"use strict";var OEe=t=>Number.isNaN(t)?!1:t>=4352&&(t<=4447||t===9001||t===9002||11904<=t&&t<=12871&&t!==12351||12880<=t&&t<=19903||19968<=t&&t<=42182||43360<=t&&t<=43388||44032<=t&&t<=55203||63744<=t&&t<=64255||65040<=t&&t<=65049||65072<=t&&t<=65131||65281<=t&&t<=65376||65504<=t&&t<=65510||110592<=t&&t<=110593||127488<=t&&t<=127569||131072<=t&&t<=262141);Q6.exports=OEe;Q6.exports.default=OEe});var UEe=_((CKt,MEe)=>{"use strict";MEe.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var Kk=_((wKt,R6)=>{"use strict";var Wyt=NP(),Kyt=F6(),Vyt=UEe(),_Ee=t=>{if(typeof t!="string"||t.length===0||(t=Wyt(t),t.length===0))return 0;t=t.replace(Vyt()," ");let e=0;for(let r=0;r=127&&o<=159||o>=768&&o<=879||(o>65535&&r++,e+=Kyt(o)?2:1)}return e};R6.exports=_Ee;R6.exports.default=_Ee});var L6=_((IKt,T6)=>{"use strict";var zyt=Kk(),HEe=t=>{let e=0;for(let r of t.split(` -`))e=Math.max(e,zyt(r));return e};T6.exports=HEe;T6.exports.default=HEe});var jEe=_(lB=>{"use strict";var Jyt=lB&&lB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(lB,"__esModule",{value:!0});var Xyt=Jyt(L6()),N6={};lB.default=t=>{if(t.length===0)return{width:0,height:0};if(N6[t])return N6[t];let e=Xyt.default(t),r=t.split(` -`).length;return N6[t]={width:e,height:r},{width:e,height:r}}});var qEe=_(cB=>{"use strict";var Zyt=cB&&cB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(cB,"__esModule",{value:!0});var dn=Zyt(om()),$yt=(t,e)=>{"position"in e&&t.setPositionType(e.position==="absolute"?dn.default.POSITION_TYPE_ABSOLUTE:dn.default.POSITION_TYPE_RELATIVE)},eEt=(t,e)=>{"marginLeft"in e&&t.setMargin(dn.default.EDGE_START,e.marginLeft||0),"marginRight"in e&&t.setMargin(dn.default.EDGE_END,e.marginRight||0),"marginTop"in e&&t.setMargin(dn.default.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&t.setMargin(dn.default.EDGE_BOTTOM,e.marginBottom||0)},tEt=(t,e)=>{"paddingLeft"in e&&t.setPadding(dn.default.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&t.setPadding(dn.default.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&t.setPadding(dn.default.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&t.setPadding(dn.default.EDGE_BOTTOM,e.paddingBottom||0)},rEt=(t,e)=>{var r;"flexGrow"in e&&t.setFlexGrow((r=e.flexGrow)!==null&&r!==void 0?r:0),"flexShrink"in e&&t.setFlexShrink(typeof e.flexShrink=="number"?e.flexShrink:1),"flexDirection"in e&&(e.flexDirection==="row"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in e&&(typeof e.flexBasis=="number"?t.setFlexBasis(e.flexBasis):typeof e.flexBasis=="string"?t.setFlexBasisPercent(Number.parseInt(e.flexBasis,10)):t.setFlexBasis(NaN)),"alignItems"in e&&((e.alignItems==="stretch"||!e.alignItems)&&t.setAlignItems(dn.default.ALIGN_STRETCH),e.alignItems==="flex-start"&&t.setAlignItems(dn.default.ALIGN_FLEX_START),e.alignItems==="center"&&t.setAlignItems(dn.default.ALIGN_CENTER),e.alignItems==="flex-end"&&t.setAlignItems(dn.default.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&t.setAlignSelf(dn.default.ALIGN_AUTO),e.alignSelf==="flex-start"&&t.setAlignSelf(dn.default.ALIGN_FLEX_START),e.alignSelf==="center"&&t.setAlignSelf(dn.default.ALIGN_CENTER),e.alignSelf==="flex-end"&&t.setAlignSelf(dn.default.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_START),e.justifyContent==="center"&&t.setJustifyContent(dn.default.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_AROUND))},nEt=(t,e)=>{var r,o;"width"in e&&(typeof e.width=="number"?t.setWidth(e.width):typeof e.width=="string"?t.setWidthPercent(Number.parseInt(e.width,10)):t.setWidthAuto()),"height"in e&&(typeof e.height=="number"?t.setHeight(e.height):typeof e.height=="string"?t.setHeightPercent(Number.parseInt(e.height,10)):t.setHeightAuto()),"minWidth"in e&&(typeof e.minWidth=="string"?t.setMinWidthPercent(Number.parseInt(e.minWidth,10)):t.setMinWidth((r=e.minWidth)!==null&&r!==void 0?r:0)),"minHeight"in e&&(typeof e.minHeight=="string"?t.setMinHeightPercent(Number.parseInt(e.minHeight,10)):t.setMinHeight((o=e.minHeight)!==null&&o!==void 0?o:0))},iEt=(t,e)=>{"display"in e&&t.setDisplay(e.display==="flex"?dn.default.DISPLAY_FLEX:dn.default.DISPLAY_NONE)},sEt=(t,e)=>{if("borderStyle"in e){let r=typeof e.borderStyle=="string"?1:0;t.setBorder(dn.default.EDGE_TOP,r),t.setBorder(dn.default.EDGE_BOTTOM,r),t.setBorder(dn.default.EDGE_LEFT,r),t.setBorder(dn.default.EDGE_RIGHT,r)}};cB.default=(t,e={})=>{$yt(t,e),eEt(t,e),tEt(t,e),rEt(t,e),nEt(t,e),iEt(t,e),sEt(t,e)}});var WEe=_((DKt,YEe)=>{"use strict";var uB=Kk(),oEt=NP(),aEt=BI(),M6=new Set(["\x1B","\x9B"]),lEt=39,GEe=t=>`${M6.values().next().value}[${t}m`,cEt=t=>t.split(" ").map(e=>uB(e)),O6=(t,e,r)=>{let o=[...e],a=!1,n=uB(oEt(t[t.length-1]));for(let[u,A]of o.entries()){let p=uB(A);if(n+p<=r?t[t.length-1]+=A:(t.push(A),n=0),M6.has(A))a=!0;else if(a&&A==="m"){a=!1;continue}a||(n+=p,n===r&&u0&&t.length>1&&(t[t.length-2]+=t.pop())},uEt=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(uB(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},AEt=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",a="",n,u=cEt(t),A=[""];for(let[p,h]of t.split(" ").entries()){r.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let C=uB(A[A.length-1]);if(p!==0&&(C>=e&&(r.wordWrap===!1||r.trim===!1)&&(A.push(""),C=0),(C>0||r.trim===!1)&&(A[A.length-1]+=" ",C++)),r.hard&&u[p]>e){let I=e-C,v=1+Math.floor((u[p]-I-1)/e);Math.floor((u[p]-1)/e)e&&C>0&&u[p]>0){if(r.wordWrap===!1&&Ce&&r.wordWrap===!1){O6(A,h,e);continue}A[A.length-1]+=h}r.trim!==!1&&(A=A.map(uEt)),o=A.join(` -`);for(let[p,h]of[...o].entries()){if(a+=h,M6.has(h)){let I=parseFloat(/\d[^m]*/.exec(o.slice(p,p+4)));n=I===lEt?null:I}let C=aEt.codes.get(Number(n));n&&C&&(o[p+1]===` -`?a+=GEe(C):h===` -`&&(a+=GEe(n)))}return a};YEe.exports=(t,e,r)=>String(t).normalize().replace(/\r\n/g,` -`).split(` -`).map(o=>AEt(o,e,r)).join(` -`)});var zEe=_((PKt,VEe)=>{"use strict";var KEe="[\uD800-\uDBFF][\uDC00-\uDFFF]",fEt=t=>t&&t.exact?new RegExp(`^${KEe}$`):new RegExp(KEe,"g");VEe.exports=fEt});var U6=_((SKt,$Ee)=>{"use strict";var pEt=F6(),hEt=zEe(),JEe=BI(),ZEe=["\x1B","\x9B"],Vk=t=>`${ZEe[0]}[${t}m`,XEe=(t,e,r)=>{let o=[];t=[...t];for(let a of t){let n=a;a.match(";")&&(a=a.split(";")[0][0]+"0");let u=JEe.codes.get(parseInt(a,10));if(u){let A=t.indexOf(u.toString());A>=0?t.splice(A,1):o.push(Vk(e?u:n))}else if(e){o.push(Vk(0));break}else o.push(Vk(n))}if(e&&(o=o.filter((a,n)=>o.indexOf(a)===n),r!==void 0)){let a=Vk(JEe.codes.get(parseInt(r,10)));o=o.reduce((n,u)=>u===a?[u,...n]:[...n,u],[])}return o.join("")};$Ee.exports=(t,e,r)=>{let o=[...t.normalize()],a=[];r=typeof r=="number"?r:o.length;let n=!1,u,A=0,p="";for(let[h,C]of o.entries()){let I=!1;if(ZEe.includes(C)){let v=/\d[^m]*/.exec(t.slice(h,h+18));u=v&&v.length>0?v[0]:void 0,Ae&&A<=r)p+=C;else if(A===e&&!n&&u!==void 0)p=XEe(a);else if(A>=r){p+=XEe(a,!0,u);break}}return p}});var tCe=_((xKt,eCe)=>{"use strict";var y0=U6(),gEt=Kk();function zk(t,e,r){if(t.charAt(e)===" ")return e;for(let o=1;o<=3;o++)if(r){if(t.charAt(e+o)===" ")return e+o}else if(t.charAt(e-o)===" ")return e-o;return e}eCe.exports=(t,e,r)=>{r={position:"end",preferTruncationOnSpace:!1,...r};let{position:o,space:a,preferTruncationOnSpace:n}=r,u="\u2026",A=1;if(typeof t!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof t}`);if(typeof e!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof e}`);if(e<1)return"";if(e===1)return u;let p=gEt(t);if(p<=e)return t;if(o==="start"){if(n){let h=zk(t,p-e+1,!0);return u+y0(t,h,p).trim()}return a===!0&&(u+=" ",A=2),u+y0(t,p-e+A,p)}if(o==="middle"){a===!0&&(u=" "+u+" ",A=3);let h=Math.floor(e/2);if(n){let C=zk(t,h),I=zk(t,p-(e-h)+1,!0);return y0(t,0,C)+u+y0(t,I,p).trim()}return y0(t,0,h)+u+y0(t,p-(e-h)+A,p)}if(o==="end"){if(n){let h=zk(t,e-1);return y0(t,0,h)+u}return a===!0&&(u=" "+u,A=2),y0(t,0,e-A)+u}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${o}`)}});var H6=_(AB=>{"use strict";var rCe=AB&&AB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(AB,"__esModule",{value:!0});var dEt=rCe(WEe()),mEt=rCe(tCe()),_6={};AB.default=(t,e,r)=>{let o=t+String(e)+String(r);if(_6[o])return _6[o];let a=t;if(r==="wrap"&&(a=dEt.default(t,e,{trim:!1,hard:!0})),r.startsWith("truncate")){let n="end";r==="truncate-middle"&&(n="middle"),r==="truncate-start"&&(n="start"),a=mEt.default(t,e,{position:n})}return _6[o]=a,a}});var q6=_(j6=>{"use strict";Object.defineProperty(j6,"__esModule",{value:!0});var nCe=t=>{let e="";if(t.childNodes.length>0)for(let r of t.childNodes){let o="";r.nodeName==="#text"?o=r.nodeValue:((r.nodeName==="ink-text"||r.nodeName==="ink-virtual-text")&&(o=nCe(r)),o.length>0&&typeof r.internal_transform=="function"&&(o=r.internal_transform(o))),e+=o}return e};j6.default=nCe});var G6=_(pi=>{"use strict";var fB=pi&&pi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pi,"__esModule",{value:!0});pi.setTextNodeValue=pi.createTextNode=pi.setStyle=pi.setAttribute=pi.removeChildNode=pi.insertBeforeNode=pi.appendChildNode=pi.createNode=pi.TEXT_NAME=void 0;var yEt=fB(om()),iCe=fB(jEe()),EEt=fB(qEe()),CEt=fB(H6()),wEt=fB(q6());pi.TEXT_NAME="#text";pi.createNode=t=>{var e;let r={nodeName:t,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:t==="ink-virtual-text"?void 0:yEt.default.Node.create()};return t==="ink-text"&&((e=r.yogaNode)===null||e===void 0||e.setMeasureFunc(IEt.bind(null,r))),r};pi.appendChildNode=(t,e)=>{var r;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t,t.childNodes.push(e),e.yogaNode&&((r=t.yogaNode)===null||r===void 0||r.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Jk(t)};pi.insertBeforeNode=(t,e,r)=>{var o,a;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t;let n=t.childNodes.indexOf(r);if(n>=0){t.childNodes.splice(n,0,e),e.yogaNode&&((o=t.yogaNode)===null||o===void 0||o.insertChild(e.yogaNode,n));return}t.childNodes.push(e),e.yogaNode&&((a=t.yogaNode)===null||a===void 0||a.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Jk(t)};pi.removeChildNode=(t,e)=>{var r,o;e.yogaNode&&((o=(r=e.parentNode)===null||r===void 0?void 0:r.yogaNode)===null||o===void 0||o.removeChild(e.yogaNode)),e.parentNode=null;let a=t.childNodes.indexOf(e);a>=0&&t.childNodes.splice(a,1),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Jk(t)};pi.setAttribute=(t,e,r)=>{t.attributes[e]=r};pi.setStyle=(t,e)=>{t.style=e,t.yogaNode&&EEt.default(t.yogaNode,e)};pi.createTextNode=t=>{let e={nodeName:"#text",nodeValue:t,yogaNode:void 0,parentNode:null,style:{}};return pi.setTextNodeValue(e,t),e};var IEt=function(t,e){var r,o;let a=t.nodeName==="#text"?t.nodeValue:wEt.default(t),n=iCe.default(a);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let u=(o=(r=t.style)===null||r===void 0?void 0:r.textWrap)!==null&&o!==void 0?o:"wrap",A=CEt.default(a,e,u);return iCe.default(A)},sCe=t=>{var e;if(!(!t||!t.parentNode))return(e=t.yogaNode)!==null&&e!==void 0?e:sCe(t.parentNode)},Jk=t=>{let e=sCe(t);e?.markDirty()};pi.setTextNodeValue=(t,e)=>{typeof e!="string"&&(e=String(e)),t.nodeValue=e,Jk(t)}});var uCe=_(pB=>{"use strict";var cCe=pB&&pB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pB,"__esModule",{value:!0});var oCe=P6(),BEt=cCe(xEe()),aCe=cCe(om()),Oo=G6(),lCe=t=>{t?.unsetMeasureFunc(),t?.freeRecursive()};pB.default=BEt.default({schedulePassiveEffects:oCe.unstable_scheduleCallback,cancelPassiveEffects:oCe.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:t=>{if(t.isStaticDirty){t.isStaticDirty=!1,typeof t.onImmediateRender=="function"&&t.onImmediateRender();return}typeof t.onRender=="function"&&t.onRender()},getChildHostContext:(t,e)=>{let r=t.isInsideText,o=e==="ink-text"||e==="ink-virtual-text";return r===o?t:{isInsideText:o}},shouldSetTextContent:()=>!1,createInstance:(t,e,r,o)=>{if(o.isInsideText&&t==="ink-box")throw new Error(" can\u2019t be nested inside component");let a=t==="ink-text"&&o.isInsideText?"ink-virtual-text":t,n=Oo.createNode(a);for(let[u,A]of Object.entries(e))u!=="children"&&(u==="style"?Oo.setStyle(n,A):u==="internal_transform"?n.internal_transform=A:u==="internal_static"?n.internal_static=!0:Oo.setAttribute(n,u,A));return n},createTextInstance:(t,e,r)=>{if(!r.isInsideText)throw new Error(`Text string "${t}" must be rendered inside component`);return Oo.createTextNode(t)},resetTextContent:()=>{},hideTextInstance:t=>{Oo.setTextNodeValue(t,"")},unhideTextInstance:(t,e)=>{Oo.setTextNodeValue(t,e)},getPublicInstance:t=>t,hideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(aCe.default.DISPLAY_NONE)},unhideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(aCe.default.DISPLAY_FLEX)},appendInitialChild:Oo.appendChildNode,appendChild:Oo.appendChildNode,insertBefore:Oo.insertBeforeNode,finalizeInitialChildren:(t,e,r,o)=>(t.internal_static&&(o.isStaticDirty=!0,o.staticNode=t),!1),supportsMutation:!0,appendChildToContainer:Oo.appendChildNode,insertInContainerBefore:Oo.insertBeforeNode,removeChildFromContainer:(t,e)=>{Oo.removeChildNode(t,e),lCe(e.yogaNode)},prepareUpdate:(t,e,r,o,a)=>{t.internal_static&&(a.isStaticDirty=!0);let n={},u=Object.keys(o);for(let A of u)if(o[A]!==r[A]){if(A==="style"&&typeof o.style=="object"&&typeof r.style=="object"){let h=o.style,C=r.style,I=Object.keys(h);for(let v of I){if(v==="borderStyle"||v==="borderColor"){if(typeof n.style!="object"){let b={};n.style=b}n.style.borderStyle=h.borderStyle,n.style.borderColor=h.borderColor}if(h[v]!==C[v]){if(typeof n.style!="object"){let b={};n.style=b}n.style[v]=h[v]}}continue}n[A]=o[A]}return n},commitUpdate:(t,e)=>{for(let[r,o]of Object.entries(e))r!=="children"&&(r==="style"?Oo.setStyle(t,o):r==="internal_transform"?t.internal_transform=o:r==="internal_static"?t.internal_static=!0:Oo.setAttribute(t,r,o))},commitTextUpdate:(t,e,r)=>{Oo.setTextNodeValue(t,r)},removeChild:(t,e)=>{Oo.removeChildNode(t,e),lCe(e.yogaNode)}})});var fCe=_((RKt,ACe)=>{"use strict";ACe.exports=(t,e=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(e===0)return t;let o=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(o,r.indent.repeat(e))}});var pCe=_(hB=>{"use strict";var vEt=hB&&hB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(hB,"__esModule",{value:!0});var Xk=vEt(om());hB.default=t=>t.getComputedWidth()-t.getComputedPadding(Xk.default.EDGE_LEFT)-t.getComputedPadding(Xk.default.EDGE_RIGHT)-t.getComputedBorder(Xk.default.EDGE_LEFT)-t.getComputedBorder(Xk.default.EDGE_RIGHT)});var hCe=_((LKt,DEt)=>{DEt.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var dCe=_((NKt,Y6)=>{"use strict";var gCe=hCe();Y6.exports=gCe;Y6.exports.default=gCe});var yCe=_((OKt,mCe)=>{"use strict";var PEt=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},SEt=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r -`:` -`)+r,a=o+1,o=t.indexOf(` -`,a)}while(o!==-1);return n+=t.substr(a),n};mCe.exports={stringReplaceAll:PEt,stringEncaseCRLFWithFirstIndex:SEt}});var BCe=_((MKt,ICe)=>{"use strict";var xEt=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,ECe=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,bEt=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,kEt=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,QEt=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function wCe(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):QEt.get(t)||t}function FEt(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(bEt))r.push(a[2].replace(kEt,(A,p,h)=>p?wCe(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function REt(t){ECe.lastIndex=0;let e=[],r;for(;(r=ECe.exec(t))!==null;){let o=r[1];if(r[2]){let a=FEt(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function CCe(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}ICe.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(xEt,(n,u,A,p,h,C)=>{if(u)a.push(wCe(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:CCe(t,r)(I)),r.push({inverse:A,styles:REt(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(CCe(t,r)(a.join(""))),a=[],r.pop()}else a.push(C)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var rQ=_((UKt,bCe)=>{"use strict";var gB=BI(),{stdout:K6,stderr:V6}=dL(),{stringReplaceAll:TEt,stringEncaseCRLFWithFirstIndex:LEt}=yCe(),{isArray:Zk}=Array,DCe=["ansi","ansi","ansi256","ansi16m"],_C=Object.create(null),NEt=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=K6?K6.level:0;t.level=e.level===void 0?r:e.level},z6=class{constructor(e){return PCe(e)}},PCe=t=>{let e={};return NEt(e,t),e.template=(...r)=>xCe(e.template,...r),Object.setPrototypeOf(e,$k.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=z6,e.template};function $k(t){return PCe(t)}for(let[t,e]of Object.entries(gB))_C[t]={get(){let r=eQ(this,J6(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};_C.visible={get(){let t=eQ(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var SCe=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of SCe)_C[t]={get(){let{level:e}=this;return function(...r){let o=J6(gB.color[DCe[e]][t](...r),gB.color.close,this._styler);return eQ(this,o,this._isEmpty)}}};for(let t of SCe){let e="bg"+t[0].toUpperCase()+t.slice(1);_C[e]={get(){let{level:r}=this;return function(...o){let a=J6(gB.bgColor[DCe[r]][t](...o),gB.bgColor.close,this._styler);return eQ(this,a,this._isEmpty)}}}}var OEt=Object.defineProperties(()=>{},{..._C,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),J6=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},eQ=(t,e,r)=>{let o=(...a)=>Zk(a[0])&&Zk(a[0].raw)?vCe(o,xCe(o,...a)):vCe(o,a.length===1?""+a[0]:a.join(" "));return Object.setPrototypeOf(o,OEt),o._generator=t,o._styler=e,o._isEmpty=r,o},vCe=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=TEt(e,r.close,r.open),r=r.parent;let n=e.indexOf(` -`);return n!==-1&&(e=LEt(e,a,o,n)),o+e+a},W6,xCe=(t,...e)=>{let[r]=e;if(!Zk(r)||!Zk(r.raw))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";var MEt=mB&&mB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(mB,"__esModule",{value:!0});var dB=MEt(rQ()),UEt=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,_Et=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,nQ=(t,e)=>e==="foreground"?t:"bg"+t[0].toUpperCase()+t.slice(1);mB.default=(t,e,r)=>{if(!e)return t;if(e in dB.default){let a=nQ(e,r);return dB.default[a](t)}if(e.startsWith("#")){let a=nQ("hex",r);return dB.default[a](e)(t)}if(e.startsWith("ansi")){let a=_Et.exec(e);if(!a)return t;let n=nQ(a[1],r),u=Number(a[2]);return dB.default[n](u)(t)}if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("hsv")||e.startsWith("hwb")){let a=UEt.exec(e);if(!a)return t;let n=nQ(a[1],r),u=Number(a[2]),A=Number(a[3]),p=Number(a[4]);return dB.default[n](u,A,p)(t)}return t}});var QCe=_(yB=>{"use strict";var kCe=yB&&yB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(yB,"__esModule",{value:!0});var HEt=kCe(dCe()),Z6=kCe(X6());yB.default=(t,e,r,o)=>{if(typeof r.style.borderStyle=="string"){let a=r.yogaNode.getComputedWidth(),n=r.yogaNode.getComputedHeight(),u=r.style.borderColor,A=HEt.default[r.style.borderStyle],p=Z6.default(A.topLeft+A.horizontal.repeat(a-2)+A.topRight,u,"foreground"),h=(Z6.default(A.vertical,u,"foreground")+` -`).repeat(n-2),C=Z6.default(A.bottomLeft+A.horizontal.repeat(a-2)+A.bottomRight,u,"foreground");o.write(t,e,p,{transformers:[]}),o.write(t,e+1,h,{transformers:[]}),o.write(t+a-1,e+1,h,{transformers:[]}),o.write(t,e+n-1,C,{transformers:[]})}}});var RCe=_(EB=>{"use strict";var am=EB&&EB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(EB,"__esModule",{value:!0});var jEt=am(om()),qEt=am(L6()),GEt=am(fCe()),YEt=am(H6()),WEt=am(pCe()),KEt=am(q6()),VEt=am(QCe()),zEt=(t,e)=>{var r;let o=(r=t.childNodes[0])===null||r===void 0?void 0:r.yogaNode;if(o){let a=o.getComputedLeft(),n=o.getComputedTop();e=` -`.repeat(n)+GEt.default(e,a)}return e},FCe=(t,e,r)=>{var o;let{offsetX:a=0,offsetY:n=0,transformers:u=[],skipStaticElements:A}=r;if(A&&t.internal_static)return;let{yogaNode:p}=t;if(p){if(p.getDisplay()===jEt.default.DISPLAY_NONE)return;let h=a+p.getComputedLeft(),C=n+p.getComputedTop(),I=u;if(typeof t.internal_transform=="function"&&(I=[t.internal_transform,...u]),t.nodeName==="ink-text"){let v=KEt.default(t);if(v.length>0){let b=qEt.default(v),E=WEt.default(p);if(b>E){let F=(o=t.style.textWrap)!==null&&o!==void 0?o:"wrap";v=YEt.default(v,E,F)}v=zEt(t,v),e.write(h,C,v,{transformers:I})}return}if(t.nodeName==="ink-box"&&VEt.default(h,C,t,e),t.nodeName==="ink-root"||t.nodeName==="ink-box")for(let v of t.childNodes)FCe(v,e,{offsetX:h,offsetY:C,transformers:I,skipStaticElements:A})}};EB.default=FCe});var LCe=_((qKt,TCe)=>{"use strict";TCe.exports=t=>{t=Object.assign({onlyFirst:!1},t);let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t.onlyFirst?void 0:"g")}});var OCe=_((GKt,$6)=>{"use strict";var JEt=LCe(),NCe=t=>typeof t=="string"?t.replace(JEt(),""):t;$6.exports=NCe;$6.exports.default=NCe});var _Ce=_((YKt,UCe)=>{"use strict";var MCe="[\uD800-\uDBFF][\uDC00-\uDFFF]";UCe.exports=t=>t&&t.exact?new RegExp(`^${MCe}$`):new RegExp(MCe,"g")});var jCe=_((WKt,ej)=>{"use strict";var XEt=OCe(),ZEt=_Ce(),HCe=t=>XEt(t).replace(ZEt()," ").length;ej.exports=HCe;ej.exports.default=HCe});var YCe=_(CB=>{"use strict";var GCe=CB&&CB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(CB,"__esModule",{value:!0});var qCe=GCe(U6()),$Et=GCe(jCe()),tj=class{constructor(e){this.writes=[];let{width:r,height:o}=e;this.width=r,this.height=o}write(e,r,o,a){let{transformers:n}=a;!o||this.writes.push({x:e,y:r,text:o,transformers:n})}get(){let e=[];for(let o=0;oo.trimRight()).join(` -`),height:e.length}}};CB.default=tj});var VCe=_(wB=>{"use strict";var rj=wB&&wB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(wB,"__esModule",{value:!0});var eCt=rj(om()),WCe=rj(RCe()),KCe=rj(YCe());wB.default=(t,e)=>{var r;if(t.yogaNode.setWidth(e),t.yogaNode){t.yogaNode.calculateLayout(void 0,void 0,eCt.default.DIRECTION_LTR);let o=new KCe.default({width:t.yogaNode.getComputedWidth(),height:t.yogaNode.getComputedHeight()});WCe.default(t,o,{skipStaticElements:!0});let a;!((r=t.staticNode)===null||r===void 0)&&r.yogaNode&&(a=new KCe.default({width:t.staticNode.yogaNode.getComputedWidth(),height:t.staticNode.yogaNode.getComputedHeight()}),WCe.default(t.staticNode,a,{skipStaticElements:!1}));let{output:n,height:u}=o.get();return{output:n,outputHeight:u,staticOutput:a?`${a.get().output} -`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var ZCe=_((zKt,XCe)=>{"use strict";var zCe=Be("stream"),JCe=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],nj={},tCt=t=>{let e=new zCe.PassThrough,r=new zCe.PassThrough;e.write=a=>t("stdout",a),r.write=a=>t("stderr",a);let o=new console.Console(e,r);for(let a of JCe)nj[a]=console[a],console[a]=o[a];return()=>{for(let a of JCe)console[a]=nj[a];nj={}}};XCe.exports=tCt});var sj=_(ij=>{"use strict";Object.defineProperty(ij,"__esModule",{value:!0});ij.default=new WeakMap});var aj=_(oj=>{"use strict";Object.defineProperty(oj,"__esModule",{value:!0});var rCt=sn(),$Ce=rCt.createContext({exit:()=>{}});$Ce.displayName="InternalAppContext";oj.default=$Ce});var cj=_(lj=>{"use strict";Object.defineProperty(lj,"__esModule",{value:!0});var nCt=sn(),ewe=nCt.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});ewe.displayName="InternalStdinContext";lj.default=ewe});var Aj=_(uj=>{"use strict";Object.defineProperty(uj,"__esModule",{value:!0});var iCt=sn(),twe=iCt.createContext({stdout:void 0,write:()=>{}});twe.displayName="InternalStdoutContext";uj.default=twe});var pj=_(fj=>{"use strict";Object.defineProperty(fj,"__esModule",{value:!0});var sCt=sn(),rwe=sCt.createContext({stderr:void 0,write:()=>{}});rwe.displayName="InternalStderrContext";fj.default=rwe});var iQ=_(hj=>{"use strict";Object.defineProperty(hj,"__esModule",{value:!0});var oCt=sn(),nwe=oCt.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});nwe.displayName="InternalFocusContext";hj.default=nwe});var swe=_((rVt,iwe)=>{"use strict";var aCt=/[|\\{}()[\]^$+*?.-]/g;iwe.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(aCt,"\\$&")}});var cwe=_((nVt,lwe)=>{"use strict";var lCt=swe(),cCt=typeof process=="object"&&process&&typeof process.cwd=="function"?process.cwd():".",awe=[].concat(Be("module").builtinModules,"bootstrap_node","node").map(t=>new RegExp(`(?:\\((?:node:)?${t}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${t}(?:\\.js)?:\\d+:\\d+$)`));awe.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var IB=class{constructor(e){e={ignoredPackages:[],...e},"internals"in e||(e.internals=IB.nodeInternals()),"cwd"in e||(e.cwd=cCt),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,uCt(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...awe]}clean(e,r=0){r=" ".repeat(r),Array.isArray(e)||(e=e.split(` -`)),!/^\s*at /.test(e[0])&&/^\s*at /.test(e[1])&&(e=e.slice(1));let o=!1,a=null,n=[];return e.forEach(u=>{if(u=u.replace(/\\/g,"/"),this._internals.some(p=>p.test(u)))return;let A=/^\s*at /.test(u);o?u=u.trimEnd().replace(/^(\s+)at /,"$1"):(u=u.trim(),A&&(u=u.slice(3))),u=u.replace(`${this._cwd}/`,""),u&&(A?(a&&(n.push(a),a=null),n.push(u)):(o=!0,a=u))}),n.map(u=>`${r}${u} -`).join("")}captureString(e,r=this.captureString){typeof e=="function"&&(r=e,e=1/0);let{stackTraceLimit:o}=Error;e&&(Error.stackTraceLimit=e);let a={};Error.captureStackTrace(a,r);let{stack:n}=a;return Error.stackTraceLimit=o,this.clean(n)}capture(e,r=this.capture){typeof e=="function"&&(r=e,e=1/0);let{prepareStackTrace:o,stackTraceLimit:a}=Error;Error.prepareStackTrace=(A,p)=>this._wrapCallSite?p.map(this._wrapCallSite):p,e&&(Error.stackTraceLimit=e);let n={};Error.captureStackTrace(n,r);let{stack:u}=n;return Object.assign(Error,{prepareStackTrace:o,stackTraceLimit:a}),u}at(e=this.at){let[r]=this.capture(1,e);if(!r)return{};let o={line:r.getLineNumber(),column:r.getColumnNumber()};owe(o,r.getFileName(),this._cwd),r.isConstructor()&&(o.constructor=!0),r.isEval()&&(o.evalOrigin=r.getEvalOrigin()),r.isNative()&&(o.native=!0);let a;try{a=r.getTypeName()}catch{}a&&a!=="Object"&&a!=="[object Object]"&&(o.type=a);let n=r.getFunctionName();n&&(o.function=n);let u=r.getMethodName();return u&&n!==u&&(o.method=u),o}parseLine(e){let r=e&&e.match(ACt);if(!r)return null;let o=r[1]==="new",a=r[2],n=r[3],u=r[4],A=Number(r[5]),p=Number(r[6]),h=r[7],C=r[8],I=r[9],v=r[10]==="native",b=r[11]===")",E,F={};if(C&&(F.line=Number(C)),I&&(F.column=Number(I)),b&&h){let N=0;for(let U=h.length-1;U>0;U--)if(h.charAt(U)===")")N++;else if(h.charAt(U)==="("&&h.charAt(U-1)===" "&&(N--,N===-1&&h.charAt(U-1)===" ")){let z=h.slice(0,U-1);h=h.slice(U+1),a+=` (${z}`;break}}if(a){let N=a.match(fCt);N&&(a=N[1],E=N[2])}return owe(F,h,this._cwd),o&&(F.constructor=!0),n&&(F.evalOrigin=n,F.evalLine=A,F.evalColumn=p,F.evalFile=u&&u.replace(/\\/g,"/")),v&&(F.native=!0),a&&(F.function=a),E&&a!==E&&(F.method=E),F}};function owe(t,e,r){e&&(e=e.replace(/\\/g,"/"),e.startsWith(`${r}/`)&&(e=e.slice(r.length+1)),t.file=e)}function uCt(t){if(t.length===0)return[];let e=t.map(r=>lCt(r));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${e.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var ACt=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),fCt=/^(.*?) \[as (.*?)\]$/;lwe.exports=IB});var Awe=_((iVt,uwe)=>{"use strict";uwe.exports=(t,e)=>t.replace(/^\t+/gm,r=>" ".repeat(r.length*(e||2)))});var pwe=_((sVt,fwe)=>{"use strict";var pCt=Awe(),hCt=(t,e)=>{let r=[],o=t-e,a=t+e;for(let n=o;n<=a;n++)r.push(n);return r};fwe.exports=(t,e,r)=>{if(typeof t!="string")throw new TypeError("Source code is missing.");if(!e||e<1)throw new TypeError("Line number must start from `1`.");if(t=pCt(t).split(/\r?\n/),!(e>t.length))return r={around:3,...r},hCt(e,r.around).filter(o=>t[o-1]!==void 0).map(o=>({line:o,value:t[o-1]}))}});var sQ=_(ru=>{"use strict";var gCt=ru&&ru.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),dCt=ru&&ru.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),mCt=ru&&ru.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&gCt(e,t,r);return dCt(e,t),e},yCt=ru&&ru.__rest||function(t,e){var r={};for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.indexOf(o)<0&&(r[o]=t[o]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(t);a{var{children:r}=t,o=yCt(t,["children"]);let a=Object.assign(Object.assign({},o),{marginLeft:o.marginLeft||o.marginX||o.margin||0,marginRight:o.marginRight||o.marginX||o.margin||0,marginTop:o.marginTop||o.marginY||o.margin||0,marginBottom:o.marginBottom||o.marginY||o.margin||0,paddingLeft:o.paddingLeft||o.paddingX||o.padding||0,paddingRight:o.paddingRight||o.paddingX||o.padding||0,paddingTop:o.paddingTop||o.paddingY||o.padding||0,paddingBottom:o.paddingBottom||o.paddingY||o.padding||0});return hwe.default.createElement("ink-box",{ref:e,style:a},r)});gj.displayName="Box";gj.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};ru.default=gj});var yj=_(BB=>{"use strict";var dj=BB&&BB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(BB,"__esModule",{value:!0});var ECt=dj(sn()),HC=dj(rQ()),gwe=dj(X6()),mj=({color:t,backgroundColor:e,dimColor:r,bold:o,italic:a,underline:n,strikethrough:u,inverse:A,wrap:p,children:h})=>{if(h==null)return null;let C=I=>(r&&(I=HC.default.dim(I)),t&&(I=gwe.default(I,t,"foreground")),e&&(I=gwe.default(I,e,"background")),o&&(I=HC.default.bold(I)),a&&(I=HC.default.italic(I)),n&&(I=HC.default.underline(I)),u&&(I=HC.default.strikethrough(I)),A&&(I=HC.default.inverse(I)),I);return ECt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:p},internal_transform:C},h)};mj.displayName="Text";mj.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};BB.default=mj});var Ewe=_(nu=>{"use strict";var CCt=nu&&nu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),wCt=nu&&nu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),ICt=nu&&nu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&CCt(e,t,r);return wCt(e,t),e},vB=nu&&nu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nu,"__esModule",{value:!0});var dwe=ICt(Be("fs")),fs=vB(sn()),mwe=vB(cwe()),BCt=vB(pwe()),Jf=vB(sQ()),hA=vB(yj()),ywe=new mwe.default({cwd:process.cwd(),internals:mwe.default.nodeInternals()}),vCt=({error:t})=>{let e=t.stack?t.stack.split(` -`).slice(1):void 0,r=e?ywe.parseLine(e[0]):void 0,o,a=0;if(r?.file&&r?.line&&dwe.existsSync(r.file)){let n=dwe.readFileSync(r.file,"utf8");if(o=BCt.default(n,r.line),o)for(let{line:u}of o)a=Math.max(a,String(u).length)}return fs.default.createElement(Jf.default,{flexDirection:"column",padding:1},fs.default.createElement(Jf.default,null,fs.default.createElement(hA.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),fs.default.createElement(hA.default,null," ",t.message)),r&&fs.default.createElement(Jf.default,{marginTop:1},fs.default.createElement(hA.default,{dimColor:!0},r.file,":",r.line,":",r.column)),r&&o&&fs.default.createElement(Jf.default,{marginTop:1,flexDirection:"column"},o.map(({line:n,value:u})=>fs.default.createElement(Jf.default,{key:n},fs.default.createElement(Jf.default,{width:a+1},fs.default.createElement(hA.default,{dimColor:n!==r.line,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0},String(n).padStart(a," "),":")),fs.default.createElement(hA.default,{key:n,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0}," "+u)))),t.stack&&fs.default.createElement(Jf.default,{marginTop:1,flexDirection:"column"},t.stack.split(` -`).slice(1).map(n=>{let u=ywe.parseLine(n);return u?fs.default.createElement(Jf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},u.function),fs.default.createElement(hA.default,{dimColor:!0,color:"gray"}," ","(",u.file,":",u.line,":",u.column,")")):fs.default.createElement(Jf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},n))})))};nu.default=vCt});var wwe=_(iu=>{"use strict";var DCt=iu&&iu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),PCt=iu&&iu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),SCt=iu&&iu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&DCt(e,t,r);return PCt(e,t),e},cm=iu&&iu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(iu,"__esModule",{value:!0});var lm=SCt(sn()),Cwe=cm(g6()),xCt=cm(aj()),bCt=cm(cj()),kCt=cm(Aj()),QCt=cm(pj()),FCt=cm(iQ()),RCt=cm(Ewe()),TCt=" ",LCt="\x1B[Z",NCt="\x1B",oQ=class extends lm.PureComponent{constructor(){super(...arguments),this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=e=>{let{stdin:r}=this.props;if(!this.isRawModeSupported())throw r===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(r.setEncoding("utf8"),e){this.rawModeEnabledCount===0&&(r.addListener("data",this.handleInput),r.resume(),r.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount===0&&(r.setRawMode(!1),r.removeListener("data",this.handleInput),r.pause())},this.handleInput=e=>{e===""&&this.props.exitOnCtrlC&&this.handleExit(),e===NCt&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===TCt&&this.focusNext(),e===LCt&&this.focusPrevious())},this.handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(e)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(e=>{let r=e.focusables[0].id;return{activeFocusId:this.findNextFocusable(e)||r}})},this.focusPrevious=()=>{this.setState(e=>{let r=e.focusables[e.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(e)||r}})},this.addFocusable=(e,{autoFocus:r})=>{this.setState(o=>{let a=o.activeFocusId;return!a&&r&&(a=e),{activeFocusId:a,focusables:[...o.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.filter(o=>o.id!==e)}))},this.activateFocusable=e=>{this.setState(r=>({focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r+1;o{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r-1;o>=0;o--)if(e.focusables[o].isActive)return e.focusables[o].id}}static getDerivedStateFromError(e){return{error:e}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return lm.default.createElement(xCt.default.Provider,{value:{exit:this.handleExit}},lm.default.createElement(bCt.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},lm.default.createElement(kCt.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},lm.default.createElement(QCt.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},lm.default.createElement(FCt.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?lm.default.createElement(RCt.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){Cwe.default.hide(this.props.stdout)}componentWillUnmount(){Cwe.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}};iu.default=oQ;oQ.displayName="InternalApp"});var vwe=_(su=>{"use strict";var OCt=su&&su.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),MCt=su&&su.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),UCt=su&&su.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&OCt(e,t,r);return MCt(e,t),e},ou=su&&su.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(su,"__esModule",{value:!0});var _Ct=ou(sn()),Iwe=lM(),HCt=ou(cEe()),jCt=ou(u6()),qCt=ou(gEe()),GCt=ou(mEe()),Ej=ou(uCe()),YCt=ou(VCe()),WCt=ou(h6()),KCt=ou(ZCe()),VCt=UCt(G6()),zCt=ou(sj()),JCt=ou(wwe()),jC=process.env.CI==="false"?!1:qCt.default,Bwe=()=>{},Cj=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:r,outputHeight:o,staticOutput:a}=YCt.default(this.rootNode,this.options.stdout.columns||80),n=a&&a!==` -`;if(this.options.debug){n&&(this.fullStaticOutput+=a),this.options.stdout.write(this.fullStaticOutput+r);return}if(jC){n&&this.options.stdout.write(a),this.lastOutput=r;return}if(n&&(this.fullStaticOutput+=a),o>=this.options.stdout.rows){this.options.stdout.write(jCt.default.clearTerminal+this.fullStaticOutput+r),this.lastOutput=r;return}n&&(this.log.clear(),this.options.stdout.write(a),this.log(r)),!n&&r!==this.lastOutput&&this.throttledLog(r),this.lastOutput=r},GCt.default(this),this.options=e,this.rootNode=VCt.createNode("ink-root"),this.rootNode.onRender=e.debug?this.onRender:Iwe(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=HCt.default.create(e.stdout),this.throttledLog=e.debug?this.log:Iwe(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=Ej.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=WCt.default(this.unmount,{alwaysLast:!1}),e.patchConsole&&this.patchConsole(),jC||(e.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{e.stdout.off("resize",this.onRender)})}render(e){let r=_Ct.default.createElement(JCt.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},e);Ej.default.updateContainer(r,this.container,null,Bwe)}writeToStdout(e){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stdout.write(e);return}this.log.clear(),this.options.stdout.write(e),this.log(this.lastOutput)}}writeToStderr(e){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(e),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stderr.write(e);return}this.log.clear(),this.options.stderr.write(e),this.log(this.lastOutput)}}unmount(e){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),jC?this.options.stdout.write(this.lastOutput+` -`):this.options.debug||this.log.done(),this.isUnmounted=!0,Ej.default.updateContainer(null,this.container,null,Bwe),zCt.default.delete(this.options.stdout),e instanceof Error?this.rejectExitPromise(e):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((e,r)=>{this.resolveExitPromise=e,this.rejectExitPromise=r})),this.exitPromise}clear(){!jC&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=KCt.default((e,r)=>{e==="stdout"&&this.writeToStdout(r),e==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};su.default=Cj});var Pwe=_(DB=>{"use strict";var Dwe=DB&&DB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(DB,"__esModule",{value:!0});var XCt=Dwe(vwe()),aQ=Dwe(sj()),ZCt=Be("stream"),$Ct=(t,e)=>{let r=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},ewt(e)),o=twt(r.stdout,()=>new XCt.default(r));return o.render(t),{rerender:o.render,unmount:()=>o.unmount(),waitUntilExit:o.waitUntilExit,cleanup:()=>aQ.default.delete(r.stdout),clear:o.clear}};DB.default=$Ct;var ewt=(t={})=>t instanceof ZCt.Stream?{stdout:t,stdin:process.stdin}:t,twt=(t,e)=>{let r;return aQ.default.has(t)?r=aQ.default.get(t):(r=e(),aQ.default.set(t,r)),r}});var xwe=_(Xf=>{"use strict";var rwt=Xf&&Xf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),nwt=Xf&&Xf.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),iwt=Xf&&Xf.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&rwt(e,t,r);return nwt(e,t),e};Object.defineProperty(Xf,"__esModule",{value:!0});var PB=iwt(sn()),Swe=t=>{let{items:e,children:r,style:o}=t,[a,n]=PB.useState(0),u=PB.useMemo(()=>e.slice(a),[e,a]);PB.useLayoutEffect(()=>{n(e.length)},[e.length]);let A=u.map((h,C)=>r(h,a+C)),p=PB.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},o),[o]);return PB.default.createElement("ink-box",{internal_static:!0,style:p},A)};Swe.displayName="Static";Xf.default=Swe});var kwe=_(SB=>{"use strict";var swt=SB&&SB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(SB,"__esModule",{value:!0});var owt=swt(sn()),bwe=({children:t,transform:e})=>t==null?null:owt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:e},t);bwe.displayName="Transform";SB.default=bwe});var Fwe=_(xB=>{"use strict";var awt=xB&&xB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xB,"__esModule",{value:!0});var lwt=awt(sn()),Qwe=({count:t=1})=>lwt.default.createElement("ink-text",null,` -`.repeat(t));Qwe.displayName="Newline";xB.default=Qwe});var Lwe=_(bB=>{"use strict";var Rwe=bB&&bB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(bB,"__esModule",{value:!0});var cwt=Rwe(sn()),uwt=Rwe(sQ()),Twe=()=>cwt.default.createElement(uwt.default,{flexGrow:1});Twe.displayName="Spacer";bB.default=Twe});var lQ=_(kB=>{"use strict";var Awt=kB&&kB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kB,"__esModule",{value:!0});var fwt=sn(),pwt=Awt(cj()),hwt=()=>fwt.useContext(pwt.default);kB.default=hwt});var Owe=_(QB=>{"use strict";var gwt=QB&&QB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(QB,"__esModule",{value:!0});var Nwe=sn(),dwt=gwt(lQ()),mwt=(t,e={})=>{let{stdin:r,setRawMode:o,internal_exitOnCtrlC:a}=dwt.default();Nwe.useEffect(()=>{if(e.isActive!==!1)return o(!0),()=>{o(!1)}},[e.isActive,o]),Nwe.useEffect(()=>{if(e.isActive===!1)return;let n=u=>{let A=String(u),p={upArrow:A==="\x1B[A",downArrow:A==="\x1B[B",leftArrow:A==="\x1B[D",rightArrow:A==="\x1B[C",pageDown:A==="\x1B[6~",pageUp:A==="\x1B[5~",return:A==="\r",escape:A==="\x1B",ctrl:!1,shift:!1,tab:A===" "||A==="\x1B[Z",backspace:A==="\b",delete:A==="\x7F"||A==="\x1B[3~",meta:!1};A<=""&&!p.return&&(A=String.fromCharCode(A.charCodeAt(0)+"a".charCodeAt(0)-1),p.ctrl=!0),A.startsWith("\x1B")&&(A=A.slice(1),p.meta=!0);let h=A>="A"&&A<="Z",C=A>="\u0410"&&A<="\u042F";A.length===1&&(h||C)&&(p.shift=!0),p.tab&&A==="[Z"&&(p.shift=!0),(p.tab||p.backspace||p.delete)&&(A=""),(!(A==="c"&&p.ctrl)||!a)&&t(A,p)};return r?.on("data",n),()=>{r?.off("data",n)}},[e.isActive,r,a,t])};QB.default=mwt});var Mwe=_(FB=>{"use strict";var ywt=FB&&FB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(FB,"__esModule",{value:!0});var Ewt=sn(),Cwt=ywt(aj()),wwt=()=>Ewt.useContext(Cwt.default);FB.default=wwt});var Uwe=_(RB=>{"use strict";var Iwt=RB&&RB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(RB,"__esModule",{value:!0});var Bwt=sn(),vwt=Iwt(Aj()),Dwt=()=>Bwt.useContext(vwt.default);RB.default=Dwt});var _we=_(TB=>{"use strict";var Pwt=TB&&TB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(TB,"__esModule",{value:!0});var Swt=sn(),xwt=Pwt(pj()),bwt=()=>Swt.useContext(xwt.default);TB.default=bwt});var jwe=_(NB=>{"use strict";var Hwe=NB&&NB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(NB,"__esModule",{value:!0});var LB=sn(),kwt=Hwe(iQ()),Qwt=Hwe(lQ()),Fwt=({isActive:t=!0,autoFocus:e=!1}={})=>{let{isRawModeSupported:r,setRawMode:o}=Qwt.default(),{activeId:a,add:n,remove:u,activate:A,deactivate:p}=LB.useContext(kwt.default),h=LB.useMemo(()=>Math.random().toString().slice(2,7),[]);return LB.useEffect(()=>(n(h,{autoFocus:e}),()=>{u(h)}),[h,e]),LB.useEffect(()=>{t?A(h):p(h)},[t,h]),LB.useEffect(()=>{if(!(!r||!t))return o(!0),()=>{o(!1)}},[t]),{isFocused:Boolean(h)&&a===h}};NB.default=Fwt});var qwe=_(OB=>{"use strict";var Rwt=OB&&OB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(OB,"__esModule",{value:!0});var Twt=sn(),Lwt=Rwt(iQ()),Nwt=()=>{let t=Twt.useContext(Lwt.default);return{enableFocus:t.enableFocus,disableFocus:t.disableFocus,focusNext:t.focusNext,focusPrevious:t.focusPrevious}};OB.default=Nwt});var Gwe=_(wj=>{"use strict";Object.defineProperty(wj,"__esModule",{value:!0});wj.default=t=>{var e,r,o,a;return{width:(r=(e=t.yogaNode)===null||e===void 0?void 0:e.getComputedWidth())!==null&&r!==void 0?r:0,height:(a=(o=t.yogaNode)===null||o===void 0?void 0:o.getComputedHeight())!==null&&a!==void 0?a:0}}});var ic=_(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});var Owt=Pwe();Object.defineProperty(ro,"render",{enumerable:!0,get:function(){return Owt.default}});var Mwt=sQ();Object.defineProperty(ro,"Box",{enumerable:!0,get:function(){return Mwt.default}});var Uwt=yj();Object.defineProperty(ro,"Text",{enumerable:!0,get:function(){return Uwt.default}});var _wt=xwe();Object.defineProperty(ro,"Static",{enumerable:!0,get:function(){return _wt.default}});var Hwt=kwe();Object.defineProperty(ro,"Transform",{enumerable:!0,get:function(){return Hwt.default}});var jwt=Fwe();Object.defineProperty(ro,"Newline",{enumerable:!0,get:function(){return jwt.default}});var qwt=Lwe();Object.defineProperty(ro,"Spacer",{enumerable:!0,get:function(){return qwt.default}});var Gwt=Owe();Object.defineProperty(ro,"useInput",{enumerable:!0,get:function(){return Gwt.default}});var Ywt=Mwe();Object.defineProperty(ro,"useApp",{enumerable:!0,get:function(){return Ywt.default}});var Wwt=lQ();Object.defineProperty(ro,"useStdin",{enumerable:!0,get:function(){return Wwt.default}});var Kwt=Uwe();Object.defineProperty(ro,"useStdout",{enumerable:!0,get:function(){return Kwt.default}});var Vwt=_we();Object.defineProperty(ro,"useStderr",{enumerable:!0,get:function(){return Vwt.default}});var zwt=jwe();Object.defineProperty(ro,"useFocus",{enumerable:!0,get:function(){return zwt.default}});var Jwt=qwe();Object.defineProperty(ro,"useFocusManager",{enumerable:!0,get:function(){return Jwt.default}});var Xwt=Gwe();Object.defineProperty(ro,"measureElement",{enumerable:!0,get:function(){return Xwt.default}})});var Bj={};Vt(Bj,{Gem:()=>Ij});var Ywe,um,Ij,cQ=yt(()=>{Ywe=$e(ic()),um=$e(sn()),Ij=(0,um.memo)(({active:t})=>{let e=(0,um.useMemo)(()=>t?"\u25C9":"\u25EF",[t]),r=(0,um.useMemo)(()=>t?"green":"yellow",[t]);return um.default.createElement(Ywe.Text,{color:r},e)})});var Kwe={};Vt(Kwe,{useKeypress:()=>Am});function Am({active:t},e,r){let{stdin:o}=(0,Wwe.useStdin)(),a=(0,uQ.useCallback)((n,u)=>e(n,u),r);(0,uQ.useEffect)(()=>{if(!(!t||!o))return o.on("keypress",a),()=>{o.off("keypress",a)}},[t,a,o])}var Wwe,uQ,MB=yt(()=>{Wwe=$e(ic()),uQ=$e(sn())});var zwe={};Vt(zwe,{FocusRequest:()=>Vwe,useFocusRequest:()=>vj});var Vwe,vj,Dj=yt(()=>{MB();Vwe=(r=>(r.BEFORE="before",r.AFTER="after",r))(Vwe||{}),vj=function({active:t},e,r){Am({active:t},(o,a)=>{a.name==="tab"&&(a.shift?e("before"):e("after"))},r)}});var Jwe={};Vt(Jwe,{useListInput:()=>UB});var UB,AQ=yt(()=>{MB();UB=function(t,e,{active:r,minus:o,plus:a,set:n,loop:u=!0}){Am({active:r},(A,p)=>{let h=e.indexOf(t);switch(p.name){case o:{let C=h-1;if(u){n(e[(e.length+C)%e.length]);return}if(C<0)return;n(e[C])}break;case a:{let C=h+1;if(u){n(e[C%e.length]);return}if(C>=e.length)return;n(e[C])}break}},[e,t,a,n,u])}});var fQ={};Vt(fQ,{ScrollableItems:()=>Zwt});var E0,Na,Zwt,pQ=yt(()=>{E0=$e(ic()),Na=$e(sn());Dj();AQ();Zwt=({active:t=!0,children:e=[],radius:r=10,size:o=1,loop:a=!0,onFocusRequest:n,willReachEnd:u})=>{let A=N=>{if(N.key===null)throw new Error("Expected all children to have a key");return N.key},p=Na.default.Children.map(e,N=>A(N)),h=p[0],[C,I]=(0,Na.useState)(h),v=p.indexOf(C);(0,Na.useEffect)(()=>{p.includes(C)||I(h)},[e]),(0,Na.useEffect)(()=>{u&&v>=p.length-2&&u()},[v]),vj({active:t&&!!n},N=>{n?.(N)},[n]),UB(C,p,{active:t,minus:"up",plus:"down",set:I,loop:a});let b=v-r,E=v+r;E>p.length&&(b-=E-p.length,E=p.length),b<0&&(E+=-b,b=0),E>=p.length&&(E=p.length-1);let F=[];for(let N=b;N<=E;++N){let U=p[N],z=t&&U===C;F.push(Na.default.createElement(E0.Box,{key:U,height:o},Na.default.createElement(E0.Box,{marginLeft:1,marginRight:1},Na.default.createElement(E0.Text,null,z?Na.default.createElement(E0.Text,{color:"cyan",bold:!0},">"):" ")),Na.default.createElement(E0.Box,null,Na.default.cloneElement(e[N],{active:z}))))}return Na.default.createElement(E0.Box,{flexDirection:"column",width:"100%"},F)}});var Xwe,Zf,Zwe,Pj,$we,Sj=yt(()=>{Xwe=$e(ic()),Zf=$e(sn()),Zwe=Be("readline"),Pj=Zf.default.createContext(null),$we=({children:t})=>{let{stdin:e,setRawMode:r}=(0,Xwe.useStdin)();(0,Zf.useEffect)(()=>{r&&r(!0),e&&(0,Zwe.emitKeypressEvents)(e)},[e,r]);let[o,a]=(0,Zf.useState)(new Map),n=(0,Zf.useMemo)(()=>({getAll:()=>o,get:u=>o.get(u),set:(u,A)=>a(new Map([...o,[u,A]]))}),[o,a]);return Zf.default.createElement(Pj.Provider,{value:n,children:t})}});var xj={};Vt(xj,{useMinistore:()=>$wt});function $wt(t,e){let r=(0,hQ.useContext)(Pj);if(r===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof t>"u")return r.getAll();let o=(0,hQ.useCallback)(n=>{r.set(t,n)},[t,r.set]),a=r.get(t);return typeof a>"u"&&(a=e),[a,o]}var hQ,bj=yt(()=>{hQ=$e(sn());Sj()});var dQ={};Vt(dQ,{renderForm:()=>eIt});async function eIt(t,e,{stdin:r,stdout:o,stderr:a}){let n,u=p=>{let{exit:h}=(0,gQ.useApp)();Am({active:!0},(C,I)=>{I.name==="return"&&(n=p,h())},[h,p])},{waitUntilExit:A}=(0,gQ.render)(kj.default.createElement($we,null,kj.default.createElement(t,{...e,useSubmit:u})),{stdin:r,stdout:o,stderr:a});return await A(),n}var gQ,kj,mQ=yt(()=>{gQ=$e(ic()),kj=$e(sn());Sj();MB()});var nIe=_(_B=>{"use strict";Object.defineProperty(_B,"__esModule",{value:!0});_B.UncontrolledTextInput=void 0;var tIe=sn(),Qj=sn(),eIe=ic(),fm=rQ(),rIe=({value:t,placeholder:e="",focus:r=!0,mask:o,highlightPastedText:a=!1,showCursor:n=!0,onChange:u,onSubmit:A})=>{let[{cursorOffset:p,cursorWidth:h},C]=Qj.useState({cursorOffset:(t||"").length,cursorWidth:0});Qj.useEffect(()=>{C(F=>{if(!r||!n)return F;let N=t||"";return F.cursorOffset>N.length-1?{cursorOffset:N.length,cursorWidth:0}:F})},[t,r,n]);let I=a?h:0,v=o?o.repeat(t.length):t,b=v,E=e?fm.grey(e):void 0;if(n&&r){E=e.length>0?fm.inverse(e[0])+fm.grey(e.slice(1)):fm.inverse(" "),b=v.length>0?"":fm.inverse(" ");let F=0;for(let N of v)F>=p-I&&F<=p?b+=fm.inverse(N):b+=N,F++;v.length>0&&p===v.length&&(b+=fm.inverse(" "))}return eIe.useInput((F,N)=>{if(N.upArrow||N.downArrow||N.ctrl&&F==="c"||N.tab||N.shift&&N.tab)return;if(N.return){A&&A(t);return}let U=p,z=t,te=0;N.leftArrow?n&&U--:N.rightArrow?n&&U++:N.backspace||N.delete?p>0&&(z=t.slice(0,p-1)+t.slice(p,t.length),U--):(z=t.slice(0,p)+F+t.slice(p,t.length),U+=F.length,F.length>1&&(te=F.length)),p<0&&(U=0),p>t.length&&(U=t.length),C({cursorOffset:U,cursorWidth:te}),z!==t&&u(z)},{isActive:r}),tIe.createElement(eIe.Text,null,e?v.length>0?b:E:b)};_B.default=rIe;_B.UncontrolledTextInput=t=>{let[e,r]=Qj.useState("");return tIe.createElement(rIe,Object.assign({},t,{value:e,onChange:r}))}});var oIe={};Vt(oIe,{Pad:()=>Fj});var iIe,sIe,Fj,Rj=yt(()=>{iIe=$e(ic()),sIe=$e(sn()),Fj=({length:t,active:e})=>{if(t===0)return null;let r=t>1?` ${"-".repeat(t-1)}`:" ";return sIe.default.createElement(iIe.Text,{dimColor:!e},r)}});var aIe={};Vt(aIe,{ItemOptions:()=>tIt});var jB,w0,tIt,lIe=yt(()=>{jB=$e(ic()),w0=$e(sn());AQ();cQ();Rj();tIt=function({active:t,skewer:e,options:r,value:o,onChange:a,sizes:n=[]}){let u=r.filter(({label:p})=>!!p).map(({value:p})=>p),A=r.findIndex(p=>p.value===o&&p.label!="");return UB(o,u,{active:t,minus:"left",plus:"right",set:a}),w0.default.createElement(w0.default.Fragment,null,r.map(({label:p},h)=>{let C=h===A,I=n[h]-1||0,v=p.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),b=Math.max(0,I-v.length-2);return p?w0.default.createElement(jB.Box,{key:p,width:I,marginLeft:1},w0.default.createElement(jB.Text,{wrap:"truncate"},w0.default.createElement(Ij,{active:C})," ",p),e?w0.default.createElement(Fj,{active:t,length:b}):null):w0.default.createElement(jB.Box,{key:`spacer-${h}`,width:I,marginLeft:1})}))}});var vIe=_((Kzt,BIe)=>{var jj;BIe.exports=()=>(typeof jj>"u"&&(jj=Be("zlib").brotliDecompressSync(Buffer.from("W+NwVsE5SbvbASzzqt/riwsyGbCB9mfZNbzlUYsoZe+C4oap03G43qwf3Vv3MPTJUNWsBBljbBO4f0HCsqraIojcFepodDssNZR+gFJTEfscPu2GrXC0is9K9zLsQRFQykXtp5MvvXvo87XfbC+Hd8MDg5LL6bWDBlYbf+PEwOAtgJNb9XMQYyIuTLPYGM/Rom7IGz79f5v6rZ3N6lrh/0iU9+wpnWF6XSEbiRomcjnGpAkN/FtTwxZBL+k/VtbcSiPc1oxueGnwFnE6P6NqkZBc7ltN8+/P61AKwtekpYTsFZLJq9XXpmjBcLeuGhvS1hP/W85OZ1JjwmTlyuTxV8S79hMq1ELFw/5S33suJ7rtrul2KyAcPWPBk7CTP5V0rb9Pf2/2vz9f02fG6sSp2HsaqRGBsM8kNJD2bhEyLDjEXYI5TPbK6TDVfzetVqcXKVT2+WLHehMwjLBVaf9siGHCTHW7p4VWhj2wljYGIxtF3CvtqX750/z6VTpMZO5SGk5zauGcdPcFUqRnzds9AzeDpWrWu6kEVxdofyhjah2qj3PHAbQKHDAs/nmA4IlPvI4HhxZFHN/8/38SbTAlNL2R6lhBdjdrpxA4FqvlwXwbAw0fBj6YDQ6MloF+9KMZfX7c3S1Rk3U/X1VXN8UAWmCPMn8TZi0I6rhhEjR+fGPreNiDVLZrxzefAQeFeiAV3QyXD7kbJu5+yY//Mf3/z4973ytJ7K35XGv2bBgEkg3F1vwZczpQ26LBFD0WFpvPhw9TtNY+ZzebXIADcyEi/aGteyEiqm2P+P9+rP7zV3HcM36CM6LsxiyYXPIv9T00L+ZWaeT7OnNcSx+dLqd0E2nTl/wgYEjh8BV4RFP9cfjtUtr4AOJOsJTCpI+uIMx0KZ+mB7aboyFMwA8wD/WqWllciu37C1DYrwgpu7MheyFjSDtz7vz/93216u5xgNTOheNMOEE0XiI5xpgowD/n7LuF/74R8QGwBICkhnKrybKiVDXj7znnvo/vwAZAlQZkeVYb1ViTWRPGM/EE2WQRpaz9L98vSxfTs8pcas+GorKkScNk+OjMe97hlvjFQauZWQgqDIVQee65ma/ql9hGAVSYpZImLYZPw6fhuVXdFFgKaZH/f2+p1fa+/yMjI5EgkADRUkKUoVTdM0Spy9h1pKEIujKWrRprFhvivXv/O/zvvR+t+D8iWxE/IlsZPyKPMiKBKUREZg8zE/w/IhOMTIKcBEl1JympDqhizUCm+kC2jCcS4DkCQZ0jEOI5LVI1RtIY46g21q3GubNv41dj/KrXs5zNftaL2c1yOavlLJYD/33LXrE4FwQ6f/ptKXMxpkp9HdfMzATxasf50BDPz6E2F7j3S6+Vld3YyHTWNSmSWt1IKNKIzrJa51joSb8f117tSx6kTE4E7krsesp9SLuVwI9Q2AKRkRManZ8wZqDg6ZxYbLUNhG90+Oe7N3X/u49m07B0sj1fKOSZSe9WMdgLbiwBKpRYwH1xcAUDGJ5Hjqb1fse8Zf4XUObHqWmYRRGlnHgLUw1IEvGs//ufdkYuBhIGIq+dbfv96WEaBdJuc8FrWS4RK7mUmpBC/Tf5778B3Pb//6fEOcDgx7nHIsbWrKhtxEaFlCCgwhhRCqIgZZx47/2h12n9k2NwlmJeS2LHgCgqgBpNiCJKE00SmFZtqh0b1739pmgkO3nlT53+vfS0WIbxr41P4rADxAUyFBy7uEx/6OesP+wXNd71FEAQkNKsNdYUY5JNTEzdmnv14w+QYWaYK+79axV8wKDdguAJ3E6r533e+ceZ43LhwhAnqDBBISLogyAKqFBh+IaYj4sppphCgS02ZJPbb+7/n6+374XW/T/iiIgtIkITmoiIiNBEFE1EDUQsUcyUKFEDJUKwvPsiGASDzsNgMD+d//+vci4g/b/PBhsEBAQYBFiqgVUZWJWBgaUOMBgwYMCApWqB+Ln1PXx37rXP7WfEiBYjWrRAIBBkg0CUINkSZINAsAmiXlKiRIkj2M/E61b/cDVov9IpgqRQEgJSakJtFrpAULokBBBky9ebSfq7V6Yo/wy0K+BXjXyUHmvKMUdC3xnlSgX+E/IydoMx2sUKXC6ovNQYJ85op9WpyOS3fjEdvpfVu1YGC0b3zS5W4LdsFr09kSu0FCdPXIw2ri34KqOlrb2A4lsmabW3L1t9Bf3knA3/i9Q9I/PmiNEuVicS1RJ+znW5WoFYOMad2EWxQD/5mzr+wKRcynqp/DXQO3z6lIwKwWD6ZnOke1gkr/iEYyIas0mDm474W1qEg13hroSwhFSoShrWzWi+q8+JN3TX/aL39EVZdTor1TivB95sTSVCfn/AeBf7PWtInnTAghhw6wFJG3zX57PYM4Sjh0H4qviksltovsR+kdJ2XatFV0/E/7Ah9t6KDftvwFrC/6U3cZs5ChYY7wFhISp1b8ZJ9xQDSZcoJmpXA/GGgCpE7v5a/XKkw73wz5H9w4Dx8S+7NoLwIEhYJXlvn+ns8iVxn5MVik9dxrcLecnsnd7jY5aRJ3GoqT/4SkwN3qTgj8rDMWZ4nBp3iEGT8UqeGrxL5ysxDmgK2cFK3EpEc4S1eANFlhusJBYnQ4aRxvd6NopjfXPBykjdHbw9kOi/GYdPHhDs/2Y5MuaBxMM5hVagnIOI9rLZNSDgP2lEznrdyEKkMFNt1aP3221kOkooS8FBjC+Lm3L1wIp8DyXy+k+NM13YXh9LeSH13C6kDdL9ZzpdTrrX0PIsdQIz3doiYj/IeaL6kR8J2IjaEAewIOy+6oyNwGVTnfwLIp4hNSQMRoDZiFuXUmZo9eRnt4QQdepGTEc15K7G1OaPrbZ/MM7IVW8wYt47qj1Eqd0qqAXSbvzZ1UCiB4KZv3YDpvPlk+oOSHVo2uLr1c/BU33W898xgxFAxYVWJCtjthp/dpKjAupGLEJiOL8lFIq4LWoPD3019r5GuBOQR3yp5etWejdzsT9LnUrREU5OuNeVrKQ3i+09YoHE/g1Ptn73UEKXNyf2EPJkCR0IvJQXxzhm66HtF84UmehfLlHgX6lNAnhTDr0/KLywoXdgyF6Hvlx7779lmMENXkRPrvymoJf+3d2XFwdurP7f0fs6tU8t4qaGHPWjc8w4Gz3eTs3h9H26QgT67Y6flnhg7WkGc1FabpYRSbXDYV2Hk8Kvvrqm90BvuEYWwWpqR6OuTm06V0aib5jRHcdi9HdL2QsRFmTAxvXivGtr8yjBK3w/m/B7zBRlDMv8yP0xgv2/kFi7F2VGmxR3T+/qrumwztNfmXg47+nnTzv61d5hSEZ3YvVATuLOzdQREhDNNnV5G1OZBz64v5/41Ffm44N/+OAfPtyH9/3w+HOAnEXkBN4RYh3NkjUcb/WEucKubthzwJxCCDz+HAPMIbmFHleRhdxtq9+FPLKUb2Grr3OBLObQ6rVugm+NJstpfBVBYyJL7mWsWqgKriFrq6yZXavFHgcj7RYQjZxfX0F3nTodEuSU3cGAAd1/IxDbTdPjrOmg6jSETf0+kna/xbw9pEZVCjgxxgEXD6wR/B1YW6sxMEk4wvauwGmxLMoz06QNT2/CPNI8wLeVILQChUYQWtCfJ2I3PYWYw6/dLiiPsAz7N0/Ewh8uZIBl18ipe8pQAugjSrBIkZU7eOf9RZx/PnvdNgrE9Y7nQ/v7y4cWLQi9I48PsROIuZz+PFPZ6bsV+g95r206PVjR9GbNQ3vhWpZFAppcEQUv1tGwahOnuFCFRkEHU5wrm64Kg7cT5lrRHpDtn2WoX6kmDSgDv9JgGlAGsqIaKDIHZXSuACdKOppHKyU78fHqFCoU4yCAS3V4FOsAcFoHeO0GyPNToBbmRKVO6viipA8c7ec6nCrih/Oo/AUYZ8vgpT7e3qbXj+lt6tvFO45/oDfagf+lDwP4K0+yixbt4UOuG5h5yeIn/Hv4h/X3kA8pzKeIA5fLeKTDlO0tarU8o9boU3elZKfypqf3CJuul649+yJZV6xc2tGHN725WpReCkRg+hX3iurF/6XEtI6rXV3Lhf3VQa9O41HXA4fOZnlev18kuYc0sQ3EvRewXX2efoPKxUAdVNXZHWe83kvdfdUNxB3+rFdv+ZN+QfQyj0PRS5eusQG7J2s9L6RTHNuz9Y+d0N7lbE94fKgv+X9t9EcdXh0MBrWgRqN7wVEHne8oKg+pqntJc0Ke8LVo7PZ3lOYRl38359ZBhvvWclXKYgtf9umsdG9bWelvejJc4+oaQhdGxZNlxP2EsLR2jMTRZgpWShs/0OIQpg+I9iSos/SrKmFxUjQodlJDehhq2A5NZwshgmifGMk6HbSKr7Dkv0mKYY1v3kSVVRPWpQ4ZVOwkHZqu9MnwwwkFnZYzh/QqkrNRPtQLgxxd2r4E3dNnKgOE2iC0OD4c1R0skBZKy2OxLqm9WIZr1/KshHJYshX622QqYQyj/XRRwXE5mV318oSmE3eMKi7Jqeo+ahdRrjz70IBB7muj7knZryQ5waBThSr2OkSohIok0RvLNRXRh89xMLQ3ShrZZ0aQh4f/270s7eT1/WT/aG6x2jPsz+iVvcG/qrn+N0pNmtVTgmXdUNm3Vg9bMRzPKD19opV9LzKoPnbpfvg99e5vqv+oo4G3qwdzMXizMnJQYkEMKzEUGl0px5Cx4RkmxCOPmV+gHgYemjyCUJo9uym62o882pj0qzTxLfrnY2CJCTBvm9WLRSezmhDK2UpV6b5mHgIP0cOUDzJTGBjTDtuLesg6ixz0Cwt06McW6wCZmqCoTVJ7hV1BRUF8PzN6yEaTqQ9FUdZucRIShEli8XgBpgg0MSyY40YC71cUpmF0JNp3KWCR+pB+5kUD7ltB5HAZEF4ucLE/g/Or3TYdLdZNrW0aFTs2x62c+pa7CEH9pjxkliUkNrI85XbraihK01VJO3Wl/vDZGPy6kQsTFq357spxoTwjNR7VVq6D4SCNv6vMuj/fbmjqS0Ua4sRe+OuSXbrbxWvrOQnQKE81hbX8Wlw71rQcErZRFmNw0YLR7NboTnxRIxaG6JlLF6LRmOuPtvDLFljHwm6w8qTujuGmUTIhiGkpabj3Vw3XkeXVwemHIVrliuB9QOELQAfi+yKfK80OR5NoB2mpcziX2melm7ZsfYEL5CsLXXms8eFzd7FrUHgjCjKcDeJIHupeWUJfDr5IKn7y1JOThcmSlTohnamxGWuuJdQNXiCHljuaF+h4EX2FIHutiCHQN1/CHQkRmpVqJuuI6CwoRSbJpl1gp5eUHKy04ZVYGAjuACjA2mN8+A6qNQFLpoMqopEEI6DVHE+Rrp7XVFLzVa7f0HaWSza2aChlBRVkGYVUYQjarl6cF9G0DMzwtsl8F2pZzzs0w4jKwrfmEmEdtFt3mI9lrRso3Bmbi58U6ZPG4tvb5uK1wbm0iX3cAwZlTfyAN+U834GK4OG///sCoT+bjPG5IiPvsbYiPjmqwHGwaCoSAZQJQbvlvRJttxrKpJ7iSibb1Bk5X89xXFSmOK6DCGIWuEhEo2WT28KjMoHSVDuVLkdzXXsNzyaGOgJt9IO1mQQl1wjXpqxgW6bsRrLjKP6gla5I1QwR91Ib0/xP/BbaLV24J6WZr5DjRa7m6bubMj7JLTmlXt70HY9wnhRMrjCQsRoS+1FPKporRGmpztwEWX6nfGHgDTTh0/aFmJOPWcZqXKbh/31CWsIWEyApLYpfmRxl1IqOualP4TOYTARZDMDIx0xfhXbIthla76bhrrRXii1XKQ3tt6cD+KzVgFPIDs62lkUzndTuZJcCwhjP4QZOyQ7ZGy009PIhly6X0jMVED4HHuRAGALiGVBNk9U0lGMwYj6u+YiWKvyZV35k2JPM05NXylLF+6BANV6NRKsEicsSnXWZSibOzgaj6MSu8JW8XjdlG8a51+jbbtJkUJiPdONnDUuzCQ5zQfcUKHlPo85Hb3in00dod8Bi88uuww0AENQK+TeuXBL4hBMc8gPLVyyyM2HIjh/OcDqnvoUFQX+aBQ5rncdfbVMu+Rjk+wPKVZPcDZO5k5mh4rStAxuP7CWeMoGzIcpjV3gvmcbi2jUjAQ0d+oj2ovYod0xOOYZFAtB+/4A608ZnVM6GU5caWytl9cuHejfJuji4RErDoqPAkaOVpytDOHxC1b6SH+zSIwg83b6rUsEXGefttjhiUCtZ0WV9OthU3nw5C4k3ZTeG7sTFDIMQQCGZXlN1XIr9JqwgDIVh1L6mgdOtZv1KifEVgJWerWe6UP88LwQvOqjf1GAAXJ2y1clvk2qNcFeXqgTakjdkAVO+Sq4JGeXGvipvG00cL30hOXMedU+oyVO3wA1PWa7J83B0lK3j31fKHpixbsyN3khfa02jDdZHNnIliV+5gI82TaSVR5NTOEp+zN87iY/HTo6jv/wcBYoViYq2o5aMy2fIgRStrTvZXNtebUAmI82R3b5IhlQo5yqLiFr6MQlF412Vo1uocmbvu7CZxmzVVliZsraZQnzFDsVAai4z1OMfCShbG10Qc+NoIZG5UG+KsYUIBLS//+YNYMKaWBcoG1s6TommeXO54p8bPxiuQ6xlBabO8Fe+YSSfPrH7+gaNNPrszhVE08KUmCYQognRz6KstSiRVjlB64u38fqj54YyKMXaGz5ZWEEAyyOHvtYct1oZjTr9m+Guw5u3VaGe8e+aN83nS6NTtWm8QOqvmR6NTNSbbj8AtEntsd5O5X6oaBE9ygRXbWVE58B/yEj5NvWeMRw2i/SQqNwiX0s5BogJcFUKU8wCMByzxW2zTD09MI7CFDas1UTi7hgxyxqjboimIEDzzw2+I4FBqjpXOzbMSqJ2YLMwLmHgGGoS+3fNXzTXFRE1CloNNh4jHkSgRdl+XP7GgxXYu7OO6hPDzDNfibPa/qL10Qj/hidG0gGzdeVPjnhrK/PXNfz3516sDhVRXwvC9NC+9K+lFAZIaV7SnW7RyRy5ejPubYnHD1Daz093iDll1k7hS7pBvMNpwoAf2GAXsZAaqHQNLsmDiztBtHr0YSyaIl4TA/1cS+Y0vdnuvYiX/oGCI6u4dAAOH5GefmDtOx7EKHN7PVxp4oD/ebylSDRRJpoNLs1lZY5pu398wadbq0mEV8M1S7AuH9Vt6LhJN/7Du3rmm+IRmMhnhgEhaWpVqZPOIfO0occ5UzBzWibZWxmZYHay13lhKs9u/CezvqasznqIMVpsqh37nfXiBe3LfHOsxBRnqnzOlndvj3+c9EU80OUfDxTblqcC1dvQiPzZd08n4k52GTR3/CQv4n2W7rBjKmnbIu6w+On1ddTmw2w/jHXjOOxtINCp4vN/nRXPx23zirRt6jO06e25/HPgaxibus6eD+xY0c51dIhn+sGZBtlTb3eJ1AGHWVNZNadD8wWV8ExuEUVf2o+1o7uAjiClD5kX2OT+GA7hgs+lzmJcmIYK1Avj0EqJGWc1KhNEkF86l2TVYMCPV+A6vNaSriFUMcugGe0swTSC6lkKXX7UKzrR0K4j1Y5dVLMCWtnhQuA9OWpDUC5luHvx88CvSiM2vBKOcb3q5CH+ZZok0FxQbULFdJ2/aPT5rAEIiji4svKDm78zgQYP7VJHwL0gxUIOERDG+7Q85AvssLXQVitBYbIk8h8K56Aja2LOfDYq9wdZBrJNaG735di5/c4N3kOQHgU1Kp08oHzJjCR1j50zk31CeTNAZNlp1uIRysSi1Hu5dcklGG3saK0gjOjXXgUFTpL8DiZ62j+VNbMBweLWuIjO52LmrJr7eYFEPNU/fwl/o1dNLlyegrbslyQHuP7R58WYzeRQKpgmXxVMm7HCSsYTLRhFc57IDDkWH7SDjlvclZqnLVbK3A8v1bjCR0xNFWW/IZTitllkNqcuv2fB8wwvND6KddgXo6ATW0pWdiAZpQIN/SIgSvFf+R7KF2U250NTzPuVeYAVj65rQkNWt0G6fq+cAWIGoN4z5Lj6PHkO7A1mkYhjueaeXfWwAtjkXo6TX26HLEdperjEoh2LgT5a8ykzJlgdGxUzXCiZBS/SC8VSotn1ZkZcX+YezZN/plbnqqdRhZf3KWpOwg4SlwrfKVXTHpmT9oC5q8GO5M8pk9/vMyPs5mB1r0UYXJ/zfWMtesf5mDDIp4qhmY+FtVoqQ4QpzXxy9D/ABbLfp/Gg+oj9SKdMS0xstcQ6hJh3nlTsMUq6pV7FWpBn7fvoA+vKZCTVrzhciNsppFwYB1kDwt152Bk1pddxZ0Cm8DwrBWouoH3aUdpOz7ca9YulZ+ClGodjNuIIvkmzFgc8O+i0qMpioxxmdSpjKJgpqHUh0o+80Hwfq/5jF+K+NNNGu8MVF/xtMovAsmXbuM2saJ7ytTE6cAPXV7htxe8aiKQUixzUvRj2tKU+qpY2tZpQvHu7l7FwQkDHw/EOsjqr5xiIbox0dKq59nfvfCuca4LOe6A7DccNxj7bcU9QRyJW5wVIYyURRzjRst3U0duJed06VJSNsFlxHLA6zSOLuLwfQt4Wt/TbBLMcQkKciQEt9+u9qhLiTNo/UrziLTOA/tvfMlyV5pJ2jAJpFQ5QH8qFeTbQienfc7yaeDClfZwK/JeP4eHrqPvjZTpEnYJc+vPeM7sDFtaQr29T4YoUbtRVCbVFIVDiyRfDYQABjWrdvT4obWrC/HS+y4R2E1vx9skQietvJtS9iIcqU7rZVSZtJ4wdmUGmFsuYJDDSZyoVUrpfxdoOjMZ/LFmrdEC5Zy/+3p00VWDybqegL8JQ40lZe9IdfVA1u7KDGod7JsgVZZxhTSeOD+qgOVdob4qhGtGiMWK+bwI+J88TDdKdEmzqv7jRNHAERgbP6eZTffqvZz3Xw9tBH3Vh5oSHRbQtM002r2fGqCqDmkYGg/NpHu2D6f4x8X9r7zEAm6wG3+hoDPs8/LcFZs4XbaTYEWcEJ8a26I+npDw/pL4mIedNzauL/8YoZo2mupkZ6y4bjmPzP5hqgcBIyGSWEvVqVDQz9SLhajtnbp1nMq3TpxH/hLXCkI+f8RZ4l9C8+0Xxzidh1cpPESa+dlELmDQvdiP9Aej4wjGN4o8id3IOQ7Jat6x158jRk2SaAEiBUYUuStekJ4tBaQ0UT6CLsM5I0pAzPPGJ0WWOmLtsz7fM9mQ0uDzZDqyem9v3fXvvFnAsHHe8lbkSwbGV3rvRBzZAfwcsK9MRbySyPPeq93XdHvO1SE31NsZ4HGHyI6AiF21SOe4KhlXX3YBJpLvOgDOKm1lNO2SVuEvBHDA59u6kTVDGn1/yIueDiPK6tfonha9UMAopgWFM/TzbI/UYGa0XY9xybazieKPpkk7Yj5ygxd//cGIdsgDAvz1Zx4QPUexglWSUoN0/sTOVdzqT1jqPDz5lo3QvTbE0aMaex8H54eWnkr3J2fjKm3V4tVVDCehwL3Sys/pgJgVQLoMLYRYcCtO0CXfCVcbNITQdd097WOwgjtIdrCaZwDNWYoOCPpyM7AEWyStULXW6+hnYmG1bgNqOmxUrcQLfrJIa0Fdjc7S56gkF3S9MD04GU/UByYwiCR0dBpXdUl07TU+CTDqk34aPmsEScB26Yhk9l7ofSKVB3riyZnjCEQqweWvd6zrnzSMLgnjsuup6ciwC6OPdLWJNYtE5eZL32/b12IXz5MSsxdvI6BejTyTxPfpbbpZhkOPlWveT1YVav8b0jgVXjhwmXAmDlHZpuPc5vpP8Ozqrtd0UymFVzrsVTZjPTX88YFy6Xv2UBnIBW/JQbyxnsLbXbpsyqI8nGcI0H7ZdAWo3WdvtVyK1BAMubyNDcM/eCTwaJI4Fnan9yrQbA1GTuq6MUUryABGa/Z/Gj/Zgn8ZnTzresnth4n6i/LDFCA9c/AuT2Y5/XIWYzKg48TPOhPtzQAjySne2OYR1VugT+zML0QKhIRJTnnMIhcTyiEIoIUt/rpMt6J2itR0lrCkTz2sq9bHN6D7PyTMvjdsTZXuQ5mmR1eTTS5O5qD75U2IeHg5PnwzSdUTonLfDMLdt2kvXZ2py45bgmHvz89ubgLMupOkbOvv6NFs5KCb8xf565PsmbPs/1uLapeMEA7enb80bCaEw8lrnqQYDFMTN7VBe98C+l2cO8Dd1imjtvzIjRnFvtq5/tEVDT1OZ//g7ZBeVOqWm+cDJp8p7p1aH7dbozg5HC73p1AsPUeKBkjCfeJOT8E7SbkmtyYrtX3tfDUpAYWowuoRae+M8574bpn3oiDLljNNsy1Exf4maEOLAD7ds4qv/HCheZUSEGw8P8Cy2qhFAUKZKcPD0X9/OY//2N96OGQsIbVdfS3nu0xnnQ7W5nS/1z6Kjh1Szs/BDmzzsVzrv92k/sKQWdc+pMuJGnr6I6Vvt7G84MGVZ98QCr+5GZwsey30N3MEiSDTk5tZTRoOzvWkurlQ6zQ1Z65U9S8NndTOiSzCSitepiuRbzMouSTf1uCCevv0vese2/vlGngkzE+INVuPcDv0bGLmETLS6t9fA36fksqSLZ8LZVXaMfVb8TNWfN+XzWbgjkPShFleZtXdl7ePvK4SZxlRvHoa9shjHF21v77uH1S4Q6Z9EINFMn/k+t1hyzY3ShzGjg6qN3J2823jOlOEZ3DM6HprVlEtXcwxJy7tT6M3Toy0djj6vngTIeK5xGr8iP41Uhms7ggX37uE4rwdzjh5aLg73KHD2iVcDDOFZq+3n4QO5tw81YOHpjJVLbn+2U/VYDPSXxWDhkvZsMvL3Bqpe/Jd1aGtUu6ZRxdQ+4MUL3h2QreCpLH/Dpb681ccngzoxobZKjw4h+8PKi5zgtldW+V5zNECOP8Poz+NxKZWfb5fay/f15cptvSJIRAyw+wwS7IPWfJA7MUhnRLAt/fJRTzXofYNyew2Z7Savle4XvohIbnTCp+xs4rkagjjFHksnRAi3ask/ude1RGvDiG1m/Sm3hgHvO9faQU9o57awTBybOkyXiZxY71vXZuhpXzJRSGwENohniQwxujcoBdtttce9zXzZiRLIErJq0Z6EV7lEy2FVGoIi5f7qHiUpN3gkyjUk4X7eKgGTHoAcAFmcV4HZIbkAypp/QaIVQjGzwmVtnQAqeH2Sk5QJEFlohSCyvsJYeckZfUKXWC//9io8GZNGKEvR59ObLOdImZknSKsp76wVjV6DAB+ZZlQFcKNXF+EMG3rHdlfMXiJa9esAgvRBWpV5kp+Swg4oJ/0PechugaoxLnPnprYhrpwAXNIKtYymPR/rXWOOUOUlhx+eKHAvIVdoTbAgnjHQX9d7nR7Iu5iZB52E/Ik58My1ylmJr2RmMUbKkdsuKxYFS5UafBjd43ULaKg7Y+bJ2PujjpswVWu8ZtV347mCFZAe9CVqQNM0T46IK2zS4JmUXbq1tDIFZX1jgQcFCXmlP2tzxHx5yiOPSOKHnpVpvA6Sg5EXivXOoL8rp79T6DdVX5p/ezfQlwo0zexnMY3auc14Vd3tVEedl3BGjYwsIcPTspXAb2a69mRqj//ad1YaFlGQUjin8OZJePcZ76q7veqo81J3VMnUMnIF6dcClHQu/r5dqKJ67k2jE8A7M7A9DZmDjp1sDPfx1pAH4lqrqpaaSXjPPqlsnUe3am0sV5UnEPNiIH5n655tt4Oq5sn2u304A7odrZCWHGZ+WZWrypq5PkSRVurLddMnlZlFARFKtrwAoJm389PXHpUPnh0MwGID9i5G9pZcVRTZ5naLYc4BjDqguOktXv3EXVlNOXIn46QnvP+6UBUEa2w87d+lpL8AQHfv0N0D8bW8RQc8uk4D3zpZIrIq87dusnpA12ngx47zIgszMlm3P4mcXF2Lo5yEcxssx/aqAsB9FxveZ/G2Q5DjM3mmQWM66dA5GRYWLySykYwO/0wHAnAVEBsdjP/0gSNjXrDsFw6ewO3x0G3UT+e6nHM/VqE2WpX90R3ZhFw6tGH76GLeKenBb/Bm6hdwMCk44S6XFqJfNPAfeaSDrbdeK8Q2bUUid70rtpWOTjS/z9VASZAnov6wjCzgV1kXFjKEngdhWQLCtAjcRsjs1mYKfNMA4FYDwDIPtB59B+yyKMHeUl8NRkKXAhPoNoobbARomhTd1q1sOiFvtE2RrMGz2UQ4mkXvEWnt77/jTCeGrGIMBOS+Rgqwd7A/nta6hGJLnvNUgbQP5S/PMN64A+Q0J9uJbBQ0N3EPta73z5ilKwOp36tSNgCZTLL2d9ydiApJ2rfEq5O0exQxS/vxunKZ4rzyxBA/Ijiyng3+FdMmNQv0ZYPaIXLl6g7JNzzzDR3uoXJQ7Un6wtuhE6pHZ8HS3vVc4cU8Uu2BcbbibeNJuYdbSK9WZwB7BCos7qDWsJPkNFF01LlqFaBSMYOrqq3jXiRiprZdyC/0FOHajjSsL0bDINIB020FPH0bUjEeoF0GvspL0QoyepE35l/PUz/2KYZbByov6lEk5M9MG3e0BhdbQNI52FIeYJnujUKvt2ptUSm+Ek3UzMg2yN6xxQPvToTLXobc4A3eAEPVsAxoME57GL1FMcS/WyTDU/xf5Hw7M7YCzUdQnFOYsaT8owCmEBt/BLkJp36hBjcPin12mCa2sIUX9yeyWjkM+Lm6HnyTeywrs5kZui7ar5n9M/YrCh8meQiCCMcCNjVc9BfefADKg6FMCAH7/esvYbb3EUiFDUORSMvJ2iHWfyj1/abm51Q58Hh7ZBXWNR4q5WX994uh32ib9cLtsXKe/gbTuvZB1vfzyhmTcoqqXtau31e/6mtVvsjLpuisPvYFeElRUPUcCPRiB9tSahVvW6YdTBc3R6eWmoFp8NruKMMaexE/5ObK27xdD7xLqyNvNSPq1Ipfj0HyB2vZz298d7jUTZdvd6+BNbEPU9xteaa8Ofssebu9rsG4fUVAdwX67Ry6F9DzgephpPxmtrRMZLtCKbj6mqmiDgK875euFiaQRPpar56latxAtF9xYS16nhQSR9oatcYGD/DCWLpaOJESamvrxqxV4w2jtcuDi1qJS6neVhxebG2XZl8z2AAPIGyzmsJ40MvzEihuqjav1bstHGBtZAXGA0iAYO1kKnQea7JYB26ilhR7COta5brNKv1y2ne++1HGgfmQqaQRtClzvw/3OIHHhtwgBvPTrPrHEP1lbNaSvwxxWN4bbup7DDfb/5nIsPiDTcK72ZSPEuCLvUWGrys+J4xA8HxUSypiJAIsoOVhFfA8ANJqjAPImauKDR/ngAvx7tA/0emfD31/EAUvvguc0jb0vDBAw7NUlVZ/oMb8trSL+hGArBOB/lAU4wkIrdaQFD4+VwsUY2DMzer2YS+yGQDxjgyD4cUumhWbeHCvofwtiVi/M7nfpESL4b3h0R8Pktschkm+IgYynF/rjx+0Z3VF88f2iKuPs5jmuzQeOG4q/syi8qhrjujPB826F/yEqomXN8WCLjYLItFmHuQYIR70xHeDL1gm3i7Jkyp4orqLeCQAYaoCwEgdTuoPoAhc5LcF/8ZRQDFbVUkRo4FggRk1eQJIpj3CyEAYEEYPlCTMjzQy6gbUWeBHHBnggRp5P/KoHpae7NWf+jPNV5sUcXpVwaSfda1EslJE2KPrR/SaInWuH9TkDRtBt632tyCnlepcn5Uet+0cBzBVi+Zp2rAhUPtNduCS1neyoy2yv7Hqg2JCn+AuR7Ig0hbw8OX/z0MhG+U6nlStO7le6n3Pay+dlK8b1UVd46KOmSo7THxg+dv16NSwGiD97JPYGCUSLa8M45Tvl+SpVztJxm0xfV7SlS/TobzoypCXAed5WVr474uRTU8jO/nnp3KrPe7xRsz4rIHHcryFV60SYM3Ni/sf8Ug8KOtuL5OJ+4FhNox2O/Z+ZSg8Q9heGN9qrrYzM5ViC74/wfM3+9BksEXrdS6rmtKtR1Jh2l5uivJoP9YnuobMspIhcUxZ25CYuRRLLohNAxGc9+4oa7DiQm1lIrEfa0dOiSXA/kqNYMq0hDj4zZ/B0DHTj/3oHfk06C7VblyS49mS8Z3+pMn9ZzXOpzGmTt4283iG6vnRiCpcvYdg9JMWxDGkYPHLXo6bryWha93/TFgh5CPcQ1x499F+UY+CY8r59c+41iCv0WuJ5EssHLWmG+78RBMBOT51Wz78NI8xdF2Xu2Wc+yyix8PwLT1WRk1/m0VBs8U6j/zmTwmOSS/Mb/W1ZCoiV4mjtpwNGqvNpzc01lcZScC/oGrP2YRb6aO2SfT03jQuhr8ukDSPQomDC1zyHAC1ZwQbG3Fr0hFsLpZ8evGSMFApyGY0G/6Hxv7yylGgjShGFgeSlQxEnhk+rUPz/cnOm06vqN0f38rHj5DG7rghBIcZCgJ+gncVBnB5RNZivSFg5dwqr9tmz9Vk8PEr2Li8dFsvH+JCHwUuNaFmjY1d6noel3IP6/xYb+pkQTQjbBCpsvoAGgZ/0hPd8xHTnBT//DARZ9vDRRDf+W9BHjJStx8pxAhdamkAb5xotKrWaHm5mN1n7Us8T9smmbrZt2+jmPknMMyPpdgTG7wRMJ4ul2J1qmyaHBnpdnwEUKKDyvkqQkRneMlzkZfVUdHNpGxY5cD8Z+bigiB0yW7454vSKA8Spw9KF3v70wLYy+L4J5tteVqKVdzhG4KYTr1eoDWIr7J+oYEQbdhbqGKa+e3CFxDQc5pWOkHyWS5TNsMVXImSfJlOkYCHmrDy5jop9AYuJ5434vbP1sA32o8ih6bqT+zzPZU/lG78555bDLjkvn1ffEZeqOtclPMVE4vlbpMV9nk5igK/B6+SrLnDyBq3YyljwdNad+FrnihPH4C5SnFSTia/2HmyJOwcNG/cHlPz8M3ZVdhHtDy57WOUsDF9rglF+fuBJuGNemIPfig4cmRz8IxhJZhLVfhOy5Xx1ot1BJJrJqzhWzJRYDrTE+clI1LB8B2aCfOml+kcaF6yzXqwLgHcNtbc3vCDNv7clusMv3m7CoA9aPUerOv7P6Lj608iR9now2kjNJy+rnHOonFToCcB3c+huwD9OqB+Khke50LD8SoChlUOj/ufXOSxyZzVeOgCIkrDZDwfHnJpHvJf9JNYLxYQfxVLUGC85XL14w7xXk0SRXLDE8biI0oUf+jVkuFyHvliIe58oigvSlE6zComQEm6DIWf9onPWErU+cxFHsWAkexPG8VnMjkVLqMR4aIPqWmqOPTRDOTcNk+kUfVAWVZq3LO5zeJncioee8Xpty+WdPpmV6zO5jtH0/5wUtyVk+EoLF6UkK9sV4tXktnLO/1B/Hi2C93dpffgveu9+b7bd2+R51EsPbvdcCHePZrA6ANyr3wb25l1i8ALH2D7uIF9Jk1j2BPOZikebNgTYHJ5Zp+QHnUKWpp4ypJ5lMnlbSSdpEkkrjs7WPeYyg+D0TEmbniWrfTti55/ek7sRViJHn8+KO5MkjpSH+/VPkjkv0ekhBbJp8xoMYvHV55eESlW96/JFwMFnFJwfOfY1pWy+eIj+N1w/jmrFoBm0dBTHfw1o/sZ3LTxZCxi8ocnYIIDzKZj3c+SVreXHuXA3SDVA7eYXzk+95J/HbFV67YCO+WVRs0HAQ6I5N43DKt9D6KaheRvFmYfWx6o85nB7iIqbmB0BxtYWWueT/DFmsb7Bu8EVU6YWXDRSeQSYIJUiHuyJve+8TvxwxQnA0NmyMKVIGlIdNfglALpXfFPBQv5tQJfXB47HisSaZEClMleg3acRDUvet5+S5z0+WPf5NeavJBB4N6gVi1Z4CXr960+Q3Ni6NdTjGLf3EyoLsMDSgq8mOiVDnQwUdeCuYXAvNz/gdcrA5Ht8/ASUvP3NJvFwG9v5qIiipWBC6G5W541PfKRbCzT995/2HVgH1EhJhvS3G2IY6yRqPGGRACjHVOZHwihKN/ykmhFQ64sU0DkJIgxBTbZM9959QLwrVn5G/tUtp8ymm/pohLW6SbQL7H5RZ3YD24P9HSgOzt0P6CnACEJt/kekEvznS6Vvl/c5TYLJMGD8fbhfzNZOzOX5kEqfbjcZoEkeHj7fuUuD+8/0e63bLUIeBMX5UTHxRqPn1N227ukBbW6sVcrCqcw5ydxowh48xcFBUBac2pyV7WQzs8lYmBSo/PtXlbm7VhOLIFmPyU63+ElIcj27K2K+g4/Z2POtad09qCEYKKfBZkG2QvmZU64MxKr8goUFI0uKIQxoPDDoNDmIDQNOx+BFdp8NMakBMiz5hzufJhmNKBI9ZhrAetPGc+rsZc8Gm42NrDhMLFfFopdr8jES1J0TrOyo4kMrdnKk/fzicvP8v8Vz0tjk+ub8TplUl1MU2CfcvlxArwwRGGzQHI6RlhvtSO+HxiKjyngfRZT6LBuP0QkCAw+M3SFFaZ/PqM/rtKxWL1JNtHjX87qiphmzZZGIImJpfM3mrg+2ooYoTD79MujsbSjIux/Mb6R2JgbXKzdz7EGIPF/63tDfOdFvI985fbsXXWls8Vv4TB4JHOdZMV9D/1AGWE1pODBt4xsiXcPPJzfCNH7gMLWR2kSnl3UBauG4nTkMQiS1x4bFx6IPTMYrsRxN360699anG8pcWZT2WBjInzbBt0JGUZKk1Y7sun2jExnns/6m7sN+8q4EZbdQ9JI5SIIbmmE65DWhec22XzbgBcBtcbLAPy0P5vTy8RlQlMWz2ibEiU8J8jf4LhwhgNg8Ft4YC+4HDUXaNADR7kBDrAnaWxKyCyi8mKslS2lk29UQv30m0SpbhnbDMvXM0ZSPqoUHmK3TPh5nEY6YyqLHoxa/WB/LBsf3IROdeU+iK9kTs7ksSa/HzforbVHNVTm2ktyy+u7zYXEeufx8UROvO/N3RW1RAjNMbflyVMuYlkQWrFGAsMl1nl8krhtYH0hib4J+OCpVYPPGqqLlpdAcG1Yoi9ueyQPaLVEtYk4PorJ57okTCqXfl/Q/qEOzJ3bB7iUxxUE+VlygHqTfEq0dO8PxN5JLxPXecQzYJsH3PAk08y8f+cN3qBv5lN+qo9kYvA9z9di4ZmJDQ2R60Bv5j8cNDS8nJYGzygbjq3JrbnPL0tUhhuOTwA18STqTpKUes62Ge1n8k2rfwetlM3kJ2Fism8LIEWZoS+bZKCxYeCkuFMc+WZDMXXoyxeVGIf/uCWUEhXfgeYdg8+60ROnK00Hx4V3PgpXHYoJ6yO8So62nK2ZpLRzPWFn0xa/WXkySzj9YhNwisW6mY8EaRBaHVxw72rBkpUcHguz6DOVBbiqC67L2ghJUCJUwGi6tpU6B99J6ltBQxWTseFuMJaeK1nOew/k6v6Ba5Pv+kWPpLHw+FN+PWXRkC+GlomYqcwavIGGt4pUBbmaTh9exsN5A6akX4/T4GQ6QcL1tDKPW+9oh21GC7fi4RaUDEOy4s2zbZWj+ti/MMtKVs36O0pzaIMU8X05kWF+gd/sSZvxS6OV3Ryrt39MuXl7vca9H8Nv/dY5/7dJzbL4ZNnzboTX1KWYvLpGNQ7KbfH/XXM7Ujrb3Tks+ocz9SztpKc3Us7025basYZ0k+Lxopj5HCQK9vsvML1HDeYRnqM3RlrA/ouC5nvjcHaNZuwpgzU/gisNC4GY+i9Ye35UTmmUBL+twkcAq+v6I4hre2Jn9+WuJsizOdpv9r2IZAbtXUbCp+zQQ69djChcEHnTU8QUmR+zN3yJIuZRt9yReGXTj/H9fgZ02RdHiqtbdgan4dYNjWnOY2yX7MWFIUmVtiNS9sttgIYT67Qth15mRt07XWxymgZzcDHFocFZexv3CE6/uJxZDon0hh61DzJmmdc0Zg8YuXFbReF8InsFXitXEYe1AMQxzbaBaDjtqOA8ed/mF3oSxWrc0YQt3ErSquF+nAWZh4tl5k4eT6vAUZovQdrZy8p1h29DLwMMc8OzxY4kPKltqwozcAcbGXutvUTj80ZrfQQxT1JhW5lnfLIDqPXE6FqGwMk++Kri7LP5Q2llSjCZtmCXoFOfYkflyAwzwZUPQ48xpvTeIh8TooNW2rAe+bKpfqb5PePf3bHp54FlOo5umJ7iqm17VMIwKz6o6C+d+H3h5Gef7rC/6Oaf8LCbBCcpPeTgFDL50iH3ivHR7POEo7tiPplqiucadoey/90bAkO6lKxvAf72ScaoPMLoWxz0YQHs2F8ginoUXiF7eS2Y3yjqcHXKSuhjXT4XXXM53Hcjmpw32oAaKNRtOSrhvX2zK73P4GdJyOpAWvEH1Pl6UrFveztLy9+TJ/zgQASqtaKCGAu5dw52/OPwEqa9Uudr7t/DfK1oWOwLn72menvVfbZfV+qYfySRvXk6jHUed7AelbyY5FCJ66+pqSFoW0K7IPwKFR4azE6X7W4Oyw4Z/lT3Ui/q7dm4IPbPpov3irguI8R2yz6bblVhCaDbbeVeXF7lht+wkEn5Mb3emguCPG690VlExAuzJUc8aATy9YLBL8144Lk7EgYohjy93/6VSQtnIqOCtnYhm87SA0D+1J/17Xa93Uza27DD/oeUY08PkemxHJaaAPuFL5H1/JfItvjxvyhzHC5PWHBUTSkhhWhGyR/ECPfAUu89ccemQnosYI1idfTJR/QROyhZm7Gqpzrh4qSvdXGB4oz0VvrTLlCyg2nlxRdqbiedTm6guX6LkBJXxoADui/I54dYSxvMkioakJrmQMBW4rB3yU3bsxym4hxl15eKSNCRXo6ue4LkUjyIXgKGTib6n+eWpE1/2BRCaarBMJja1ioyiVuzKx7oQYSVc7rrYEYvifrNDFIAoSQ3yB6QxPMIcjrVWSF297dlfuRUxuo/mvfyQqyysXXGTzPf3c4D3V0OdJrLGc8XqpO4Sq4yhlIUvQsMB60XhPoy+VuL8Q3i8nMryQPDUnOPqQc9phxfnMVHB+vF8fjF44Zt/u2GS/v1Y4+LP9lxx//cMrF1GWrYdVqloKQ1lKyqkzKjXemZq76180vxgRcfkZpCnfErT0+TDeD2gzUeuvQQaEco7LVa8AW5hXAcEPYa5aNt0U0LJepON2cNm92JrbmA6x1xBrCLLgJCA68ydDYfXu5Dft+r5RKe1fsgFIW2jU/fgcJCQ48ewmYtXZlyy/xjaD3/NJBtGmDYJ2flMzetKkmB/NgtYCu3EFyfjzcK/eOIFPJT7rQ1clL+BUs3Un0HtZF/1goFRGvfAmL/aCYXYjUvteW1Gqr5yGqQ89fABpWbOsW1QD5upyXQacY3xHnmN2vuhUZ6uQkvbyfTNex4fcJETDvUUoHnUZistMHPZPV0r9jSPOs7Efr3ybKWkLYT9M+twmty+5tVNdTJvohyKMlURtwaJQ1XA/NsHx9N5IYQ3UzWP4TCxoVclGKUFfy0OFOuNlq4DtgiF8EQkbdRG0LyYXm/RHaJv04FttF7O8ra+aF6doe2FhhEBEyFcw0t0UpqxQ1BaH9PRCObY5AcNFTCR0eq7aoO3MKnB4pPebxS1WL1z5dUTucKdyXIQDuNmB9pyYMWwZ5evVXQfN5i0bWht6HapZrhlHSnwideTV+agMemltOui6EbyjtPpVj0rljafeIcBy6mqH/EZtcMO51oNV33IiVp70nuFDXvwIFlBKiYS+WvVXDeQsqrp+aos1LyaNAkKuOZX9VYig5Nih0A8vVTmI6zm/o/ye5+3vX06hDgvSy1W1nMkYC5fk8pK+vQJirNvnLWQQ3W39+ABQG+vwXnHWE7YPm5dTdmmohiodzNRwQi3emsxDyQbSBVuxw3ttPhztERu2ViEIwXea/y8dsjwxAmmsMxCRpmHeD3+U9Z7YkIL2yXKcE6jz8EvVbX3+V5j729N9JNdcVbu04tmCWHZ3l6hW2l1dWwfkXQt2vBrG18FZFV/RVts/RO/YkKqDrhVL4EMZUBTBg4RMzBJU4SV0DOM2an9tJDzuSdcuIEf5GcEeiHgloBBESBa9Pyii/wEqfeKUC5NatFkFzmTJi0ctQszJGY1Cl/du78dKi8DNK3bvKeyU/TYUxEightcOLkyl+OdYhZ/iQ5ccnQxzjaoS0gJbbAeXLRz8BYK2A5oS02eQgoVXLVq0kECtoXk5/OxMkmL9PmTXGAoaAEnC0IwtQBYqq3ZsEYNpBzWWQnbOdj8KzimU4N6nL7IGRnURhVPQzccQdZnNaPMDAMb0LYb0oPo6x+Py/xbpzJep7Zv3CYIlrB4C6KuSYWTuGgwJUllQ+eu1YEt3Uz/l2M2uo+jkY7uu6GYrPBHyLwGCuk46Q8kicpHOUpWudoZqCE/C7zLPgLX8DfegdBfqjWaj3i4rY61KfoiHtIzGOfEcD9Vq9D52pn8I7b2r8MaZLfuG6AAFlJni0BL1FpTiL4KbgrLkEZkxc0wuqUSc6E02j++TwCLEGLJf6GG+mzN9c6Q9Z8CwXiZh1KMojvB3J4xjtivMeSY4EuDg6jLrtZkjB1HSnSbZXou4w/eineE7GdPN/x3HhGDtw9He20gRsFdY+m4C2/84kgzUG0KUN5l8ztSt107FdpojPyQDHIxlI2NqyXNgEYUNeLtCxprl/JF1Iu7+VM+Z5QVgjbNpNqKMOpSHAydWtLzcft9PGcfDUKYavXmw59DizDS+tCYHhxXdd2xszkkGI8vpgpyA/3JSc9hNpBf3JP3s5SltxxiBNpJT18eJcbIKfb//qynxHGVUmOUum/LUoccFSntsmve8VOb9KVc1ZjrDcmOAq20NkSiIp48CGmbRGEohZv/MuVvw6uUCefq2W0Ml+vacCr1QFiWpijV/ceO/UwXxyDyx2L5IWlMGSYIIvBeD93YxEopVm5GCNbj6nEykID7nYoWkQednjuuHouvV73ps2O6+mfuNufYhONp5nsoEVILUuAS80W4GdaUMRdVUznrZ3HX7TC3RsoeoEqCDfkaHNYFhsASKwIzfX217QzGSEYoGvRcB/6y/ongm3wg1RRfG72AE4/CYwxt10Pef1NvaFETQt7PXggVU5gZsWSH/xWMKVgYtYdLaTkoiIcqJh7MRmZpHgLaQ0A95pdFv1yOkmLM5Xzio8ub3uBdXF03NlDdfxE/6AL8iGaQWmxGZ2SddvWMj/Ma7CNzj+dXh0+Mwk+fK4c6+L0SNq/8d2JG9j2P53SmPwFLvCl2vFVlSR4dwndOCA+e0PVfCaKDp7GCG2JNOUY9le5BwTB6UjCQQ+RJPLcK3adsLGIoxsiWI5hMOFgJbvj+J+X5UgM7z4k+EKD9vsagOMtprgeahdzptBKGDxdU7aUlq5xswsc9iCke0/c7a65BYuOrbBPcnE1MHbjeWnd+qt25nFb/AC8+NZjq89Jza/CUwcXGXKMcv9EvJ3LBFdYmzSv0Jvg2kOGtstoXC5ropKFjEY97zNGdtjZCibGvw4zMezypW9bXlx6LUjHnb4ZI7XFDJVfLA7JJ5k77rVkK86rF/o8siu8cwDzEsww2lUA3AhkYF4J0jjAf6DXC9EtC5liTJmo9DuGo8ulFZ8mXkoYN4gNxhIKFcTjzudtUwpi4FjETst8d+EpjnYdUeBlaCRjzL2VociFirNuNF9DcIWbyiT79EUmpIOf1VjyfyqnACyYNj7qBL4H068l08k+8NyfypmWQ4qLAbAd3OvG97b3t880gBVfKiIQTQ01OEwrRiA1AyI81P9Ixu6RffaXNyG5eRrtogQKOV40MVWRYoiMmQbyHYknvvpYMYniMIXZTEVOEgHAu2DS0ny511hDT70wbJ61Iw0GHa4+3LWolcWFX+Vg6pjzSLOQr3nQKUMjgUlEWMEfhxwyqwevvzD8oS6pkZuFF/YdcgGJxkEkP8UBrfe9/l+TQsH69W0eK933shkjN09btmt31yXeuySaYsA8FFyQmokfoyB3yqTo84F5Myq//Zf8JirrwO/6q0p0TPo1Of1kztqygd8gzwnU1j9xvsqioVriiTxlzf47fvVTid7n2mHmG+SPkd1eGfmLvyL/Dqk0nYQInKkvzKT5maCpMpZAiNYIPodPM6hfUdO7hIDfXELPKShBrlwRCxCREFOooID/a1s977XtHd2+Fm2S8uKHonfev20/uqDVOkyeFt4G/Z7d7jPeCbR6R17CAD6V1rGl7YUOFB8GV47Vv7vglVe19ZvSOG+rEzS5hXBAVSHOcRXGu4osQX40RSE9OxtrgrZbAHGZLoG6AeMNYEzsbqLkQAIfJBqvHeYi4ioXCKU7aevBPKCgjqN4i999zGuhL92gfb+UpQzB6ElsiM3lvRSmnCKB827ewP5nsMwUxTf7beKvGGBjxlsZ8XP9bFC//yWtPF3bQ3gwjD4ml6f1yx+aoCjpbyoBTlsqVOH+bzIp28eOrpL35w6XWepeOPo0UYonvodY+exA0UFc0SFcuICE9VX1g6Ek0JIYb/pfJncxyPGpgHmFqDOWocSuMFRi+AEXzIMpAe8RX+/Qmm4efEwxskHMUgmUr7Iqn5dJD7rHbhMlEwkWTvD1rTx3GeYem9/GBHmS9O7ulfyIhz8Y9uO9/+RMT+cptEEm9Wcw4pwCUVlmwWmDZ9QJpJ9nG1dwM+rAZSIBYzfofS8Ykb3piu1lbkA2vzN4Js4RFnbeQ/VqZFDgq3cl+jKPHf6OMLhBRC6+hJWiJefebKWEUtuqg+oPxdMzKjDwnmdDm4aGM/z7iZKRWIxnQDVzGNbawoPQ7/YYrNRR/FGbaSU3VnpY8KEQ8UyIOCffNwNgtRnrUa39HhOn5tGRM2LMfQtDmELDZLwYus/k71nb/cCnA4sOyK2/5xUP2xC31fufqu+Ljdwv1RqFOYJcu47fHvX0R6q7k4YFN6ROJOD0dsEvO6nCQ0sssUr+KN5BfFcBCPVBIL199Fd7HQ6RxwTk3jvfR5lHtRzN5nbP+Hz33gqIhpgJwEnjGkLt4DN/m2Mgu5jTkDfKA+MegM8W6WIA5WepgQWypV/qaKzljgj6y50tfISVK/aTZ0Kxv9aP09aI6XX7YKxT2KJIrO6kQpSMtmZXn2RBL3u+8hQVl/btDa7+hQ9uHipaUeVBcxi88yLc1MoOYeHiEja+yZjPlawyfW+DfnW3fD9RDxxfkxjQYdcvWqnAkOAaRTMUDXqrFOYCxdzipIUKvOdK5LkDc8cmk6trxfeVSQ9iV7KAiZtJMg/isQuKGU9nRhkmWTZBSxz1q1Bfz24qfGHXvUO/cDi652ZBxu84tTv5KSjtNx+ZV0mnuluUjffLkbsO6ckgGD3aNVE5CyTryE2S63qeB0vg6l0G/P6x0OrmGWPX3wbJh+l85swwHHWdRM79cqDCoEcX+HaZTq0Gh3rNNb3QdxniZD7yyP+OKKCcXR2s8FZDuc/aOKK0q01tZJN5syPx8iQmLeHcRMgoSA9csUMUj1Ld3qck/1493Zskbdh7ZpR6XrF6kBgocUEAvNHxMCqoUcynVUflTKOUz3SYbyPzKgO+iww9BY54fzC8uU5v3Vb5fuqtnSbC/zA/1xJgQRLjEEM4xQMkM01ylH7ZnGVwAzmMzuQ5G2k15Y/Ioxtx5ixZnqQIhSnQ9g2XX4iUt80ry0qzPOZgecYFgxVki25gbZrp1IaRG59bpb007WfQ18gT+xsUFRax5CG5z6G7qMGKzzOUhzdvPF25d//nQX1b0DC0SmcKDa2K2HU1po7YmEeVNr9VlAulH0BVvzPP8AzP3nFLUP0tum0PCf+EL1IZlBPuPA81R1Y7qOPw8DliYFdKdofUEmKrVpVAsEohWUqt2pC0nevfHKCCzYRrc9nvenvXZt2K4LGH6iu4yqBrsu1nIAo7FgJy+oAhuFx9roth4YnqUpTTjsi4g59cdsq0mWdPQg/InRnOBsy3e4a7cY3RqUNr4kHRRnAQfwS7MbOe9IS4QfNgBNyzltKNme/gJY/6jX27cujfRYW2/98qsKX/R8GRmbB42CA+b2zs8k/zV31Zi6BM3OcRdxKcM6GRW+QzuYUoqqFhbxZVeT0q6e42u66r23dEhDBDGoGg4ttXYnfCVngVbHJS+YQjANHxTz6QaofIcQKNXWNtOmRFqILjvkvp437BotAb8qhbDl01kGIzakRTbtGdD2+MDDhsNhOhv5k2mmmn3Uzn7WYDPPzphgvjcm728nCuO4EuRI9pBjNivxGlfJZdb2Ak9rdQFKGNvsltvJbfcwQc63qiUO7y6QKl6UXr6CT08G4L0Rkas7W4x3t1xNDuEJG0Yf9h/MNnrFuxRwpiYy9g1Zlq+30PHDTpfPyAWQg+XgDIx+E20GFKzUMvrue7YTa5e3fL0x4f0kFY7ftL6TNoe5d49gusGqcWV+5aPwrwb8kwxYMv+Xx3DfnakYHnOABiu4YujAKxsw9KdYszXni40pnHTnPiGCjcl9uH04tbaqba54rfW1rX9MPTcKiK0h/+K75n+WKpy0WbHN6RirsXP+Z5mKmngsEmbboJVrA5KUeYLYxsvyj7LReIT+T8Uvmx89532g3K5mt+kMmMn3qbvUfbate/Kr4dLfbcx8HxjDDDStQgRDVpPpsPTAt/XnQ8Kf88WwKQmcvQcT3bXxeyP0H2HmcdV7NsdZ6RSPvTywIbi3Q8zEpqLZJJdVlzAapcXXi7lf0HaOgM1sf8p+fpzPi8POLp0hAUJTKa2vt5FSTep6+huRMsfYTTs8O7BKojRPAMnwKc2jRIRJx52ZwdockO2CIV776PySoO0Ue98MAxnVwCzFUVrj4JCFfaSaf5FZoMflkJ3ixgsBK8WzV8/H/wTPHMq3e0AU8RT1XEYra+TZZiXPcZLWKiVbwWXk3CYRC0EdEp401kTRAaMKvFEzixNI2ldyXiItbcZ0mVeL8PhwWCVUIdMPZoHbC6zHdQK7+gFrG6wuar5POMtoHQRJQWKEVTEG1j8KnHUhStKzTVAUJQTSgSSBJ0FHwgNIlYKsU6hDoJWibVBKwhxaDpCuUq6CBoCsFGoLlFk+AErA6iNeIsxbwEIlYH0ZREs3NfzER7oSNYTRAbaO9RrP4UbCqPTH547APkkazypPEPmv+wmoTHCdckz4TfaP7H0oTHBb9d5Nn5Hc3OshE2iZEkvfEzmn9oEDbKl4nsNJyh+YQ0yc7DLzQvaEzYDBxc5MVCQLPQDEJb80USdUpaJWjOLDuh7fjnImsPJ2iuWbVCO/CPJHcWftC8YlULrTNpknsNjuYbloXQFvwnSUv4QvOa5Vx4qPlLktZ54kEJnh9YqvDQ0VjeoMgj4S+atyxH4WHkYCIbjxlNA40KH/mVVSF8XL2yWggf16+s5hI2JqQk4ef8Fy+NvFlSHn4//9hi9+lpx8PLCw/H/ah5+/D+2LMd5UPLjm0v75Ye2KoMnu7YJjnXauSlpzOr3nlRWWi15wU5tWrHzunEqme6Vk606tj1dGzVAzuVuVd37JLMqW7pF/KjVUM/0bfJwl2Wx9dFeaZVE0nV3v3gH4ASCkpiwiGix2nWQCLpNKEo5Lg8dAHHNIcFiizUJgNFFFzHJKY6GuwGCvX4YdrQ1aJsoOgZ0QDHdmxgBLajofcCGTU6ELs1dyyhaEbURwpEFrfmLeG6lTsz2ffd3qGO5mKdUelb2HsnyCkaIGeU1I3I6UGv4OixzY4CFd56gzgOO3bYhGfYDXQwaxwdgqEZ0WUkjxodwgaq6qbYNC52IINewb2GTRIdAsvyy9ROKIqggKIVTWNSQsAmgSJgpRhSo4CjWGewgSz5mM4bKNTTCgxiKV8WzZG8CJsEojaciNA4YHXWfgXLoGg8mkvnjMksSr/feTyOKewFMqg5iEKu4FDEiHwfDTktGU3gF8WqkSU9S4gwQtlfzqAr5dzCZ0dCKrztWGVGVLUF05oyuBlOXlUhcWzTsytOSUJmFx/rkJn+F2mW0PYSypDB3m+KHmi9QZEdOf5o/Z0Th2AgwZNdwZOCEfYJWm8IYXY0uF3IAAdq5RaotIS3NaJw5jJn8YK9KMm3RTE0t3BSsChsRccuBo7pSNC8SYTan0llVzUo8tUAJ2lWSsvX4LYy7GXWniuKgAWEwhsxl5JalaDQhh8bOdA8Cyk8S7lAW6g5RF1faJZwGF2MRZQON8XjKfcDzIktc4OamlJxckFdYa9LZ3e4dn5waG3Q/krO5MU7TVigTP3QNGMnilo3O2O2Haunt+wd9kwR/xLef1hQGfnBT5P75HGC3Zqclafgx+lmTXYoWu0qIaNRUqGTmUB8vRe9lajNIXNfBuBfaWkgWQRxJQqHKJUm4eyfD9WCXSd43k8dDxx4ME2RWoIyeLXjpWAjz8AOqjwrG+D42rFzYAM7FkcD3DzUvITbiuVqQMHS4woTFFIuFrOiGIabSdy6YelKTfzjiZwo5Zu4tc5Yby9wucEXlsDruDDk5ziEDN4+79KVEt/tPBK4HZHx9zyShQ4CKKIkL6f7xOR6OOrTPo1lcEGwXHdVPmh3HDy+W1QmKmAh/RMiBuviPfggoWz7LKZKLTgZpQQAeegpUDRHft5JIHIwVIKnt7OhknW0e38TYYOcUYyIBRQyC3sh9UOt85m0Xupr0yOBySQyMyeDyPK6T+9YyhemrytDVHOTGyVkaO9LMwXWozSUaUlZHY8odhAK8INGgTBRg2ChVMXDKO8r63/Z4nEakbgw8L1RA4ePQpDQ3cBsIA+hhQKOBFbo0YF7NwOK6sti7ugARfxOsbi2sQQWKEQCa/7wzZzVhqpUAVqaoCTiCALN67wA+AZMl/F9GkHVfByTCuXjBfzPUpvFRO1CCUUrXSGzSAnI0oDBhk6Yjil5bYAWCnUkL04H5vQ6pSMLtIGqFxrDxxqXETmBbMZHyuKCq8zNSomcg9VPevNySPkjceM1d9XT3xFrOltUR404TmPDvmC0NfO45ymmBpKDkbHiIEckXVmQnhE4SNndkmUmCgcr6+9CqY+fHKdJHwQK9K+3JejRQadEwI8JzA3WPHSDZD+Mz44C1SxQgBkAbtTCsWnsy/S/QYI5NMBaBaBOPRTooMAFEDEH7KAiGLYGmPi5OuVjxuvVT4jYflqfAUxUwJIJ36lo1D2dsW0oksXcd0y7/9mJQ6SuymlUTxt2tbpyfVk5LlpIqe3A+3RLFpF5pHsz2Y/rKzL2Z4tgOsh0mCvbAcTbove5ux+9YfuQNqFPrE5GZwHXAzWWIIGTGl47XMv7mJOLzJ9/uRetWYMeJAqmChuqyJwEBo6PzJHAh0JmRKCg86EX2k+DgiRev4mWOvO6K2SJh6OGsQtQVLNBHF2FsSXj4wj5dIusn0bAp+vT4KkS51dMCXqmty/ThnCdBnwPoOmBq6SSgHFsJDLI292Z4w+jvTt0Ic4qJiC2BVjiVh4B5zc4NTdxPEyGAhOGn7C+IjKZR7wpTj/6GPDR7EThUge7TlMY86uPRLUw9oIedJBAo2RFr0NC1CW2P06oedORYAKBieN/Nh6xOBnkB+5ENTQkI+ZybA1H+VJpXASfSyLhPF6uKSZnUyhEmsNRY9tp3fZ8m9hfa5teRbFsuCTRjKbm7KfL/D4Rby3d22DEf3hpAxV77a+G6d1i7pGUUYDpwBuomdOJwlFCnDN0jOhmAJBR020w5sztEYjjzvOceu4dbgZNOMOxkovGu8FgM1HTnLbbFCbBIEQopKdYrD6JJTqklLjqtBFNgc4u/XDWOthkgttYHbQA4aAxE3DgXxgC1iq+rgZhwN4fP1V7Bj+Vp2SGHBe193EefqqqZAQjXPw0YPKdWpQ/G0nAcmxAJ3YzgnWfZjMvK0scJ963zQB7/bYZgAdgUkyCDVtAJ6HjMY+SZ51jfK10okvEwjtJTLhkjIfTCvF6b/cTjuVDnt6lHrEAFijKNEOD2ztD+xRzxYDAqCZOalLI2DaB+kEuH5xqzUVZv5IKLGa+T+dQZnzF+bLnIJ6OU8XZoR854w4S8H8vHf5yM7xcTeli5t6p8cWFM7aJ1SEr6UlDdHaB1sxxQGd74zHOAzgoyzNk5DOm8lwmqYrFzLNhnoTScYsx/yc578CdoGRephvOgd8gGmxk9IEJorDtJyUD3K3OL8cAD6GyE9naJM0qSgZpEzBGT2Ur4kBosDCxASwHktUL4IKxgZMPLW3nGR2JMd7KDSmwQ02drzBZXTXQHaF8VtMiZCS3CPSSgAu62MiMq2M2is1gGKhaD7ssTcSaJf3PFXz4BLKAFRPB1CPmH86QUuMC0b4SB6UeGcrOYhChw01uNyUUanKfAQznTTymB1CVG5y15qsHF3fIc5bnA5iPoalzQTp2ND34uX5wj+kio6obwxFL9nFNAR+06YlPhZPbzXn77tsv7LG9Bl/weHUn3TU2cGlG+3RHwrGdRrlSqjUPjDb8PQuHrhFSknsbV+Tnt1YcpyQh7BhVBnHK2nC48NZGLgkYy2uINRMVNwRagT1EwRB2TQYG61ZTsUv7bmi3MfPth3L1eNf1gvBuGqnLdoUMsNmzHE0RdbPm2hjUpuE4FpYf2HcttefDFBG7kaBdmhv2svjv/Nk3+ZVKScy/ZhF9sME1FW0Rj9Y/K5A+ZIWb4ZSPIwwqQ8YYXgVk53F2XuksufyxmM1mEs0NVS10hAfqL1irmSpkAlaJDrDXhzwmXES2feJ2jGBvlfFcTYbFub2c5Z24XE0jDS0YQloltqnjotz3HZccXkoC1LRxuBCMuL/DW65L5BlgDIc2vygHqNpObAVH2uYMFcArM3FREYYlij+4gHKrGGrM7ss2Ml6FjPdX21RKJLIQColF9MRKRaH/SMcjE9Sq/lyii2QMRA0L2LtilvSzjCgTLZzd6EmxQMPJymGiGVVSL6VsIfq5C3VOjS+ImD5XvLZxQ7U6i5BZWeQHEsvU7UPyN78xE76urFu/meViNApqX50wZ1po4m1tWD80tHKhms64pn5+DaEJC9aKeDtl4IheB7Kc5yxfvTZjpDsk7Mr+nOLhmjc70JJuH6YHFJHGWcxk/MRFvFa0ZA8nnyuMIe0VcQE+yGttwQgGlroWR0K5YwQFHAW3v81Ted2TTVwaTu9ogsefy6geu3Zt+znix2T5TInznQSLkziuCj8h9UQ+MqHcdz3dLHYQqaZ2xACia+6c24xbUfoiKPWWy/nRoxZmWHTEQSZcybEcMsCo5goW5My3c4Sgonhzll1mOFyqSsBhLmlSbyhklb0w70WoAaLJrVlkL+Q6fc8caOgLzabUBN3DP/4r+a3g/aJl2wsUlbj0RLrT7/t0Z3CX7ZhynAcUnOEkJaYcsjhrKGELnnTEBB7S0dLkMRt0TJSr5ncPFnAknMcpYJCPqy2RQK0ykCvwWjm28ikl3WooNzTAx+yNZzJQbtoGhJx2j/YQnUzRhgOKiDIm2iP7Qw2rSEOwawEF010uIhycYJEGjq0Q6b+wqwy0fogQhD22xTzXni3WjkIH4DRAq6Xuj6LFpkIwrXNCVBjgqdxcCa53iyLhoOB0XjTuMuwCGDUjc57Jb7+XoShhIIjaJYSxDmDwYjrcwUjTgcE9qLAfqbVd2M1LRFZws+PLmOzvLyEJf33Q5zQIPhQbkxi9IT25+OxzsOy/IGkSH+4N4rgyR5edTUl4okcBVj5/vR2V2u9zWadjA1ZnAa23J8PBIbQiDEzl/EZUONUqiJasLv0vdaXZBQNCPi7H8GEdwjDwpERQ060e8Vq3yFiruxXeOm7uzdSPc0WgoKpGYSYWkKLQPGXWTcnQiEpykNQAbiZcdDejInZpON4OOT1BjgyT5P/hCvTG9isl/8O2FJkJ33ZfbMGSTrIZQmTxFdxenrDr/zMsdhFsxfHVtKT0u6TE7Ca6Po4lvoa7TtZyNSx6OLC2u3z43HxaEUOSPTisUvbnnYpgbPc0FFGotki3ZQZd1jWoMuO8DzboCsX3gdO7yW0OC9JZrpN5KU7ERLWJdRM6wNCDrUMMOKROgD0CU+yNJ/nKypE+W4TTGNpgsWJskdOU26ic5PWukNNtkJDwUcyKPKtkmECvQwJDsEdglh3qhihNgInNfgoT0DSl8AY4ynG7gZrEA6S6146OAzDVHRqdLKQtrXQohM76CJIOfyFW78WLwonJcR6+AOvxSRsY7UO6jPGMAJl6YylUOAgXb7P6WSffA+wwFTUCkBU3F+Zyqi4EjnKFuXk7I9IyNHAWuEjJCFig5G2enI9gSOdb5AmGSsyEut6L/C/PumElS5osRRIOERPflqaAYgiN8ahUJnd6akBtAIwHGNrkGJvldmcnnCKC0fttjcyjgUiskzE4e+MLznLMvJhAT5aoV5EJPsDSY7j9byPMH+lDakiX9JDmWTDi/y/5FohZ6PkwgLdRZCVakh7AHyMwHard3isPR6Hsx2G6NsWWB81SZtJztoGk6iglpdk6TSnaJCPkYKSyQMgfJJk0j8ZkaASeIRkdBvfqBd41pDSN0maJfUjy8JCxW4ps20t5LRl1tmTbkE2QbLGF5L+OdysiQ0MnuSp55vEwxs4Z4yaCyZ2SIPK+58bLdiKyJAOVM3siIz7DnJIhAxxisAdCAyt7fgEUcEeyQdFkdA1uv4BGSqzCrzOYhg52YDxCY44K2H1YoL3StWgvlpPapCC8RDvXP4+6dCCDoxWP0+wO0gYz1VeLw+zF8dlVSNz7yAiY901gFp1N8W1A1VryQpS59Fp9uZK8roQO1H0gzhxQiCUsE0JHk0HOVY29hDmNk+CBWV1oPJeCV1tSTFJROEhiFzrJlKFz+1ZNnIt4B8pUWmlcfCSjjVM5ngxzleBtsbJeUwp6TUX4WmUXUxu4yfI9k5zx3UEiR9BDSTrRJRTG2uJ+itOrqEANwuTqEAxbdzMp3lbslvKSaLOo2dWBd5wXcvWw9cVLjQ5vy0gBO+b2iIJuBoz4BpCA5NhHRhMzLmF8scBFqKOh8dhfnasJ4HAZoOUFNishKihwgXJ8MT4GYWN+3n37Gq/GnQrVOqZhZ6lNl4YR4LYqbopksV9+rXTjIUiw+8RlN45J4SfOxUt4dIBXi8CyhTlJ0zQKE1iqXNo7hPOufE8xubb62Vicjs4sICBnqoBaIT/X6koYyotqAJZxAUzFMqh2fYgBtXIdycs4j6V5yd0dLLzCViSdnjgo/nwOAWuXNeop24yCPdjn8CQllAhGBAuOcaM8jyHU3xHFkOjHkw4kxaVoQWlYb/qUEY7KxbOah3v1pJbTk4bO+ldcLTvC1Mn+LA1945j4OHDI25JIv7rqx3tHu3temgu9RvMQYR2qtV/2zCkYmVigroMjldYUbfvs6cEr3kNafAJ1KE7EKBjwG38GLfNk1mrY7H/24cXr8ifoq/bwq04IWafhkTUNm/2PPvx/f4H9TylrHs77f3vW3bBaO9usD2seyXerhBUmarPZD6zKBwlxn50JWFsj6+yrmorazSWdWXT8Pf2PP7WjCyKS11tGyZPum3shDwlN1DGahfOl8QVeuMhR420bsmiIScy6ET87qrp9uqi1NbYL0WvpZkUlmAcFXqCU43qcau4BBckD377U6cgt15GcYL9wCepKVH6V8K8YfmbeuCokMfk7NWXA3viyTxsMJB/89WXxQLAmwwchN2oqJZtRAuzd4g1FJXy+wBOfbzpHASerKuDSbE1399LP+S0ekVRmq1Nq9y0tFkVou3Bv+PJZ6G+ZxZ24NZ1JE1yOvK3z0Jl1874XfXLJkFpcLtw8G/5RLFzH/eKTWe1sCIqX3FKPDriI8CF/4xfvv0x3yvKcEKH97Uw96NKkTkwwI3WWXCnFU+nDPErBb4NKg5f0NCmMmKjlpdEloiT41AWbUTLDQqRNLQ/ed/Uy6KidIX+XpiuDDxInD4y7Luh6zyLl3mbT/4gYcNIftd+rr/uKv/yMHzAZiaOjoD9svfBuWMdSlfbpy37jVUjZ00wqN53OU51Lw+rTj08jRQztrIRg4j5sfdl7Ae9jf35wX4UMaSCQkqDXaBhdGFXpM6YDUEyNT3patvv02a7+Pysfx2cwOKcNFkOPK6Mzh/ksk11VTtXANzLitYtArXHdDdKxhDHvpeYLWGYUSLaZG9ylIj9zvonMcGmYh5CgascqYPNQ9UjEmWK8Xd9Lwpn/fsHrI3UG1oyf9vmcQIF0XNQ1RsP2vZoUgTjWAQ5JafK3c6EJgT0fdtjdZ1jrb+GHl5EY3bPcr1vmbtetrOW3vBu21jjh5whXt/vtVpj4YLUT/o7QMLGz3MSfFif8m0Oh3Bj6Fquaq2rfL1VKIt3svdIPFznYy6WL6f6eQF3JHhYuZyMKsc9vegJw69jIlGtMICW/RiWSnp4j/+kbpgY9RHEqLLk1tILX88UGc/AxHOV6iAzssPNVcSKLL9M33kUZ0D9PugwjeRLpY2itbX8NQ8NHC+EUYgt0vmVC0eaBksaItgVY/o0kl46CFoI4PV+vrgU673Y+BrsD4NCA+AxBTPmCRHl6mQY2JLaAIp7fdzqozg5GX4Sn3XbAyhf3H/45SHwtsCbegNwapiU3v9476VnzR/3dP3ygYx+sfauZmmOyJEoApTxlqPLyfZLbAKn4GhHRThUJZjzdydd4Sf/eBNeN/7Ofeq2USQAc23+nUaV3M6Bk103oWJdGvVYwmuJxUm+f4eYqivmDdXllaBmOErkp6pby4kOQvCyPS3N4sHqW3IdKWV7GFqjF5wYVmmqr90r9h/uN/jrbkDmpNBvHl/AuZOm6nv9GSU0BMOT49N60yz1F/t6PeWBCdRbpDXt5XOYGPeK5k6zYi7yMh2CtayFPI5seE3mGm+yd6tfv9FC+3wmus0GNRetKcQzCcw8/duf+YW70KDNoZ0TuLu/VVG1lxTzPFG3HU9LmZ0MwqHn8wn9PYbEsx1Dhdn0wqlKjjWqXD/IWNPwXCSx6vc7lnjcU09pAya5A25hyEFRaTOTFqyQjvsUvSOMJoB2D1cm3NYE1z5caRW6Rr0X0XHRHw4ZhH0fhtA710UbWBzJfGGSrn9bm0aNMzP4HVTmUokcmpDJkABijiws07tARR2C/VZJOw5pG1+8DB/8KlF6OVRC10G+NDYhjak+o6w3+qEYR+fq1B6J1/4EdCfHkaX0zC4dyhTf6ewlJbXWcHsBBDzn6kIganLajJjmbNkfw+4B/nmi96vtHxI6Pw/Yj63ovXgvgZPNocSjdUWv3+wpvxQDbHrRYQ9/cyHCwh2FACmG5P1aHCFrv7AqwVuM6zS9FgMx1EBI4VRINANL+cyEs+3HgzXSkl7FvgGoQHZCwyfTcVOx8wQo9CCLWBQNpEwbTRWviS6A4sIYy3zK/XqMAAgFd593bPmFD+5CoFg8u9vn4/dB/0enR8S19rh0NtqbpmWdIlizmEAzdyrxWvEyv4As5zO+nGJlh3V0PPdTwUATwPWcNzUv+/WDXmHK/Lh8DJ76BMVQRwrqU8SN+BQjAAwbv2gyg1nD4OXEQy1EUX2zlpz80dwCZzfgxwKWHRwzyUtVV8dbcFPcd9v85S+THCkWjQRbpNT5Mu98/p/vp8HtR7m41rJSzaV0hcWFKR7SjGaBCUEZx1NE2NDyukExGMVBTrrGhr1XsSdJjPSlxVDxp8bvrFVaHUdtnhcK2z8G484hy6V93UdYJIBvBUF89f0Y22P2mZzwt2d0A0gocDjmCeZWWIleI+CPllJ/q3YCjsP0xnnw5oEAU123aACu2pgbB0G9jITBTKvoF4XliMfbdSp+KBRDLi+4+WUXGfEaoFZIKKnOrYrPFM7yLfsNqaAm6Y9MG2xSSqutQSAWSQfAHox9XiN0fquXVwcq5KdsM7nf1uLdOdIZ2c5gMVrmGN/8Y/Q4oV2bdxjKBhtV8PbcxXwM5P2hjSKxhLz5tTemIH511sZD5veSNIyti+YTwfFsnjVesEL+1WHWdVW3FCKegZxIETGU/0aXGIzSghUNpiTS5WJ/WH2kg8Js1ZSqerg32V7hJxO8Wymmw4Jvq9BfrUqjQKpcQdF+oElcvDUxTbrhEzrpLJ89sEXl9T4umqV+qSXpp1r4peTHlxpCjSqlmyVV434Q0u1TlUHRe09DfTJHeN6ndiZ/9Qrz9HyMBk8IiVZw25Gt8uJGFMz4kTkyprY7nNuOYpenLqj5305LqcVHbwasfzbhBGWHhi5GumohalQGiyh187Wh3IVPHlFEcTDBuBeP1WHqMl5XLyJJbMzhU8/KCiu8Ba08id78m7Ao2y7UX31bZXpAnI2R3LS+f9SXK5/5wvUd/VC7ybJCS6Hy2peKmMm+5u1NEsZVQa4xzAFpWOCI+rqD7WDVVjX+vLlFMcKFvke5sai4OEQF6OQ4XPi9zNYfQcnMoj9iL5Y1FkwEyqX4wFd87ZQdQ6u1AVl3P1k2hU/trTayCjjYNI2iIkh/jNsrnqyMHkLS+PrAfgdPyeqIfj8AzPn8itKo/vOURvt6MtvL5RRynCxgQa8FhvoFl2eBaTthIyyCNPbgWWBDN+vmZ6aqEqx0BrRGeVlzzCnfoFrSraBAgA7HXw+ou92yc3wlSHnXIwMthxgrEL+hh6jGtW9kEF7a4BRxZbyB/MUe77IlDxXdr4nrtYCVr3bGPTeIyPZ8NtGmVzgiTvjGWcyRT1MCu14d/DS1BL3K5pp0TP729VqEFVwjCksXYAsexzl1eFqDXYLx3JWVDA3kgF/dTdbUYufXKIezAyOkMtNtWECGTJZE4K5krp8a21BaqqCDOXaHlZ703VfIkukp3B5Xh0JMFtcXWTUOKN+Flqscf0DWfMuBtLd0NzN9Q23dAHkC7q/EwSoexzOyStheSdLfsy2IhYE0UqC/YUYtrPCWyQlyLkohTjpEPrKD4xYsvaWpJ1GZ/kpzmvxRo1g1m3JYgtqC290AeGyxqzeipGRT5AlQS4K5pBypDJoalASNuiZDBsbBEt4M0GrrKTCdx7+NNVltEfqWDXAao+E16RYT1D/GK6kFnlcYUEXvdXfuNc6q5cDEa5T6tdHKdXP0q6IGfu10PbaAwa964l6OhM8bmzqPsG6pvsAsmJES+PmwUk1Oabb/0JHe08ylR/jvb2KNAWyJdOX6SMCrnVqSrjKuyZmHYMPuYzCQB77xV93BXrbGN9ovyzgZiTa0T0X6dydpNnqER7Q+CLr91LUmWz5KSsLsOKur9xMbpmVe0nZSGvQyH2MPvW+tieGn0RkGAufvLTJJk450gR2TujTV/gZ7T1I5JCsAvataaQ2R5NbxT4bL09vRuxAbpm7FPZKjrmBoZPHllcq6+n+a9FXBpRtXST2SyDagLyrQ9lRKxxOfV6iV5UpZ6OP4bEKrKy9kitwbbKpZRTN+iRyTVmYWq6zxIVag9C1gTCjgTyn2axdva2UE3tbhEKo6rUv48i3nJZq25QVOuerka96lhRIfw327XxBdmiREZyOOVfB1SuA7/FvTbVT5f6Okuioebz+ipe8HVdAhWi52WN7wX89bj7Dqn8b4rGFe9bEZdEtjGMl0d0VDK7huN3o1FioLxqnLtWc1l/R7Ojn9H6UaJR6d5ijyi66fiZS2wckFtE2OmK0BfoxcUByqweLbC6FSRzK9VJLmN+HWcUEYyokQjIWLfL9qnyyYqmjVtuUWWp57CKaN9JXpW0L2eHM275D/EiCtnh14+iIliobyeU+4rVg1dWENccU11mIWWqwxRFkE8W6QwN2sOzPNcy1VllF7xa+vDQCeeFz2CbdNcGL89ID5Wns+rnPjXJyfgderAL4EpIQAkxfiiJjoIzrEPivt/CVh1YzARfX6xMeC76hY6Mpv7VyBbtQPYOxCk9QXq57L81T6EKVkocIpaIrq86px+eSZzBaiNfI64O/jGCG+P7E1oKKUc8YB9j7eHLrALbKBac4Jpuu0KVkrkUykbCkNKZMrT8lLiqmJTKbJsjRrsdVUVAQqpFmcEOcpygceD7MamvFv8ZKVTD/h0h5xv2I2TQ6gF/PraeWdWNCBUmgnChKju2ClKkkGZ0kBRIfu0M+yyov5IHL7btG/J/9Vu1MR2iYKHERqgQz5nHhlNNanLeLPNx3e9x5IYqU+icqF35SN/vBZxXIo8JIOMsYNHn6pz/t4bd+OwtnuteL9bmyfFtyTvN6QwZeVRWhNxEOiyanKdDi+uhLe9ZZWL/WUhcWUxlVj6fLUEmnNAolSkEzOoaIELY08XcfihVuKDBMLOoYoWyBpzp45vhU6AwJXDAT08tpdv+FYLenQLw/w4WQK2+1FBFYTDxwX0vAqbeVslTidI4uNEAeoqJyx8xG1flUBbysacUmsdnX2DnENPBgT9laaiwMwzp+UKjdcTPbCydGYCSPXaI773ekFZxdpohlxX9DUE24+V4U6hd4n/fjpwLNC68lxAiqYub8zo5IkSiLo6knTAGrpDThutnVTXbuprczvtIgowpGfEpXU/NlQiSyuU49hT1K1VpnVDMO4b15wDFEq+TLvD34aoSeOEbUlDvZcfOwJ3vFPCn1iQW1qZalzZvu+nskGML8VtFykwpQ34VTnHEGOqloKJ9HI0d5rnRsvPmSI5OuURnw4u49WlpjrDq3+b5t3baWiNUb6X2XOF34jvfcj/wHSeUQzYUAbdC1A6NqhJiC0VUL0Y2xHUCQLHs3Q2Fhx2GqnGFW6f5gzy4u6v0+K6Gfm5XvYo7MWp0H6sBAZ2M8T20D5xBkHUYvFUOXDQm2lq9c2QJ+0ipGijRCqa+jnGdjJRo43lGGizHsY3/GjHx2tvWSG6GWw412+xoNfl1yMJvIfADM7gi9tpQOyx+7Uln8bn/mki4EI132UBGLwl6O2ySwvgCi+ph3GPxCcs74J0cKi00U7roa7QWk/Nh7Np62JOR9k7Uy3fznOf/ISTyAkrx7P1mqvQaF5xIrfipTc9xTxw5kMF4DerFwfR/MPyHuw3FwMu3+nAnAAJvbbKe8LKuYNJVqljCn2OIhB6L23qlska9Mvh1SDFyaJbTQsDicdtlbzJKh0hXinsY77HgqW7zwSG1rK2kJGDqiL0l3PWQYqyfmqCh+r/rTORiGkdJ5byza0gVUPVc8u9YOvyLNqjYD3FfhpSEbRUiAlVWCeLtgySEpypSgqV5M+zIPES394zUd1sc91ahRLMZ0PpRVKMn4+coBB5elvvLnF0qThFR95da0Bbh2gteuyNI5oVM+sdxBadhUdgY+KFajngOuvwxkyH5ZEuQmd2oIuZkXqi9DeFeRIId/b5uI0JJPb7U5UiWXQCf+OBKOdQf9gW1MdRCsfF71nEdurzsbyUOk0CbuPC9TqN4iBSKm4qdz857PKpxo9VGVB5dBX8OAkOLhH36/ki1HBkqffdyltN5KX0s3ogDqdRtkRXNrxFr/JRZowFVsdVfpqWJUgBMeXLE8oZ886uETzKXaaBX2iWuXJJiZa9eBPkBarkmLhYKVlMdSZUnqUuHOYUM7PEzcMcJJhF3zAONjvFOFULueGcju3NHSCdPGiTgfhpxx7l7IIiXUjtUTkTojqIHKopTXA0/jbBdzEQXHhbnJzI5r2KYmcg2PCQxWeM50KiNFVu1YpvfiGedPG1JLz58g4kJJBNldWmXa6YiOMf98R/i5Vku+wAge3PNUXpTxy6JZmAVWyZo2mtA3aLB3uXhvCmK/QIXqtM98W1cI+l2jX0Y2gbs+TV6FF4rTDCZCWY3aYTJvA2ssN1P63uHmuC0h5HVVLlFqXz6lAhgNsHzQ1VJ3/VqLDFGRqJCYjFgIKvPV++KIwFHnwMqWSpNb2zkaEX21CKGyCINMk02+ixb8fAKzhPS/wrtBw1T00yadMbcTPGLM6hZaq2TjKLHgip1W4W3yQMxmJ87JZicPsAbHs14MMmk7OeRNgOeLN6MwEbWP6Bhl5+W1Iu8Pzj1lktEP7myMuY1Qatzc2HoM50dIe1Przl0BokrrwnnsidvLH35vIG1hyroxH9IqvrnOg6BQjJkOufSQnXkI2QWwp0ReAXhuKrLLQuRsjRpjz3OanZWiO5XebFsBfYNLBqPrh/uySLOW2Wl9uodW8O6oxkTGQHHQxSjLynw+l1dlsTPFTI7d5MJIekfV+elQuRemzAEPXBoxykEywEimBKr92zdPhV7mYI/+oJli0csRFHIJOF1DoRWDC1yVaMyhfmxxu6QcRnDp4cZPHGSjBuKivqNRHn78EvFvdezt4osYe+rqL3NajWTg/3WqxqRx9qx0XMTOveC1zEmmio/Qwvaekelhr+62T8o/0JiTime2cu+oqvQgLhh+mWsLwQs7TfJMLsc/qFNHW8+MjJc8SYfYfLYZTd0PHFbdsVaBu0ZwNrf860BIM8kbqG7tN/5kr/hl0J1mhoFxM9/ANVpDjGQuObKSMwIS7YXNgaVqAKggZYtnjhz8MuL9v9xmWMDRiZ6sYvsQn1Rr58anOkFWu/nC/rJon5SDDqkHe0QRxmmhbObekYgtTuNC8qYJUG4r8+iTYszJrNWfH8jIGXOjbK+8UA8YvMhHl0Cykx9xU1B39G8qi+izpFQlVpKdjWHp3VnpTaBRMs9zHG7LtdZlilUBOnguJaIVx8RXhTacwXJ6fYn/sZn3WxSo3hpNp7p6yPaCEYkhWMYetIDg3GztILKrp5dL2K062tz5V0BzeGRBaC9XkyZ02nXaLYkk9mh+DF28odgTC4eYx4IesH69/jUhPg5KmdzSUGo3N9Cmvqc9iR6uQIQPfDsBPOcPRYnsbsxsByVpdjoqteCAGaZ7lnWpreVuw6OLniQYHCWfeT/Xas15mTxJvDhFVW6q9lDp/K5HiUJ07PESsqoX36F4CKbkjiEkGR17BJZ1Ttmg1ZL/jjQvTaKh8nPa1/dx9juRH4GpN/aM1PJiR2b7tQppGKcHDm7hIMiz5neuGSC4E7LyuKpV9VYrlgHUWD/EYcD3ZRy+IK4duEz+5Vn7PiA2AUCi62T1uL1jD8ch7qCQgue5CndKyHJLOKnGj8YTArSbkF3xIpiePfEuOfjFrliUaTEtKmyW5WeW1pS/LqompnlfqQnz4Bq+nwe2qSoLIE0yAQ29/OaV8AFV/w+hbzpoNdG7c5+x9fipKsLqpjm4U2upPn3RVpvT5DPmoYzL5yZ70P6h3aicIitYAkxvuZ4kIlk25ZAnv83Xwr/Uj70zInmZe/g/KQa97Txm5CUATBf9j/iExIDOr8diTFyE+Jdf6O7/lbD/o0c2w8d2OexvSHlzqoUC2Yj0gfKwO3n/sijtygUiEjmqyrxc1XJDefJqKwJr4AdD99Hi4A5HnEbphTagVf8WiRHmcERSed6NOEzqaGh+6GTR0Xu50hYFwV2SBpurxrIwZ1aAoHLTgTuD4GceaHpky0m/cwX1Ih1tSCB5/J+fti2RoXPt904WZ41nQuARe9NLBsYcgFwARVtTRUVJSEhXXstBTYGZjxVdhbQBAZDLBBuFcovZDk+2t9/D1A711u3F0s0rjyGcu5AaTLkQVQrmpd/tXdQwMC/CaqwN1BOJNqfowiS+R7qDBVMjD2fpfwCInd3JR7SiptMzGrhpp338qjdXAmZiowZW3/90l+2GXFgO4+mu9i6qNAINNh+5EarXa+vTQoHpsWGWUJ6FkDcbE8ejWNC9kBN1RzTn6qSEXurGedVkLPSt8mDrPQMo12g1Gej6CS7qH+9fBNWdf1d2qLKhRNgZFGvUkYvCvW6gPR4WnFbupimd9fjQIKQ7qfCcEvIC2/2lBl9q14omiv+4B5a2gCzrjhLrdNwniHNmaTdiTwLcmQHXPf+9cvdGAjgzjv+W6qV/jwKsBOmNxx36ihhcJGFIr9le5A6nlnVuok0E9h6D3hyaOWJkdJMdSDDxWkUQnITelVctzmdgd3md70srEzKops5FyeD+O5GLBR4QYrgn12lRmh9xumxJEYjU1c1aHQ7IIsTLTonmYwir7MO6tYxsBMAtFzk34fgncAz4agFzIh/X9TGO7O0SaE16PB3iW0yZpb00xo0nYfGmvUrKKiorIbagPqYSwkK95QlDDHtHF9M1RKd8TbgchRrMoro4ziA/F+GoKEWewB7qZkTApbwJVrwPX/wrYNHFVjuAMMYNMfMH75QgBB8ge/MSFp094OBztSTQGmJjyJ9C4gUKOM2qTZsBtuLAyfsdrei6EhQlOZhkwFmDjD9JUhAGzeQRdnuP0IYRCKiAAmdyXCUFvcAJyoyBBWRUjeCgmrj40kMD3wut/aLX8Sk7yJl1vD1A0tF2aWUEYGRUOijQIQWyre6+dsbXOOpckbbVSw9SZ5QbLJYoCTVWSxImaX3YhBvTqvoHyF0SIQsYQGBnlh4GSKoxa4P9JNXx02VclrbYMgYwUKVgmg2o2omEMYBV57cMXC6xrP7lADAMNfQzTEw3yo0Fk5hKzE8qEZhtyuwGApg8IIByTdtp+fbxDBLAsDzwFC0LRNIS1pAGyZ5RtnYH5RaeB/+2clDeBnH7gfnU83IwOJrDPxBukZIR3jpSGOajrun16lGfFepoVQNxHMrQKP83MxSOlYBaBmUBtPtiov2IWCkmhF6Civ+p1IXfXjmPcNjF/lcA//MNPcgwGxm1P+pado+HUilDrfes0o+lAZqD/bsrgXSeOpKh3V1mq1Cyno0pifqcR/z4VyfP7NJbA/m0YX08SsCGntcSwn0AbA1WoKrjneZz1d0tz7SeFxlSxyHKsIKMNVkDeHEWCrQECS4lOnUlPHmip+oJNS+jM7MHg2MOqImct9FGmcseCOrINR7H4jJ2PuARsQC0qRxb/X1jgpBlN34+V9iSxNFTGA0FRZFz10FbAzQQH4WlQ2EtBUhKSgauJ0HGQFyqZDGYXSm9ZFTvlDuK/SSsqdOcWF65mAxMmQ5F8e21i1LgmYQcQGpAEUH6ogpKIuNkbiFuN+Ks0CZCifhWNGLDZLkmjuAlej9NVRX8Vjjt5mT0zpm1G/BqWwrOh/3oH0hG+zoP95yccY8zrPPCUexkgk/rBrtPCe58U/lL5vU4bmmPG7Zqu+LcayJkxxga5VplNmSDd+oABlw+aTB28xYbV0VQB0ALu1bwQhq+UJreHRbdmSqctRoLrgSatR/KeWFIBStFfHwU8uculRSanM5myVGgSr3N8pMOKvordWZD0YjOr9iIyxi1LPKvayi9wZ5QZGMwTDgzcIHXPdAuf6OyPU90RocAvFakiXj4I5UXC3HqWBLz8kkK6UU1N1b/JxiORCZFCDl6Vu6ElqnST9if6sbhVJkCKy8DiK1m0IftWkqzBSiO6INvrUC4kHWG0keFKKIn/M1u81sEY3w7nZoMCZ8pa2yNVSa2I7b3/CL5hhrR6dmt3G7BkFVqR5mjJkWNPg6/86MjwLglVAq8D3mndMUDyEuMJYD1gyYgx5GcG3CVr5NrwPHYhtPPiIoyw0W+82uJYERp9lPQ0tgmCkqvNCm3AgeLonRe7Ocbxnm2WwSZURG5joU2uUy2qMLPEJw7zG3pojQ4bB4L0Zw0pyk0Zntun1kD6NQvdc33QuS6bGCnDNKpFHfQC4kJivL8cWppbZP4AVvgGojcxKASYgJ1L3omkWBzFXkGyIdldpkNpOIokJU0OisRWdYfccqo5mTTxlQNwE67DaMBFIRvOwGynUntKJ2ykUnoTDyr8RvXO6/lQnvqwGRgfCRRp3cyCeHqj2x3BTNjTqhGbP6S5/w7zD5KAVEUSKCXvkvxWY781GooJeJZUNVClQK3z+6e+HRJPnZXthTlrC8CEeKGgDbVToThgkRHgoViQ4nhUai76LsDU/tC/dPrFyVWFMk/3ytGKkNcEx1CpmlF0Fy2Z3RSH68kq8wfjAaV4XgW1YmjGboVsyL+9bWoWD6ODE2bQtNXdJzsdW72eby7Pvh1tRg7/KMlcqEaegtffOkqxX/sDjgr1AOjb3iwvj3y7+R3GW7nMZVS8rubikD5L7sWND+Bn9Y/XngjlMGAGkHsywi+kGwqSHiTbdZAlO4XrQCkTIoLa3+aLWEgHetXV1LC9j2mzpKcNXFP3h6rcHeUVdOJB3awtHoouT92sH2XpcoWrUkB+B7GVNMsQHIPANU+Q4KA6LlHY2JzQU3crdR9ehs4RL05BS/lPpEzX4qhGi3kM6kpL/HczPsLPhF6OgV/pI6D9Y9d7pqaL2rbdkD1wOFGD5w/IX+q3sUEEROwpEZWTxClLu+bE8lx4bZoZ3wVMYtcw92EOMAVvzrgulAkF/jpxRrpOeZoG9TO62FqX02P1m6VY7gYDy4DhmqHKtRzmQJKtyl4mLDb0mZIAHr4wXVsOgHJ22l1ExPpFI3JtswxuLGI0xLnXDlPaVOd2NsIpiMz2FsA6wxwocAl2/1J69i+/W0o0vYQfgOM1lAE7my36WHVHcTk1bZtfrIXRFoePVd0axQJEh7l94OM6O7BudpdHTrnGOJG+pRrXujmnrINePQ5WbHwbEmHmBUcyrdnpPJFGEVKYW0UZnGaVOZo3YLOtLq2o5VvWV5QJEyeqxQY9oiMIso9bb+XKD2Bzrq83WG3xAQsPqOd045SM526JyhXBArFlWBmnjqlHN1Olkf44AZNn2i+52IQtVoGL6Ej5BW4C4k7PFB6LXzhAFVxM3eMnjwAdBL/Vu7DW9nBjAAUvDzRASEOhdc26xKLlgQHLR5076iQrfcP3sBjhGXifqFAp1tMYiCxt2IZdawzG/bhyMfsOn5MlWzmVEWGsW4+YOI9TB1Hghy5VgVSxQpACw7SyO1guto9kDUcIhKsLhStUxDR7p0wcLTtbPi2Ryy2JWzDPg7izVE1OnPCMMVCh26mrvXBy3xURHghymO8XTsyXGXGW0JZiVB5XjiE7KAjFw5x4vZOudrDKLyMgJdwi6KzqPlbYik+eZSFunAu0SqRKTkbar4SmifEQywXPq3KvsuL64GI/OiyJcZvMgDcGaGChtEi/lqgX7xitz1WGGhrlihLsQs4WMk2yPohHjkuqUk6Kj6fDEML1lKm5UhuyJEKQpx9CeajID5lylwE75iCQdmSlKXqB/Lg6SEDsSix5hQx3QHDkzIUpWIY31903nr+ctA+LFO1Aqlrj4IdW+NKxVHBf92oWsqMvIWuxqkBXAxMJiWs9B4u4073v+/AX0hXP+C3XBtx4UUXoTKW0/JDEbH1iaND1l1oWBRVTkeMkCX1ZHXqFAI/BgzqtIYWwyRxzJVFf7reOSB1WHiejwqvSMcpgrr9449fRyNV1ceDa/k+p3i28C1pb7GtRWrqyqf9JXf6VYCTSKlV+c+PxwNYgjy70EUz3xX0ifzkY8OPZjNZCs1+lvEK+8E796Cr3576u5OXxYcqWRTibyf47YKuSkIu5tqU0C/pXRQh/zWIvQGTuG6GYi8rH035ayUuYIuFpQB8yCSBupP6wtgO54Yfu2UWUozqHfJ2XK794P+zM8BWDr02NfYEfpJlyHjypWkNX632ZsDARxLGEBlfvKT5afAb44NrEW12AlNyOatY4sfuikMeR3GMyrE5eBLhHwuQ4eFwfauyjTM3CEWdP4K15QNv/4zWyMKCqzSlac0UxkryFj5p6VCcufIJTcdV/DMe2OtCn48yAa7d637I/chtYHFiXk90jewFaBvVltKgyNruyszPMNHGRscY3K/bQdaIe4ZH89LOBOueO0vBKzQql8sCldoeCG4RSU4M4ST7pSEvaHGvdfwuw1rh3UyzBVC2C0TaOCu0bNIWtXGygSWn2N7V7RGWHasvv8/HjKWiOTLhztmfuGsuveOnr6JF5B3F+OMrVAEYgRcHxZo7v30XvyNO9zxbiv7E8VbIzAWhrO/YmLPbTsDAYeQNIjzsuZSJY3i0nDOfM4Nju3Fo8OvauHZuoCGV5Mw2qMZb6fZSGnjc5QOltHwmWQn+aqbJjvExfRoNgGFoiTMlguN0yDxGA8Yy5Tz4nYhEyhuMWso6TcDoysC73OY4fxUpRhvffq+gsd+/TVcQjWE8MJmMfNUG94hWgI5QLG9OcdwXWIqS8NGKVhcWwvVawbxLfwLdwzFadKTRY658vRyAOK6GbAKrg0kGFgNoNMvfqEGAhtPAE6dYcCLgd6oSwZER9kRfDM7+YHl9XFlUGVz2iAcw9X0CkvXWo9WDTERUC7TmIcOL5EzbGBvpXbasvExfhr7JuPwu+P0ECxuiQkQxSQnsBKMWzbdVvAKlKaBzQxZkUX6UAI/yBCHKUa4qoOtOD/bpnNY2FUhsWD+Kvp6WzqLg1Bcdn42cjgzhGvBnhoWCkvHSKbQVwYiY0DrXNmM2A7uBR6EpbNgGL0QPj1CzTB0Qd60v0qwNt7D4fLkaMQP4qWegfrhNrFpRx3aCp0nCk1qpnfoHl9zYmZ8wloqjwvzZ9mKCxcKeiajygh3qlRXx8zhA8ieESGTnbNyFpG12Lo2lIHnEFrvwU05DL3YmBJHHYPFxU6SMO9QEvCVJcqP6Pwpzm+haRf1XajX0wx5bLrC1TgK7zVjkj/ZmBlekqgMJa94ImHk452bSV5AcreDsaMi2l7VjhszWUynrLLn27Khr3DUxh4dLA0TDTYQDQQY6bOZ1tjkA6vWntEOPDOjr/xG6+5uFT8DJ7HJa9TW8yUC2GJZKyNiYG6hNgh8qTyjy3KZ5Rqe5lt+yzsHEO2Un/ajY4rIxrGFk4Xs9kaOtA4LAxYoTtAa2D9RVWiojHXlYWkKjtl5BWnNjRCBfG7UZjiRvF7Wu1cz6ImVheEIMgdsW14rzRVjXvV2yzbxqMdXY60v7VlMJf6C4qcL7zq4R5HwXPOX1JFHFn92ZeyfpDTP8dNMHokBQo4GeW5Xy7QFasEatGO5xFo0aDo9PO1QFTDemHKJa3qP5lTsvEMtgOlHGDROHkdoBgf4bzK/royn50je66Nmc9u8T0sA6bXSejuqWceajwL8hzJWE51tXD72ulFmqfwoV3wDubkTvoNSJcFRaTrDE2YkGUu6SfskKtoAmbr2IA1hIssgoC28SrHdYKZxQlYyWBMXefq/XAL/vv+IcV6QLm+zbl/IIsg2U6kMQwXQGaqD/OcKRhIa3xm04/R+gO+qj8tW+q7UzimcMUwHXNRXAcKKG4iZE3HUnzNQ4IPlrnOSu1m1mmfj11MZdgf25nc3Wkr6G8/Rxl+973f2DBWEEpkqJO2BpFjIvBrcRYB2veu+/cQOKkHbYbc1oKovi+Oo+VhOQZ/DP9vtda38GOQoQWTYEhFcDtE/pD/LCHcmp845tSGHsrzJamb88JaBU0KI9yDLhWHarCbvqPFquGKCACSOitd0AU6btlianNxF+s6ysngGXbVxZjcGnB4XS00rirc7TC2Kzzd8CA7UbjA3cAbPbJlEhhi3aKu73Dp5Sn1XVoxuVvbnLoTIE4AOlNfeychg6lH+fTDJ9Ga3xMyL5yPEFBaFLti6rUTQ1LfdTWQujoNec43gCcxnANJrgkoM375fBBv5ds3Fa03UqDlihLM2aEyjWKJ+IJlyVy0xDeVD/hJhxSp6cgFiicgg81VydUgDd026IW96srRmpK2YxW5HHh40NLpKW3NJxQwRu9/fRMoEjutDeNfbHwDkdpsepssvGNt0lW1qZM5bOt/MzJMpmCc3HhZnxKfdSOXDFSYIBeavJg3QIDKS+lSIOfOHSAnYHdZWAsuvMKoZ7l9TsraOlQVGKhFIRQnbE4S6gCmynncva8PVAPiJCkCJcbkU5K3MRgi7Fe60SOajhfXx85lbpBFWrVxMMZ9pvrGAy30KHh+NTsoDZ4uj5BQoKgLiu5KPjbTwlEi3ATEgqcx5uqzV5Rl62wP/xK8lGyQYJYlH/wXmCTXDM1Qtlke2YZx3ZhPEEY9Hqpl/wgDXYW7cZgb9KiMLlXoTgSrKk5EmIiZznD7BUbPhjsj+TLd/YA1ng3eKPtizwWPXHLgZ17SW2UHPrDxHyZfqanEl2IV6rmbxSsH5ei+P9M3+CcMYNjPTRoUQus8EnTaTbadaNXBBeXIaStDgbVoeCdYxeCqQLu4iFCLJQ9K7tBWmog7UyF/FrOz6W7zpNbVsz45OfSoo+L1L4+9t5Lk9+4UXyfhblPwjLnR5Pk4DyFLFme/Ho+GPGuxHYlJVZtuBG8MUOOzYLTkqbIsxKcwqZThPmHKJX1w0op1pletFi4H25J4GXLmuxZgzNaiaGBtr1LFF7p6dQa192gPEh6ORHEIB9bN0CgmtEjMd0AAv2ZtqAXKm0I33ipZtXiYzUOctHQ/5r5wkJBh28tvfA/D9ksoAR23a2eA597CIqbgb2S/wS6tHUNlGWWc7zLl4fl1a5w8FO4Oo/V8XXm8Sj0Le02TZQdbgmZ/WL8guSV0j5uy0dHj1wR6HAz4BsAFBThS4i5cMrMGqNPtA7fpORWKr9cQUXODlrYyWMlZ4irpvJQn1tcKoaPrNVx63NyB+6BikIXnWpfc0g7j2fS83dSZqmbl44tbrh4KT7eaBL99clJdEu4NhYfzPBa3Nl/TiFIiMO5q0nC3n9oblkFQIcYD6VjJl2EqJw+TIKWNgjDvs1y426cHOPYSbgPnBCkQjkaCLxeYYi98bOiCt+opmWDUeDUFRS/XEK9GMswYjkHZw2Yg0NTApQZ0St5/TIrjhXjjvcnucAkHnIoiOsgiD65BOsCTW7RBEqBKOTV8PLw6LoEKo3V4+ZMc6MavI6Jpq2PUcDg6kSfpzBvH1ZRV+Wt3Y4g/2waQF/LOKFu2Z9JE1abOEyXreYDsm1FUm4zFFXMH41WL5XrFj8/YjDtvLnmKM4TfHMcLbxfzdsdmm4HpKLxZjlX8GhTcxwHXqYcG8aaFd1dMwo2JkvU8YSf0P2l+7H0KWTxkDu6cSWccP9IaRHv4+tw5h7TcBcrdxOEOUG4gZAaiHU4mcd3pjXoLYJYEoUdf0eFl/FzdDon0bX3lQPGvbzWCgvXKG4k5MU+vZnldcIVveE8RE8BjBY2i9y2kK8n+ujB4wa510SwpetIbAeva1LlJgKKN/+3Yj+83inaF43jiu7ycUyS7AUI4yp1G6JmR5lApXZM8wsVni6s15bJ6GZumCip5gIJNvGJetVYiIjvW+SWwoQ3BHUFvngNHqE671T3/jLMpgjQqkcjXcOUspbM1ARcCnYUPqvS4aTvq52C9rPR9zBUhJrz1QLayKOKvLlfp0ofq8a8Qgw8AKkdxwK+S0KiauHmJKHd3/sYP/j6fPS3byEpFIxU9kK4PIuNMkxcCxcs57eO0T1sZhp5xbN5E8e01lKgFBRXhHULBeCAsGwnR9acgjrrra2fBJrNNM2uE6kEZV4G+zNGSEJ22mdYqM+ZoORpiWECv4IbOV71guzCpmCpydlSeHYp15WMs6OIGrpkXo1KwFsdMzaA6B33IXjFynph1yhZ14kmOHhtvYAsjx0fyDUArhivuPMqxyZl0oLKX8kuFs1lp6i8yWoRLE+lmiE0XqZ2MMOfaDxSXRdZM/E30yjdCniRUmMTtQ+pYkjYhJi1DLjsoN4OBRcJAJwXnSyGzsxjRIObrsGVYCpcn48lhS9xzMl9vLxSVXUMRCqjYdGvoBuJoWr3Z5CBS44b4IQ3+PkuDL5usjFj5QZHFxAlWJbogcgMujeCm7Yd+5SvKu1iRvHNRZ7OaxwohcAe8zbV9zKv5EeWyh7xXUxpRz2J+Oar8Ji+4w8Nf5ZPUb/+TIsjr5hgYsIMIbB8PTHNQEy+2gphEb29FMsHFor8MlPitTdN/RAm5xxapjs5BVN1xJSvUTSVh19PnzrYzqEudX1NMvp4UUGTnYSZmRMGC7UiF30xxZt7zPHsTr4oCo7IduY5NQycMpVcVI42yeVK5a2ypHppWIZXBQSjooLf0OVpSoRv9ieunzdRi179E6z8I9kXWhMr2cpILDSGf2z0nlGK5bs9mipzSBx4S8gMk56KH74bcBRbR59vIGkBgturwNge11gA4Xs9JEFqCAXsL3/fd0M6u9oe/zzicNxyQB1Nqr3QrQEzca9YiMR0XKfR6OS32tpSa/6CescN83QjdsqSzvOoavaVik4cuWv8i9sGHGsOJfKNX+Grn0tnW3YKSjboedHSVf/gKFUetmHbdDjSQS2Y5zkQQVtln8Xhph6ZTROrqA/DqzetGw/r47ep7V18ApDM03G2gs4YkZskD/dq/8IkvTt5MrPmqzvdMgZKfVRyesIgdSFqY1B+goPMOIZzoPlRQ2mL9krnqjijB43SudzLCm4SYijEjjTLF3ocUuPZAi+w1U0MZyc5lh5a4vo8TUD0THFuOmDI++EOe11o3vGyEzqDlWJfPWDeLwhU6umbD6dy0odXSDJ7SMqTGU329vt9CDnjgVkMSo5iRktexGgdTJxxYmTCJ82Bj0BGjgTgXPt3UhqLAHMT7c6fEUeSOljR7iL9mc7bL5myXbbPjbJsdZ0u2Zku2ZrvsJNtlJ9k+O8322andfR38xhAc2wf+QndPsOIWRICW6Um0iYGd+GSlQEgJzs77JUP4p+zxkk7lAovGOZtETwJP4390DTzsF4ahcH630FnoBycN71mxwEadOftnJ72k0z56E30+bmKYMhMfc9y4N03PR9sN+9/U5+vQfp+LMmj/aIehHwAeZDTGyRx7tCcPG9HdzgBywYVuZuUQSQxe+LEur7pP3PYKIJOvg/DNxBQwMcg3mRsUpfRTZVZEjM6ezSP1lGxwxJlh520hhOtRrmtsILfyCCsXBl2kwGsop2jZ9BQhU16XRwWVhXemE29/rAUJULzkAwr3tL1Ij84kvHDTGvapKxaOjf3z907ze4E1nzazeUDNv7HSaJAJaMsYi8nwYDmjjAvu/8w070n2ymchunSFwy32NrG7Pb1MklKncyI9/XxBg1mbdTZd+4yI134Ke2Bskr/5qHTR/42Z939t1dAzogsPgBMygEURwEn5Rgbtw5vb9aQXO2183iGLxmzJcScJMQ7pFXSQSAp7aoxUEUj8YrQuLYSGrghPPG/1I7RXWPZkefDTDjZh8CW1YKx9krVhrVSz1jj96bz/Nt0CYKUTPi0Yl2k7w88UTimvn9yc0iDRwbcEm57ZDSF9D7761rRpcn7URQ7z0FQJ8QxJsE31d5v2XPgBi2MDjC0aMko5Vundw64qDd6ifT45fjud92miiCLpDeKR8oxlcnbbIItbVc5yXkOx6ipbCdhoEFhJgjx1jdo2BH4oBDdT1AGfE8AVFnoIH8Dar+6kfr0qOmsdjJQLbpBvsTVnp1ISYPc8KXg+NSI90Fa+wUVmpXRe+a6dxwN7Tz7cvFmQ50wBRdg6HgVfgo/yTkupkp7lNWJz3Z4annVrJOKX8sOGvMExwMNFWon/zkNkSLTVH7wJUms/TUUnvy0MXe14/hGGD0fTJn7eOd7hXKsd1VZO7947DxjzBNuClatAB7Vdb9BoXlB0b2MUhf28BlMurNSbGuByswFuT57u/xhl10lUMo+KoVJURYF9dYPVzqXmQ4xUlHmdoso1oPAigc47HXf7S9fXyNMZthr7S0t3Qpiolr86CX50EHOhSxPXIHInCV5bU8Yu7y9NyXAhPYGpk4dUVITjZYVxMuwuo8pJLaErdPxivd+1yLATVZVe2N4oci5uJF4+qU7nP0b9lRnzxkzx8lDt4WoaKJqjNJoB46LmURfQMgjzv2JHgCE/dzufn+qYF5yhE1y/nFM80MBy9+Yb0aa8ISj0D3sGR+tOHxMCVa5ibTKCAk4pgYtHrhDMQA/LLzQCP7N1syule2iaaI8zlbz5wPTz0jfH4xUA5yF88n4jKz9xovmxsiNP+oWbe0yAwH57m7HbwDTginpm0z0ksDWWl/l9Wl++igwIDj1v0fCMx4LSHN7vTXVnNvWOUYFgkVglulKXyRcLY+5mfmDlGF43FVESxjzdWP6i/EHdoiXug9FlbdPHd4v1oPFuriw/+3DvVz4UCWR0eCfkyYeaMLNnuwdXl3+6+MPtj2l7F9PiJ/xUX2ssda21g/6On7OmKOtHku5DKEJUXWVYB8YQN0F9HRQCdI3DeZ+++DcNPtRsbWO4cR4vZze9eBPJynEeE2XPFGwxuMQqHeniOiyne7m4dWz/HW2cgu/ZuDXsnS69n23/82Ye8/xtm8ea1hTIa1b7nbZgUAIvezXYTK1QEwjMxiaxfLgjy0rEb1OLMhPxecloDLxn4+41G3cObl085p8EFZSCF4Uno3u8iz+mIpkUnjfdd/OzomncqumPLnjSb8F8vE3+ydr0mMqQdsI79KLFUTp83MI7kEHfQbgGvTBdEZROEspoFQVWzsMwi9c//CB4qhtDVrY6TWoPx52lshkEAng9thtfYBkbgc2JhYvCmGEUaZI7srmIpzgQ7NzhIxGc+LP7x+1zksbhsgJXxWt53YDLha3a83bJt6O3/mGdgApD/aTrZDtX7kWv3Occ5N57Ek5Gi++ghkE3y75HnLsrJSTKWbzwu/tbTrx22eXB86tsKG4dP0jO4bJ6l4FE9oVeunMmL2Qyq0Mxb9gGuO9UOhrkGfisDW1hEA8NtH+6jFvBn7vw3WiM/Ft636GC/pIt/AQPIIPHr+Ys/bRYJYlQMa4Fv0JrsJ7uhyzPb10gQKW9WdRENL7q3pEuNn5+tOmaLBFulHb4M4xGSy8Y/340EMyaLTooTUOotfxo44KuPLpoHCxQpyH4mz33Jm/Q0zzwcVaCj3xAjYv0Qcda5Kd1492Fsf7Cc9L48+ajIPLo7SxuCaq5fqWsAAkwuEP25AXXufGa3h4OxlW2bovDTEQRSwaiER+J0RNPPh133v+1k51bz6aFztFJBi7nTtLd7IZyWxby0E7WqKdEWdt33Ix91WEv8g5qyMm+p70WtD7IsidRlm2YvtsSb2Ydn/JkdHm0LniOF/dftadaXTJTQ0nuOhlnHzXuf/IVrVlzxhvHQAiWOEFTI7uLcdXOqQ4FuOfhrHm30Apl+mks39AcgyfoBAl6rl8IK7xG57Y4eMeQ7p6WFNkNQzwFfe0YFHvpshOG2MsOVByi2v4IPoktPtQliBtlhOix05Yysjl7b+YEjf+WRPUtCgQ6nIDTQkVvKQK16/T5wfkiCgpCQIcTcFqQBDqcgNPiYEiDAKcFSaDDaYiAhqppW98hpxXwW1SA36ICfJsI8K2QqpOkHPsm1zeRJ99PLtPxGDG3hDZLsoUXoqzv+mV8mcBDPjCgtAKx8av/venC2KNgANabEPFiiEUL3RcfhBcJhjN8t0bXccVwXnkWlqYXPF0FN/Ww+9aXD8o4cgkp1XGEB9JM1vebhTHquvCclEl6fUWa/oE9isavnLB2jY3A2RNhLwwwXg+NJBMSglfZxx6sHSyfu57Et1BzzKmr9QSXC8c6Pn5b8hdzTB88d5pxUNY4pWls2kMaPI706rmh53qC7xpbpSc9ZtVNlvI0Xn9QML7/6GQ0OqWBV4jWnHerAy4Z0+glt9BEHBXT6HxvMs+8QFnbNeWMPGfUNNaQGx1uVwdw0zSde43kU02ZBxKYtVaUkXZx2EeI1ODvE4YcNOh/PtIxblsjYZR5GcKh84qtX+cBDaWmB2UbWtLWxgQ5o9IJgXvgs1TYPjOXhoyGoUdCNMu9JE0DfZyMWEVxu96GIqBTvbSQQnZO87JHNB9hz+Kuto+qHFKPRHK7jPWhvT2GMblHUXlM+BkV+wu1yy5RZHtS0xJPk4FozhAZlxeDXCWzWsJZZmp2BxhxIoQ95mXXFgyHNFf6U4qgDEDSMnJShmOaF13Jczil+asHeQuXaW71LAelWDk7nLlUVQHJVFKFWp4wjUN9YabBTmbeua5PzLGdTSITJLdFXAblQbdHQIsOtbHqH33ZdkFIEQQTGCf57fHoYFSMzA7t4FVb6zXejrFoQIaIUlHoygmiFNolVQwOlC/oMq17Usobnf7ks6S46ozywv71YQQNqwE6uzR14opSAtPDYrmHUW5lcZ4K2lwdPQBHS0xNu0rVVHXIBz4YqnPa5Q4f4BOh9lX7d8JyuyF9IUwxwzkYMHqRq4XBl+FYXvZJ/wNjJfej1RDCxgPkxiNPIKIrqZJA+s4+8ynHQ6HQQS8pbBT1DY5vZL8lWJo/Dg/OGz33gNUfQO9AwKxPClKvYhyAnS2uhUOaK/0pZVAGIGkZOXkOxzQvupK3cErzVw9yCJdpbvWsep0rBZmmw8NtbIpXZCS/XCX8DKAvbCH3WxGNTU/T3U71UmoKtNQJQ2PfpNG1Xcm17c6oJXa4KQH+hakbOg2eWTHiNWZmphiaMjS6qycEbaE4yZHNpPBb3wWA1YRtmO/EpZOCOw23WVlcOUG6CHAz8Psm1afuhhpB42Kh15TivFbYXkzUjo/Sz7pCbXjJ2GkSvd5/jlcfS7Pfp88PeAVZxYb83XSrcnvH/TPS3rBpK1Uu2r+eLb4Jev8BOPOWyDqAick+nYOD8lK9sU6ZhJ98cUzLWjPvAXQG9GSMCuHRckkRHlhbrdQAtVHrNOd94VidyCLNuZmxM2qNuqAMAVfLmbnHiiZQBh0vWIuTzOFBVQ0RuKpLY1kPH2FvGueFPh1SB3BvZly9Cpbv+NHmyOFT3Dq1KrxiW3f/EQUL74suBnv1slwLoU2bbUPrnvXKI0Wd7RKtFkiUDBcryGy/2JUFfpLJ/c1VyQ+QaY2EjuUCxHSuqvfytcbGIJ5YXR8SW7NDXVXkKcddJkUXekIWfWjKnjTNt5hkaE2DjppSi8rQwgQCE6ABcZpiYRCLwYja0eRmVS/QgrwCBtUsZovsFd6zVDk5kZ6ypih7T8Shio6eN5xNKXdRJG5sNLudP5Az63y/srw/+Qa4UAFwwpRurgIHzuuhCy4NXV3hfPNuhtdlrpB7BHTVh2wEqzgZuq4MC4xRze3Tcy5YJziqrA9urkbPCLwFHWaKSbUqTjLq6ClVQVnvmhooAem+k6G1rLkBTqPIYbHyfp/QLmS2HbC205otDmxkucPGO5C+snp0ASabTNVR0ua2ZwrAxyD3g5kAKsAeNd3LinbE4EnBLAw9vlCLgR9rr/AadCA+xWxKx6gO+EWdGCffqNDE3cAGpGcuQzpTxGPGL4YKFnphy/H6QOgkbzuLhQNMl6AG4V1gvAqg2G/T8LER9aH7IdK1kYQdKQA83Zix6Wy9vBxUldPAoZh0oj5TUsdZqUdrT6XeVO/mjKPNc81ExV5rkdO76yzF/YhNarp0/AUyKYbGt9VntHFqz3luPa41ZImV04eNCnYDsWMLaHfnRBcHIfU+ooozCgJvGfpit2TjKz7FsGj8siTWiUEebDx8VndC4BVuroxklFxHpEIVPY3evPOZ0lqO8oRot1Oljdz2eETkCMQPhJGRhYWn9gxsWvvFmE2DyipGZ0zruIjUtuOaxzsotCpStyynSmJPeaUkB4+nUSI5xG7buKgIL9w5U6VZSIjwaRcbsNl24eSotT/QqOosPw3iQUkL7mNxQXaTK97LhcCImnl76tbwotb5MqlbYvxh6SzaR6W84GnDdyHAcXMFU6ZSbc4iG3eAJJIrLnQy4hQKZd4BRPS3QpG3R6LLokSkh+KBaUOB8aBRIjpEWUQ0x8XZwbGfDFrfP0Wr7mxOifYpEoVJtJbgksVJDSBKS9B+h42UI/YmkLi/c/32HYVriBGCTVmMB+HOUIlGf7ocAyUIQPUdmQwP2BkxYkLr+3Qk+cOpxCQheQbshO3w6ltAs6+mdXWrm6R+LFskYVI4853nRcfsUpb/XBt6zydPOq4VCR+Q0OLIaP7OVKrk4xxtAFEBPhPlVT2I0cfDsbjlXZQolHKVE+3nCy2wu6bfmNKrEiW3qluKp77jxnAtK82jWOqoSOf40HxbbMl/P5xDam/mWV5JP+6ouk4xJN/iIDJ0Uqk+SBbzaT+n8OvwUPcseP4L7b9Nt5RcGbqej+T9Tzp/dZZ0g/Rqr31Saba2l8X34aYuv4wm1k0pU3ZTy7TEJoBhStwpZEqaFhDyiVr/YREhK2D1hBIyOGd50cqFInNikkAWWj/BQBxTux9FPiCipxFrKPVN37/m2JJwA3b0bndB2RXf3lg36MFE7He0M2L7UHvAmf85Hryj7/GLFYdv2fjTi/1tdPXgH+RLkyB1uy5aNDFMZo7mChOdP22XCraOoveQ9OxD9rAseAPd/TBsxP6KpHceTSG1kzHKXp60f5Cu7FajneRkqskX7QRxg9IrEw9mEf0HXcpiT0GfLr0gYfk2uBGu4ZfnhwrgoJwSORjcYwKSm4KswIkJzNVfryv054JiUKs7vtCsSoxEB+DrlQGjORo9b2erlMdgg0MDqjHcCwplrfmJdKIxdYU3NJBf/lbddHUQF/HFtZMcJoU/A1Lw2Z8oDBWmR64X3vFxL4GK0EyG0bG/GocL40m/ofTGWdfiGKmYzbLz/Byu0srIZ5f1+4ACEchDhe6mSvAAnIJVXwXnoaPSG1SRdVWTnXCJm843XgmVsPHAlRdRCjYVN4SkmBJ8poVrzANQWHWcztOJ8W9jm5rrlPrfUMLT0pGOAWxMv7H7MgN/MczYFT66DZUTa9UQhdPdfdwGj9VRLbiW5DnMhuOJ6ba9l8uSKiqOLBMHW6rt8cQK+PbmK+bxxB42kw3sY8hvcb7OVlaBFVuAYqc6vUIj6pRwZCwzDj7D6j+IZBrmBzTIKSRgUBo95Mf0FGGsBHcplikmL3Zx94ZPfBbYJfJsiFnntsQ4ZZeeopRmqgWKDvRHbhCRPCOpL8kknIQvZgpyOiB163cehEFw70PuTvUkzQL3VRHOTLdWuAcaAM1DM6jXfu1zz+4I05tbPbayEhBeTZnBYOfjxqV2YvkfAEcx4e2kf9hfwNbayW5EXTt4jasavTsmxAaJhJUmMqIMObUwmFpr9Uh6ErEcY3gmEq/ydAGKdAlol1jUP6DYii5HpGUEIGwN2BvQU2hsFdiLPPLlSMsQJCK5sbocIQZwCHBZrV7pVxAvwX1A/MnbV5YyAvzMmW95+1njr9gYHj+F2Zx4Emv7S/JyTU1RP1eZSFrHLfH7d5gsDJZRTTjcT+TfmpaOV6A6+EmlOfxJe5ZkaUuA1ktn6YEd0oY5u3TvgNXl5m5fonqk4/HJmSFEW/1fp4EoEy6Ga4dUC9Oon/8IkVWE8hGQjHclfTE4zvMEaC2KW+UETqOHqHAC3yHjoEMvlkBfFCmgXIEUKbBIpLGt//U5U1CFqNiq9aZBAeeA5nHTxW/tPaTQZdeVLXaafuNVEAXvZZStL07ik0aXLM8vnIAnKG8+iLvb6R9uWcExze8eXm4ARo++EF8FRKHyU3jxX98CJFGjpVwWjMzCXetAw6485cQ+HSvtCDdvz5Z4Og32CyiknRGVXi654SMD+tjFwN2IFSXBgzZ5ZWG5PJjl2+TbLPIJzY43fGyRSvqtOMXbqi7reThgf06fDyjcmYK9fQK5M0kcEGhbGbRFUTGIh1uL+Uz8RDypmMOOLTCmAW6DyuMW6QydJHiYmDc9fKa6t/rB3GNdNGC1uEgHFg30MsCHOWOO/d9UP1kreMbivD29Qv9I1g4TBdkstQ/83yVFNJAe9HRbBSJvaGUPkcRBbS20dmKnjShJIcbrSTG4NjNlkjXIvqAo2yEisLL+V9dXyJxD5I5Xh+gkbvkY5dH6f2ksVdagryOR2TB/Kv+PibZuaHw3vD7ERAP+imqfoL6YFw4lHNdJs1dy9OaMUGUC6BB7aGg2zhscql0+Osys0Cjoezv7U3tRYNOhGUvGgaI5a1q8mIVyfPsuMfbthsPO9twjQC0BaQJ9AgPYrj21AcAQWsvqYka2cVG2Srd9V2KDDhOQ3DxsoBk5MXOS8r/KUeZBJ6V2JLdSorIICR8JhzLRcPPaOZpX8g1VpWr6lkGiOVVrNP8MfD+lJNztUWBsdYDnA+killDpNQWmxETB29OhxrIcmLLqfxIWXhWgrn2BReOc4G7j3Ti0ejX+Tjz6XjJ5TxrMTaGhFwd2o9GqQC1ngOt61hNpP9NcL83nvKBG0rM4H2W69OOAAAicdQpW5OuRx6tbpPyAjEVZSlFi1TqIztVX42kXsqijqTMe3JFv+mj/lsipC7zpcc6dOecgeS0DGt8vjehPwF8rqDEMdd/eLaRxGTDigTWtyJedyLm4sVL+HyAJu9Ps3PhVmnKmc52QUPqlFXaX0G/l33MDwdz7TSm73mnQTtGiCRYYCVy/R/AR46XiwVVTXhC0PiyJA9TzFIILJUWuwhWF5f5XNoQtSkafb27dUvkhSqLTdSaI8XpOT4ARllWWSkZDpK462Y8DJodjeIqe20a03znHTaaEbfuEs+21pGuHaq1Lhma+LXuYbdlPBppq7+DBJBTQX0F8kBOkL4ohiUnqD/Dyfm71iJ8si4zA6afgjMBn6mD874hMgCU8wlzVBkvSdDZyBKZ/FNunFwPON7ajiU1Hhmvf4TkHOUoDchB7v4w/Uywj+oFE0GC0WgTNAA5DsXjKHYGeYY1fGKgCFF0lCueiHZAg0TQnPtVQhyUhUHKxBa7zcV+ozuB/BNS/XBnXa3MouV0s7biQ4Ak9oDp1XMsA6FjBeY9fV7eqELQSaYDwpnHmZnbWBpyNR6Z1DlRgQN3oy9OKTtD+1u5PB5LOXNIqC5M8AYWH9PfoBn+1AcsD93GwHLasghLADDaHg0euU4A2LFoS7bFD6yc4vzCcq/SpBEICK4hCDOMSzNkiztWxQMeFTMrKK5XvC2HFwiBpQigGCuHi1Qf4kVxGK6ByfCrHTMXZw3PsaBUH5lgofMv8Qy4gGF8PNd0KlBByYgAqZvfuYc9xdNLT4ZHkVZwi5Odu8GxAtLcmTyxgGdI5UDqIKYQtXXoB0CLzBtcfZdL3xaBy7qz0UaQs2v0ilLBAD1JsKtLzQCx2ls4tHswHBvWZ8biq+d8YvXPbtwYai9KoqhikFBUaLEEkGGIhTI/jpIBKmFCuXi8DO3S8T7Pe6sEXRx5MKYFKw2BPy8RfUk96d/cFVeU5iV7abSQ5CaN5SYjOzYIdZY10m21gwinO3ul0TYsuW4q2mNtC8CCS9ZXuTjdzZLGNuVuUW83mClFoT095t95yPCeHLkHoA4oj9IbfBLFxGgP3g/7PsTMOvKYg5ibFpWJX414vfI3KCYFck1pi7u2CcS6E6e4r88DgjvtFfGpaTC7T4sVLLM4B/7SMhKu4JSCqDkaKQWoFeC0lqu36LQ6gDXxJRAIsZmKflZB9nB7ePT3kCKNOQlD1Yw/S4XBb5h9hxazKUOR7FgT2YFOOF44TGex2hHxblBI944Mn3IvRlvQDa/v4T7Xe1LoZLCIr0983YqBHMVRn3BK0h+E47TkYKj8OHCGpcDvtrF8IHBajqO0KIbRodeTmeVKjlcxuRFzBwkjoNTdiIeOD6/WkCdclbBDicEIJLLGFshCK8C0deb+xpP7IXQLiXric/BuFNqwK8C1wmiN5faDJckrEOtYKWXjvKd4UNpnI5hitG6s6k2J/OUqcNkHa+5SBjcOVfVm1s3ZkjvOaGxxCiZLq/ZcqmIfmF9TgdRWn4gA9JXQDXRr1ljDp2eVsG+d9YPK5vieG7yTELCjFWTo+wZWUUwI+hbOB3NJG1oNI1w2J/w9daD+hY8YInjo8qQrujYjNc5rWN/8UaNzeXuS/vqqMpDsib2DdixjJkSd8DYzbleiWbts5q/gpV0bfVnQhKAqn080HePElwcylBnUtUo360eccCYoXUYwwlOtgD5Ws9tzPLq/LqHtUSn4RtZsyHatJ/iz5aOpArWYkErhliAmuFqGNoZqeCQNpugk2+09YnbI5v08k3WE8M0Ex2UewOyExXEew3PNXTHHoaZ1bygXzvtPVISKrHt3RP4l1EJXbRuV+lUEdLrxxyxJIOVtjdLWzriqTjr75iA02S311JyD8SLEYqZ0iDFgS+yzVoLSj91NZV3jSf29P3xOCpZ5i5wvFDKsv+uhFzHXx6DYUEqp5gY3VfgBkaPuBm8HY+Iwgq0BT0NgvnNWFp5FrCKKab/0LGOUytFBWnm6XeJ8v5nFnxSxa5XrmNDvr30nKnJFsKLWn4kgSRqFPxN8lbqwMxp1BULx+5obgNy2OdQ/gP/1SyryUyz2N2rccHIri19iCD4QtacyvrgRHYxfJAG/V7zLPClreGbN07CLBSEjEQMopaLQMhJqzxjTCwamv10CAKSeaSwiAY2KmJY10XXERVFzHyji3NK9xU7cJBmwc1aagAjecU7v0RlSEekJ4izpZvmDeG++XjjUCSlUzUfhHaViwaHwMkshXRjsVZYsb4QWd8jRgpGigTFSQzHTKgOGAiT/seKMIYcZGokQQ3IWgf1/viz/e7/IPMZlQkhei51vxBpHi1DkkdrxAVAIAnqNyKtIovsrT8p/vPu2satnDVGBvSTKSnJXUHrsctkcVDitAN79IL3ALkiME5hyRgS0PGaywVgLu41S+Kf5n2pfg1kdSfLOcRjlsUQ4N3MpcxmSVlo4LvDBC3N8dNN5nsi4MaGXEfaUoshEcYm5X+oJcYXViIYFxwmaejUUguhCqvMsGHLRTclIe1VoQEHAZK74f2DSCVuX1bm0vr8RKnQRzb/Bzf3GYwvA4ZgeJ9LbcR7GmPS48AK3x8H32ISb0lf0EXzqZwrB69i33Odwnt859YqE8E0VVGhcOaHN87wYgBzqCUx+WjyiK86il9/RN6/1qTsN2faIlYEV/Ajx95QOGGUQaIK+qW1oQ3SEUv60P5d8LR6K2OiUXLtTEWX6irje1g3ERxSdAkqcXbIwFiahcMgDWQLRm+zTM5n0YmwuyBngiivu7IGlQQyoYhusHkPuQvcvic8hS7cdqAwhjS078wZjjIUC5PMI7lVglhGNc5/eRDe9GG6aoayLl/uCtdC/W/wYvv4tG329tfjcB0NPzBJvsIxXcglgLwoUHJpAFCTZQt7e9AFTU9vqDKY0ZbU1Xi+KLn9e0cwvMdwWWUowAA5gsf2sGaZGY4mpHhbCL9MaIUibGuz+8toetvXgwgMmjR2CAynuCe/Yk8g/xNH5m7M2f2x+OxTSA9O6Omu6m5juM1xYdksnQoRZJ3SqwQJFBjVz4+1++7pCnZm3NJt4gUmihOUpWy7ZIhOASdGlMs0uca44/fwA4Uul9N8mmKy0f3H8Ijq1IFe/J+RochGBecWMhrJhngFiTuh7juxzeqvy7E9qAV5rdWhKawvTr9ZT0XwAc8oIBGyr3aOBLb/2zR6L+XYU6zKH0KjZ9TWAXajW1GcNfvgqDSuCcg0zj13uG8Nza7vFX85ovw+Iwj+d7pR+R3yQfD1AeJNgk/xb7+Nnp0fLGhYvBkhUwAVNeLBrwEw2F9AGnttRPGujL4nlsO3M2AxXqOcuxNcvmrzkGj7Xaeul0pp8UrdNBrZP7meRoCYd8z1+7ngDUbmkCf8F/jIg8Dvm+t/XB51ISSBK1awjSeFV5zjZ//rdMTRLILAcW7NZf0v81/cMyiOlWJ/OkI6rEm12XXC+Wbaezp+Ugkcy3q+wvY2zq/6SZlHU+pxSzVaQbyenM1vlxcZrhugFLFFBEFMNjYGwYnRnndJBARn41ypPZAkHHz8IAVYCf9nGbPPKNn/efDb/i5r5Yfv/Su5/lB0K506d5FlMjBkXLT3UyfivNIK8SEOCIdaD74opxXKmAqRuMlN5ALuxTw3KQsAxMBNc8ct0gPeA15khaMvQeQsJJvEOKZnQWptItUDise8FIXpsiXPNkxYWwaTGwWLP8XKvKc6TeF0vN+xOj+yv67MKjPHINz+GffQLJh2XA9I4z9ahsXHF882goXnbi/UzCMrd7L2Tsta9b0BTC2L77XOBGVfvaBfjoYbFk17VWrG9vVWc037mYObPc7JssAK1+3B2uHZ3EodHw6o0Mglh1tavFFiKjssV8Iv/G1ht3kZVJ8jl3IiS0oy/SeBYF4huPH0WS/emHuPmEbQIE4TJItAk5fkanGHxxyYLuTueShdqj8Rfmnko7TLXs4bBHj0fDTeHDwbC7Vr5ROzn27g7qPFlc9TvFfp14CrKHP3rHD8SGUd7eICvAu41ZzktHEPQTfPMiVIIFdP8SDygwhhJ5jUv0h3LpipTy7fMgYusBkaDKB1jjrSQlYztUVhC/Lhgh2EM4nkUa2PIcZZ7OXly2QEe5NSPWqwPa+jJcD1NRyIlefGdnx6VUzKK44PMaUfP1oRaFc8RSOGlJopOQWXbh/Kioylge3h9ndHLO9ig6FOI7x7chvqcdos0aqOltVEqU3R8NOUcO55BBx64+aZIJDaTQv0hr7KrKCk0LmJbyCPf2mnmIWSPO7Sxt6ZCE472Sy6CrQMj0BMnjJ+7wSc6C2nGNzjjgy5O7rjcDBh2AIBhpAmwhB/VgAzvf0t78mKfPspscZ7IL60AXbgcrnIP9O0Jn5hlTwj64lVYlXf85DUk/f4+dDvJ+s43+uKawcDaEJHZkibun0YJD/9SDIKcxkjjO8z3+G2RILXGIFhEjtF3gju3DifbbNXnU+LObzbdfT9gBR/pW5lL0/mdgnjmZJydfJmRo3tWdB6jbDP9doZuqoJO/Z8nNj2bfUQHjY3DwzdeSRi/VdlPi38D4w3gh0QC+xW2ruJ+oWU6nl/jtDnN8tZR0Q2E/2xNtDVc/nyLC7XTKE1wBn+WHM09Fkbk7Vcl4QeiweY6DDOALpcUX1Asb5FyUcFMpJvbyXuOaceZ70yv+dVC8qrRL95bc3maCTNxNyyZX75yRVY7JtssoiX87eglsgbs/7+FwJNz47/hhW5/jjO3QKlTCt3HVRMJWNoQIweQ1iK0zIlgmQ/fZobYeyjCxu9e8oKCzxidFPqxURvwZTW+Q2LAZYxfwu658zi4HVlrm0lBy81CM2hL4zOZJkhcZSdE0lh5uRFizpej6OcZ/If37LlGVCoXzUll/W2BcR5jPip5RrkSF6M4i3WCd18gIB1+SetSGsny8n6lHzh/y/pHq5p3PzJ4AhbcFNljSuAPDb4S0jMVZQ1sFkiAvxcoNcboJYhOFvYsrai0tDkVgID6bZz5cTfv42If7EeuyycLcWdcX5W4nbKqQzIJpuMUT+gBYXq1BcF7zToGxFRdUtj88ynD2EXoGfEeBTiQ1oj95/Z5phChVUN5A/TG1T/yGssVz/hAdQrhgWVEPFJpTrENQbeR+TKEw7YEnTOgATqk9M8srhZEuPZxUupkNfkJ9zFHFJX4Un30WJc9/sYF3HCP4EXhpg055AArtORg3G+DqHp/hXP+JW7NXl8kio6othrhf1n0KWc+K9/aFFLz3G80gJfgnvBMEdaUjPz6sVLXhmeooiSoVuK3a3PraaEF5G8uprbpzO5ZoYYsJuWd7hBVsL0/9THdEjtoVcj9cdZ2dHmuotppbvHg3yw3Fs7cMCKgZIMe2hKyCQJFLDEIDOf4STJWYov1gW+tbHQrfnNJCyPVDqrL47g6qNKbJgxiZf/FROka/kH8l/cer+V9uWWBl0b0HKHb7ytJdr4UIFGNVyMOJdRmo8gxCKBGqkwVcxQfWjQKLPX9hmJKQV0ZeWbBXzGxBzu1O1tVSg5pftHXWKJ+TNc31/C7RN36hWzOsPEnWWMgIOQwhbLPUrMqFTPXRl0V6Yq++VVvDHbszqyozxJOloi4GaOtv6k/TvuwqjqTH7RfJFt52nZK/elPaZyFpDraXX3X6Ra3CAiPzaNcQnjag3Vt+cW+UeRmWixJ2ZCZgcLpDXk7rRViUP9eh42JVB1vBPhDRgVjDurEUJoVmb+EV/pCifIMemmZ1GJ8ubaBw9TFYR/hDHLPwJLMFkj23Wd/A5IhgP4rm+JrCeYU6AjGy36zFOr7IKp3o7gSOQwa1fR8yKh+behk5ks3mnitdWvVC+zAyt/uuoBCm0kMmqMdrQoPcpbBb8Q8D4PS88LbWsBdi7jTblvT/mlHjWRxd6s5VySl9jX476aw0JwGkGgJ9VE+KkzoCW7K7CHsW3GFFEonLfZiOacldCJt/CNDU5aH3x6GEe7sbCdMqm8sHd31A/OHbBErDroRwAcKl3HjjZP9jL6fHqW//XhqsxyTvrOuoBdYkP3U4UpEt/eORGT5ukcP758UWGoHbudZwp6G1JrttXby0M1nz1m2e3OWd9R03Gv2fvfhiz7wWiRi4evtd04Q8JoOtHfIdqEOeEqdjztYou9wG+j0zabhVxW5/QTSsQW/J96vgLVuWELi7vlwDPXFzheNG8Mw3tbXWxTu/K7hZts69suHOdg4IeFMesg65RNNWf/MHTf/xbfUCr/agw46Xj8KdXTlsgZOc5KZPue10wbLzLfh1zUVvGsDAYNCMgAq1HZCgtRuz4KA46BBAoGQjaEqSLPyQ0aJhor+fSevf0XWW38pNFAWgpygNlRPjEJQlGZlWLD/xtVpPVQB4x2wOpePME3MdPeN3bzkISwnWOEnrL0T0ErpgK6vY0Mo+YZq2T3ubQuSdjR23E2Omfm8k/FlAqTB0vKUiBWdf2NDY81ivcu+Df1Vc5V3hog+PQm7VHEXymd1Lp7WVXxbIL0GxfMMgTSHfLkWJCf0PNY2Wh2MOvE5BkwPL8TXt4i3SeAIwSxY+SNBj+mIblPdp3nC+R4TfRZSlygDQkfZKrGxQwVUVfrx3HJlQrhNkNmxD/ia0IR6kEGNPs2aoZj1NhzPqWjZ1P8aIU+byzjqPW0Qc0+zgZdo4cYGBlS+ovxpSkPQuikJe2rMYxWOcLQeCRPEJjhOOlekIjXXHlg+n6ZSpl2MMnlLlnfUdKj8NtOnj0M2Rtdmb9moFE1yjejJHOCZG4KiMCbgO/GwzKuPvk1wFhERmMPvpJdLnSISJX8wcUC92+vk6CXmxg+TIX19+DQvb8uT6V/mHNf5MemK6ZXv+EPOUUXwh5BfH/q6yZNuDyw057dLPzGE0pgT/Ny37nmTi1H3Iib5vQf5KTcgHrQ3p73KlV9P513lgwdDfQ37KkfDuo2hDdVtVtZAAm6fJR8AckUB9hmqq4r89NvPX//PsHRw5xxiQzBu783ojqzjHt7QyT0atc6QDrCtUAy4+L6gsMu4Q5h5qgGAmd6QcfGzIsEXDg+WQqMAiiVfyRHvBNZKc0I0AZg4N1s0oFBVofv4xHdTgkukhnAAjWRS6wVrXD/gszfAkRQ5UOsqxWlgYA5EmtNmoZfuPxWDcdsTFg2ukYdWJ1PDwpYPo7EEMiWKs3tVjBLGhzT43TOJZHQ3//UmxiDrar3EGX6znaOvKeolhoAyMvJN+/0K0cF/N94ZtjIQiYasfGFzkZ111ZQkEffcqRSCFoYSYK7wCuvSMMUV5ZPo8XWCTXWrw3pThhxDMAfmtbLCF0LQTmu/lXwsNsoNmPPn5jyGENoSvMzLiBx7wUuoQ0+OmLf1fGC8LA+wCDO/SVK4nXiGAilCjo3/yriG9LIzTaevCfOT++GSEV0Q+uvhQUVptGf+BTf0ecx2PzB2IjSyqPWPqy0vlUJAkXkFvUbjDFfxFKevgXhpDWGcw11HbRVa+kKKkADo+rRQFUWQe1p6/j1CcNG9PjOsrlZH0QjeG2vFCy9DguZrxB0CvpGQ6gJ4MStVgb3YyLN8HEVcyRD0cvFImgVh3z6Rk5Hopn5aX3nd+4hFQFCzIBBNfChq8mLR1xbzOqyr5vZOZpgyj4NWC6uudjO21CXXOWpIVD4tj9m002HF1Dk4kQolrbcmkUWXbVR0V4VpcmAggGTyKwrY/oWYpmh1a2QKX3WCiiKjVgaYfIpOAt3fnN8XgEKDPQSwRDEHHtleE/9SigCUjyLmm9GzXc79n0r07lSFsPPVSnRYvnaQQcyWbYgZLZEoLitOrwwBAxIXAHQOEP630VwQ8mnSoi0sOUpPA6PF7gBTGCrArgBP+TUJO+L8V3k0wlYBJF3pFNEN0tW3yKkhF7aXxBoC9F18PP+L3V5X7w7G4WHh53ae7NLldcCbXUm+9ZeMu3By+ERjR8ohQ/SATgfWFeNWCJT0EGWqFNIpwwzo2rzUASdf148P1n09n2rsXWfyninZNY5GxVPhTXzMopDETQOkYQeI8QOt/oYSnhmPSV8aBw198dbDGCbIwTtjIDTq8PzcaLeocJaTwe7pUWvXOlZRdONxca3Sjzq2Eu9DefK/Rps6dpOiTIGlZmr3MiNt3yYtCR52wz01UEyJ3oJ0Lg6byd35AHqhZ0fCLlp947jmyZOSOiVsCN0RELPlmpblagitKKCwti2IrxRR+FgH/yrhVqqQoez07wprgyU2o0ZN5xwn+vGtZlZiIHSF+1WTRaKejnbydWjs1jlU7Fh0rdyyzSq1CoWOMFIk2Js998b8CY5uoRuSV7GiePUt9DuvZFSVQy472J1ExsfXcwZFa2KdDSKY+oBiyTQrMzweN0YAkvnDg119klOUH/6wzCAq1XPJQyA/8JNnSX8voq4mIr71U5ln1K2vFIJwf3c+YXdNibEyoke21gJB2d5JbJNPYNEV6fTvy3gziQenWUUvYob93WPeNUsFaUQOXUpRqxw7qMlWu88t7xvWKNKVGcIm/UdzFf1aYDhJ6ZWxLBEQYS8k8lsy2JH+sAlrnktGeR9ggZ46pr4vFJyK77eo9xs91ZdbkThyvkyfAoPi9aZXyn+RA/F1Rd2EVmfmG1r1+tTD1LXer3vEtSQf1TtgJHHdaUdLpC13A6bgR8h5dLQ/Y8nZc0HmNz1ysWu3cpEz4Vityj0tySKz2zpt5iq3GrqHrQuRYAMbbqZHvSjqLEdiXo9xbcUk3oZi/+KsT8PawlJjvasnBaNm3uuskhBcUG+skSkvHE40lIFK3/JqWZklx6fpcYItvmCHji6h77ueEQ1RIItdLfztIWKL+5acrAito8OMh/vTLhgNT2DwSLQ7NcNg9WutUodZ4tCI0Hn1m4WKbkUp58pp1vmGtyc+3ZZLF7c9UynyIKOTcq6qYQ5QXAwHcoI0fEA/4JUfZpGPdqTy/7cdAXXKeQTnIW2xy4ePOJ5EUwzIYbSihjJpnGLKzAw/FcKiNAqJ+QoXKCgrmBjIA4Lm35qO0TDELoDnocXXAW2TAi6oLB/GDvDuwJIY+X34tnBm9cvwPLejcgc998GGqigYRPQtfa8LT0kH4YxrZdP6ugGN/WT0uSt14Y+fI1HVnUPmtPw7eO1Kty+ouzSQ0icJrL/Iws+L+a2qcO4Rou5Gkcg+Twkvwkc23CJUizVpfS2vz5zPPsBXuTOhPk1RJSreUle5JX+Xf/Po8oJWu/3tjFnJRf/NoDXI5G6nyZjaJOyXoy8UzoGx2yaN8tvNzQlZTITPhJ/lqVKitCNeoemUkRs89xWMSKg0xY453MdvEMMsKFBtMC/kO29DnOsU7JDxiPpsgAXC9LSU1M3gqTlS761LSHts46AeawsKN3VELv6T3zHFzJ6ZHE9JZRH3cPyUw5F2mMvcDn59VIRc/LAiBpQY6ynOZVLjGZRUV7O+czeScgb6MiDZQKEdUZYZzA1VFAkXFFoalKwAI5VyXuLVfHO9hhdfqlz50+bko4W0l3Vjw+ZG5gqGJ7bodKRlZ/+jcUOvcNvvlQnqU8cA9vvit8h7La5Ur6Q3alYH+Ytbgza4ZC9RGCr4noT7a9G+1Js8+AiVRcV8akWvFTLdysQjy425UVjSJAzDBdS+FpN0wOTaNiqxXqiPYxdSldgQ1kl4sRvq6qcYolcMRiduoPlPwOlSXcxugZ8Zohx4JhCfO0yj52q61HIulIWYCKvWSgl2kGPHM+q0u0UWaoUqfAnKu5D5xNop1MlSzqlYYigoKFAV+4jSEn/0jZd2xxjNpjZThpYwyxD+AE5cRyHY6hB8FVxyj3VNwzSzM5MmIBSJbIlm1H7t5DvItZ6thlOBCOpjVRDHN19WGsFzrgy8+1OCyvzk2c+OTVanA+7MUwk6Rjp/kJGdYfpnQtynbLE0xCtSdASK/W6W2j9c5/Uxxd+jOE70Obvg7ZZaHQmAcZCLwKNqZogKkY+ZrAgKsweD3YBwgFt5BGyoy4RUyjqkt+iiQ8DQuO0OTHPD2fhvTLdGAj/rQALS4FZDQV+rh0SFLS8RIyUDvcqU5p4Azzb1wdKyR4L+Bt5jchkvn3oLCIQtnkdBxlo22tGQvl1UvQuslMDcj1KQsIkLLpX9ZoVIWlV4hCk9Pw0RZJkyyFLQyJ0iaa4bdBVLmoyTNct4V/j+BeDKipmZ7N7608d3anj3e2kZagc6mxyNQQREF8pVgIIkaLJVCVb70VluPt8+crGf1/NS8r4JDVlccX8ONglPYjhcZtXnuqRjRnStrTPGWpl/CO33fULuFkcOKFe5H7aK7zBvjjFxj+7ByuygP/HcPvB5uRfYutg/8qtcHN2PjlrXXbxbxqHWMRnmLMqfH8e93E/ZgtImNijKdbcGyv6ahz+X+w8crGF64TmNd+BKKmOxmfqQAimWWfF7otURkbUWHG/RjBPelSur6R7vB7djmj8QVILwFvbv2MiAP7LT4FJEbrOtcRftmbAo9zPaFyQOsT25rL2jp+n0mIfN95PPMLBwxxpjuHJVlhErR52cS5de82yNKeDeTcQq8zLbGR6qkWD1c/Rpr2pN1dQTjbjQdhJuy4uvqSAdphYyZ7MsTC2NzXROKFZBIptqMksmgFOx5Q+khsD4Y1KrKoiAyRc/FnchZFfsbar3knmuG+IM7d/z6Q41OEiidh7ilF2g4KgRyIkfyyp24UFL5vA4iveLbH5kyVeybYzjuyPLQQtL/DQiDROy3uz290wvS+5siyxz3S9Ll5JIwD1Wz+XLEt8sPdZotdb2wUil+tmPgtWoDF9gsRMbyzYYiHrxiaHLEgYdeqd5xRqnkg/1SW7VGNLhFk+UDevMNUOEJskQpE/CNyjptpavtRpn7mjClws3I8mNg1bzvzPURYCMS9GmFhwonFMZYMR01JanhY1MhPCyDc6LAszlLXvCv76ZvlNcLUcwatVrYug3RaWRE06rmPrB4v5/qi6NDkz9HQxHgLNj9HW9ERJ7KcXbv+bbqyJxPjMCYuO7KU/qyMW2h0MPQiDDcaUzdA68Q5sljY8UAeG+ss5gf/CLu2bsDjeoffDwg6r6PV1TuP/Y6fpdis7xWaY7e5TqT6vvbOQ3leQPADrL9+3UshOXlnr1bVlPJFpwDPb/ck3kfskZ7YahItawdKPwEsHrND0tp1q18JrukAyLYBmlvIyHVKRpX3pBqkX1lMyjOmL8rZ/sY1jb1qg3bTsLjs9ev5PbfTUgl08C8ojscM7LnuJOo/upI9HqVjWuCpDCxxh7gtTIqk0dLIjGNlbfDkJ10VCN1tc5q12NRMzDgUlhEJRPJxXJDVWOfeg3VlVO07vg4ArY1XFe6T6EhIqPq5zcJ0ceHq9h18PiiK5RKKrB4oKdTHILCpX7KlFLte0h3ZWZY3a1/0aezLi+ge0PhIQ+uttJhawSX9IknDbHs5yAfgjSs2uxtUrPAU6tKBR1DuWbuBnv3dNMledep9JZ71MT0z2M6DEeNf2KZ1h6r4ZFlGVfH12XcEh5f+MlJI/3otHCGwDUef5aQH/efvgy8P546b34nWsvfhEbeY9ZfEbVBn4vkMkEM8o/V3zRZCeXOa8zrYR9EtNPImB4EIsZCrIu2DXpKOcHOlCWphCXQ58fFSWjMX6pl59R3mkwqLd+ueb+Ma6E7d2HfSRiMch+7MK5tsaEEETbKqeIPKnfaIjrfBfODDJoj4NDbaSJqfNwIikRDjXKAHH3VyZyqatQ4xut7vZRqmwuWDvnZ7bobb/JcITTqPxZ049d5Cd4amevV9Vur0EKzM1+ATsSS1tTNxP19Osu0yZrlKaYwzcvqrDiebCxzVyhFIO+VegHeeHT23dNqqPCoMmLjMVMjDbWw2Ww8QBs4Y2tV5muL2+ltLHeibTlmVJxWTqDUakr5EKg84xPsOHtys1nq9KaTtUSy7vRLYDZyOx1sm9c7vWz6Fgnp9eIsZo1K0GgdDV5D7p1PxezPF/IGKHgdOUO85r2zR3tRn/hZ58TmueAzCltiDTH3sdq/jygC3tYlWkmbtuwNUowFet7XqAr66JWxp2zfcd3fo+91snBtJj20ChX8+PmIh/2Lt3ExUbReNX0RYak0kEbIHrUPx/dGWWk0jSl7LzJB/FZwYEUKVxVwKjzL1TAJIncIuimvlmX7utVoLg9bhAtn0i6hOcdnZ9UKA+moi46VVDw40b7j/T/l7245TZ2g5ibHk1syti5c4t7pTXn1p6RL65NcSffhYCfa8+BlponNISEx0ZBLisn7kngWhUEHKkdVuhYKsb2G3iV5sTaszfL+JwRWFuuYbCfha5YZ4gMejbIHm17MROOFQ45LEsdBjPBGZ+ZU14+XjQNEfeoa9UNhqZVBi7k2slqQ162JylA4843WSLetR2N4tosLg1R8iKazbmDHqqbRYcvXp3pyAymG0uB9Ro4stnuEjqKtqkLXOpqOdOti464ZncJj0BM1fAqSrScfCiMaxDSbh//WfLwTnZ8KVxvt94uGKhjSdJKgSodphwQWSwVeBdzqDhJQ1NlBLZNEpVlLeQYJ5ZsVCs/JmYcyTMMMeVQXCd2i+REQouvOQR1LKUEVQzcv/MIWYDUVDA/qmVW7fSuFlQyXyFkRvj6pfUMLSXBj/KuSdHmC/jj5lJ384QK4ef47Nl7gkicJR4HyhxVpZuyFyzj1Lh5/LQvhnMRIW3Gj3T4ZiDWN0mGUlC4T7N+zW0M7mzYk68bjyqpGy0spjM25gbpV2Mt0s1/54QOfnNUKzCilmnUpLjekuCLR9xlDQ6dzU8uryapCMg0ROvnQdyCUvFYOuosDTxAyD3hrBp4K6r2CFAq9NmfocWuGtkuBQIWVwQuLhqW4GWRUtBxERBKA6qQvjuzKkAU3Y0Mfb22qlekY+oQFsAUOWKKAZ+fAgyM5Li/IioA/48oIgs57id0SHkjvJCkGHVU02TnW4Pz3Ni2jLZM0GNMERsPdQMY5DeDRURrVljtEleqx6K2BME4wTqMA5xSnw35tQCSg1xPdFdANCn/hUyEzvD6z/ALBIVVPXi5lLPJ0BrAbP9QDHnSoDpUScNRXVC9gBWMD2AE7QbVoi2vUKLlZaczDOX12bKNMrVAhOjJnDnGMygc2g4OTmwujwMgBWDAyNokrEQo9pDjzBzwYLsTTo2g7ig0p/9A0tpxoi+3ZkaQt5uMsk7siAYC2zDQSClj3krN7zqwOq6QA8acpkJ5r88SXkkpz0RDzK/euoHJNPTraFaObIRdwmXVEIBz995dv8eEfpBcc2kAYYzDruTlcjypIbCBs7Y9ZZDw9Y7q0Mw7zrYdTpmF3yy5tietuuq2pUb+e2UJSZOmSmHSI9kpu7iCTi0ulVEyn+uSxOMX7Uz027f7cz0PU2VkWhPns15wnoz87Uric4WMwbSyN/u5k7eTTH9Yp5XFaRzYFVO5tm9R6fs9XT6dWDMLfIXo6SFtwBnPgKmM6wPJLuFlrUXheu4y5GiN/0/vi1zCVIEZhr4NrW+nA2vM/stP9Nvz8X7DujwQ7d1SDdo0XgEcybklvznUi1ZxRan2/QK+FXOeR7YfJHAYO2wK0ghZ/8PgrJO8wPlrDxuitVtdHGxofGYPh4NNxPHN4+3Ja+EU//ysNVImaPdYG1RofYQlOT1idHRk/jDiwPnjikz7QyxvcFUoiNm3jkzABjZFdBbbrmGro4m25OxH8yGwnTEtzon+fMM26FKxhcna1cqooDZK443SmAY+E00pqN++OtooBTTcSYO83lFX7fTcRSpwkhgMn701Ik8gclU62RlG5PJot81N9HoCuv4hTbfD2qK7/AFJ6WGDK6J0hgf0lePYSdGTV6vT6w4lWRvMmR/20YpgKewW5FxzYonxYK2lbhjWR0Wy0rVGArkjkKNJTWd6KMcbZM4H1pl/aIVkhfyWlN9GOASJ7qKrAX9l3UXUcfAEGdNcv5OHZpqt83IpMU7FLYMWIuG/gORnCV+KguW1+S/FHkAlN6YAkHURJU25ceZNUfpDU1FM1h7c0/gI2n/6lPVEk4Q7wxz21Htkeam+h9PjNaP5pw+RqjDoJ+VfyNE3dU6FgL/f7/XJ+OOpCfocYTZ/xCUU5BmEcnf41Jv5SzsnjpOHoUN2HzRka7ZJmfCJeCbWfq+4bOPkpV4vdMEEu828lStU8vqQW0WG1yCLd5S3P5ZeIzFWgjjjKdt+NEO2IucafviHF38nOGDH18DzoYtEWvMebdchYOct5FZn2Fja6HH0Xv+la1PGiJ82cu5u3FdMmtr12VMn1LSFjn8v+XGL9aW2TtUJyyZV+HJGYLGfQa9fF44TmIgA1kKWdxCaUYZVrs5OVLA6NQQ6Jx8uIv4oNf0IJjb2BxzH5NQsT+KqDntGxw7WGpzBgKoTxvvZiuLPpDIUDIttGs5mZqFOQUBLhUAcsXHXgDgUBxVCnLdIjUDJMWoqbVHI9UAv0eGmmZ8xr+t2mq2UywNfeVrTMCh2NQe0dYQGCyNFBk2n8t2j+XLxaNOK/E3gJQEbexA0p2NYCckK1XwAr0FdIFZlJj3mEXGIFFatRBXysn3WlxfdqOan7rM5uiHkhFaKRH6y0rgqiwGjXgkuyAQmtjgod5u7fEyQLs6UGzUxUcHmYUC4jdFKsjSIVjMD4prTKWc8J8H6qS3ippnc2XJQnCYMfPRU1tmTJ6/2zKHwbdUhM53Vwws1LzI9ofOQ4kZLV0fc6OUZXOs/i6nu3a5sHD9j2arIrbM48p3j4uEYH10a2pgtPv4hRoVRN6JDrFp/F49TrMMib29hf4dPFl/juhiT/x5mvN5Xof1XQTLDV9l+YZmq88ULF2z9PwWPe1dvH+6/wbfceYFs22LEBGz07v3raPjn9LQ1L4CgHH3Ng5h735/36uYbffT9Fnubg7riXcnDdzXpXn+NxPduGC6TiUNoO5XSGvQcZLJImR53SlT+fnEV/HzSKXzzjyrxPoTMlXC8byA5RyL7ExIfuerFE/OBczupVe41C6AQ4voxyRlKikClNlICnqUQEW7y3SZKnZWCWBCIV6bmjZW1M6upVoocRpgxMpM/F6pJ5YU98BzTAEW3jViOCTwX+0TptPuwBdSAOtrqmYN6pa8NY0U4ELJ6apQQ+K2fM7Fz6AWV0vopgeI6J11SF2EWqSjyl7rFDqnx1Ul7MAlFUHHdoD1cOIEVcb8IYnfJUr0hZE1WVzPLHWe3mrDgR9Tf3Wty4cqAsz7ebH/uUHpVcSNG2tuuQ+1gmiIhEgj3VKZKcsmllW/rEU9mUgCxhidKoDPgUHm3njppi9P/n51QAQmdTydjnBUSh3dFjVuxZQunl3rqxRAcoTozp5DpaTohpTNwrRhMvDdYQhFf8xVHw3IXDv3c4/rijmAZvPuNFtAaEdLbaS6NUITQS6GURx4lkS3HG843jF4IxOQwcKTBB0kQGVVjWgEYT/418x3ZjpgX8u9owdiuZyYQ0LPzSXuiKipm65XmkRKOpTB1N2S4lJIsgjJIQ1mxg/s1IRH/LaFqW5FhO2RfS5nArSUw1rcf95YAqyuwAzNZWvtCvS0nX9aL5vd7RtTFFxWjiapmbwUUYQFG3DTWFH5WekSgmclbJwADRRsvn9j6dRQ8M0rRfLcxUR4TW3YOqPZdNqgcR2BdXic9T4dSODJ1ymn3cuGT9g8Atcwo55uR0S3Jj4b1jCrBngWnkav3rUu15Fz3g0zzYOAmaR7GW98oc05rt+UmEDiXcZZee7s0KeRontwJ37MLre9AaMAvoVm+wV2N71paV0vobx+vBsUPj7LC9EecoEBkJTKUaQpLxIXCwA6BHwLeecBHFLozGzI1tGySX+0q9/WFX1Fryo5l8EM+7TcVsJfrBFBZlMMcx82+VaoNOlOPGwytFu38VUDQyo3dwhoIOtqU6DYv9WUCi+PlF5DsLcSVcG0REppuiVOFUMckTEU4bh1i5YLEVg/2AJJjjDXW4TS8WKm3GRpufNBaWEUYf4nDW8DXwxt8cstQaWNMzPXH48s7kVnYH7uGobPV2efs4D0ZfP7WbXDdgKoz5jAbs9pO2OhfLQtapI8sInB/1oh1vrMsuKahpVDbRRnt2iDnaS5I4MKRu3BeBtuRajWDK4s0YbhlUjPv4S+OHem30e3SNQiDDcIYGpKjgpVh7wVNJERW1iEyivAdF7q6Q0eXVRik8DPbpg9g4mFjURaHVuK0Y5Suxa4pRFsIwTMwGTc31gAUNe3lY0P/jcuv8h2jQxtJ6cPFfxfHLbHi/tYsAVav80gVT6jeg2qeSd1b9qyje7gEhGyvkCX5ow+45PJ3j3+3dWFVSJpx/OZ9DSSJYDQcBoTcMPkq9WLjxN2vmZN3jBwoVFH7LNV4OEjNUUGwuvSJBm90N96cUUl9a/ZxkHuTrmYojuHmvDnMif69RLQk+JZd96x7bFwMGOlEkGRxUlWWVNjz4Sj4jS5PCHdmX2G0ectEyhq86J/XsqI3yPlLvtI12WMRzptl1UjNPlZKVIUMQYJoUdA0Xn5Q2Eywm5MQ+3FaJfintECB8iExmT98nRFWJDlNSsKl1HA8USa73oRr4utn3aaNm7FrhA6nyiFrvI9/8NTjzkmInFS5Ia/MzoFed+HSQbDs5otAWN2Ap+5co8tALLsYxDI7v2T67yWa2TYJ2XY61F3d2RCN5bC1T6rCcMA0UQUyAe+RmgfiOTckFS1ueYILzSasXM+3lPgJLp9prcsMJyH4aJ5RtgnkkeWjVcwqKmgu0FuIptERXBPqrQKTAILlCWU6wx4puSPukqOQqid6FqVXlcIDTGlDeqZgZgvHwJck8rSAprB39md6rsQA2VQzlwq0NRMbwmuTRMRonXLZZGaOH+8CSBc0wCz8hYK8szU3Py4S5q5NdIjlXxuwmqwNmpy6CxuePSuXKmqL0O7oHCSkdCCcrXOrMuRzb4Bzn/VEl/1RffQfHdOxrmaojZ8JxTozuM6oyPKCJvfovop/ZslRooH0SaqMwpKrC1ITiq5wVwwHkl6a1eNJkSg472H4abMoh6TgigoafKyLHQKloZUcQhW5yENayEFq/OyABbQPkfh6Nk6QKncb9mMFyYMLiCV1tSZ1TFQur5piXqgUhXeiPx9cyXOtMVT2MsKGSkOichlPpoxst1ASs3xOiySNwAWSKGbo7yz70DSzPyH1AFpFFmtYt8KyD4SzWHt8Nl3e5nXMgTj5hLJ+RtjGpzeX9GrBRsSUv4Z9PPDcrz6IXOWJ0NdTe4vBFslDPF2sTsB/s1ZBKhRrTRaX5KDPJ+B4LgzJnWsUPpGlc9yNAbrEzk+JVZwpJbOwnUHuM8wELxlZYtAIHtZNsNE68PNN93v21u0YUzRYrM2r6LUZBXUSqnIdWCLFJ28iOTc1OsOBCLI6P5tVCGp12Mm5OZd91chuN4UwaDouxZ7mhfTB/gQA7irVuuv8OXKkZHLLgQdKgxZUx6WgX1eZJK2tSsBCHVWekQCDkpONcg7f2kQZ4NEGtWusol1FjXs91osvldN+p8wLhIny2gANDrlh6gNQTdrzDhl6qIDxa7IvkQm5ITmrZYe+2lIBRQNOmGHKhwZztorOPbNNOV2H8XK+Z1b8r2IuUHP/CjIElIS/YHLfEg83s2x72gOcOpHeeUdPrf7K7qWP5D6118Y0rnW2lUTMGMYUJIUs0VKhsXLEWzQGzjfc3KiRiwVAW+FQUkOOCYlLx9Zy1sBECpivM3L3fK8a2XH/gSYQbUtAHh/XKs349FfYoBoLXTvw/7ToWXLkjBVamp9LTeTuDzC29bKXWIWfer3hTA3GeS03xsw/UdRJjuEyD9pn1wINAz4WMaYhdD4wKiVGx0TrKUYi2HqIHbCU2H0NDeLqfRrdqQppf6ACLquYx4fhQoLoLzXCdSIyvJ21vc4OFJY72R06tAm2Ys+8WIxVniCKCPm6RWob9Syx80CEduu+4Qvk3h7blom3PNi2rI9Ehct2ImZPV8caKxFR7gtPjigPpj9Nke4xJg6iTo9HxCwuoZYckc/c8srrYjAwsM99pnhmAi+5B40KkeN+choBt8ZgoFqCp7M2CJcegFtZG0kIZWtljE1OEdLitiDJQ9IkM8gDC7kbwFJGoc0uYKHKL+/V0hdBeUumqVeKWZ4eCpOs/X+VrpqsYO+/5BDD+p5s7znMp3urWd0zkyySHSErBsCUt3iTQJBmGHpClfEfrrmAVAyiVRgVeOXFUfN3y/BeSIaoAJbMs4rsLmVbRVi3U6y2/O1pxByoH6wZo29M7bUOlqmhQQV5OKX1xiJhhTHPVv/oQfXcPCetFJLwni8/qbQ3dh81MUpz3XFqkyh36KB4cSw0sr5SRegb9+pCw/lQIp48MWF600rY+l7sDvx79QPj3Znm5yDnEaBImB7nBm8eVWeMMD29N+l6JMeB6ZRjesyGkeHebZSFAvHeMJlTyBIxCR4xHQqLQRc89ypQKdnM0s93+Ukw/WT59OOFS1RnEYIThxtfU7PiuOPBxyJf/69suphqRQXQ5/i7Akr6WavxRWg6wR1ypPqtTUTReDjvODDE0Vqu5EKRm5ruv48KmMPiyGBE4aXr2XCLH3EenCNR7vN6ip8wOy2XmpETorO0oJ6iYwYPBTDgK8tP2hqDAbbFyEX1RDEZylUtqbtzPVmIElIGaHDJ9/1xJ19d9IsYkSq8HgiHGcpPenjaWSHQTcKekVrVSnYqRT+1LgxFcuQRHmaFQ1yOBH2iKK2zjDNPQyiLxmqUmDq4ilD6Cd49kjyJiuSD/JTDYQcCoRR/ZJdYCo7u8z2YcUHS5y3H3aOhmiwyySpOKH4O9Ssln/ujyPnda38HxkMn6rhG3pkdO+Mub5xT7+8PPGegMEvbN3kCIqlEk6CI50H6S4HCV3txd9KQe/jwVT9/Dhz4+yRvq7/82H37uHmlRgAkBA+9kuc+ODUCjbG74rcRsa/kUTS6w1pqDPOZBn2+2QrO9qNwfGo6F6QeoabXjJ3bfU7B+zvJ2U067aXu+obsjHMs6CTx7p5hGoo+/p4hBFPwcjyQ41HZA9cFqMdpERnAr5f3mD/quC22UkU+WKEw2KQbH+mO9T4P9DDIFHPlRXlboMNc5YBdHWK7uiSlI4mxCHL/qgln7jy+dtka2XX0Ckm41FqAjWZGCldGJg0BOt/WC0O8e89SLdW1fMrSmnFBzajfxprs9RTJrXQBwwAcWU3zBweCRXD1qVBFFFCwD8XbXPRSVfL6oWNOHLDGGzNg7pCuf/wCsUynNwTGI98yIxCrKnPjDhM9KP7K7V3aG1yNL7Kw30JWCFhQauUdThVBrTg+kGkjIHjeLQNjHKhDl8u0rTd0SmQ0aHMx+l9qy7XEcq5+AKUGEYP/CNNue2ijP0etFtM2wsYzKxUQwQ518wJC/e39XJB7cIykEQoAQPlzDcooSynTA3naLv2K1bEyUO1WYaQ92qnB3I9m2+JbWk6H7SuyDt4bunBrlPecdVA9IdYxqdmcCPJTcK4xU0aEE6a9kRw8MFefsbS8LnjgmXBrmQPv4Yhu/jzUoGhAPBs/y607BslZR1LY3QUh5iTu4cj1CFIuL1qtGYz4YDsn0eEczbMeQOLJ64iCQPw1yqbYCX9WSKbIcTNbzcIcOlE1Bqy6spTjmKmORKXirOq4luWiANkQzvRiknUJCVXAancD74p9bLMPT/0ktvE3SSqIuJagbMRXANeL5gLXKdPu4EH7YdQpihFpZwZxFCA0dYvM0io1HfBEIM86ju1AauvxRWTK8NJbUq4jggSgeGsweGIP8eKJsLxaz/N4Qckk6tA1TM3/0CDHhbUvUjuGFLYF64v4F/w5XO076AjKdF51NdHaOmJYpWtBNRlA8shJw+gIWBLm7oRj35RiyEJtUMCpUzreG9EpnS+De6Hd6OXw4SzGLpWXZXlCYNAxU7HAOGudrec7caaKobEprF/CIc0HGBsQpyQbQ9BoU3Bqbf2qXBykz9Jkkh1Pm7dYxVvB6UhFLjgqxAiCvRxR1eBqNO6CZ2Prz7aNq42VZVaA/VkMJ9kZYYQb+HfqQ7ID5ICsGBlxTSt4k5eWH8zKKg4FiiuvFHFl4hgzYoUVKV6XYw7DhNqq67VUVzWgGKH5N6hXocBPjpuqtRDThOTHibD1VkKFEnep//GVY8a4Rr/RDbqZ21rdGHapUNH4QEy/9Ny77RPje0KUdcTqDooY5PvM7hMHgdiQ5e7eh63sTgmTyTuHwrZX+tlO2O8fgaDuBhg/q8iNfXXmxf8DyL7sQhPsnaLxOaITsTNvPHKbauiVhgeG9C+3k0zsg78VWfFjHp3UhuscO6r5udgylEY/9TtynUEjyU9sqa4F0x5xX0T62BKxPeLGwKARVLACacYhHTok9FBnlXCjmJYhgMWf36OOYzxrzO3ovlwKZ3P8ydjlr2Riirj6jNYfwCh0A6Ge5omQILwpDSmtcCduFaYpJBZV+GalRvSfdqhy3Hq+yoayEfbYouQKdxeIJZBt5R0HFEvuYIUeY8Ss99eIHNCoxJShP8iW7AaXmKZO3J5ZHUXV7es1Ok6TsMXVIugDpF9+pLzN1yW+YG+RtEg28TkbrjUStZX/x2eQBjGQWeadX3RQTRzxMVvpQV/wpQpNXGcyISdkKMshv/Klhbn6aigo7lA9XMtbMj6XovC7mRv0q99honL/E6Of8TnA1U/HYyx0NUzqdUj7868sQTitsByt/ooydBJu5EEyOzwUI+u/+t3/9QtT8NgzdAYVYktNUxFs9qurRCtnzSXrN0ib3XIzF+MUsuHmXiOcUYfEMW2U0L0m1OMFik0nFKAxmzML6ZINPKVd8PD09nywENJtPwyJxSdT6SAqlN94KMckB05nAsOhw3i1L865+eQ/6Yhkwf7bjzMIUsyQWTb6XTV96vxwfDr0cXrROThaZchhHbyu0R8/0qCnBaYnGDOVk7N5wNg1UyV7NN5h/ct7o4QR2GwqpAs2EtkrZ+kycTzsxmiSe9L8joUpu90dqPGsh5KrbKSTL167XJZ+8D2O7HmPs3qefMdz5mQBXSdXGG7hIpYEQNRtWAzyODAx3o6+GdwRx5CKXleXeoEJHpnL6baWX6zIXy91nZc8nY6ayB9MzzRHbC6asktMSsMss5JzpZu6P8z4QHQfSc1jbcjPgJgZiMiOlElGzJtKUV6t6Z8SyzwASdynFm13xLs4f+g0PId+hvub+8MeWZqpUSOZri0yDNToN545AlDpMJcH63WTdRLDJTDLhHn4xUe3kBplGtWjuz4ypS+IPW7dbEuu6zYPxldWQdxZ2N2UuWGkgvgmca+jLqr1/vUB5YRfNd+Ybm3g/h81TbuP5vMh74rE2EU0BT/fFlsLz9QxSOvFNRmZYfTomX/Hv1PKEku8L92lPVftkRQeWeGTlQLdszG5rNDsUxeXfxCB+8e62cpw4VTIbw4I07q1rika8NkfqugnE1Ln4M+zbP22KiX+fr3Ecqx+cdoE5fi3L5SQpXKo4vXifevywL2xqtCF7wp9fluqtSgvecJZeUFEMMxPuRLqshmDEczHyde9XkqW/kEbqI69NbSSyPcvdQ8hOkGNRLU7mgiDaX9zkXpbm3icx4kEgFhZX24scj411EDV1wVwD6tOWpSlPcVULGnFKpioj7IEJS79rdz7Qy3FqUnAs+9IycrLS3Rt1+cXKVOk9SbCL0a//PIEiyYk7kL+PfOP8OMYb7xk1XdYjoUJUOx5jqWvkYSHvcx7urQyG25wjztS+ljXH0Ecb40M13+QJYYQbYg3EH24UpZ1bqRsgLD7ssX3HDMK7ePtcmImuiCwfqpghwlv4kQ2T5wbFYx++e+Bf8h0yq1k3JjauuisZnY3g+P/lIN8ApE0H38+b7oxEK7lcITXrFAbsEQVcV1ZSNLv9pi/mKchGdSKbgE4ecaN6mVOlxO1qhaBWe0gqIfYVdqZ4WCWzIjNOLV8vLh1m7Nw+aFi9+SIkJ05qJjne4+LLwITWjPkj1giyhukrVqSmbz0zf300axxuLBfSNpHEq7JgjaEYiG1V04NfFoWrqPaxshvpoq0bqVfPGMM+WgRmrhOUwesoC1B6kt7q700sIYO/PJqfb9LCP+I5/bf4fY79d8sptaw5q/km6ERgWcpv0RdnQgx8dixF31qjDCd2d5jIwiKzqQCaILl0h5ev1E71KTyqSC7ykfH+rBjj1Z9w0s9akPDpzGM2BXo4ecGGcyCllm6GlZLVoHZ7b9T4MJupWGPy/AEljFBcWcmPMiOCDrBYX2UI6Iuqm5lGgPK2xBzUeuJU85IFdhhZuaoAKI12CeKTMCowisDEfPjA5lT5dMJGWh49oeEPe/f7KhaaNLnF5KpiRD8fO8M7Q4vlz9zuUIQsvrpIvavxpsnL/MWSh+Jin9tquK/9+H7O7RBLA+jeBtTsLNP53BOE3vf1iUXe+37Mlbzj+aERLQelBCADhAOP/BFvmNIyzPW0w3Pmgk1fcO8kMow6ts+hi1ibLJwFADmdLIjCrNM4rMS4P6FlVC66HogGcSGU1UAOg3wBerzfAemcurxF6HHx0xCOjfPicWfEvu2aRsF2Cbb3/VMi1iMIynJgYFg9BVKtcx3A6mROhxq7l2HY+49pwSYGrvXrnUWl7mSFuNXCAgmPMOf0sPNUao6iCbkZkz0t5nB+Bj0RYh9nPy7Lp9IW2wjOCCEa955N2LpOk992FpGx4AmtkKiP0IY/t3qml02L6WP/JslsAuXgSVb7hIdfgIv3VWjBJ0yDHLS/dZZxU++WSvvka1IZhbB0CspHiK4lSwZhwj4tiexJC0RbkK4MsRbOWZerSSnF51eATQSHcu6GBp0VdfQjcKXhQGA8uujMrZ+qkvqRU1h/s4NveYjf3WVq/+6d3iY1fQfH3jWcYt+/GuRgUWbszJDNV/RYTAv2doZS69wHlXePjN3jht4wyvMDPcYPkFHKc60k+n1ThCdef1rouvffG1GReIJYvbZURBKsaojLYZ7YfKvYSJHVDeo1K6acsyzewe9i5eToLtkTyyT5VqjRmCo+2ry1vTEfZQ0Lj91pS+RCPIy1Cfo9c6SATnhmAymvdw6pDn1gUYX4UI+ZpG6oLJDrv6iAJvNKkyQWsGrFEsgbdBCRnIBj6wHwun7ptKRRsipR0jqAPdIyWF/FPRynEDO/KsZ9EQqjGL+uL5FkEa1ygDZQT0M81NriqAPDx9d1Lb5XBh/qhJ7HXJmyN9Lc+/OfNxrFJqtMsb/OZ2K0QGvrAZp0vJxvvMWyV0l+mJkM5vvxohzkNjZBhFFQY4czFSccN0Q2OMl+XEN/nRvUONlsTDwsMiw7A62tksqg+7GeSs/lVy18JQwVAGsq6Zj7yw843eK0LsJ10bNoqfVVvh2fgK1xlt0xYSpbSgfrp5KRfE0X+ryqqowuMxJxD1SKZSdNyIJ3cK76MEPlQ4Zwj4k3NkhWzpIey4mHnljAR2IuUbJR8ULW1ojF6oijImQXpWo17/D/M7tYQ4XphhoCqXuk18PTW38ILd4FSFf5pnRGpUxWV52ldY+1Vja/4XCQPPdEF8PHySYrG3XP2E5GTf4Btq03ap+5JstPJVpWGt3zPrNAYX8aLR7Ys2BdzKs7oX89xbgxJZZcccqObz9e6HIYvfW5rdVJHwwbajb0eIO1yl+J4pIrFXZD/VqzsJc68mPCTTyxrd9S2vO6ckLjwXvUoWhqGNuRi/uuzwf5dI8O81bKW/nOdNTiBkdiuQTkyZs+qL6msT9SDdKZvhetm0HkUO5CVVgOHM9S7qjmEMIjxvdYY85QuZVlfbm7XqyCyVm91/NDF/4RafdIRhTFTODjlAUkAuyuYngRKJmP9T1XAB7E3IAdYckGuuZfbDc4RoTAkQfq6l8k2yr77DAmzP9NeT301Cf9U7bCiboP/uUgq5q6M3uEReFrCGK4ue6Lo8YwZCWNu9UIS14eENbg595dkIWta+sA9QD3ciKyLLqUzsJY1CFxHUZK4quqKR7LQUNK4frGraXfO3GCLErgQ8cpphXvTtVIP34dd/0FlVSJQ/tAR+oD6jE/4UGoWQACDknQo6kPhPvlmt6dAScpXxjeAG14UsxB+fBBX/qEQNJriuvpR79KFF/jc8eke704cGhnLyUFh/Xc8rnt8kBdq+c3nxiiDmte32R9p7NoC8yUHY9vRYkP1wOd+MuYM05/L0wi6qruB/VIRE7VCTtZGxj0ruK3deNHOB4jO8vCOY0c/kzE0QHjZmllhSiynLaTvUSCffCHIY9Erd+Y+KrbHYXT0wSPpsV8SeAPNL9+8j9mnZ7JLlsafBSExV0mypKpqfT8UbohpuPORQPCAJQPNT2N3ojwkIy4twxyDhOcy8ooMB26uNgmhLbHYX57DowW+Dinj6szvdyYxkVrEWYHCgCfOimwyhfIOyM9lqe5K/xml/Zy8vf46exRvwvQlfKJvVPk+SCP6tlg8m11Kejvo1PqNVYU8cCEDtb6gMwrcI4bmDHz+wALJn6jEy5C0skZiI7Kuc4MlvcogngO81rzhoVRdrURFwxN70loO5tULCWP59zGFbzUijYyW7qYXGHpvbCODpt4VP39qlSaXArrY/ozQlTzVgYSTTmfN2zMYfnrVVMEEi+qYzKCWFRoj2U+xLi76Rzh9fjczNeG0Q7VkKH4K673gKJQlTF/gm5baDEYeK8Mt48l3cVFIqZT+xQQTbV6B/p+yVBajP5H3+aUYE8RRZj2USe4Hng8qYiL//evQn7jlQ7rTPHF22aVoR0/JHE5du5hn5wTrIQWdczVPiNcObGvqgjEhdL5sYKGwEzZ4qlEIsRUh9vyONnBOqDnMlTKHQ1ykT8E1gENYdG+kpJtXOZecgCeFPu+Q5lKQ7APA1vPb9EXrBj9d5irC6X26rSPkrjluxhMh99XtENwysg7Rgrg5choaponPMGBmNGjmr8oljDz7povPuhfPC6xPE9m0tQwdvO4+YNOt1AvGPtfVWMUCQeVm7E8+Q7M4LCzT4I+b1siuj7hBHOPh3eRjuoEF7d+k31CPC88Gx3TZvDVKP9t/JXNqPODa8bWLRlTP7FbXzWRD2VMeDC5YjkKz/n0FczGzOozPNjCROTI/12/RgP4omd12eaxFicbcz8gChRiq66dotfdCkVALzqCNhNUVXiVW6ZrwXelNDbsRA/Y+c6u6qyHzuBCZathHCPFZtyh9weerbCg+wXG7dn0M1HFPDlYIOgXpuCYCc/K6qcF5ciToXufiH4Rs4jy5xvfjVADnVPEB50LbJh/wqRPJa2TeQAPswhn2zjIEC2DSWV03oOfhBzxCkFnOU77jdDMGVb//SANw/57S91DPawP6nK18zqb0nKYcjmeGoqjO68R1kMzyN5LSsdIrt2vGOVFnNgvPIe43IPdbYpNVTsbXjZm8bWMuEPhCA2goJ0FXjApdhdl7K57Go70Pi6K8kgKS6oHN4OQTCCO5WMJCKiYs/TXwaSBhmWbaGEzb3gNfeWDUIWJmF4/0ZtlAZ1rvqT61PFwyfgjxJYql/ojejEk+s6x6Ow/EGnTEPnoWk8VblJqzAca4Q0BmOCMGcn84h1lVFpWZV10PsOyzmgywSMiiQRdO+WfcNSniW1gB03kNi/TKy8LfzFbGVoNbGCL+Ol3yrHYdv5xNRYLJZhFBWSmzslUarwkYDnRwcdk0e7bLgDsIcSSTOBVSeuMSOQGpLTs5abcU0Ds6bXCqI45vd6AhkWSAl7TnCyR/o5KWZ1KyNGomlUxl6DYPgGe6CVWFMU0PoRQoVsQZ93DDUmPeoVhWMIu1Kpfnf21YpzcFgIVEeuKMAZ6WEwJxsEuVS3MCwaSm1cy9SDkB32aVAIvyZkw3k+1tNzgdnLWA55SVM/wzrZGFQvcDwZVwvo/SJX7b59zP5NSXJYgDnKSG8EVJjCUR0vDP5ae8mbRdD2BHAmVs6fGZp3Zvo7z7t2z7r0zeLJ/dWIYZ7NDI3vpkMocZz1+4Ldo6aDWjcHwzrQEV/XHA8yLv5yl2dIIHhriPon7RWn/axk94X4ugIRzyurSzyYK81aa1zKerLhawvyRptHfD6MimHYtLg0Rvea5aiMpDIvLbAoVpCJXKwEWgYlCQFTscyTxTHUYNhnxGXa2spcxemNztsz+6AXYMHfeja7k3JeMH8ZmEl7BdrnJio1fxjZ7nvi6f/54DzKqb2FeQNILfaaCjHLyWkuobjo65SZRfj7qLO8vq+wxDIN520uUjNOMCCEEJL0gQgghhMGGhAghhAxVMB/qXktv+SjPo5b7DpFGLcNkv7xWEgS4jxOqAXuAtKZ5P/ssQSgtwzRc7scLQmneh9eh7Bfn3l69zhpGkOGlKllmCRlim5llHORGIaC01gO3Kx3x5/5z57UsKP7hPDnUCJ4FVs43MYsamYNroSGsUU/ACsw9JDlFuHa7Mgml8QLGPPYzhTSmulEecZGjr21EBRU9nqMgK9GK8etAKGmSTUUUl6NUb12375qECflETDMDevW1SVcZQt+mq2C7TPI5W74AaHjBYTuQwvC0REt+ig6k8wFTON/m8nVjn+XG1FM6lctLa5maw8nOrbLPUufuobEQx1jZsp3vhpejGFgK0nMtOWyndZVrVqsZ2HSREuYP4ZY7U7yYSPs1LiIjzYQ3uwQZt/llEbf3EOjYo0iS7lTjPdp50sN5kNpFi5lfRjz3d6cvzy1RwP7jse5WKOUL8UjR8xJ9yMQQ5fvvCmxTKC+Zw5kNxCQ6a/E4dQSBJWyCBwK/2+BCj5sfKUo37lovPutH/U1xkDqPyW0dzq6Z97cXFD6CO7TZMCQgs2kHP7dYc2AQbGFrbHbH7Wh5w08TplucJW42w/u7p+FZEo2ueCbzCEiJgDxxjA0YSRL0iH5TLHHpYLDDmjWOWEbAnVlFPIcvpE2YX7PSzqhVQhzAAyKmkxPmIb64sJDYQ3Wvc7OH7MHSOwgGVyEAHPIYppEUrPA/UgqKOqsQmzK9Gn4bK2dRfm0JtoXajZIcg7tlW8xWuEIoL8vgUbKjyOD+Hg5eTNG+FgkE+YmF5ck4VTZa1Y5ig37GwTR9Y0RwdiIsXyzbdLs3ZI5yB8xMIKRaS6bvMC2MFZ3RpcMPvHt93RuqaAUhULCL11vndKym0ac42YY8CYOCmEaFxAuzqUBoWISF4Q/YF5Cz/B4bzw3OzD3GtTCNsTO0DBYCiVJVNy58FnkqGG+4zsecOjLGUwk4TOwk3VA5HAt3tt8ztl5mgrnASGumboxmjkWxV/0zKcfNiJzFka/jIHLXfs3Yn+Zewt8VuqOGkyCy/fEf0vAOhS1Ieye/JyTleZnDnDd9cDOyYWQQJ/AqCYiet/VkfuIDNtHAGiKfv4IexI9+jeyMuST+sGNaQSTEEOWOckRCFwztcIW4ilw4IoBksjVcFHWQoktvp7PRbpkgH6zbxcgR1WvVdML/dLQE+/fENLivNFP8R60VkbgQfyy0Ym46XjmtDVeH8mJmXFSkuG204whKp6bok2c/9kH4yZ9ldPRW6HRjNYxgMTxS04Gxz4lLDrlWARkssM5vtubq9yJ9CB1DbLtFsWqljvw8hZwc3ElA3U4qk9hvN/bCTom/j/WSgO2SVNYr6VJiLKXeLBXNtFNbZ05lnXR2RJl+k1jM65lyzU7lKmaewVN8o3EeRVUC8PcCb7hE4sos12g8y7nGRCJZpo07UEGd3B7BOJJ5aM5gKXz4DWIR7AlJgf/JEaYAiI/CYewRw2J2CwtNcNrKhJNPlbgwIRSpDMVl6Fq7V80axUXriUyrlPABf6nqCKRgG9S9XbyBC1+dDilrB7PqfRa+jI9FeKG68bybp6KnlX9xwU7kF7yxY1Vm6lDg6kazn5ih3BWrZfL2/QIM5u/bHfBzOLCqSXqMtwH6op4yg8RFHhl8kKCIxxxSn1foBFdX4mq+x+/01wvJmlLVcLGYcsV62TlFVhWL96tDoYjI1/1YfRbK2trnX85YPxQtSRwJUIkhUVOUyYaVgKZk5sVcVGpT1szEbC+k4DkXdFwmI4EVtHboaUV5zAKYrhbVhqeYlqqUIZi4RU+/c46RQVG/yh6cUAciFOhQdgfNT/Xf9z3XbIHEW5GvCo9dXI1Pjlyu4t8TD00PRQMv5xq9mqS52461K759peefHQT5aIUpZB1jp7U0VJ3uXNsx5VgpsAYUokIpFNuSd/34heu0u4nxOptGujS6iFBh9Of1DuJ72AEXpnKFd61IW07zPcjXAFpz/Zl9WzGp2yktYY38Pd9/XmLjxJDX+D55LL4mirFbKRvA7FlZqWRT8iNcPQwM+belLYR/4qN8hr4I1lHiCCQq1zHNMb6OY/xn+vbI3734CBwBIh/tlCEd44VPZh/CTreZTp6JK9MQ7asJcV86UGyND4orRAJeB5cC60onlz+e575ZOn/EeXfrshEGtC3tcqax2viaJCXrnjl4QdvqR402EkET4XMntYZEBlfamozOlfeY4mPE+obnTrEhCp3e0IQ9Sbeh2EH0IBdY7V6HcphJy0kLfw2rP3Ndmh4mnr9C69ytnis9sjL+2rsDE9HsGk6a3AEs6RzDkxz0qfpCZOC6s63rmiFfTUg+hIHNX+dDOnEUM5QN12VcDzB7HHZM81Q2hUJtbKjEFhKGsRopKwM72RmMhSTr/wkRKSu/JfhckYeCkMTst5ne3EUtBPHCnDgqI0eU2m/1sn0Yi43bonXvXTxcOSYJ1xDZDDxUp8TRfYjU/fKpYDux0TsqcapUY2mW+xedMj1NUVO0Y1PUl28dN3eP5id9bsjYBQN2e/nxvs3tHRUuyq/Dc1htXtImv0BqAqCfCz82wx6kyiwtsotdfkXBJwWSPxjdNZAxDZfylCvNt0k6RyA77FBasTlnfiTIlBwmbmZvG9nBUidTnX5qwUAqlR0hpkBYThIyaRl7UfnueiU0qJUWw8Fpu/BBgGMvTgr2oy1y5lASO/OB47TL3Yt4zIM1PeZZKoiKyaT8fW9Z0ZK9bzbZy5OER1bw3mLxMdKtOEokAqkQvc+LikZsfoHF6WZM/bc0D4MU9EAi+gwqFgjPNyV1aizyPQ9Sqz29ijrbqHu1NtA6Zw84Ll3wn6vipbDMBKwcB7ZzQXyHLOE9GUF6N4wBgWAD9PTDX+gqsZRSkKP8HuRAK4rdGns0RZTEFiNRmgYg7ibSTgaUtrO5IU8w8pwROsfwHlH8Vf23UkAnwx9oqy0Sozw3kpqDaat8pfE7hTb7+iQlbDmWJX51IXEvFQD6S+013eSbyrsMzmhCyW6m3WSHaYejMEejpQ9DFditKTPjVPw4fXmfZk7XR8ezpBfXowGitEkRl6QBsjCRs0BDihRKJis2kZKvdx30SsokmX3JWt8SrOWK3QhQxO6SwPA0ZSda7lAhKmGOukyeYJnPkzTJGOPeFFrNAgSa+rYWoJQQhAI20UQjhbZaEV1QVmUxC91ycKQmFNrIOSYBpRZ5IU9/DcfTjy709HET01wTuP+Wdo3bP73blmQ6Bpg9yIpttSHRi4Ds34p+T7wCj7oNnVPz4KAbxtJzzdqq4XMCSUyH/uFigD75ZTkwNOoale6+UtNf0ZJ7RysPOH4iHk8vHYSQ6CImCKdmiwkHj9CVFx/kfsQ6USNAAq76YyInAbe07lKmCUsem4pY8d7XhzOpxsOJ5Wm8S/Ed6iYveeGPKDDqEOR4qXgQcM8d3Ya1JWKMfSLmu2gz7fm3QhoZCHzuFCzGKdwpOy+8yPBHSH526iIV3iN58j3V61aHUabp0QWOakkjLB52uQmCQ4UNz8POqZFy0wMFIHH0fL4lTRq0PWppxzQQPaNyF1jQiqb1OhVYao3rtk93kFMtI+K0Q059tG+KwAhd2mFDT3H+qX5szH6cCgCWLZ5k71vDfkvfJewMU0gdQ8laecFFuC4MIUhZsNCCl5qBroJTZVrgeb8Kvjr4WS945mU06b1tFW8LRiOsQcS4wlu0wMbr46bLBUeLV9LvZLX04JzswtF526l4kOKLv8sutFyEplO4KKDyK0DUBdNyXEghubUBU3ukOByavefnfpKbEYcyFU2txkEhZNzzpFnH80Aw2onnFNoBE0/to777AddPVQeMuXEgcOGBGYG+bRNK2bt8HuLSO0v2c9BUxEaNMaDYGqXGS2V1ApRwhVczkCKFjpWGcB51kgZUIVlokeF7hom944yVO7J5+pxds8o+2qFOtSNZ1WBS3CTrB3eKpjL4FEbyiF+cvGXkoTRIpgShdSwuV2A7IwYF+z5K4BcJczea4KsMi1ehc+L5pWfBUvCHAn8+JCNXjlM6BQvjLarpuNMoFZQE6FACYlEwHH+Y4++fMgV4VdJJz79xUxxxVpDxjd1Nys/BgJ2w0U+5yZd8G01a0nkbWuCuR+YQnt+Wnp7inicS9vcJ8t8SHxz7vtCAZffwdOZqe1L4E2+0DA7mbSJ3fdrO+YxNzG+P1ID3iVgDrsoLtf7s0x9l/sYZi5tUnpsWx6x3orgHlc6ULKS6sEvixYlhqfxNUGAfxsY+zF4/OmaAYR5GFqNT8kkfC4PJFhSX+q+Lizc++IyKg+xMlHexS+VbEru7oU2nqbgPdZKq4CX7bbCXJTpd5TH/NJDeYM+m065PQ9d+LxIeYaZXvXVhiG3AZrfTbfuPOZSdiyHfwg0uw7km/3QvDdUTuYtW194j+7CQucsOvXXFrXQI4PZ17FBoJ6l9eHjcd+XrT5Wu/eqETX3pSsG7gdJ3PCCR+TA2baMmOjAXZZNYLo9pyU6wmRNGz0463AgXXFsWXXkySQtR5BGSEQp0m881FU/wcIBiVfqFHo8iOnh2bpj3/4GWYWA2kCNLL3H6ZLjPfMPUS0rTWWhat8pKV+7i58r5Vvm/+TIGAIbERxFVOXBeDHrwpVdbXcG80XHCqMVEibsZYBkumyqakbgSXNhXmQ4UiT16pFqtIu113HKv3rFAYYUd86rjq2FL9Cw80jvmtE0HC9NhdFUU4iQqPoFXLXUveOKTDkZ2L0jKmdo/pB0D3A4004CKz8z9uSxGUhay/W1SJfIeKM5JvleHpWqSHPsa21h9ur4TadK3acTLoP7ff0aQG3kbHJfMcqBy20B8TEpMbUDd5DC0veC0rMsTBdN14I36aG4hNvb1vq7wKoQGuuJ8xEknmLHoQil27HxUeP2Ab6QrBOnfyaWv0Pe3wqnZXQmO2G7WeVFsjAK5YRrQbJ08yLCtX9R5CofGEqo6mnhT8i20PqVnYzWgIl5JelobWNI5z0ko3AtxPxe8NhPuXm53B7KJHThvkgYHYVSm6blp2DtHSTzZ0Cu1tPc4ED8G6gO5ZNuasgtJyo9yto5mBFEHpirEkvTsJM0RdnN/pK8wBK9uBQBxZ3p0jHyLm6U2b3uIGg/IqcA6qBESjSlS6t2+XF5ysLZqdiUBG5DkO30L+CzAI6ek/vWKKQJfV2T+5GbwoLaEBCSci2C70RHLVlyOfAw/LhE1en8Vm3eR8ghMJY2NSBwsCk3/M4l0yBvNeNDOw2upm18xZMieAYInSG4JK+cYTBWr3AahuC6vSOyA7mJecvLq+/+OxI2UpcI3s8lKLFKliohw8ZbktZTl84rt954b4VnTlQFm/YPkCab1mBaZBNdDJPI8y5yDQYphuw3wCGIg4JNngQzVpGEj7ErOHVnkdZi8S2CYqgNOiifTA9WZboJfp+VBJoRdJJgQm1T8v4TYdmYGhZjhVI8VFeeLFXQWBBszyBiFfQiB/toZMw+po+M1aSw9JXPoNaIIoUeOd+B8AcVFN+gH2Yx4XGgmvDDiZjXMTrDwyBVcWxS4EpMd2/UkXLR5kiy29GepHaLuWX677Xvuhv0SSNd9pDz1vVRJurwy7MOYLSKKbSzfnlGZHhfR7kGZJHEj5MBkeRzuXWzS2PP0CaC5GDNQtNmGEetfFZPYrQHOwmzZIaVz74Z+VlbwZHgFB7GHiXMVnNpNKoHFA/DgXRqKr4Redwm+XKIJG0Jtxi6smz7a+4C48Bn6C4uQoKDhJdvfwPPl3xbzgAYNHNG+86BfjSu2lNfSZ/z8qLl1yGCfPZp+Y6HR41Sao5rYksIBU/6EUdIZY9cAuWNRYQONJQyWhYGKCWCOykwj/1bnEoNIrG76X5OKzYqrpRUi99yBJDn5UrgrFwugrnfcllFaSeJbMpnJKPVC2wdQNb+yO0ARy2M0KAfdcRzflO0HxDPsRozF9yvEWVGsMUXupDmTob9Z9IrNAklJkF//Ndtvbxx3JQdoSjHxS69BrBz09J3ZibitcvIoMH0AjA9n0zcp51uhUXIvyCIDnWyxvfJcjjthk05Ruu3xpDlEbtgBfK2C2QADywpj41dpxV1GjRwbhdGpY4WNW6G1gjCSp8TbLRA2s60Ad4RsOkfUYP0MTyZi0pSWdZgh21Yqrei73c8swMuFizb0LXaJ8viLpwky/kK/Y5g/2wqeFCyhDYtgmlqTvnOhl2MWezz8fbmc7NeFZHa8lEOZE1dvv0cvlPtH/h+P2UtalpF/HaSPNIw2m2s2dxeL/fM1bLqvHx9P/tOQdjlTQHnHgtays9ICzaWetGBrUKVaqpBiqcs9A37Zdg8W2MpZzspSaaj5DqgDjRmihpCFhbLKZRQwckLDiRz25Nj6XfbFkI2D25gAGjhrgqXpxdBsP9uT0ucqcpB9mGZv+aTf/rFDiPvkpO+X2NI89mAn2MUhK9S0i0VrLKQZMFdZG626pxqlRDZKiRzR+gEJlYAFNQ0U0eMafAmPKYVa6hNUGEPR5uahkzODuurrINxGb3CNbt0p5j3+O5NfbeNN+zpvczX8mduhKckbaWfX5NGaUlGGD6mhDBxViJEqBejGP+Q3fHGLJ86paJ/TH/BtZr174DgisUA4R4El/Ittbwkc4/rU0dAZuofk86DoVubfTNGaPSCS08QNx+sgSkg1JAV3IwvGNmJtlMVhS434bR3VS0yr99Ci3XXvW+kE4GM6Y4un55XRKO7/MQ2ADrJWcduzIHRFzyGCvbx+ox8GQpd4aFHc213VHp8Ylj7G6ixQwIY6/WrV5dloqY9aoXzKnE4HysbU4ebdGdZWgOZCoVER846N+ztElOCWKeK39F4udGaCDQtYq0MJMt54brYHHFiLBBHf7WTe7lAEmLtOHjfd8FUWLCfrdii4mSZDohkzDSI/8NpryFKGrF3MaFQEXvULA+Enpg8gc1iyU8DPvgWKHLeDrawXowwwAgh+LSY8r8a5NHTkrDBsoRiDGcfJy5V/PsXW8QymH/bSLVl2E/qaRWVVPd7kRFAJcpjIfCGWsAtsMVjayZBlqLF0w2vp1OtJtsAgmQYxjZ60f0lnY6nGeZBxC+J23nGIDecocFWVbyvOawqQLjEhO1UUQ4y/Iqef80z8korpsQ0GQW4hlCBEur71HerZk8e58hfGp/oTS/OXn0UFWSH3aOMBqmHJYH5v1wgSSqB61/hu+gfq1DpHJKs9d4GNiyoJu4RqD+Y7EopHzUWbaJZWVpxMDTy6Dr3ervJ6156/TwMKznBIV/y3R43PfZIwQYlrBColyOk1NIAcuErjkZrAn/bKHu+7AXNQROyvZfn4YG1mp4risDJvtzYQYEQKSqyMbtWQAW6YtVNKA6FiHS9qtlVt2OnHchWuRJWPbS9GWg5EBcPRp87wWcvdeuLFc12L5yPlzwOkEyYSeXepIYHAMEFUqhpOKFV0KL1wUU4BccSQJJQC3s1MJDM3/+P8Y5DkMIidjKhYusEqwZVIy0pnpXWfGjmDa4eywwSPQCmNLXJqPkUd+gh57gMN5zxLiLbJKGnSNKzy2EY/5Iu6FjjdznD33OYd00SM8tnK3JNTewf2zgrgCg0yy6o4ITjSBvd/bSSq/mbqC248GMaZPw7tVVZ/4ZMdvMB+XXIXjN8FDJ6WTQMTTsAJErBcpkNt2PlpVK64Ycm9+mOE+YQB/xmKmc08IWzJi9GGKTVdI4jJTWTQGnLdmoh1iN6Y8XaFQY2te6FP68KYXiyanolRc/yDGgcorDfVhmOPnuo/5v56TS5SOOWiQhivBXzxqdN6WOTmOFBaBzl3MBfmqOgdx7BmE3usWEe54WmXKqsxclNzdcqjiBFZLtJu3y4a+lerCdTDZvNlRTvB2mVDhNlk+XQZCbbeXA2ZzjkQRkUtpR3cV6Vh5QvOBOtE2fXBBt9DrV4e14Gi976BqBkWl3t8n0HWRPOWMTS8b09LDeblnnVwMX5V05OvBmuskAm2F1PzLYLX0zvD7kX6LCJKoGmxXZz2LwBrMh68ZDx/cskJjjhG7A5gf13n0MGG2hfxxuJ2QBN5HT/grPcVrBpOrh7cdznwfrHARyI0RB1padx1oVFRtJpMFh4/TcmpMJTkomP6KsEPO7oU0JeC97eKhoUVo7CDOvQf+ULbp5yAJ5UYDchluR1bf/kh0ojet/ZTiMhxtunx/50H4hZg1XEQHeQjuwzXSdqMDBQe2iNHNbBQjE+ipHhpHJlMnMQi9QOMkjFca6XwYuIbckyj/wx/fbpyKoxA13Wq6Do7eQbmdA6qqSCVc3pSRFzMLFFwbPyQOWQU5+ywwkSjzUreGt9o8IvIEPJtGTIL7msAwb+kZeyhqO7On6Rstv8dfMXZQT9pGL4jifp/1T1W1Hwg/xzYh6t/8jv8a+3XqpIl1c9/mh0hExjsGpxzYxKlU8kL1VkSfo4a1D4W9cstLv/2Nzi0ylGQXh6yaZvg2D4LMI+cLGDQ+On6a3D5f/MEJoCj6P9/HppMwrPlzeeHKEKH7u1gRTmnmJR7Py5m6Ts6Yc478B4orTQ6PU6v9X/rBxc+Xv7uMqyB8i+tNblzk+4cWq8gV4F0j3hcANk2K/YUMDN5vXLytoKknS0zXdb3tmK6N1/sIxTrb5+z0by8qm2RPC4ncr4Ywd3AzdMpiW5qR3AcKl8ESdJjYfvuC+PvN/jirqBc+5p7rRUj8mx+ZZPzcVd1Ep3SCvkPp9yENw7cPCV5u1pgb7GKDk36D58l+GZXgWIWWznxm7FNHp0R05kXjvfBiieT1LUoVs8Zyqfp2t6bXaCIwne7gjeO4bVNC7lmmIGfojzQ4Tar5OMOy4w4Rz7bsgP742qEl0idTNGIDeWBnpv0gOH12+bs7TzbCijHfrOdyEz4s93piwXzjvZAT0vy4lMgb4L5LARJa/7bq5ORjWZEzdAWsZljTQuvuXUAl2EHfFG+SCdR4N62VgQkFTVJXJ03xXmtL/cW7NbkMch563yGqnUPXkTc+Grmxxon/u3fg8Rrtnplv8Gqa9EWuYJ8BB7H+s+okThakY9/LanjvnftVx8eIBsfQNxDeQtqXWhr3lw8l93JpCsnMvd+9UQEARkRf1mdH6LzJbsoNxfd2QovN1sEcvLq8GVNapAUd7LeEJjnvry/acT6y0m8YP+BIHHnXF6D/X4+Tkevx3D8C7f4/QfSSb1/Xpzg0vLskEq5Zt+g8WmUPK7wr7TiRWDS/Q6+wdGfR8S/Xfa4V7D5jjcSE6VPZyZ+Wnxvz/DRupUYJO7AX/WEfWHAebACMaRia4YS161ivC5IS+Sl1plI7hcJxGskwnDXqXBswdczfkyes824eZI3geP+yenMWWIumjOv8CrUsSAQd16aIDVDeOVATjBRr1f3TSXBP//6VbXBsFcLyPaELn+fWa2MGGEvtTrXFDrzVJJWJx8tk/OVlQI1OhYPAJhIb7PBEkTcRlXDRfh5bPVI3O5Pj9bcnc8rV/xjfQ7sl35Rx1ZclONBaw8OPouolLHdsc0WjULZ3/7WBLYaoV/1mYtulCFbFmmTLW69hfOxtnkJiWL6e8bdeLZ1buYgcoNlQax8t47xmUuREh+7PrBJQFRGY81EAsS/EhfnxQqPz5bo4jVL2B4ck03tCULhDvsSCqK00s2K7hfuBMIXD4V0ok4jLNvMFyHXOsxVvh0zQZ6fdEVd+xZ8QkzGlYun9F5rWqljoyUywaGYqWMBSbvKY27YdqRrXVUp3nFN3kXqizcN/c3Tfdzuv3WE+L3yJ1+J9WjTVIqJ3nlblgdx/b8UggEwEwWnh6umBlkE4NkzXKUMci4Kk2XIXQ08i8OxKTBVEP+IwSctNFZC+A5AZQaCVSCVACMdlGTgS4Bb60EsaohH4vBmAzRDDfElAGfWg1VdgjyIwh96CKC9PYRDEgAUIAEUP6zIhTSroAnsjR+iK/7/DoY+Ww6ehFTdZb6GOoK4jj9NMHr2HMTFifQgt3/EMKCahAr/48/h9BlvP/jKwVTHvX24fAmLvfzLua7awzhMXFX687vkPMRujfCh8EqoqZ2B0HJlfBKMpfKHMLGCf4QFK8eJicb4ISrXygmx5wbOiCM3TkGcc2vMEFCVQGpYI5nUsXapSQN3JiuSc69yQypokTW5pnVpyS0PJhuy8ajyRJ7YIDvygo2LUSY6kzdKZavyQdnzhPymHHlymijnPBv9p4Je5ZuqYYccU3XsnBZUAy9GF1TOXuUI1G+HLRTcDCwsDtzAmcZPbkbOPY7cFFxYnGiUg8YrbjoOFubcdhQWL7gdmHl45NoZjd9Ytvz+5jteEhcaf7gdKTSuWY58Gc8g3v4iXLJyRg1/WU2Qtr5DLdoDhvJZI3wjTwmEaZBD0sL0xdamj+ZevrlpxFHhQ970UVF8yc1/0XyWZkqNgLm0U3LRUERulgiutLnBaOYCuamFOaAG8y9qV75yqMRJYZ+DEieKs/r7f5gfHhYHrH/gto4vySq+7eK/WL/jR4rXw8Hj7z5sqqy3D8Whyo5WOFh6uoP4eAQO9vMAP5xd2spw1q0HAIBfcuxks0R1SbDIfXW5dEhfCZJ70N0KPhoTYOrHyKuMpc/5zcNQeaiIMm46c/bG7zTOZqJrXQTYD8FwXChvnB0EvSipjnuyoX2v2q6cnBDq0s+k6x7QCHbP0odeLPYbOEty1mY26Ryqe+zA6lfTZLVjRgiQ6JESxKB5cId5pzM/jr0sGHOy4B+ciA+LWZyXUx6Y/5VhxtXBJDCh6YK5LSY2PYBztfucM1cv+mSA/Dsw5E+MOSxQKLb5Mi8iH3U34nkQLyEYE3cbUY4/Nm0hHYBp3WkVyvvDdQqvg7LXHMHmveE0plPYEPgQ55dUa9CPpKTyj3J9qU22F24fHzrTPXOc8kXYWc6Z/GmgtdkEM767JHoLF4DPJhtxHagN2sMITVdZtIEAh7H7rVHHtkv4SyL5aAV1Hz45tTxSVWBjyZ5oUdwzRG1z9k8MKRL9hu2oCwnZ6SVXR8if2lGasRZ4MJaQnB0Da0KFa8Pu5aQ6fabQFy2TYTiRNv5r0zLS4A8AuG2PAbWCPCBKhqMWQHku2mXXktZgPE7sCBWgzCdpM/eza1wd8E/z3pU6qTohvW2Q2ThZwR9lx/hj6NG2Y6T4EqIKJ3S2QeDUl3E4kpAU5lfVPFxC0hLzj1FhKcNnwG3/hsTRkUi+cliVtXcO3Vtgqojt3EwbB4H0/izuvDpzfWcUxcLIPPtvfDGwPeGnU3tLfpThartLWitFL89ZxYhQ2fA4xO5b/hxGHt9yB1miaSU4irJwFQW51Jj3htGOFJPrwPN5kPeWp5MzW2Hlm+TYaSxDREc/pBwbWUBydp7Z6bzK9g7Ai9khbMyqc3F+YS9TBKyvesZJkrAckkBFOrIOiV8WOo/q1XaXwucQvvWok7apqCKhqIxvLS/ZPQC9P/s8c9n5sjWkZ7vpYeHNiSVYQeZJhK/Dkp43C7DyXsTvaZR63Wy/d+PT/WugiRrNS12CNUR54+Hd5yIvN+GUjprYMAIschc15qKPVc1O7hCy3SxWELRPL9uQHunzORxyRlYRyXOpekzUZB+zZm6ls/m5o61sMxX2n1gEFs4sqvjhw4jNsIGj6xKXpV0aKZIWeyG8elnQqpj3GY8nAPY1J9fIcwfQaUnOpQdU3f1o1F4NvdS/mwFNeExXnbclyd4lVKGSlWac0j5ZA4KhP6R0fHTGlcF5iuwswzvAtMEMEcUfeaLKUrTFIj2+LIPmca1nN3grEqaUqFFx4h0/KFevPNG8x7XslC5U3CMkSnQU4h+LbtCAIKitiKqLxsGfVGWiBmCD/b87R7Rn3zVDtf6AyPqTc0Tz5IjhyePfG2N09MCUHnp9XqeDbLWkcDgJacuRO2+trwCO9Nq++XmJpsRoQW+mgxiGYRi3P+c0eZH/2DU/m+6ouk+/BZ2uu8PZs4SBSAUs1yMERyEy/zF7Y8IQ7fKi13fbz/3dSd1zKnWAHdpCpSk1uyVMspwliVbUaTYSSG8ffRmNwIgK+nWKz8dUT8ymkeLahWkoSAmJPXSILEtD971/zR8D684RTjmMJ3HWPNOZOR2QXc0MP8H2Sz7IEMowD73rFQNRYRGjJE0UJxJ678krSeYWBDLHUmDKGs2CuizNYs/vmKZwQ46cPQTmW5oESS7g34nMYMuZ0Eya54dzNcPy5eOTF/bDlMm0HYE7hAEJf04sqjNxSThBPO49TBvP6MW3edYGhHdfmJ7nMuyOiCRx4zEz5PIZ5jK4z0HUgt1poHUxPtRCVqrnR/MjCaTb9IaysxZsgIXfaxgyUi8LW2QwRS18v6YtMV/iYQ6TZmfPN3T7DGFDnJ4bRR8ZHKURXTfMtHLdvCDwyiI5lJo9XqCmREfPqKemg8ztuzgPZw2cbhCOySo+ovtQ4KWfVcklG0qKce6IOntvlaTviuM7QxiXvdfEUZq+8ZXcq/Z+TJl/oyaU1Fc572MFZtxKCveyRZHf16nDTsMp3kiQT6hGPX1LvLkfxZs12yDdeUSqTfdEkh4dE+YO6geyyFuPuOm2I7TeHb1fTwHzyUkYb5lH52kIySFZDcsBHWuB3yPJO8vjexkqOrcKT6yFT8ClSszIcOHtfUYDZ0nHnkvoAsB0j7R5TTb67E4/NTzMcqjQvPioKOmX7Fh340vvOdSigZ68LVTir3SfZh1yiUogkPl1xYaA4bPXTcg744uydexpgP9sP2iSzWl2OX8TOjpUFh83nzu4EZPVgic7IpofV5aJ6FH1ZcwiEvas9fb0sEgyRAZ0JkmMp7BHKTNqgS469xAv5cL3zA8IRN7OnR6JS+sOpfmfg8hlWaLYKJkIDBd24jze0cgPF4VG+6H+gMSI6pGkx/OAy2s5OtnrLCaCjVw5oZ9DghzeTqMSGSiJJqWq4/AFmCQw0O47Xea0Zv6Os/XQggiMGavaPC+LzKIX958949/kuQeBC54Gje/a27MtSM0baxDosC0+jyZWYAouUMkK+V3UB8wRSBNCRHYqKPJBTToZuu17HJ/NvHzbESHYSSchyBrlZpgJisLvzA9r+c8OBs7ZdXqCSH+3k3fkGmdIRwxazvE8V825aTGGr2a7P52nlx46cNEOV9q7SMj+vunYOpfobTR9YsEccE744Dpxl8YGSS6kCEsvf2zBYnzPu+Ty3MwHr4pz87/wPszY5ZmsbwLpt4agY4MnbU8wIqtwXXS/5iuiufUrAdm2ZZqWhFE3y02Cnxt6oQttPyYK+RgnzUG1CdHLhTthNp2PhOCM+BOGYRhG7BjsrF92d6EtSaMFUMzMmog+WQDhuYs5uHR72EQ5E1Q0hXl0dnIxho4JrLb05VWMBxztryJxRoJ/zWrnWUinNb2L4AXgR5GUsGhR5xez24lDzxXdHZ55wdlDftP+y3vprCamgAFFLC914+ArgvYONOANGYaZg8CW8k40ZIJycSbfTieqCh9D1GjK1ER6vo+fIEm+beQ67MgYRIhcFXfVA1WCqrFEQtzo788Ce/90QCUNyG4hURsg1zOMPUd5QCUzyE3V0m8PVdmTupzxfpn9/IZHeHQ+SLJNjCVABvJAKqiH5kQCWSMIaj64l+oqhGzYk0vS0ZSIvFrIPNOy6w9OgJ/c2jKk2igrEbf4IjUs4oZhkrjiv2fYZPv0T+S9llbXDl8PNwv6hR5WrkEcAqkng+KaM4n7XmGkSonxwToYWqtqrJautF2w2/TA/enHXLoTb7NHYl5UzfksfCFRqzUCrkGvmZjweGvlwY27dsUXswA5KNss91mT2g+nDEpb3YwMcbJ8/82Zb+rR/bPPJGJc0STxSUMdFx16Ltyjk/D2gzvMqe0z6NjJTRwmvtkIW8XuMbQV/rbelkGqeXyNz9p/bi/F++6XKAlepebJvINdy9yeewW3izbhCmntZr6DfO+iOqg+S7nrPESpX3BolF4Wb1SjCu1Fr37SbtDAPx2ElTJO7H8/k6u1IvF4KPDjDPECWMOJcHmIgmQJNm7IjMVDtUw3VAXVMAQcfXm8Z9DPbIkcaoi9yK2cISp/IdPoMv3OUfsjJHa8qmkKCURt7y8L4Zv8nFCv6myRFZe8sGvw1pgWxZzwIzH3dpFKc3q7trIsCv9KJw3aw8pRjo1v8K4xfwp9Lvcza9rPgpbnBaYFhEOwM+pmrEbPE2w1u5EnN6AzHX54Up4z4dmMDzuxs4BYfEl7J3Ro7xdNWTDupq2xrG6xDeBKB/yEvmcBE4xd7UD3dpI4Fcu5OT7WJVe8uJRyy3xOdV9rITloUiyFCdbWxe3CianJ7PitvxgG6o+Kd1L44yDg4VRjQ3ooV+1SXfDCJ7krtdfsB0Wvt0AVR2kt76s1GzPOeW5eW4MdwGn58x0Tqgbj4i9lcvlz06RRVuyIcraeHPzmme/DvFQ+qhymN85P0V1gEoQWHvBWiiz61Yk/AzyJXSRRIPB49Y68Deqhc80Z5X+cHaZA/9JXKQ9nRV/TUEF1hQUticXXOL1+AGHJzG2RokEvEA+VmvoLGGvb7l6Uxm5JnJRe4NNsPPRgdNyA1pD3XgNMijqY0b50nmusJ3Hbj+IauaIfBISTuND53AUtxkUZK3z9oR+W9X0qk/sFeIXNqt230hrWtQoTDREzzittxk9OqMhm0cziMAzD8O056neD3AEb6WV7LRJMNDqOyASuRFTN4APXkS2v4a4IQAkDdvabBF4+2zHorDjg/vtP3H/nKqcUdUMNJkmsGRdQ7e+THmj5nUTjxYK8HLpaU3RUbCVmUk0tZub/+h/Vz7Cr8dGID5MtJ3dpGp4aLh+FGwqailbflw9g/omht1JcCpaoaz+Eq0kwxcz5pzc55jGSf/jpOEQAe1+mP5TYlhqaseKa0/QD0dWHS411SKBTniiZEfg2nULEPvj29QMe22qwV8WGUW85LHiCD5cBwdiPBfVIwMkUwwZ5XJ4qbFBqxBS+XLMSsa27Fl/faaUsgbwGEcxS50o2sMy0hE2hIERT5HVYGXmUU9zunE66FeORFG4Jk+NvSxArb32E/BWqIWam4BxJBsrGYHw0lBsXe1NHUpNXjd2iGQpsq0bFPdeoTlkt36QLbq50S0s9k2S7ArVfug+Yst7UPhMjh1AzA/zoO2du1+uGJVEMjmsxxnGn2n0b1a/dWKagtG4y8soHVG+9DgpEGDXWK6HvwJGM2MdJDC9Dh9AJDNBzBVIsZRmlo87HgjUfkLC9H4U0bq9xXySLMAFS7hPYt8fJisoo9ermKYR63OBtPJtXYb0/2MyzgfDQoabG+rKu4pImOIRVEmMvHe8Lyyfy5fP9uxyZyuEC37x1SJJbMo3BFmBTpfs+sY4VCFyfAzv236erFO9DhFOLixorLvFixYcbAKbHb3hu40vYYD25//eYv36HA94xLesjQgotZCgRKEGkTsSnsBivrrd0CkVbn7M/bXUecXp9Hl/KPtKpkPRhpe3oeumIet2HNlENIR5NDXWd2ryRvl8Zmb+g9eNUC9WJZm/coX9gtaDMKzBQ535DHOmJTSIgJiD8FhA2yjQcOrywo09tuYXbYbq9XgtWUifQEKRK+3e0ShLDtwZj7SkwKuLmaBYadBDKK1sW7slHU4pJgKF6plaCOriukx9EQcrCf+NugprLbqbq5TJHgXIRDs2CnugT6KbqYY2g2cKT5a8GSBHeOoyi+2RyQ5+QmHpik7MTYDV7FwUlOdvUbuJs9DDpdyjzfBZevVeAGFIPBC9R3bf8NFoUoHOm+DqfDN9U6fg3BIQkPzEcb+3gA7lI2Q74oqfhEvtN41TZD9BcsDsChoPIQQE05FzZgIymVvhw1P9BPpPQxNcX80nGWW7e7wbkEY3ncwm1pZ4bu8YBGtNC1zgnKIgPb2eo6oVLBkO/9WVji5XNZ/0RkrsaXmAcVxACl2no7y1HromtwM6V7PVNjR+DFMsrSorXznGyXXeboPaanYfe2ngD/VaNTGfFIdJbvl7BuRuj0tKJpfD6yMF0GDowH92ddYEjMVe9yVGtCgzDMIxDXVNLVY5tekKEr/7/FUqB/cd+O8r5e7OHfp6i4rZg5WWrp21UUofRLkG3h27GdqGwWYCw5pgqyKGB6VKdjq744x6NcwQXoTxQ6Lqra0AU+W9Zg33p4ePB5+Pz1z08yO/ConPZuVLthXNfXp1ui2ozUQT5xHsSh9Gm7T5UL9/yETjgRKudaTUw46sVQ7CYnWV5YiZya+KITa/fC1YqI//HVYgYAD2ZUAXGJetEnNlF3svgQlRubHL+UaxSdfIGKvgrscE9MOR/QTwltZun/ITXnHJsILZsZNVvlo3kzgN20pkOuQk6+xWHI2Cl/NEDbMfotIb2ij48t94k8yAthVKcVxdmLj8db2rBkwXfn5zf4VhXdStoqh+wUyksw5s2ZqRWyY+tIUQ2gVdR/MvqwNVn5RIg0N0cKYUS5sKEzZQI7ZpJyqY/PfvcIHPvjhLyUjjrcvi9iLoCoFyjhJtIGvIuutji3Y7yn9gAdCVIdwFPA3lMjIn8OD8H//aYPFYIhL+fvjxtzDKSVRovU80T8yejaKSHFRJmyoHrnWiAMwmdxj4EG16I9arjunxOpbUNopNsu3mSdvfj63kqVXBBEVDKM6JwWVC8dA+NB5dJ/uvN1qDSbk6FTszzd586+GeTedw+LBzrLe4kpivSk66yZQcViSc356O5MuN6Q8hy9XqvbzvDLbQOX08+fY54DTOp+GrKFZ1/sdTFIv35Elm5eEXMh7Z1Xq+ocQp1UhJPTv3IgUTGa0vdWwvwoxg/f2FwIie8jqQ26hwWDy4X1EA0xyHaTkABTyVeDRra4XbvHOUfnAo83cavoO+M0VL49oJ1BFgLiv39WBtQvUwS0rtwD/coCl/n2mHmmsy4afBLo5UKVJWYiI00YLkBT+Kde8bZ09+PIikdHBNDJAqZBa2DCyjjsNmQZALj3OFLbWcw0U29GMdGN8Jms1wIHCRuco2L5g+G/U6J1LHXOYNsfT3l0Vea68NnKcgNa28Z+5DZY0rapvRDcS6Qttmzrz4oBMV+7HOMhEdiHgDdWwkdchCEzdyoslzKGoFU40xIq8mL6S3SyKw2f5IbyxPsZIQjquZ7qh/fwBCdrBG55eocNG3iVznF6ZQdV9NKFAMePexCYM6A2SfyB0KWcHf4rTpX8mClHNGtG+fg98tJqaTyiqIhAnwaW4Fa6ehPAu/JOKl5ZUVWTGNI0ZbivKEc6TKFL+uFSEQ287JdYXscESdm32tlmrj+HwlKdKADxSSo9H2t11AR/pBN13khuWbHWzfxADnr9xViEFUUfiHLLHW8aWbIKc/u1uvYbf7RvDgkTxvYhJrGt1KTEOBzLgGpCO4x3VrusXqXZdLPoLSs0pa5L4noOMWMPr/Dl9BY7WKsTHxKgxlDvUMUoThjY+6i4PtpqhNEg+IW6dwJfEHxGenECYYJxYTUnaD1KP4gDU4QBcU7pCsnECjKpDEFQ0CRRTqtBe0Xij+H1GpB3KG4K9JFLfAfii8mTbVg+EYRRsoPBG2J4j+TYiSIPyhem3T5gcBrFHuTdiPB8ITiskhnI0E7p/hhJE8EUaK4NtJ5R2CP4qNJJx3B8IFiZ6TeEbRHFL8NaegI4oTi2aSrjsAlxXuTxj8Fww3FmZFOF4L2heKfIbWFIF5QPBrpYiHwA8V3k6aFYDiiMJNyFDRBcVQpkiBeUTwp6XIUuEaxqbRLgmGN4lxJZ0nQDij+bZKNIK5Q3CjpfCDwEcUnlU4GguE3ihMl9YGgbVH83qRhIIgzircqXQ0EdihWlcY7wZBRdCWdtoL2juKvJrVWEA8o7pV00Qr8RvFVpakVDMcUg5LyV0G7RvG/SjEXxD8Ub1S6/FXgGcVBpd1cMOxQXCnpbC5olxS/tNQaQrllHthcpzcSVO6xcXdMnYuG0HjPPHDudIZGgoYfbHzx6kwNofLDPPDv0rlqJChn2AhPnfxCaFgxD9w4nfGLpMYVNv7z6sREKJ+ZBz65zukkqfIXG6+9OpdfCI1/mQdOnE6bJDU8Y2Pv1dlNhMoz88DvS+diklT+YePymDpnE6Hhwjzw1nWmSVLjBRs/bHUshDIxD6yuk4ukSoWNa0+d857QWDEPdKcTvaSGT2x89Oqc9ITKJ/PAX0vncpFUHrGx89TpPaFhwzxw73R2vaTGDTZ+29QZekL5wzzw1XXOekmVUzaevTpXPaHx1DwwOB3/RtBwi433Xp3xX6Fyyzzwv+ucFxGU79g489Q5LYSG/8wDb1znpIig8T82/tnUaYVQ3jEPHFynFxFU9th49NS5KITGPfPAldMZiggaZmx89+pMhVCZ6YFfVueqiKBgYcZEoLkMFkYmdmjOEQsLJhTN5cHCKSZOjOY8YeEBE4PRXA4WGibGmeZsWHiFiaY0l4uFC0xMSnMGFOXSeE4wRBR5JJ02BO0NxZ9LQqoXRaElQEYMURK0ZMjgiNJDC0ZGakRZQktpZOgQ5RFaopGRBaIItCQlw4AoW2gRJSMtolxDS6VkaBDlHlqCk5EJUSpoyU4mlfLtWF3QCdYkoc1iXSnWl+L9X5OJ/4Y1+PNvx8blW5/q4H9DNBH/G2J+HfV/Zba4+firq7iN/nH9IKzTa32fDtpm0Ye8bh/ya/f48bpNPvTiO9AzfQ/bcj18V7yOT39DPKfDpPy7/6dS+qtrV67nH8l/B1iFmqVVcJ1sj4uN/+0qZtL6p4fG/29wCDptfg5RkihOEkXmaROqCWk6UbSkx6FCJuws4Zzpa3geQKOWaGmzA4BRwTA8zkTDYrVWOSOO1VpacQ8LS1U+sczqrXpPMMuvcAPa3d/B1z9osjuMpx6efjvIugmnVm3iyd9wQPd1LAANv/8LQ6GyBBQAXCloGAEAXgCiAwBElgYASANQkSqbO6v7fp/Eb1wSAxZ0w2CE9BKARJkUfk4j7DKZVOkxrLa0E7T6E04S2qoMz60qhu0rS3NjjNgTfKvJC9ZcbDP/gsfGqnahS8l9Fmha1wT6K7ExB9cGn4do6TZAf/mYBP/3g2P/r7HFCS+TO0f7+w7+vdYKoAjUoKzsypih0NmO5ZqCGHDQSEcH7hGgtmpUXqqTjhNQ5+QglkD/9SsyXQ+E8/YeJ0GLGBUYQVnCRFRukURyNshE5bwRJhrngtTQurxRNZjzG03DwgkoydlKPc6oNWFXAZxuRwBjzr3VUJkJ4FrFoPykOyHXNCOFmRp/QxfT2J2D/6N8S0g0KkKZMI0CSUyTYCmiKmKpRl0SqeMOacjwCIBKiBKNkH4WX96RjQ3SU0KHDJTKEzJSOs+IU8EOmaMIlAolv18RrXvHnRyYcQusjjyH6DFalsgniAD29mdDbf2vrS+YxTusHfIEYovx2N+QbyGiwUG1NKUZURrUiD5BUPBSI28g9hgtCXkPIcpO3960plo6olKoOfo3rsXnWAdkh3gyVEKuEGmGw6gxBYjsUD36B+7a8QlrgbyC2Jmx+hfyDURw2C+QA0R9hLVBP2IWb7DeIcfiPiwbxmP/RS5GxBqHpKUpOKKsUb/Qf0OQeAnI2RAvarRUyAdDyAj7VtNKHVGNUOfox9zIocH6B3lqiGdFLZEvRqQPcJhrTKKI3EE9GiVu5afBeoK8METvxrm/Rb4yROhgPyGbIeonWEv0C2bxAesLcjLE1tnx/IZ8Z0Rc4NBr9VQ6olygvtD/Q/AnXm6Qt4bYuycWkHczQpKd/opaPVWOqBLqgO5mFh+xviJzRjzVKEGWEmnE4ZfGJIbIA9QWfTC38jNhPUNezohdbZz7NfK1EmGA/TcyFFFvsF6hF8MsrlgfkDtlDmRLx/6HfFYitjgstTRFRZQt6h39jxHc4SUjrxXxMhotNfJRETLH/knTqj0iqjnqEv1kuJFDj/Uf8kwRzyPqGvleifQrDucaE0dEbqDutTaP7la+G6w/yHNH9J1x7lfIJ0eEBvYfSEdEfQ5rRD8bZvEe6zPyxBHbjh3PEfnWiTjB4VGrp3RElBPUX/R/RvAFXlbIG0fsO6MlI+8dIT0zhdZUjSOqHuoU/cdcixdYP5HdEU8LVIVcnUgLHL40pqCIXKD26J/mrp2csM6QV47YLYzVv5FvnAgF9kfIwRH1v1hv0WcTIwtWRY7cRdUwVv9BLhARHERjCoYoQRn6qATwAnKGeElGS4l8gBCD/VprqpsjojKoBfq8uZZDwjoiTyGeE6pGvkCkgsNBYxKIrFCt1uafy618T1jnyAuIfjDO/TXyFURQ2P9GNoh6hjWhnzezuGHtkRPEdmDH8z3yHUR0OGy1esqOKB1qQv9SgiO8NMhbiP1gtETkXSGkttNfb1pT1UdEVaO+0Q/qWnzC+guZhXhqUQFZRqTE4V1jEkfkEeoJ/V3dtfkJ6znyshC71lj9E/naiDDC/hgZhqg/wLpEv2xm8RbrI3JnImA89n/ksxGxg8O1lqboiLKD+kD/qwRP8FIirw3xMjdarpCPhpAF9jtNq84R1QJ1hH7a3MhhwvqFPDPE8xx1g3xvRPoTBwi7nALSYL3U1pYDrYZKeaNSZOrZ0mqooe4N+c0NuaLV0HPLv4jANmlzPPW8U1My1dZf8+ymnktaEzXPBTXP9dRzP/RuuKYqTd64JpFXz021MeVi6vnL9VlxU53qF21yyqvg+vzn+lRTz55XwRW1V+Q/V+SW/9iCRCtIn9F0L+tE6a0kSVmUrWhKWR8EmWdaVLShpBVeNddKL5osWXuFjBm1R+kSSgtCxthIlyR5u0WmzNrWoj2ltiKvbe6UnWi2RJsQy2jTyn2iopVG6hyVJ9HUZNsIiQzoVL8CtgQ+0BGMDBMCDTREJcAClFtSZRew0nUiGOu0Tiy/1VcPA0sOX0NSbsNrWidtluIIDKvgELRbASvo1gBpndak8nChrGqdfrOj9BrXPzy5GVfB0wr4zEXOj+aCp4ZUnYJmWZ1lwwWoMrgPIDn987h5WncfPYnmEij1Ic88+NG7/0DcU57DtV9XdUieUjs/56B3kPV6OTD+ee6vump1svQHPJkpEv1n1cGWpe7LgmSNSJzGMH7Oxw+Mp7cV7nIWPiugifWz/krfmo/D6ilHx6hNSk+6fwayi7HtKpWl+/STY3JZ/L/k5+uxG+JJ7uZr4eLo3xrnC9aXZblrnxN/PsXQoNxdT5uv3XNXlgMSXjZJNUj9aPPj9BiWVRHr8LYub97GF3Svq8/aF3F+3MyHH8dIrhnPpuxcHL71cj1ZvT7ll0QyPQfwcnqd9BB4zS0MXZezKVuN1Ek0axBeYhC9AYoVU9yhy8oYd+p+3Rd4I58n5oZ8xwQeJbislzoNBUPz8Xprf0vh5qlgSpKtwx1dzrF20836kdwEAO7R7XeXjJm0bVyitNl018+DDO/3ttkyhwUWdvPZ5RbeiW6UxI5hhlPewbUjShNngPupYpGaeSRV1GExyl8Muxd2BokxiHq7vDp0IJzJLbN9v2SbzD0EYpRkZOGZeEnvrJjoJs1sIbY7jbGO8WxlBFGT3NxBOb7/5lZcAgrP5PH+X81ijAWJLZROIIIHw0J18Y2VISZxs+TwwEPk9/Xb+XscAln4lkRUmo8geg1gtHi2zTVzjlD2cr77d1FDGTwkkEfX4SOr2S5ggqy5SJuY7vvZ3CpICG0cB/gP5lj7RDm1Byc8O0TLqu5QRsRxV3Xmad6MTLru5DdIpZilFGjJIU6xIALIIwLg7ypofq7HoOH9f7otezvIa7yg7h4virRG4TqogPGPePVYyRexQo8lFFRS7IfPo3Ct2ZMneyiX3HPz4ZcBg2cUsR3OYbBjOQW1TogHWxUyGahDFO2j+SHumqBNjuWlnN0DFY6iPGRQCC74UuHYS76/63hWjRLv50EFrlAJB5+V5iL7RZO/HxTPXEc3fpF5k9hycmqHGqEYIAFPX82IDGpZdJ8YSf0a+QmUeZebxcqLedwHHpBpyavCK7KQJ1JgiSofepFC81RDJO6HL4KQT2piN2/H5Tz8o6e5r/eyYxuDQD1c55Vmtm+jxA4ZtNi5bqgDxrFd4iQFafIReyv0aY2FMFkwgaik+tGWZ8j2bcs2J2nxSD8HqUsgBEMUb+ODJ9zkqqmaR4dCAYV/Mpi3kWI5QDgvbtqnNVOnU7ttaA0asehVfOmniAlHkGqap3oH3l76EHWQl/KjBzTIqZ42PtNpH4yBpx6TFBHPRgqVzNuDMydF6R1EoSufefEmL1DgozViiJjAGZ2SRTiQG3K7UL4kfDeKcWVUZarL0nUnYDTI2Ejd8zFZlYHSd2tlpE3KWdopxsK3hlkpSBxTaY1CPl0EyX2ZIqIwuyDRG5PzmbqwB/E94cSfh84kDXJNqJQAkiZzb7fMuULmmoac90pM1NM3wLL1TzwlCZ9rR4C7+0RWEm5TEj95rNcxzqfneBlcX4rNedaD7CGCnmU+lgWyL0HS4uVQe3/369xPa3Xw5CFuaUFu8Km/xPDyjkBs//V03kR+kG11Z1/dQboIyMiMX0yYpLuMR8lhTPrCPZrJ4RzN8CAgM5JFgpK1lsgRnktJIPXHfb5IwTzVtTQRaSKSkwho8UnCR18t7DbvDa6rYBxI4iW3CTMVeeO2hStDOhh2y8anBxLdY2RqemiyMFU+8+H19HDc9/C51SFS8hljjIqaJG7wvT2Ls1rz0EpwpCHIOMVxQEwMQS5TzxuqD6/VPrjZUyjrNGAf5FizOh+zdmu3hj2lG/jcHsqpW+7Wpc1dD8UrMf2z+gZoHIgKcAxwbUDsn5q6N/E9sVY/eS2s1jrZc+2/qxq6vwvoFDZJ0ecQ0UlnPzzFT1CvIdzcvjcVd9pk4CCTldfTxq4z6dxMN8jX5oyzxq7ePJlD3xmmdb2ulVV/vv72cOpMuaEHdla8sSNZ0j0+lbXNkXNNBo3csLbC2CKNFEM3xW0QVbHShF4Qbx5FUK94P608adTINSTlp4fGIuS0wPMtvwicwUzearmQ1tT+LBE66L/TjGRHaMWy5G1HupYjK4efWyJeyHKlkAyj4OjKWIbrlm++0nZbkmxXJq923EvWGJrdKxMhWGiiQUchNdZ517Y0yaDoLMEm2rl179L1o+y2ZCiyd4QDl2Us4jMnurRGLn2G/LQwS3NXBUMFyrg66tFSrA529/zKPkXHwpwCSrPUWIuKnqI6zetoRV4M/flJj3awIyBvf/trKqM7vT5gN5J1Mb7x25nD2WRHkBwJsbYjSC86oL2KEaBMFd6yEGa3Ci68BE4H+n7HBhMHvsUEaCQ0055cJY+/XihSqYbwyEK/tggq2bQcMMxCicaSNLzOWeMutNLDVdmHQTPH4dxLhWF/IlRaRLiv5k00ULJIccQ3OfnopImyRxhC69f8C9fdfhb0jKPGICnxUxG+RAJ5V76Cx9rDZRGSh9hvYzvCQYpdN3znWkAEujheVZrOrjvT807cLCLIXDu57aD0BXcGr9SGXM1uSlrJSzyxlw4qmmh66ffatT4jnq1TVXTuAp5+hoPciDndBZ713Nd905vCMT2r/22nTd7wjGrEYdtmO5+WksmWz0mcdkz9qiJWOYanEUku3PtepqLUiihw/1N3mCX8nsMlIlqPBNNq3KNN4mFK7UlzXHenIyxxLV31QmoL+VDh7uSMXN1UnN/fPLLUiaArAvfT+0f6JRmZH/VnkJ6Eetfp/DN/RJ9hzk2pOF4YpQ25xaA+pF5kWrg5kjsB6aT7dVFMzyQlUxw0/LmHhbJgACD+kCgRyO1dqTR3bmtMQRSbB0cFE85DcFnckB9LjTIu54q1tId8FHkcWafhpuvMRFO3woJBdBAEDe6iuacEr3xOvpUt6Sa7K88lTvT4RL7OPfob1p5ze3XZwZbx0jXyoFY50zkk24gnkhZTO7cvEW7D5CVjokOVFX/XM1Jntw9z/48C7YyZuK9GoRCJP39nv+M3Ums4Xe6f+CCMuNbfHCI3EooEzP0jfyhGBfGDBOGXJUC5BdZ+/SVvxhI+giH28vzsVPj6oEva0occvv25+qa86inbHf8KKS/yaB2LyzvIQTjEIHC77zMugYEKvh2XX/yLNmwcQY3nhpVqDUAPwBPvzdvtWG+ipiyR0V4C2N2wu1Ce/foocf0iVROuQlTMene+WKiS/9T+uPPXzpgxfYPYaeeyx/8fyANj2Y2ythYX1IEcSkm2HpfH2dQB68f+3qmRT38xAyWYa61jswvrcyRX47arY9M7QX79LwiDCzBnxA6NvQ/Ku2X3xOy+2r+T0a4M2KDr96/C2+dyX2qxHZjqeJAQ32PuKIkrzokwKwINdw4sLgOKFZQCDn9MS7+KnGr3rVtuEuf/hTEmpwfnGIiKc8K93WTbu1ztw7lboK6FNAAPvJLqlxRbcXiFqAH9/pGbYrrWcNbKfzYGbkWBjmvZFVl1U1IMUI/pLTcglQtMPG1YxzL1/22qEY6K/FAP4+XU26qX9elV0t1nrfAl6Nthjbd2lnuv/iDRLKrR4WZTjDFYHl0c1pLYOnlgk+c3Xn5o5CPhfzbREsZuT/u8/ULQlxQYXmf7qV7isJIRFCmGlysYLPisjC8in31XnFc1dHjguFzym4bMzetFRA4MazQWUmibSDjBcfiwO4HqAmLqco4ckCmpB1XLp+M3fCHznLU8O816wb/UqcfzC1Wiy0IU0RhHyhlZyI/G2NagQorAkX7UYatYKYWjxFm0TLqal9r3V9VAk1cVF7JsCMSa9UKiVTI7FxqOWwyES/NbkgPB/eAb8hKRlwMx6mdvQ1iwGT6VQM5V4UwJ0DbY5d7eS1UqG7wMsO//N1KWXz7Y301eh59RrWrPZzIr8pAAhoZjrLULT4x4SMA1up2tRhcPhFzIIqQCHbImilZSFW2uKxeuIn5V5wfncjrAWdftPepZl7aICV8Nqu4rMroq8qULwbE4b0Mp/1Qpljmj2mbxp7RnvELlwum6U/jcdQJtja9d8ysnMVlukM7aZfy+HP25f0/iUdax32NFLrRqs4jktwGkuU//A+Qn//Ud50Bvgb+kyJ8qdsNWcYEAxNXb3Dbo/BxNb+ZNb8MLLXcYuxB6rxDJQ1cXv/ZAhgCXVkqWdTPkNRV1BnvgHUjfT2Ft+PS36XTc0ExpeZO1wxlrXyRaPR+bVeZbBiF9cg2Sr97StqPI4j8ZzttnCXSUyOtnowdeU1hyoSuvtUsDfZDmxU1zoX+hza8CS3rLupVyYdmuRW9JbPVYbM34pYhfBGznBQ5teySr6ur2PyAbhEY2zTAnReg2VcT53ldLsusH8tAZS6eer/mvr6XR9axSQlLOgiTrL8q57g8LiodOerh9Veh352Uom7Qq+LvVaBdW6d+t85WmlIkbbfWhVV2KMxmh+7KRKJpK+EydafJ0OCr/2f+JGtIYMnndvpMoAkaO61vDTUPGb2D4qFFaUX/9C3wLpspe9xW1d3+ENrlFqI1YCV//34OBtV5xbfZz+Ka8m45WPW1qPbXBf3qixt3QM8fX3bVXV/uiZL7gYxoou5+4fqqLw5Xg+sAGAyJV2AQbr4UEa8QY2zCs2JmmKWHjGznxqN3glveBkoLE0DCmbuBOXp+qODa7Hz4XjrBhwweB2x4lNiQysvFjMwbmXHejpoxWH2qqQtffajPIJQV0VYLX3UkdW0PXxCvG5MZROXC5wOwZv3KO5LJUCd/wPjphNo2FonGxcbL35zywTjd60LqtqBv+9udcGZrr/mXzcNRLl/4ewe76qx7HjqWScu0n3ocIs6SrsteWvD0SUoxW1Evf09mpnRger4QvKzZx7hRqnyNLnbvO8ypvpgONz11aIq67jFrp9dcBbXGnbc2VA5UFdqfuYO8XnC1eCFy//HTk8AtfRlzVUiw3BkWIH4hzjmb1VOocZN3b5F3oOnfeYL480HxpTTc5/mkNsTR0z0o8Moz4mkikWpIc/vapa10ya5pZalRXCW7W5r3bmPup06C75yFSlw+GxCrsRT0hb9OMHnwux11y7Jo3VH5gSVAWwQtgGevBWfzJ2Lswp6vHPGwCsdh+zO3KqdEqwk1m+x6Dg0fJHN4Jywvmrj087vvDZD+JA+dO1mZnOk2Qpy2d5RglDaNMxPTZ8zy5KnM3/LwBOLWwdwfetg4MzBj2/PoWJt+wjNx8XaKVu7RPWTjpCZ2ZvYoWseSz53f2fmPNDLBAkXox/f3sJl2k3YgnN/MBgn2UbJVvi+HY5PS7/wN4omIolgcMHqmPbxqF/+4svGSOA/CKJwVWs+ni3lzBZAwh1RB51H1iEAf34JlF3xs9QbAdTAw9Vl8ZPoGRInpmFrmKj0jpnqpeXS6BTDRyZhhYbdBszJpNF2fhsMFEoTKLLoaIHs8h4YMp0elyFuE2k4mIBoss48c37O+BkklvtlFX2Ag8scj7/hY6s41Bp2c9nMkzjlEy6emHZaA6D6UhvjLq7XazxBQyMcj7FphkTGPmPD2Da+hSCipHdWqJHZtcKKKPJbYeWU/OMr1Es6DTM0SAecppiIhOEQfnd3wcXjLpXfVncm6bT8GKUa/KnLdMPWkj6Hra72UznheVBlGy6WnDHM5UHPIbY88MkesEs8zXNZTugdeZqJxH35v47IPNg6VnvHq4tbdnmlkcTGL+dCl6F+1EHsvf01How+8XAiszdnV4AnhjqYJdfLK0zO8Rnvz+alMZZCTGdeC7ztp3eDn/ZEW4DXc0P8yXxOWmWN+g/TE/yTCPIQfL8H2Bwpx8Ut27HioEjNRi7DT0Gm9wZEoxGclyirPhBd6orcAUb6p48Stz0T21kNXIxPEmjNSDrYksPw+8bR53JzE8PHneqybJ5+bRfKyX6pOggpAFsdpWpaJfpPbUTVL9kiN44pp1hZM8CfYNServtZPUb/NlPfGpDKUyPyquUd9gVejONL2q/fZZkffa/xnAZ2ETUp/qWfW3R6hErz0ZdjtJZa8aKC0xR3ul5ypwKOejczbW25+rJiaf922MrIGKHw1deu4VR51v8XGk0/KSi4ccT2rQNfNfDJ/n15t+7uxW7SI32ju+hl2cEHEg22updkuMmXagZXBbg3Q41nPtXld7OtZJIobM4Yzl18rG4mvrdD3/Gu63Jna6s7pv5jkdPY8TTTF4GuCyYDrkmCQgYqLifWZwUrixL0Y4We3tBhPhPeGnADB3zDUHpb/wSBZsfuAIaA9yTqr3IPpfHOqwtgBh65k8uTtNcWqvZQnvZxdETb1iWPS2+RKxbnWpkb70tnznRYeZCo8q9aX0e9tedyBAGN1vhU72h5XMTGEvdyrvWjf9BPZme9ZY9b/kH+/TbCYiRvT1XHinBn99ZHg57/nQ3dlE2rd8+rdv3jRdxJhRrvXeK8FRg24Zr/3Qzy7EybOfdf1w2scJnMenKSN+LEEpdam8Fz5Fz2xbTPDjfAlX/eBwWmP4CEQ/bg07rEve8qS3qmIzxMhdjl0H9iYzsCHWy2WaWy193wHKRCymA+XE/YDcXumOVCwgXPLUWyz0NVXtW7OZJzbxtFG/ItRslqAQlYpQ+zIhGG2Nkg50TqBrI+xFQ7OZGubDtw1bFqFmc4JG1sAeWlcR81zyosuKaZbnjfB32XCPHsrpNbgoMaJQILnXztrRhBvVHHL2mXmOtxuryOM/J2It7+8zZ/lNyoVLTRf0b6aURfyapaRkt6h1YIDDZGnrxFNvHB9yVe5frQaKH3qN7oPXgAGxOSFBe5C4mircArnt5CcQAirMJiMPse1A9hTiThnizxDeUPf9seCdZJEvdHiAJKJeMOj3sdA5UEbyM2IOaguLaWHZ3kKQBGlYv0jICYQSRAuDZMLzZ2XaHPWyRGUo4FSgWm6JOR75FqekJNdIEqNwxPZIahjeFCIiwvHXrwSaJPoPD8GiO936t1Dm27KPHRL8m0cb0fQjDirqGqE+GLhwt51QXFuOzAxYpIwIUnxw4Th8hogQAWXyvJtIuDMBQxSMP0MhFzCMD/JHeXw2BP4ttltDK2L/XGcgAjecjHtCE/qKwnKloK9lP1wJ+tmBCT4n9JkCoq1/k5B/Ws7YXLaXm/a7egwAl+swxybxcy70u4+G940GsyBcjrE1V4pOrfMr5tiu5u+ak31JNpTdOEkYeA1pCfy4IUgpTt9+j7o2PsaSRJ8EmEobGxuWNicecu/8lRciSUQ1dsS1KY/6mis5P2ocfB8S7FGqMRO1M+S/PgZBPagL+adI3iO4Nka0aJfzegzABqHxgQojCy8+S9ad8gujFvBzrubbYCqXS61QhqigDGAqzZhFSBreOvAcR23hRz3bg7UYpnEuDBCxyOFgEazxZfPoikPNjWSdommQpo8PeU13YjcMVI8yR/5zH52zYvzRG/77H47fIfa9H/xC3Hw3UIu7s2R388yH1gSXSjsUAtiHobNJLricfw2RzWXx2uNIdFnxC3leQDtF5ZbJwPP2HEEc7EL/Tg/iUgF2R88Fwr+4i9s/YqdYu/0+H/4PNVq4A7+U9NU1QnqAebh0u5zzdS8uzhEetyjGSPJ07oTAFgNsPsu/oZ7STKt1nQJJJy/mfHzlEDYDr/VdWFavCt0nsTW0lGEXrGiyAjPc4qQFeJ7PtaTQLFBkwsn8/jqONxEDfW7GqnrS1ahT6cEuGuJ3I+qN/mxOXyJkiMQGFYtytjnyTtod2Te8pHkz9DU8nigxrx0B4CnGsdZMi88rj4IH/rTPXSe84wgNRX3HgV6ASz0G75FS3fBgO9L5rJCHhJz5nrUlSOva+CscjWgGz/0UemiwCZ8PLtPoluWnvXk3NPKKpHy4RyLaS+oqeTB6yPTSp32jBZGmzNE6/HYS5yfUgrC6hWxt7LMUfiBrB7FaOaBL2O+OmlicHs/4poqMJ+GIySu33+HDJMrDwGiImmrYCdXwtCivCn08bbykQANNBhMONUeNaZdcE5bw9v49B2mxIniPTdC0ASxiaoc+0mUX8MvMlshFRtHNmfifXPWG8z50CrEVPWo6H79n++chxuifaY+OwcajDXsNWn9bW02snK6IMSiBoCzNMEk1IxiGizogqljVVBz+FjreUKdQPBmy7fCP5n7gD5nYUHJJkIokuG7mhmTWGkFDbYjLqkpJjsf38eROC29T1kYl72FyhCgEmzim89G60ToZlwYGYvUjFm9iriEFr2xqnkCYijS9no2EI/yN0EVBfjVgjl1I/y40KDWNJbrgCECVPOs+ss8CkkohIPKpBZWUi3pDKCzcTDIgSnsa6X8oY5Mr4yWM2BADc7j71P0j7ekd92l2S8g8ZVwLIBiSM6p/8T2uOV0la3Cr4heRWOFal8bV2MdWmGTxwy4OZMzXCjc8NItQzH7O38SWdSNVIgOCicM9TTWOo1HTQH2qc/GBtCBobkJotwocZTYG3/emNsBUNY8nRlLH7UGOnI0pKYeycrIBVbvOORLWg3790MjnW1ck2heFvzfMMMXJVLlzkuqNvX2FlVB7GELpsfBpes6k9tQ0obb3kQjn9qroAzWXi0r0HtvC7UlslQoxb6TaxIu4D5zC3JJlS5AfOFvz0rIysWLg5iJQXg7f8H99flPBNd31507tM1dCDcFDIvYi2YpkAz6sJAO7AFpPU2tI2RoayIKsb/FXpH5I04JVg8VJM6Kps6ZMYdWAGtx6wBFVl36TNXSUgn3MX2dA46rrE3YB51odw/UrP8/r7955/4ieP2+llkCUrqW9fh980n6tEMH5Nd7QT6wdiJ1gHZHiNkiHwdKvr2QtQXt0E2PhOTjHspBm9Nkmx2qVSIemlX+4T/SS++WxhoOrzVeQ7hUtFHYUwShJpVhk3VqF+C/ECtwudOo8nhl4KMjthaMWAkPo9URpgYv23HelkzvlQQwwJ7GBMrzX60A72va4jj7EVAapOLeWfiHWiuJCby18odkQPuCefZA/+8f06ELjJ3gbqT29yERm88vNH523U95+HLVcs8YHEIo/7H3mjvdRUvpkUscGbq4bqRr5koiy3rcHSmxOpagdxAetenp4IvOPdUQk/quz6F/sjTSRmNpCXmA2jsJvhUNR/NvYA5gT1gNyfKNG2N4GMNQ9KJS7UKTP2RnVLhb7Co34dpGHJeC3y4Ikmog2QHtoGdZabTqXowCDXag/47PJK9DsoiSWcx/6OEISJiG4Wkgxz5pfTU0OvQDVwJBowEzF9+C+Rv390lBMvxJRZZv0sb6nm2ard62h11RumA53Mjw2XMLQUMaRD16q8U/MvKwHTjoYj+Xk8MAFG6HKxNgiEsHwYbBAaB5PRakhPgc1FZoL1E+7eOb1fp88XZMzS8w1urScTq26//0WQDARbXqR/3t8R+EfNtLwAeb3dlHbqSPF1ISObCMgtsOU7dCyYEuH/+KMntsY6m0Yyv0P4dfI1pdBDyQeHzQ1MJNmiK88USYbDX+y30QuSzpMRQqzOZDGxngwkFaMsGMcrdPWYuWB6zjbkZkQjkRxAZOpCcT/8ME3xYrL9N9EY5Z3fL83o0LmGfDy+Jr1T+J09UxhD2Kv+fGlV2yaCzTzitWdpPY9KUlqMgwukanx+u15+q4+KjmSl0fs4PNhS6E+KevPTxQxqoSEY/JHURaGtZ0iF0QNjECpETzkkYvIl4UJf4dmfpr6todZidC/2TVH7b+3Acpk/2Sd0gHsH9nQj/ZK3i0d/FG8JDO/rBJx2cwT7R7kSzPyoPjK9LE2ZG5Y33qrg/pt/kNyBFzT48io6qSWWMzasLsR7FkdCc1ej8xGmazAxNN1Pu5ybXLb5y8ccJ8lLnbI4fmmW4lKwLLxuqNd+TNVsz0nixGyWTFZ6zg14v/DG9YqrZD/ptDLmG+iqdgO4Y3DApKZUg1bCk32f64by8NYDRWPI62aa3eVmyILIMTDtbTmcsYruVUAXPMrABHokJyaNmXcj7wmyLMUfMyUKWQuVSuY+0Vz0biDJ9ihZ1s9E0Rd0uq7jbNe3UQfu2h6AoHmQQwgfZPW2dlsinrCXp70vVDPEOlU8WPOPxSCSn9zbAz3t0tTvX5ANKgLpd1DHbthgUedtDsM2+oNg/1B0nyyfUzA4KRc3asf/sKVdurj7j131se/ZYPp7y4Rvw7xXyIuftTFoeltKPJLxkXuxsXvwMXJHeQ/mj2s8wsYWyQWsRtp7D2ExTuhwkujjYkvb9deROE7noZXisMIvL7TlSUv9X6rzs+H0dTAZ7LxcfjTacL8np3vqn92ytfOU/I0qxz+g1OVM4Rzsm8oDWzAOjA8Xfkjwr8BCx12RWSVGvCd7Dq0il+rIGn8d9qJzJ9mSE9YiZVeRfZb5JEcrcmg/gZMqRYiTV7waB65vivwnsP33dBnevJJ/4/RPc1FOLCLDC9VpOQv0/u5F/7ZxIP3oXxaJdidhVdBCPsZb8+fSSjKRWP8WdIAo6SL8jmO9gXcpiNMvkJaDzlRymhzc2S7vvaJX8rEzQIdifK7lxkBErVzKHFroeO8Inr+uZ8YhMIr+8Xf7XWEWIC+xUm47bhw6P77dzdUPxcteDmoV4yVfuN6VLY3IzAfY0jb/CG5klYxNmVR0D6s4ml5qXMDKhXU5wkBMe/0bnJn7zt8EwsY5kifj5+UNu/9VydlLj/y0hUrXGvfGwaQpcjra74ohIxYkluaOsX0GwiO9Rh4YaYeYz3VxArWUUV4ZZLO/nrurKuP7aj3C+M8zT+S8e5VZCGlgbHJh2JOVv9NWgLCaZV7PVWOS9ucPTwAf4tVc+uWRuV2YF+rk7xU/s3cZqHJbAYG0UA5mY85qXqsExlPiqcfoc3scDLSGaeAwjJ7vP816E94OSDTJsgIk0Z0FCNbGie3H0sk6HXLE4I0AWkjxxuGJbonJX2AfJqZPz8sPfJBIs0axmoyfuKX+UacWiNpy3qmmDL8WhDE35EJgZrMi5DaGyjvmWdd0EEk5T0fUXBAkxfagTsV0FbgwsudzQxV1ssiDXTYa6q0kBp+L2rCtF0HdvYaOlNl42ZGn+aHwny3j99jox6YOnT9rn7N75Kzn2xr2dZ6Xgakx8RjtBRHBJ+IhsimWiJnyjXH8pHXSxdhzhhx2GeT0jKvxh8aF1rkjNwZFG2OTzNzx8GeaN2CTb9/SLWEbClmxk8+CFXKGWv0Lu9G5Bnsq/wb2oXNN83hMlWzO5+oVkWspbxoXDPThXetq4940nvATXVB+jNzBo4OMZrTRORJl2KGpJrHEdiIN1ZTYkzCwuZCjua6/na7q0FVWWZlpXS/q3UsYBsLa1KGNRDv5bapQOBFEW5IKNdMdx0y+41DRifXl2Zon3UZoiy3lqdncBFgoqRytOaoKbIc6HElm40DGzBP3swIt+P0emDRGxv30pOidudxs+903KI8zseDoURvR99FzCQMeDi6iJRIrhOIty9fC2z2InG1dOMTulTaSMeGq5I23MIAPxfUbtJ9DRLGFgkiGGOCB0oUD+W1UYhhfu0VkyfC0/Q8Z/mjiUBgGUq10slazvGGz/3l1Tpbr04F4Y/XwMwSoSRkXtEUMe+rJ3e7ZlEqLa+z5FOEmWLFFjVF06ynpzdLGavQZLOcH62O03stadVFDx/oSgZczo4baprqLtbYDgiOIwneKxQq3hfoK5y2x/sDgaSZLrPkTg8De5kILXuA1Mt0ytD6JtvekelXuLUt315FDJRrtmR+2mCLE+/mV9Oa0wo3tm6D0/pYSD+FT9rM/58betvhCTLeEiye1WQjGVvd9SlrAA/oS3sG9p0bP8q4CXxX3x1mDcTEmJcBH7yiM2AYQhxVsgEjAqoZ6R0Nr/LOKIOpruSscpeBe81YhIV68jmhB95NXx8/wDs0sG+V+vEeOXHHhQmEAU/zuk1KfIXa4j7DwLtp+chVV/mDCLWiCyIUZruyvr42ylHHTzwKY8lyKGiZquXuHZ2WuGGrXaoshfItcXS/xB2d3oLml0TRyDY8r/JztRpHCmyeuidw7DD586dyjFlWKNo185cd0cJmUvDgO/AfqLpav1AVuv3dGPWIXBs5zN9M5cGfpGqeZiepEnNd0Tkk4hYvEZaQJVHTCxPiEyVB2pkK0z52kvE/G9DMQ59ucvgxFEtW74k5W42Z2RPfINyJG9F69LQFJCag9tmKoI/a70DaM+QpaomXnPdD8xnKJMdG5UwLP+HZi0rSXeInUM9fyVj0Wi1Fp9SCrT1qWreNN/81lp98+ankBbEkDniZOULTrSFTGu25b9O3jHwaqs0lh395zL/K1v6PSumWdkhE0X9FHf/fN5Oy/m/nPo/xIajPklYv5A/3bWoglvr2xzbh+hBQI5xupBEW9jsSQg35itowkfdFihpVfacaDmrm3xWxHvdpPNDfKdsz7mDgvI+nZ5uZcUGN+1FxoH1+e7iKZygnAQ/vcDLNGlQLevaWJ+MC+McjLIy9aeR7DsXbbsktR3oRxWNCdLmbxue+9J6OSwCdsm90nJDLhlAfavTHGR8zUfHGY7cNC29ZWGO7I35+ZdOzIt/vIKlTD/UK+JrMu+c0jos6lMAbHkxrKTw56QRy8kREWU2s8ASSUx7EcyEkfFuWN8K2ETsUV132gIIILIbHDVMdeapmmuYw+Es9Ypq2YaFU2HRzU9yv67cvkxV0A5gRjtTdXERsf46PNZA5apYSi5tZ/b9ZIXmRgZfuAvS9109RdedSSnLsoWxR9UcEsWum2buRo+QSXNXzYUmQU2GzjP2Eo1hDafyqLfHb5buUxatBAoe3eL3Fxwc57M9VEqbiD8wePOUWAX/jk85/wdWkAT4K8x1afwzTWX8hxzE1PwqBQX4xssvhm3eyHKiMx8l2XFvOC7Gf5foiScalXhi21f5jxa6npegqPrdwsmlZLL3eR6L1jhFgFXeVm6EM33JKEN2vlsguoqirn9+SiWIqhhFri29VvV91wJYSxLIzVe2xVn/bSXOl5PZWmKKyzriZpFSK8SnFP6Nqo0i7JRo6rqq4SyW4dtXiwtc1i7+hyQsVr4zNZjIKfUQqLvgqu7DMKHHyXojZ6EYlK43oZPXGhERCQiq7wMNzp2yfbu8mfrPsy4MVNIQ+rdcmddqgY6363wn72eoLYmWhvBVo1qc6WvY3l+majyHfNJxvFHoqgqjc7EEINcaeapFHj137WuXHszDGA+cuEBEpJH7Cig5A+yBUK89twa5vhdN9a5yOAylLI83Cu6BNbjoyvYZJGMjoD6teqTcq7srBPKP9goRBITjUhROTN8JOj65gZQg3pJLfnTvC9OnWQ+5DWa9te7obfzcDtQWweuoDfVe6YtSyIKXklYiWUuC18tWFAMSnVVmpo11vIh5fpuy0Vp/trbIMT2eE+TqluY1mPYD5dDc+WYQtQpNJYToaf2OX1YNBl9eoTzfXB7/MpwPSQuixPPCiGBYpJh4X6gQnVTMXzY9MjiEZVYOZh1xM+oj76oKob0jGieezU+IHn9KW80OapugXdZMS66BYzyOfx897Kfaf4iF/nz9m8AwnAfbFg8ivdMy294YDhtld/m5p97vUnefe5kIBBGzNHAb6ZXF5UkK8fxNlyqv5ssuXTevC5PaupyVQrkryu05hAc5p6HpcR+q01BZ61bEtD0CvSVx2m/WyPRGvpTXtJe0Upp2Dpgv6/oJfvdByw/RdDrZdZDwzpYH5WphoXrguvWdYW3ZPxD9mTng27B1UwTw7n2DvTsDl7XmP54FjD3wtVPFyt4KZnH1cjVLyoGl/Dy9q2hloQRMAzrzZwa3dJPp/m3PxS3Yk/PggTwrHzN+7pFaOWm2PONY42HfsYFUVjsmdwFMGf0gwDvIJ8V5dO9lNVM9zEZvKt6xjpip+24yiht/k1zDSXd48t89I62C85zRPlQU0s+qhLfcgGCaBDdzxYM74sfvfoyonoRE7+ckoLo3U/13xnA5eJZYDIiXu1rE2IUnPGRFlrGZnZ6Vdxq+eAVt2q0KiKz6VPvzjN3RYeKfHlJVgMOGfBxmNWimrB2nD2SfN/dOCkJ4m8B4xo/1gdaFEfGtLov31Vu/UgJw7xqjlXwksJr15Fa/iRQMO359XrjNJUvZxuK/ZqyK3rLViDxj+XjTWGLPEDdaVMsLmB9OP8XBlBTLwRpNC2e6W0/8YRVImjF/HblUwyH9hnD5m+pwBvWur5uF3kiody+cPrLhxgGF3VA6xbNfIK9fRr9bS+Z0x1XZFFH5X7L+NJFYtph5YfBSnXtLhXlreiKbi/Chibpb1mt9I3NS9ww1SU0dB3yoFuJraf/NntMOJQImJ/ELLAainAAHuBmEzMtxom2PG1CFjIUi/VT1RYOQb0CWjq/1+4/lxx8WWSXKYbdzvvIabA9ovGb6kC18irkqO19c1jRyZrB2QfQZh9Qqd1WOtT7zwtH6yPz30xZm7p3w8uPFQppKjwUg8DWP2iO96QFL1yZzjKzQPPp7Onc+w4y1hUAt+/jNO4BUyzWTfnyb6Qn66b/vWUQc8+x8Smza6v2TqzP7MPh9PgWoCPseOD9FTCbW365HiE/X077KABTkg+z10BqaG5Z9YEAUXrZYR/vVfJ0gUCYNqYvQhm3KS+6BPKH6QS7mLFwf+bYY6Hvzj7TlkVKH3GwZeFHXISPfxFNn8KbHEH9z8HzHO1TTlffDX1K4RnuK3hmjC0ECX7im6pNERGQMd+zgnCsIZLPVkwCAYgzebaKUlM9DCoxKcKHFONTZEbRXpjLYyiI71qB//Tr61bby1xJ82cYBXlrtbKW5EuWoBlgctuChAVoAxP7eNmKq3I6/nVQ/YntasDJSBXq5yj2TrV1UjCBHA9gfTehD19g8ds8sEyEfqzso0s4aQzgMTXDqLJsI8vqg7D/5/0cF8lXeoHbO2sI1u6+cbVatqEWv1c4maUa6H8f0JN6lrD0sVJa3KMzGy9Zt9dmFqvowTXfV2R6onYdgtNPCLQYLOZngHoZIK9nYoqkzR0g3h97o7951quxaf4bM3dk2F4atAK10rU8cCeMqy3cSyO9i3yMDkjeBHQzXgqrrPeaxNwKmKz9ctpIztDzvqf2STohqIwJ46IEUOb+pu/b5dErYOUKJBmftBMKuMzZfPZVbLntICh9o01o+gz+1uVErwqxYnREoZxj06bxdmuKCCzrjF0+n2WUypbuk8ArFx2GrrhY24a7DBz/AvwIlzzmc7jbyoG4F0Vz+12K3Ie7U8Kf3JM6mN6IYeoEuXEJGVd3dBgUBNjboPu0vxEzO0eRM+OJzG7MD1l+wYcXadicJU1QfmqaK8dGB4LkwiERa3dVrvdhUpScpKldFl+2LW3eG6eLQh28qrVxpgGWb2zXszVRFYohg88Umf+mZDHY9yK9b4rp7d0HFDDPboks4NnmYwoa64pE+2rGAfh5U3UkEWLB+O0x5WZefRsNbSVwGO0WHWp3B4qges9bDqXb8yDisKpFq2x+9xNsaTaosMjur5AQ9gYQoNYYbPJOdh1dP6jJEA5AYEM1BaqPaJR+wysER1ypn4hEPzGeO4fX/vcq3tZfeGnQJ9vKk1R9zBgI54wImiW60obwhlBVBt7SD0dwKgupONJNJHCjlQqXwz45UX6vZBp6pkq2NCTTFwdJfEOiyKdx/wg1UfiCOztNRSbTtyPd/H9VUt6yY79iiDKLh8EN7ACPgzWgAgxo/mYKTDKdlzt30f6sjs7yER0RIfxXvGpB5t0lHUc/SR1BVJj1EwiyndUgN1nI+80v6/7chJKvi9NrWkbZQDuCfFRw7uCluV98Cnk+ev1eJV02iyJ2a9SwP0gf9plDovaQfotP9/Sd2L8cFhNqsosJyz7EiwP8bRMWCPvFq2+PymqwdJeynhid8gE6V74FDfWkDaal4jlhzgA/TnyFsdExga31KaZ69gdy9QDMzENOHhocyieisqnZoMo5hNXFMh0qDMdbIlhMLw5HWTvJxMmam2jqfP8NtDxKPUUJbGxalrDRDqvGCd98EGeuGCOeOwXNCssI5jb/aAzFgU4ayVC6JGMD3vjo4wrxWls4KmxegO9Sw00LcB4Pd3Bt3g73PdwL41BixTbbD+pRSkszRdIAmKYFRXiJrsfig4SZ60r43fHBKmOKaU1ntKJJy1QwQcWgbQxLEkCbJxJo26kQ38fTtZ1G+ygwaPsoSPwzxBHXLQxiI/GwanMQPxI9/4nQtVCSZL7UzjmtJQuSRhl6VitG+lefhSkdkqmhd1vHgXfRt4hQPjqLuMXOKIGaeydyziYD+uzCXiHAF5D/BQgo9geQprJVWtyRtU2AImd32k1sUtnCWLy/3aGsvbh6iEre7oXp9zyoNAS4gcLQihKfbgfwabkkJCt1cHmr2ozGPIQl2rlsE9Kc+OF6X21XhPPypH52tyWQPdZvo4wvBAEETPNUarEGHjQmOaHSJjOrf+V0Zx7m8gqD2z1Ngg6CvVt2nFjPPQVys1bpoYjQZez7bH/m8Va/DHfNeiNe/+FRnmTuch8pt+/zv1f3+JDvf/5AUEAN3zv7+i9INYUrwc4P+GKmtF1U/cELxoIFnw9nTSt0Zzx8OcmbH2ZmaqtHmnGlnYpQA79ZSJWCSNnLezon9Nk4ekogaXRWDie9GY7N/Sdk1xH654O8V0oCsEAYxWT5Ts8LljwZyvFp5L4uxweW4jI6S7eZuAra0FD4WsDSPO7Chwz04xOoE2Z3ksTyIhZXRd3Suykyy9eW6fcQQXZJCuuGAwBgaOuqOf1uohncVC78bYLRutzQ0+MK0GX7U/SGxcmP0BGey7H/5Hw5q2OW41ZtAxDG1zdywpGieu/ZVCWYFSEmFKdMkcAnEzkrC8G2keNck3FD/DOi7etLcSjlPWCsolXne4hHF5siynoYzrV1F5bo4qiA0YR6iAU+ukkr6B0G0f1+xJowjfXwqawUTJ1UAUe/8yR8x/ShsiKjOldRdf5lPEy+l7AmUPCTFwi64hbo7El/uyBVGvd73/riB58qCLElbETjtZPuU0ISed+2n0aaYh0C08p52Plu+G55rE83exa/ym2rdgAB5dTY5wHL0aICBJa0VzP2+m1/7uFyRciJmR4dcApG5pGwktosDIeIAEZPv502kyVBWX3WeD1LaFLFlhfFNW6+2PIKAJ2ADQHgr63J871pyM/a8uF2l2q1ElEqYeP2zkv9cBFxqx7q6qJBRGYTL42cY15S06cTWG77IpdfKUla8V/dS2PS2YqX6taiPT/syfZSO44mMEL6mKCElzF3oynqhPtvMbDsRrVf5Q5PqAY0Eb1fFHiWY8WmMqxQuMTvslK8M2tCV4EOiqKfmyClN5Vr1MUF0Trgsa0AmjunAy/nlvs+GoGr3s3+sASzqw7HDhYimfAZvMpkqpNhKH6r1c4Q+kDlY3ErfG4j/OGbNbPvR0Ddcyrran1O+IZhV4YGCaqUT8A4X+mX3qvG6AMYQi3XQysiqc2K1FRZNqrzRRmlqrVlTf1Jc/fMRUcjQtazz+1anqxOnuLCvYVwrrdcW0SU6+BOATVL+8vwdHXS8MBuCY/SOp0H81ec+7kQLifMM9fSVp6Lerw7SCjivfbsjP+rk20y2IXXuuT+bNNpvrruZHRblBBl1jl7n2fxZHtNkeKS0MMlAupVsKsM8h72KxHFfBlzGBNedsJcZdCrNgGX9ftQt26aIYA6OLuuh42mPWTui7dluIGh/nDuoOC2eSY6Z6haGgWxyXnq9+WhAoZOuXJraJtmasTbt5ARONzmTssPtigXMufVeavRFajnYh3yRWUYSQbWxQYXDqyXjxO7YO3UAGqVeRvZplnfPRHLhKu7wkbDkxLZf74FRHd+P0ogWFU+6QQtky7+gzaZttnq3YDcPGSrcPghkX3Cvq2TgUXRanqIAFe+AZ9zu3H6LGCkd40Vf9rYayxLFXlACoVOhXFCiB6gzNk1NBo0wHXQHOTTwVnUQCPAAMcyizYjyFpLeyGzjXShJW2CfMvcFhogQ/l/0I7R276kq3tt/7bnhcRXWP2+ixOQA1kV0x2yjZuLRlh5IbF1QrHwv8mgUogXrH9NAhSTyi0pjG5Vpr2HqCLA9qE5uPph47Q/y0y+Q+lztWqYpTnkwQU2sMY8Pcgx0B3hn2VuVDMni6ZmlX6R771j8IwM9rClcXqMiTDelCpvdi0bmLBzIPGB8564PyM2zkOczvbgiCQ8HtvvoNBlyt3Ers9wylJBit0a0S6NcR+zcLWx/AJgVZlDXZ0lI9tBLtZeoYFuHhiSMkcRw0dE/FW+gIwsev28x8meS1JFrcKylPRd5tjxPvnmUy0b/1iTWxbv4cu3RIfLaCmvw+eDRlmGKdrpOYqexdHJh1whcvJtuaIljVxmYTnN/4Ii1PPgySfbLmBQdN70oJ7qIhsKXcX/dlcxEp5Wb7ULjnDlrN5Jkzq5Hx7NG0Mi2gu5zRS7jaNV/f+j8zJkXVlfZmq9jMHnFgJOp4rqTMlcehRwVLg02xuFnGlDEG3MWrwmWU2HkDEfuSJwgN5IRd9lKBGRsLTwfLaryAUSp0OnQ0u9PvuN7NyK5gUr1OGB6r1qoTB16R1dFovXzLN8CAiz47qg3cxGqAisp4eenVEb8W4g/wtP1B81aUF4Gcyjt8uXJsLY/KDC8hYhHiRxeHRMx/YoaLGtrNSPw0t5jtln1oCXD4xIZTbixasRJ/LBwmSRsO/Roo09sqJGg8Y7dIew/hzvkJZvPKLM1QAVbm33E2MuYC1RrQuf9fbk7DXCzzI/QIjQgTujeEaJ4L9HU5WbT+68VF67kTc+fhEd02eneya5TiUBr0XOGhKpJ4EfMN3E0ztohWRW0puwMNhovfjdJJD+vnHelLS/FtpQivp/49paJ2Db6flPeRTljh5q9LFb9m1a3IU6FXb484UMV9bJbiX9V2Jvymso3s48umC/Twp8m8GtwZPDqDQaCv/z2VWqB6wmrbKiettJJK+0f//zDtT0xU70AU+QsPpi0EvUkBt+7vpECECxsOA3xedlaXpoUrmO8Aj/EGAljMcGus1w+WkGs4TK/4TIz7xCAXgTmN97SgX6C5iYRds2szsfvW7mll3OLOME/Cju8mZj1WElnANvhwC0sWNAujNMQIk7kEndFvfzxtzabcsZlOznOdIq6sODwpyHHQO2rLTKGcHb6vrws08A21gDZ+u7VJ4o1cMHiMcqjNtkKJaws/IcTr35w8cCC2QJ22IWjr4iOcTCY43Qpok2gdR59TBdEAyqB6gL6+AxIPWc8Kgz8fn0MxDEwOHoDlPv3PI2VISrKwFlfjT+mCKpbQDw/BWxGxcM1CJgukpNPCEUFudHQWDUL/VeVh+9VYB5t6oQ6LWVurLH7qgYP92LPF56u+eco+Tm+/w94xIJaqrKkaS4wsguRrxRHMNcTn2zA0wzcxLBI47/aOAATEbmCXCsOWZ2iqZTYX7peuFygEJ4lccDD/woFmyWcBCfb1st9OsqLLaqfETzMQEZRVdmBM0jG+l7RcV3E2lo4knipDaVxR/oHGbkKDBbfD23JFWlp71RBpvzWUcS9uC9D78hYZt+uixYts926DmBa3Cm87XhtR2t4oc+RXI3U0lV1Xbk70UqqcSem2bpGC9VJEmZp1sm4ByJrSae3npZtTA51y5FbWY5B1/TrXF8IU0dTiwavBQKLtJOkweKaz7BH8/LhuLm8VMRR4VBzEJscihHjReaPHyfnW3GVxm4ktBA4mv2iuKxs24ip6hj0ERQsxBO2AXiDkktDVxTHaca9qEYfv93EVBcxPjY/galCkdMjFDqc3OPMth9aHe2W1rB/ed/S3VhzrmgU8E1kgBFKzFQsmDL4C43SRoOKQbkOeP5a5EvazGthxYbJle0cxCg0oILFmS1qlpUsdQcf3uZOxQIk4Hgq85UdBXyAhMD7/uorMN5yH2aOY8DRQuMo00trW5CHqDfRRjAfD/rChSzgCJp4ITMjfjcdjl1D7Q+MNPPbH19d4rf6eauxLiwbmTW08aK2YekxkDN/6YcEadQISH47SdIDHKUCAfeGMbOjsqXe0WDTict5pj61zist6nALJ7CHstwHDbDrP0usk8R9O53XEojTkLnAuoBfeTuSl6GXs4sV5jfikpKuBY0qtLl5XlYgtzW4rEekTHYx9EaDL0jKYZK41s08KOiBKMpjgfnjNgIaOz8SjwEfmQy8IMMPUEvRMQ66deO5kAD0iqrH3G4jWYA9PIksO/zxUrXRNsOKtLaFkv+YkNFD9guRRRWL2Nvm4zfw8ARIgAXIgA9ozAOfUeaYHF3yHcRxvmi+UescAwjK6dHci4bsZ+At8xdAqYKNj4FkZO7UjGPj0eN4pt44ubEd1psQ5cjUKHf+YwifSo0DvRh7rzctxeXYiSN5jfXIeCPTsGFc3FtdzB2bMxjCUj76TiBuxD2WnsoR5uAnPxUVvEXXSETfaDgV5NbU1D+MXWOJXJqUUhvNyrPBM8SKk6OVPHV0KlQBQczJvfUIzL7f/dvr3FydewX+WKXaiga2ZEQdNgNzA3xQLEUDRdNvQFRFUBxvHelIQPmLlphLb4IHosKgkI4uE5Oyfn3xYnQIV2USyey2A6xHaMKbce/lpGR3/3jZ66ujCRfJS6ki4J9M1XYHP4QolOFyteN1ei77U1eF1l1BxA/rfK8B1z91Hd8h7Sq8UEub65r0I/L+hiDLFDarwrpK9cWo/QB8RqrYo1Q9I7zuJm5D92E+cZVGAbZCY1/+DQw7uLjNxFOJe/bDefMlrlVBxKuXkxOqTBciuO8GY0qutu1C4H/8xdUfobgiWCTUz3pP6pSZL7xSCKsyPvQVTwBf/n28Qx28fslM1e4f3UZ6XfsuXLFWamkJJ6u0tSNJSyEC87h5mpUg/NAh8JIlx0bn7qghfJKDcPeJew2GZ73znYbhwucPK99YMdnsr40XscQs5M2xo5ZbwuPe3d7tblVxBWU0mkl9SXlTVW1KmofbOGw86ttyvt2RMo9MJwGJSel+S4OJ2f+93vtKRrb01ls8coSn9YfWFPSjuE3aknYxAPeDfB9tvWecf8EplYu8c96s1reuE0dHe+W8mkGkmdOezj55xMU+2oq5g6rCOnGXneW8O8xrCd5WzMcPO8XCiPJ2u1RVd3qb+MSCUnCmRTOS+cmiLStibjxaYaf5J10eJMWEQ2TS3+MF0SYsXKMUOHSqXbrAjuV8Wvf/nWJ2lpuUNXvkPrz8XedSvxqvdZWT3NNz+2frZbre5xe1ue2yNrWp3RLcP28+Nnq635u3cHruO2H4sP5DuTvFtf9WbFjrlRvzz06j9jyUyGJJv1jEP7ViQ0pOz8l/wAL8yJfbbYAuF2METFN4cquEhdQJxXIv2FHmeoBlS51n6ndyNIdyec09uMdeA3gUmdn7NDgu9A7iOgnnD2oIwj6vpljgciW5rdLbNnngzvb2tZssx2XOTHoDHqiVFWnQbrd3xwEjSAUOVgbfF4c1p1smVLC0ymmJD8Ehm0NK34cNBXU2XDFBKshsWHlT6YFuKm6YTBZYrJaK4sWMoGMen5mQofB9SCNJNycdWbAGfcx+tS/7E69S8NQlH5VKaiGZznDCi0we+VYxlbogIp9kUy5u6PGHTApN2VrkysiHmSDYqzORB6Npe4XfZplvNDF4mg+frkj/oTPoWGOPIgavyPvmqaQvn1G/Sy5wThYMBWyI5YWpgPDlhGwTqpxxQOt0CNsjPnfYRp21d2ID5eKroag7q4PQLhOfm0YTw06VUPbxeGYz5GjUTNQeeTcVlxN58tVqV9LSDmMGs1/bdhchPuWR1AZKdDYYSUPiHtjk5VOQyESNbkGTiJwotLXdVNODjDE4cef7njp1/1KzgYbH9k/QpM/MMtpumuD7HBQ5Uynh3KDoKX1En9r8GIO3QqYloWhtp43maeMUETGPMxprGnFwdeJLGmb9DpSYGtF2zPJPh8NrgN4QWAlN2Nld1/l9EkkQ1OvK+TvVlGpcKe+938miZCJOzWtI7v2TeMBRtSCqF82tyqoOx8sisMZPudC3J4pgDdXYqtoisy2YMlM9wlpcTRLNywHW+v6OcxS7uOiXwVqQAXG0cBX3e8yACfrPBakgPjGXNWo/dmLoWg5vM6/FQOg1LYqeD50UowlhAcpaFuHwYJaAh440gCGdLm7Ig88VB8WZ6YE/zLTMss6bXLrllqfomMxZSUvAJ5dtc8rYuRPanDxwA4p5a0pi3tuJmEjw0oDKF/hl6GXm8jrmDDMd7tZ3mv+Ad4TnQIdtPbqsIbx/KnMz2th9XYJxqlaC12kCbT0aRsjmDfKOkemjizFq5nsPhqQ1g4eT9a0/Jxp0G4fsSw4Oz9/CE+OOxPTn/kp/rsYb2z2zw58TeFsTStdqTLmUZnIqk3IWeiqBwoPcoYMeJIvaTQghDyLUw1lSSQMwHbShremRIlxBrBp159xO991x+0OWTpagw1WvvyGAN0sKhXXqRUi/d6yRWorn3aiK2+yB5L/NncTJYuvfeTMPCan9e7/U3M/qfmSriXkHC+nc2ZBt2DNin+RM+Osn0FCksphxjsfbnGZ1GMT/ip5UGsS8VdIDpRrFYmjVY77MPlw0w+rH+IvTp+EgTB2boAln157eyT1oc6FvY1+Vn/e7cN7C6+/+spcKMUEVivYub2zcHYfh0RF29pD89/+PxUuhpk4QvmHq1oDfaeWLyhXJI70FTHOcBHOzS8uSHJDeg/SsUYBFwClK0wGsYK9h+26JU6WYkQBDxd27UFP+5jYA2YA8WfQxT3VYvgAZ9b8N6ncDLaTuWgfmrg5s2bnvRgT2d/H/CtxKQ9vKNMJU0sU2cPm+f9gkOsYbGlv/YoZ3+FQRtUD78Wsr5bebiGPfg0OGtrX9zLI9tjIOohAAhY23/cLDGI6nkZetqnEVHISVS66VePe5VwyIJDTMwT2LhfxAXY/rO3KRtEssC5IdItj/QucRdyHTq2E+MI8SBFfsU9SDvSHrKSnFlYyaNRN/W9vWF6GFjYmLRtb+gsc3i3LZG8i4LL8BJVbkodwt+lKjMFm5qDxvgW4zjS6824Ol6CWn/OQYUvPOtiKdXaAbL9eRUSM8tfRb7O8qJ7weQgoIvU2c2cmT2qF3r8gTFmOmqa/7a2mcApmrTbNZY6NT0ByIUuXFMW0+6dEvCIFsfPebHG/9WcCujsZc4phnLNB2LT+LX+Oiln1vO9BROJXjS3SJ5CKMYmTVQXQm/+dhTShTGc/VYEkY4qbZdcWCJAZgRxHTzIIthz80Uxgvj/59ey+V0L++8jPIbeR1jPH+E2ciSdBr9ZZBCmvNoQp7e6ooCsxN5etBmTaiZOZhfbDnPKWVHYCoZu6t4q8Yw35wK2HfJDLCghHO3K9KlLJ7Jwr42Prtyq4KdR8bmgGKTifJ2Vvv5NPb8k0QvqM8wUZ5OlqLl7S2JU8AM2SAukpZp+RCu45aiCbEQPPDd+GF2OYO80MoctEYxzj+GiJpMqcFCZbeO5aPCUC4S6v/4Ei+vWTgWmzSvkN3IF0SyToSbG8zYT5xrZ/vJdD49rDYzBSQc2F9aEtwUxkslpY7gcdeP6lLSTnUln5je7N3PS0qEyu9HnedcX4+qvIXRV4coTa0vJafObP1qQspydS1bfHph6S3+jGfzZ1NnPpa8tOsn+zP/GElLAb27h3yyFO0MqkpzuLyRFqyt7c4Quq/i8Lz+u+wsD6fnav3r/LNhtbqQPSR3MHOrBU1S3NOZLb+50CCCRf3nyOr74GOz2nNBVa3NJN5F92j9NGucDf8yQsOBssF08XVJYzFRlUzsetJuvXFPkyg2/uapmeRZJO25KnA7yp41sbNgi4lAyiAnpS5Xzn8SZ8PkbtVfr2TG0XFefzRTOnd7+0vpBwuOjbMYuHsnYaFGLFR/R6R3R/z8BLfrDStwn+OgN6oQLGAF6jLcdOIuUEHW0r3pHhylAVSdBXgQMUPTCXWGGQMT1pegmm/cRsIstF6nT5J4zwbcM6tOdEZGPdrztaTZHT0vM+GmKYLrAbRu8Pk74loua3LyXufM2Taeuolhj47N/PPR0Fmqf62Dob6EgrSK/UpTxeA30nWE7IbTPzmM6J8hF0tSCDcRJfADkg1gK3fDOC/TBuiF1KUECp3ZiKGAlDpHCUGS4PTLKSqNUqaLLfnRcxUwCIZuCDgmU8nuEmgEBCuy7/XJJA41CKC2PAsBCse9ooqEiduwU9gqV+3et48ZktMutVsvBpDmlWBACS529WIXvqk4YROioMwg9M4L51Ja8lrADsYSwW7qE0MffbWv9I72nVmu9jH3SbHqBbTk+UHBpmwhSS5DaUtJjL4ArXx6b4Zgn6ydlsz9A4xZrlXf/ZlMzlJAKncZ7LYFqZXNASDm/7hu704KLONBMfZPlcJ6bzXqH96OlATyod95WubeTyhUmYE6t6EAMsM4K7CDlge2KCQBKKlLmyNih80QpG0FCPjbM9ZutQUCLoYVlJjtMzyzUEbm91GxdQs3Dsr2qesKcRzSuM3/drFWkaXmHT1HAnpd0IsIA2CSe7HDIoAk/Gc4Rq+NxjBXRvxFS8SrIuvvlHeytRAKCPfxmSBwsXeIdxL7AZbsFFGnhs44fntVwNkcZZenn7gUk5zwNeiKAb/ndtPZiS0r3Nni6IFkkbfveehD+UE7nAqUzbZIAh1OvhAkRU6QuE2c20yMysWkeReDfY/g2iFI9uL2eBoWsBWWk8MGFoHfu8y16vTelOZqASPou6xJA8ZburbqY8REBhB5bVRhHYvi5NChjlMCt7BCVmo0XLZQWdJDXcbhLNkZdR3Yr8RC2mGq1ypDsFn0RWXlipWwbfxL/yqqn+JcQQUoj/tJShEVhQ2KK/6Fj2/lyP4/4QVwE8UQw4GJGpRUh9xEhGNdxTFzIflyuMzMzSmNEZYGHKcWxAJS8izB7Z8xHykycwCbe1Dab8ZYxNPytDPl8+RjpfmAAqdWK/6wEFtwGO1kDypc2UDF8oFliMiJeeHKdMsymkOY+j3PwQ91uTBwIjTl6UpgdSSrAImLFaukLHxRW6+LzRqarD317so/6fi/u88K3R6kJlnkut3r0kHEIhqYochh4LROSqXkWsWl8oPJkf1wXn1MsJQNlVNIOQDOXhMDGFYqDpCo2Z+y4rN8i8hk6i4gmD6BsyClGOqS/e8R0rtNA2dAgaG9ggdVb1MV+2h7Bm5P02kq3ZkXRplkm3Qia/DEZenmJOrSSj9e/dZVkowptt2oI/ojOve8GttvaEWYdrKwRzlKz6LDKhsspQgZPaq4d7BPZfWo8kwAiGbtJC4+bhuz2ghTl3QKWaUu0EAXW24jPlbxOUadssFqjAy4f14dCscZ1WowaBNv01Kq9Bh44wja55DKseD8EVma4igEcovKlu7sLzQRSOWWqoiUv09Ozm5tbJiSbPYcxt094j7rn+z033OvBpD3DI15XOuq+vj/qLgosplhBPDfgis0pPllf4VGaP6nHFdoUPPfhqA5xh/vgibs0Jamx7XseTseKCSmpEdDmy3zZrrQvS8duVm2HRevKfE+qLbhYRl01JH6JetXn3bg7YrIMpURIY2Z9SJ1asN/bsb6Fe9oW4ltx2u8Gnh8JpPsIXrUq91fVzDhJ0IX0LwWqm5cfUvPrWOiDWvr5BHccevu10RgBquo8gjF0WKZzx2eJ0rG/TRznzA/dxsSLXsRQj1magA6EWgA78lv4KpylC4xSPj9vXJ54Qwb+LLf/oFqaRHQGjXZwGF3H01Y6AyBIAw6CI/hPobS2+g+a2V8U46QjZjhqwgPlhYaWed7Tx7ZIWHVwXUAo732gPY/XkiBlRPDFGLUixDXgXCWutRwPVEw9g9/pvUIRYd3JLKdS1epWsycUp2P4UtWqSI/5lB16+GDcCJvNf7R/ux8PV6vbZje3LTAV+JhBAquYlZN6Q0jTKmSa5rDKhyZltt0NxUz0GGM8Pa3IGaIJWjRAQYSVkFDr4wtkxAd5jHMSfpb15Cs+yCSfDq60AfnGwsOZ0hDEi2rGUKLDrAyvlzVBab6R2ZJZ/u5IzOehW3izF36lt/aYbGo8pDoc5U3d1xM/nk+ZGsQtpXCPZzSEvzQ8i9hIldB866LQDVCVWV0ZAf2pvd2qrSBCKF/Pcp5rhDk2GlcXnWO7pyINS9sDfAWrwTG0x0TgC7KIWBgv08B3x1XmxrPlsaK5y3U7mS3WCHEf22ygBjgBHkEh5r0f8UEUdWRSMuyYHzhYKWux4dROnIhHZJo5yXow2izlRVLcCmfbi90Ph02jfruGM+FILzQdPE3DTD7POa7IwJuSc0nHLgwXM5TJz2P51F24FqEeA359L+zGO72F62g+XgI7fzm37xE67ybWJ8xbs6Y72BcHnrsc1k58iEFUSmQppMeS7UxDHrN4SZHUSgKaj5LO3mn9v3p5goud5SwxPZEn8QAHL3Lz0KOVId/Wt2FY1IoBu7OSkGvrqcMNSEZX/dFeJitUuyXYjZYbztakqQhx+kXXs78nabJw97wSKkv6Y7vXLMXCf8e/fzs4+ChP27vYrV21k86V+k3B2Fu4zs6yRSDW5MkAAihEbv9r8FuJ+/avnHsX6/n62khVY9sshyrvebjIw+Ot2OehJLKpO/QmxJem0M/4FfUPxVLCyA5kREsweU6unLkiaBcGTyQ6wpZA5j7gpPIY/e9+dqP/6HYs+JFtrmABdL2jXGM5AmJvdbCIK0EROga9+kWU3f0x/Hk9ys7uRF4q/tjuyYICeE655llTbfUIf/vZfFZvsepejM+5mFlzz41GpOnrnyc90BVqAh7b9AghJja78gIpnj0V8797Ude71/wPiV9sjiEvozLZr9Qm5bcP6RDA+lUGV087ucbRx8aKGk53Y/EoeqTDKUZ9XUWCw2DAxWO80Lt+SAH/HqALPGGsb87tBMIGZN6rwY6g9AMHQc+DyNoZkbtT7N7rINsdUNUKn2SBxrnrR+OpwNnvW+sD6Nbwv/qXjW/F4E2kdDdlvau49F7eZv8g0zybfeOAb37KXq4GUxZ5bO5hJWWriADbAynDtfctDpk30PP3T7RqAsK1FmPy9Z+D2a65VCUKEcb8zidMnHknfmvMUZ7BIm4V90J5K7Nw6I9WeSL6JpQYOAlhkB56cdm4qO45sDHrdUtQ9ZaszGOwjWwMUYHjBymrfXA3c3yp0VAvcDBec7vZJ3uxAeGKQ0cq3+CxtczCGvzGGlNtlzaP6IpMqtnvSItgq9ytYhMsoLAVk8GtIZq0Kc4QQ2dXGiOWisolzxyTkznJPFyeG+6W60e5+R2jpMltk5/xhOXyeSg6jWUyZhtivqjzxYYDzM5WzHAk9F114Teutg6cggA/x8VXWun7M5c+3zarhzleY5npugbGsLV32UIu8R9PhAJQVOgxRQzWrhKXoeicEA3Hw+Qz/lPlnw2ywGWDfSW0zmLXUURRkXmQ07vR7sJ3ZzigIwY41VGMyexA2QuhzTF0OGXHHmOUiLCzE2gZGQwXhLZQyDGzFZIeABIuYbMqTvFMJ3ROpYG7RdpnVOIiCWYYwRvUBpwiRcEtOIxV6fpjRzoKdamjvCvclwjhgCW6KJVkszZJSA33zJjr3Gel4y0kjF0DiUNfHdEzkMm+1K0DvgRIczp5oSXohm6mfj1zdlnQJon1Nrqo+mSZLG1wchRH3+uE6vdTVPXwTPhA4UEZ5p1sEiYWsodC87sQ0TcWEG+SCWDMNWrQWXwXIpiv3+WgxYTCVrJTAaDeEZ+Pp7zJ2hjeV707jZYPZE7ngWsUY8oKI9f8mjkVrljnQYeIeynmF1YMFSrILYEY8kxzy1vRVhXHTlYBViS/zRvwB+b5NNh+TJFZGlcMS5RuGK3u2nOyI0gU8+s8SOOyaBRPTkIFtNJgm6YWRVXXUtteSxR3d+3ER+lkK/OLkrPNOJpBZqp7n00px3tDV6Uci5ZK1INxkKlKTPt6hxUv3v4nk+G+/teTUvSDin/fRb3FjqN4uiCOpcdlI5DWNYAFgKavVmvndN68nO1SL+KSrLdl2uot6bp1RFh2A2WlU3QWJFxeusyximvVYYpYXjT6Fe7E/SBMVMgLWL6xKiszWWfWROauE0fPWAxe15UTGdZoizVuoDzfczDaqqWxr1PGtmHHDax5OpZGiQ80eZisknbrrQxxdU16NZu/NOJ1qe0MilKjqRYJqy63d65qO0HOBEQkjhmktJmk4UchRsu3hgT7i+nf3ho1U6RZ+I3qu00OT4b5tal93T5FRJedN8L6Pa+nVsXaTsopy62DuB6uy+bID0k+2A61fhZgdudQLdM4GGPFrYmSiMQ1W3ELa2PXlhL6WqDMbyE+mOweMXlXSxpZRGQtIUoQk0Ihqqnhk+dLiZqHK7Ei9oMeu48rzXM2IyI3BdLH1BGmjxyyHvNjOFYQrMc2GyIdR5f5Aghbf0HBrOoRCQEMxgVahaDT1l8+TMujJj4OBAKl6SxTCQ+PvrtOclHDCSVbNc8AlYYm6MdC9qNe8NBYZJMUdowfQz+Dv1zBZDHBwMLtxNvucR8OE72czJQx4sBLQmufczWAXaNc1tnEH6zKBUubDri06LUvS6RUzZIDNARWtbmMa7VG1lp2iS4HKyy3dQCbYxKWTWVoems8z1wXjqS22k8poqQHnIFQmWY2k1AEWT9PHXovXnJQy2TsDqJ5ht5jIiTgs5X1UPf4IdZsjwex1i1E4ulfGBY30ZTcs/ohXVIXh8NwFNveXDMnfOby3BifeAU49Zo2udcOTPhXL1X1gXD6Upq3S/VD+LUSjCtjDHQkqt6Szy2O2lovNr0lSrAtH2sAaWg0fck6YnJUMidgTrt9JavO5V9/snH2+OA8+mEa05YyRoawUugTB8aQxukX11p2Y2SmIHoUPJsejry46/7qRsU+pOaTzrDHPx8MMPqVixGpMyehYabUEhtjC4QPoZWH/u/mJVx3xxJ4QJWFSzbtWZM37BP8EVuYZwLdWLLUaGnd77s6Z1KoziS8etzNf2ldQBNs8nnAqwm+oaW04zhJtheQrJ5clvppWqxac02n8JIMxBBtTTF5GHbWOxsSFjBDqkPkx6EYXFoAhkdSL2hpZwZGqvrj3+4Y+jg+ApApwdBC5QIGj3nFkccvLhtdNdgUnP1zVTK4WJKLJu2XMUVQTRq+ycnE1DNNzr5HexOV389SS+0at1Wanx3FykEzrJI7m+5SFP6wBerXy0hPSmgTDfgsQu1GMCp5CplvVfR6x0pjYXPfOrgXKE8mAh/6VYOUpnnCxVGUJifYWtrv33BjHVaOuNE9GfIY95HGBYCXHsbPY1m3zBZBcolDz0/3SLuGhFTbxF+ALh6Cq2IUEvWKI7OO2zsc3V7jtxmYCwxQy01CwclSSC1YxVb7K49SD/qhRD8m1XELAJ2fbTnhpZM7PaZP0sGHnZrSBfKbUbiQI9qfSJ4/FUftHCZk80Fab188CSV05d9+hpR3gVnMxjoQewYR+NIxE5rpa0ywWlYgXb+hLeTfXroSJn1V9nJvFCp9oTngTrwuIH9AQIEANzXTDMZrrWxzTbhshHLePZNH3vZpeTKMCKM/1BQvILaCtKx4ksZVZjFH/vcsZ3LpYaUuu9l3grdINO3ies89i5pLEvIVt437Bu6adPkeRLXxB6+jiaXKaPv3im8cfmDDDqu0+N8aK02chu4r3UZni7J5jpnJ12oL+C/OKh6AfLEjl5OHG6V8uyfUU+rNuWta3R5Zp24VnsU/MTsm784DP/jxXfGY1/2ElsvCGcJaaX2HlLx8JTbQveO6O5DYrVhlzgmkDZSWFh2KHR+42Mz0cjs6IV4Dm1w1/wVJlcsTfC9ZiSvhPt80msPos7tPrH50HYXpO9zOnJTrU60vVME8cbrECBQZj6WwzDns7TKiR0OkqXX6nmiMPeUUfkwuOyhoys0k1GpR3RZCYPDyPxIJaH2bx9B6zxrxupnLCaWQjUQKt94lPAQXTCUdSr+cyl9lFEtg8U35fgvsbM8+FDzs1CrXizaufK8a0pc9a8oIUyR3d7hFyKNuVA7OGcs6D2GWkJafVWCrD+caHfKuRfYrTSa7CxlVdmXD0iumT0QdjsHjNj+ItOTNA2TnOva9V+oRThpqf0LMBI2ZRZHOxklf8SxdcJBCqDSR2HUDv7v81dyfNbtZX+qE639zBz/+58iSjtfO/oywJz0dLTNJoPfJYukUeVzRwKAFG+1b7dvqoijq3Cxhp9a5hVvcVcvrT7y46lhktxXq35yXHBlozThmAfP7IrJOtGq9s0fVz53ZtP8/6qz12/5J6X5pnxlyzOVyFaatd1EhLa4xrY+RecbqOTljrW2TX6vRKpER8cgWSsS1fny+d2JvFQ5o4KPrTTnThK8hJIa/NeMhPlv3S+QMCtdTX2E3HYA9Fj+Ai9HoD4sc/yRyVCWVeTyQuRjB+clXNvmv9iU4+RVyoes9QXRgyZgf/m2RcY+QP7v9GQJe//iZ76wYbx48+f+R7yyVs9I/5uk+59ilGhVdjl/q7t5k2ZbLBvv0IVSbN3lhorkzQg7BVEztWDrSc8Z5puGu9rFDSjVG8dTnPMRGXjDfZtMqTJr3ZNh1MASkeD32ZoVktk0g0Ic5tqAWpng1HGyoxTSr4lSDdZ6NieKB50NIKWgQaxKV7JviePznGbMUWe083ZwppyC8We8hJAZISopT0FC73DnopW9/OkHWXu8B5+uL2HtAArzUc5KSXH5Sw91aWiCQRKvZd7+/TkN5A9Tp9Ek/icw0hUHx0UmZX3OWWGRANQgBzb+iOUBFpOLTGbLSWaZG9IM0yN442Xi+z85VTWGDOcGpGSWQejzURaIZQjp7AC2qP8xGLAvTNanrQ7dwCy+sZX2hrITU3iqZgLbDCnDINOdZ8uCd+poA4ydU+kPXB60eHTubATYDlN+EeeLOPbWwUOzvq4QyiOAvWdvGYLL3JtOMnEVC8zWP5ZJRFucm8XAHLZ4FksfxuwwY0gQmA8BAmWfr3/8L1FEAzF1qhv2HU2khyOcecHM4PXMbIJ0UJUpKJL9YDgPcvPZ/JK+u8/UaQa+sBUgooH8xoUT6HEYSMLjODO8lnHB/qPLYR/5BfHMtubltfr1+DQiwGJUcJTs0p8U1dr2h1OZg5nyPSUqOH9Hm6tK8cf7cgr9PzqlYMTC/EcDVfcdJKxKDWkoG01tFf4b75OyCXyi1YxEUY1EWGBv68TlJ9MAPshyIane5ORATW5IOkX4aAK4HKnWkOdxJSeL1qzlps8qJr+jlNtMzsl/dM14dDbL98Xm2SXDdPy4KbojnjFFxv1aycJU+6tgoT76BpTkrCgF25MhBtWAY4N7bScUxFytppo4jxebVq2a+nQL0k4K1jmVvyNUR02amb4hUAANSBudGWu1Rp62Yj16KZ7d3uyzTi1btBvNvGgG1n3SnxlSm0j+VpRpihQkeBjj9zxtcviNMjQUCklKXH4HGMeq/Fo/xNunff9TdPMp6Vga0YUU/gsyJhDFe6/EMgL+IXjCu9d79UvzJ5rRfx2dAdKa8clvOqlVmLD9jA/pi6+a+wVUFsfsrVMsYTPV7a7mu7VA+WeYbO/LBp/KbyfL2vtwGs0mHcA83juobqGqjJBMjlznZj5EsRfAmP1ce86v2iXBF8//QxaWCmRYV30YomFftbQCGV0zAFyFC0w0uXaMSbOqmzPhO5eOX1qhXnvA8aysXxGjX/NpeOnqcTvfZLyWlVxf4185vuWXmarY9KQQlK8uK852NGpFG0x0oXi4twARDNLvRAcmgijyQCABw1npRT0ZzMR+PvNIrXT+TVzivDLOaa3evRosST0Zq/M5N/D02DQS7DEimSQx+0pw/cHVPTvbMbbyN3x16MTpnZZjLwT9sPCEbEzOv4l7D7ZcrwLxFag56pM+GmDiAlP9KqZtCZkdW05eEVd4761nDHKP6bN0eapTL90yzvt1j2LNnxLrk+a3aLLH1vbYwld9FZv1fdPDrukO7eIop3hOgrZp4Oac8wrW3yb1JVJxs4e0onAA/BFjBywuyJBsQz77mC9O9NbzGM7Sxu9ejs2hR3DSk2/WevrgvKTzQcxZYfzG4pV3ZJ0PYqx3OviGyxx+CV6+JAY9a17uH+z+gbh9m5laJgGNVrRLxsg7imOcXhks32anPuvui9ky/AxrU3OUBZxtYbIMaFapaKaSVy1wosAt3dxh6n00rYHj63guxLsC7FRYT09KDUOEIXlDmF5TGKRP1EUxodqsybuTFCnE/9Xpa2xCiMo1ENf4lq4k0EYEcuWa3fIfJIzInElflQtEV+SgL9IvicWS/Ngfv7g8paxPVLOtR/KVb1fUeryZd5kIlIe2SrnEw2eBIShqGcpPjzwfverism+EvIXEVZ1MABmQl/aqmcdsvuKfWntgJ9YzrA7nHqGhNw0JEc83aPRhRSH3ehpqGsk67AQvifm57EPHefGv3NY9F2DmuOKrVUELzVuvCcva4t9XmHiCMJeYdI4f/euJB5CuL7KU7fEEk0C3k9yRTcD9+0UBvO0JjmLDn85Jv6cVld/qjJSn7vhICZPv8eFz/4uSN0GD7zMtc0cYDNain+2pylS62oMcvymzCJFrcqGjtubWL7ykX9s+rmc4qyQLX+0tkIog0blxJmbopi06UTcgnBS4jsaTynTyY6WaturwGr9W43OvJ3Fzl0MchrcYIgVtBi8SSEd54IdIUPeCtb129wFO0Mmqq7FTvZ2Yjp/q/TVn7B6NwNOV/ksvpPz9abYCClSdyQO5ekiOcmPplNdw35qWvpjaUzL9fH5YiKDbC6JJ4hEhlJ64ZFOTILlBWndjkHTlybC0gWdEoa3Nb3j3iOxMhST5dp46rFMFEobf6f/NJHCQtHk6JtdFQLw6+QkdNLJ7oJlQ2XfTH1fOR1lvup5bVYURHFFPFosb136N9XfVJwFWHgD1LNHdv2+Gam/fKTbkdRF9tdFhnzMYb0tP6Ku2BJCN8cR0cTkY1VwN3NFdhRxiA9ndkE532e+CEkWAE/JA6zGjWaDbcbXZopMf9aMjbMLHrtt9574ezRxxk6fPfu8kWOqMtAVSadaE35vpza9aksYjt8T8yuP7UzW9QxyCp1IpAuYErzQbnTT8EFTHuWwJz+CmNlW9d/7k0/XstPXz7Td8L+e47ljNF7DNvsH3tk+kxBsNX6KSh3o+qMSul9ZsmRd+emYZbBM0JiH1UFKcqhSnmSnggDoW/C0rK69wEudinsBLWJB4mIGJP9Jfzbtx1PGkQCv4FjxQSRLGMj6VhhnY9LI3XGfwaekRoBMWf4vLr4eT8sjBn7L9FeJr3ccVSu0bfEpxVNVDwU6niaJ1eOZySofi1QqgWPz+UHmg4pC35DiYmHKbBkpH5jQv+Z7JDrvTl7o9iz8vaT34kn2Nwoloq9aA/DqTzTF+L4cZ/fzTkKSXONm3tNL9j/4KQPH1k6oZDe68kTjg9nrBH/lhwEsH0r2aLKEl/XQDBOdDC0kdMr0wlcDvL4t8OUrNkIPbL3ajIlRPhpRKuivfvbe/P6YDs/dMS/u73EDeq2aTH8YTT6dR4xOtVFsj6Xxprpg9pRQLtPpaP7gI1ljx98ISrVnTClPssN8SdHKaBOFA/qBDOOk5AFfpGW3O9rDiXkeVxfonrvB4S+kHyDzOB2XRk75cywPbLgMcTbd+nGRDV1XrvBPC2qWQbRReLqkuYeKvIRCIQgnywe3CW8qdPYwU+2Jn/94pZFuKDxGtiqbfvgjg/2je0iysiqoIOPI5Ryhs8PUHLonvsRKGqMU9mrc5nqM4ET9uYvytPVohJr66JYrDQMivq/5ce3AeIhYxut9G7k3IPuTzEzaE8FN4wGvoMknlEg/xORGiSBj4+KuGKEzAZGSx6PkS3SqBhvh7OOn6RiJmnFx1IYXVO1AHMZKv25YdOSFd4niiZQTEF2aRBx3geSgl61ijVICMiGjG3zFiz4Qy9ZAki8kC2GchJSIiZ7H1FkdkHSn1rNeKltsuVRW9qQ+RlVfUu9cj+mQAShVdQjToHh8kExCbozCLwo4pxGVGWfaF/E1AwoqLgDp9h2ojcSo4yU/iXZvxf5U9n7k+LAVWVqt641Wn1g6Ee7ZgB2PSfAg/M17WCFf9AjdeBICTFSY6j6y1ZCvGdrfrxLA3SEj9v6bZJ6sq2CPaUiAs9xJ+G/+VnAfCfRfKHwuZ6I1fFU6CxC9aQpvXvHHB6nYIL7cfoH0mEHYgEg/fsy7AfBHDuwe1Xp85uV2koHeS3dif6bUV1VJBnLsSKMm1C9N8WfZVTaxXZPMw146uQQCGp/Ny80TY0harH9XW3S62kzkmsPwJW3PjyI6nhdMiZmpK7Dr496Lvu4P2zJRW/+c2j6+94+QL1yfjL4TnuzO2euxK2eMqDlRNvdnb+q1mOX9dzrmiHpF6jjJYi4RKFONe9I15qU+THEum451aNuaD78vR+MhLYOhA5TxA0ubOCLsb73if5ICubB2dLSC9vgQCjaTAZ4KhiftwZaRJgz6IoNaEFUlHqW6ItOiQDTf3d6ngDqglXzC8ylH2pgE=","base64")).toString()),jj)});var YIe=_((yJt,GIe)=>{var Xj=Symbol("arg flag"),Oa=class extends Error{constructor(e,r){super(e),this.name="ArgError",this.code=r,Object.setPrototypeOf(this,Oa.prototype)}};function iv(t,{argv:e=process.argv.slice(2),permissive:r=!1,stopAtPositional:o=!1}={}){if(!t)throw new Oa("argument specification object is required","ARG_CONFIG_NO_SPEC");let a={_:[]},n={},u={};for(let A of Object.keys(t)){if(!A)throw new Oa("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(A[0]!=="-")throw new Oa(`argument key must start with '-' but found: '${A}'`,"ARG_CONFIG_NONOPT_KEY");if(A.length===1)throw new Oa(`argument key must have a name; singular '-' keys are not allowed: ${A}`,"ARG_CONFIG_NONAME_KEY");if(typeof t[A]=="string"){n[A]=t[A];continue}let p=t[A],h=!1;if(Array.isArray(p)&&p.length===1&&typeof p[0]=="function"){let[C]=p;p=(I,v,b=[])=>(b.push(C(I,v,b[b.length-1])),b),h=C===Boolean||C[Xj]===!0}else if(typeof p=="function")h=p===Boolean||p[Xj]===!0;else throw new Oa(`type missing or not a function or valid array type: ${A}`,"ARG_CONFIG_VAD_TYPE");if(A[1]!=="-"&&A.length>2)throw new Oa(`short argument keys (with a single hyphen) must have only one character: ${A}`,"ARG_CONFIG_SHORTOPT_TOOLONG");u[A]=[p,h]}for(let A=0,p=e.length;A0){a._=a._.concat(e.slice(A));break}if(h==="--"){a._=a._.concat(e.slice(A+1));break}if(h.length>1&&h[0]==="-"){let C=h[1]==="-"||h.length===2?[h]:h.slice(1).split("").map(I=>`-${I}`);for(let I=0;I1&&e[A+1][0]==="-"&&!(e[A+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(N===Number||typeof BigInt<"u"&&N===BigInt))){let z=b===F?"":` (alias for ${F})`;throw new Oa(`option requires argument: ${b}${z}`,"ARG_MISSING_REQUIRED_LONGARG")}a[F]=N(e[A+1],F,a[F]),++A}else a[F]=N(E,F,a[F])}}else a._.push(h)}return a}iv.flag=t=>(t[Xj]=!0,t);iv.COUNT=iv.flag((t,e,r)=>(r||0)+1);iv.ArgError=Oa;GIe.exports=iv});var $Ie=_((GJt,ZIe)=>{var rq;ZIe.exports=()=>(typeof rq>"u"&&(rq=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),rq)});var i1e=_((lq,cq)=>{(function(t){lq&&typeof lq=="object"&&typeof cq<"u"?cq.exports=t():typeof define=="function"&&define.amd?define([],t):typeof window<"u"?window.isWindows=t():typeof global<"u"?global.isWindows=t():typeof self<"u"?self.isWindows=t():this.isWindows=t()})(function(){"use strict";return function(){return process&&(process.platform==="win32"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var l1e=_((jXt,a1e)=>{"use strict";uq.ifExists=ZIt;var GC=Be("util"),sc=Be("path"),s1e=i1e(),zIt=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,JIt={createPwshFile:!0,createCmdFile:s1e(),fs:Be("fs")},XIt=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function o1e(t){let e={...JIt,...t},r=e.fs;return e.fs_={chmod:r.chmod?GC.promisify(r.chmod):async()=>{},mkdir:GC.promisify(r.mkdir),readFile:GC.promisify(r.readFile),stat:GC.promisify(r.stat),unlink:GC.promisify(r.unlink),writeFile:GC.promisify(r.writeFile)},e}async function uq(t,e,r){let o=o1e(r);await o.fs_.stat(t),await e1t(t,e,o)}function ZIt(t,e,r){return uq(t,e,r).catch(()=>{})}function $It(t,e){return e.fs_.unlink(t).catch(()=>{})}async function e1t(t,e,r){let o=await s1t(t,r);return await t1t(e,r),r1t(t,e,o,r)}function t1t(t,e){return e.fs_.mkdir(sc.dirname(t),{recursive:!0})}function r1t(t,e,r,o){let a=o1e(o),n=[{generator:l1t,extension:""}];return a.createCmdFile&&n.push({generator:a1t,extension:".cmd"}),a.createPwshFile&&n.push({generator:c1t,extension:".ps1"}),Promise.all(n.map(u=>o1t(t,e+u.extension,r,u.generator,a)))}function n1t(t,e){return $It(t,e)}function i1t(t,e){return u1t(t,e)}async function s1t(t,e){let a=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(zIt);if(!a){let n=sc.extname(t).toLowerCase();return{program:XIt.get(n)||null,additionalArgs:""}}return{program:a[1],additionalArgs:a[2]}}async function o1t(t,e,r,o,a){let n=a.preserveSymlinks?"--preserve-symlinks":"",u=[r.additionalArgs,n].filter(A=>A).join(" ");return a=Object.assign({},a,{prog:r.program,args:u}),await n1t(e,a),await a.fs_.writeFile(e,o(t,e,a),"utf8"),i1t(e,a)}function a1t(t,e,r){let a=sc.relative(sc.dirname(e),t).split("/").join("\\"),n=sc.isAbsolute(a)?`"${a}"`:`"%~dp0\\${a}"`,u,A=r.prog,p=r.args||"",h=Aq(r.nodePath).win32;A?(u=`"%~dp0\\${A}.exe"`,a=n):(A=n,p="",a="");let C=r.progArgs?`${r.progArgs.join(" ")} `:"",I=h?`@SET NODE_PATH=${h}\r -`:"";return u?I+=`@IF EXIST ${u} (\r - ${u} ${p} ${a} ${C}%*\r -) ELSE (\r - @SETLOCAL\r - @SET PATHEXT=%PATHEXT:;.JS;=;%\r - ${A} ${p} ${a} ${C}%*\r -)\r -`:I+=`@${A} ${p} ${a} ${C}%*\r -`,I}function l1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n;o=o.split("\\").join("/");let u=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,A=r.args||"",p=Aq(r.nodePath).posix;a?(n=`"$basedir/${r.prog}"`,o=u):(a=u,A="",o="");let h=r.progArgs?`${r.progArgs.join(" ")} `:"",C=`#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')") - -case \`uname\` in - *CYGWIN*) basedir=\`cygpath -w "$basedir"\`;; -esac - -`,I=r.nodePath?`export NODE_PATH="${p}" -`:"";return n?C+=`${I}if [ -x ${n} ]; then - exec ${n} ${A} ${o} ${h}"$@" -else - exec ${a} ${A} ${o} ${h}"$@" -fi -`:C+=`${I}${a} ${A} ${o} ${h}"$@" -exit $? -`,C}function c1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n=a&&`"${a}$exe"`,u;o=o.split("\\").join("/");let A=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,p=r.args||"",h=Aq(r.nodePath),C=h.win32,I=h.posix;n?(u=`"$basedir/${r.prog}$exe"`,o=A):(n=A,p="",o="");let v=r.progArgs?`${r.progArgs.join(" ")} `:"",b=`#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -${r.nodePath?`$env_node_path=$env:NODE_PATH -$env:NODE_PATH="${C}" -`:""}if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -}`;return r.nodePath&&(b+=` else { - $env:NODE_PATH="${I}" -}`),u?b+=` -$ret=0 -if (Test-Path ${u}) { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & ${u} ${p} ${o} ${v}$args - } else { - & ${u} ${p} ${o} ${v}$args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & ${n} ${p} ${o} ${v}$args - } else { - & ${n} ${p} ${o} ${v}$args - } - $ret=$LASTEXITCODE -} -${r.nodePath?`$env:NODE_PATH=$env_node_path -`:""}exit $ret -`:b+=` -# Support pipeline input -if ($MyInvocation.ExpectingInput) { - $input | & ${n} ${p} ${o} ${v}$args -} else { - & ${n} ${p} ${o} ${v}$args -} -${r.nodePath?`$env:NODE_PATH=$env_node_path -`:""}exit $LASTEXITCODE -`,b}function u1t(t,e){return e.fs_.chmod(t,493)}function Aq(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(sc.delimiter):Array.from(t),r={};for(let o=0;o`/mnt/${A.toLowerCase()}`):e[o];r.win32=r.win32?`${r.win32};${a}`:a,r.posix=r.posix?`${r.posix}:${n}`:n,r[o]={win32:a,posix:n}}return r}a1e.exports=uq});var Pq=_((u$t,k1e)=>{k1e.exports=Be("stream")});var T1e=_((A$t,R1e)=>{"use strict";function Q1e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function T1t(t){for(var e=1;e0?this.tail.next=o:this.head=o,this.tail=o,++this.length}},{key:"unshift",value:function(r){var o={data:r,next:this.head};this.length===0&&(this.tail=o),this.head=o,++this.length}},{key:"shift",value:function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(r){if(this.length===0)return"";for(var o=this.head,a=""+o.data;o=o.next;)a+=r+o.data;return a}},{key:"concat",value:function(r){if(this.length===0)return bQ.alloc(0);for(var o=bQ.allocUnsafe(r>>>0),a=this.head,n=0;a;)H1t(a.data,o,n),n+=a.data.length,a=a.next;return o}},{key:"consume",value:function(r,o){var a;return ru.length?u.length:r;if(A===u.length?n+=u:n+=u.slice(0,r),r-=A,r===0){A===u.length?(++a,o.next?this.head=o.next:this.head=this.tail=null):(this.head=o,o.data=u.slice(A));break}++a}return this.length-=a,n}},{key:"_getBuffer",value:function(r){var o=bQ.allocUnsafe(r),a=this.head,n=1;for(a.data.copy(o),r-=a.data.length;a=a.next;){var u=a.data,A=r>u.length?u.length:r;if(u.copy(o,o.length-r,0,A),r-=A,r===0){A===u.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=u.slice(A));break}++n}return this.length-=n,o}},{key:_1t,value:function(r,o){return Sq(this,T1t({},o,{depth:0,customInspect:!1}))}}]),t}()});var bq=_((f$t,N1e)=>{"use strict";function j1t(t,e){var r=this,o=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return o||a?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(xq,this,t)):process.nextTick(xq,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(n){!e&&n?r._writableState?r._writableState.errorEmitted?process.nextTick(kQ,r):(r._writableState.errorEmitted=!0,process.nextTick(L1e,r,n)):process.nextTick(L1e,r,n):e?(process.nextTick(kQ,r),e(n)):process.nextTick(kQ,r)}),this)}function L1e(t,e){xq(t,e),kQ(t)}function kQ(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function q1t(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function xq(t,e){t.emit("error",e)}function G1t(t,e){var r=t._readableState,o=t._writableState;r&&r.autoDestroy||o&&o.autoDestroy?t.destroy(e):t.emit("error",e)}N1e.exports={destroy:j1t,undestroy:q1t,errorOrDestroy:G1t}});var b0=_((p$t,U1e)=>{"use strict";var M1e={};function ac(t,e,r){r||(r=Error);function o(n,u,A){return typeof e=="string"?e:e(n,u,A)}class a extends r{constructor(u,A,p){super(o(u,A,p))}}a.prototype.name=r.name,a.prototype.code=t,M1e[t]=a}function O1e(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(o=>String(o)),r>2?`one of ${e} ${t.slice(0,r-1).join(", ")}, or `+t[r-1]:r===2?`one of ${e} ${t[0]} or ${t[1]}`:`of ${e} ${t[0]}`}else return`of ${e} ${String(t)}`}function Y1t(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function W1t(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function K1t(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}ac("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);ac("ERR_INVALID_ARG_TYPE",function(t,e,r){let o;typeof e=="string"&&Y1t(e,"not ")?(o="must not be",e=e.replace(/^not /,"")):o="must be";let a;if(W1t(t," argument"))a=`The ${t} ${o} ${O1e(e,"type")}`;else{let n=K1t(t,".")?"property":"argument";a=`The "${t}" ${n} ${o} ${O1e(e,"type")}`}return a+=`. Received type ${typeof r}`,a},TypeError);ac("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");ac("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});ac("ERR_STREAM_PREMATURE_CLOSE","Premature close");ac("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});ac("ERR_MULTIPLE_CALLBACK","Callback called multiple times");ac("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");ac("ERR_STREAM_WRITE_AFTER_END","write after end");ac("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);ac("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);ac("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");U1e.exports.codes=M1e});var kq=_((h$t,_1e)=>{"use strict";var V1t=b0().codes.ERR_INVALID_OPT_VALUE;function z1t(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function J1t(t,e,r,o){var a=z1t(e,o,r);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var n=o?r:"highWaterMark";throw new V1t(n,a)}return Math.floor(a)}return t.objectMode?16:16*1024}_1e.exports={getHighWaterMark:J1t}});var H1e=_((g$t,Qq)=>{typeof Object.create=="function"?Qq.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:Qq.exports=function(e,r){if(r){e.super_=r;var o=function(){};o.prototype=r.prototype,e.prototype=new o,e.prototype.constructor=e}}});var k0=_((d$t,Rq)=>{try{if(Fq=Be("util"),typeof Fq.inherits!="function")throw"";Rq.exports=Fq.inherits}catch{Rq.exports=H1e()}var Fq});var q1e=_((m$t,j1e)=>{j1e.exports=Be("util").deprecate});var Nq=_((y$t,z1e)=>{"use strict";z1e.exports=Ri;function Y1e(t){var e=this;this.next=null,this.entry=null,this.finish=function(){B2t(e,t)}}var zC;Ri.WritableState=mv;var X1t={deprecate:q1e()},W1e=Pq(),FQ=Be("buffer").Buffer,Z1t=global.Uint8Array||function(){};function $1t(t){return FQ.from(t)}function e2t(t){return FQ.isBuffer(t)||t instanceof Z1t}var Lq=bq(),t2t=kq(),r2t=t2t.getHighWaterMark,Q0=b0().codes,n2t=Q0.ERR_INVALID_ARG_TYPE,i2t=Q0.ERR_METHOD_NOT_IMPLEMENTED,s2t=Q0.ERR_MULTIPLE_CALLBACK,o2t=Q0.ERR_STREAM_CANNOT_PIPE,a2t=Q0.ERR_STREAM_DESTROYED,l2t=Q0.ERR_STREAM_NULL_VALUES,c2t=Q0.ERR_STREAM_WRITE_AFTER_END,u2t=Q0.ERR_UNKNOWN_ENCODING,JC=Lq.errorOrDestroy;k0()(Ri,W1e);function A2t(){}function mv(t,e,r){zC=zC||Em(),t=t||{},typeof r!="boolean"&&(r=e instanceof zC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=r2t(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var o=t.decodeStrings===!1;this.decodeStrings=!o,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){y2t(e,a)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new Y1e(this)}mv.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(mv.prototype,"buffer",{get:X1t.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var QQ;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(QQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Ri,Symbol.hasInstance,{value:function(e){return QQ.call(this,e)?!0:this!==Ri?!1:e&&e._writableState instanceof mv}})):QQ=function(e){return e instanceof this};function Ri(t){zC=zC||Em();var e=this instanceof zC;if(!e&&!QQ.call(Ri,this))return new Ri(t);this._writableState=new mv(t,this,e),this.writable=!0,t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.final=="function"&&(this._final=t.final)),W1e.call(this)}Ri.prototype.pipe=function(){JC(this,new o2t)};function f2t(t,e){var r=new c2t;JC(t,r),process.nextTick(e,r)}function p2t(t,e,r,o){var a;return r===null?a=new l2t:typeof r!="string"&&!e.objectMode&&(a=new n2t("chunk",["string","Buffer"],r)),a?(JC(t,a),process.nextTick(o,a),!1):!0}Ri.prototype.write=function(t,e,r){var o=this._writableState,a=!1,n=!o.objectMode&&e2t(t);return n&&!FQ.isBuffer(t)&&(t=$1t(t)),typeof e=="function"&&(r=e,e=null),n?e="buffer":e||(e=o.defaultEncoding),typeof r!="function"&&(r=A2t),o.ending?f2t(this,r):(n||p2t(this,o,t,r))&&(o.pendingcb++,a=g2t(this,o,n,t,e,r)),a};Ri.prototype.cork=function(){this._writableState.corked++};Ri.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&K1e(this,t))};Ri.prototype.setDefaultEncoding=function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new u2t(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Ri.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function h2t(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=FQ.from(e,r)),e}Object.defineProperty(Ri.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function g2t(t,e,r,o,a,n){if(!r){var u=h2t(e,o,a);o!==u&&(r=!0,a="buffer",o=u)}var A=e.objectMode?1:o.length;e.length+=A;var p=e.length{"use strict";var v2t=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};X1e.exports=yA;var J1e=Uq(),Mq=Nq();k0()(yA,J1e);for(Oq=v2t(Mq.prototype),RQ=0;RQ{var LQ=Be("buffer"),rp=LQ.Buffer;function Z1e(t,e){for(var r in t)e[r]=t[r]}rp.from&&rp.alloc&&rp.allocUnsafe&&rp.allocUnsafeSlow?$1e.exports=LQ:(Z1e(LQ,_q),_q.Buffer=XC);function XC(t,e,r){return rp(t,e,r)}Z1e(rp,XC);XC.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return rp(t,e,r)};XC.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var o=rp(t);return e!==void 0?typeof r=="string"?o.fill(e,r):o.fill(e):o.fill(0),o};XC.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return rp(t)};XC.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return LQ.SlowBuffer(t)}});var qq=_(r2e=>{"use strict";var jq=e2e().Buffer,t2e=jq.isEncoding||function(t){switch(t=""+t,t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function S2t(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}function x2t(t){var e=S2t(t);if(typeof e!="string"&&(jq.isEncoding===t2e||!t2e(t)))throw new Error("Unknown encoding: "+t);return e||t}r2e.StringDecoder=yv;function yv(t){this.encoding=x2t(t);var e;switch(this.encoding){case"utf16le":this.text=T2t,this.end=L2t,e=4;break;case"utf8":this.fillLast=Q2t,e=4;break;case"base64":this.text=N2t,this.end=O2t,e=3;break;default:this.write=M2t,this.end=U2t;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=jq.allocUnsafe(e)}yv.prototype.write=function(t){if(t.length===0)return"";var e,r;if(this.lastNeed){if(e=this.fillLast(t),e===void 0)return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r>5===6?2:t>>4===14?3:t>>3===30?4:t>>6===2?-1:-2}function b2t(t,e,r){var o=e.length-1;if(o=0?(a>0&&(t.lastNeed=a-1),a):--o=0?(a>0&&(t.lastNeed=a-2),a):--o=0?(a>0&&(a===2?a=0:t.lastNeed=a-3),a):0))}function k2t(t,e,r){if((e[0]&192)!==128)return t.lastNeed=0,"\uFFFD";if(t.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return t.lastNeed=1,"\uFFFD";if(t.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return t.lastNeed=2,"\uFFFD"}}function Q2t(t){var e=this.lastTotal-this.lastNeed,r=k2t(this,t,e);if(r!==void 0)return r;if(this.lastNeed<=t.length)return t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length}function F2t(t,e){var r=b2t(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var o=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,o),t.toString("utf8",e,o)}function R2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function T2t(t,e){if((t.length-e)%2===0){var r=t.toString("utf16le",e);if(r){var o=r.charCodeAt(r.length-1);if(o>=55296&&o<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function L2t(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function N2t(t,e){var r=(t.length-e)%3;return r===0?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function O2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function M2t(t){return t.toString(this.encoding)}function U2t(t){return t&&t.length?this.write(t):""}});var NQ=_((w$t,s2e)=>{"use strict";var n2e=b0().codes.ERR_STREAM_PREMATURE_CLOSE;function _2t(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,o=new Array(r),a=0;a{"use strict";var OQ;function F0(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var q2t=NQ(),R0=Symbol("lastResolve"),Cm=Symbol("lastReject"),Ev=Symbol("error"),MQ=Symbol("ended"),wm=Symbol("lastPromise"),Gq=Symbol("handlePromise"),Im=Symbol("stream");function T0(t,e){return{value:t,done:e}}function G2t(t){var e=t[R0];if(e!==null){var r=t[Im].read();r!==null&&(t[wm]=null,t[R0]=null,t[Cm]=null,e(T0(r,!1)))}}function Y2t(t){process.nextTick(G2t,t)}function W2t(t,e){return function(r,o){t.then(function(){if(e[MQ]){r(T0(void 0,!0));return}e[Gq](r,o)},o)}}var K2t=Object.getPrototypeOf(function(){}),V2t=Object.setPrototypeOf((OQ={get stream(){return this[Im]},next:function(){var e=this,r=this[Ev];if(r!==null)return Promise.reject(r);if(this[MQ])return Promise.resolve(T0(void 0,!0));if(this[Im].destroyed)return new Promise(function(u,A){process.nextTick(function(){e[Ev]?A(e[Ev]):u(T0(void 0,!0))})});var o=this[wm],a;if(o)a=new Promise(W2t(o,this));else{var n=this[Im].read();if(n!==null)return Promise.resolve(T0(n,!1));a=new Promise(this[Gq])}return this[wm]=a,a}},F0(OQ,Symbol.asyncIterator,function(){return this}),F0(OQ,"return",function(){var e=this;return new Promise(function(r,o){e[Im].destroy(null,function(a){if(a){o(a);return}r(T0(void 0,!0))})})}),OQ),K2t),z2t=function(e){var r,o=Object.create(V2t,(r={},F0(r,Im,{value:e,writable:!0}),F0(r,R0,{value:null,writable:!0}),F0(r,Cm,{value:null,writable:!0}),F0(r,Ev,{value:null,writable:!0}),F0(r,MQ,{value:e._readableState.endEmitted,writable:!0}),F0(r,Gq,{value:function(n,u){var A=o[Im].read();A?(o[wm]=null,o[R0]=null,o[Cm]=null,n(T0(A,!1))):(o[R0]=n,o[Cm]=u)},writable:!0}),r));return o[wm]=null,q2t(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var n=o[Cm];n!==null&&(o[wm]=null,o[R0]=null,o[Cm]=null,n(a)),o[Ev]=a;return}var u=o[R0];u!==null&&(o[wm]=null,o[R0]=null,o[Cm]=null,u(T0(void 0,!0))),o[MQ]=!0}),e.on("readable",Y2t.bind(null,o)),o};o2e.exports=z2t});var A2e=_((B$t,u2e)=>{"use strict";function l2e(t,e,r,o,a,n,u){try{var A=t[n](u),p=A.value}catch(h){r(h);return}A.done?e(p):Promise.resolve(p).then(o,a)}function J2t(t){return function(){var e=this,r=arguments;return new Promise(function(o,a){var n=t.apply(e,r);function u(p){l2e(n,o,a,u,A,"next",p)}function A(p){l2e(n,o,a,u,A,"throw",p)}u(void 0)})}}function c2e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function X2t(t){for(var e=1;e{"use strict";w2e.exports=mn;var ZC;mn.ReadableState=g2e;var v$t=Be("events").EventEmitter,h2e=function(e,r){return e.listeners(r).length},wv=Pq(),UQ=Be("buffer").Buffer,tBt=global.Uint8Array||function(){};function rBt(t){return UQ.from(t)}function nBt(t){return UQ.isBuffer(t)||t instanceof tBt}var Yq=Be("util"),$r;Yq&&Yq.debuglog?$r=Yq.debuglog("stream"):$r=function(){};var iBt=T1e(),Zq=bq(),sBt=kq(),oBt=sBt.getHighWaterMark,_Q=b0().codes,aBt=_Q.ERR_INVALID_ARG_TYPE,lBt=_Q.ERR_STREAM_PUSH_AFTER_EOF,cBt=_Q.ERR_METHOD_NOT_IMPLEMENTED,uBt=_Q.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,$C,Wq,Kq;k0()(mn,wv);var Cv=Zq.errorOrDestroy,Vq=["error","close","destroy","pause","resume"];function ABt(t,e,r){if(typeof t.prependListener=="function")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]}function g2e(t,e,r){ZC=ZC||Em(),t=t||{},typeof r!="boolean"&&(r=e instanceof ZC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=oBt(this,t,"readableHighWaterMark",r),this.buffer=new iBt,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&($C||($C=qq().StringDecoder),this.decoder=new $C(t.encoding),this.encoding=t.encoding)}function mn(t){if(ZC=ZC||Em(),!(this instanceof mn))return new mn(t);var e=this instanceof ZC;this._readableState=new g2e(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),wv.call(this)}Object.defineProperty(mn.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});mn.prototype.destroy=Zq.destroy;mn.prototype._undestroy=Zq.undestroy;mn.prototype._destroy=function(t,e){e(t)};mn.prototype.push=function(t,e){var r=this._readableState,o;return r.objectMode?o=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=UQ.from(t,e),e=""),o=!0),d2e(this,t,e,!1,o)};mn.prototype.unshift=function(t){return d2e(this,t,null,!0,!1)};function d2e(t,e,r,o,a){$r("readableAddChunk",e);var n=t._readableState;if(e===null)n.reading=!1,hBt(t,n);else{var u;if(a||(u=fBt(n,e)),u)Cv(t,u);else if(n.objectMode||e&&e.length>0)if(typeof e!="string"&&!n.objectMode&&Object.getPrototypeOf(e)!==UQ.prototype&&(e=rBt(e)),o)n.endEmitted?Cv(t,new uBt):zq(t,n,e,!0);else if(n.ended)Cv(t,new lBt);else{if(n.destroyed)return!1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?zq(t,n,e,!1):Xq(t,n)):zq(t,n,e,!1)}else o||(n.reading=!1,Xq(t,n))}return!n.ended&&(n.length=f2e?t=f2e:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function p2e(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=pBt(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}mn.prototype.read=function(t){$r("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return $r("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?Jq(this):HQ(this),null;if(t=p2e(t,e),t===0&&e.ended)return e.length===0&&Jq(this),null;var o=e.needReadable;$r("need readable",o),(e.length===0||e.length-t0?a=E2e(t,e):a=null,a===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&Jq(this)),a!==null&&this.emit("data",a),a};function hBt(t,e){if($r("onEofChunk"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?HQ(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,m2e(t)))}}function HQ(t){var e=t._readableState;$r("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||($r("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(m2e,t))}function m2e(t){var e=t._readableState;$r("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,$q(t)}function Xq(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(gBt,t,e))}function gBt(t,e){for(;!e.reading&&!e.ended&&(e.length1&&C2e(o.pipes,t)!==-1)&&!h&&($r("false write response, pause",o.awaitDrain),o.awaitDrain++),r.pause())}function v(N){$r("onerror",N),F(),t.removeListener("error",v),h2e(t,"error")===0&&Cv(t,N)}ABt(t,"error",v);function b(){t.removeListener("finish",E),F()}t.once("close",b);function E(){$r("onfinish"),t.removeListener("close",b),F()}t.once("finish",E);function F(){$r("unpipe"),r.unpipe(t)}return t.emit("pipe",r),o.flowing||($r("pipe resume"),r.resume()),t};function dBt(t){return function(){var r=t._readableState;$r("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&h2e(t,"data")&&(r.flowing=!0,$q(t))}}mn.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var o=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var n=0;n0,o.flowing!==!1&&this.resume()):t==="readable"&&!o.endEmitted&&!o.readableListening&&(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,$r("on readable",o.length,o.reading),o.length?HQ(this):o.reading||process.nextTick(mBt,this)),r};mn.prototype.addListener=mn.prototype.on;mn.prototype.removeListener=function(t,e){var r=wv.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(y2e,this),r};mn.prototype.removeAllListeners=function(t){var e=wv.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(y2e,this),e};function y2e(t){var e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function mBt(t){$r("readable nexttick read 0"),t.read(0)}mn.prototype.resume=function(){var t=this._readableState;return t.flowing||($r("resume"),t.flowing=!t.readableListening,yBt(this,t)),t.paused=!1,this};function yBt(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(EBt,t,e))}function EBt(t,e){$r("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),$q(t),e.flowing&&!e.reading&&t.read(0)}mn.prototype.pause=function(){return $r("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&($r("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function $q(t){var e=t._readableState;for($r("flow",e.flowing);e.flowing&&t.read()!==null;);}mn.prototype.wrap=function(t){var e=this,r=this._readableState,o=!1;t.on("end",function(){if($r("wrapped end"),r.decoder&&!r.ended){var u=r.decoder.end();u&&u.length&&e.push(u)}e.push(null)}),t.on("data",function(u){if($r("wrapped data"),r.decoder&&(u=r.decoder.write(u)),!(r.objectMode&&u==null)&&!(!r.objectMode&&(!u||!u.length))){var A=e.push(u);A||(o=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(A){return function(){return t[A].apply(t,arguments)}}(a));for(var n=0;n=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function Jq(t){var e=t._readableState;$r("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(CBt,e,t))}function CBt(t,e){if($r("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&t.length===0&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}typeof Symbol=="function"&&(mn.from=function(t,e){return Kq===void 0&&(Kq=A2e()),Kq(mn,t,e)});function C2e(t,e){for(var r=0,o=t.length;r{"use strict";B2e.exports=np;var jQ=b0().codes,wBt=jQ.ERR_METHOD_NOT_IMPLEMENTED,IBt=jQ.ERR_MULTIPLE_CALLBACK,BBt=jQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,vBt=jQ.ERR_TRANSFORM_WITH_LENGTH_0,qQ=Em();k0()(np,qQ);function DBt(t,e){var r=this._transformState;r.transforming=!1;var o=r.writecb;if(o===null)return this.emit("error",new IBt);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),o(t);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";D2e.exports=Iv;var v2e=eG();k0()(Iv,v2e);function Iv(t){if(!(this instanceof Iv))return new Iv(t);v2e.call(this,t)}Iv.prototype._transform=function(t,e,r){r(null,t)}});var Q2e=_((x$t,k2e)=>{"use strict";var tG;function SBt(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var b2e=b0().codes,xBt=b2e.ERR_MISSING_ARGS,bBt=b2e.ERR_STREAM_DESTROYED;function S2e(t){if(t)throw t}function kBt(t){return t.setHeader&&typeof t.abort=="function"}function QBt(t,e,r,o){o=SBt(o);var a=!1;t.on("close",function(){a=!0}),tG===void 0&&(tG=NQ()),tG(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,kBt(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();o(u||new bBt("pipe"))}}}function x2e(t){t()}function FBt(t,e){return t.pipe(e)}function RBt(t){return!t.length||typeof t[t.length-1]!="function"?S2e:t.pop()}function TBt(){for(var t=arguments.length,e=new Array(t),r=0;r0;return QBt(u,p,h,function(C){a||(a=C),C&&n.forEach(x2e),!p&&(n.forEach(x2e),o(a))})});return e.reduce(FBt)}k2e.exports=TBt});var ew=_((lc,vv)=>{var Bv=Be("stream");process.env.READABLE_STREAM==="disable"&&Bv?(vv.exports=Bv.Readable,Object.assign(vv.exports,Bv),vv.exports.Stream=Bv):(lc=vv.exports=Uq(),lc.Stream=Bv||lc,lc.Readable=lc,lc.Writable=Nq(),lc.Duplex=Em(),lc.Transform=eG(),lc.PassThrough=P2e(),lc.finished=NQ(),lc.pipeline=Q2e())});var T2e=_((b$t,R2e)=>{"use strict";var{Buffer:lu}=Be("buffer"),F2e=Symbol.for("BufferList");function ni(t){if(!(this instanceof ni))return new ni(t);ni._init.call(this,t)}ni._init=function(e){Object.defineProperty(this,F2e,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};ni.prototype._new=function(e){return new ni(e)};ni.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let o=0;othis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ni.prototype.slice=function(e,r){return typeof e=="number"&&e<0&&(e+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};ni.prototype.copy=function(e,r,o,a){if((typeof o!="number"||o<0)&&(o=0),(typeof a!="number"||a>this.length)&&(a=this.length),o>=this.length||a<=0)return e||lu.alloc(0);let n=!!e,u=this._offset(o),A=a-o,p=A,h=n&&r||0,C=u[1];if(o===0&&a===this.length){if(!n)return this._bufs.length===1?this._bufs[0]:lu.concat(this._bufs,this.length);for(let I=0;Iv)this._bufs[I].copy(e,h,C),h+=v;else{this._bufs[I].copy(e,h,C,C+p),h+=v;break}p-=v,C&&(C=0)}return e.length>h?e.slice(0,h):e};ni.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let o=this._offset(e),a=this._offset(r),n=this._bufs.slice(o[0],a[0]+1);return a[1]===0?n.pop():n[n.length-1]=n[n.length-1].slice(0,a[1]),o[1]!==0&&(n[0]=n[0].slice(o[1])),this._new(n)};ni.prototype.toString=function(e,r,o){return this.slice(r,o).toString(e)};ni.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};ni.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let o=this._offset(e),a=o[0],n=o[1];for(;a=t.length){let p=u.indexOf(t,n);if(p!==-1)return this._reverseOffset([a,p]);n=u.length-t.length+1}else{let p=this._reverseOffset([a,n]);if(this._match(p,t))return p;n++}n=0}return-1};ni.prototype._match=function(t,e){if(this.length-t{"use strict";var rG=ew().Duplex,LBt=k0(),Dv=T2e();function Uo(t){if(!(this instanceof Uo))return new Uo(t);if(typeof t=="function"){this._callback=t;let e=function(o){this._callback&&(this._callback(o),this._callback=null)}.bind(this);this.on("pipe",function(o){o.on("error",e)}),this.on("unpipe",function(o){o.removeListener("error",e)}),t=null}Dv._init.call(this,t),rG.call(this)}LBt(Uo,rG);Object.assign(Uo.prototype,Dv.prototype);Uo.prototype._new=function(e){return new Uo(e)};Uo.prototype._write=function(e,r,o){this._appendBuffer(e),typeof o=="function"&&o()};Uo.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Uo.prototype.end=function(e){rG.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Uo.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};Uo.prototype._isBufferList=function(e){return e instanceof Uo||e instanceof Dv||Uo.isBufferList(e)};Uo.isBufferList=Dv.isBufferList;GQ.exports=Uo;GQ.exports.BufferListStream=Uo;GQ.exports.BufferList=Dv});var sG=_(rw=>{var NBt=Buffer.alloc,OBt="0000000000000000000",MBt="7777777777777777777",N2e="0".charCodeAt(0),O2e=Buffer.from("ustar\0","binary"),UBt=Buffer.from("00","binary"),_Bt=Buffer.from("ustar ","binary"),HBt=Buffer.from(" \0","binary"),jBt=parseInt("7777",8),Pv=257,iG=263,qBt=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},GBt=function(t){switch(t){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null},YBt=function(t){switch(t){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0},M2e=function(t,e,r,o){for(;re?MBt.slice(0,e)+" ":OBt.slice(0,e-t.length)+t+" "};function WBt(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],o=t.length-1;o>0;o--){var a=t[o];e?r.push(a):r.push(255-a)}var n=0,u=r.length;for(o=0;o=Math.pow(10,r)&&r++,e+r+t};rw.decodeLongPath=function(t,e){return tw(t,0,t.length,e)};rw.encodePax=function(t){var e="";t.name&&(e+=nG(" path="+t.name+` -`)),t.linkname&&(e+=nG(" linkpath="+t.linkname+` -`));var r=t.pax;if(r)for(var o in r)e+=nG(" "+o+"="+r[o]+` -`);return Buffer.from(e)};rw.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var a=r.indexOf("/");if(a===-1)return null;o+=o?"/"+r.slice(0,a):r.slice(0,a),r=r.slice(a+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(o)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(L0(t.mode&jBt,6),100),e.write(L0(t.uid,6),108),e.write(L0(t.gid,6),116),e.write(L0(t.size,11),124),e.write(L0(t.mtime.getTime()/1e3|0,11),136),e[156]=N2e+YBt(t.type),t.linkname&&e.write(t.linkname,157),O2e.copy(e,Pv),UBt.copy(e,iG),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(L0(t.devmajor||0,6),329),e.write(L0(t.devminor||0,6),337),o&&e.write(o,345),e.write(L0(U2e(e),6),148),e)};rw.decode=function(t,e,r){var o=t[156]===0?0:t[156]-N2e,a=tw(t,0,100,e),n=N0(t,100,8),u=N0(t,108,8),A=N0(t,116,8),p=N0(t,124,12),h=N0(t,136,12),C=GBt(o),I=t[157]===0?null:tw(t,157,100,e),v=tw(t,265,32),b=tw(t,297,32),E=N0(t,329,8),F=N0(t,337,8),N=U2e(t);if(N===8*32)return null;if(N!==N0(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(O2e.compare(t,Pv,Pv+6)===0)t[345]&&(a=tw(t,345,155,e)+"/"+a);else if(!(_Bt.compare(t,Pv,Pv+6)===0&&HBt.compare(t,iG,iG+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return o===0&&a&&a[a.length-1]==="/"&&(o=5),{name:a,mode:n,uid:u,gid:A,size:p,mtime:new Date(1e3*h),type:C,linkname:I,uname:v,gname:b,devmajor:E,devminor:F}}});var W2e=_((F$t,Y2e)=>{var H2e=Be("util"),KBt=L2e(),Sv=sG(),j2e=ew().Writable,q2e=ew().PassThrough,G2e=function(){},_2e=function(t){return t&=511,t&&512-t},VBt=function(t,e){var r=new YQ(t,e);return r.end(),r},zBt=function(t,e){return e.path&&(t.name=e.path),e.linkpath&&(t.linkname=e.linkpath),e.size&&(t.size=parseInt(e.size,10)),t.pax=e,t},YQ=function(t,e){this._parent=t,this.offset=e,q2e.call(this,{autoDestroy:!1})};H2e.inherits(YQ,q2e);YQ.prototype.destroy=function(t){this._parent.destroy(t)};var ip=function(t){if(!(this instanceof ip))return new ip(t);j2e.call(this,t),t=t||{},this._offset=0,this._buffer=KBt(),this._missing=0,this._partial=!1,this._onparse=G2e,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,r=e._buffer,o=function(){e._continue()},a=function(v){if(e._locked=!1,v)return e.destroy(v);e._stream||o()},n=function(){e._stream=null;var v=_2e(e._header.size);v?e._parse(v,u):e._parse(512,I),e._locked||o()},u=function(){e._buffer.consume(_2e(e._header.size)),e._parse(512,I),o()},A=function(){var v=e._header.size;e._paxGlobal=Sv.decodePax(r.slice(0,v)),r.consume(v),n()},p=function(){var v=e._header.size;e._pax=Sv.decodePax(r.slice(0,v)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(v),n()},h=function(){var v=e._header.size;this._gnuLongPath=Sv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},C=function(){var v=e._header.size;this._gnuLongLinkPath=Sv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},I=function(){var v=e._offset,b;try{b=e._header=Sv.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(E){e.emit("error",E)}if(r.consume(512),!b){e._parse(512,I),o();return}if(b.type==="gnu-long-path"){e._parse(b.size,h),o();return}if(b.type==="gnu-long-link-path"){e._parse(b.size,C),o();return}if(b.type==="pax-global-header"){e._parse(b.size,A),o();return}if(b.type==="pax-header"){e._parse(b.size,p),o();return}if(e._gnuLongPath&&(b.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(b.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=b=zBt(b,e._pax),e._pax=null),e._locked=!0,!b.size||b.type==="directory"){e._parse(512,I),e.emit("entry",b,VBt(e,v),a);return}e._stream=new YQ(e,v),e.emit("entry",b,e._stream,a),e._parse(b.size,n),o()};this._onheader=I,this._parse(512,I)};H2e.inherits(ip,j2e);ip.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};ip.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};ip.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=G2e,this._overflow?this._write(this._overflow,void 0,t):t()}};ip.prototype._write=function(t,e,r){if(!this._destroyed){var o=this._stream,a=this._buffer,n=this._missing;if(t.length&&(this._partial=!0),t.lengthn&&(u=t.slice(n),t=t.slice(0,n)),o?o.end(t):a.append(t),this._overflow=u,this._onparse()}};ip.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};Y2e.exports=ip});var V2e=_((R$t,K2e)=>{K2e.exports=Be("fs").constants||Be("constants")});var $2e=_((T$t,Z2e)=>{var nw=V2e(),z2e=NM(),KQ=k0(),JBt=Buffer.alloc,J2e=ew().Readable,iw=ew().Writable,XBt=Be("string_decoder").StringDecoder,WQ=sG(),ZBt=parseInt("755",8),$Bt=parseInt("644",8),X2e=JBt(1024),aG=function(){},oG=function(t,e){e&=511,e&&t.push(X2e.slice(0,512-e))};function evt(t){switch(t&nw.S_IFMT){case nw.S_IFBLK:return"block-device";case nw.S_IFCHR:return"character-device";case nw.S_IFDIR:return"directory";case nw.S_IFIFO:return"fifo";case nw.S_IFLNK:return"symlink"}return"file"}var VQ=function(t){iw.call(this),this.written=0,this._to=t,this._destroyed=!1};KQ(VQ,iw);VQ.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};VQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var zQ=function(){iw.call(this),this.linkname="",this._decoder=new XBt("utf-8"),this._destroyed=!1};KQ(zQ,iw);zQ.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};zQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var xv=function(){iw.call(this),this._destroyed=!1};KQ(xv,iw);xv.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};xv.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var EA=function(t){if(!(this instanceof EA))return new EA(t);J2e.call(this,t),this._drain=aG,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};KQ(EA,J2e);EA.prototype.entry=function(t,e,r){if(this._stream)throw new Error("already piping an entry");if(!(this._finalized||this._destroyed)){typeof e=="function"&&(r=e,e=null),r||(r=aG);var o=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=evt(t.mode)),t.mode||(t.mode=t.type==="directory"?ZBt:$Bt),t.uid||(t.uid=0),t.gid||(t.gid=0),t.mtime||(t.mtime=new Date),typeof e=="string"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){t.size=e.length,this._encode(t);var a=this.push(e);return oG(o,t.size),a?process.nextTick(r):this._drain=r,new xv}if(t.type==="symlink"&&!t.linkname){var n=new zQ;return z2e(n,function(A){if(A)return o.destroy(),r(A);t.linkname=n.linkname,o._encode(t),r()}),n}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new xv;var u=new VQ(this);return this._stream=u,z2e(u,function(A){if(o._stream=null,A)return o.destroy(),r(A);if(u.written!==t.size)return o.destroy(),r(new Error("size mismatch"));oG(o,t.size),o._finalizing&&o.finalize(),r()}),u}};EA.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(X2e),this.push(null))};EA.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.destroy&&this._stream.destroy())};EA.prototype._encode=function(t){if(!t.pax){var e=WQ.encode(t);if(e){this.push(e);return}}this._encodePax(t)};EA.prototype._encodePax=function(t){var e=WQ.encodePax({name:t.name,linkname:t.linkname,pax:t.pax}),r={name:"PaxHeader",mode:t.mode,uid:t.uid,gid:t.gid,size:e.length,mtime:t.mtime,type:"pax-header",linkname:t.linkname&&"PaxHeader",uname:t.uname,gname:t.gname,devmajor:t.devmajor,devminor:t.devminor};this.push(WQ.encode(r)),this.push(e),oG(this,e.length),r.size=t.size,r.type=t.type,this.push(WQ.encode(r))};EA.prototype._read=function(t){var e=this._drain;this._drain=aG,e()};Z2e.exports=EA});var eBe=_(lG=>{lG.extract=W2e();lG.pack=$2e()});var fBe=_((eer,ABe)=>{"use strict";var Bm=class{constructor(e,r,o){this.__specs=e||{},Object.keys(this.__specs).forEach(a=>{if(typeof this.__specs[a]=="string"){let n=this.__specs[a],u=this.__specs[n];if(u){let A=u.aliases||[];A.push(a,n),u.aliases=[...new Set(A)],this.__specs[a]=u}else throw new Error(`Alias refers to invalid key: ${n} -> ${a}`)}}),this.__opts=r||{},this.__providers=cBe(o.filter(a=>a!=null&&typeof a=="object")),this.__isFiggyPudding=!0}get(e){return hG(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,r=this){for(let[o,a]of this.entries())e.call(r,a,o,this)}toJSON(){let e={};return this.forEach((r,o)=>{e[o]=r}),e}*entries(e){for(let o of Object.keys(this.__specs))yield[o,this.get(o)];let r=e||this.__opts.other;if(r){let o=new Set;for(let a of this.__providers){let n=a.entries?a.entries(r):gvt(a);for(let[u,A]of n)r(u)&&!o.has(u)&&(o.add(u),yield[u,A])}}}*[Symbol.iterator](){for(let[e,r]of this.entries())yield[e,r]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Bm(this.__specs,this.__opts,cBe(this.__providers).concat(e)),uBe)}};try{let t=Be("util");Bm.prototype[t.inspect.custom]=function(e,r){return this[Symbol.toStringTag]+" "+t.inspect(this.toJSON(),r)}}catch{}function pvt(t){throw Object.assign(new Error(`invalid config key requested: ${t}`),{code:"EBADKEY"})}function hG(t,e,r){let o=t.__specs[e];if(r&&!o&&(!t.__opts.other||!t.__opts.other(e)))pvt(e);else{o||(o={});let a;for(let n of t.__providers){if(a=lBe(e,n),a===void 0&&o.aliases&&o.aliases.length){for(let u of o.aliases)if(u!==e&&(a=lBe(u,n),a!==void 0))break}if(a!==void 0)break}return a===void 0&&o.default!==void 0?typeof o.default=="function"?o.default(t):o.default:a}}function lBe(t,e){let r;return e.__isFiggyPudding?r=hG(e,t,!1):typeof e.get=="function"?r=e.get(t):r=e[t],r}var uBe={has(t,e){return e in t.__specs&&hG(t,e,!1)!==void 0},ownKeys(t){return Object.keys(t.__specs)},get(t,e){return typeof e=="symbol"||e.slice(0,2)==="__"||e in Bm.prototype?t[e]:t.get(e)},set(t,e,r){if(typeof e=="symbol"||e.slice(0,2)==="__")return t[e]=r,!0;throw new Error("figgyPudding options cannot be modified. Use .concat() instead.")},deleteProperty(){throw new Error("figgyPudding options cannot be deleted. Use .concat() and shadow them instead.")}};ABe.exports=hvt;function hvt(t,e){function r(...o){return new Proxy(new Bm(t,e,o),uBe)}return r}function cBe(t){let e=[];return t.forEach(r=>e.unshift(r)),e}function gvt(t){return Object.keys(t).map(e=>[e,t[e]])}});var gBe=_((ter,IA)=>{"use strict";var kv=Be("crypto"),dvt=fBe(),mvt=Be("stream").Transform,pBe=["sha256","sha384","sha512"],yvt=/^[a-z0-9+/]+(?:=?=?)$/i,Evt=/^([^-]+)-([^?]+)([?\S*]*)$/,Cvt=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,wvt=/^[\x21-\x7E]+$/,ia=dvt({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>bvt},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}}),M0=class{get isHash(){return!0}constructor(e,r){r=ia(r);let o=!!r.strict;this.source=e.trim();let a=this.source.match(o?Cvt:Evt);if(!a||o&&!pBe.some(u=>u===a[1]))return;this.algorithm=a[1],this.digest=a[2];let n=a[3];this.options=n?n.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if(e=ia(e),e.strict&&!(pBe.some(o=>o===this.algorithm)&&this.digest.match(yvt)&&(this.options||[]).every(o=>o.match(wvt))))return"";let r=this.options&&this.options.length?`?${this.options.join("?")}`:"";return`${this.algorithm}-${this.digest}${r}`}},vm=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=ia(e);let r=e.sep||" ";return e.strict&&(r=r.replace(/\S+/g," ")),Object.keys(this).map(o=>this[o].map(a=>M0.prototype.toString.call(a,e)).filter(a=>a.length).join(r)).filter(o=>o.length).join(r)}concat(e,r){r=ia(r);let o=typeof e=="string"?e:bv(e,r);return wA(`${this.toString(r)} ${o}`,r)}hexDigest(){return wA(this,{single:!0}).hexDigest()}match(e,r){r=ia(r);let o=wA(e,r),a=o.pickAlgorithm(r);return this[a]&&o[a]&&this[a].find(n=>o[a].find(u=>n.digest===u.digest))||!1}pickAlgorithm(e){e=ia(e);let r=e.pickAlgorithm,o=Object.keys(this);if(!o.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return o.reduce((a,n)=>r(a,n)||a)}};IA.exports.parse=wA;function wA(t,e){if(e=ia(e),typeof t=="string")return gG(t,e);if(t.algorithm&&t.digest){let r=new vm;return r[t.algorithm]=[t],gG(bv(r,e),e)}else return gG(bv(t,e),e)}function gG(t,e){return e.single?new M0(t,e):t.trim().split(/\s+/).reduce((r,o)=>{let a=new M0(o,e);if(a.algorithm&&a.digest){let n=a.algorithm;r[n]||(r[n]=[]),r[n].push(a)}return r},new vm)}IA.exports.stringify=bv;function bv(t,e){return e=ia(e),t.algorithm&&t.digest?M0.prototype.toString.call(t,e):typeof t=="string"?bv(wA(t,e),e):vm.prototype.toString.call(t,e)}IA.exports.fromHex=Ivt;function Ivt(t,e,r){r=ia(r);let o=r.options&&r.options.length?`?${r.options.join("?")}`:"";return wA(`${e}-${Buffer.from(t,"hex").toString("base64")}${o}`,r)}IA.exports.fromData=Bvt;function Bvt(t,e){e=ia(e);let r=e.algorithms,o=e.options&&e.options.length?`?${e.options.join("?")}`:"";return r.reduce((a,n)=>{let u=kv.createHash(n).update(t).digest("base64"),A=new M0(`${n}-${u}${o}`,e);if(A.algorithm&&A.digest){let p=A.algorithm;a[p]||(a[p]=[]),a[p].push(A)}return a},new vm)}IA.exports.fromStream=vvt;function vvt(t,e){e=ia(e);let r=e.Promise||Promise,o=dG(e);return new r((a,n)=>{t.pipe(o),t.on("error",n),o.on("error",n);let u;o.on("integrity",A=>{u=A}),o.on("end",()=>a(u)),o.on("data",()=>{})})}IA.exports.checkData=Dvt;function Dvt(t,e,r){if(r=ia(r),e=wA(e,r),!Object.keys(e).length){if(r.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let o=e.pickAlgorithm(r),a=kv.createHash(o).update(t).digest("base64"),n=wA({algorithm:o,digest:a}),u=n.match(e,r);if(u||!r.error)return u;if(typeof r.size=="number"&&t.length!==r.size){let A=new Error(`data size mismatch when checking ${e}. - Wanted: ${r.size} - Found: ${t.length}`);throw A.code="EBADSIZE",A.found=t.length,A.expected=r.size,A.sri=e,A}else{let A=new Error(`Integrity checksum failed when using ${o}: Wanted ${e}, but got ${n}. (${t.length} bytes)`);throw A.code="EINTEGRITY",A.found=n,A.expected=e,A.algorithm=o,A.sri=e,A}}IA.exports.checkStream=Pvt;function Pvt(t,e,r){r=ia(r);let o=r.Promise||Promise,a=dG(r.concat({integrity:e}));return new o((n,u)=>{t.pipe(a),t.on("error",u),a.on("error",u);let A;a.on("verified",p=>{A=p}),a.on("end",()=>n(A)),a.on("data",()=>{})})}IA.exports.integrityStream=dG;function dG(t){t=ia(t);let e=t.integrity&&wA(t.integrity,t),r=e&&Object.keys(e).length,o=r&&e.pickAlgorithm(t),a=r&&e[o],n=Array.from(new Set(t.algorithms.concat(o?[o]:[]))),u=n.map(kv.createHash),A=0,p=new mvt({transform(h,C,I){A+=h.length,u.forEach(v=>v.update(h,C)),I(null,h,C)}}).on("end",()=>{let h=t.options&&t.options.length?`?${t.options.join("?")}`:"",C=wA(u.map((v,b)=>`${n[b]}-${v.digest("base64")}${h}`).join(" "),t),I=r&&C.match(e,t);if(typeof t.size=="number"&&A!==t.size){let v=new Error(`stream size mismatch when checking ${e}. - Wanted: ${t.size} - Found: ${A}`);v.code="EBADSIZE",v.found=A,v.expected=t.size,v.sri=e,p.emit("error",v)}else if(t.integrity&&!I){let v=new Error(`${e} integrity checksum failed when using ${o}: wanted ${a} but got ${C}. (${A} bytes)`);v.code="EINTEGRITY",v.found=C,v.expected=a,v.algorithm=o,v.sri=e,p.emit("error",v)}else p.emit("size",A),p.emit("integrity",C),I&&p.emit("verified",I)});return p}IA.exports.create=Svt;function Svt(t){t=ia(t);let e=t.algorithms,r=t.options.length?`?${t.options.join("?")}`:"",o=e.map(kv.createHash);return{update:function(a,n){return o.forEach(u=>u.update(a,n)),this},digest:function(a){return e.reduce((u,A)=>{let p=o.shift().digest("base64"),h=new M0(`${A}-${p}${r}`,t);if(h.algorithm&&h.digest){let C=h.algorithm;u[C]||(u[C]=[]),u[C].push(h)}return u},new vm)}}}var xvt=new Set(kv.getHashes()),hBe=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>xvt.has(t));function bvt(t,e){return hBe.indexOf(t.toLowerCase())>=hBe.indexOf(e.toLowerCase())?t:e}});var YBe=_((iir,GBe)=>{var xDt=cN();function bDt(t){return xDt(t)?void 0:t}GBe.exports=bDt});var KBe=_((sir,WBe)=>{var kDt=Hx(),QDt=b8(),FDt=R8(),RDt=jd(),TDt=gd(),LDt=YBe(),NDt=v_(),ODt=x8(),MDt=1,UDt=2,_Dt=4,HDt=NDt(function(t,e){var r={};if(t==null)return r;var o=!1;e=kDt(e,function(n){return n=RDt(n,t),o||(o=n.length>1),n}),TDt(t,ODt(t),r),o&&(r=QDt(r,MDt|UDt|_Dt,LDt));for(var a=e.length;a--;)FDt(r,e[a]);return r});WBe.exports=HDt});Pt();Ye();Pt();var ZBe=Be("child_process"),$Be=$e($g());qt();var uC=new Map([]);var s2={};Vt(s2,{BaseCommand:()=>ut,WorkspaceRequiredError:()=>rr,getCli:()=>ehe,getDynamicLibs:()=>$pe,getPluginConfiguration:()=>fC,openWorkspace:()=>AC,pluginCommands:()=>uC,runExit:()=>nk});qt();var ut=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",{hidden:!0})}validateAndExecute(){if(typeof this.cwd<"u")throw new it("The --cwd option is ambiguous when used anywhere else than the very first parameter provided in the command line, before even the command path");return super.validateAndExecute()}};Ye();Pt();qt();var rr=class extends it{constructor(e,r){let o=V.relative(e,r),a=V.join(e,Ot.fileName);super(`This command can only be run from within a workspace of your project (${o} isn't a workspace of ${a}).`)}};Ye();Pt();nA();Ll();x1();qt();var TAt=$e(Jn());Za();var $pe=()=>new Map([["@yarnpkg/cli",s2],["@yarnpkg/core",i2],["@yarnpkg/fslib",Kw],["@yarnpkg/libzip",S1],["@yarnpkg/parsers",tI],["@yarnpkg/shell",F1],["clipanion",fI],["semver",TAt],["typanion",Vo]]);Ye();async function AC(t,e){let{project:r,workspace:o}=await St.find(t,e);if(!o)throw new rr(r.cwd,e);return o}Ye();Pt();nA();Ll();x1();qt();var JDt=$e(Jn());Za();var $8={};Vt($8,{AddCommand:()=>bh,BinCommand:()=>kh,CacheCleanCommand:()=>Qh,ClipanionCommand:()=>Wd,ConfigCommand:()=>Lh,ConfigGetCommand:()=>Fh,ConfigSetCommand:()=>Rh,ConfigUnsetCommand:()=>Th,DedupeCommand:()=>Nh,EntryCommand:()=>dC,ExecCommand:()=>Oh,ExplainCommand:()=>_h,ExplainPeerRequirementsCommand:()=>Mh,HelpCommand:()=>Kd,InfoCommand:()=>Hh,LinkCommand:()=>qh,NodeCommand:()=>Gh,PluginCheckCommand:()=>Yh,PluginImportCommand:()=>Vh,PluginImportSourcesCommand:()=>zh,PluginListCommand:()=>Wh,PluginRemoveCommand:()=>Jh,PluginRuntimeCommand:()=>Xh,RebuildCommand:()=>Zh,RemoveCommand:()=>$h,RunCommand:()=>e0,RunIndexCommand:()=>Jd,SetResolutionCommand:()=>t0,SetVersionCommand:()=>Uh,SetVersionSourcesCommand:()=>Kh,UnlinkCommand:()=>r0,UpCommand:()=>Kf,VersionCommand:()=>Vd,WhyCommand:()=>n0,WorkspaceCommand:()=>o0,WorkspacesListCommand:()=>s0,YarnCommand:()=>jh,dedupeUtils:()=>pk,default:()=>Pgt,suggestUtils:()=>Jc});var Fde=$e($g());Ye();Ye();Ye();qt();var H0e=$e(u2());Za();var Jc={};Vt(Jc,{Modifier:()=>B8,Strategy:()=>uk,Target:()=>A2,WorkspaceModifier:()=>N0e,applyModifier:()=>ept,extractDescriptorFromPath:()=>v8,extractRangeModifier:()=>O0e,fetchDescriptorFrom:()=>D8,findProjectDescriptors:()=>_0e,getModifier:()=>f2,getSuggestedDescriptors:()=>p2,makeWorkspaceDescriptor:()=>U0e,toWorkspaceModifier:()=>M0e});Ye();Ye();Pt();var I8=$e(Jn()),Zft="workspace:",A2=(o=>(o.REGULAR="dependencies",o.DEVELOPMENT="devDependencies",o.PEER="peerDependencies",o))(A2||{}),B8=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="",o))(B8||{}),N0e=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="*",o))(N0e||{}),uk=(n=>(n.KEEP="keep",n.REUSE="reuse",n.PROJECT="project",n.LATEST="latest",n.CACHE="cache",n))(uk||{});function f2(t,e){return t.exact?"":t.caret?"^":t.tilde?"~":e.configuration.get("defaultSemverRangePrefix")}var $ft=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function O0e(t,{project:e}){let r=t.match($ft);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function ept(t,e){let{protocol:r,source:o,params:a,selector:n}=G.parseRange(t.range);return I8.default.valid(n)&&(n=`${e}${t.range}`),G.makeDescriptor(t,G.makeRange({protocol:r,source:o,params:a,selector:n}))}function M0e(t){switch(t){case"^":return"^";case"~":return"~";case"":return"*";default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function U0e(t,e){return G.makeDescriptor(t.anchoredDescriptor,`${Zft}${M0e(e)}`)}async function _0e(t,{project:e,target:r}){let o=new Map,a=n=>{let u=o.get(n.descriptorHash);return u||o.set(n.descriptorHash,u={descriptor:n,locators:[]}),u};for(let n of e.workspaces)if(r==="peerDependencies"){let u=n.manifest.peerDependencies.get(t.identHash);u!==void 0&&a(u).locators.push(n.anchoredLocator)}else{let u=n.manifest.dependencies.get(t.identHash),A=n.manifest.devDependencies.get(t.identHash);r==="devDependencies"?A!==void 0?a(A).locators.push(n.anchoredLocator):u!==void 0&&a(u).locators.push(n.anchoredLocator):u!==void 0?a(u).locators.push(n.anchoredLocator):A!==void 0&&a(A).locators.push(n.anchoredLocator)}return o}async function v8(t,{cwd:e,workspace:r}){return await tpt(async o=>{V.isAbsolute(t)||(t=V.relative(r.cwd,V.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:a}=r,n=await D8(G.makeIdent(null,"archive"),t,{project:r.project,cache:o,workspace:r});if(!n)throw new Error("Assertion failed: The descriptor should have been found");let u=new Qi,A=a.configuration.makeResolver(),p=a.configuration.makeFetcher(),h={checksums:a.storedChecksums,project:a,cache:o,fetcher:p,report:u,resolver:A},C=A.bindDescriptor(n,r.anchoredLocator,h),I=G.convertDescriptorToLocator(C),v=await p.fetch(I,h),b=await Ot.find(v.prefixPath,{baseFs:v.packageFs});if(!b.name)throw new Error("Target path doesn't have a name");return G.makeDescriptor(b.name,t)})}async function p2(t,{project:e,workspace:r,cache:o,target:a,fixed:n,modifier:u,strategies:A,maxResults:p=1/0}){if(!(p>=0))throw new Error(`Invalid maxResults (${p})`);let[h,C]=t.range!=="unknown"?n||Qr.validRange(t.range)||!t.range.match(/^[a-z0-9._-]+$/i)?[t.range,"latest"]:["unknown",t.range]:["unknown","latest"];if(h!=="unknown")return{suggestions:[{descriptor:t,name:`Use ${G.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let I=typeof r<"u"&&r!==null&&r.manifest[a].get(t.identHash)||null,v=[],b=[],E=async F=>{try{await F()}catch(N){b.push(N)}};for(let F of A){if(v.length>=p)break;switch(F){case"keep":await E(async()=>{I&&v.push({descriptor:I,name:`Keep ${G.prettyDescriptor(e.configuration,I)}`,reason:"(no changes)"})});break;case"reuse":await E(async()=>{for(let{descriptor:N,locators:U}of(await _0e(t,{project:e,target:a})).values()){if(U.length===1&&U[0].locatorHash===r.anchoredLocator.locatorHash&&A.includes("keep"))continue;let z=`(originally used by ${G.prettyLocator(e.configuration,U[0])}`;z+=U.length>1?` and ${U.length-1} other${U.length>2?"s":""})`:")",v.push({descriptor:N,name:`Reuse ${G.prettyDescriptor(e.configuration,N)}`,reason:z})}});break;case"cache":await E(async()=>{for(let N of e.storedDescriptors.values())N.identHash===t.identHash&&v.push({descriptor:N,name:`Reuse ${G.prettyDescriptor(e.configuration,N)}`,reason:"(already used somewhere in the lockfile)"})});break;case"project":await E(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let N=e.tryWorkspaceByIdent(t);if(N===null)return;let U=U0e(N,u);v.push({descriptor:U,name:`Attach ${G.prettyDescriptor(e.configuration,U)}`,reason:`(local workspace at ${de.pretty(e.configuration,N.relativeCwd,de.Type.PATH)})`})});break;case"latest":{let N=e.configuration.get("enableNetwork"),U=e.configuration.get("enableOfflineMode");await E(async()=>{if(a==="peerDependencies")v.push({descriptor:G.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!N&&!U)v.push({descriptor:null,name:"Resolve from latest",reason:de.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let z=await D8(t,C,{project:e,cache:o,workspace:r,modifier:u});z&&v.push({descriptor:z,name:`Use ${G.prettyDescriptor(e.configuration,z)}`,reason:`(resolved from ${U?"the cache":"latest"})`})}})}break}}return{suggestions:v.slice(0,p),rejections:b.slice(0,p)}}async function D8(t,e,{project:r,cache:o,workspace:a,preserveModifier:n=!0,modifier:u}){let A=r.configuration.normalizeDependency(G.makeDescriptor(t,e)),p=new Qi,h=r.configuration.makeFetcher(),C=r.configuration.makeResolver(),I={project:r,fetcher:h,cache:o,checksums:r.storedChecksums,report:p,cacheOptions:{skipIntegrityCheck:!0}},v={...I,resolver:C,fetchOptions:I},b=C.bindDescriptor(A,a.anchoredLocator,v),E=await C.getCandidates(b,{},v);if(E.length===0)return null;let F=E[0],{protocol:N,source:U,params:z,selector:te}=G.parseRange(G.convertToManifestRange(F.reference));if(N===r.configuration.get("defaultProtocol")&&(N=null),I8.default.valid(te)){let le=te;if(typeof u<"u")te=u+te;else if(n!==!1){let ye=typeof n=="string"?n:A.range;te=O0e(ye,{project:r})+te}let pe=G.makeDescriptor(F,G.makeRange({protocol:N,source:U,params:z,selector:te}));(await C.getCandidates(r.configuration.normalizeDependency(pe),{},v)).length!==1&&(te=le)}return G.makeDescriptor(F,G.makeRange({protocol:N,source:U,params:z,selector:te}))}async function tpt(t){return await oe.mktempPromise(async e=>{let r=Ke.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Nr(e,{configuration:r,check:!1,immutable:!1}))})}var bh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.dev=ge.Boolean("-D,--dev",!1,{description:"Add a package as a dev dependency"});this.peer=ge.Boolean("-P,--peer",!1,{description:"Add a package as a peer dependency"});this.optional=ge.Boolean("-O,--optional",!1,{description:"Add / upgrade a package to an optional regular / peer dependency"});this.preferDev=ge.Boolean("--prefer-dev",!1,{description:"Add / upgrade a package to a dev dependency"});this.interactive=ge.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"});this.cached=ge.Boolean("--cached",!1,{description:"Reuse the highest version already used somewhere within the project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.silent=ge.Boolean("--silent",{hidden:!0});this.packages=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=A||r.get("preferReuse"),h=f2(this,o),C=[p?"reuse":void 0,"project",this.cached?"cache":void 0,"latest"].filter(U=>typeof U<"u"),I=A?1/0:1,v=await Promise.all(this.packages.map(async U=>{let z=U.match(/^\.{0,2}\//)?await v8(U,{cwd:this.context.cwd,workspace:a}):G.tryParseDescriptor(U),te=U.match(/^(https?:|git@github)/);if(te)throw new it(`It seems you are trying to add a package using a ${de.pretty(r,`${te[0]}...`,de.Type.RANGE)} url; we now require package names to be explicitly specified. -Try running the command again with the package name prefixed: ${de.pretty(r,"yarn add",de.Type.CODE)} ${de.pretty(r,G.makeDescriptor(G.makeIdent(null,"my-package"),`${te[0]}...`),de.Type.DESCRIPTOR)}`);if(!z)throw new it(`The ${de.pretty(r,U,de.Type.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let le=rpt(a,z,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(le.map(async ue=>{let ye=await p2(z,{project:o,workspace:a,cache:n,fixed:u,target:ue,modifier:h,strategies:C,maxResults:I});return{request:z,suggestedDescriptors:ye,target:ue}}))})).then(U=>U.flat()),b=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async U=>{for(let{request:z,suggestedDescriptors:{suggestions:te,rejections:le}}of v)if(te.filter(ue=>ue.descriptor!==null).length===0){let[ue]=le;if(typeof ue>"u")throw new Error("Assertion failed: Expected an error to have been set");o.configuration.get("enableNetwork")?U.reportError(27,`${G.prettyDescriptor(r,z)} can't be resolved to a satisfying range`):U.reportError(27,`${G.prettyDescriptor(r,z)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),U.reportSeparator(),U.reportExceptionOnce(ue)}});if(b.hasErrors())return b.exitCode();let E=!1,F=[],N=[];for(let{suggestedDescriptors:{suggestions:U},target:z}of v){let te,le=U.filter(ae=>ae.descriptor!==null),pe=le[0].descriptor,ue=le.every(ae=>G.areDescriptorsEqual(ae.descriptor,pe));le.length===1||ue?te=pe:(E=!0,{answer:te}=await(0,H0e.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:U.map(({descriptor:ae,name:Ie,reason:Fe})=>ae?{name:Ie,hint:Fe,descriptor:ae}:{name:Ie,hint:Fe,disabled:!0}),onCancel:()=>process.exit(130),result(ae){return this.find(ae,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let ye=a.manifest[z].get(te.identHash);(typeof ye>"u"||ye.descriptorHash!==te.descriptorHash)&&(a.manifest[z].set(te.identHash,te),this.optional&&(z==="dependencies"?a.manifest.ensureDependencyMeta({...te,range:"unknown"}).optional=!0:z==="peerDependencies"&&(a.manifest.ensurePeerDependencyMeta({...te,range:"unknown"}).optional=!0)),typeof ye>"u"?F.push([a,z,te,C]):N.push([a,z,ye,te]))}return await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyAddition,F),await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyReplacement,N),E&&this.context.stdout.write(` -`),await o.installWithNewReport({json:this.json,stdout:this.context.stdout,quiet:this.context.quiet},{cache:n,mode:this.mode})}};bh.paths=[["add"]],bh.usage=nt.Usage({description:"add dependencies to the project",details:"\n This command adds a package to the package.json for the nearest workspace.\n\n - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\n\n - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\n\n - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\n\n - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\"peerDependenciesMeta\": { \"\": { \"optional\": true } }`\n\n - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\n\n - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\n\n If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\n\n If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/features/protocols.\n ",examples:[["Add a regular package to the current workspace","$0 add lodash"],["Add a specific version for a package to the current workspace","$0 add lodash@1.2.3"],["Add a package from a GitHub repository (the master branch) to the current workspace using a URL","$0 add lodash@https://github.com/lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol","$0 add lodash@github:lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)","$0 add lodash@lodash/lodash"],["Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)","$0 add lodash-es@lodash/lodash#es"]]});function rpt(t,e,{dev:r,peer:o,preferDev:a,optional:n}){let u=t.manifest["dependencies"].has(e.identHash),A=t.manifest["devDependencies"].has(e.identHash),p=t.manifest["peerDependencies"].has(e.identHash);if((r||o)&&u)throw new it(`Package "${G.prettyIdent(t.project.configuration,e)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!o&&p)throw new it(`Package "${G.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(n&&A)throw new it(`Package "${G.prettyIdent(t.project.configuration,e)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(n&&!o&&p)throw new it(`Package "${G.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||a)&&n)throw new it(`Package "${G.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);let h=[];return o&&h.push("peerDependencies"),(r||a)&&h.push("devDependencies"),n&&h.push("dependencies"),h.length>0?h:A?["devDependencies"]:p?["peerDependencies"]:["dependencies"]}Ye();Ye();qt();var kh=class extends ut{constructor(){super(...arguments);this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Print both the binary name and the locator of the package that provides the binary"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.name=ge.String({required:!1})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);if(await o.restoreInstallState(),this.name){let A=(await un.getPackageAccessibleBinaries(a,{project:o})).get(this.name);if(!A)throw new it(`Couldn't find a binary named "${this.name}" for package "${G.prettyLocator(r,a)}"`);let[,p]=A;return this.context.stdout.write(`${p} -`),0}return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async u=>{let A=await un.getPackageAccessibleBinaries(a,{project:o}),h=Array.from(A.keys()).reduce((C,I)=>Math.max(C,I.length),0);for(let[C,[I,v]]of A)u.reportJson({name:C,source:G.stringifyIdent(I),path:v});if(this.verbose)for(let[C,[I]]of A)u.reportInfo(null,`${C.padEnd(h," ")} ${G.prettyLocator(r,I)}`);else for(let C of A.keys())u.reportInfo(null,C)})).exitCode()}};kh.paths=[["bin"]],kh.usage=nt.Usage({description:"get the path to a binary script",details:` - When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \`-v,--verbose\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary. - - When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive. - `,examples:[["List all the available binaries","$0 bin"],["Print the path to a specific binary","$0 bin eslint"]]});Ye();Pt();qt();var Qh=class extends ut{constructor(){super(...arguments);this.mirror=ge.Boolean("--mirror",!1,{description:"Remove the global cache files instead of the local cache files"});this.all=ge.Boolean("--all",!1,{description:"Remove both the global cache files and the local cache files of the current project"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await Nr.find(r);return(await Lt.start({configuration:r,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&o.mirrorCwd!==null,u=!this.mirror;n&&(await oe.removePromise(o.mirrorCwd),await r.triggerHook(A=>A.cleanGlobalArtifacts,r)),u&&await oe.removePromise(o.cwd)})).exitCode()}};Qh.paths=[["cache","clean"],["cache","clear"]],Qh.usage=nt.Usage({description:"remove the shared cache files",details:` - This command will remove all the files from the cache. - `,examples:[["Remove all the local archives","$0 cache clean"],["Remove all the archives stored in the ~/.yarn directory","$0 cache clean --mirror"]]});Ye();qt();var q0e=$e(h2()),P8=Be("util"),Fh=class extends ut{constructor(){super(...arguments);this.why=ge.Boolean("--why",!1,{description:"Print the explanation for why a setting has its value"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.unsafe=ge.Boolean("--no-redacted",!1,{description:"Don't redact secrets (such as tokens) from the output"});this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=this.name.replace(/[.[].*$/,""),a=this.name.replace(/^[^.[]*/,"");if(typeof r.settings.get(o)>"u")throw new it(`Couldn't find a configuration settings named "${o}"`);let u=r.getSpecial(o,{hideSecrets:!this.unsafe,getNativePaths:!0}),A=_e.convertMapsToIndexableObjects(u),p=a?(0,q0e.default)(A,a):A,h=await Lt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async C=>{C.reportJson(p)});if(!this.json){if(typeof p=="string")return this.context.stdout.write(`${p} -`),h.exitCode();P8.inspect.styles.name="cyan",this.context.stdout.write(`${(0,P8.inspect)(p,{depth:1/0,colors:r.get("enableColors"),compact:!1})} -`)}return h.exitCode()}};Fh.paths=[["config","get"]],Fh.usage=nt.Usage({description:"read a configuration settings",details:` - This command will print a configuration setting. - - Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \`--no-redacted\` to get the untransformed value. - `,examples:[["Print a simple configuration setting","yarn config get yarnPath"],["Print a complex configuration setting","yarn config get packageExtensions"],["Print a nested field from the configuration",`yarn config get 'npmScopes["my-company"].npmRegistryServer'`],["Print a token from the configuration","yarn config get npmAuthToken --no-redacted"],["Print a configuration setting as JSON","yarn config get packageExtensions --json"]]});Ye();qt();var Rge=$e(k8()),Tge=$e(h2()),Lge=$e(Q8()),F8=Be("util"),Rh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Set complex configuration settings to JSON values"});this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String();this.value=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);if(a==="enableStrictSettings")throw new it("This setting only affects the file it's in, and thus cannot be set from the CLI");let A=this.json?JSON.parse(this.value):this.value;await(this.home?E=>Ke.updateHomeConfiguration(E):E=>Ke.updateConfiguration(o(),E))(E=>{if(n){let F=(0,Rge.default)(E);return(0,Lge.default)(F,this.name,A),F}else return{...E,[a]:A}});let C=(await Ke.find(this.context.cwd,this.context.plugins)).getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),I=_e.convertMapsToIndexableObjects(C),v=n?(0,Tge.default)(I,n):I;return(await Lt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async E=>{F8.inspect.styles.name="cyan",E.reportInfo(0,`Successfully set ${this.name} to ${(0,F8.inspect)(v,{depth:1/0,colors:r.get("enableColors"),compact:!1})}`)})).exitCode()}};Rh.paths=[["config","set"]],Rh.usage=nt.Usage({description:"change a configuration settings",details:` - This command will set a configuration setting. - - When used without the \`--json\` flag, it can only set a simple configuration setting (a string, a number, or a boolean). - - When used with the \`--json\` flag, it can set both simple and complex configuration settings, including Arrays and Objects. - `,examples:[["Set a simple configuration setting (a string, a number, or a boolean)","yarn config set initScope myScope"],["Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag",'yarn config set initScope --json \\"myScope\\"'],["Set a complex configuration setting (an Array) using the `--json` flag",`yarn config set unsafeHttpWhitelist --json '["*.example.com", "example.com"]'`],["Set a complex configuration setting (an Object) using the `--json` flag",`yarn config set packageExtensions --json '{ "@babel/parser@*": { "dependencies": { "@babel/types": "*" } } }'`],["Set a nested configuration setting",'yarn config set npmScopes.company.npmRegistryServer "https://npm.example.com"'],["Set a nested configuration setting using indexed access for non-simple keys",`yarn config set 'npmRegistries["//npm.example.com"].npmAuthToken' "ffffffff-ffff-ffff-ffff-ffffffffffff"`]]});Ye();qt();var Wge=$e(k8()),Kge=$e(Uge()),Vge=$e(T8()),Th=class extends ut{constructor(){super(...arguments);this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);let A=this.home?h=>Ke.updateHomeConfiguration(h):h=>Ke.updateConfiguration(o(),h);return(await Lt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async h=>{let C=!1;await A(I=>{if(!(0,Kge.default)(I,this.name))return h.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),C=!0,I;let v=n?(0,Wge.default)(I):{...I};return(0,Vge.default)(v,this.name),v}),C||h.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};Th.paths=[["config","unset"]],Th.usage=nt.Usage({description:"unset a configuration setting",details:` - This command will unset a configuration setting. - `,examples:[["Unset a simple configuration setting","yarn config unset initScope"],["Unset a complex configuration setting","yarn config unset packageExtensions"],["Unset a nested configuration setting","yarn config unset npmScopes.company.npmRegistryServer"]]});Ye();Pt();qt();var fk=Be("util"),Lh=class extends ut{constructor(){super(...arguments);this.noDefaults=ge.Boolean("--no-defaults",!1,{description:"Omit the default values from the display"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.verbose=ge.Boolean("-v,--verbose",{hidden:!0});this.why=ge.Boolean("--why",{hidden:!0});this.names=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins,{strict:!1}),o=await LE({configuration:r,stdout:this.context.stdout,forceError:this.json},[{option:this.verbose,message:"The --verbose option is deprecated, the settings' descriptions are now always displayed"},{option:this.why,message:"The --why option is deprecated, the settings' sources are now always displayed"}]);if(o!==null)return o;let a=this.names.length>0?[...new Set(this.names)].sort():[...r.settings.keys()].sort(),n,u=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async A=>{if(r.invalid.size>0&&!this.json){for(let[p,h]of r.invalid)A.reportError(34,`Invalid configuration key "${p}" in ${h}`);A.reportSeparator()}if(this.json)for(let p of a){let h=r.settings.get(p);typeof h>"u"&&A.reportError(34,`No configuration key named "${p}"`);let C=r.getSpecial(p,{hideSecrets:!0,getNativePaths:!0}),I=r.sources.get(p)??"",v=I&&I[0]!=="<"?fe.fromPortablePath(I):I;A.reportJson({key:p,effective:C,source:v,...h})}else{let p={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},h={},C={children:h};for(let I of a){if(this.noDefaults&&!r.sources.has(I))continue;let v=r.settings.get(I),b=r.sources.get(I)??"",E=r.getSpecial(I,{hideSecrets:!0,getNativePaths:!0}),F={Description:{label:"Description",value:de.tuple(de.Type.MARKDOWN,{text:v.description,format:this.cli.format(),paragraphs:!1})},Source:{label:"Source",value:de.tuple(b[0]==="<"?de.Type.CODE:de.Type.PATH,b)}};h[I]={value:de.tuple(de.Type.CODE,I),children:F};let N=(U,z)=>{for(let[te,le]of z)if(le instanceof Map){let pe={};U[te]={children:pe},N(pe,le)}else U[te]={label:te,value:de.tuple(de.Type.NO_HINT,(0,fk.inspect)(le,p))}};E instanceof Map?N(F,E):F.Value={label:"Value",value:de.tuple(de.Type.NO_HINT,(0,fk.inspect)(E,p))}}a.length!==1&&(n=void 0),$s.emitTree(C,{configuration:r,json:this.json,stdout:this.context.stdout,separators:2})}});if(!this.json&&typeof n<"u"){let A=a[0],p=(0,fk.inspect)(r.getSpecial(A,{hideSecrets:!0,getNativePaths:!0}),{colors:r.get("enableColors")});this.context.stdout.write(` -`),this.context.stdout.write(`${p} -`)}return u.exitCode()}};Lh.paths=[["config"]],Lh.usage=nt.Usage({description:"display the current configuration",details:` - This command prints the current active configuration settings. - `,examples:[["Print the active configuration settings","$0 config"]]});Ye();qt();Za();var pk={};Vt(pk,{Strategy:()=>g2,acceptedStrategies:()=>M0t,dedupe:()=>L8});Ye();Ye();var zge=$e(Zo()),g2=(e=>(e.HIGHEST="highest",e))(g2||{}),M0t=new Set(Object.values(g2)),U0t={highest:async(t,e,{resolver:r,fetcher:o,resolveOptions:a,fetchOptions:n})=>{let u=new Map;for(let[p,h]of t.storedResolutions){let C=t.storedDescriptors.get(p);if(typeof C>"u")throw new Error(`Assertion failed: The descriptor (${p}) should have been registered`);_e.getSetWithDefault(u,C.identHash).add(h)}let A=new Map(_e.mapAndFilter(t.storedDescriptors.values(),p=>G.isVirtualDescriptor(p)?_e.mapAndFilter.skip:[p.descriptorHash,_e.makeDeferred()]));for(let p of t.storedDescriptors.values()){let h=A.get(p.descriptorHash);if(typeof h>"u")throw new Error(`Assertion failed: The descriptor (${p.descriptorHash}) should have been registered`);let C=t.storedResolutions.get(p.descriptorHash);if(typeof C>"u")throw new Error(`Assertion failed: The resolution (${p.descriptorHash}) should have been registered`);let I=t.originalPackages.get(C);if(typeof I>"u")throw new Error(`Assertion failed: The package (${C}) should have been registered`);Promise.resolve().then(async()=>{let v=r.getResolutionDependencies(p,a),b=Object.fromEntries(await _e.allSettledSafe(Object.entries(v).map(async([te,le])=>{let pe=A.get(le.descriptorHash);if(typeof pe>"u")throw new Error(`Assertion failed: The descriptor (${le.descriptorHash}) should have been registered`);let ue=await pe.promise;if(!ue)throw new Error("Assertion failed: Expected the dependency to have been through the dedupe process itself");return[te,ue.updatedPackage]})));if(e.length&&!zge.default.isMatch(G.stringifyIdent(p),e)||!r.shouldPersistResolution(I,a))return I;let E=u.get(p.identHash);if(typeof E>"u")throw new Error(`Assertion failed: The resolutions (${p.identHash}) should have been registered`);if(E.size===1)return I;let F=[...E].map(te=>{let le=t.originalPackages.get(te);if(typeof le>"u")throw new Error(`Assertion failed: The package (${te}) should have been registered`);return le}),N=await r.getSatisfying(p,b,F,a),U=N.locators?.[0];if(typeof U>"u"||!N.sorted)return I;let z=t.originalPackages.get(U.locatorHash);if(typeof z>"u")throw new Error(`Assertion failed: The package (${U.locatorHash}) should have been registered`);return z}).then(async v=>{let b=await t.preparePackage(v,{resolver:r,resolveOptions:a});h.resolve({descriptor:p,currentPackage:I,updatedPackage:v,resolvedPackage:b})}).catch(v=>{h.reject(v)})}return[...A.values()].map(p=>p.promise)}};async function L8(t,{strategy:e,patterns:r,cache:o,report:a}){let{configuration:n}=t,u=new Qi,A=n.makeResolver(),p=n.makeFetcher(),h={cache:o,checksums:t.storedChecksums,fetcher:p,project:t,report:u,cacheOptions:{skipIntegrityCheck:!0}},C={project:t,resolver:A,report:u,fetchOptions:h};return await a.startTimerPromise("Deduplication step",async()=>{let I=U0t[e],v=await I(t,r,{resolver:A,resolveOptions:C,fetcher:p,fetchOptions:h}),b=Xs.progressViaCounter(v.length);await a.reportProgress(b);let E=0;await Promise.all(v.map(U=>U.then(z=>{if(z===null||z.currentPackage.locatorHash===z.updatedPackage.locatorHash)return;E++;let{descriptor:te,currentPackage:le,updatedPackage:pe}=z;a.reportInfo(0,`${G.prettyDescriptor(n,te)} can be deduped from ${G.prettyLocator(n,le)} to ${G.prettyLocator(n,pe)}`),a.reportJson({descriptor:G.stringifyDescriptor(te),currentResolution:G.stringifyLocator(le),updatedResolution:G.stringifyLocator(pe)}),t.storedResolutions.set(te.descriptorHash,pe.locatorHash)}).finally(()=>b.tick())));let F;switch(E){case 0:F="No packages";break;case 1:F="One package";break;default:F=`${E} packages`}let N=de.pretty(n,e,de.Type.CODE);return a.reportInfo(0,`${F} can be deduped using the ${N} strategy`),E})}var Nh=class extends ut{constructor(){super(...arguments);this.strategy=ge.String("-s,--strategy","highest",{description:"The strategy to use when deduping dependencies",validator:Vs(g2)});this.check=ge.Boolean("-c,--check",!1,{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=await Nr.find(r);await o.restoreInstallState({restoreResolutions:!1});let n=0,u=await Lt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout,json:this.json},async A=>{n=await L8(o,{strategy:this.strategy,patterns:this.patterns,cache:a,report:A})});return u.hasErrors()?u.exitCode():this.check?n?1:0:await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:a,mode:this.mode})}};Nh.paths=[["dedupe"]],Nh.usage=nt.Usage({description:"deduplicate dependencies with overlapping ranges",details:"\n Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\n\n This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\n\n - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\n\n **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\n\n If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n ### In-depth explanation:\n\n Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\n\n Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\n ",examples:[["Dedupe all packages","$0 dedupe"],["Dedupe all packages using a specific strategy","$0 dedupe --strategy highest"],["Dedupe a specific package","$0 dedupe lodash"],["Dedupe all packages with the `@babel/*` scope","$0 dedupe '@babel/*'"],["Check for duplicates (can be used as a CI step)","$0 dedupe --check"]]});Ye();qt();var Wd=class extends ut{async execute(){let{plugins:e}=await Ke.find(this.context.cwd,this.context.plugins),r=[];for(let u of e){let{commands:A}=u[1];if(A){let h=as.from(A).definitions();r.push([u[0],h])}}let o=this.cli.definitions(),a=(u,A)=>u.split(" ").slice(1).join()===A.split(" ").slice(1).join(),n=Jge()["@yarnpkg/builder"].bundles.standard;for(let u of r){let A=u[1];for(let p of A)o.find(h=>a(h.path,p.path)).plugin={name:u[0],isDefault:n.includes(u[0])}}this.context.stdout.write(`${JSON.stringify(o,null,2)} -`)}};Wd.paths=[["--clipanion=definitions"]];var Kd=class extends ut{async execute(){this.context.stdout.write(this.cli.usage(null))}};Kd.paths=[["help"],["--help"],["-h"]];Ye();Pt();qt();var dC=class extends ut{constructor(){super(...arguments);this.leadingArgument=ge.String();this.args=ge.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!G.tryParseIdent(this.leadingArgument)){let r=V.resolve(this.context.cwd,fe.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:r})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}};Ye();var Vd=class extends ut{async execute(){this.context.stdout.write(`${tn||""} -`)}};Vd.paths=[["-v"],["--version"]];Ye();Ye();qt();var Oh=class extends ut{constructor(){super(...arguments);this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);return await o.restoreInstallState(),await un.executePackageShellcode(a,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:o})}};Oh.paths=[["exec"]],Oh.usage=nt.Usage({description:"execute a shell script",details:` - This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell. - - It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). - `,examples:[["Execute a single shell command","$0 exec echo Hello World"],["Execute a shell script",'$0 exec "tsc & babel src --out-dir lib"']]});Ye();qt();Za();var Mh=class extends ut{constructor(){super(...arguments);this.hash=ge.String({required:!1,validator:rd(Ey(),[sI(/^p[0-9a-f]{5}$/)])})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return await o.restoreInstallState({restoreResolutions:!1}),await o.applyLightResolution(),typeof this.hash<"u"?await H0t(this.hash,o,{stdout:this.context.stdout}):(await Lt.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let u=[([,A])=>G.stringifyLocator(o.storedPackages.get(A.subject)),([,A])=>G.stringifyIdent(A.requested)];for(let[A,p]of _e.sortMap(o.peerRequirements,u)){let h=o.storedPackages.get(p.subject);if(typeof h>"u")throw new Error("Assertion failed: Expected the subject package to have been registered");let C=o.storedPackages.get(p.rootRequester);if(typeof C>"u")throw new Error("Assertion failed: Expected the root package to have been registered");let I=h.dependencies.get(p.requested.identHash)??null,v=de.pretty(r,A,de.Type.CODE),b=G.prettyLocator(r,h),E=G.prettyIdent(r,p.requested),F=G.prettyIdent(r,C),N=p.allRequesters.length-1,U=`descendant${N===1?"":"s"}`,z=N>0?` and ${N} ${U}`:"",te=I!==null?"provides":"doesn't provide";n.reportInfo(null,`${v} \u2192 ${b} ${te} ${E} to ${F}${z}`)}})).exitCode()}};Mh.paths=[["explain","peer-requirements"]],Mh.usage=nt.Usage({description:"explain a set of peer requirements",details:` - A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants. - - When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not. - - When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set. - - **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\`yarn explain peer-requirements\`). - `,examples:[["Explain the corresponding set of peer requirements for a hash","$0 explain peer-requirements p1a4ed"],["List all sets of peer requirements","$0 explain peer-requirements"]]});async function H0t(t,e,r){let{configuration:o}=e,a=e.peerRequirements.get(t);if(typeof a>"u")throw new Error(`No peerDependency requirements found for hash: "${t}"`);return(await Lt.start({configuration:o,stdout:r.stdout,includeFooter:!1},async u=>{let A=e.storedPackages.get(a.subject);if(typeof A>"u")throw new Error("Assertion failed: Expected the subject package to have been registered");let p=e.storedPackages.get(a.rootRequester);if(typeof p>"u")throw new Error("Assertion failed: Expected the root package to have been registered");let h=A.dependencies.get(a.requested.identHash)??null,C=h!==null?e.storedResolutions.get(h.descriptorHash):null;if(typeof C>"u")throw new Error("Assertion failed: Expected the resolution to have been registered");let I=C!==null?e.storedPackages.get(C):null;if(typeof I>"u")throw new Error("Assertion failed: Expected the provided package to have been registered");let v=[...a.allRequesters.values()].map(U=>{let z=e.storedPackages.get(U);if(typeof z>"u")throw new Error("Assertion failed: Expected the package to be registered");let te=G.devirtualizeLocator(z),le=e.storedPackages.get(te.locatorHash);if(typeof le>"u")throw new Error("Assertion failed: Expected the package to be registered");let pe=le.peerDependencies.get(a.requested.identHash);if(typeof pe>"u")throw new Error("Assertion failed: Expected the peer dependency to be registered");return{pkg:z,peerDependency:pe}});if(I!==null){let U=v.every(({peerDependency:z})=>Qr.satisfiesWithPrereleases(I.version,z.range));u.reportInfo(0,`${G.prettyLocator(o,A)} provides ${G.prettyLocator(o,I)} with version ${G.prettyReference(o,I.version??"")}, which ${U?"satisfies":"doesn't satisfy"} the following requirements:`)}else u.reportInfo(0,`${G.prettyLocator(o,A)} doesn't provide ${G.prettyIdent(o,a.requested)}, breaking the following requirements:`);u.reportSeparator();let b=de.mark(o),E=[];for(let{pkg:U,peerDependency:z}of _e.sortMap(v,te=>G.stringifyLocator(te.pkg))){let le=(I!==null?Qr.satisfiesWithPrereleases(I.version,z.range):!1)?b.Check:b.Cross;E.push({stringifiedLocator:G.stringifyLocator(U),prettyLocator:G.prettyLocator(o,U),prettyRange:G.prettyRange(o,z.range),mark:le})}let F=Math.max(...E.map(({stringifiedLocator:U})=>U.length)),N=Math.max(...E.map(({prettyRange:U})=>U.length));for(let{stringifiedLocator:U,prettyLocator:z,prettyRange:te,mark:le}of _e.sortMap(E,({stringifiedLocator:pe})=>pe))u.reportInfo(null,`${z.padEnd(F+(z.length-U.length)," ")} \u2192 ${te.padEnd(N," ")} ${le}`);E.length>1&&(u.reportSeparator(),u.reportInfo(0,`Note: these requirements start with ${G.prettyLocator(e.configuration,p)}`))})).exitCode()}Ye();qt();Za();Ye();Ye();Pt();qt();var Xge=$e(Jn()),Uh=class extends ut{constructor(){super(...arguments);this.useYarnPath=ge.Boolean("--yarn-path",{description:"Set the yarnPath setting even if the version can be accessed by Corepack"});this.onlyIfNeeded=ge.Boolean("--only-if-needed",!1,{description:"Only lock the Yarn version if it isn't already locked"});this.version=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&r.get("yarnPath")){let A=r.sources.get("yarnPath");if(!A)throw new Error("Assertion failed: Expected 'yarnPath' to have a source");let p=r.projectCwd??r.startingCwd;if(V.contains(p,A))return 0}let o=()=>{if(typeof tn>"u")throw new it("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},a,n=(A,p)=>({version:p,url:A.replace(/\{\}/g,p)});if(this.version==="self")a={url:o(),version:tn??"self"};else if(this.version==="latest"||this.version==="berry"||this.version==="stable")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await d2(r,"stable"));else if(this.version==="canary")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await d2(r,"canary"));else if(this.version==="classic")a={url:"https://classic.yarnpkg.com/latest.js",version:"classic"};else if(this.version.match(/^https?:/))a={url:this.version,version:"remote"};else if(this.version.match(/^\.{0,2}[\\/]/)||fe.isAbsolute(this.version))a={url:`file://${V.resolve(fe.toPortablePath(this.version))}`,version:"file"};else if(Qr.satisfiesWithPrereleases(this.version,">=2.0.0"))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",this.version);else if(Qr.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))a=n("https://github.com/yarnpkg/yarn/releases/download/v{}/yarn-{}.js",this.version);else if(Qr.validRange(this.version))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await j0t(r,this.version));else throw new it(`Invalid version descriptor "${this.version}"`);return(await Lt.start({configuration:r,stdout:this.context.stdout,includeLogs:!this.context.quiet},async A=>{let p=async()=>{let h="file://";return a.url.startsWith(h)?(A.reportInfo(0,`Retrieving ${de.pretty(r,a.url,de.Type.PATH)}`),await oe.readFilePromise(a.url.slice(h.length))):(A.reportInfo(0,`Downloading ${de.pretty(r,a.url,de.Type.URL)}`),await rn.get(a.url,{configuration:r}))};await N8(r,a.version,p,{report:A,useYarnPath:this.useYarnPath})})).exitCode()}};Uh.paths=[["set","version"]],Uh.usage=nt.Usage({description:"lock the Yarn version used by the project",details:"\n This command will set a specific release of Yarn to be used by Corepack: https://nodejs.org/api/corepack.html.\n\n By default it only will set the `packageManager` field at the root of your project, but if the referenced release cannot be represented this way, if you already have `yarnPath` configured, or if you set the `--yarn-path` command line flag, then the release will also be downloaded from the Yarn GitHub repository, stored inside your project, and referenced via the `yarnPath` settings from your project `.yarnrc.yml` file.\n\n A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\n\n The version specifier can be:\n\n - a tag:\n - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\n - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\n - `classic` -> the most recent classic (`^0.x || ^1.x`) release\n\n - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\n\n - a semver version (e.g. `2.4.1`, `1.22.1`)\n\n - a local file referenced through either a relative or absolute path\n\n - `self` -> the version used to invoke the command\n ",examples:[["Download the latest release from the Yarn repository","$0 set version latest"],["Download the latest canary release from the Yarn repository","$0 set version canary"],["Download the latest classic release from the Yarn repository","$0 set version classic"],["Download the most recent Yarn 3 build","$0 set version 3.x"],["Download a specific Yarn 2 build","$0 set version 2.0.0-rc.30"],["Switch back to a specific Yarn 1 release","$0 set version 1.22.1"],["Use a release from the local filesystem","$0 set version ./yarn.cjs"],["Use a release from a URL","$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js"],["Download the version used to invoke the command","$0 set version self"]]});async function j0t(t,e){let o=(await rn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(a=>Qr.satisfiesWithPrereleases(a,e));if(o.length===0)throw new it(`No matching release found for range ${de.pretty(t,e,de.Type.RANGE)}.`);return o[0]}async function d2(t,e){let r=await rn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new it(`Tag ${de.pretty(t,e,de.Type.RANGE)} not found`);return r.latest[e]}async function N8(t,e,r,{report:o,useYarnPath:a}){let n,u=async()=>(typeof n>"u"&&(n=await r()),n);if(e===null){let te=await u();await oe.mktempPromise(async le=>{let pe=V.join(le,"yarn.cjs");await oe.writeFilePromise(pe,te);let{stdout:ue}=await Ur.execvp(process.execPath,[fe.fromPortablePath(pe),"--version"],{cwd:le,env:{...t.env,YARN_IGNORE_PATH:"1"}});if(e=ue.trim(),!Xge.default.valid(e))throw new Error(`Invalid semver version. ${de.pretty(t,"yarn --version",de.Type.CODE)} returned: -${e}`)})}let A=t.projectCwd??t.startingCwd,p=V.resolve(A,".yarn/releases"),h=V.resolve(p,`yarn-${e}.cjs`),C=V.relative(t.startingCwd,h),I=_e.isTaggedYarnVersion(e),v=t.get("yarnPath"),b=!I,E=b||!!v||!!a;if(a===!1){if(b)throw new Jt(0,"You explicitly opted out of yarnPath usage in your command line, but the version you specified cannot be represented by Corepack");E=!1}else!E&&!process.env.COREPACK_ROOT&&(o.reportWarning(0,`You don't seem to have ${de.applyHyperlink(t,"Corepack","https://nodejs.org/api/corepack.html")} enabled; we'll have to rely on ${de.applyHyperlink(t,"yarnPath","https://yarnpkg.com/configuration/yarnrc#yarnPath")} instead`),E=!0);if(E){let te=await u();o.reportInfo(0,`Saving the new release in ${de.pretty(t,C,"magenta")}`),await oe.removePromise(V.dirname(h)),await oe.mkdirPromise(V.dirname(h),{recursive:!0}),await oe.writeFilePromise(h,te,{mode:493}),await Ke.updateConfiguration(A,{yarnPath:V.relative(A,h)})}else await oe.removePromise(V.dirname(h)),await Ke.updateConfiguration(A,{yarnPath:Ke.deleteProperty});let F=await Ot.tryFind(A)||new Ot;F.packageManager=`yarn@${I?e:await d2(t,"stable")}`;let N={};F.exportTo(N);let U=V.join(A,Ot.fileName),z=`${JSON.stringify(N,null,F.indent)} -`;return await oe.changeFilePromise(U,z,{automaticNewlines:!0}),{bundleVersion:e}}function Zge(t){return wr[AP(t)]}var q0t=/## (?YN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?
(?:.(?!##))+)/gs;async function G0t(t){let r=`https://repo.yarnpkg.com/${_e.isTaggedYarnVersion(tn)?tn:await d2(t,"canary")}/packages/gatsby/content/advanced/error-codes.md`,o=await rn.get(r,{configuration:t});return new Map(Array.from(o.toString().matchAll(q0t),({groups:a})=>{if(!a)throw new Error("Assertion failed: Expected the match to have been successful");let n=Zge(a.code);if(a.name!==n)throw new Error(`Assertion failed: Invalid error code data: Expected "${a.name}" to be named "${n}"`);return[a.code,a.details]}))}var _h=class extends ut{constructor(){super(...arguments);this.code=ge.String({required:!1,validator:rd(Ey(),[sI(/^YN[0-9]{4}$/)])});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);if(typeof this.code<"u"){let o=Zge(this.code),a=de.pretty(r,o,de.Type.CODE),n=this.cli.format().header(`${this.code} - ${a}`),A=(await G0t(r)).get(this.code),p=typeof A<"u"?de.jsonOrPretty(this.json,r,de.tuple(de.Type.MARKDOWN,{text:A,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description. - -You can help us by editing this page on GitHub \u{1F642}: -${de.jsonOrPretty(this.json,r,de.tuple(de.Type.URL,"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md"))} -`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:o,details:p})} -`):this.context.stdout.write(`${n} - -${p} -`)}else{let o={children:_e.mapAndFilter(Object.entries(wr),([a,n])=>Number.isNaN(Number(a))?_e.mapAndFilter.skip:{label:Wu(Number(a)),value:de.tuple(de.Type.CODE,n)})};$s.emitTree(o,{configuration:r,stdout:this.context.stdout,json:this.json})}}};_h.paths=[["explain"]],_h.usage=nt.Usage({description:"explain an error code",details:` - When the code argument is specified, this command prints its name and its details. - - When used without arguments, this command lists all error codes and their names. - `,examples:[["Explain an error code","$0 explain YN0006"],["List all error codes","$0 explain"]]});Ye();Pt();qt();var $ge=$e(Zo()),Hh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=ge.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=ge.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=ge.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=ge.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=ge.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=ge.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a&&!this.all)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=new Set(this.extra);this.cache&&u.add("cache"),this.dependents&&u.add("dependents"),this.manifest&&u.add("manifest");let A=(le,{recursive:pe})=>{let ue=le.anchoredLocator.locatorHash,ye=new Map,ae=[ue];for(;ae.length>0;){let Ie=ae.shift();if(ye.has(Ie))continue;let Fe=o.storedPackages.get(Ie);if(typeof Fe>"u")throw new Error("Assertion failed: Expected the package to be registered");if(ye.set(Ie,Fe),G.isVirtualLocator(Fe)&&ae.push(G.devirtualizeLocator(Fe).locatorHash),!(!pe&&Ie!==ue))for(let g of Fe.dependencies.values()){let Ee=o.storedResolutions.get(g.descriptorHash);if(typeof Ee>"u")throw new Error("Assertion failed: Expected the resolution to be registered");ae.push(Ee)}}return ye.values()},p=({recursive:le})=>{let pe=new Map;for(let ue of o.workspaces)for(let ye of A(ue,{recursive:le}))pe.set(ye.locatorHash,ye);return pe.values()},h=({all:le,recursive:pe})=>le&&pe?o.storedPackages.values():le?p({recursive:pe}):A(a,{recursive:pe}),C=({all:le,recursive:pe})=>{let ue=h({all:le,recursive:pe}),ye=this.patterns.map(Fe=>{let g=G.parseLocator(Fe),Ee=$ge.default.makeRe(G.stringifyIdent(g)),De=G.isVirtualLocator(g),ce=De?G.devirtualizeLocator(g):g;return ne=>{let ee=G.stringifyIdent(ne);if(!Ee.test(ee))return!1;if(g.reference==="unknown")return!0;let we=G.isVirtualLocator(ne),be=we?G.devirtualizeLocator(ne):ne;return!(De&&we&&g.reference!==ne.reference||ce.reference!==be.reference)}}),ae=_e.sortMap([...ue],Fe=>G.stringifyLocator(Fe));return{selection:ae.filter(Fe=>ye.length===0||ye.some(g=>g(Fe))),sortedLookup:ae}},{selection:I,sortedLookup:v}=C({all:this.all,recursive:this.recursive});if(I.length===0)throw new it("No package matched your request");let b=new Map;if(this.dependents)for(let le of v)for(let pe of le.dependencies.values()){let ue=o.storedResolutions.get(pe.descriptorHash);if(typeof ue>"u")throw new Error("Assertion failed: Expected the resolution to be registered");_e.getArrayWithDefault(b,ue).push(le)}let E=new Map;for(let le of v){if(!G.isVirtualLocator(le))continue;let pe=G.devirtualizeLocator(le);_e.getArrayWithDefault(E,pe.locatorHash).push(le)}let F={},N={children:F},U=r.makeFetcher(),z={project:o,fetcher:U,cache:n,checksums:o.storedChecksums,report:new Qi,cacheOptions:{skipIntegrityCheck:!0}},te=[async(le,pe,ue)=>{if(!pe.has("manifest"))return;let ye=await U.fetch(le,z),ae;try{ae=await Ot.find(ye.prefixPath,{baseFs:ye.packageFs})}finally{ye.releaseFs?.()}ue("Manifest",{License:de.tuple(de.Type.NO_HINT,ae.license),Homepage:de.tuple(de.Type.URL,ae.raw.homepage??null)})},async(le,pe,ue)=>{if(!pe.has("cache"))return;let ye=o.storedChecksums.get(le.locatorHash)??null,ae=n.getLocatorPath(le,ye),Ie;if(ae!==null)try{Ie=await oe.statPromise(ae)}catch{}let Fe=typeof Ie<"u"?[Ie.size,de.Type.SIZE]:void 0;ue("Cache",{Checksum:de.tuple(de.Type.NO_HINT,ye),Path:de.tuple(de.Type.PATH,ae),Size:Fe})}];for(let le of I){let pe=G.isVirtualLocator(le);if(!this.virtuals&&pe)continue;let ue={},ye={value:[le,de.Type.LOCATOR],children:ue};if(F[G.stringifyLocator(le)]=ye,this.nameOnly){delete ye.children;continue}let ae=E.get(le.locatorHash);typeof ae<"u"&&(ue.Instances={label:"Instances",value:de.tuple(de.Type.NUMBER,ae.length)}),ue.Version={label:"Version",value:de.tuple(de.Type.NO_HINT,le.version)};let Ie=(g,Ee)=>{let De={};if(ue[g]=De,Array.isArray(Ee))De.children=Ee.map(ce=>({value:ce}));else{let ce={};De.children=ce;for(let[ne,ee]of Object.entries(Ee))typeof ee>"u"||(ce[ne]={label:ne,value:ee})}};if(!pe){for(let g of te)await g(le,u,Ie);await r.triggerHook(g=>g.fetchPackageInfo,le,u,Ie)}le.bin.size>0&&!pe&&Ie("Exported Binaries",[...le.bin.keys()].map(g=>de.tuple(de.Type.PATH,g)));let Fe=b.get(le.locatorHash);typeof Fe<"u"&&Fe.length>0&&Ie("Dependents",Fe.map(g=>de.tuple(de.Type.LOCATOR,g))),le.dependencies.size>0&&!pe&&Ie("Dependencies",[...le.dependencies.values()].map(g=>{let Ee=o.storedResolutions.get(g.descriptorHash),De=typeof Ee<"u"?o.storedPackages.get(Ee)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:De})})),le.peerDependencies.size>0&&pe&&Ie("Peer dependencies",[...le.peerDependencies.values()].map(g=>{let Ee=le.dependencies.get(g.identHash),De=typeof Ee<"u"?o.storedResolutions.get(Ee.descriptorHash)??null:null,ce=De!==null?o.storedPackages.get(De)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:ce})}))}$s.emitTree(N,{configuration:r,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Hh.paths=[["info"]],Hh.usage=nt.Usage({description:"see information related to packages",details:"\n This command prints various information related to the specified packages, accepting glob patterns.\n\n By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\n\n Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\n\n Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\n ",examples:[["Show information about Lodash","$0 info lodash"]]});Ye();Pt();Ll();var hk=$e($g());qt();var O8=$e(Jn());Za();var Y0t=[{selector:t=>t===-1,name:"nodeLinker",value:"node-modules"},{selector:t=>t!==-1&&t<8,name:"enableGlobalCache",value:!1},{selector:t=>t!==-1&&t<8,name:"compressionLevel",value:"mixed"}],jh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=ge.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=ge.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.refreshLockfile=ge.Boolean("--refresh-lockfile",{description:"Refresh the package metadata stored in the lockfile"});this.checkCache=ge.Boolean("--check-cache",{description:"Always refetch the packages and ensure that their checksums are consistent"});this.checkResolutions=ge.Boolean("--check-resolutions",{description:"Validates that the package resolutions are coherent"});this.inlineBuilds=ge.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.cacheFolder=ge.String("--cache-folder",{hidden:!0});this.frozenLockfile=ge.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=ge.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=ge.Boolean("--non-interactive",{hidden:!0});this.preferOffline=ge.Boolean("--prefer-offline",{hidden:!0});this.production=ge.Boolean("--production",{hidden:!0});this.registry=ge.String("--registry",{hidden:!0});this.silent=ge.Boolean("--silent",{hidden:!0});this.networkTimeout=ge.String("--network-timeout",{hidden:!0})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<"u"&&r.useWithSource("",{enableInlineBuilds:this.inlineBuilds},r.startingCwd,{overwrite:!0});let o=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=await LE({configuration:r,stdout:this.context.stdout},[{option:this.ignoreEngines,message:"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",error:!hk.default.VERCEL},{option:this.registry,message:"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file"},{option:this.preferOffline,message:"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",error:!hk.default.VERCEL},{option:this.production,message:"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",error:!0},{option:this.nonInteractive,message:"The --non-interactive option is deprecated",error:!o},{option:this.frozenLockfile,message:"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",callback:()=>this.immutable=this.frozenLockfile},{option:this.cacheFolder,message:"The cache-folder option has been deprecated; use rc settings instead",error:!hk.default.NETLIFY}]);if(a!==null)return a;let n=this.mode==="update-lockfile";if(n&&(this.immutable||this.immutableCache))throw new it(`${de.pretty(r,"--immutable",de.Type.CODE)} and ${de.pretty(r,"--immutable-cache",de.Type.CODE)} cannot be used with ${de.pretty(r,"--mode=update-lockfile",de.Type.CODE)}`);let u=(this.immutable??r.get("enableImmutableInstalls"))&&!n,A=this.immutableCache&&!n;if(r.projectCwd!==null){let E=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async F=>{let N=!1;await V0t(r,u)&&(F.reportInfo(48,"Automatically removed core plugins that are now builtins \u{1F44D}"),N=!0),await K0t(r,u)&&(F.reportInfo(48,"Automatically fixed merge conflicts \u{1F44D}"),N=!0),N&&F.reportSeparator()});if(E.hasErrors())return E.exitCode()}if(r.projectCwd!==null){let E=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async F=>{if(Ke.telemetry?.isNew)Ke.telemetry.commitTips(),F.reportInfo(65,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),F.reportInfo(65,`Run ${de.pretty(r,"yarn config set --home enableTelemetry 0",de.Type.CODE)} to disable`),F.reportSeparator();else if(Ke.telemetry?.shouldShowTips){let N=await rn.get("https://repo.yarnpkg.com/tags",{configuration:r,jsonResponse:!0}).catch(()=>null);if(N!==null){let U=null;if(tn!==null){let te=O8.default.prerelease(tn)?"canary":"stable",le=N.latest[te];O8.default.gt(le,tn)&&(U=[te,le])}if(U)Ke.telemetry.commitTips(),F.reportInfo(88,`${de.applyStyle(r,`A new ${U[0]} version of Yarn is available:`,de.Style.BOLD)} ${G.prettyReference(r,U[1])}!`),F.reportInfo(88,`Upgrade now by running ${de.pretty(r,`yarn set version ${U[1]}`,de.Type.CODE)}`),F.reportSeparator();else{let z=Ke.telemetry.selectTip(N.tips);z&&(F.reportInfo(89,de.pretty(r,z.message,de.Type.MARKDOWN_INLINE)),z.url&&F.reportInfo(89,`Learn more at ${z.url}`),F.reportSeparator())}}}});if(E.hasErrors())return E.exitCode()}let{project:p,workspace:h}=await St.find(r,this.context.cwd),C=p.lockfileLastVersion;if(C!==null){let E=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async F=>{let N={};for(let U of Y0t)U.selector(C)&&typeof r.sources.get(U.name)>"u"&&(r.use("",{[U.name]:U.value},p.cwd,{overwrite:!0}),N[U.name]=U.value);Object.keys(N).length>0&&(await Ke.updateConfiguration(p.cwd,N),F.reportInfo(87,"Migrated your project to the latest Yarn version \u{1F680}"),F.reportSeparator())});if(E.hasErrors())return E.exitCode()}let I=await Nr.find(r,{immutable:A,check:this.checkCache});if(!h)throw new rr(p.cwd,this.context.cwd);await p.restoreInstallState({restoreResolutions:!1});let v=r.get("enableHardenedMode");(this.refreshLockfile??v)&&(p.lockfileNeedsRefresh=!0);let b=this.checkResolutions??v;return await p.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:I,immutable:u,checkResolutions:b,mode:this.mode})}};jh.paths=[["install"],nt.Default],jh.usage=nt.Usage({description:"install the project dependencies",details:"\n This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of `cacheFolder` in `yarn config` to see where the cache files are stored).\n\n - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n If the `--immutable` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the `immutablePatterns` configuration setting). For backward compatibility we offer an alias under the name of `--frozen-lockfile`, but it will be removed in a later release.\n\n If the `--immutable-cache` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n If the `--refresh-lockfile` option is set, Yarn will keep the same resolution for the packages currently in the lockfile but will refresh their metadata. If used together with `--immutable`, it can validate that the lockfile information are consistent. This flag is enabled by default when Yarn detects it runs within a pull request context.\n\n If the `--check-cache` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n If the `--inline-builds` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n ",examples:[["Install the project","$0 install"],["Validate a project when using Zero-Installs","$0 install --immutable --immutable-cache"],["Validate a project when using Zero-Installs (slightly safer if you accept external PRs)","$0 install --immutable --immutable-cache --check-cache"]]});var W0t="<<<<<<<";async function K0t(t,e){if(!t.projectCwd)return!1;let r=V.join(t.projectCwd,dr.lockfile);if(!await oe.existsPromise(r)||!(await oe.readFilePromise(r,"utf8")).includes(W0t))return!1;if(e)throw new Jt(47,"Cannot autofix a lockfile when running an immutable install");let a=await Ur.execvp("git",["rev-parse","MERGE_HEAD","HEAD"],{cwd:t.projectCwd});if(a.code!==0&&(a=await Ur.execvp("git",["rev-parse","REBASE_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0&&(a=await Ur.execvp("git",["rev-parse","CHERRY_PICK_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0)throw new Jt(83,"Git returned an error when trying to find the commits pertaining to the conflict");let n=await Promise.all(a.stdout.trim().split(/\n/).map(async A=>{let p=await Ur.execvp("git",["show",`${A}:./${dr.lockfile}`],{cwd:t.projectCwd});if(p.code!==0)throw new Jt(83,`Git returned an error when trying to access the lockfile content in ${A}`);try{return Ki(p.stdout)}catch{throw new Jt(46,"A variant of the conflicting lockfile failed to parse")}}));n=n.filter(A=>!!A.__metadata);for(let A of n){if(A.__metadata.version<7)for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=G.parseDescriptor(p,!0),C=t.normalizeDependency(h),I=G.stringifyDescriptor(C);I!==p&&(A[I]=A[p],delete A[p])}for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=A[p].checksum;typeof h=="string"&&h.includes("/")||(A[p].checksum=`${A.__metadata.cacheKey}/${h}`)}}let u=Object.assign({},...n);u.__metadata.version=`${Math.min(...n.map(A=>parseInt(A.__metadata.version??0)))}`,u.__metadata.cacheKey="merged";for(let[A,p]of Object.entries(u))typeof p=="string"&&delete u[A];return await oe.changeFilePromise(r,Ba(u),{automaticNewlines:!0}),!0}async function V0t(t,e){if(!t.projectCwd)return!1;let r=[],o=V.join(t.projectCwd,".yarn/plugins/@yarnpkg");return await Ke.updateConfiguration(t.projectCwd,{plugins:n=>{if(!Array.isArray(n))return n;let u=n.filter(A=>{if(!A.path)return!0;let p=V.resolve(t.projectCwd,A.path),h=I1.has(A.spec)&&V.contains(o,p);return h&&r.push(p),!h});return u.length===0?Ke.deleteProperty:u.length===n.length?n:u}},{immutable:e})?(await Promise.all(r.map(async n=>{await oe.removePromise(n)})),!0):!1}Ye();Pt();qt();var qh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target projects to the current one"});this.private=ge.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target projects to the current one"});this.relative=ge.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destinations=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=o.topLevelWorkspace,A=[];for(let p of this.destinations){let h=V.resolve(this.context.cwd,fe.toPortablePath(p)),C=await Ke.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(C,h);if(o.cwd===I.cwd)throw new it(`Invalid destination '${p}'; Can't link the project to itself`);if(!v)throw new rr(I.cwd,h);if(this.all){let b=!1;for(let E of I.workspaces)E.manifest.name&&(!E.manifest.private||this.private)&&(A.push(E),b=!0);if(!b)throw new it(`No workspace found to be linked in the target project: ${p}`)}else{if(!v.manifest.name)throw new it(`The target workspace at '${p}' doesn't have a name and thus cannot be linked`);if(v.manifest.private&&!this.private)throw new it(`The target workspace at '${p}' is marked private - use the --private flag to link it anyway`);A.push(v)}}for(let p of A){let h=G.stringifyIdent(p.anchoredLocator),C=this.relative?V.relative(o.cwd,p.cwd):p.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${C}`})}return await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};qh.paths=[["link"]],qh.usage=nt.Usage({description:"connect the local project to another one",details:"\n This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\n ",examples:[["Register one or more remote workspaces for use in the current project","$0 link ~/ts-loader ~/jest"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]});qt();var Gh=class extends ut{constructor(){super(...arguments);this.args=ge.Proxy()}async execute(){return this.cli.run(["exec","node",...this.args])}};Gh.paths=[["node"]],Gh.usage=nt.Usage({description:"run node with the hook already setup",details:` - This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). - - The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version. - `,examples:[["Run a Node script","$0 node ./my-script.js"]]});Ye();qt();var Yh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await Ke.findRcFiles(this.context.cwd);return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{for(let u of o)if(!!u.data?.plugins)for(let A of u.data.plugins){if(!A.checksum||!A.spec.match(/^https?:/))continue;let p=await rn.get(A.spec,{configuration:r}),h=wn.makeHash(p);if(A.checksum===h)continue;let C=de.pretty(r,A.path,de.Type.PATH),I=de.pretty(r,A.spec,de.Type.URL),v=`${C} is different from the file provided by ${I}`;n.reportJson({...A,newChecksum:h}),n.reportError(0,v)}})).exitCode()}};Yh.paths=[["plugin","check"]],Yh.usage=nt.Usage({category:"Plugin-related commands",description:"find all third-party plugins that differ from their own spec",details:` - Check only the plugins from https. - - If this command detects any plugin differences in the CI environment, it will throw an error. - `,examples:[["find all third-party plugins that differ from their own spec","$0 plugin check"]]});Ye();Ye();Pt();qt();var sde=Be("os");Ye();Pt();qt();var ede=Be("os");Ye();Ll();qt();var z0t="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function zd(t,e){let r=await rn.get(z0t,{configuration:t}),o=Ki(r.toString());return Object.fromEntries(Object.entries(o).filter(([a,n])=>!e||Qr.satisfiesWithPrereleases(e,n.range??"<4.0.0-rc.1")))}var Wh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{let n=await zd(r,tn);for(let[u,{experimental:A,...p}]of Object.entries(n)){let h=u;A&&(h+=" [experimental]"),a.reportJson({name:u,experimental:A,...p}),a.reportInfo(null,h)}})).exitCode()}};Wh.paths=[["plugin","list"]],Wh.usage=nt.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]});var J0t=/^[0-9]+$/;function tde(t){return J0t.test(t)?`pull/${t}/head`:t}var X0t=({repository:t,branch:e},r)=>[["git","init",fe.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",tde(e)],["git","reset","--hard","FETCH_HEAD"]],Z0t=({branch:t})=>[["git","fetch","origin","--depth=1",tde(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx","-e","packages/yarnpkg-cli/bundles"]],$0t=({plugins:t,noMinify:e},r,o)=>[["yarn","build:cli",...new Array().concat(...t.map(a=>["--plugin",V.resolve(o,a)])),...e?["--no-minify"]:[],"|"],["mv","packages/yarnpkg-cli/bundles/yarn.js",fe.fromPortablePath(r),"|"]],Kh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=ge.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"If set, the bundle will be built but not added to the project"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=ge.Boolean("--skip-plugins",!1,{description:"Skip updating the contrib plugins"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.installPath<"u"?V.resolve(this.context.cwd,fe.toPortablePath(this.installPath)):V.resolve(fe.toPortablePath((0,ede.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Lt.start({configuration:r,stdout:this.context.stdout},async u=>{await M8(this,{configuration:r,report:u,target:a}),u.reportSeparator(),u.reportInfo(0,"Building a fresh bundle"),u.reportSeparator();let A=await Ur.execvp("git",["rev-parse","--short","HEAD"],{cwd:a,strict:!0}),p=V.join(a,`packages/yarnpkg-cli/bundles/yarn-${A.stdout.trim()}.js`);oe.existsSync(p)||(await m2($0t(this,p,a),{configuration:r,context:this.context,target:a}),u.reportSeparator());let h=await oe.readFilePromise(p);if(!this.dryRun){let{bundleVersion:C}=await N8(r,null,async()=>h,{report:u});this.skipPlugins||await egt(this,C,{project:o,report:u,target:a})}})).exitCode()}};Kh.paths=[["set","version","from","sources"]],Kh.usage=nt.Usage({description:"build Yarn from master",details:` - This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project. - - By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \`--skip-plugins\` flag. - `,examples:[["Build Yarn from master","$0 set version from sources"]]});async function m2(t,{configuration:e,context:r,target:o}){for(let[a,...n]of t){let u=n[n.length-1]==="|";if(u&&n.pop(),u)await Ur.pipevp(a,n,{cwd:o,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${de.pretty(e,` $ ${[a,...n].join(" ")}`,"grey")} -`);try{await Ur.execvp(a,n,{cwd:o,strict:!0})}catch(A){throw r.stdout.write(A.stdout||A.stack),A}}}}async function M8(t,{configuration:e,report:r,target:o}){let a=!1;if(!t.force&&oe.existsSync(V.join(o,".git"))){r.reportInfo(0,"Fetching the latest commits"),r.reportSeparator();try{await m2(Z0t(t),{configuration:e,context:t.context,target:o}),a=!0}catch{r.reportSeparator(),r.reportWarning(0,"Repository update failed; we'll try to regenerate it")}}a||(r.reportInfo(0,"Cloning the remote repository"),r.reportSeparator(),await oe.removePromise(o),await oe.mkdirPromise(o,{recursive:!0}),await m2(X0t(t,o),{configuration:e,context:t.context,target:o}))}async function egt(t,e,{project:r,report:o,target:a}){let n=await zd(r.configuration,e),u=new Set(Object.keys(n));for(let A of r.configuration.plugins.keys())!u.has(A)||await U8(A,t,{project:r,report:o,target:a})}Ye();Ye();Pt();qt();var rde=$e(Jn()),nde=Be("url"),ide=Be("vm");var Vh=class extends ut{constructor(){super(...arguments);this.name=ge.String();this.checksum=ge.Boolean("--checksum",!0,{description:"Whether to care if this plugin is modified"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Lt.start({configuration:r,stdout:this.context.stdout},async a=>{let{project:n}=await St.find(r,this.context.cwd),u,A;if(this.name.match(/^\.{0,2}[\\/]/)||fe.isAbsolute(this.name)){let p=V.resolve(this.context.cwd,fe.toPortablePath(this.name));a.reportInfo(0,`Reading ${de.pretty(r,p,de.Type.PATH)}`),u=V.relative(n.cwd,p),A=await oe.readFilePromise(p)}else{let p;if(this.name.match(/^https?:/)){try{new nde.URL(this.name)}catch{throw new Jt(52,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}u=this.name,p=this.name}else{let h=G.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(h.reference!=="unknown"&&!rde.default.valid(h.reference))throw new Jt(0,"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.");let C=G.stringifyIdent(h),I=await zd(r,tn);if(!Object.hasOwn(I,C)){let v=`Couldn't find a plugin named ${G.prettyIdent(r,h)} on the remote registry. -`;throw r.plugins.has(C)?v+=`A plugin named ${G.prettyIdent(r,h)} is already installed; possibly attempting to import a built-in plugin.`:v+=`Note that only the plugins referenced on our website (${de.pretty(r,"https://github.com/yarnpkg/berry/blob/master/plugins.yml",de.Type.URL)}) can be referenced by their name; any other plugin will have to be referenced through its public url (for example ${de.pretty(r,"https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js",de.Type.URL)}).`,new Jt(51,v)}u=C,p=I[C].url,h.reference!=="unknown"?p=p.replace(/\/master\//,`/${C}/${h.reference}/`):tn!==null&&(p=p.replace(/\/master\//,`/@yarnpkg/cli/${tn}/`))}a.reportInfo(0,`Downloading ${de.pretty(r,p,"green")}`),A=await rn.get(p,{configuration:r})}await _8(u,A,{checksum:this.checksum,project:n,report:a})})).exitCode()}};Vh.paths=[["plugin","import"]],Vh.usage=nt.Usage({category:"Plugin-related commands",description:"download a plugin",details:` - This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations. - - Three types of plugin references are accepted: - - - If the plugin is stored within the Yarn repository, it can be referenced by name. - - Third-party plugins can be referenced directly through their public urls. - - Local plugins can be referenced by their path on the disk. - - If the \`--no-checksum\` option is set, Yarn will no longer care if the plugin is modified. - - Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \`@yarnpkg/builder\` package). - `,examples:[['Download and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import @yarnpkg/plugin-exec"],['Download and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import exec"],["Download and activate a community plugin","$0 plugin import https://example.org/path/to/plugin.js"],["Activate a local plugin","$0 plugin import ./path/to/plugin.js"]]});async function _8(t,e,{checksum:r=!0,project:o,report:a}){let{configuration:n}=o,u={},A={exports:u};(0,ide.runInNewContext)(e.toString(),{module:A,exports:u});let h=`.yarn/plugins/${A.exports.name}.cjs`,C=V.resolve(o.cwd,h);a.reportInfo(0,`Saving the new plugin in ${de.pretty(n,h,"magenta")}`),await oe.mkdirPromise(V.dirname(C),{recursive:!0}),await oe.writeFilePromise(C,e);let I={path:h,spec:t};r&&(I.checksum=wn.makeHash(e)),await Ke.addPlugin(o.cwd,[I])}var tgt=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],zh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=typeof this.installPath<"u"?V.resolve(this.context.cwd,fe.toPortablePath(this.installPath)):V.resolve(fe.toPortablePath((0,sde.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Lt.start({configuration:r,stdout:this.context.stdout},async n=>{let{project:u}=await St.find(r,this.context.cwd),A=G.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),p=G.stringifyIdent(A),h=await zd(r,tn);if(!Object.hasOwn(h,p))throw new Jt(51,`Couldn't find a plugin named "${p}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let C=p;await M8(this,{configuration:r,report:n,target:o}),await U8(C,this,{project:u,report:n,target:o})})).exitCode()}};zh.paths=[["plugin","import","from","sources"]],zh.usage=nt.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:` - This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations. - - The plugins can be referenced by their short name if sourced from the official Yarn repository. - `,examples:[['Build and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import from sources @yarnpkg/plugin-exec"],['Build and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import from sources exec"]]});async function U8(t,{context:e,noMinify:r},{project:o,report:a,target:n}){let u=t.replace(/@yarnpkg\//,""),{configuration:A}=o;a.reportSeparator(),a.reportInfo(0,`Building a fresh ${u}`),a.reportSeparator(),await m2(tgt({pluginName:u,noMinify:r},n),{configuration:A,context:e,target:n}),a.reportSeparator();let p=V.resolve(n,`packages/${u}/bundles/${t}.js`),h=await oe.readFilePromise(p);await _8(t,h,{project:o,report:a})}Ye();Pt();qt();var Jh=class extends ut{constructor(){super(...arguments);this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Lt.start({configuration:r,stdout:this.context.stdout},async n=>{let u=this.name,A=G.parseIdent(u);if(!r.plugins.has(u))throw new it(`${G.prettyIdent(r,A)} isn't referenced by the current configuration`);let p=`.yarn/plugins/${u}.cjs`,h=V.resolve(o.cwd,p);oe.existsSync(h)&&(n.reportInfo(0,`Removing ${de.pretty(r,p,de.Type.PATH)}...`),await oe.removePromise(h)),n.reportInfo(0,"Updating the configuration..."),await Ke.updateConfiguration(o.cwd,{plugins:C=>{if(!Array.isArray(C))return C;let I=C.filter(v=>v.path!==p);return I.length===0?Ke.deleteProperty:I.length===C.length?C:I}})})).exitCode()}};Jh.paths=[["plugin","remove"]],Jh.usage=nt.Usage({category:"Plugin-related commands",description:"remove a plugin",details:` - This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration. - - **Note:** The plugins have to be referenced by their name property, which can be obtained using the \`yarn plugin runtime\` command. Shorthands are not allowed. - `,examples:[["Remove a plugin imported from the Yarn repository","$0 plugin remove @yarnpkg/plugin-typescript"],["Remove a plugin imported from a local file","$0 plugin remove my-local-plugin"]]});Ye();qt();var Xh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{for(let n of r.plugins.keys()){let u=this.context.plugins.plugins.has(n),A=n;u&&(A+=" [builtin]"),a.reportJson({name:n,builtin:u}),a.reportInfo(null,`${A}`)}})).exitCode()}};Xh.paths=[["plugin","runtime"]],Xh.usage=nt.Usage({category:"Plugin-related commands",description:"list the active plugins",details:` - This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins. - `,examples:[["List the currently active plugins","$0 plugin runtime"]]});Ye();Ye();qt();var Zh=class extends ut{constructor(){super(...arguments);this.idents=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=new Set;for(let A of this.idents)u.add(G.parseIdent(A).identHash);if(await o.restoreInstallState({restoreResolutions:!1}),await o.resolveEverything({cache:n,report:new Qi}),u.size>0)for(let A of o.storedPackages.values())u.has(A.identHash)&&(o.storedBuildState.delete(A.locatorHash),o.skippedBuilds.delete(A.locatorHash));else o.storedBuildState.clear(),o.skippedBuilds.clear();return await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};Zh.paths=[["rebuild"]],Zh.usage=nt.Usage({description:"rebuild the project's native packages",details:` - This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again. - - Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future). - - By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory. - `,examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]});Ye();Ye();Ye();qt();var H8=$e(Zo());Za();var $h=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.all?o.workspaces:[a],A=["dependencies","devDependencies","peerDependencies"],p=[],h=!1,C=[];for(let E of this.patterns){let F=!1,N=G.parseIdent(E);for(let U of u){let z=[...U.manifest.peerDependenciesMeta.keys()];for(let te of(0,H8.default)(z,E))U.manifest.peerDependenciesMeta.delete(te),h=!0,F=!0;for(let te of A){let le=U.manifest.getForScope(te),pe=[...le.values()].map(ue=>G.stringifyIdent(ue));for(let ue of(0,H8.default)(pe,G.stringifyIdent(N))){let{identHash:ye}=G.parseIdent(ue),ae=le.get(ye);if(typeof ae>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");U.manifest[te].delete(ye),C.push([U,te,ae]),h=!0,F=!0}}}F||p.push(E)}let I=p.length>1?"Patterns":"Pattern",v=p.length>1?"don't":"doesn't",b=this.all?"any":"this";if(p.length>0)throw new it(`${I} ${de.prettyList(r,p,de.Type.CODE)} ${v} match any packages referenced by ${b} workspace`);return h?(await r.triggerMultipleHooks(E=>E.afterWorkspaceDependencyRemoval,C),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})):0}};$h.paths=[["remove"]],$h.usage=nt.Usage({description:"remove dependencies from the project",details:` - This command will remove the packages matching the specified patterns from the current workspace. - - If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are: - - - \`skip-build\` will not run the build scripts at all. Note that this is different from setting \`enableScripts\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run. - - - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost. - - This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them. - `,examples:[["Remove a dependency from the current project","$0 remove lodash"],["Remove a dependency from all workspaces at once","$0 remove lodash --all"],["Remove all dependencies starting with `eslint-`","$0 remove 'eslint-*'"],["Remove all dependencies with the `@babel` scope","$0 remove '@babel/*'"],["Remove all dependencies matching `react-dom` or `react-helmet`","$0 remove 'react-{dom,helmet}'"]]});Ye();Ye();var ode=Be("util"),Jd=class extends ut{async execute(){let e=await Ke.find(this.context.cwd,this.context.plugins),{project:r,workspace:o}=await St.find(e,this.context.cwd);if(!o)throw new rr(r.cwd,this.context.cwd);return(await Lt.start({configuration:e,stdout:this.context.stdout},async n=>{let u=o.manifest.scripts,A=_e.sortMap(u.keys(),C=>C),p={breakLength:1/0,colors:e.get("enableColors"),maxArrayLength:2},h=A.reduce((C,I)=>Math.max(C,I.length),0);for(let[C,I]of u.entries())n.reportInfo(null,`${C.padEnd(h," ")} ${(0,ode.inspect)(I,p)}`)})).exitCode()}};Jd.paths=[["run"]];Ye();Ye();qt();var e0=class extends ut{constructor(){super(...arguments);this.inspect=ge.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=ge.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=ge.Boolean("-T,--top-level",!1,{description:"Check the root workspace for scripts and/or binaries instead of the current one"});this.binariesOnly=ge.Boolean("-B,--binaries-only",!1,{description:"Ignore any user defined scripts and only check for binaries"});this.require=ge.String("--require",{description:"Forwarded to the underlying Node process when executing a binary"});this.silent=ge.Boolean("--silent",{hidden:!0});this.scriptName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a,locator:n}=await St.find(r,this.context.cwd);await o.restoreInstallState();let u=this.topLevel?o.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await un.hasPackageScript(u,this.scriptName,{project:o}))return await un.executePackageScript(u,this.scriptName,this.args,{project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let A=await un.getPackageAccessibleBinaries(u,{project:o});if(A.get(this.scriptName)){let h=[];return this.inspect&&(typeof this.inspect=="string"?h.push(`--inspect=${this.inspect}`):h.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?h.push(`--inspect-brk=${this.inspectBrk}`):h.push("--inspect-brk")),this.require&&h.push(`--require=${this.require}`),await un.executePackageAccessibleBinary(u,this.scriptName,this.args,{cwd:this.context.cwd,project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:h,packageAccessibleBinaries:A})}if(!this.topLevel&&!this.binariesOnly&&a&&this.scriptName.includes(":")){let C=(await Promise.all(o.workspaces.map(async I=>I.manifest.scripts.has(this.scriptName)?I:null))).filter(I=>I!==null);if(C.length===1)return await un.executeWorkspaceScript(C[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${G.prettyLocator(r,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${G.prettyLocator(r,n)}).`);{if(this.scriptName==="global")throw new it("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let h=[this.scriptName].concat(this.args);for(let[C,I]of uC)for(let v of I)if(h.length>=v.length&&JSON.stringify(h.slice(0,v.length))===JSON.stringify(v))throw new it(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${C} plugin. You can install it with "yarn plugin import ${C}".`);throw new it(`Couldn't find a script named "${this.scriptName}".`)}}};e0.paths=[["run"]],e0.usage=nt.Usage({description:"run a script defined in the package.json",details:` - This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace: - - - If the \`scripts\` field from your local package.json contains a matching script name, its definition will get executed. - - - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed. - - - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed. - - Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax). - `,examples:[["Run the tests from the local workspace","$0 run test"],['Same thing, but without the "run" keyword',"$0 test"],["Inspect Webpack while running","$0 run --inspect-brk webpack"]]});Ye();Ye();qt();var t0=class extends ut{constructor(){super(...arguments);this.save=ge.Boolean("-s,--save",!1,{description:"Persist the resolution inside the top-level manifest"});this.descriptor=ge.String();this.resolution=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(await o.restoreInstallState({restoreResolutions:!1}),!a)throw new rr(o.cwd,this.context.cwd);let u=G.parseDescriptor(this.descriptor,!0),A=G.makeDescriptor(u,this.resolution);return o.storedDescriptors.set(u.descriptorHash,u),o.storedDescriptors.set(A.descriptorHash,A),o.resolutionAliases.set(u.descriptorHash,A.descriptorHash),await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};t0.paths=[["set","resolution"]],t0.usage=nt.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]});Ye();Pt();qt();var ade=$e(Zo()),r0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=o.topLevelWorkspace,A=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:p,reference:h}of u.manifest.resolutions)h.startsWith("portal:")&&A.add(p.descriptor.fullName);if(this.leadingArguments.length>0)for(let p of this.leadingArguments){let h=V.resolve(this.context.cwd,fe.toPortablePath(p));if(_e.isPathLike(p)){let C=await Ke.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(C,h);if(!v)throw new rr(I.cwd,h);if(this.all){for(let b of I.workspaces)b.manifest.name&&A.add(G.stringifyIdent(b.anchoredLocator));if(A.size===0)throw new it("No workspace found to be unlinked in the target project")}else{if(!v.manifest.name)throw new it("The target workspace doesn't have a name and thus cannot be unlinked");A.add(G.stringifyIdent(v.anchoredLocator))}}else{let C=[...u.manifest.resolutions.map(({pattern:I})=>I.descriptor.fullName)];for(let I of(0,ade.default)(C,p))A.add(I)}}return u.manifest.resolutions=u.manifest.resolutions.filter(({pattern:p})=>!A.has(p.descriptor.fullName)),await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};r0.paths=[["unlink"]],r0.usage=nt.Usage({description:"disconnect the local project from another one",details:` - This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments. - `,examples:[["Unregister a remote workspace in the current project","$0 unlink ~/ts-loader"],["Unregister all workspaces from a remote project in the current project","$0 unlink ~/jest --all"],["Unregister all previously linked workspaces","$0 unlink --all"],["Unregister all workspaces matching a glob","$0 unlink '@babel/*' 'pkg-{a,b}'"]]});Ye();Ye();Ye();qt();var lde=$e(u2()),j8=$e(Zo());Za();var Kf=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=[...o.storedDescriptors.values()],A=u.map(C=>G.stringifyIdent(C)),p=new Set;for(let C of this.patterns){if(G.parseDescriptor(C).range!=="unknown")throw new it("Ranges aren't allowed when using --recursive");for(let I of(0,j8.default)(A,C)){let v=G.parseIdent(I);p.add(v.identHash)}}let h=u.filter(C=>p.has(C.identHash));for(let C of h)o.storedDescriptors.delete(C.descriptorHash),o.storedResolutions.delete(C.descriptorHash);return await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}async executeUpClassic(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=f2(this,o),h=A?["keep","reuse","project","latest"]:["project","latest"],C=[],I=[];for(let N of this.patterns){let U=!1,z=G.parseDescriptor(N),te=G.stringifyIdent(z);for(let le of o.workspaces)for(let pe of["dependencies","devDependencies"]){let ye=[...le.manifest.getForScope(pe).values()].map(Ie=>G.stringifyIdent(Ie)),ae=te==="*"?ye:(0,j8.default)(ye,te);for(let Ie of ae){let Fe=G.parseIdent(Ie),g=le.manifest[pe].get(Fe.identHash);if(typeof g>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let Ee=G.makeDescriptor(Fe,z.range);C.push(Promise.resolve().then(async()=>[le,pe,g,await p2(Ee,{project:o,workspace:le,cache:n,target:pe,fixed:u,modifier:p,strategies:h})])),U=!0}}U||I.push(N)}if(I.length>1)throw new it(`Patterns ${de.prettyList(r,I,de.Type.CODE)} don't match any packages referenced by any workspace`);if(I.length>0)throw new it(`Pattern ${de.prettyList(r,I,de.Type.CODE)} doesn't match any packages referenced by any workspace`);let v=await Promise.all(C),b=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async N=>{for(let[,,U,{suggestions:z,rejections:te}]of v){let le=z.filter(pe=>pe.descriptor!==null);if(le.length===0){let[pe]=te;if(typeof pe>"u")throw new Error("Assertion failed: Expected an error to have been set");let ue=this.cli.error(pe);o.configuration.get("enableNetwork")?N.reportError(27,`${G.prettyDescriptor(r,U)} can't be resolved to a satisfying range - -${ue}`):N.reportError(27,`${G.prettyDescriptor(r,U)} can't be resolved to a satisfying range (note: network resolution has been disabled) - -${ue}`)}else le.length>1&&!A&&N.reportError(27,`${G.prettyDescriptor(r,U)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(b.hasErrors())return b.exitCode();let E=!1,F=[];for(let[N,U,,{suggestions:z}]of v){let te,le=z.filter(ae=>ae.descriptor!==null),pe=le[0].descriptor,ue=le.every(ae=>G.areDescriptorsEqual(ae.descriptor,pe));le.length===1||ue?te=pe:(E=!0,{answer:te}=await(0,lde.prompt)({type:"select",name:"answer",message:`Which range do you want to use in ${G.prettyWorkspace(r,N)} \u276F ${U}?`,choices:z.map(({descriptor:ae,name:Ie,reason:Fe})=>ae?{name:Ie,hint:Fe,descriptor:ae}:{name:Ie,hint:Fe,disabled:!0}),onCancel:()=>process.exit(130),result(ae){return this.find(ae,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let ye=N.manifest[U].get(te.identHash);if(typeof ye>"u")throw new Error("Assertion failed: This descriptor should have a matching entry");if(ye.descriptorHash!==te.descriptorHash)N.manifest[U].set(te.identHash,te),F.push([N,U,ye,te]);else{let ae=r.makeResolver(),Ie={project:o,resolver:ae},Fe=r.normalizeDependency(ye),g=ae.bindDescriptor(Fe,N.anchoredLocator,Ie);o.forgetResolution(g)}}return await r.triggerMultipleHooks(N=>N.afterWorkspaceDependencyReplacement,F),E&&this.context.stdout.write(` -`),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}};Kf.paths=[["up"]],Kf.usage=nt.Usage({description:"upgrade dependencies across the project",details:"\n This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\n\n If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\n\n If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\n\n The, `-C,--caret`, `-E,--exact` and `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\n\n This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\n ",examples:[["Upgrade all instances of lodash to the latest release","$0 up lodash"],["Upgrade all instances of lodash to the latest release, but ask confirmation for each","$0 up lodash -i"],["Upgrade all instances of lodash to 1.2.3","$0 up lodash@1.2.3"],["Upgrade all instances of packages with the `@babel` scope to the latest release","$0 up '@babel/*'"],["Upgrade all instances of packages containing the word `jest` to the latest release","$0 up '*jest*'"],["Upgrade all instances of packages with the `@babel` scope to 7.0.0","$0 up '@babel/*@7.0.0'"]]}),Kf.schema=[aI("recursive",Gu.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})];Ye();Ye();Ye();qt();var n0=class extends ut{constructor(){super(...arguments);this.recursive=ge.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=ge.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=G.parseIdent(this.package).identHash,u=this.recursive?ngt(o,n,{configuration:r,peers:this.peers}):rgt(o,n,{configuration:r,peers:this.peers});$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1})}};n0.paths=[["why"]],n0.usage=nt.Usage({description:"display the reason why a package is needed",details:` - This command prints the exact reasons why a package appears in the dependency tree. - - If \`-R,--recursive\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named "Foo" when looking for "Bar", it means that "Foo" already got printed higher in the tree. - `,examples:[["Explain why lodash is used in your project","$0 why lodash"]]});function rgt(t,e,{configuration:r,peers:o}){let a=_e.sortMap(t.storedPackages.values(),A=>G.stringifyLocator(A)),n={},u={children:n};for(let A of a){let p={};for(let C of A.dependencies.values()){if(!o&&A.peerDependencies.has(C.identHash))continue;let I=t.storedResolutions.get(C.descriptorHash);if(!I)throw new Error("Assertion failed: The resolution should have been registered");let v=t.storedPackages.get(I);if(!v)throw new Error("Assertion failed: The package should have been registered");if(v.identHash!==e)continue;{let E=G.stringifyLocator(A);n[E]={value:[A,de.Type.LOCATOR],children:p}}let b=G.stringifyLocator(v);p[b]={value:[{descriptor:C,locator:v},de.Type.DEPENDENT]}}}return u}function ngt(t,e,{configuration:r,peers:o}){let a=_e.sortMap(t.workspaces,v=>G.stringifyLocator(v.anchoredLocator)),n=new Set,u=new Set,A=v=>{if(n.has(v.locatorHash))return u.has(v.locatorHash);if(n.add(v.locatorHash),v.identHash===e)return u.add(v.locatorHash),!0;let b=!1;v.identHash===e&&(b=!0);for(let E of v.dependencies.values()){if(!o&&v.peerDependencies.has(E.identHash))continue;let F=t.storedResolutions.get(E.descriptorHash);if(!F)throw new Error("Assertion failed: The resolution should have been registered");let N=t.storedPackages.get(F);if(!N)throw new Error("Assertion failed: The package should have been registered");A(N)&&(b=!0)}return b&&u.add(v.locatorHash),b};for(let v of a)A(v.anchoredPackage);let p=new Set,h={},C={children:h},I=(v,b,E)=>{if(!u.has(v.locatorHash))return;let F=E!==null?de.tuple(de.Type.DEPENDENT,{locator:v,descriptor:E}):de.tuple(de.Type.LOCATOR,v),N={},U={value:F,children:N},z=G.stringifyLocator(v);if(b[z]=U,!p.has(v.locatorHash)&&(p.add(v.locatorHash),!(E!==null&&t.tryWorkspaceByLocator(v))))for(let te of v.dependencies.values()){if(!o&&v.peerDependencies.has(te.identHash))continue;let le=t.storedResolutions.get(te.descriptorHash);if(!le)throw new Error("Assertion failed: The resolution should have been registered");let pe=t.storedPackages.get(le);if(!pe)throw new Error("Assertion failed: The package should have been registered");I(pe,N,te)}};for(let v of a)I(v.anchoredPackage,h,null);return C}Ye();var Z8={};Vt(Z8,{GitFetcher:()=>E2,GitResolver:()=>C2,default:()=>vgt,gitUtils:()=>ra});Ye();Pt();var ra={};Vt(ra,{TreeishProtocols:()=>y2,clone:()=>X8,fetchBase:()=>kde,fetchChangedFiles:()=>Qde,fetchChangedWorkspaces:()=>Igt,fetchRoot:()=>bde,isGitUrl:()=>EC,lsRemote:()=>xde,normalizeLocator:()=>wgt,normalizeRepoUrl:()=>mC,resolveUrl:()=>J8,splitRepoUrl:()=>i0,validateRepoUrl:()=>z8});Ye();Pt();qt();var Dde=$e(Ide()),Pde=$e(mU()),yC=$e(Be("querystring")),K8=$e(Jn());function W8(t,e,r){let o=t.indexOf(r);return t.lastIndexOf(e,o>-1?o:1/0)}function Bde(t){try{return new URL(t)}catch{return}}function Egt(t){let e=W8(t,"@","#"),r=W8(t,":","#");return r>e&&(t=`${t.slice(0,r)}/${t.slice(r+1)}`),W8(t,":","#")===-1&&t.indexOf("//")===-1&&(t=`ssh://${t}`),t}function vde(t){return Bde(t)||Bde(Egt(t))}function mC(t,{git:e=!1}={}){if(t=t.replace(/^git\+https:/,"https:"),t=t.replace(/^(?:github:|https:\/\/github\.com\/|git:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\.git)?(#.*)?$/,"https://github.com/$1/$2.git$3"),t=t.replace(/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/,"https://github.com/$1/$2.git#$3"),e){let r=vde(t);r&&(t=r.href),t=t.replace(/^git\+([^:]+):/,"$1:")}return t}function Sde(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`}}var Cgt=[/^ssh:/,/^git(?:\+[^:]+)?:/,/^(?:git\+)?https?:[^#]+\/[^#]+(?:\.git)(?:#.*)?$/,/^git@[^#]+\/[^#]+\.git(?:#.*)?$/,/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z._0-9-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\.git)?(?:#.*)?$/,/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/],y2=(a=>(a.Commit="commit",a.Head="head",a.Tag="tag",a.Semver="semver",a))(y2||{});function EC(t){return t?Cgt.some(e=>!!t.match(e)):!1}function i0(t){t=mC(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:"head",request:"HEAD"},extra:{}};let r=t.slice(0,e),o=t.slice(e+1);if(o.match(/^[a-z]+=/)){let a=yC.default.parse(o);for(let[p,h]of Object.entries(a))if(typeof h!="string")throw new Error(`Assertion failed: The ${p} parameter must be a literal string`);let n=Object.values(y2).find(p=>Object.hasOwn(a,p)),[u,A]=typeof n<"u"?[n,a[n]]:["head","HEAD"];for(let p of Object.values(y2))delete a[p];return{repo:r,treeish:{protocol:u,request:A},extra:a}}else{let a=o.indexOf(":"),[n,u]=a===-1?[null,o]:[o.slice(0,a),o.slice(a+1)];return{repo:r,treeish:{protocol:n,request:u},extra:{}}}}function wgt(t){return G.makeLocator(t,mC(t.reference))}function z8(t,{configuration:e}){let r=mC(t,{git:!0});if(!rn.getNetworkSettings(`https://${(0,Dde.default)(r).resource}`,{configuration:e}).enableNetwork)throw new Jt(80,`Request to '${r}' has been blocked because of your configuration settings`);return r}async function xde(t,e){let r=z8(t,{configuration:e}),o=await V8("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:Sde()},{configuration:e,normalizedRepoUrl:r}),a=new Map,n=/^([a-f0-9]{40})\t([^\n]+)/gm,u;for(;(u=n.exec(o.stdout))!==null;)a.set(u[2],u[1]);return a}async function J8(t,e){let{repo:r,treeish:{protocol:o,request:a},extra:n}=i0(t),u=await xde(r,e),A=(h,C)=>{switch(h){case"commit":{if(!C.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return yC.default.stringify({...n,commit:C})}case"head":{let I=u.get(C==="HEAD"?C:`refs/heads/${C}`);if(typeof I>"u")throw new Error(`Unknown head ("${C}")`);return yC.default.stringify({...n,commit:I})}case"tag":{let I=u.get(`refs/tags/${C}`);if(typeof I>"u")throw new Error(`Unknown tag ("${C}")`);return yC.default.stringify({...n,commit:I})}case"semver":{let I=Qr.validRange(C);if(!I)throw new Error(`Invalid range ("${C}")`);let v=new Map([...u.entries()].filter(([E])=>E.startsWith("refs/tags/")).map(([E,F])=>[K8.default.parse(E.slice(10)),F]).filter(E=>E[0]!==null)),b=K8.default.maxSatisfying([...v.keys()],I);if(b===null)throw new Error(`No matching range ("${C}")`);return yC.default.stringify({...n,commit:v.get(b)})}case null:{let I;if((I=p("commit",C))!==null||(I=p("tag",C))!==null||(I=p("head",C))!==null)return I;throw C.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${C}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${C}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${h}")`)}},p=(h,C)=>{try{return A(h,C)}catch{return null}};return mC(`${r}#${A(o,a)}`)}async function X8(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:o,request:a}}=i0(t);if(o!=="commit")throw new Error("Invalid treeish protocol when cloning");let n=z8(r,{configuration:e}),u=await oe.mktempPromise(),A={cwd:u,env:Sde()};return await V8("cloning the repository",["clone","-c core.autocrlf=false",n,fe.fromPortablePath(u)],A,{configuration:e,normalizedRepoUrl:n}),await V8("switching branch",["checkout",`${a}`],A,{configuration:e,normalizedRepoUrl:n}),u})}async function bde(t){let e,r=t;do{if(e=r,await oe.existsPromise(V.join(e,".git")))return e;r=V.dirname(e)}while(r!==e);return null}async function kde(t,{baseRefs:e}){if(e.length===0)throw new it("Can't run this command with zero base refs specified.");let r=[];for(let A of e){let{code:p}=await Ur.execvp("git",["merge-base",A,"HEAD"],{cwd:t});p===0&&r.push(A)}if(r.length===0)throw new it(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:o}=await Ur.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),a=o.trim(),{stdout:n}=await Ur.execvp("git",["show","--quiet","--pretty=format:%s",a],{cwd:t,strict:!0}),u=n.trim();return{hash:a,title:u}}async function Qde(t,{base:e,project:r}){let o=_e.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:a}=await Ur.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),n=a.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>V.resolve(t,fe.toPortablePath(h))),{stdout:u}=await Ur.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),A=u.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>V.resolve(t,fe.toPortablePath(h))),p=[...new Set([...n,...A].sort())];return o?p.filter(h=>!V.relative(r.cwd,h).match(o)):p}async function Igt({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let r=[V.resolve(e.cwd,dr.lockfile),V.resolve(e.cwd,e.configuration.get("cacheFolder")),V.resolve(e.cwd,e.configuration.get("installStatePath")),V.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(u=>u.populateYarnPaths,e,u=>{u!=null&&r.push(u)});let o=await bde(e.configuration.projectCwd);if(o==null)throw new it("This command can only be run on Git repositories");let a=await kde(o,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),n=await Qde(o,{base:a.hash,project:e});return new Set(_e.mapAndFilter(n,u=>{let A=e.tryWorkspaceByFilePath(u);return A===null?_e.mapAndFilter.skip:r.some(p=>u.startsWith(p))?_e.mapAndFilter.skip:A}))}async function V8(t,e,r,{configuration:o,normalizedRepoUrl:a}){try{return await Ur.execvp("git",e,{...r,strict:!0})}catch(n){if(!(n instanceof Ur.ExecError))throw n;let u=n.reportExtra,A=n.stderr.toString();throw new Jt(1,`Failed ${t}`,p=>{p.reportError(1,` ${de.prettyField(o,{label:"Repository URL",value:de.tuple(de.Type.URL,a)})}`);for(let h of A.matchAll(/^(.+?): (.*)$/gm)){let[,C,I]=h;C=C.toLowerCase();let v=C==="error"?"Error":`${(0,Pde.default)(C)} Error`;p.reportError(1,` ${de.prettyField(o,{label:v,value:de.tuple(de.Type.NO_HINT,I)})}`)}u?.(p)})}}var E2=class{supports(e,r){return EC(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,a=new Map(r.checksums);a.set(e.locatorHash,o);let n={...r,checksums:a},u=await this.downloadHosted(e,n);if(u!==null)return u;let[A,p,h]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(e,n),...r.cacheOptions});return{packageFs:A,releaseFs:p,prefixPath:G.getIdentVendorPath(e),checksum:h}}async downloadHosted(e,r){return r.project.configuration.reduceHook(o=>o.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let o=await X8(e.reference,r.project.configuration),a=i0(e.reference),n=V.join(o,"package.tgz");await un.prepareExternalProject(o,n,{configuration:r.project.configuration,report:r.report,workspace:a.extra.workspace,locator:e});let u=await oe.readFilePromise(n);return await _e.releaseAfterUseAsync(async()=>await Xi.convertToZip(u,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1}))}};Ye();Ye();var C2=class{supportsDescriptor(e,r){return EC(e.range)}supportsLocator(e,r){return EC(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=await J8(e.range,o.project.configuration);return[G.makeLocator(e,a)]}async getSatisfying(e,r,o,a){let n=i0(e.range);return{locators:o.filter(A=>{if(A.identHash!==e.identHash)return!1;let p=i0(A.reference);return!(n.repo!==p.repo||n.treeish.protocol==="commit"&&n.treeish.request!==p.treeish.request)}),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var Bgt={configuration:{changesetBaseRefs:{description:"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.",type:"STRING",isArray:!0,isNullable:!1,default:["master","origin/master","upstream/master","main","origin/main","upstream/main"]},changesetIgnorePatterns:{description:"Array of glob patterns; files matching them will be ignored when fetching the changed files",type:"STRING",default:[],isArray:!0},cloneConcurrency:{description:"Maximal number of concurrent clones",type:"NUMBER",default:2}},fetchers:[E2],resolvers:[C2]};var vgt=Bgt;qt();var s0=class extends ut{constructor(){super(...arguments);this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.noPrivate=ge.Boolean("--no-private",{description:"Exclude workspaces that have the private field set to true"});this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{let u=this.since?await ra.fetchChangedWorkspaces({ref:this.since,project:o}):o.workspaces,A=new Set(u);if(this.recursive)for(let p of[...u].map(h=>h.getRecursiveWorkspaceDependents()))for(let h of p)A.add(h);for(let p of A){let{manifest:h}=p;if(h.private&&this.noPrivate)continue;let C;if(this.verbose){let I=new Set,v=new Set;for(let b of Ot.hardDependencies)for(let[E,F]of h.getForScope(b)){let N=o.tryWorkspaceByDescriptor(F);N===null?o.workspacesByIdent.has(E)&&v.add(F):I.add(N)}C={workspaceDependencies:Array.from(I).map(b=>b.relativeCwd),mismatchedWorkspaceDependencies:Array.from(v).map(b=>G.stringifyDescriptor(b))}}n.reportInfo(null,`${p.relativeCwd}`),n.reportJson({location:p.relativeCwd,name:h.name?G.stringifyIdent(h.name):null,...C})}})).exitCode()}};s0.paths=[["workspaces","list"]],s0.usage=nt.Usage({category:"Workspace-related commands",description:"list all available workspaces",details:"\n This command will print the list of all workspaces in the project.\n\n - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\n\n - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\n "});Ye();Ye();qt();var o0=class extends ut{constructor(){super(...arguments);this.workspaceName=ge.String();this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=o.workspaces,u=new Map(n.map(p=>[G.stringifyIdent(p.anchoredLocator),p])),A=u.get(this.workspaceName);if(A===void 0){let p=Array.from(u.keys()).sort();throw new it(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: - - ${p.join(` - - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:A.cwd})}};o0.paths=[["workspace"]],o0.usage=nt.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:` - This command will run a given sub-command on a single workspace. - `,examples:[["Add a package to a single workspace","yarn workspace components add -D react"],["Run build script on a single workspace","yarn workspace components run build"]]});var Dgt={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:"BOOLEAN",default:Fde.isCI},defaultSemverRangePrefix:{description:"The default save prefix: '^', '~' or ''",type:"STRING",values:["^","~",""],default:"^"},preferReuse:{description:"If true, `yarn add` will attempt to reuse the most common dependency range in other workspaces.",type:"BOOLEAN",default:!1}},commands:[Qh,Fh,Rh,Th,t0,Kh,Uh,s0,Wd,Kd,dC,Vd,bh,kh,Lh,Nh,Oh,Mh,_h,Hh,jh,qh,r0,Gh,Yh,zh,Vh,Jh,Wh,Xh,Zh,$h,Jd,e0,Kf,n0,o0]},Pgt=Dgt;var iH={};Vt(iH,{default:()=>xgt});Ye();var kt={optional:!0},eH=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{["supports-color"]:kt}}],["got@<11",{dependencies:{["@types/responselike"]:"^1.0.0",["@types/keyv"]:"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{["@types/keyv"]:"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{["vscode-jsonrpc"]:"^5.0.1",["vscode-languageserver-protocol"]:"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{["postcss-html"]:kt,["postcss-jsx"]:kt,["postcss-less"]:kt,["postcss-markdown"]:kt,["postcss-scss"]:kt}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{["tiny-warning"]:"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:kt}}],["snowpack@>=3.3.0",{dependencies:{["node-gyp"]:"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:kt}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@<=0.5.2",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@<=6.3.4",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:kt,"vue-template-compiler":kt}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:kt,"utf-8-validate":kt}}],["react-portal@<4.2.2",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{["babel-polyfill"]:"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{["cross-spawn"]:"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@<=4.6.0-next.3",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@<=5.6.0-next.0",{dependencies:{["prop-types"]:"^15.7.2"}}],["@rebass/forms@*",{dependencies:{["@styled-system/should-forward-prop"]:"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt,"vuetify-loader":kt}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["vue-cli-plugin-vuetify@>=2.4.3",{peerDependencies:{vue:"*"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":kt}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":kt}}],["consolidate@<0.16.0",{peerDependencies:{mustache:"^3.0.0"},peerDependenciesMeta:{mustache:kt}}],["consolidate@<=0.16.0",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:kt,tinyliquid:kt,"liquid-node":kt,jade:kt,"then-jade":kt,dust:kt,"dustjs-helpers":kt,"dustjs-linkedin":kt,swig:kt,"swig-templates":kt,"razor-tmpl":kt,atpl:kt,liquor:kt,twig:kt,ejs:kt,eco:kt,jazz:kt,jqtpl:kt,hamljs:kt,hamlet:kt,whiskers:kt,"haml-coffee":kt,"hogan.js":kt,templayed:kt,handlebars:kt,underscore:kt,lodash:kt,pug:kt,"then-pug":kt,qejs:kt,walrus:kt,mustache:kt,just:kt,ect:kt,mote:kt,toffee:kt,dot:kt,"bracket-template":kt,ractive:kt,nunjucks:kt,htmling:kt,"babel-core":kt,plates:kt,"react-dom":kt,react:kt,"arc-templates":kt,vash:kt,slm:kt,marko:kt,teacup:kt,"coffee-script":kt,squirrelly:kt,twing:kt}}],["vue-loader@<=16.3.3",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"},peerDependenciesMeta:{"@vue/compiler-sfc":kt}}],["vue-loader@^16.7.0",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",vue:"^3.2.13"},peerDependenciesMeta:{"@vue/compiler-sfc":kt,vue:kt}}],["scss-parser@<=1.0.5",{dependencies:{lodash:"^4.17.21"}}],["query-ast@<1.0.5",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}],["skypack@<=0.3.2",{dependencies:{tar:"^6.1.0"}}],["@npmcli/metavuln-calculator@<2.0.0",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@<2.3.0",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@<=0.8.0",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@<3.8.6",{dependencies:{"magic-string":"^0.25.7"}}],["elm-webpack-loader@*",{dependencies:{temp:"^0.9.4"}}],["winston-transport@<=4.4.0",{dependencies:{logform:"^2.2.0"}}],["jest-vue-preprocessor@*",{dependencies:{"@babel/core":"7.8.7","@babel/template":"7.8.6"},peerDependencies:{pug:"^2.0.4"},peerDependenciesMeta:{pug:kt}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:kt}}],["sodium@>=3",{dependencies:{"node-gyp":"^3.8.0"}}],["babel-plugin-graphql-tag@<=3.1.0",{peerDependencies:{graphql:"^14.0.0 || ^15.0.0"}}],["@playwright/test@<=1.14.1",{dependencies:{"jest-matcher-utils":"^26.4.2"}}],...["babel-plugin-remove-graphql-queries@<3.14.0-next.1","babel-preset-gatsby-package@<1.14.0-next.1","create-gatsby@<1.14.0-next.1","gatsby-admin@<0.24.0-next.1","gatsby-cli@<3.14.0-next.1","gatsby-core-utils@<2.14.0-next.1","gatsby-design-tokens@<3.14.0-next.1","gatsby-legacy-polyfills@<1.14.0-next.1","gatsby-plugin-benchmark-reporting@<1.14.0-next.1","gatsby-plugin-graphql-config@<0.23.0-next.1","gatsby-plugin-image@<1.14.0-next.1","gatsby-plugin-mdx@<2.14.0-next.1","gatsby-plugin-netlify-cms@<5.14.0-next.1","gatsby-plugin-no-sourcemaps@<3.14.0-next.1","gatsby-plugin-page-creator@<3.14.0-next.1","gatsby-plugin-preact@<5.14.0-next.1","gatsby-plugin-preload-fonts@<2.14.0-next.1","gatsby-plugin-schema-snapshot@<2.14.0-next.1","gatsby-plugin-styletron@<6.14.0-next.1","gatsby-plugin-subfont@<3.14.0-next.1","gatsby-plugin-utils@<1.14.0-next.1","gatsby-recipes@<0.25.0-next.1","gatsby-source-shopify@<5.6.0-next.1","gatsby-source-wikipedia@<3.14.0-next.1","gatsby-transformer-screenshot@<3.14.0-next.1","gatsby-worker@<0.5.0-next.1"].map(t=>[t,{dependencies:{"@babel/runtime":"^7.14.8"}}]),["gatsby-core-utils@<2.14.0-next.1",{dependencies:{got:"8.3.2"}}],["gatsby-plugin-gatsby-cloud@<=3.1.0-next.0",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["gatsby-plugin-gatsby-cloud@<=3.2.0-next.1",{peerDependencies:{webpack:"*"}}],["babel-plugin-remove-graphql-queries@<=3.14.0-next.1",{dependencies:{"gatsby-core-utils":"^2.8.0-next.1"}}],["gatsby-plugin-netlify@3.13.0-next.1",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["clipanion-v3-codemod@<=0.2.0",{peerDependencies:{jscodeshift:"^0.11.0"}}],["react-live@*",{peerDependencies:{"react-dom":"*",react:"*"}}],["webpack@<4.44.1",{peerDependenciesMeta:{"webpack-cli":kt,"webpack-command":kt}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":kt}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":kt}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:kt,jimp:kt}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":kt,"eslint-import-resolver-typescript":kt,"eslint-import-resolver-webpack":kt,"@typescript-eslint/parser":kt}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":kt}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":kt}}],["terser@<=5.10.0",{dependencies:{acorn:"^8.5.0"}}],["babel-preset-react-app@10.0.x",{dependencies:{"@babel/plugin-proposal-private-property-in-object":"^7.16.0"}}],["eslint-config-react-app@*",{peerDependenciesMeta:{typescript:kt}}],["@vue/eslint-config-typescript@<11.0.0",{peerDependenciesMeta:{typescript:kt}}],["unplugin-vue2-script-setup@<0.9.1",{peerDependencies:{"@vue/composition-api":"^1.4.3","@vue/runtime-dom":"^3.2.26"}}],["@cypress/snapshot@*",{dependencies:{debug:"^3.2.7"}}],["auto-relay@<=0.14.0",{peerDependencies:{"reflect-metadata":"^0.1.13"}}],["vue-template-babel-compiler@<1.2.0",{peerDependencies:{["vue-template-compiler"]:"^2.6.0"}}],["@parcel/transformer-image@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["@parcel/transformer-js@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["parcel@*",{peerDependenciesMeta:{["@parcel/core"]:kt}}],["react-scripts@*",{peerDependencies:{eslint:"*"}}],["focus-trap-react@^8.0.0",{dependencies:{tabbable:"^5.3.2"}}],["react-rnd@<10.3.7",{peerDependencies:{react:">=16.3.0","react-dom":">=16.3.0"}}],["connect-mongo@*",{peerDependencies:{"express-session":"^1.17.1"}}],["vue-i18n@<9",{peerDependencies:{vue:"^2"}}],["vue-router@<4",{peerDependencies:{vue:"^2"}}],["unified@<10",{dependencies:{"@types/unist":"^2.0.0"}}],["react-github-btn@<=1.3.0",{peerDependencies:{react:">=16.3.0"}}],["react-dev-utils@*",{peerDependencies:{typescript:">=2.7",webpack:">=4"},peerDependenciesMeta:{typescript:kt}}],["@asyncapi/react-component@<=1.0.0-next.39",{peerDependencies:{react:">=16.8.0","react-dom":">=16.8.0"}}],["xo@*",{peerDependencies:{webpack:">=1.11.0"},peerDependenciesMeta:{webpack:kt}}],["babel-plugin-remove-graphql-queries@<=4.20.0-next.0",{dependencies:{"@babel/types":"^7.15.4"}}],["gatsby-plugin-page-creator@<=4.20.0-next.1",{dependencies:{"fs-extra":"^10.1.0"}}],["gatsby-plugin-utils@<=3.14.0-next.1",{dependencies:{fastq:"^1.13.0"},peerDependencies:{graphql:"^15.0.0"}}],["gatsby-plugin-mdx@<3.1.0-next.1",{dependencies:{mkdirp:"^1.0.4"}}],["gatsby-plugin-mdx@^2",{peerDependencies:{gatsby:"^3.0.0-next"}}],["fdir@<=5.2.0",{peerDependencies:{picomatch:"2.x"},peerDependenciesMeta:{picomatch:kt}}],["babel-plugin-transform-typescript-metadata@<=0.3.2",{peerDependencies:{"@babel/core":"^7","@babel/traverse":"^7"},peerDependenciesMeta:{"@babel/traverse":kt}}],["graphql-compose@>=9.0.10",{peerDependencies:{graphql:"^14.2.0 || ^15.0.0 || ^16.0.0"}}]];var tH;function Rde(){return typeof tH>"u"&&(tH=Be("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),tH}var rH;function Tde(){return typeof rH>"u"&&(rH=Be("zlib").brotliDecompressSync(Buffer.from("G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=","base64")).toString()),rH}var nH;function Lde(){return typeof nH>"u"&&(nH=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),nH}var Nde=new Map([[G.makeIdent(null,"fsevents").identHash,Rde],[G.makeIdent(null,"resolve").identHash,Tde],[G.makeIdent(null,"typescript").identHash,Lde]]),Sgt={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,o]of eH)e(G.parseDescriptor(r,!0),o)},getBuiltinPatch:async(t,e)=>{let r="compat/";if(!e.startsWith(r))return;let o=G.parseIdent(e.slice(r.length)),a=Nde.get(o.identHash)?.();return typeof a<"u"?a:null},reduceDependency:async(t,e,r,o)=>typeof Nde.get(t.identHash)>"u"?t:G.makeDescriptor(t,G.makeRange({protocol:"patch:",source:G.stringifyDescriptor(t),selector:`optional!builtin`,params:null}))}},xgt=Sgt;var wH={};Vt(wH,{ConstraintsCheckCommand:()=>p0,ConstraintsQueryCommand:()=>A0,ConstraintsSourceCommand:()=>f0,default:()=>tdt});Ye();Ye();I2();var wC=class{constructor(e){this.project=e}createEnvironment(){let e=new CC(["cwd","ident"]),r=new CC(["workspace","type","ident"]),o=new CC(["ident"]),a={manifestUpdates:new Map,reportedErrors:new Map},n=new Map,u=new Map;for(let A of this.project.storedPackages.values()){let p=Array.from(A.peerDependencies.values(),h=>[G.stringifyIdent(h),h.range]);n.set(A.locatorHash,{workspace:null,ident:G.stringifyIdent(A),version:A.version,dependencies:new Map,peerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional!==!0)),optionalPeerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional===!0))})}for(let A of this.project.storedPackages.values()){let p=n.get(A.locatorHash);p.dependencies=new Map(Array.from(A.dependencies.values(),h=>{let C=this.project.storedResolutions.get(h.descriptorHash);if(typeof C>"u")throw new Error("Assertion failed: The resolution should have been registered");let I=n.get(C);if(typeof I>"u")throw new Error("Assertion failed: The package should have been registered");return[G.stringifyIdent(h),I]})),p.dependencies.delete(p.ident)}for(let A of this.project.workspaces){let p=G.stringifyIdent(A.anchoredLocator),h=A.manifest.exportTo({}),C=n.get(A.anchoredLocator.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: The package should have been registered");let I=(F,N,{caller:U=zi.getCaller()}={})=>{let z=w2(F),te=_e.getMapWithDefault(a.manifestUpdates,A.cwd),le=_e.getMapWithDefault(te,z),pe=_e.getSetWithDefault(le,N);U!==null&&pe.add(U)},v=F=>I(F,void 0,{caller:zi.getCaller()}),b=F=>{_e.getArrayWithDefault(a.reportedErrors,A.cwd).push(F)},E=e.insert({cwd:A.relativeCwd,ident:p,manifest:h,pkg:C,set:I,unset:v,error:b});u.set(A,E);for(let F of Ot.allDependencies)for(let N of A.manifest[F].values()){let U=G.stringifyIdent(N),z=()=>{I([F,U],void 0,{caller:zi.getCaller()})},te=pe=>{I([F,U],pe,{caller:zi.getCaller()})},le=null;if(F!=="peerDependencies"&&(F!=="dependencies"||!A.manifest.devDependencies.has(N.identHash))){let pe=A.anchoredPackage.dependencies.get(N.identHash);if(pe){if(typeof pe>"u")throw new Error("Assertion failed: The dependency should have been registered");let ue=this.project.storedResolutions.get(pe.descriptorHash);if(typeof ue>"u")throw new Error("Assertion failed: The resolution should have been registered");let ye=n.get(ue);if(typeof ye>"u")throw new Error("Assertion failed: The package should have been registered");le=ye}}r.insert({workspace:E,ident:U,range:N.range,type:F,resolution:le,update:te,delete:z,error:b})}}for(let A of this.project.storedPackages.values()){let p=this.project.tryWorkspaceByLocator(A);if(!p)continue;let h=u.get(p);if(typeof h>"u")throw new Error("Assertion failed: The workspace should have been registered");let C=n.get(A.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: The package should have been registered");C.workspace=h}return{workspaces:e,dependencies:r,packages:o,result:a}}async process(){let e=this.createEnvironment(),r={Yarn:{workspace:a=>e.workspaces.find(a)[0]??null,workspaces:a=>e.workspaces.find(a),dependency:a=>e.dependencies.find(a)[0]??null,dependencies:a=>e.dependencies.find(a),package:a=>e.packages.find(a)[0]??null,packages:a=>e.packages.find(a)}},o=await this.project.loadUserConfig();return o?.constraints?(await o.constraints(r),e.result):null}};Ye();Ye();qt();var A0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.query=ge.String()}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(S2(),P2)),o=await Ke.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a),u=this.query;return u.endsWith(".")||(u=`${u}.`),(await Lt.start({configuration:o,json:this.json,stdout:this.context.stdout},async p=>{for await(let h of n.query(u)){let C=Array.from(Object.entries(h)),I=C.length,v=C.reduce((b,[E])=>Math.max(b,E.length),0);for(let b=0;b(S2(),P2)),o=await Ke.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a);this.context.stdout.write(this.verbose?n.fullSource:n.source)}};f0.paths=[["constraints","source"]],f0.usage=nt.Usage({category:"Constraints-related commands",description:"print the source code for the constraints",details:"\n This command will print the Prolog source code used by the constraints engine. Adding the `-v,--verbose` flag will print the *full* source code, including the fact database automatically compiled from the workspace manifests.\n ",examples:[["Prints the source code","yarn constraints source"],["Print the source code and the fact database","yarn constraints source -v"]]});Ye();Ye();qt();I2();var p0=class extends ut{constructor(){super(...arguments);this.fix=ge.Boolean("--fix",!1,{description:"Attempt to automatically fix unambiguous issues, following a multi-pass process"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);await o.restoreInstallState();let a=await o.loadUserConfig(),n;if(a?.constraints)n=new wC(o);else{let{Constraints:h}=await Promise.resolve().then(()=>(S2(),P2));n=await h.find(o)}let u,A=!1,p=!1;for(let h=this.fix?10:1;h>0;--h){let C=await n.process();if(!C)break;let{changedWorkspaces:I,remainingErrors:v}=gk(o,C,{fix:this.fix}),b=[];for(let[E,F]of I){let N=E.manifest.indent;E.manifest=new Ot,E.manifest.indent=N,E.manifest.load(F),b.push(E.persistManifest())}if(!(I.size>0&&h>1)){u=qde(v,{configuration:r}),A=!1,p=!0;for(let[,E]of v)for(let F of E)F.fixable?A=!0:p=!1}}if(u.children.length===0)return 0;if(A){let h=p?`Those errors can all be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`:`Errors prefixed by '\u2699' can be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`;await Lt.start({configuration:r,stdout:this.context.stdout,includeNames:!1,includeFooter:!1},async C=>{C.reportInfo(0,h),C.reportSeparator()})}return u.children=_e.sortMap(u.children,h=>h.value[1]),$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1}),1}};p0.paths=[["constraints"]],p0.usage=nt.Usage({category:"Constraints-related commands",description:"check that the project constraints are met",details:` - This command will run constraints on your project and emit errors for each one that is found but isn't met. If any error is emitted the process will exit with a non-zero exit code. - - If the \`--fix\` flag is used, Yarn will attempt to automatically fix the issues the best it can, following a multi-pass process (with a maximum of 10 iterations). Some ambiguous patterns cannot be autofixed, in which case you'll have to manually specify the right resolution. - - For more information as to how to write constraints, please consult our dedicated page on our website: https://yarnpkg.com/features/constraints. - `,examples:[["Check that all constraints are satisfied","yarn constraints"],["Autofix all unmet constraints","yarn constraints --fix"]]});I2();var edt={configuration:{enableConstraintsChecks:{description:"If true, constraints will run during installs",type:"BOOLEAN",default:!1},constraintsPath:{description:"The path of the constraints file.",type:"ABSOLUTE_PATH",default:"./constraints.pro"}},commands:[A0,f0,p0],hooks:{async validateProjectAfterInstall(t,{reportError:e}){if(!t.configuration.get("enableConstraintsChecks"))return;let r=await t.loadUserConfig(),o;if(r?.constraints)o=new wC(t);else{let{Constraints:u}=await Promise.resolve().then(()=>(S2(),P2));o=await u.find(t)}let a=await o.process();if(!a)return;let{remainingErrors:n}=gk(t,a);if(n.size!==0)if(t.configuration.isCI)for(let[u,A]of n)for(let p of A)e(84,`${de.pretty(t.configuration,u.anchoredLocator,de.Type.IDENT)}: ${p.text}`);else e(84,`Constraint check failed; run ${de.pretty(t.configuration,"yarn constraints",de.Type.CODE)} for more details`)}}},tdt=edt;var IH={};Vt(IH,{CreateCommand:()=>em,DlxCommand:()=>h0,default:()=>ndt});Ye();qt();var em=class extends ut{constructor(){super(...arguments);this.pkg=ge.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){let r=[];this.pkg&&r.push("--package",this.pkg),this.quiet&&r.push("--quiet");let o=this.command.replace(/^(@[^@/]+)(@|$)/,"$1/create$2"),a=G.parseDescriptor(o),n=a.name.match(/^create(-|$)/)?a:a.scope?G.makeIdent(a.scope,`create-${a.name}`):G.makeIdent(null,`create-${a.name}`),u=G.stringifyIdent(n);return a.range!=="unknown"&&(u+=`@${a.range}`),this.cli.run(["dlx",...r,u,...this.args])}};em.paths=[["create"]];Ye();Ye();Pt();qt();var h0=class extends ut{constructor(){super(...arguments);this.packages=ge.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){return Ke.telemetry=null,await oe.mktempPromise(async r=>{let o=V.join(r,`dlx-${process.pid}`);await oe.mkdirPromise(o),await oe.writeFilePromise(V.join(o,"package.json"),`{} -`),await oe.writeFilePromise(V.join(o,"yarn.lock"),"");let a=V.join(o,".yarnrc.yml"),n=await Ke.findProjectCwd(this.context.cwd),A={enableGlobalCache:!(await Ke.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),enableTelemetry:!1,logFilters:[{code:Wu(68),level:de.LogLevel.Discard}]},p=n!==null?V.join(n,".yarnrc.yml"):null;p!==null&&oe.existsSync(p)?(await oe.copyFilePromise(p,a),await Ke.updateConfiguration(o,N=>{let U=_e.toMerged(N,A);return Array.isArray(N.plugins)&&(U.plugins=N.plugins.map(z=>{let te=typeof z=="string"?z:z.path,le=fe.isAbsolute(te)?te:fe.resolve(fe.fromPortablePath(n),te);return typeof z=="string"?le:{path:le,spec:z.spec}})),U})):await oe.writeJsonPromise(a,A);let h=this.packages??[this.command],C=G.parseDescriptor(this.command).name,I=await this.cli.run(["add","--fixed","--",...h],{cwd:o,quiet:this.quiet});if(I!==0)return I;this.quiet||this.context.stdout.write(` -`);let v=await Ke.find(o,this.context.plugins),{project:b,workspace:E}=await St.find(v,o);if(E===null)throw new rr(b.cwd,o);await b.restoreInstallState();let F=await un.getWorkspaceAccessibleBinaries(E);return F.has(C)===!1&&F.size===1&&typeof this.packages>"u"&&(C=Array.from(F)[0][0]),await un.executeWorkspaceAccessibleBinary(E,C,this.args,{packageAccessibleBinaries:F,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};h0.paths=[["dlx"]],h0.usage=nt.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"],["Install multiple packages for a single command",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e "console.log('hello!')"`]]});var rdt={commands:[em,h0]},ndt=rdt;var DH={};Vt(DH,{ExecFetcher:()=>b2,ExecResolver:()=>k2,default:()=>odt,execUtils:()=>Ek});Ye();Ye();Pt();var fA="exec:";var Ek={};Vt(Ek,{loadGeneratorFile:()=>x2,makeLocator:()=>vH,makeSpec:()=>gme,parseSpec:()=>BH});Ye();Pt();function BH(t){let{params:e,selector:r}=G.parseRange(t),o=fe.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?G.parseLocator(e.locator):null,path:o}}function gme({parentLocator:t,path:e,generatorHash:r,protocol:o}){let a=t!==null?{locator:G.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return G.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function vH(t,{parentLocator:e,path:r,generatorHash:o,protocol:a}){return G.makeLocator(t,gme({parentLocator:e,path:r,generatorHash:o,protocol:a}))}async function x2(t,e,r){let{parentLocator:o,path:a}=G.parseFileStyleRange(t,{protocol:e}),n=V.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,n.localPath)}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.join(u.prefixPath,a);return await A.readFilePromise(p,"utf8")}var b2=class{supports(e,r){return!!e.reference.startsWith(fA)}getLocalPath(e,r){let{parentLocator:o,path:a}=G.parseFileStyleRange(e.reference,{protocol:fA});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){let o=await x2(e.reference,fA,r);return oe.mktempPromise(async a=>{let n=V.join(a,"generator.js");return await oe.writeFilePromise(n,o),oe.mktempPromise(async u=>{if(await this.generatePackage(u,e,n,r),!oe.existsSync(V.join(u,"build")))throw new Error("The script should have generated a build directory");return await Xi.makeArchiveFromDirectory(V.join(u,"build"),{prefixPath:G.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel")})})})}async generatePackage(e,r,o,a){return await oe.mktempPromise(async n=>{let u=await un.makeScriptEnv({project:a.project,binFolder:n}),A=V.join(e,"runtime.js");return await oe.mktempPromise(async p=>{let h=V.join(p,"buildfile.log"),C=V.join(e,"generator"),I=V.join(e,"build");await oe.mkdirPromise(C),await oe.mkdirPromise(I);let v={tempDir:fe.fromPortablePath(C),buildDir:fe.fromPortablePath(I),locator:G.stringifyLocator(r)};await oe.writeFilePromise(A,` - // Expose 'Module' as a global variable - Object.defineProperty(global, 'Module', { - get: () => require('module'), - configurable: true, - enumerable: false, - }); - - // Expose non-hidden built-in modules as global variables - for (const name of Module.builtinModules.filter((name) => name !== 'module' && !name.startsWith('_'))) { - Object.defineProperty(global, name, { - get: () => require(name), - configurable: true, - enumerable: false, - }); - } - - // Expose the 'execEnv' global variable - Object.defineProperty(global, 'execEnv', { - value: { - ...${JSON.stringify(v)}, - }, - enumerable: true, - }); - `);let b=u.NODE_OPTIONS||"",E=/\s*--require\s+\S*\.pnp\.c?js\s*/g;b=b.replace(E," ").trim(),u.NODE_OPTIONS=b;let{stdout:F,stderr:N}=a.project.configuration.getSubprocessStreams(h,{header:`# This file contains the result of Yarn generating a package (${G.stringifyLocator(r)}) -`,prefix:G.prettyLocator(a.project.configuration,r),report:a.report}),{code:U}=await Ur.pipevp(process.execPath,["--require",fe.fromPortablePath(A),fe.fromPortablePath(o),G.stringifyIdent(r)],{cwd:e,env:u,stdin:null,stdout:F,stderr:N});if(U!==0)throw oe.detachTemp(p),new Error(`Package generation failed (exit code ${U}, logs can be found here: ${de.pretty(a.project.configuration,h,de.Type.PATH)})`)})})}};Ye();Ye();var idt=2,k2=class{supportsDescriptor(e,r){return!!e.range.startsWith(fA)}supportsLocator(e,r){return!!e.reference.startsWith(fA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=BH(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await x2(G.makeRange({protocol:fA,source:a,selector:a,params:{locator:G.stringifyLocator(n)}}),fA,o.fetchOptions),A=wn.makeHash(`${idt}`,u).slice(0,6);return[vH(e,{parentLocator:n,path:a,generatorHash:A,protocol:fA})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var sdt={fetchers:[b2],resolvers:[k2]},odt=sdt;var SH={};Vt(SH,{FileFetcher:()=>T2,FileResolver:()=>L2,TarballFileFetcher:()=>N2,TarballFileResolver:()=>O2,default:()=>cdt,fileUtils:()=>tm});Ye();Pt();var DC=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,Q2=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,Ui="file:";var tm={};Vt(tm,{fetchArchiveFromLocator:()=>R2,makeArchiveFromLocator:()=>Ck,makeBufferFromLocator:()=>PH,makeLocator:()=>PC,makeSpec:()=>dme,parseSpec:()=>F2});Ye();Pt();function F2(t){let{params:e,selector:r}=G.parseRange(t),o=fe.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?G.parseLocator(e.locator):null,path:o}}function dme({parentLocator:t,path:e,hash:r,protocol:o}){let a=t!==null?{locator:G.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return G.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PC(t,{parentLocator:e,path:r,hash:o,protocol:a}){return G.makeLocator(t,dme({parentLocator:e,path:r,hash:o,protocol:a}))}async function R2(t,e){let{parentLocator:r,path:o}=G.parseFileStyleRange(t.reference,{protocol:Ui}),a=V.isAbsolute(o)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await e.fetcher.fetch(r,e),n=a.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,a.localPath)}:a;a!==n&&a.releaseFs&&a.releaseFs();let u=n.packageFs,A=V.join(n.prefixPath,o);return await _e.releaseAfterUseAsync(async()=>await u.readFilePromise(A),n.releaseFs)}async function Ck(t,{protocol:e,fetchOptions:r,inMemory:o=!1}){let{parentLocator:a,path:n}=G.parseFileStyleRange(t.reference,{protocol:e}),u=V.isAbsolute(n)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(a,r),A=u.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,u.localPath)}:u;u!==A&&u.releaseFs&&u.releaseFs();let p=A.packageFs,h=V.join(A.prefixPath,n);return await _e.releaseAfterUseAsync(async()=>await Xi.makeArchiveFromDirectory(h,{baseFs:p,prefixPath:G.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:o}),A.releaseFs)}async function PH(t,{protocol:e,fetchOptions:r}){return(await Ck(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var T2=class{supports(e,r){return!!e.reference.startsWith(Ui)}getLocalPath(e,r){let{parentLocator:o,path:a}=G.parseFileStyleRange(e.reference,{protocol:Ui});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){return Ck(e,{protocol:Ui,fetchOptions:r})}};Ye();Ye();var adt=2,L2=class{supportsDescriptor(e,r){return e.range.match(DC)?!0:!!e.range.startsWith(Ui)}supportsLocator(e,r){return!!e.reference.startsWith(Ui)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return DC.test(e.range)&&(e=G.makeDescriptor(e,`${Ui}${e.range}`)),G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=F2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await PH(G.makeLocator(e,G.makeRange({protocol:Ui,source:a,selector:a,params:{locator:G.stringifyLocator(n)}})),{protocol:Ui,fetchOptions:o.fetchOptions}),A=wn.makeHash(`${adt}`,u).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:A,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};Ye();var N2=class{supports(e,r){return Q2.test(e.reference)?!!e.reference.startsWith(Ui):!1}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),checksum:u}}async fetchFromDisk(e,r){let o=await R2(e,r);return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();Ye();var O2=class{supportsDescriptor(e,r){return Q2.test(e.range)?!!(e.range.startsWith(Ui)||DC.test(e.range)):!1}supportsLocator(e,r){return Q2.test(e.reference)?!!e.reference.startsWith(Ui):!1}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return DC.test(e.range)&&(e=G.makeDescriptor(e,`${Ui}${e.range}`)),G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=F2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=PC(e,{parentLocator:n,path:a,hash:"",protocol:Ui}),A=await R2(u,o.fetchOptions),p=wn.makeHash(A).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:p,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var ldt={fetchers:[N2,T2],resolvers:[O2,L2]},cdt=ldt;var kH={};Vt(kH,{GithubFetcher:()=>M2,default:()=>Adt,githubUtils:()=>wk});Ye();Pt();var wk={};Vt(wk,{invalidGithubUrlMessage:()=>Eme,isGithubUrl:()=>xH,parseGithubUrl:()=>bH});var mme=$e(Be("querystring")),yme=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function xH(t){return t?yme.some(e=>!!t.match(e)):!1}function bH(t){let e;for(let A of yme)if(e=t.match(A),e)break;if(!e)throw new Error(Eme(t));let[,r,o,a,n="master"]=e,{commit:u}=mme.default.parse(n);return n=u||n.replace(/[^:]*:/,""),{auth:r,username:o,reponame:a,treeish:n}}function Eme(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var M2=class{supports(e,r){return!!xH(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await rn.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await oe.mktempPromise(async a=>{let n=new gn(a);await Xi.extractArchiveTo(o,n,{stripComponents:1});let u=ra.splitRepoUrl(e.reference),A=V.join(a,"package.tgz");await un.prepareExternalProject(a,A,{configuration:r.project.configuration,report:r.report,workspace:u.extra.workspace,locator:e});let p=await oe.readFilePromise(A);return await Xi.convertToZip(p,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:o,username:a,reponame:n,treeish:u}=bH(e.reference);return`https://${o?`${o}@`:""}github.com/${a}/${n}/archive/${u}.tar.gz`}};var udt={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let o=new M2;if(!o.supports(e,r))return null;try{return await o.fetch(e,r)}catch{return null}}}},Adt=udt;var QH={};Vt(QH,{TarballHttpFetcher:()=>H2,TarballHttpResolver:()=>j2,default:()=>pdt});Ye();var U2=/^[^?]*\.(?:tar\.gz|tgz)(?:\?.*)?(?:#.*)?$/,_2=/^https?:/;var H2=class{supports(e,r){return U2.test(e.reference)?!!_2.test(e.reference):!1}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await rn.get(e.reference,{configuration:r.project.configuration});return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();var j2=class{supportsDescriptor(e,r){return U2.test(e.range)?!!_2.test(e.range):!1}supportsLocator(e,r){return U2.test(e.reference)?!!_2.test(e.reference):!1}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[G.convertDescriptorToLocator(e)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var fdt={fetchers:[H2],resolvers:[j2]},pdt=fdt;var FH={};Vt(FH,{InitCommand:()=>g0,default:()=>gdt});Ye();Ye();Pt();qt();var g0=class extends ut{constructor(){super(...arguments);this.private=ge.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=ge.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=ge.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.name=ge.String("-n,--name",{description:"Initialize a package with the given name"});this.usev2=ge.Boolean("-2",!1,{hidden:!0});this.yes=ge.Boolean("-y,--yes",{hidden:!0})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return o!==null?await this.executeProxy(r,o):await this.executeRegular(r)}async executeProxy(r,o){if(r.projectCwd!==null&&r.projectCwd!==this.context.cwd)throw new it("Cannot use the --install flag from within a project subdirectory");oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=V.join(this.context.cwd,dr.lockfile);oe.existsSync(a)||await oe.writeFilePromise(a,"");let n=await this.cli.run(["set","version",o],{quiet:!0});if(n!==0)return n;let u=[];return this.private&&u.push("-p"),this.workspace&&u.push("-w"),this.name&&u.push(`-n=${this.name}`),this.yes&&u.push("-y"),await oe.mktempPromise(async A=>{let{code:p}=await Ur.pipevp("yarn",["init",...u],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await un.makeScriptEnv({binFolder:A})});return p})}async executeRegular(r){let o=null;try{o=(await St.find(r,this.context.cwd)).project}catch{o=null}oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=await Ot.tryFind(this.context.cwd),n=a??new Ot,u=Object.fromEntries(r.get("initFields").entries());n.load(u),n.name=n.name??G.makeIdent(r.get("initScope"),this.name??V.basename(this.context.cwd)),n.packageManager=tn&&_e.isTaggedYarnVersion(tn)?`yarn@${tn}`:null,(!a&&this.workspace||this.private)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await oe.mkdirPromise(V.join(this.context.cwd,"packages"),{recursive:!0}),n.workspaceDefinitions=[{pattern:"packages/*"}]);let A={};n.exportTo(A);let p=V.join(this.context.cwd,Ot.fileName);await oe.changeFilePromise(p,`${JSON.stringify(A,null,2)} -`,{automaticNewlines:!0});let h=[p],C=V.join(this.context.cwd,"README.md");if(oe.existsSync(C)||(await oe.writeFilePromise(C,`# ${G.stringifyIdent(n.name)} -`),h.push(C)),!o||o.cwd===this.context.cwd){let I=V.join(this.context.cwd,dr.lockfile);oe.existsSync(I)||(await oe.writeFilePromise(I,""),h.push(I));let b=[".yarn/*","!.yarn/patches","!.yarn/plugins","!.yarn/releases","!.yarn/sdks","!.yarn/versions","","# Swap the comments on the following lines if you wish to use zero-installs","# In that case, don't forget to run `yarn config set enableGlobalCache false`!","# Documentation here: https://yarnpkg.com/features/zero-installs","","#!.yarn/cache",".pnp.*"].map(pe=>`${pe} -`).join(""),E=V.join(this.context.cwd,".gitignore");oe.existsSync(E)||(await oe.writeFilePromise(E,b),h.push(E));let N=["/.yarn/** linguist-vendored","/.yarn/releases/* binary","/.yarn/plugins/**/* binary","/.pnp.* binary linguist-generated"].map(pe=>`${pe} -`).join(""),U=V.join(this.context.cwd,".gitattributes");oe.existsSync(U)||(await oe.writeFilePromise(U,N),h.push(U));let z={["*"]:{endOfLine:"lf",insertFinalNewline:!0},["*.{js,json,yml}"]:{charset:"utf-8",indentStyle:"space",indentSize:2}};_e.mergeIntoTarget(z,r.get("initEditorConfig"));let te=`root = true -`;for(let[pe,ue]of Object.entries(z)){te+=` -[${pe}] -`;for(let[ye,ae]of Object.entries(ue)){let Ie=ye.replace(/[A-Z]/g,Fe=>`_${Fe.toLowerCase()}`);te+=`${Ie} = ${ae} -`}}let le=V.join(this.context.cwd,".editorconfig");oe.existsSync(le)||(await oe.writeFilePromise(le,te),h.push(le)),await this.cli.run(["install"],{quiet:!0}),oe.existsSync(V.join(this.context.cwd,".git"))||(await Ur.execvp("git",["init"],{cwd:this.context.cwd}),await Ur.execvp("git",["add","--",...h],{cwd:this.context.cwd}),await Ur.execvp("git",["commit","--allow-empty","-m","First commit"],{cwd:this.context.cwd}))}}};g0.paths=[["init"]],g0.usage=nt.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]});var hdt={configuration:{initScope:{description:"Scope used when creating packages via the init command",type:"STRING",default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:"MAP",valueDefinition:{description:"",type:"ANY"}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:"MAP",valueDefinition:{description:"",type:"ANY"}}},commands:[g0]},gdt=hdt;var Tj={};Vt(Tj,{SearchCommand:()=>C0,UpgradeInteractiveCommand:()=>I0,default:()=>nIt});Ye();var Cme=$e(Be("os"));function SC({stdout:t}){if(Cme.default.endianness()==="BE")throw new Error("Interactive commands cannot be used on big-endian systems because ink depends on yoga-layout-prebuilt which only supports little-endian architectures");if(!t.isTTY)throw new Error("Interactive commands can only be used inside a TTY environment")}qt();var Fye=$e(JH()),XH={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},fyt=(0,Fye.default)(XH.appId,XH.apiKey).initIndex(XH.indexName),ZH=async(t,e=0)=>await fyt.search(t,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:e,hitsPerPage:10});var HB=["regular","dev","peer"],C0=class extends ut{async execute(){SC(this.context);let{Gem:e}=await Promise.resolve().then(()=>(cQ(),Bj)),{ScrollableItems:r}=await Promise.resolve().then(()=>(pQ(),fQ)),{useKeypress:o}=await Promise.resolve().then(()=>(MB(),Kwe)),{useMinistore:a}=await Promise.resolve().then(()=>(bj(),xj)),{renderForm:n}=await Promise.resolve().then(()=>(mQ(),dQ)),{default:u}=await Promise.resolve().then(()=>$e(nIe())),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useEffect:C,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ke.find(this.context.cwd,this.context.plugins),b=()=>h.createElement(A,{flexDirection:"row"},h.createElement(A,{flexDirection:"column",width:48},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move between packages.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select a package.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," again to change the target."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),E=()=>h.createElement(h.Fragment,null,h.createElement(A,{width:15},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Owner")),h.createElement(A,{width:11},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Version")),h.createElement(A,{width:10},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Downloads"))),F=()=>h.createElement(A,{width:17},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Target")),N=({hit:ae,active:Ie})=>{let[Fe,g]=a(ae.name,null);o({active:Ie},(ce,ne)=>{if(ne.name!=="space")return;if(!Fe){g(HB[0]);return}let ee=HB.indexOf(Fe)+1;ee===HB.length?g(null):g(HB[ee])},[Fe,g]);let Ee=G.parseIdent(ae.name),De=G.prettyIdent(v,Ee);return h.createElement(A,null,h.createElement(A,{width:45},h.createElement(p,{bold:!0,wrap:"wrap"},De)),h.createElement(A,{width:14,marginLeft:1},h.createElement(p,{bold:!0,wrap:"truncate"},ae.owner.name)),h.createElement(A,{width:10,marginLeft:1},h.createElement(p,{italic:!0,wrap:"truncate"},ae.version)),h.createElement(A,{width:16,marginLeft:1},h.createElement(p,null,ae.humanDownloadsLast30Days)))},U=({name:ae,active:Ie})=>{let[Fe]=a(ae,null),g=G.parseIdent(ae);return h.createElement(A,null,h.createElement(A,{width:47},h.createElement(p,{bold:!0}," - ",G.prettyIdent(v,g))),HB.map(Ee=>h.createElement(A,{key:Ee,width:14,marginLeft:1},h.createElement(p,null," ",h.createElement(e,{active:Fe===Ee})," ",h.createElement(p,{bold:!0},Ee)))))},z=()=>h.createElement(A,{marginTop:1},h.createElement(p,null,"Powered by Algolia.")),le=await n(({useSubmit:ae})=>{let Ie=a();ae(Ie);let Fe=Array.from(Ie.keys()).filter(H=>Ie.get(H)!==null),[g,Ee]=I(""),[De,ce]=I(0),[ne,ee]=I([]),we=H=>{H.match(/\t| /)||Ee(H)},be=async()=>{ce(0);let H=await ZH(g);H.query===g&&ee(H.hits)},ht=async()=>{let H=await ZH(g,De+1);H.query===g&&H.page-1===De&&(ce(H.page),ee([...ne,...H.hits]))};return C(()=>{g?be():ee([])},[g]),h.createElement(A,{flexDirection:"column"},h.createElement(b,null),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(p,{bold:!0},"Search: "),h.createElement(A,{width:41},h.createElement(u,{value:g,onChange:we,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),h.createElement(E,null)),ne.length?h.createElement(r,{radius:2,loop:!1,children:ne.map(H=>h.createElement(N,{key:H.name,hit:H,active:!1})),willReachEnd:ht}):h.createElement(p,{color:"gray"},"Start typing..."),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(A,{width:49},h.createElement(p,{bold:!0},"Selected:")),h.createElement(F,null)),Fe.length?Fe.map(H=>h.createElement(U,{key:H,name:H,active:!1})):h.createElement(p,{color:"gray"},"No selected packages..."),h.createElement(z,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof le>"u")return 1;let pe=Array.from(le.keys()).filter(ae=>le.get(ae)==="regular"),ue=Array.from(le.keys()).filter(ae=>le.get(ae)==="dev"),ye=Array.from(le.keys()).filter(ae=>le.get(ae)==="peer");return pe.length&&await this.cli.run(["add",...pe]),ue.length&&await this.cli.run(["add","--dev",...ue]),ye&&await this.cli.run(["add","--peer",...ye]),0}};C0.paths=[["search"]],C0.usage=nt.Usage({category:"Interactive commands",description:"open the search interface",details:` - This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. - `,examples:[["Open the search window","yarn search"]]});Ye();qt();E_();var uIe=$e(Jn()),cIe=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,AIe=(t,e)=>t.length>0?[t.slice(0,e)].concat(AIe(t.slice(e),e)):[],I0=class extends ut{async execute(){SC(this.context);let{ItemOptions:e}=await Promise.resolve().then(()=>(lIe(),aIe)),{Pad:r}=await Promise.resolve().then(()=>(Rj(),oIe)),{ScrollableItems:o}=await Promise.resolve().then(()=>(pQ(),fQ)),{useMinistore:a}=await Promise.resolve().then(()=>(bj(),xj)),{renderForm:n}=await Promise.resolve().then(()=>(mQ(),dQ)),{Box:u,Text:A}=await Promise.resolve().then(()=>$e(ic())),{default:p,useEffect:h,useRef:C,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ke.find(this.context.cwd,this.context.plugins),{project:b,workspace:E}=await St.find(v,this.context.cwd),F=await Nr.find(v);if(!E)throw new rr(b.cwd,this.context.cwd);await b.restoreInstallState({restoreResolutions:!1});let N=this.context.stdout.rows-7,U=(Ee,De)=>{let ce=Ape(Ee,De),ne="";for(let ee of ce)ee.added?ne+=de.pretty(v,ee.value,"green"):ee.removed||(ne+=ee.value);return ne},z=(Ee,De)=>{if(Ee===De)return De;let ce=G.parseRange(Ee),ne=G.parseRange(De),ee=ce.selector.match(cIe),we=ne.selector.match(cIe);if(!ee||!we)return U(Ee,De);let be=["gray","red","yellow","green","magenta"],ht=null,H="";for(let lt=1;lt{let ne=await Jc.fetchDescriptorFrom(Ee,ce,{project:b,cache:F,preserveModifier:De,workspace:E});return ne!==null?ne.range:Ee.range},le=async Ee=>{let De=uIe.default.valid(Ee.range)?`^${Ee.range}`:Ee.range,[ce,ne]=await Promise.all([te(Ee,Ee.range,De).catch(()=>null),te(Ee,Ee.range,"latest").catch(()=>null)]),ee=[{value:null,label:Ee.range}];return ce&&ce!==Ee.range?ee.push({value:ce,label:z(Ee.range,ce)}):ee.push({value:null,label:""}),ne&&ne!==ce&&ne!==Ee.range?ee.push({value:ne,label:z(Ee.range,ne)}):ee.push({value:null,label:""}),ee},pe=()=>p.createElement(u,{flexDirection:"row"},p.createElement(u,{flexDirection:"column",width:49},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select packages.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select versions."))),p.createElement(u,{flexDirection:"column"},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to install.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to abort.")))),ue=()=>p.createElement(u,{flexDirection:"row",paddingTop:1,paddingBottom:1},p.createElement(u,{width:50},p.createElement(A,{bold:!0},p.createElement(A,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Current")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Range")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Latest"))),ye=({active:Ee,descriptor:De,suggestions:ce})=>{let[ne,ee]=a(De.descriptorHash,null),we=G.stringifyIdent(De),be=Math.max(0,45-we.length);return p.createElement(p.Fragment,null,p.createElement(u,null,p.createElement(u,{width:45},p.createElement(A,{bold:!0},G.prettyIdent(v,De)),p.createElement(r,{active:Ee,length:be})),p.createElement(e,{active:Ee,options:ce,value:ne,skewer:!0,onChange:ee,sizes:[17,17,17]})))},ae=({dependencies:Ee})=>{let[De,ce]=I(Ee.map(()=>null)),ne=C(!0),ee=async we=>{let be=await le(we);return be.filter(ht=>ht.label!=="").length<=1?null:{descriptor:we,suggestions:be}};return h(()=>()=>{ne.current=!1},[]),h(()=>{let we=Math.trunc(N*1.75),be=Ee.slice(0,we),ht=Ee.slice(we),H=AIe(ht,N),lt=be.map(ee).reduce(async(Te,ke)=>{await Te;let xe=await ke;xe!==null&&(!ne.current||ce(He=>{let Re=He.findIndex(je=>je===null),ze=[...He];return ze[Re]=xe,ze}))},Promise.resolve());H.reduce((Te,ke)=>Promise.all(ke.map(xe=>Promise.resolve().then(()=>ee(xe)))).then(async xe=>{xe=xe.filter(He=>He!==null),await Te,ne.current&&ce(He=>{let Re=He.findIndex(ze=>ze===null);return He.slice(0,Re).concat(xe).concat(He.slice(Re+xe.length))})}),lt).then(()=>{ne.current&&ce(Te=>Te.filter(ke=>ke!==null))})},[]),De.length?p.createElement(o,{radius:N>>1,children:De.map((we,be)=>we!==null?p.createElement(ye,{key:be,active:!1,descriptor:we.descriptor,suggestions:we.suggestions}):p.createElement(A,{key:be},"Loading..."))}):p.createElement(A,null,"No upgrades found")},Fe=await n(({useSubmit:Ee})=>{Ee(a());let De=new Map;for(let ne of b.workspaces)for(let ee of["dependencies","devDependencies"])for(let we of ne.manifest[ee].values())b.tryWorkspaceByDescriptor(we)===null&&(we.range.startsWith("link:")||De.set(we.descriptorHash,we));let ce=_e.sortMap(De.values(),ne=>G.stringifyDescriptor(ne));return p.createElement(u,{flexDirection:"column"},p.createElement(pe,null),p.createElement(ue,null),p.createElement(ae,{dependencies:ce}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Fe>"u")return 1;let g=!1;for(let Ee of b.workspaces)for(let De of["dependencies","devDependencies"]){let ce=Ee.manifest[De];for(let ne of ce.values()){let ee=Fe.get(ne.descriptorHash);typeof ee<"u"&&ee!==null&&(ce.set(ne.identHash,G.makeDescriptor(ne,ee)),g=!0)}}return g?await b.installWithNewReport({quiet:this.context.quiet,stdout:this.context.stdout},{cache:F}):0}};I0.paths=[["upgrade-interactive"]],I0.usage=nt.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` - This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. - `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var rIt={commands:[C0,I0]},nIt=rIt;var Lj={};Vt(Lj,{LinkFetcher:()=>qB,LinkResolver:()=>GB,PortalFetcher:()=>YB,PortalResolver:()=>WB,default:()=>sIt});Ye();Pt();var $f="portal:",ep="link:";var qB=class{supports(e,r){return!!e.reference.startsWith(ep)}getLocalPath(e,r){let{parentLocator:o,path:a}=G.parseFileStyleRange(e.reference,{protocol:ep});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=G.parseFileStyleRange(e.reference,{protocol:ep}),n=V.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0}}};Ye();Pt();var GB=class{supportsDescriptor(e,r){return!!e.range.startsWith(ep)}supportsLocator(e,r){return!!e.reference.startsWith(ep)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(ep.length);return[G.makeLocator(e,`${ep}${fe.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){return{...e,version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};Ye();Pt();var YB=class{supports(e,r){return!!e.reference.startsWith($f)}getLocalPath(e,r){let{parentLocator:o,path:a}=G.parseFileStyleRange(e.reference,{protocol:$f});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=G.parseFileStyleRange(e.reference,{protocol:$f}),n=V.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot}}};Ye();Ye();Pt();var WB=class{supportsDescriptor(e,r){return!!e.range.startsWith($f)}supportsLocator(e,r){return!!e.reference.startsWith($f)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice($f.length);return[G.makeLocator(e,`${$f}${fe.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var iIt={fetchers:[qB,YB],resolvers:[GB,WB]},sIt=iIt;var Eq={};Vt(Eq,{NodeModulesLinker:()=>lv,NodeModulesMode:()=>gq,PnpLooseLinker:()=>cv,default:()=>w1t});Pt();Ye();Pt();Pt();var Oj=(t,e)=>`${t}@${e}`,fIe=(t,e)=>{let r=e.indexOf("#"),o=r>=0?e.substring(r+1):e;return Oj(t,o)};var gIe=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),o=e.check||r>=9,a=e.hoistingLimits||new Map,n={check:o,debugLevel:r,hoistingLimits:a,fastLookupPossible:!0},u;n.debugLevel>=0&&(u=Date.now());let A=fIt(t,n),p=!1,h=0;do p=Mj(A,[A],new Set([A.locator]),new Map,n).anotherRoundNeeded,n.fastLookupPossible=!1,h++;while(p);if(n.debugLevel>=0&&console.log(`hoist time: ${Date.now()-u}ms, rounds: ${h}`),n.debugLevel>=1){let C=KB(A);if(Mj(A,[A],new Set([A.locator]),new Map,n).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: -${C}, next tree: -${KB(A)}`);let v=dIe(A);if(v)throw new Error(`${v}, after hoisting finished: -${KB(A)}`)}return n.debugLevel>=2&&console.log(KB(A)),pIt(A)},oIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=n=>{if(!o.has(n)){o.add(n);for(let u of n.hoistedDependencies.values())r.set(u.name,u);for(let u of n.dependencies.values())n.peerNames.has(u.name)||a(u)}};return a(e),r},aIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=new Set,n=(u,A)=>{if(o.has(u))return;o.add(u);for(let h of u.hoistedDependencies.values())if(!A.has(h.name)){let C;for(let I of t)C=I.dependencies.get(h.name),C&&r.set(C.name,C)}let p=new Set;for(let h of u.dependencies.values())p.add(h.name);for(let h of u.dependencies.values())u.peerNames.has(h.name)||n(h,p)};return n(e,a),r},pIe=(t,e)=>{if(e.decoupled)return e;let{name:r,references:o,ident:a,locator:n,dependencies:u,originalDependencies:A,hoistedDependencies:p,peerNames:h,reasons:C,isHoistBorder:I,hoistPriority:v,dependencyKind:b,hoistedFrom:E,hoistedTo:F}=e,N={name:r,references:new Set(o),ident:a,locator:n,dependencies:new Map(u),originalDependencies:new Map(A),hoistedDependencies:new Map(p),peerNames:new Set(h),reasons:new Map(C),decoupled:!0,isHoistBorder:I,hoistPriority:v,dependencyKind:b,hoistedFrom:new Map(E),hoistedTo:new Map(F)},U=N.dependencies.get(r);return U&&U.ident==N.ident&&N.dependencies.set(r,N),t.dependencies.set(N.name,N),N},lIt=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let a of t.dependencies.values())t.peerNames.has(a.name)||r.set(a.name,[a.ident]);let o=Array.from(e.keys());o.sort((a,n)=>{let u=e.get(a),A=e.get(n);return A.hoistPriority!==u.hoistPriority?A.hoistPriority-u.hoistPriority:A.peerDependents.size!==u.peerDependents.size?A.peerDependents.size-u.peerDependents.size:A.dependents.size-u.dependents.size});for(let a of o){let n=a.substring(0,a.indexOf("@",1)),u=a.substring(n.length+1);if(!t.peerNames.has(n)){let A=r.get(n);A||(A=[],r.set(n,A)),A.indexOf(u)<0&&A.push(u)}}return r},Nj=t=>{let e=new Set,r=(o,a=new Set)=>{if(!a.has(o)){a.add(o);for(let n of o.peerNames)if(!t.peerNames.has(n)){let u=t.dependencies.get(n);u&&!e.has(u)&&r(u,a)}e.add(o)}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||r(o);return e},Mj=(t,e,r,o,a,n=new Set)=>{let u=e[e.length-1];if(n.has(u))return{anotherRoundNeeded:!1,isGraphChanged:!1};n.add(u);let A=hIt(u),p=lIt(u,A),h=t==u?new Map:a.fastLookupPossible?oIt(e):aIt(e),C,I=!1,v=!1,b=new Map(Array.from(p.entries()).map(([F,N])=>[F,N[0]])),E=new Map;do{let F=AIt(t,e,r,h,b,p,o,E,a);F.isGraphChanged&&(v=!0),F.anotherRoundNeeded&&(I=!0),C=!1;for(let[N,U]of p)U.length>1&&!u.dependencies.has(N)&&(b.delete(N),U.shift(),b.set(N,U[0]),C=!0)}while(C);for(let F of u.dependencies.values())if(!u.peerNames.has(F.name)&&!r.has(F.locator)){r.add(F.locator);let N=Mj(t,[...e,F],r,E,a);N.isGraphChanged&&(v=!0),N.anotherRoundNeeded&&(I=!0),r.delete(F.locator)}return{anotherRoundNeeded:I,isGraphChanged:v}},cIt=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},uIt=(t,e,r,o,a,n,u,A,{outputReason:p,fastLookupPossible:h})=>{let C,I=null,v=new Set;p&&(C=`${Array.from(e).map(N=>no(N)).join("\u2192")}`);let b=r[r.length-1],F=!(o.ident===b.ident);if(p&&!F&&(I="- self-reference"),F&&(F=o.dependencyKind!==1,p&&!F&&(I="- workspace")),F&&o.dependencyKind===2&&(F=!cIt(o),p&&!F&&(I="- external soft link with unhoisted dependencies")),F&&(F=b.dependencyKind!==1||b.hoistedFrom.has(o.name)||e.size===1,p&&!F&&(I=b.reasons.get(o.name))),F&&(F=!t.peerNames.has(o.name),p&&!F&&(I=`- cannot shadow peer: ${no(t.originalDependencies.get(o.name).locator)} at ${C}`)),F){let N=!1,U=a.get(o.name);if(N=!U||U.ident===o.ident,p&&!N&&(I=`- filled by: ${no(U.locator)} at ${C}`),N)for(let z=r.length-1;z>=1;z--){let le=r[z].dependencies.get(o.name);if(le&&le.ident!==o.ident){N=!1;let pe=A.get(b);pe||(pe=new Set,A.set(b,pe)),pe.add(o.name),p&&(I=`- filled by ${no(le.locator)} at ${r.slice(0,z).map(ue=>no(ue.locator)).join("\u2192")}`);break}}F=N}if(F&&(F=n.get(o.name)===o.ident,p&&!F&&(I=`- filled by: ${no(u.get(o.name)[0])} at ${C}`)),F){let N=!0,U=new Set(o.peerNames);for(let z=r.length-1;z>=1;z--){let te=r[z];for(let le of U){if(te.peerNames.has(le)&&te.originalDependencies.has(le))continue;let pe=te.dependencies.get(le);pe&&t.dependencies.get(le)!==pe&&(z===r.length-1?v.add(pe):(v=null,N=!1,p&&(I=`- peer dependency ${no(pe.locator)} from parent ${no(te.locator)} was not hoisted to ${C}`))),U.delete(le)}if(!N)break}F=N}if(F&&!h)for(let N of o.hoistedDependencies.values()){let U=a.get(N.name)||t.dependencies.get(N.name);if(!U||N.ident!==U.ident){F=!1,p&&(I=`- previously hoisted dependency mismatch, needed: ${no(N.locator)}, available: ${no(U?.locator)}`);break}}return v!==null&&v.size>0?{isHoistable:2,dependsOn:v,reason:I}:{isHoistable:F?0:1,reason:I}},yQ=t=>`${t.name}@${t.locator}`,AIt=(t,e,r,o,a,n,u,A,p)=>{let h=e[e.length-1],C=new Set,I=!1,v=!1,b=(U,z,te,le,pe)=>{if(C.has(le))return;let ue=[...z,yQ(le)],ye=[...te,yQ(le)],ae=new Map,Ie=new Map;for(let ce of Nj(le)){let ne=uIt(h,r,[h,...U,le],ce,o,a,n,A,{outputReason:p.debugLevel>=2,fastLookupPossible:p.fastLookupPossible});if(Ie.set(ce,ne),ne.isHoistable===2)for(let ee of ne.dependsOn){let we=ae.get(ee.name)||new Set;we.add(ce.name),ae.set(ee.name,we)}}let Fe=new Set,g=(ce,ne,ee)=>{if(!Fe.has(ce)){Fe.add(ce),Ie.set(ce,{isHoistable:1,reason:ee});for(let we of ae.get(ce.name)||[])g(le.dependencies.get(we),ne,p.debugLevel>=2?`- peer dependency ${no(ce.locator)} from parent ${no(le.locator)} was not hoisted`:"")}};for(let[ce,ne]of Ie)ne.isHoistable===1&&g(ce,ne,ne.reason);let Ee=!1;for(let ce of Ie.keys())if(!Fe.has(ce)){v=!0;let ne=u.get(le);ne&&ne.has(ce.name)&&(I=!0),Ee=!0,le.dependencies.delete(ce.name),le.hoistedDependencies.set(ce.name,ce),le.reasons.delete(ce.name);let ee=h.dependencies.get(ce.name);if(p.debugLevel>=2){let we=Array.from(z).concat([le.locator]).map(ht=>no(ht)).join("\u2192"),be=h.hoistedFrom.get(ce.name);be||(be=[],h.hoistedFrom.set(ce.name,be)),be.push(we),le.hoistedTo.set(ce.name,Array.from(e).map(ht=>no(ht.locator)).join("\u2192"))}if(!ee)h.ident!==ce.ident&&(h.dependencies.set(ce.name,ce),pe.add(ce));else for(let we of ce.references)ee.references.add(we)}if(le.dependencyKind===2&&Ee&&(I=!0),p.check){let ce=dIe(t);if(ce)throw new Error(`${ce}, after hoisting dependencies of ${[h,...U,le].map(ne=>no(ne.locator)).join("\u2192")}: -${KB(t)}`)}let De=Nj(le);for(let ce of De)if(Fe.has(ce)){let ne=Ie.get(ce);if((a.get(ce.name)===ce.ident||!le.reasons.has(ce.name))&&ne.isHoistable!==0&&le.reasons.set(ce.name,ne.reason),!ce.isHoistBorder&&ye.indexOf(yQ(ce))<0){C.add(le);let we=pIe(le,ce);b([...U,le],ue,ye,we,F),C.delete(le)}}},E,F=new Set(Nj(h)),N=Array.from(e).map(U=>yQ(U));do{E=F,F=new Set;for(let U of E){if(U.locator===h.locator||U.isHoistBorder)continue;let z=pIe(h,U);b([],Array.from(r),N,z,F)}}while(F.size>0);return{anotherRoundNeeded:I,isGraphChanged:v}},dIe=t=>{let e=[],r=new Set,o=new Set,a=(n,u,A)=>{if(r.has(n)||(r.add(n),o.has(n)))return;let p=new Map(u);for(let h of n.dependencies.values())n.peerNames.has(h.name)||p.set(h.name,h);for(let h of n.originalDependencies.values()){let C=p.get(h.name),I=()=>`${Array.from(o).concat([n]).map(v=>no(v.locator)).join("\u2192")}`;if(n.peerNames.has(h.name)){let v=u.get(h.name);(v!==C||!v||v.ident!==h.ident)&&e.push(`${I()} - broken peer promise: expected ${h.ident} but found ${v&&v.ident}`)}else{let v=A.hoistedFrom.get(n.name),b=n.hoistedTo.get(h.name),E=`${v?` hoisted from ${v.join(", ")}`:""}`,F=`${b?` hoisted to ${b}`:""}`,N=`${I()}${E}`;C?C.ident!==h.ident&&e.push(`${N} - broken require promise for ${h.name}${F}: expected ${h.ident}, but found: ${C.ident}`):e.push(`${N} - broken require promise: no required dependency ${h.name}${F} found`)}}o.add(n);for(let h of n.dependencies.values())n.peerNames.has(h.name)||a(h,p,n);o.delete(n)};return a(t,t.dependencies,t),e.join(` -`)},fIt=(t,e)=>{let{identName:r,name:o,reference:a,peerNames:n}=t,u={name:o,references:new Set([a]),locator:Oj(r,a),ident:fIe(r,a),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(n),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},A=new Map([[t,u]]),p=(h,C)=>{let I=A.get(h),v=!!I;if(!I){let{name:b,identName:E,reference:F,peerNames:N,hoistPriority:U,dependencyKind:z}=h,te=e.hoistingLimits.get(C.locator);I={name:b,references:new Set([F]),locator:Oj(E,F),ident:fIe(E,F),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(N),reasons:new Map,decoupled:!0,isHoistBorder:te?te.has(b):!1,hoistPriority:U||0,dependencyKind:z||0,hoistedFrom:new Map,hoistedTo:new Map},A.set(h,I)}if(C.dependencies.set(h.name,I),C.originalDependencies.set(h.name,I),v){let b=new Set,E=F=>{if(!b.has(F)){b.add(F),F.decoupled=!1;for(let N of F.dependencies.values())F.peerNames.has(N.name)||E(N)}};E(I)}else for(let b of h.dependencies)p(b,I)};for(let h of t.dependencies)p(h,u);return u},Uj=t=>t.substring(0,t.indexOf("@",1)),pIt=t=>{let e={name:t.name,identName:Uj(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),o=(a,n,u)=>{let A=r.has(a),p;if(n===a)p=u;else{let{name:h,references:C,locator:I}=a;p={name:h,identName:Uj(I),references:C,dependencies:new Set}}if(u.dependencies.add(p),!A){r.add(a);for(let h of a.dependencies.values())a.peerNames.has(h.name)||o(h,a,p);r.delete(a)}};for(let a of t.dependencies.values())o(a,t,e);return e},hIt=t=>{let e=new Map,r=new Set([t]),o=u=>`${u.name}@${u.ident}`,a=u=>{let A=o(u),p=e.get(A);return p||(p={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(A,p)),p},n=(u,A)=>{let p=!!r.has(A);if(a(A).dependents.add(u.ident),!p){r.add(A);for(let C of A.dependencies.values()){let I=a(C);I.hoistPriority=Math.max(I.hoistPriority,C.hoistPriority),A.peerNames.has(C.name)?I.peerDependents.add(A.ident):n(A,C)}}};for(let u of t.dependencies.values())t.peerNames.has(u.name)||n(t,u);return e},no=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let o=t.substring(e+1);if(o==="workspace:.")return".";if(o){let a=(o.indexOf("#")>0?o.split("#")[1]:o).replace("npm:","");return o.startsWith("virtual")&&(r=`v:${r}`),a.startsWith("workspace")&&(r=`w:${r}`,a=""),`${r}${a?`@${a}`:""}`}else return`${r}`},hIe=5e4,KB=t=>{let e=0,r=(a,n,u="")=>{if(e>hIe||n.has(a))return"";e++;let A=Array.from(a.dependencies.values()).sort((h,C)=>h.name===C.name?0:h.name>C.name?1:-1),p="";n.add(a);for(let h=0;h":"")+(v!==C.name?`a:${C.name}:`:"")+no(C.locator)+(I?` ${I}`:"")} -`,p+=r(C,n,`${u}${hhIe?` -Tree is too large, part of the tree has been dunped -`:"")};var VB=(o=>(o.WORKSPACES="workspaces",o.DEPENDENCIES="dependencies",o.NONE="none",o))(VB||{}),mIe="node_modules",pm="$wsroot$";var zB=(t,e)=>{let{packageTree:r,hoistingLimits:o,errors:a,preserveSymlinksRequired:n}=dIt(t,e),u=null;if(a.length===0){let A=gIe(r,{hoistingLimits:o});u=yIt(t,A,e)}return{tree:u,errors:a,preserveSymlinksRequired:n}},gA=t=>`${t.name}@${t.reference}`,Hj=t=>{let e=new Map;for(let[r,o]of t.entries())if(!o.dirList){let a=e.get(o.locator);a||(a={target:o.target,linkType:o.linkType,locations:[],aliases:o.aliases},e.set(o.locator,a)),a.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((o,a)=>{let n=o.split(V.delimiter).length,u=a.split(V.delimiter).length;return a===o?0:n!==u?u-n:a>o?1:-1});return e},yIe=(t,e)=>{let r=G.isVirtualLocator(t)?G.devirtualizeLocator(t):t,o=G.isVirtualLocator(e)?G.devirtualizeLocator(e):e;return G.areLocatorsEqual(r,o)},_j=(t,e,r,o)=>{if(t.linkType!=="SOFT")return!1;let a=fe.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return V.contains(o,a)===null},gIt=t=>{let e=t.getPackageInformation(t.topLevel);if(e===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");if(t.findPackageLocator(e.packageLocation)===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let o=fe.toPortablePath(e.packageLocation.slice(0,-1)),a=new Map,n={children:new Map},u=t.getDependencyTreeRoots(),A=new Map,p=new Set,h=(v,b)=>{let E=gA(v);if(p.has(E))return;p.add(E);let F=t.getPackageInformation(v);if(F){let N=b?gA(b):"";if(gA(v)!==N&&F.linkType==="SOFT"&&!_j(F,v,t,o)){let U=EIe(F,v,t);(!A.get(U)||v.reference.startsWith("workspace:"))&&A.set(U,v)}for(let[U,z]of F.packageDependencies)z!==null&&(F.packagePeers.has(U)||h(t.getLocator(U,z),v))}};for(let v of u)h(v,null);let C=o.split(V.sep);for(let v of A.values()){let b=t.getPackageInformation(v),F=fe.toPortablePath(b.packageLocation.slice(0,-1)).split(V.sep).slice(C.length),N=n;for(let U of F){let z=N.children.get(U);z||(z={children:new Map},N.children.set(U,z)),N=z}N.workspaceLocator=v}let I=(v,b)=>{if(v.workspaceLocator){let E=gA(b),F=a.get(E);F||(F=new Set,a.set(E,F)),F.add(v.workspaceLocator)}for(let E of v.children.values())I(E,v.workspaceLocator||b)};for(let v of n.children.values())I(v,n.workspaceLocator);return a},dIt=(t,e)=>{let r=[],o=!1,a=new Map,n=gIt(t),u=t.getPackageInformation(t.topLevel);if(u===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let A=t.findPackageLocator(u.packageLocation);if(A===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let p=fe.toPortablePath(u.packageLocation.slice(0,-1)),h={name:A.name,identName:A.name,reference:A.reference,peerNames:u.packagePeers,dependencies:new Set,dependencyKind:1},C=new Map,I=(b,E)=>`${gA(E)}:${b}`,v=(b,E,F,N,U,z,te,le)=>{let pe=I(b,F),ue=C.get(pe),ye=!!ue;!ye&&F.name===A.name&&F.reference===A.reference&&(ue=h,C.set(pe,h));let ae=_j(E,F,t,p);if(!ue){let ce=0;ae?ce=2:E.linkType==="SOFT"&&F.name.endsWith(pm)&&(ce=1),ue={name:b,identName:F.name,reference:F.reference,dependencies:new Set,peerNames:ce===1?new Set:E.packagePeers,dependencyKind:ce},C.set(pe,ue)}let Ie;if(ae?Ie=2:U.linkType==="SOFT"?Ie=1:Ie=0,ue.hoistPriority=Math.max(ue.hoistPriority||0,Ie),le&&!ae){let ce=gA({name:N.identName,reference:N.reference}),ne=a.get(ce)||new Set;a.set(ce,ne),ne.add(ue.name)}let Fe=new Map(E.packageDependencies);if(e.project){let ce=e.project.workspacesByCwd.get(fe.toPortablePath(E.packageLocation.slice(0,-1)));if(ce){let ne=new Set([...Array.from(ce.manifest.peerDependencies.values(),ee=>G.stringifyIdent(ee)),...Array.from(ce.manifest.peerDependenciesMeta.keys())]);for(let ee of ne)Fe.has(ee)||(Fe.set(ee,z.get(ee)||null),ue.peerNames.add(ee))}}let g=gA({name:F.name.replace(pm,""),reference:F.reference}),Ee=n.get(g);if(Ee)for(let ce of Ee)Fe.set(`${ce.name}${pm}`,ce.reference);(E!==U||E.linkType!=="SOFT"||!ae&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(te)))&&N.dependencies.add(ue);let De=F!==A&&E.linkType==="SOFT"&&!F.name.endsWith(pm)&&!ae;if(!ye&&!De){let ce=new Map;for(let[ne,ee]of Fe)if(ee!==null){let we=t.getLocator(ne,ee),be=t.getLocator(ne.replace(pm,""),ee),ht=t.getPackageInformation(be);if(ht===null)throw new Error("Assertion failed: Expected the package to have been registered");let H=_j(ht,we,t,p);if(e.validateExternalSoftLinks&&e.project&&H){ht.packageDependencies.size>0&&(o=!0);for(let[He,Re]of ht.packageDependencies)if(Re!==null){let ze=G.parseLocator(Array.isArray(Re)?`${Re[0]}@${Re[1]}`:`${He}@${Re}`);if(gA(ze)!==gA(we)){let je=Fe.get(He);if(je){let x=G.parseLocator(Array.isArray(je)?`${je[0]}@${je[1]}`:`${He}@${je}`);yIe(x,ze)||r.push({messageName:71,text:`Cannot link ${G.prettyIdent(e.project.configuration,G.parseIdent(we.name))} into ${G.prettyLocator(e.project.configuration,G.parseLocator(`${F.name}@${F.reference}`))} dependency ${G.prettyLocator(e.project.configuration,ze)} conflicts with parent dependency ${G.prettyLocator(e.project.configuration,x)}`})}else{let x=ce.get(He);if(x){let w=x.target,S=G.parseLocator(Array.isArray(w)?`${w[0]}@${w[1]}`:`${He}@${w}`);yIe(S,ze)||r.push({messageName:71,text:`Cannot link ${G.prettyIdent(e.project.configuration,G.parseIdent(we.name))} into ${G.prettyLocator(e.project.configuration,G.parseLocator(`${F.name}@${F.reference}`))} dependency ${G.prettyLocator(e.project.configuration,ze)} conflicts with dependency ${G.prettyLocator(e.project.configuration,S)} from sibling portal ${G.prettyIdent(e.project.configuration,G.parseIdent(x.portal.name))}`})}else ce.set(He,{target:ze.reference,portal:we})}}}}let lt=e.hoistingLimitsByCwd?.get(te),Te=H?te:V.relative(p,fe.toPortablePath(ht.packageLocation))||Bt.dot,ke=e.hoistingLimitsByCwd?.get(Te);v(ne,ht,we,ue,E,Fe,Te,lt==="dependencies"||ke==="dependencies"||ke==="workspaces")}}};return v(A.name,u,A,h,u,u.packageDependencies,Bt.dot,!1),{packageTree:h,hoistingLimits:a,errors:r,preserveSymlinksRequired:o}};function EIe(t,e,r){let o=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return fe.toPortablePath(o||t.packageLocation)}function mIt(t,e,r){let o=e.getLocator(t.name.replace(pm,""),t.reference),a=e.getPackageInformation(o);if(a===null)throw new Error("Assertion failed: Expected the package to be registered");return r.pnpifyFs?{linkType:"SOFT",target:fe.toPortablePath(a.packageLocation)}:{linkType:a.linkType,target:EIe(a,t,e)}}var yIt=(t,e,r)=>{let o=new Map,a=(C,I,v)=>{let{linkType:b,target:E}=mIt(C,t,r);return{locator:gA(C),nodePath:I,target:E,linkType:b,aliases:v}},n=C=>{let[I,v]=C.split("/");return v?{scope:I,name:v}:{scope:null,name:I}},u=new Set,A=(C,I,v)=>{if(u.has(C))return;u.add(C);let b=Array.from(C.references).sort().join("#");for(let E of C.dependencies){let F=Array.from(E.references).sort().join("#");if(E.identName===C.identName&&F===b)continue;let N=Array.from(E.references).sort(),U={name:E.identName,reference:N[0]},{name:z,scope:te}=n(E.name),le=te?[te,z]:[z],pe=V.join(I,mIe),ue=V.join(pe,...le),ye=`${v}/${U.name}`,ae=a(U,v,N.slice(1)),Ie=!1;if(ae.linkType==="SOFT"&&r.project){let g=r.project.workspacesByCwd.get(ae.target.slice(0,-1));Ie=!!(g&&!g.manifest.name)}let Fe=ae.linkType==="SOFT"&&ue.startsWith(ae.target);if(!E.name.endsWith(pm)&&!Ie&&!Fe){let g=o.get(ue);if(g){if(g.dirList)throw new Error(`Assertion failed: ${ue} cannot merge dir node with leaf node`);{let ce=G.parseLocator(g.locator),ne=G.parseLocator(ae.locator);if(g.linkType!==ae.linkType)throw new Error(`Assertion failed: ${ue} cannot merge nodes with different link types ${g.nodePath}/${G.stringifyLocator(ce)} and ${v}/${G.stringifyLocator(ne)}`);if(ce.identHash!==ne.identHash)throw new Error(`Assertion failed: ${ue} cannot merge nodes with different idents ${g.nodePath}/${G.stringifyLocator(ce)} and ${v}/s${G.stringifyLocator(ne)}`);ae.aliases=[...ae.aliases,...g.aliases,G.parseLocator(g.locator).reference]}}o.set(ue,ae);let Ee=ue.split("/"),De=Ee.indexOf(mIe);for(let ce=Ee.length-1;De>=0&&ce>De;ce--){let ne=fe.toPortablePath(Ee.slice(0,ce).join(V.sep)),ee=Ee[ce],we=o.get(ne);if(!we)o.set(ne,{dirList:new Set([ee])});else if(we.dirList){if(we.dirList.has(ee))break;we.dirList.add(ee)}}}A(E,ae.linkType==="SOFT"?ae.target:ue,ye)}},p=a({name:e.name,reference:Array.from(e.references)[0]},"",[]),h=p.target;return o.set(h,p),A(e,h,""),o};Ye();Ye();Pt();Pt();nA();Ll();var aq={};Vt(aq,{PnpInstaller:()=>dm,PnpLinker:()=>D0,UnplugCommand:()=>S0,default:()=>VIt,getPnpPath:()=>P0,jsInstallUtils:()=>mA,pnpUtils:()=>av,quotePathIfNeeded:()=>n1e});Pt();var r1e=Be("url");Ye();Ye();Pt();Pt();var CIe={["DEFAULT"]:{collapsed:!1,next:{["*"]:"DEFAULT"}},["TOP_LEVEL"]:{collapsed:!1,next:{fallbackExclusionList:"FALLBACK_EXCLUSION_LIST",packageRegistryData:"PACKAGE_REGISTRY_DATA",["*"]:"DEFAULT"}},["FALLBACK_EXCLUSION_LIST"]:{collapsed:!1,next:{["*"]:"FALLBACK_EXCLUSION_ENTRIES"}},["FALLBACK_EXCLUSION_ENTRIES"]:{collapsed:!0,next:{["*"]:"FALLBACK_EXCLUSION_DATA"}},["FALLBACK_EXCLUSION_DATA"]:{collapsed:!0,next:{["*"]:"DEFAULT"}},["PACKAGE_REGISTRY_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_REGISTRY_ENTRIES"}},["PACKAGE_REGISTRY_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_STORE_DATA"}},["PACKAGE_STORE_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_STORE_ENTRIES"}},["PACKAGE_STORE_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_INFORMATION_DATA"}},["PACKAGE_INFORMATION_DATA"]:{collapsed:!1,next:{packageDependencies:"PACKAGE_DEPENDENCIES",["*"]:"DEFAULT"}},["PACKAGE_DEPENDENCIES"]:{collapsed:!1,next:{["*"]:"PACKAGE_DEPENDENCY"}},["PACKAGE_DEPENDENCY"]:{collapsed:!0,next:{["*"]:"DEFAULT"}}};function EIt(t,e,r){let o="";o+="[";for(let a=0,n=t.length;a"u"||(A!==0&&(a+=", "),a+=JSON.stringify(p),a+=": ",a+=EQ(p,h,e,r).replace(/^ +/g,""),A+=1)}return a+="}",a}function IIt(t,e,r){let o=Object.keys(t),a=`${r} `,n="";n+=r,n+=`{ -`;let u=0;for(let A=0,p=o.length;A"u"||(u!==0&&(n+=",",n+=` -`),n+=a,n+=JSON.stringify(h),n+=": ",n+=EQ(h,C,e,a).replace(/^ +/g,""),u+=1)}return u!==0&&(n+=` -`),n+=r,n+="}",n}function EQ(t,e,r,o){let{next:a}=CIe[r],n=a[t]||a["*"];return wIe(e,n,o)}function wIe(t,e,r){let{collapsed:o}=CIe[e];return Array.isArray(t)?o?EIt(t,e,r):CIt(t,e,r):typeof t=="object"&&t!==null?o?wIt(t,e,r):IIt(t,e,r):JSON.stringify(t)}function IIe(t){return wIe(t,"TOP_LEVEL","")}function JB(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function BIt(t){let e=new Map,r=JB(t.fallbackExclusionList||[],[({name:o,reference:a})=>o,({name:o,reference:a})=>a]);for(let{name:o,reference:a}of r){let n=e.get(o);typeof n>"u"&&e.set(o,n=new Set),n.add(a)}return Array.from(e).map(([o,a])=>[o,Array.from(a)])}function vIt(t){return JB(t.fallbackPool||[],([e])=>e)}function DIt(t){let e=[];for(let[r,o]of JB(t.packageRegistry,([a])=>a===null?"0":`1${a}`)){let a=[];e.push([r,a]);for(let[n,{packageLocation:u,packageDependencies:A,packagePeers:p,linkType:h,discardFromLookup:C}]of JB(o,([I])=>I===null?"0":`1${I}`)){let I=[];r!==null&&n!==null&&!A.has(r)&&I.push([r,n]);for(let[E,F]of JB(A.entries(),([N])=>N))I.push([E,F]);let v=p&&p.size>0?Array.from(p):void 0,b=C||void 0;a.push([n,{packageLocation:u,packageDependencies:I,packagePeers:v,linkType:h,discardFromLookup:b}])}}return e}function XB(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:BIt(t),fallbackPool:vIt(t),packageRegistryData:DIt(t)}}var DIe=$e(vIe());function PIe(t,e){return[t?`${t} -`:"",`/* eslint-disable */ -`,`"use strict"; -`,` -`,e,` -`,(0,DIe.default)()].join("")}function PIt(t){return JSON.stringify(t,null,2)}function SIt(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\ -`)}'`}function xIt(t){return[`const RAW_RUNTIME_STATE = -`,`${SIt(IIe(t))}; - -`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) { -`,` return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); -`,`} -`].join("")}function bIt(){return[`function $$SETUP_STATE(hydrateRuntimeState, basePath) { -`,` const fs = require('fs'); -`,` const path = require('path'); -`,` const pnpDataFilepath = path.resolve(__dirname, ${JSON.stringify(dr.pnpData)}); -`,` return hydrateRuntimeState(JSON.parse(fs.readFileSync(pnpDataFilepath, 'utf8')), {basePath: basePath || __dirname}); -`,`} -`].join("")}function SIe(t){let e=XB(t),r=xIt(e);return PIe(t.shebang,r)}function xIe(t){let e=XB(t),r=bIt(),o=PIe(t.shebang,r);return{dataFile:PIt(e),loaderFile:o}}Pt();function qj(t,{basePath:e}){let r=fe.toPortablePath(e),o=V.resolve(r),a=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,n=new Map,u=new Map(t.packageRegistryData.map(([I,v])=>[I,new Map(v.map(([b,E])=>{if(I===null!=(b===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let F=E.discardFromLookup??!1,N={name:I,reference:b},U=n.get(E.packageLocation);U?(U.discardFromLookup=U.discardFromLookup&&F,F||(U.locator=N)):n.set(E.packageLocation,{locator:N,discardFromLookup:F});let z=null;return[b,{packageDependencies:new Map(E.packageDependencies),packagePeers:new Set(E.packagePeers),linkType:E.linkType,discardFromLookup:F,get packageLocation(){return z||(z=V.join(o,E.packageLocation))}}]}))])),A=new Map(t.fallbackExclusionList.map(([I,v])=>[I,new Set(v)])),p=new Map(t.fallbackPool),h=t.dependencyTreeRoots,C=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:h,enableTopLevelFallback:C,fallbackExclusionList:A,fallbackPool:p,ignorePattern:a,packageLocatorsByLocations:n,packageRegistry:u}}Pt();Pt();var tp=Be("module"),gm=Be("url"),eq=Be("util");var Mo=Be("url");var FIe=$e(Be("assert"));var Gj=Array.isArray,ZB=JSON.stringify,$B=Object.getOwnPropertyNames,hm=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Yj=(t,e)=>RegExp.prototype.exec.call(t,e),Wj=(t,...e)=>RegExp.prototype[Symbol.replace].apply(t,e),B0=(t,...e)=>String.prototype.endsWith.apply(t,e),Kj=(t,...e)=>String.prototype.includes.apply(t,e),Vj=(t,...e)=>String.prototype.lastIndexOf.apply(t,e),ev=(t,...e)=>String.prototype.indexOf.apply(t,e),bIe=(t,...e)=>String.prototype.replace.apply(t,e),v0=(t,...e)=>String.prototype.slice.apply(t,e),dA=(t,...e)=>String.prototype.startsWith.apply(t,e),kIe=Map,QIe=JSON.parse;function tv(t,e,r){return class extends r{constructor(...o){super(e(...o)),this.code=t,this.name=`${r.name} [${t}]`}}}var RIe=tv("ERR_PACKAGE_IMPORT_NOT_DEFINED",(t,e,r)=>`Package import specifier "${t}" is not defined${e?` in package ${e}package.json`:""} imported from ${r}`,TypeError),zj=tv("ERR_INVALID_MODULE_SPECIFIER",(t,e,r=void 0)=>`Invalid module "${t}" ${e}${r?` imported from ${r}`:""}`,TypeError),TIe=tv("ERR_INVALID_PACKAGE_TARGET",(t,e,r,o=!1,a=void 0)=>{let n=typeof r=="string"&&!o&&r.length&&!dA(r,"./");return e==="."?((0,FIe.default)(o===!1),`Invalid "exports" main target ${ZB(r)} defined in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`):`Invalid "${o?"imports":"exports"}" target ${ZB(r)} defined for '${e}' in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`},Error),rv=tv("ERR_INVALID_PACKAGE_CONFIG",(t,e,r)=>`Invalid package config ${t}${e?` while importing ${e}`:""}${r?`. ${r}`:""}`,Error),LIe=tv("ERR_PACKAGE_PATH_NOT_EXPORTED",(t,e,r=void 0)=>e==="."?`No "exports" main defined in ${t}package.json${r?` imported from ${r}`:""}`:`Package subpath '${e}' is not defined by "exports" in ${t}package.json${r?` imported from ${r}`:""}`,Error);var wQ=Be("url");function NIe(t,e){let r=Object.create(null);for(let o=0;oe):t+e}nv(r,t,o,u,a)}Yj(MIe,v0(t,2))!==null&&nv(r,t,o,u,a);let p=new URL(t,o),h=p.pathname,C=new URL(".",o).pathname;if(dA(h,C)||nv(r,t,o,u,a),e==="")return p;if(Yj(MIe,e)!==null){let I=n?bIe(r,"*",()=>e):r+e;FIt(I,o,u,a)}return n?new URL(Wj(UIe,p.href,()=>e)):new URL(e,p)}function TIt(t){let e=+t;return`${e}`!==t?!1:e>=0&&e<4294967295}function qC(t,e,r,o,a,n,u,A){if(typeof e=="string")return RIt(e,r,o,t,a,n,u,A);if(Gj(e)){if(e.length===0)return null;let p;for(let h=0;hn?-1:n>a||r===-1?1:o===-1||t.length>e.length?-1:e.length>t.length?1:0}function LIt(t,e,r){if(typeof t=="string"||Gj(t))return!0;if(typeof t!="object"||t===null)return!1;let o=$B(t),a=!1,n=0;for(let u=0;u=h.length&&B0(e,I)&&HIe(n,h)===1&&Vj(h,"*")===C&&(n=h,u=v0(e,C,e.length-I.length))}}if(n){let p=r[n],h=qC(t,p,u,n,o,!0,!1,a);return h==null&&Jj(e,t,o),h}Jj(e,t,o)}function qIe({name:t,base:e,conditions:r,readFileSyncFn:o}){if(t==="#"||dA(t,"#/")||B0(t,"/")){let u="is not a valid internal imports specifier name";throw new zj(t,u,(0,Mo.fileURLToPath)(e))}let a,n=OIe(e,o);if(n.exists){a=(0,Mo.pathToFileURL)(n.pjsonPath);let u=n.imports;if(u)if(hm(u,t)&&!Kj(t,"*")){let A=qC(a,u[t],"",t,e,!1,!0,r);if(A!=null)return A}else{let A="",p,h=$B(u);for(let C=0;C=I.length&&B0(t,b)&&HIe(A,I)===1&&Vj(I,"*")===v&&(A=I,p=v0(t,v,t.length-b.length))}}if(A){let C=u[A],I=qC(a,C,p,A,e,!0,!0,r);if(I!=null)return I}}}QIt(t,a,e)}Pt();var OIt=new Set(["BUILTIN_NODE_RESOLUTION_FAILED","MISSING_DEPENDENCY","MISSING_PEER_DEPENDENCY","QUALIFIED_PATH_RESOLUTION_FAILED","UNDECLARED_DEPENDENCY"]);function $i(t,e,r={},o){o??=OIt.has(t)?"MODULE_NOT_FOUND":t;let a={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...a,value:o},pnpCode:{...a,value:t},data:{...a,value:r}})}function au(t){return fe.normalize(fe.fromPortablePath(t))}var KIe=$e(YIe());function VIe(t){return MIt(),Zj[t]}var Zj;function MIt(){Zj||(Zj={"--conditions":[],...WIe(UIt()),...WIe(process.execArgv)})}function WIe(t){return(0,KIe.default)({"--conditions":[String],"-C":"--conditions"},{argv:t,permissive:!0})}function UIt(){let t=[],e=_It(process.env.NODE_OPTIONS||"",t);return t.length,e}function _It(t,e){let r=[],o=!1,a=!0;for(let n=0;nparseInt(t,10)),zIe=sv>19||sv===19&&$j>=2||sv===18&&$j>=13,CJt=sv>19||sv===19&&$j>=3;function JIe(t){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(t=t.map(e=>fe.fromPortablePath(mi.resolveVirtual(fe.toPortablePath(e)))),zIe)process.send({"watch:require":t});else for(let e of t)process.send({"watch:require":e})}function tq(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,o=Number(process.env.PNP_DEBUG_LEVEL),a=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,n=/^(\/|\.{1,2}(\/|$))/,u=/\/$/,A=/^\.{0,2}\//,p={name:null,reference:null},h=[],C=new Set;if(t.enableTopLevelFallback===!0&&h.push(p),e.compatibilityMode!==!1)for(let Te of["react-scripts","gatsby"]){let ke=t.packageRegistry.get(Te);if(ke)for(let xe of ke.keys()){if(xe===null)throw new Error("Assertion failed: This reference shouldn't be null");h.push({name:Te,reference:xe})}}let{ignorePattern:I,packageRegistry:v,packageLocatorsByLocations:b}=t;function E(Te,ke){return{fn:Te,args:ke,error:null,result:null}}function F(Te){let ke=process.stderr?.hasColors?.()??process.stdout.isTTY,xe=(ze,je)=>`\x1B[${ze}m${je}\x1B[0m`,He=Te.error;console.error(He?xe("31;1",`\u2716 ${Te.error?.message.replace(/\n.*/s,"")}`):xe("33;1","\u203C Resolution")),Te.args.length>0&&console.error();for(let ze of Te.args)console.error(` ${xe("37;1","In \u2190")} ${(0,eq.inspect)(ze,{colors:ke,compact:!0})}`);Te.result&&(console.error(),console.error(` ${xe("37;1","Out \u2192")} ${(0,eq.inspect)(Te.result,{colors:ke,compact:!0})}`));let Re=new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2)??[];if(Re.length>0){console.error();for(let ze of Re)console.error(` ${xe("38;5;244",ze)}`)}console.error()}function N(Te,ke){if(e.allowDebug===!1)return ke;if(Number.isFinite(o)){if(o>=2)return(...xe)=>{let He=E(Te,xe);try{return He.result=ke(...xe)}catch(Re){throw He.error=Re}finally{F(He)}};if(o>=1)return(...xe)=>{try{return ke(...xe)}catch(He){let Re=E(Te,xe);throw Re.error=He,F(Re),He}}}return ke}function U(Te){let ke=g(Te);if(!ke)throw $i("INTERNAL","Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return ke}function z(Te){if(Te.name===null)return!0;for(let ke of t.dependencyTreeRoots)if(ke.name===Te.name&&ke.reference===Te.reference)return!0;return!1}let te=new Set(["node","require",...VIe("--conditions")]);function le(Te,ke=te,xe){let He=ce(V.join(Te,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(He===null)throw $i("INTERNAL",`The locator that owns the "${Te}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:Re}=U(He),ze=V.join(Re,dr.manifest);if(!e.fakeFs.existsSync(ze))return null;let je=JSON.parse(e.fakeFs.readFileSync(ze,"utf8"));if(je.exports==null)return null;let x=V.contains(Re,Te);if(x===null)throw $i("INTERNAL","unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");x!=="."&&!A.test(x)&&(x=`./${x}`);try{let w=jIe({packageJSONUrl:(0,gm.pathToFileURL)(fe.fromPortablePath(ze)),packageSubpath:x,exports:je.exports,base:xe?(0,gm.pathToFileURL)(fe.fromPortablePath(xe)):null,conditions:ke});return fe.toPortablePath((0,gm.fileURLToPath)(w))}catch(w){throw $i("EXPORTS_RESOLUTION_FAILED",w.message,{unqualifiedPath:au(Te),locator:He,pkgJson:je,subpath:au(x),conditions:ke},w.code)}}function pe(Te,ke,{extensions:xe}){let He;try{ke.push(Te),He=e.fakeFs.statSync(Te)}catch{}if(He&&!He.isDirectory())return e.fakeFs.realpathSync(Te);if(He&&He.isDirectory()){let Re;try{Re=JSON.parse(e.fakeFs.readFileSync(V.join(Te,dr.manifest),"utf8"))}catch{}let ze;if(Re&&Re.main&&(ze=V.resolve(Te,Re.main)),ze&&ze!==Te){let je=pe(ze,ke,{extensions:xe});if(je!==null)return je}}for(let Re=0,ze=xe.length;Re{let x=JSON.stringify(je.name);if(He.has(x))return;He.add(x);let w=Ee(je);for(let S of w)if(U(S).packagePeers.has(Te))Re(S);else{let R=xe.get(S.name);typeof R>"u"&&xe.set(S.name,R=new Set),R.add(S.reference)}};Re(ke);let ze=[];for(let je of[...xe.keys()].sort())for(let x of[...xe.get(je)].sort())ze.push({name:je,reference:x});return ze}function ce(Te,{resolveIgnored:ke=!1,includeDiscardFromLookup:xe=!1}={}){if(ae(Te)&&!ke)return null;let He=V.relative(t.basePath,Te);He.match(n)||(He=`./${He}`),He.endsWith("/")||(He=`${He}/`);do{let Re=b.get(He);if(typeof Re>"u"||Re.discardFromLookup&&!xe){He=He.substring(0,He.lastIndexOf("/",He.length-2)+1);continue}return Re.locator}while(He!=="");return null}function ne(Te){try{return e.fakeFs.readFileSync(fe.toPortablePath(Te),"utf8")}catch(ke){if(ke.code==="ENOENT")return;throw ke}}function ee(Te,ke,{considerBuiltins:xe=!0}={}){if(Te.startsWith("#"))throw new Error("resolveToUnqualified can not handle private import mappings");if(Te==="pnpapi")return fe.toPortablePath(e.pnpapiResolution);if(xe&&(0,tp.isBuiltin)(Te))return null;let He=au(Te),Re=ke&&au(ke);if(ke&&ae(ke)&&(!V.isAbsolute(Te)||ce(Te)===null)){let x=ye(Te,ke);if(x===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) - -Require request: "${He}" -Required by: ${Re} -`,{request:He,issuer:Re});return fe.toPortablePath(x)}let ze,je=Te.match(a);if(je){if(!ke)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:He,issuer:Re});let[,x,w]=je,S=ce(ke);if(!S){let Le=ye(Te,ke);if(Le===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). - -Require path: "${He}" -Required by: ${Re} -`,{request:He,issuer:Re});return fe.toPortablePath(Le)}let R=U(S).packageDependencies.get(x),J=null;if(R==null&&S.name!==null){let Le=t.fallbackExclusionList.get(S.name);if(!Le||!Le.has(S.reference)){for(let dt=0,jt=h.length;dtz(ot))?X=$i("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${x} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==He?` (via "${He}")`:""} -Required by: ${S.name}@${S.reference} (via ${Re}) -${Le.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} -`).join("")} -`,{request:He,issuer:Re,issuerLocator:Object.assign({},S),dependencyName:x,brokenAncestors:Le}):X=$i("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${x} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==He?` (via "${He}")`:""} -Required by: ${S.name}@${S.reference} (via ${Re}) - -${Le.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} -`).join("")} -`,{request:He,issuer:Re,issuerLocator:Object.assign({},S),dependencyName:x,brokenAncestors:Le})}else R===void 0&&(!xe&&(0,tp.isBuiltin)(Te)?z(S)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${x} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==He?` (via "${He}")`:""} -Required by: ${Re} -`,{request:He,issuer:Re,dependencyName:x}):X=$i("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${x}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${x} isn't otherwise declared in ${S.name}'s dependencies, this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==He?` (via "${He}")`:""} -Required by: ${Re} -`,{request:He,issuer:Re,issuerLocator:Object.assign({},S),dependencyName:x}):z(S)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==He?` (via "${He}")`:""} -Required by: ${Re} -`,{request:He,issuer:Re,dependencyName:x}):X=$i("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${x}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. - -Required package: ${x}${x!==He?` (via "${He}")`:""} -Required by: ${S.name}@${S.reference} (via ${Re}) -`,{request:He,issuer:Re,issuerLocator:Object.assign({},S),dependencyName:x}));if(R==null){if(J===null||X===null)throw X||new Error("Assertion failed: Expected an error to have been set");R=J;let Le=X.message.replace(/\n.*/g,"");X.message=Le,!C.has(Le)&&o!==0&&(C.add(Le),process.emitWarning(X))}let Z=Array.isArray(R)?{name:R[0],reference:R[1]}:{name:x,reference:R},ie=U(Z);if(!ie.packageLocation)throw $i("MISSING_DEPENDENCY",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. - -Required package: ${Z.name}@${Z.reference}${Z.name!==He?` (via "${He}")`:""} -Required by: ${S.name}@${S.reference} (via ${Re}) -`,{request:He,issuer:Re,dependencyLocator:Object.assign({},Z)});let Pe=ie.packageLocation;w?ze=V.join(Pe,w):ze=Pe}else if(V.isAbsolute(Te))ze=V.normalize(Te);else{if(!ke)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:He,issuer:Re});let x=V.resolve(ke);ke.match(u)?ze=V.normalize(V.join(x,Te)):ze=V.normalize(V.join(V.dirname(x),Te))}return V.normalize(ze)}function we(Te,ke,xe=te,He){if(n.test(Te))return ke;let Re=le(ke,xe,He);return Re?V.normalize(Re):ke}function be(Te,{extensions:ke=Object.keys(tp.Module._extensions)}={}){let xe=[],He=pe(Te,xe,{extensions:ke});if(He)return V.normalize(He);{JIe(xe.map(je=>fe.fromPortablePath(je)));let Re=au(Te),ze=ce(Te);if(ze){let{packageLocation:je}=U(ze),x=!0;try{e.fakeFs.accessSync(je)}catch(w){if(w?.code==="ENOENT")x=!1;else{let S=(w?.message??w??"empty exception thrown").replace(/^[A-Z]/,y=>y.toLowerCase());throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Required package exists but could not be accessed (${S}). - -Missing package: ${ze.name}@${ze.reference} -Expected package location: ${au(je)} -`,{unqualifiedPath:Re,extensions:ke})}}if(!x){let w=je.includes("/unplugged/")?"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).":"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.";throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`${w} - -Missing package: ${ze.name}@${ze.reference} -Expected package location: ${au(je)} -`,{unqualifiedPath:Re,extensions:ke})}}throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Qualified path resolution failed: we looked for the following paths, but none could be accessed. - -Source path: ${Re} -${xe.map(je=>`Not found: ${au(je)} -`).join("")}`,{unqualifiedPath:Re,extensions:ke})}}function ht(Te,ke,xe){if(!ke)throw new Error("Assertion failed: An issuer is required to resolve private import mappings");let He=qIe({name:Te,base:(0,gm.pathToFileURL)(fe.fromPortablePath(ke)),conditions:xe.conditions??te,readFileSyncFn:ne});if(He instanceof URL)return be(fe.toPortablePath((0,gm.fileURLToPath)(He)),{extensions:xe.extensions});if(He.startsWith("#"))throw new Error("Mapping from one private import to another isn't allowed");return H(He,ke,xe)}function H(Te,ke,xe={}){try{if(Te.startsWith("#"))return ht(Te,ke,xe);let{considerBuiltins:He,extensions:Re,conditions:ze}=xe,je=ee(Te,ke,{considerBuiltins:He});if(Te==="pnpapi")return je;if(je===null)return null;let x=()=>ke!==null?ae(ke):!1,w=(!He||!(0,tp.isBuiltin)(Te))&&!x()?we(Te,je,ze,ke):je;return be(w,{extensions:Re})}catch(He){throw Object.hasOwn(He,"pnpCode")&&Object.assign(He.data,{request:au(Te),issuer:ke&&au(ke)}),He}}function lt(Te){let ke=V.normalize(Te),xe=mi.resolveVirtual(ke);return xe!==ke?xe:null}return{VERSIONS:Ie,topLevel:Fe,getLocator:(Te,ke)=>Array.isArray(ke)?{name:ke[0],reference:ke[1]}:{name:Te,reference:ke},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let Te=[];for(let[ke,xe]of v)for(let He of xe.keys())ke!==null&&He!==null&&Te.push({name:ke,reference:He});return Te},getPackageInformation:Te=>{let ke=g(Te);if(ke===null)return null;let xe=fe.fromPortablePath(ke.packageLocation);return{...ke,packageLocation:xe}},findPackageLocator:Te=>ce(fe.toPortablePath(Te)),resolveToUnqualified:N("resolveToUnqualified",(Te,ke,xe)=>{let He=ke!==null?fe.toPortablePath(ke):null,Re=ee(fe.toPortablePath(Te),He,xe);return Re===null?null:fe.fromPortablePath(Re)}),resolveUnqualified:N("resolveUnqualified",(Te,ke)=>fe.fromPortablePath(be(fe.toPortablePath(Te),ke))),resolveRequest:N("resolveRequest",(Te,ke,xe)=>{let He=ke!==null?fe.toPortablePath(ke):null,Re=H(fe.toPortablePath(Te),He,xe);return Re===null?null:fe.fromPortablePath(Re)}),resolveVirtual:N("resolveVirtual",Te=>{let ke=lt(fe.toPortablePath(Te));return ke!==null?fe.fromPortablePath(ke):null})}}Pt();var XIe=(t,e,r)=>{let o=XB(t),a=qj(o,{basePath:e}),n=fe.join(e,dr.pnpCjs);return tq(a,{fakeFs:r,pnpapiResolution:n})};var nq=$e($Ie());qt();var mA={};Vt(mA,{checkManifestCompatibility:()=>e1e,extractBuildRequest:()=>IQ,getExtractHint:()=>iq,hasBindingGyp:()=>sq});Ye();Pt();function e1e(t){return G.isPackageCompatible(t,zi.getArchitectureSet())}function IQ(t,e,r,{configuration:o}){let a=[];for(let n of["preinstall","install","postinstall"])e.manifest.scripts.has(n)&&a.push({type:0,script:n});return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&a.push({type:1,script:"node-gyp rebuild"}),a.length===0?null:t.linkType!=="HARD"?{skipped:!0,explain:n=>n.reportWarningOnce(6,`${G.prettyLocator(o,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`)}:r&&r.built===!1?{skipped:!0,explain:n=>n.reportInfoOnce(5,`${G.prettyLocator(o,t)} lists build scripts, but its build has been explicitly disabled through configuration.`)}:!o.get("enableScripts")&&!r.built?{skipped:!0,explain:n=>n.reportWarningOnce(4,`${G.prettyLocator(o,t)} lists build scripts, but all build scripts have been disabled.`)}:e1e(t)?{skipped:!1,directives:a}:{skipped:!0,explain:n=>n.reportWarningOnce(76,`${G.prettyLocator(o,t)} The ${zi.getArchitectureName()} architecture is incompatible with this package, build skipped.`)}}var jIt=new Set([".exe",".bin",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function iq(t){return t.packageFs.getExtractHint({relevantExtensions:jIt})}function sq(t){let e=V.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var av={};Vt(av,{getUnpluggedPath:()=>ov});Ye();Pt();function ov(t,{configuration:e}){return V.resolve(e.get("pnpUnpluggedFolder"),G.slugifyLocator(t))}var qIt=new Set([G.makeIdent(null,"open").identHash,G.makeIdent(null,"opn").identHash]),D0=class{constructor(){this.mode="strict";this.pnpCache=new Map}getCustomDataKey(){return JSON.stringify({name:"PnpLinker",version:2})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the PnP linker to be enabled");let o=P0(r.project).cjs;if(!oe.existsSync(o))throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let a=_e.getFactoryWithDefault(this.pnpCache,o,()=>_e.dynamicRequire(o,{cachingStrategy:_e.CachingStrategy.FsTime})),n={name:G.stringifyIdent(e),reference:e.reference},u=a.getPackageInformation(n);if(!u)throw new it(`Couldn't find ${G.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return fe.toPortablePath(u.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=P0(r.project).cjs;if(!oe.existsSync(o))return null;let n=_e.getFactoryWithDefault(this.pnpCache,o,()=>_e.dynamicRequire(o,{cachingStrategy:_e.CachingStrategy.FsTime})).findPackageLocator(fe.fromPortablePath(e));return n?G.makeLocator(G.parseIdent(n.name),n.reference):null}makeInstaller(e){return new dm(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},dm=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new _e.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}attachCustomData(e){this.customData=e}async installPackage(e,r,o){let a=G.stringifyIdent(e),n=e.reference,u=!!this.opts.project.tryWorkspaceByLocator(e),A=G.isVirtualLocator(e),p=e.peerDependencies.size>0&&!A,h=!p&&!u,C=!p&&e.linkType!=="SOFT",I,v;if(h||C){let te=A?G.devirtualizeLocator(e):e;I=this.customData.store.get(te.locatorHash),typeof I>"u"&&(I=await GIt(r),e.linkType==="HARD"&&this.customData.store.set(te.locatorHash,I)),I.manifest.type==="module"&&(this.isESMLoaderRequired=!0),v=this.opts.project.getDependencyMeta(te,e.version)}let b=h?IQ(e,I,v,{configuration:this.opts.project.configuration}):null,E=C?await this.unplugPackageIfNeeded(e,I,r,v,o):r.packageFs;if(V.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let F=V.resolve(E.getRealPath(),r.prefixPath),N=oq(this.opts.project.cwd,F),U=new Map,z=new Set;if(A){for(let te of e.peerDependencies.values())U.set(G.stringifyIdent(te),null),z.add(G.stringifyIdent(te));if(!u){let te=G.devirtualizeLocator(e);this.virtualTemplates.set(te.locatorHash,{location:oq(this.opts.project.cwd,mi.resolveVirtual(F)),locator:te})}}return _e.getMapWithDefault(this.packageRegistry,a).set(n,{packageLocation:N,packageDependencies:U,packagePeers:z,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:F,buildRequest:b}}async attachInternalDependencies(e,r){let o=this.getPackageInformation(e);for(let[a,n]of r){let u=G.areIdentsEqual(a,n)?n.reference:[G.stringifyIdent(n),n.reference];o.packageDependencies.set(G.stringifyIdent(a),u)}}async attachExternalDependents(e,r){for(let o of r)this.getDiskInformation(o).packageDependencies.set(G.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=P0(this.opts.project);if(this.isEsmEnabled()||await oe.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await oe.removePromise(e.cjs),await oe.removePromise(e.data),await oe.removePromise(e.esmLoader),await oe.removePromise(this.opts.project.configuration.get("pnpUnpluggedFolder"));return}for(let{locator:C,location:I}of this.virtualTemplates.values())_e.getMapWithDefault(this.packageRegistry,G.stringifyIdent(C)).set(C.reference,{packageLocation:I,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let r=this.opts.project.configuration.get("pnpFallbackMode"),o=this.opts.project.workspaces.map(({anchoredLocator:C})=>({name:G.stringifyIdent(C),reference:C.reference})),a=r!=="none",n=[],u=new Map,A=_e.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),p=this.packageRegistry,h=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let C of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(C)&&n.push({name:G.stringifyIdent(C),reference:C.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:o,enableTopLevelFallback:a,fallbackExclusionList:n,fallbackPool:u,ignorePattern:A,packageRegistry:p,shebang:h}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has("pnpEnableEsmLoader"))return this.opts.project.configuration.get("pnpEnableEsmLoader");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type==="module")return!0;return!1}async finalizeInstallWithPnp(e){let r=P0(this.opts.project),o=await this.locateNodeModules(e.ignorePattern);if(o.length>0){this.opts.report.reportWarning(31,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let n of o)await oe.removePromise(n)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let n=SIe(e);await oe.changeFilePromise(r.cjs,n,{automaticNewlines:!0,mode:493}),await oe.removePromise(r.data)}else{let{dataFile:n,loaderFile:u}=xIe(e);await oe.changeFilePromise(r.cjs,u,{automaticNewlines:!0,mode:493}),await oe.changeFilePromise(r.data,n,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,"ESM support for PnP uses the experimental loader API and is therefore experimental"),await oe.changeFilePromise(r.esmLoader,(0,nq.default)(),{automaticNewlines:!0,mode:420}));let a=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await oe.removePromise(a);else for(let n of await oe.readdirPromise(a)){let u=V.resolve(a,n);this.unpluggedPaths.has(u)||await oe.removePromise(u)}}async locateNodeModules(e){let r=[],o=e?new RegExp(e):null;for(let a of this.opts.project.workspaces){let n=V.join(a.cwd,"node_modules");if(o&&o.test(V.relative(this.opts.project.cwd,a.cwd))||!oe.existsSync(n))continue;let u=await oe.readdirPromise(n,{withFileTypes:!0}),A=u.filter(p=>!p.isDirectory()||p.name===".bin"||!p.name.startsWith("."));if(A.length===u.length)r.push(n);else for(let p of A)r.push(V.join(n,p.name))}return r}async unplugPackageIfNeeded(e,r,o,a,n){return this.shouldBeUnplugged(e,r,a)?this.unplugPackage(e,o,n):o.packageFs}shouldBeUnplugged(e,r,o){return typeof o.unplugged<"u"?o.unplugged:qIt.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(IQ(e,r,o,{configuration:this.opts.project.configuration})?.skipped===!1||r.misc.extractHint)}async unplugPackage(e,r,o){let a=ov(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new Uu(a,{baseFs:r.packageFs,pathUtils:V}):(this.unpluggedPaths.add(a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let n=V.join(a,r.prefixPath,".ready");await oe.existsPromise(n)||(this.opts.project.storedBuildState.delete(e.locatorHash),await oe.mkdirPromise(a,{recursive:!0}),await oe.copyPromise(a,Bt.dot,{baseFs:r.packageFs,overwrite:!1}),await oe.writeFilePromise(n,""))})),new gn(a))}getPackageInformation(e){let r=G.stringifyIdent(e),o=e.reference,a=this.packageRegistry.get(r);if(!a)throw new Error(`Assertion failed: The package information store should have been available (for ${G.prettyIdent(this.opts.project.configuration,e)})`);let n=a.get(o);if(!n)throw new Error(`Assertion failed: The package information should have been available (for ${G.prettyLocator(this.opts.project.configuration,e)})`);return n}getDiskInformation(e){let r=_e.getMapWithDefault(this.packageRegistry,"@@disk"),o=oq(this.opts.project.cwd,e);return _e.getFactoryWithDefault(r,o,()=>({packageLocation:o,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1}))}};function oq(t,e){let r=V.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function GIt(t){let e=await Ot.tryFind(t.prefixPath,{baseFs:t.packageFs})??new Ot,r=new Set(["preinstall","install","postinstall"]);for(let o of e.scripts.keys())r.has(o)||e.scripts.delete(o);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:iq(t),hasBindingGyp:sq(t)}}}Ye();Ye();qt();var t1e=$e(Zo());var S0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);if(r.get("nodeLinker")!=="pnp")throw new it("This command can only be used if the `nodeLinker` option is set to `pnp`");await o.restoreInstallState();let u=new Set(this.patterns),A=this.patterns.map(b=>{let E=G.parseDescriptor(b),F=E.range!=="unknown"?E:G.makeDescriptor(E,"*");if(!Qr.validRange(F.range))throw new it(`The range of the descriptor patterns must be a valid semver range (${G.prettyDescriptor(r,F)})`);return N=>{let U=G.stringifyIdent(N);return!t1e.default.isMatch(U,G.stringifyIdent(F))||N.version&&!Qr.satisfiesWithPrereleases(N.version,F.range)?!1:(u.delete(b),!0)}}),p=()=>{let b=[];for(let E of o.storedPackages.values())!o.tryWorkspaceByLocator(E)&&!G.isVirtualLocator(E)&&A.some(F=>F(E))&&b.push(E);return b},h=b=>{let E=new Set,F=[],N=(U,z)=>{if(E.has(U.locatorHash))return;let te=!!o.tryWorkspaceByLocator(U);if(!(z>0&&!this.recursive&&te)&&(E.add(U.locatorHash),!o.tryWorkspaceByLocator(U)&&A.some(le=>le(U))&&F.push(U),!(z>0&&!this.recursive)))for(let le of U.dependencies.values()){let pe=o.storedResolutions.get(le.descriptorHash);if(!pe)throw new Error("Assertion failed: The resolution should have been registered");let ue=o.storedPackages.get(pe);if(!ue)throw new Error("Assertion failed: The package should have been registered");N(ue,z+1)}};for(let U of b)N(U.anchoredPackage,0);return F},C,I;if(this.all&&this.recursive?(C=p(),I="the project"):this.all?(C=h(o.workspaces),I="any workspace"):(C=h([a]),I="this workspace"),u.size>1)throw new it(`Patterns ${de.prettyList(r,u,de.Type.CODE)} don't match any packages referenced by ${I}`);if(u.size>0)throw new it(`Pattern ${de.prettyList(r,u,de.Type.CODE)} doesn't match any packages referenced by ${I}`);C=_e.sortMap(C,b=>G.stringifyLocator(b));let v=await Lt.start({configuration:r,stdout:this.context.stdout,json:this.json},async b=>{for(let E of C){let F=E.version??"unknown",N=o.topLevelWorkspace.manifest.ensureDependencyMeta(G.makeDescriptor(E,F));N.unplugged=!0,b.reportInfo(0,`Will unpack ${G.prettyLocator(r,E)} to ${de.pretty(r,ov(E,{configuration:r}),de.Type.PATH)}`),b.reportJson({locator:G.stringifyLocator(E),version:F})}await o.topLevelWorkspace.persistManifest(),this.json||b.reportSeparator()});return v.hasErrors()?v.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};S0.paths=[["unplug"]],S0.usage=nt.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]});var P0=t=>({cjs:V.join(t.cwd,dr.pnpCjs),data:V.join(t.cwd,dr.pnpData),esmLoader:V.join(t.cwd,dr.pnpEsmLoader)}),n1e=t=>/\s/.test(t)?JSON.stringify(t):t;async function YIt(t,e,r){let o=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/,n=(e.NODE_OPTIONS??"").replace(o," ").replace(a," ").trim();if(t.configuration.get("nodeLinker")!=="pnp"){e.NODE_OPTIONS=n;return}let u=P0(t),A=`--require ${n1e(fe.fromPortablePath(u.cjs))}`;oe.existsSync(u.esmLoader)&&(A=`${A} --experimental-loader ${(0,r1e.pathToFileURL)(fe.fromPortablePath(u.esmLoader)).href}`),oe.existsSync(u.cjs)&&(e.NODE_OPTIONS=n?`${A} ${n}`:A)}async function WIt(t,e){let r=P0(t);e(r.cjs),e(r.data),e(r.esmLoader),e(t.configuration.get("pnpUnpluggedFolder"))}var KIt={hooks:{populateYarnPaths:WIt,setupScriptEnvironment:YIt},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "node-modules"',type:"STRING",default:"pnp"},winLinkType:{description:"Whether Yarn should use Windows Junctions or symlinks when creating links on Windows.",type:"STRING",values:["junctions","symlinks"],default:"junctions"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:"STRING",default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:"STRING",default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:"STRING",default:[],isArray:!0},pnpEnableEsmLoader:{description:"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.",type:"BOOLEAN",default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:"BOOLEAN",default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:"STRING",default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:"ABSOLUTE_PATH",default:"./.yarn/unplugged"}},linkers:[D0],commands:[S0]},VIt=KIt;var A1e=$e(l1e());qt();var hq=$e(Be("crypto")),f1e=$e(Be("fs")),p1e=1,Pi="node_modules",BQ=".bin",h1e=".yarn-state.yml",A1t=1e3,gq=(o=>(o.CLASSIC="classic",o.HARDLINKS_LOCAL="hardlinks-local",o.HARDLINKS_GLOBAL="hardlinks-global",o))(gq||{}),lv=class{constructor(){this.installStateCache=new Map}getCustomDataKey(){return JSON.stringify({name:"NodeModulesLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the node-modules linker to be enabled");let o=r.project.tryWorkspaceByLocator(e);if(o)return o.cwd;let a=await _e.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await pq(r.project,{unrollAliases:!0}));if(a===null)throw new it("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let n=a.locatorMap.get(G.stringifyLocator(e));if(!n){let p=new it(`Couldn't find ${G.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw p.code="LOCATOR_NOT_INSTALLED",p}let u=n.locations.sort((p,h)=>p.split(V.sep).length-h.split(V.sep).length),A=V.join(r.project.configuration.startingCwd,Pi);return u.find(p=>V.contains(A,p))||n.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=await _e.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await pq(r.project,{unrollAliases:!0}));if(o===null)return null;let{locationRoot:a,segments:n}=vQ(V.resolve(e),{skipPrefix:r.project.cwd}),u=o.locationTree.get(a);if(!u)return null;let A=u.locator;for(let p of n){if(u=u.children.get(p),!u)break;A=u.locator||A}return G.parseLocator(A)}makeInstaller(e){return new fq(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},fq=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}attachCustomData(e){this.customData=e}async installPackage(e,r){let o=V.resolve(r.packageFs.getRealPath(),r.prefixPath),a=this.customData.store.get(e.locatorHash);if(typeof a>"u"&&(a=await f1t(e,r),e.linkType==="HARD"&&this.customData.store.set(e.locatorHash,a)),!G.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildRequest:null};let n=new Map,u=new Set;n.has(G.stringifyIdent(e))||n.set(G.stringifyIdent(e),e.reference);let A=e;if(G.isVirtualLocator(e)){A=G.devirtualizeLocator(e);for(let C of e.peerDependencies.values())n.set(G.stringifyIdent(C),null),u.add(G.stringifyIdent(C))}let p={packageLocation:`${fe.fromPortablePath(o)}/`,packageDependencies:n,packagePeers:u,linkType:e.linkType,discardFromLookup:r.discardFromLookup??!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:a,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:p});let h=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(A.locatorHash,h),{packageLocation:o,buildRequest:null}}async attachInternalDependencies(e,r){let o=this.localStore.get(e.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected information object to have been registered");for(let[a,n]of r){let u=G.areIdentsEqual(a,n)?n.reference:[G.stringifyIdent(n),n.reference];o.pnpNode.packageDependencies.set(G.stringifyIdent(a),u)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new mi({baseFs:new zl({maxOpenFiles:80,readOnlyArchives:!0})}),r=await pq(this.opts.project),o=this.opts.project.configuration.get("nmMode");(r===null||o!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:o,mtimeMs:0});let a=new Map(this.opts.project.workspaces.map(v=>{let b=this.opts.project.configuration.get("nmHoistingLimits");try{b=_e.validateEnum(VB,v.manifest.installConfig?.hoistingLimits??b)}catch{let F=G.prettyWorkspace(this.opts.project.configuration,v);this.opts.report.reportWarning(57,`${F}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(VB).join(", ")}, using default: "${b}"`)}return[v.relativeCwd,b]})),n=new Map(this.opts.project.workspaces.map(v=>{let b=this.opts.project.configuration.get("nmSelfReferences");return b=v.manifest.installConfig?.selfReferences??b,[v.relativeCwd,b]})),u={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(v,b)=>Array.isArray(b)?{name:b[0],reference:b[1]}:{name:v,reference:b},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(v=>{let b=v.anchoredLocator;return{name:G.stringifyIdent(b),reference:b.reference}}),getPackageInformation:v=>{let b=v.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:G.makeLocator(G.parseIdent(v.name),v.reference),E=this.localStore.get(b.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: Expected the package reference to have been registered");return E.pnpNode},findPackageLocator:v=>{let b=this.opts.project.tryWorkspaceByCwd(fe.toPortablePath(v));if(b!==null){let E=b.anchoredLocator;return{name:G.stringifyIdent(E),reference:E.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:v=>fe.fromPortablePath(mi.resolveVirtual(fe.toPortablePath(v)))},{tree:A,errors:p,preserveSymlinksRequired:h}=zB(u,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:a,project:this.opts.project,selfReferencesByCwd:n});if(!A){for(let{messageName:v,text:b}of p)this.opts.report.reportError(v,b);return}let C=Hj(A);await y1t(r,C,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async v=>{let b=G.parseLocator(v),E=this.localStore.get(b.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: Expected the slot to exist");return E.customPackageData.manifest}});let I=[];for(let[v,b]of C.entries()){if(y1e(v))continue;let E=G.parseLocator(v),F=this.localStore.get(E.locatorHash);if(typeof F>"u")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(F.pkg))continue;let N=mA.extractBuildRequest(F.pkg,F.customPackageData,F.dependencyMeta,{configuration:this.opts.project.configuration});!N||I.push({buildLocations:b.locations,locator:E,buildRequest:N})}return h&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${de.pretty(this.opts.project.configuration,"--preserve-symlinks",de.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:I}}};async function f1t(t,e){let r=await Ot.tryFind(e.prefixPath,{baseFs:e.packageFs})??new Ot,o=new Set(["preinstall","install","postinstall"]);for(let a of r.scripts.keys())o.has(a)||r.scripts.delete(a);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{hasBindingGyp:mA.hasBindingGyp(e)}}}async function p1t(t,e,r,o,{installChangedByUser:a}){let n="";n+=`# Warning: This file is automatically generated. Removing it is fine, but will -`,n+=`# cause your node_modules installation to become invalidated. -`,n+=` -`,n+=`__metadata: -`,n+=` version: ${p1e} -`,n+=` nmMode: ${o.value} -`;let u=Array.from(e.keys()).sort(),A=G.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let C of u){let I=e.get(C);n+=` -`,n+=`${JSON.stringify(C)}: -`,n+=` locations: -`;for(let v of I.locations){let b=V.contains(t.cwd,v);if(b===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` - ${JSON.stringify(b)} -`}if(I.aliases.length>0){n+=` aliases: -`;for(let v of I.aliases)n+=` - ${JSON.stringify(v)} -`}if(C===A&&r.size>0){n+=` bin: -`;for(let[v,b]of r){let E=V.contains(t.cwd,v);if(E===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` ${JSON.stringify(E)}: -`;for(let[F,N]of b){let U=V.relative(V.join(v,Pi),N);n+=` ${JSON.stringify(F)}: ${JSON.stringify(U)} -`}}}}let p=t.cwd,h=V.join(p,Pi,h1e);a&&await oe.removePromise(h),await oe.changeFilePromise(h,n,{automaticNewlines:!0})}async function pq(t,{unrollAliases:e=!1}={}){let r=t.cwd,o=V.join(r,Pi,h1e),a;try{a=await oe.statPromise(o)}catch{}if(!a)return null;let n=Ki(await oe.readFilePromise(o,"utf8"));if(n.__metadata.version>p1e)return null;let u=n.__metadata.nmMode||"classic",A=new Map,p=new Map;delete n.__metadata;for(let[h,C]of Object.entries(n)){let I=C.locations.map(b=>V.join(r,b)),v=C.bin;if(v)for(let[b,E]of Object.entries(v)){let F=V.join(r,fe.toPortablePath(b)),N=_e.getMapWithDefault(p,F);for(let[U,z]of Object.entries(E))N.set(U,fe.toPortablePath([F,Pi,z].join(V.sep)))}if(A.set(h,{target:Bt.dot,linkType:"HARD",locations:I,aliases:C.aliases||[]}),e&&C.aliases)for(let b of C.aliases){let{scope:E,name:F}=G.parseLocator(h),N=G.makeLocator(G.makeIdent(E,F),b),U=G.stringifyLocator(N);A.set(U,{target:Bt.dot,linkType:"HARD",locations:I,aliases:[]})}}return{locatorMap:A,binSymlinks:p,locationTree:g1e(A,{skipPrefix:t.cwd}),nmMode:u,mtimeMs:a.mtimeMs}}var YC=async(t,e)=>{if(t.split(V.sep).indexOf(Pi)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{if(!e.innerLoop){let o=e.allowSymlink?await oe.statPromise(t):await oe.lstatPromise(t);if(e.allowSymlink&&!o.isDirectory()||!e.allowSymlink&&o.isSymbolicLink()){await oe.unlinkPromise(t);return}}let r=await oe.readdirPromise(t,{withFileTypes:!0});for(let o of r){let a=V.join(t,o.name);o.isDirectory()?(o.name!==Pi||e&&e.innerLoop)&&await YC(a,{innerLoop:!0,contentsOnly:!1}):await oe.unlinkPromise(a)}e.contentsOnly||await oe.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},c1e=4,vQ=(t,{skipPrefix:e})=>{let r=V.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let o=r.split(V.sep).filter(p=>p!==""),a=o.indexOf(Pi),n=o.slice(0,a).join(V.sep),u=V.join(e,n),A=o.slice(a);return{locationRoot:u,segments:A}},g1e=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let o=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&V.contains(e,n.target)!==null){let A=_e.getFactoryWithDefault(r,n.target,o);A.locator=a,A.linkType=n.linkType}for(let u of n.locations){let{locationRoot:A,segments:p}=vQ(u,{skipPrefix:e}),h=_e.getFactoryWithDefault(r,A,o);for(let C=0;C{if(process.platform==="win32"&&r==="junctions"){let o;try{o=await oe.lstatPromise(t)}catch{}if(!o||o.isDirectory()){await oe.symlinkPromise(t,e,"junction");return}}await oe.symlinkPromise(V.relative(V.dirname(e),t),e)};async function d1e(t,e,r){let o=V.join(t,`${hq.default.randomBytes(16).toString("hex")}.tmp`);try{await oe.writeFilePromise(o,r);try{await oe.linkPromise(o,e)}catch{}}finally{await oe.unlinkPromise(o)}}async function h1t({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:o,baseFs:a,nmMode:n}){if(r.kind===m1e.FILE){if(n.value==="hardlinks-global"&&o&&r.digest){let A=V.join(o,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await oe.statPromise(A);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs(o.FILE="file",o.DIRECTORY="directory",o.SYMLINK="symlink",o))(m1e||{}),g1t=async(t,e,{baseFs:r,globalHardlinksStore:o,nmMode:a,windowsLinkType:n,packageChecksum:u})=>{await oe.mkdirPromise(t,{recursive:!0});let A=async(C=Bt.dot)=>{let I=V.join(e,C),v=await r.readdirPromise(I,{withFileTypes:!0}),b=new Map;for(let E of v){let F=V.join(C,E.name),N,U=V.join(I,E.name);if(E.isFile()){if(N={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let z=await wn.checksumFile(U,{baseFs:r,algorithm:"sha1"});N.digest=z}}else if(E.isDirectory())N={kind:"directory"};else if(E.isSymbolicLink())N={kind:"symlink",symlinkTo:await r.readlinkPromise(U)};else throw new Error(`Unsupported file type (file: ${U}, mode: 0o${await r.statSync(U).mode.toString(8).padStart(6,"0")})`);if(b.set(F,N),E.isDirectory()&&F!==Pi){let z=await A(F);for(let[te,le]of z)b.set(te,le)}}return b},p;if(a.value==="hardlinks-global"&&o&&u){let C=V.join(o,u.substring(0,2),`${u.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await oe.readFilePromise(C,"utf8"))))}catch{p=await A()}}else p=await A();let h=!1;for(let[C,I]of p){let v=V.join(e,C),b=V.join(t,C);if(I.kind==="directory")await oe.mkdirPromise(b,{recursive:!0});else if(I.kind==="file"){let E=I.mtimeMs;await h1t({srcPath:v,dstPath:b,entry:I,nmMode:a,baseFs:r,globalHardlinksStore:o}),I.mtimeMs!==E&&(h=!0)}else I.kind==="symlink"&&await dq(V.resolve(V.dirname(b),I.symlinkTo),b,n)}if(a.value==="hardlinks-global"&&o&&h&&u){let C=V.join(o,u.substring(0,2),`${u.substring(2)}.json`);await oe.removePromise(C),await d1e(o,C,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function d1t(t,e,r,o){let a=new Map,n=new Map,u=new Map,A=!1,p=(h,C,I,v,b)=>{let E=!0,F=V.join(h,C),N=new Set;if(C===Pi||C.startsWith("@")){let z;try{z=oe.statSync(F)}catch{}E=!!z,z?z.mtimeMs>r?(A=!0,N=new Set(oe.readdirSync(F))):N=new Set(I.children.get(C).children.keys()):A=!0;let te=e.get(h);if(te){let le=V.join(h,Pi,BQ),pe;try{pe=oe.statSync(le)}catch{}if(!pe)A=!0;else if(pe.mtimeMs>r){A=!0;let ue=new Set(oe.readdirSync(le)),ye=new Map;n.set(h,ye);for(let[ae,Ie]of te)ue.has(ae)&&ye.set(ae,Ie)}else n.set(h,te)}}else E=b.has(C);let U=I.children.get(C);if(E){let{linkType:z,locator:te}=U,le={children:new Map,linkType:z,locator:te};if(v.children.set(C,le),te){let pe=_e.getSetWithDefault(u,te);pe.add(F),u.set(te,pe)}for(let pe of U.children.keys())p(F,pe,U,le,N)}else U.locator&&o.storedBuildState.delete(G.parseLocator(U.locator).locatorHash)};for(let[h,C]of t){let{linkType:I,locator:v}=C,b={children:new Map,linkType:I,locator:v};if(a.set(h,b),v){let E=_e.getSetWithDefault(u,C.locator);E.add(h),u.set(C.locator,E)}C.children.has(Pi)&&p(h,Pi,C,b,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:u,installChangedByUser:A}}function y1e(t){let e=G.parseDescriptor(t);return G.isVirtualDescriptor(e)&&(e=G.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function m1t(t,e,r,{loadManifest:o}){let a=new Map;for(let[A,{locations:p}]of t){let h=y1e(A)?null:await o(A,p[0]),C=new Map;if(h)for(let[I,v]of h.bin){let b=V.join(p[0],v);v!==""&&oe.existsSync(b)&&C.set(I,v)}a.set(A,C)}let n=new Map,u=(A,p,h)=>{let C=new Map,I=V.contains(r,A);if(h.locator&&I!==null){let v=a.get(h.locator);for(let[b,E]of v){let F=V.join(A,fe.toPortablePath(E));C.set(b,F)}for(let[b,E]of h.children){let F=V.join(A,b),N=u(F,F,E);N.size>0&&n.set(A,new Map([...n.get(A)||new Map,...N]))}}else for(let[v,b]of h.children){let E=u(V.join(A,v),p,b);for(let[F,N]of E)C.set(F,N)}return C};for(let[A,p]of e){let h=u(A,A,p);h.size>0&&n.set(A,new Map([...n.get(A)||new Map,...h]))}return n}var u1e=(t,e)=>{if(!t||!e)return t===e;let r=G.parseLocator(t);G.isVirtualLocator(r)&&(r=G.devirtualizeLocator(r));let o=G.parseLocator(e);return G.isVirtualLocator(o)&&(o=G.devirtualizeLocator(o)),G.areLocatorsEqual(r,o)};function mq(t){return V.join(t.get("globalFolder"),"store")}async function y1t(t,e,{baseFs:r,project:o,report:a,loadManifest:n,realLocatorChecksums:u}){let A=V.join(o.cwd,Pi),{locationTree:p,binSymlinks:h,locatorLocations:C,installChangedByUser:I}=d1t(t.locationTree,t.binSymlinks,t.mtimeMs,o),v=g1e(e,{skipPrefix:o.cwd}),b=[],E=async({srcDir:Ie,dstDir:Fe,linkType:g,globalHardlinksStore:Ee,nmMode:De,windowsLinkType:ce,packageChecksum:ne})=>{let ee=(async()=>{try{g==="SOFT"?(await oe.mkdirPromise(V.dirname(Fe),{recursive:!0}),await dq(V.resolve(Ie),Fe,ce)):await g1t(Fe,Ie,{baseFs:r,globalHardlinksStore:Ee,nmMode:De,windowsLinkType:ce,packageChecksum:ne})}catch(we){throw we.message=`While persisting ${Ie} -> ${Fe} ${we.message}`,we}finally{le.tick()}})().then(()=>b.splice(b.indexOf(ee),1));b.push(ee),b.length>c1e&&await Promise.race(b)},F=async(Ie,Fe,g)=>{let Ee=(async()=>{let De=async(ce,ne,ee)=>{try{ee.innerLoop||await oe.mkdirPromise(ne,{recursive:!0});let we=await oe.readdirPromise(ce,{withFileTypes:!0});for(let be of we){if(!ee.innerLoop&&be.name===BQ)continue;let ht=V.join(ce,be.name),H=V.join(ne,be.name);be.isDirectory()?(be.name!==Pi||ee&&ee.innerLoop)&&(await oe.mkdirPromise(H,{recursive:!0}),await De(ht,H,{...ee,innerLoop:!0})):ye.value==="hardlinks-local"||ye.value==="hardlinks-global"?await oe.linkPromise(ht,H):await oe.copyFilePromise(ht,H,f1e.default.constants.COPYFILE_FICLONE)}}catch(we){throw ee.innerLoop||(we.message=`While cloning ${ce} -> ${ne} ${we.message}`),we}finally{ee.innerLoop||le.tick()}};await De(Ie,Fe,g)})().then(()=>b.splice(b.indexOf(Ee),1));b.push(Ee),b.length>c1e&&await Promise.race(b)},N=async(Ie,Fe,g)=>{if(g)for(let[Ee,De]of Fe.children){let ce=g.children.get(Ee);await N(V.join(Ie,Ee),De,ce)}else{Fe.children.has(Pi)&&await YC(V.join(Ie,Pi),{contentsOnly:!1});let Ee=V.basename(Ie)===Pi&&v.has(V.join(V.dirname(Ie),V.sep));await YC(Ie,{contentsOnly:Ie===A,allowSymlink:Ee})}};for(let[Ie,Fe]of p){let g=v.get(Ie);for(let[Ee,De]of Fe.children){if(Ee===".")continue;let ce=g&&g.children.get(Ee),ne=V.join(Ie,Ee);await N(ne,De,ce)}}let U=async(Ie,Fe,g)=>{if(g){u1e(Fe.locator,g.locator)||await YC(Ie,{contentsOnly:Fe.linkType==="HARD"});for(let[Ee,De]of Fe.children){let ce=g.children.get(Ee);await U(V.join(Ie,Ee),De,ce)}}else{Fe.children.has(Pi)&&await YC(V.join(Ie,Pi),{contentsOnly:!0});let Ee=V.basename(Ie)===Pi&&v.has(V.join(V.dirname(Ie),V.sep));await YC(Ie,{contentsOnly:Fe.linkType==="HARD",allowSymlink:Ee})}};for(let[Ie,Fe]of v){let g=p.get(Ie);for(let[Ee,De]of Fe.children){if(Ee===".")continue;let ce=g&&g.children.get(Ee);await U(V.join(Ie,Ee),De,ce)}}let z=new Map,te=[];for(let[Ie,Fe]of C)for(let g of Fe){let{locationRoot:Ee,segments:De}=vQ(g,{skipPrefix:o.cwd}),ce=v.get(Ee),ne=Ee;if(ce){for(let ee of De)if(ne=V.join(ne,ee),ce=ce.children.get(ee),!ce)break;if(ce){let ee=u1e(ce.locator,Ie),we=e.get(ce.locator),be=we.target,ht=ne,H=we.linkType;if(ee)z.has(be)||z.set(be,ht);else if(be!==ht){let lt=G.parseLocator(ce.locator);G.isVirtualLocator(lt)&&(lt=G.devirtualizeLocator(lt)),te.push({srcDir:be,dstDir:ht,linkType:H,realLocatorHash:lt.locatorHash})}}}}for(let[Ie,{locations:Fe}]of e.entries())for(let g of Fe){let{locationRoot:Ee,segments:De}=vQ(g,{skipPrefix:o.cwd}),ce=p.get(Ee),ne=v.get(Ee),ee=Ee,we=e.get(Ie),be=G.parseLocator(Ie);G.isVirtualLocator(be)&&(be=G.devirtualizeLocator(be));let ht=be.locatorHash,H=we.target,lt=g;if(H===lt)continue;let Te=we.linkType;for(let ke of De)ne=ne.children.get(ke);if(!ce)te.push({srcDir:H,dstDir:lt,linkType:Te,realLocatorHash:ht});else for(let ke of De)if(ee=V.join(ee,ke),ce=ce.children.get(ke),!ce){te.push({srcDir:H,dstDir:lt,linkType:Te,realLocatorHash:ht});break}}let le=Xs.progressViaCounter(te.length),pe=a.reportProgress(le),ue=o.configuration.get("nmMode"),ye={value:ue},ae=o.configuration.get("winLinkType");try{let Ie=ye.value==="hardlinks-global"?`${mq(o.configuration)}/v1`:null;if(Ie&&!await oe.existsPromise(Ie)){await oe.mkdirpPromise(Ie);for(let g=0;g<256;g++)await oe.mkdirPromise(V.join(Ie,g.toString(16).padStart(2,"0")))}for(let g of te)(g.linkType==="SOFT"||!z.has(g.srcDir))&&(z.set(g.srcDir,g.dstDir),await E({...g,globalHardlinksStore:Ie,nmMode:ye,windowsLinkType:ae,packageChecksum:u.get(g.realLocatorHash)||null}));await Promise.all(b),b.length=0;for(let g of te){let Ee=z.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==Ee&&await F(Ee,g.dstDir,{nmMode:ye})}await Promise.all(b),await oe.mkdirPromise(A,{recursive:!0});let Fe=await m1t(e,v,o.cwd,{loadManifest:n});await E1t(h,Fe,o.cwd,ae),await p1t(o,e,Fe,ye,{installChangedByUser:I}),ue=="hardlinks-global"&&ye.value=="hardlinks-local"&&a.reportWarningOnce(74,"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices")}finally{pe.stop()}}async function E1t(t,e,r,o){for(let a of t.keys()){if(V.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);if(!e.has(a)){let n=V.join(a,Pi,BQ);await oe.removePromise(n)}}for(let[a,n]of e){if(V.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let u=V.join(a,Pi,BQ),A=t.get(a)||new Map;await oe.mkdirPromise(u,{recursive:!0});for(let p of A.keys())n.has(p)||(await oe.removePromise(V.join(u,p)),process.platform==="win32"&&await oe.removePromise(V.join(u,`${p}.cmd`)));for(let[p,h]of n){let C=A.get(p),I=V.join(u,p);C!==h&&(process.platform==="win32"?await(0,A1e.default)(fe.fromPortablePath(h),fe.fromPortablePath(I),{createPwshFile:!1}):(await oe.removePromise(I),await dq(h,I,o),V.contains(r,await oe.realpathPromise(h))!==null&&await oe.chmodPromise(h,493)))}}}Ye();Pt();nA();var cv=class extends D0{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new yq(r)}},yq=class extends dm{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let o=new mi({baseFs:new zl({maxOpenFiles:80,readOnlyArchives:!0})}),a=XIe(r,this.opts.project.cwd,o),{tree:n,errors:u}=zB(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:I,text:v}of u)this.opts.report.reportError(I,v);return}let A=new Map;r.fallbackPool=A;let p=(I,v)=>{let b=G.parseLocator(v.locator),E=G.stringifyIdent(b);E===I?A.set(I,b.reference):A.set(I,[E,b.reference])},h=V.join(this.opts.project.cwd,dr.nodeModules),C=n.get(h);if(!(typeof C>"u")){if("target"in C)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let I of C.dirList){let v=V.join(h,I),b=n.get(v);if(typeof b>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in b)p(I,b);else for(let E of b.dirList){let F=V.join(v,E),N=n.get(F);if(typeof N>"u")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in N)p(`${I}/${E}`,N);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var C1t={hooks:{cleanGlobalArtifacts:async t=>{let e=mq(t);await oe.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevents packages to be hoisted past specific levels",type:"STRING",values:["workspaces","dependencies","none"],default:"none"},nmMode:{description:"Defines in which measure Yarn must use hardlinks and symlinks when generated `node_modules` directories.",type:"STRING",values:["classic","hardlinks-local","hardlinks-global"],default:"classic"},nmSelfReferences:{description:"Defines whether the linker should generate self-referencing symlinks for workspaces.",type:"BOOLEAN",default:!0}},linkers:[lv,cv]},w1t=C1t;var yG={};Vt(yG,{NpmHttpFetcher:()=>fv,NpmRemapResolver:()=>pv,NpmSemverFetcher:()=>dl,NpmSemverResolver:()=>hv,NpmTagResolver:()=>gv,default:()=>Rvt,npmConfigUtils:()=>Zn,npmHttpUtils:()=>on,npmPublishUtils:()=>sw});Ye();var P1e=$e(Jn());var Wn="npm:";var on={};Vt(on,{AuthType:()=>v1e,customPackageError:()=>mm,del:()=>k1t,get:()=>ym,getIdentUrl:()=>DQ,getPackageMetadata:()=>VC,handleInvalidAuthenticationError:()=>x0,post:()=>x1t,put:()=>b1t});Ye();Ye();Pt();var Iq=$e(u2()),I1e=$e(D_()),B1e=$e(Jn()),Bq=Be("url");var Zn={};Vt(Zn,{RegistryType:()=>E1e,getAuditRegistry:()=>I1t,getAuthConfiguration:()=>wq,getDefaultRegistry:()=>uv,getPublishRegistry:()=>B1t,getRegistryConfiguration:()=>C1e,getScopeConfiguration:()=>Cq,getScopeRegistry:()=>WC,normalizeRegistry:()=>oc});var E1e=(o=>(o.AUDIT_REGISTRY="npmAuditRegistry",o.FETCH_REGISTRY="npmRegistryServer",o.PUBLISH_REGISTRY="npmPublishRegistry",o))(E1e||{});function oc(t){return t.replace(/\/$/,"")}function I1t({configuration:t}){return uv({configuration:t,type:"npmAuditRegistry"})}function B1t(t,{configuration:e}){return t.publishConfig?.registry?oc(t.publishConfig.registry):t.name?WC(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):uv({configuration:e,type:"npmPublishRegistry"})}function WC(t,{configuration:e,type:r="npmRegistryServer"}){let o=Cq(t,{configuration:e});if(o===null)return uv({configuration:e,type:r});let a=o.get(r);return a===null?uv({configuration:e,type:r}):oc(a)}function uv({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return oc(r!==null?r:t.get("npmRegistryServer"))}function C1e(t,{configuration:e}){let r=e.get("npmRegistries"),o=oc(t),a=r.get(o);if(typeof a<"u")return a;let n=r.get(o.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}function Cq(t,{configuration:e}){if(t===null)return null;let o=e.get("npmScopes").get(t);return o||null}function wq(t,{configuration:e,ident:r}){let o=r&&Cq(r.scope,{configuration:e});return o?.get("npmAuthIdent")||o?.get("npmAuthToken")?o:C1e(t,{configuration:e})||e}var v1e=(a=>(a[a.NO_AUTH=0]="NO_AUTH",a[a.BEST_EFFORT=1]="BEST_EFFORT",a[a.CONFIGURATION=2]="CONFIGURATION",a[a.ALWAYS_AUTH=3]="ALWAYS_AUTH",a))(v1e||{});async function x0(t,{attemptedAs:e,registry:r,headers:o,configuration:a}){if(SQ(t))throw new Jt(41,"Invalid OTP token");if(t.originalError?.name==="HTTPError"&&t.originalError?.response.statusCode===401)throw new Jt(41,`Invalid authentication (${typeof e!="string"?`as ${await F1t(r,o,{configuration:a})}`:`attempted as ${e}`})`)}function mm(t,e){let r=t.response?.statusCode;return r?r===404?"Package not found":r>=500&&r<600?`The registry appears to be down (using a ${de.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function DQ(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var w1e=new Map;async function VC(t,{cache:e,project:r,registry:o,headers:a,version:n,...u}){return await _e.getFactoryWithDefault(w1e,t.identHash,async()=>{let{configuration:A}=r;o=Av(A,{ident:t,registry:o});let p=P1t(A,o),h=V.join(p,`${G.slugifyIdent(t)}.json`),C=null;if(!r.lockfileNeedsRefresh){try{C=await oe.readJsonPromise(h)}catch{}if(C){if(typeof n<"u"&&typeof C.metadata.versions[n]<"u")return C.metadata;if(A.get("enableOfflineMode")){let I=structuredClone(C.metadata),v=new Set;if(e){for(let E of Object.keys(I.versions)){let F=G.makeLocator(t,`npm:${E}`),N=e.getLocatorMirrorPath(F);(!N||!oe.existsSync(N))&&(delete I.versions[E],v.add(E))}let b=I["dist-tags"].latest;if(v.has(b)){let E=Object.keys(C.metadata.versions).sort(B1e.default.compare),F=E.indexOf(b);for(;v.has(E[F])&&F>=0;)F-=1;F>=0?I["dist-tags"].latest=E[F]:delete I["dist-tags"].latest}}return I}}}return await ym(DQ(t),{...u,customErrorMessage:mm,configuration:A,registry:o,ident:t,headers:{...a,["If-None-Match"]:C?.etag,["If-Modified-Since"]:C?.lastModified},wrapNetworkRequest:async I=>async()=>{let v=await I();if(v.statusCode===304){if(C===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...v,body:C.metadata}}let b=v1t(JSON.parse(v.body.toString()));w1e.set(t.identHash,b);let E={metadata:b,etag:v.headers.etag,lastModified:v.headers["last-modified"]},F=`${h}-${process.pid}.tmp`;return await oe.mkdirPromise(p,{recursive:!0}),await oe.writeJsonPromise(F,E,{compact:!0}),await oe.renamePromise(F,h),{...v,body:b}}})})}var D1e=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function v1t(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,(0,I1e.default)(r,D1e)]))}}var D1t=wn.makeHash(...D1e).slice(0,6);function P1t(t,e){let r=S1t(t),o=new Bq.URL(e);return V.join(r,D1t,o.hostname)}function S1t(t){return V.join(t.get("globalFolder"),"metadata/npm")}async function ym(t,{configuration:e,headers:r,ident:o,authType:a,registry:n,...u}){n=Av(e,{ident:o,registry:n}),o&&o.scope&&typeof a>"u"&&(a=1);let A=await PQ(n,{authType:a,configuration:e,ident:o});A&&(r={...r,authorization:A});try{return await rn.get(t.charAt(0)==="/"?`${n}${t}`:t,{configuration:e,headers:r,...u})}catch(p){throw await x0(p,{registry:n,configuration:e,headers:r}),p}}async function x1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let C=await PQ(A,{authType:u,configuration:o,ident:n});C&&(a={...a,authorization:C}),p&&(a={...a,...KC(p)});try{return await rn.post(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!SQ(I)||p)throw await x0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await vq(I,{configuration:o});let v={...a,...KC(p)};try{return await rn.post(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(b){throw await x0(b,{attemptedAs:r,registry:A,configuration:o,headers:a}),b}}}async function b1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let C=await PQ(A,{authType:u,configuration:o,ident:n});C&&(a={...a,authorization:C}),p&&(a={...a,...KC(p)});try{return await rn.put(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!SQ(I))throw await x0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await vq(I,{configuration:o});let v={...a,...KC(p)};try{return await rn.put(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(b){throw await x0(b,{attemptedAs:r,registry:A,configuration:o,headers:a}),b}}}async function k1t(t,{attemptedAs:e,configuration:r,headers:o,ident:a,authType:n=3,registry:u,otp:A,...p}){u=Av(r,{ident:a,registry:u});let h=await PQ(u,{authType:n,configuration:r,ident:a});h&&(o={...o,authorization:h}),A&&(o={...o,...KC(A)});try{return await rn.del(u+t,{configuration:r,headers:o,...p})}catch(C){if(!SQ(C)||A)throw await x0(C,{attemptedAs:e,registry:u,configuration:r,headers:o}),C;A=await vq(C,{configuration:r});let I={...o,...KC(A)};try{return await rn.del(`${u}${t}`,{configuration:r,headers:I,...p})}catch(v){throw await x0(v,{attemptedAs:e,registry:u,configuration:r,headers:o}),v}}}function Av(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return WC(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return oc(r)}async function PQ(t,{authType:e=2,configuration:r,ident:o}){let a=wq(t,{configuration:r,ident:o}),n=Q1t(a,e);if(!n)return null;let u=await r.reduceHook(A=>A.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:o});if(u)return u;if(a.get("npmAuthToken"))return`Bearer ${a.get("npmAuthToken")}`;if(a.get("npmAuthIdent")){let A=a.get("npmAuthIdent");return A.includes(":")?`Basic ${Buffer.from(A).toString("base64")}`:`Basic ${A}`}if(n&&e!==1)throw new Jt(33,"No authentication configured for request");return null}function Q1t(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function F1t(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await rn.get(new Bq.URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function vq(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Lt.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,de.pretty(e,"$1",de.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&zi.openUrl){let{openNow:u}=await(0,Iq.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});u&&(await zi.openUrl(n[1])||(a.reportSeparator(),a.reportWarning(0,"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.")))}}}),process.stdout.write(` -`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||"";let{otp:o}=await(0,Iq.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(` -`),o}function SQ(t){if(t.originalError?.name!=="HTTPError")return!1;try{return(t.originalError?.response.headers["www-authenticate"].split(/,\s*/).map(r=>r.toLowerCase())).includes("otp")}catch{return!1}}function KC(t){return{["npm-otp"]:t}}var fv=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o,params:a}=G.parseRange(e.reference);return!(!P1e.default.valid(o)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let{params:o}=G.parseRange(e.reference);if(o===null||typeof o.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await ym(o.__archiveUrl,{customErrorMessage:mm,configuration:r.project.configuration,ident:e});return await Xi.convertToZip(a,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})}};Ye();var pv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!G.tryParseDescriptor(e.range.slice(Wn.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){let o=r.project.configuration.normalizeDependency(G.parseDescriptor(e.range.slice(Wn.length),!0));return r.resolver.getResolutionDependencies(o,r)}async getCandidates(e,r,o){let a=o.project.configuration.normalizeDependency(G.parseDescriptor(e.range.slice(Wn.length),!0));return await o.resolver.getCandidates(a,r,o)}async getSatisfying(e,r,o,a){let n=a.project.configuration.normalizeDependency(G.parseDescriptor(e.range.slice(Wn.length),!0));return a.resolver.getSatisfying(n,r,o,a)}resolve(e,r){throw new Error("Unreachable")}};Ye();Ye();var S1e=$e(Jn()),x1e=Be("url");var dl=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let o=new x1e.URL(e.reference);return!(!S1e.default.valid(o.pathname)||o.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o;try{o=await ym(dl.getLocatorUrl(e),{customErrorMessage:mm,configuration:r.project.configuration,ident:e})}catch{o=await ym(dl.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:mm,configuration:r.project.configuration,ident:e})}return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:o}){let a=WC(e.scope,{configuration:o}),n=dl.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),a=a.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===a+n||r===a+n.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=Qr.clean(e.reference.slice(Wn.length));if(r===null)throw new Jt(10,"The npm semver resolver got selected, but the version isn't semver");return`${DQ(e)}/-/${e.name}-${r}.tgz`}};Ye();Ye();Ye();var Dq=$e(Jn());var xQ=G.makeIdent(null,"node-gyp"),R1t=/\b(node-gyp|prebuild-install)\b/,hv=class{supportsDescriptor(e,r){return e.range.startsWith(Wn)?!!Qr.validRange(e.range.slice(Wn.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o}=G.parseRange(e.reference);return!!Dq.default.valid(o)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=Qr.validRange(e.range.slice(Wn.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);let n=await VC(e,{cache:o.fetchOptions?.cache,project:o.project,version:Dq.default.valid(a.raw)?a.raw:void 0}),u=_e.mapAndFilter(Object.keys(n.versions),h=>{try{let C=new Qr.SemVer(h);if(a.test(C))return C}catch{}return _e.mapAndFilter.skip}),A=u.filter(h=>!n.versions[h.raw].deprecated),p=A.length>0?A:u;return p.sort((h,C)=>-h.compare(C)),p.map(h=>{let C=G.makeLocator(e,`${Wn}${h.raw}`),I=n.versions[h.raw].dist.tarball;return dl.isConventionalTarballUrl(C,I,{configuration:o.project.configuration})?C:G.bindLocator(C,{__archiveUrl:I})})}async getSatisfying(e,r,o,a){let n=Qr.validRange(e.range.slice(Wn.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);return{locators:_e.mapAndFilter(o,p=>{if(p.identHash!==e.identHash)return _e.mapAndFilter.skip;let h=G.tryParseRange(p.reference,{requireProtocol:Wn});if(!h)return _e.mapAndFilter.skip;let C=new Qr.SemVer(h.selector);return n.test(C)?{locator:p,version:C}:_e.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:o}=G.parseRange(e.reference),a=Qr.clean(o);if(a===null)throw new Jt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await VC(e,{cache:r.fetchOptions?.cache,project:r.project,version:a});if(!Object.hasOwn(n,"versions"))throw new Jt(15,'Registry returned invalid data for - missing "versions" field');if(!Object.hasOwn(n.versions,a))throw new Jt(16,`Registry failed to return reference "${a}"`);let u=new Ot;if(u.load(n.versions[a]),!u.dependencies.has(xQ.identHash)&&!u.peerDependencies.has(xQ.identHash)){for(let A of u.scripts.values())if(A.match(R1t)){u.dependencies.set(xQ.identHash,G.makeDescriptor(xQ,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:u.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(u.dependencies),peerDependencies:u.peerDependencies,dependenciesMeta:u.dependenciesMeta,peerDependenciesMeta:u.peerDependenciesMeta,bin:u.bin}}};Ye();Ye();var b1e=$e(Jn());var gv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!QE.test(e.range.slice(Wn.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(Wn.length),n=await VC(e,{cache:o.fetchOptions?.cache,project:o.project});if(!Object.hasOwn(n,"dist-tags"))throw new Jt(15,'Registry returned invalid data - missing "dist-tags" field');let u=n["dist-tags"];if(!Object.hasOwn(u,a))throw new Jt(16,`Registry failed to return tag "${a}"`);let A=u[a],p=G.makeLocator(e,`${Wn}${A}`),h=n.versions[A].dist.tarball;return dl.isConventionalTarballUrl(p,h,{configuration:o.project.configuration})?[p]:[G.bindLocator(p,{__archiveUrl:h})]}async getSatisfying(e,r,o,a){let n=[];for(let u of o){if(u.identHash!==e.identHash)continue;let A=G.tryParseRange(u.reference,{requireProtocol:Wn});if(!(!A||!b1e.default.valid(A.selector))){if(A.params?.__archiveUrl){let p=G.makeRange({protocol:Wn,selector:A.selector,source:null,params:null}),[h]=await a.resolver.getCandidates(G.makeDescriptor(e,p),r,a);if(u.reference!==h.reference)continue}n.push(u)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var sw={};Vt(sw,{getGitHead:()=>Qvt,getPublishAccess:()=>EBe,getReadmeContent:()=>CBe,makePublishBody:()=>kvt});Ye();Ye();Pt();var pG={};Vt(pG,{PackCommand:()=>O0,default:()=>fvt,packUtils:()=>CA});Ye();Ye();Ye();Pt();qt();var CA={};Vt(CA,{genPackList:()=>XQ,genPackStream:()=>fG,genPackageManifest:()=>oBe,hasPackScripts:()=>uG,prepareForPack:()=>AG});Ye();Pt();var cG=$e(Zo()),iBe=$e(eBe()),sBe=Be("zlib"),tvt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],rvt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function uG(t){return!!(un.hasWorkspaceScript(t,"prepack")||un.hasWorkspaceScript(t,"postpack"))}async function AG(t,{report:e},r){await un.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let o=V.join(t.cwd,Ot.fileName);await oe.existsPromise(o)&&await t.manifest.loadFile(o,{baseFs:oe}),await r()}finally{await un.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function fG(t,e){typeof e>"u"&&(e=await XQ(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(V.normalize(n));for(let n of t.manifest.bin.values())r.add(V.normalize(n));let o=iBe.default.pack();process.nextTick(async()=>{for(let n of e){let u=V.normalize(n),A=V.resolve(t.cwd,u),p=V.join("package",u),h=await oe.lstatPromise(A),C={name:p,mtime:new Date(vi.SAFE_TIME*1e3)},I=r.has(u)?493:420,v,b,E=new Promise((N,U)=>{v=N,b=U}),F=N=>{N?b(N):v()};if(h.isFile()){let N;u==="package.json"?N=Buffer.from(JSON.stringify(await oBe(t),null,2)):N=await oe.readFilePromise(A),o.entry({...C,mode:I,type:"file"},N,F)}else h.isSymbolicLink()?o.entry({...C,mode:I,type:"symlink",linkname:await oe.readlinkPromise(A)},F):F(new Error(`Unsupported file type ${h.mode} for ${fe.fromPortablePath(u)}`));await E}o.finalize()});let a=(0,sBe.createGzip)();return o.pipe(a),a}async function oBe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function XQ(t){let e=t.project,r=e.configuration,o={accept:[],reject:[]};for(let I of rvt)o.reject.push(I);for(let I of tvt)o.accept.push(I);o.reject.push(r.get("rcFilename"));let a=I=>{if(I===null||!I.startsWith(`${t.cwd}/`))return;let v=V.relative(t.cwd,I),b=V.resolve(Bt.root,v);o.reject.push(b)};a(V.resolve(e.cwd,dr.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(I=>I.populateYarnPaths,e,I=>{a(I)});for(let I of e.workspaces){let v=V.relative(t.cwd,I.cwd);v!==""&&!v.match(/^(\.\.)?\//)&&o.reject.push(`/${v}`)}let n={accept:[],reject:[]},u=t.manifest.publishConfig?.main??t.manifest.main,A=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;u!=null&&n.accept.push(V.resolve(Bt.root,u)),A!=null&&n.accept.push(V.resolve(Bt.root,A)),typeof p=="string"&&n.accept.push(V.resolve(Bt.root,p));for(let I of h.values())n.accept.push(V.resolve(Bt.root,I));if(p instanceof Map)for(let[I,v]of p.entries())n.accept.push(V.resolve(Bt.root,I)),typeof v=="string"&&n.accept.push(V.resolve(Bt.root,v));let C=t.manifest.files!==null;if(C){n.reject.push("/*");for(let I of t.manifest.files)aBe(n.accept,I,{cwd:Bt.root})}return await nvt(t.cwd,{hasExplicitFileList:C,globalList:o,ignoreList:n})}async function nvt(t,{hasExplicitFileList:e,globalList:r,ignoreList:o}){let a=[],n=new _u(t),u=[[Bt.root,[o]]];for(;u.length>0;){let[A,p]=u.pop(),h=await n.lstatPromise(A);if(!rBe(A,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let C=await n.readdirPromise(A),I=!1,v=!1;if(!e||A!==Bt.root)for(let F of C)I=I||F===".gitignore",v=v||F===".npmignore";let b=v?await tBe(n,A,".npmignore"):I?await tBe(n,A,".gitignore"):null,E=b!==null?[b].concat(p):p;rBe(A,{globalList:r,ignoreLists:p})&&(E=[...p,{accept:[],reject:["**/*"]}]);for(let F of C)u.push([V.resolve(A,F),E])}else(h.isFile()||h.isSymbolicLink())&&a.push(V.relative(Bt.root,A))}return a.sort()}async function tBe(t,e,r){let o={accept:[],reject:[]},a=await t.readFilePromise(V.join(e,r),"utf8");for(let n of a.split(/\n/g))aBe(o.reject,n,{cwd:e});return o}function ivt(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=V.resolve(e,t)),r&&(t=`!${t}`),t}function aBe(t,e,{cwd:r}){let o=e.trim();o===""||o[0]==="#"||t.push(ivt(o,{cwd:r}))}function rBe(t,{globalList:e,ignoreLists:r}){let o=JQ(t,e.accept);if(o!==0)return o===2;let a=JQ(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let u=JQ(t,n.accept);if(u!==0)return u===2;let A=JQ(t,n.reject);if(A!==0)return A===1}return!1}function JQ(t,e){let r=e,o=[];for(let a=0;a{await AG(a,{report:p},async()=>{p.reportJson({base:fe.fromPortablePath(a.cwd)});let h=await XQ(a);for(let C of h)p.reportInfo(null,fe.fromPortablePath(C)),p.reportJson({location:fe.fromPortablePath(C)});if(!this.dryRun){let C=await fG(a,h),I=oe.createWriteStream(u);C.pipe(I),await new Promise(v=>{I.on("finish",v)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${de.pretty(r,u,de.Type.PATH)}`),p.reportJson({output:fe.fromPortablePath(u)}))})).exitCode()}};O0.paths=[["pack"]],O0.usage=nt.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]});function svt(t,{workspace:e}){let r=t.replace("%s",ovt(e)).replace("%v",avt(e));return fe.toPortablePath(r)}function ovt(t){return t.manifest.name!==null?G.slugifyIdent(t.manifest.name):"package"}function avt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var lvt=["dependencies","devDependencies","peerDependencies"],cvt="workspace:",uvt=(t,e)=>{e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let o of lvt)for(let a of t.manifest.getForScope(o).values()){let n=r.tryWorkspaceByDescriptor(a),u=G.parseRange(a.range);if(u.protocol===cvt)if(n===null){if(r.tryWorkspaceByIdent(a)===null)throw new Jt(21,`${G.prettyDescriptor(r.configuration,a)}: No local workspace found for this range`)}else{let A;G.areDescriptorsEqual(a,n.anchoredDescriptor)||u.selector==="*"?A=n.manifest.version??"0.0.0":u.selector==="~"||u.selector==="^"?A=`${u.selector}${n.manifest.version??"0.0.0"}`:A=u.selector;let p=o==="dependencies"?G.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":o;e[h][G.stringifyIdent(a)]=A}}},Avt={hooks:{beforeWorkspacePacking:uvt},commands:[O0]},fvt=Avt;var dBe=Be("crypto"),mBe=$e(gBe()),yBe=Be("url");async function kvt(t,e,{access:r,tag:o,registry:a,gitHead:n}){let u=t.manifest.name,A=t.manifest.version,p=G.stringifyIdent(u),h=(0,dBe.createHash)("sha1").update(e).digest("hex"),C=mBe.default.fromData(e).toString(),I=r??EBe(t,u),v=await CBe(t),b=await CA.genPackageManifest(t),E=`${p}-${A}.tgz`,F=new yBe.URL(`${oc(a)}/${p}/-/${E}`);return{_id:p,_attachments:{[E]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:p,access:I,["dist-tags"]:{[o]:A},versions:{[A]:{...b,_id:`${p}@${A}`,name:p,version:A,gitHead:n,dist:{shasum:h,integrity:C,tarball:F.toString()}}},readme:v}}async function Qvt(t){try{let{stdout:e}=await Ur.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}function EBe(t,e){let r=t.project.configuration;return t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?t.manifest.publishConfig.access:r.get("npmPublishAccess")!==null?r.get("npmPublishAccess"):e.scope?"restricted":"public"}async function CBe(t){let e=fe.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${G.stringifyIdent(r)} -`;try{a=await oe.readFilePromise(e,"utf8")}catch(n){if(n.code==="ENOENT")return a;throw n}return a}var mG={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"BOOLEAN",default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:"SECRET",default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:"SECRET",default:null}},wBe={npmAuditRegistry:{description:"Registry to query for audit reports",type:"STRING",default:null},npmPublishRegistry:{description:"Registry to push packages to",type:"STRING",default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"STRING",default:"https://registry.yarnpkg.com"}},Fvt={configuration:{...mG,...wBe,npmScopes:{description:"Settings per package scope",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{...mG,...wBe}}},npmRegistries:{description:"Settings per registry",type:"MAP",normalizeKeys:oc,valueDefinition:{description:"",type:"SHAPE",properties:{...mG}}}},fetchers:[fv,dl],resolvers:[pv,hv,gv]},Rvt=Fvt;var SG={};Vt(SG,{NpmAuditCommand:()=>U0,NpmInfoCommand:()=>_0,NpmLoginCommand:()=>H0,NpmLogoutCommand:()=>j0,NpmPublishCommand:()=>q0,NpmTagAddCommand:()=>Y0,NpmTagListCommand:()=>G0,NpmTagRemoveCommand:()=>W0,NpmWhoamiCommand:()=>K0,default:()=>Uvt,npmAuditTypes:()=>Rv,npmAuditUtils:()=>ZQ});Ye();Ye();qt();var BG=$e(Zo());Za();var Rv={};Vt(Rv,{Environment:()=>Qv,Severity:()=>Fv});var Qv=(o=>(o.All="all",o.Production="production",o.Development="development",o))(Qv||{}),Fv=(n=>(n.Info="info",n.Low="low",n.Moderate="moderate",n.High="high",n.Critical="critical",n))(Fv||{});var ZQ={};Vt(ZQ,{allSeverities:()=>ow,getPackages:()=>IG,getReportTree:()=>CG,getSeverityInclusions:()=>EG,getTopLevelDependencies:()=>wG});Ye();var IBe=$e(Jn());var ow=["info","low","moderate","high","critical"];function EG(t){if(typeof t>"u")return new Set(ow);let e=ow.indexOf(t),r=ow.slice(e);return new Set(r)}function CG(t){let e={},r={children:e};for(let[o,a]of _e.sortMap(Object.entries(t),n=>n[0]))for(let n of _e.sortMap(a,u=>`${u.id}`))e[`${o}/${n.id}`]={value:de.tuple(de.Type.IDENT,G.parseIdent(o)),children:{ID:typeof n.id<"u"&&{label:"ID",value:de.tuple(de.Type.ID,n.id)},Issue:{label:"Issue",value:de.tuple(de.Type.NO_HINT,n.title)},URL:typeof n.url<"u"&&{label:"URL",value:de.tuple(de.Type.URL,n.url)},Severity:{label:"Severity",value:de.tuple(de.Type.NO_HINT,n.severity)},["Vulnerable Versions"]:{label:"Vulnerable Versions",value:de.tuple(de.Type.RANGE,n.vulnerable_versions)},["Tree Versions"]:{label:"Tree Versions",children:[...n.versions].sort(IBe.default.compare).map(u=>({value:de.tuple(de.Type.REFERENCE,u)}))},Dependents:{label:"Dependents",children:_e.sortMap(n.dependents,u=>G.stringifyLocator(u)).map(u=>({value:de.tuple(de.Type.LOCATOR,u)}))}}};return r}function wG(t,e,{all:r,environment:o}){let a=[],n=r?t.workspaces:[e],u=["all","production"].includes(o),A=["all","development"].includes(o);for(let p of n)for(let h of p.anchoredPackage.dependencies.values())(p.manifest.devDependencies.has(h.identHash)?!A:!u)||a.push({workspace:p,dependency:h});return a}function IG(t,e,{recursive:r}){let o=new Map,a=new Set,n=[],u=(A,p)=>{let h=t.storedResolutions.get(p.descriptorHash);if(typeof h>"u")throw new Error("Assertion failed: The resolution should have been registered");if(!a.has(h))a.add(h);else return;let C=t.storedPackages.get(h);if(typeof C>"u")throw new Error("Assertion failed: The package should have been registered");if(G.ensureDevirtualizedLocator(C).reference.startsWith("npm:")&&C.version!==null){let v=G.stringifyIdent(C),b=_e.getMapWithDefault(o,v);_e.getArrayWithDefault(b,C.version).push(A)}if(r)for(let v of C.dependencies.values())n.push([C,v])};for(let{workspace:A,dependency:p}of e)n.push([A.anchoredLocator,p]);for(;n.length>0;){let[A,p]=n.shift();u(A,p)}return o}var U0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=ge.String("--environment","all",{description:"Which environments to cover",validator:Vs(Qv)});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.noDeprecations=ge.Boolean("--no-deprecations",!1,{description:"Don't warn about deprecated packages"});this.severity=ge.String("--severity","info",{description:"Minimal severity requested for packages to be displayed",validator:Vs(Fv)});this.excludes=ge.Array("--exclude",[],{description:"Array of glob patterns of packages to exclude from audit"});this.ignores=ge.Array("--ignore",[],{description:"Array of glob patterns of advisory ID's to ignore in the audit report"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=wG(o,a,{all:this.all,environment:this.environment}),u=IG(o,n,{recursive:this.recursive}),A=Array.from(new Set([...r.get("npmAuditExcludePackages"),...this.excludes])),p=Object.create(null);for(let[N,U]of u)A.some(z=>BG.default.isMatch(N,z))||(p[N]=[...U.keys()]);let h=Zn.getAuditRegistry({configuration:r}),C,I=await AA.start({configuration:r,stdout:this.context.stdout},async()=>{let N=on.post("/-/npm/v1/security/advisories/bulk",p,{authType:on.AuthType.BEST_EFFORT,configuration:r,jsonResponse:!0,registry:h}),U=await Promise.all(this.noDeprecations?[]:Array.from(u,async([te,le])=>{let pe=await on.getPackageMetadata(G.parseIdent(te),{project:o});return _e.mapAndFilter(le.keys(),ue=>{let{deprecated:ye}=pe.versions[ue];return ye?[te,ue,ye]:_e.mapAndFilter.skip})})),z=await N;for(let[te,le,pe]of U.flat(1))Object.hasOwn(z,te)&&z[te].some(ue=>Qr.satisfiesWithPrereleases(le,ue.vulnerable_versions))||(z[te]??=[],z[te].push({id:`${te} (deprecation)`,title:pe.trim()||"This package has been deprecated.",severity:"moderate",vulnerable_versions:le}));C=z});if(I.hasErrors())return I.exitCode();let v=EG(this.severity),b=Array.from(new Set([...r.get("npmAuditIgnoreAdvisories"),...this.ignores])),E=Object.create(null);for(let[N,U]of Object.entries(C)){let z=U.filter(te=>!BG.default.isMatch(`${te.id}`,b)&&v.has(te.severity));z.length>0&&(E[N]=z.map(te=>{let le=u.get(N);if(typeof le>"u")throw new Error("Assertion failed: Expected the registry to only return packages that were requested");let pe=[...le.keys()].filter(ye=>Qr.satisfiesWithPrereleases(ye,te.vulnerable_versions)),ue=new Map;for(let ye of pe)for(let ae of le.get(ye))ue.set(ae.locatorHash,ae);return{...te,versions:pe,dependents:[...ue.values()]}}))}let F=Object.keys(E).length>0;return!this.json&&F?($s.emitTree(CG(E),{configuration:r,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Lt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async N=>{N.reportJson(C),F||N.reportInfo(1,"No audit suggestions")}),F?1:0)}};U0.paths=[["npm","audit"]],U0.usage=nt.Usage({description:"perform a vulnerability audit against the installed packages",details:` - This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths). - - For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \`-A,--all\`. To extend this search to both direct and transitive dependencies, use \`-R,--recursive\`. - - Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${ow.map(r=>`\`${r}\``).join(", ")}. - - If the \`--json\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages. - - If certain packages produce false positives for a particular environment, the \`--exclude\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \`npmAuditExcludePackages\` option. - - If particular advisories are needed to be ignored, the \`--ignore\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \`npmAuditIgnoreAdvisories\` option. - - To understand the dependency tree requiring vulnerable packages, check the raw report with the \`--json\` flag or use \`yarn why package\` to get more information as to who depends on them. - `,examples:[["Checks for known security issues with the installed packages. The output is a list of known issues.","yarn npm audit"],["Audit dependencies in all workspaces","yarn npm audit --all"],["Limit auditing to `dependencies` (excludes `devDependencies`)","yarn npm audit --environment production"],["Show audit report as valid JSON","yarn npm audit --json"],["Audit all direct and transitive dependencies","yarn npm audit --recursive"],["Output moderate (or more severe) vulnerabilities","yarn npm audit --severity moderate"],["Exclude certain packages","yarn npm audit --exclude package1 --exclude package2"],["Ignore specific advisories","yarn npm audit --ignore 1234567 --ignore 7654321"]]});Ye();Ye();Pt();qt();var vG=$e(Jn()),DG=Be("util"),_0=class extends ut{constructor(){super(...arguments);this.fields=ge.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.fields<"u"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],u=!1,A=await Lt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async p=>{for(let h of this.packages){let C;if(h==="."){let le=o.topLevelWorkspace;if(!le.manifest.name)throw new it(`Missing ${de.pretty(r,"name",de.Type.CODE)} field in ${fe.fromPortablePath(V.join(le.cwd,dr.manifest))}`);C=G.makeDescriptor(le.manifest.name,"unknown")}else C=G.parseDescriptor(h);let I=on.getIdentUrl(C),v=PG(await on.get(I,{configuration:r,ident:C,jsonResponse:!0,customErrorMessage:on.customPackageError})),b=Object.keys(v.versions).sort(vG.default.compareLoose),F=v["dist-tags"].latest||b[b.length-1],N=Qr.validRange(C.range);if(N){let le=vG.default.maxSatisfying(b,N);le!==null?F=le:(p.reportWarning(0,`Unmet range ${G.prettyRange(r,C.range)}; falling back to the latest version`),u=!0)}else Object.hasOwn(v["dist-tags"],C.range)?F=v["dist-tags"][C.range]:C.range!=="unknown"&&(p.reportWarning(0,`Unknown tag ${G.prettyRange(r,C.range)}; falling back to the latest version`),u=!0);let U=v.versions[F],z={...v,...U,version:F,versions:b},te;if(a!==null){te={};for(let le of a){let pe=z[le];if(typeof pe<"u")te[le]=pe;else{p.reportWarning(1,`The ${de.pretty(r,le,de.Type.CODE)} field doesn't exist inside ${G.prettyIdent(r,C)}'s information`),u=!0;continue}}}else this.json||(delete z.dist,delete z.readme,delete z.users),te=z;p.reportJson(te),this.json||n.push(te)}});DG.inspect.styles.name="cyan";for(let p of n)(p!==n[0]||u)&&this.context.stdout.write(` -`),this.context.stdout.write(`${(0,DG.inspect)(p,{depth:1/0,colors:!0,compact:!1})} -`);return A.exitCode()}};_0.paths=[["npm","info"]],_0.usage=nt.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command fetches information about a package from the npm registry and prints it in a tree format.\n\n The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\n\n Append `@` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\n\n If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\n\n By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\n ",examples:[["Show all available information about react (except the `dist`, `readme`, and `users` fields)","yarn npm info react"],["Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)","yarn npm info react --json"],["Show all available information about react@16.12.0","yarn npm info react@16.12.0"],["Show all available information about react@next","yarn npm info react@next"],["Show the description of react","yarn npm info react --fields description"],["Show all available versions of react","yarn npm info react --fields versions"],["Show the readme of react","yarn npm info react --fields readme"],["Show a few fields of react","yarn npm info react --fields homepage,repository"]]});function PG(t){if(Array.isArray(t)){let e=[];for(let r of t)r=PG(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let o=PG(t[r]);o&&(e[r]=o)}return e}else return t||null}Ye();Ye();qt();var BBe=$e(u2()),H0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Login to the publish registry"});this.alwaysAuth=ge.Boolean("--always-auth",{description:"Set the npmAlwaysAuth configuration"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Lt.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let u=await Lvt({configuration:r,registry:o,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),A=`/-/user/org.couchdb.user:${encodeURIComponent(u.name)}`,p=await on.put(A,u,{attemptedAs:u.name,configuration:r,registry:o,jsonResponse:!0,authType:on.AuthType.NO_AUTH});return await Tvt(o,p.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),n.reportInfo(0,"Successfully logged in")})).exitCode()}};H0.paths=[["npm","login"]],H0.usage=nt.Usage({category:"Npm-related commands",description:"store new login info to access the npm registry",details:"\n This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\n\n Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n ",examples:[["Login to the default registry","yarn npm login"],["Login to the registry linked to the @my-scope registry","yarn npm login --scope my-scope"],["Login to the publish registry for the current package","yarn npm login --publish"]]});async function $Q({scope:t,publish:e,configuration:r,cwd:o}){return t&&e?Zn.getScopeRegistry(t,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):t?Zn.getScopeRegistry(t,{configuration:r}):e?Zn.getPublishRegistry((await AC(r,o)).manifest,{configuration:r}):Zn.getDefaultRegistry({configuration:r})}async function Tvt(t,e,{alwaysAuth:r,scope:o}){let a=u=>A=>{let p=_e.isIndexableObject(A)?A:{},h=p[u],C=_e.isIndexableObject(h)?h:{};return{...p,[u]:{...C,...r!==void 0?{npmAlwaysAuth:r}:{},npmAuthToken:e}}},n=o?{npmScopes:a(o)}:{npmRegistries:a(t)};return await Ke.updateHomeConfiguration(n)}async function Lvt({configuration:t,registry:e,report:r,stdin:o,stdout:a}){r.reportInfo(0,`Logging in to ${de.pretty(t,e,de.Type.URL)}`);let n=!1;if(e.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(r.reportInfo(0,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),r.reportSeparator(),t.env.YARN_IS_TEST_ENV)return{name:t.env.YARN_INJECT_NPM_USER||"",password:t.env.YARN_INJECT_NPM_PASSWORD||""};let{username:u,password:A}=await(0,BBe.prompt)([{type:"input",name:"username",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a}]);return r.reportSeparator(),{name:u,password:A}}Ye();Ye();qt();var aw=new Set(["npmAuthIdent","npmAuthToken"]),j0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=ge.Boolean("-A,--all",!1,{description:"Logout of all registries"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=async()=>{let n=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),u=await Ke.find(this.context.cwd,this.context.plugins),A=G.makeIdent(this.scope??null,"pkg");return!Zn.getAuthConfiguration(n,{configuration:u,ident:A}).get("npmAuthToken")};return(await Lt.start({configuration:r,stdout:this.context.stdout},async n=>{if(this.all&&(await Ovt(),n.reportInfo(0,"Successfully logged out from everything")),this.scope){await vBe("npmScopes",this.scope),await o()?n.reportInfo(0,`Successfully logged out from ${this.scope}`):n.reportWarning(0,"Scope authentication settings removed, but some other ones settings still apply to it");return}let u=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish});await vBe("npmRegistries",u),await o()?n.reportInfo(0,`Successfully logged out from ${u}`):n.reportWarning(0,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};j0.paths=[["npm","logout"]],j0.usage=nt.Usage({category:"Npm-related commands",description:"logout of the npm registry",details:"\n This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\n\n Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n\n Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\n ",examples:[["Logout of the default registry","yarn npm logout"],["Logout of the @my-scope scope","yarn npm logout --scope my-scope"],["Logout of the publish registry for the current package","yarn npm logout --publish"],["Logout of all registries","yarn npm logout --all"]]});function Nvt(t,e){let r=t[e];if(!_e.isIndexableObject(r))return!1;let o=new Set(Object.keys(r));if([...aw].every(n=>!o.has(n)))return!1;for(let n of aw)o.delete(n);if(o.size===0)return t[e]=void 0,!0;let a={...r};for(let n of aw)delete a[n];return t[e]=a,!0}async function Ovt(){let t=e=>{let r=!1,o=_e.isIndexableObject(e)?{...e}:{};o.npmAuthToken&&(delete o.npmAuthToken,r=!0);for(let a of Object.keys(o))Nvt(o,a)&&(r=!0);if(Object.keys(o).length!==0)return r?o:e};return await Ke.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function vBe(t,e){return await Ke.updateHomeConfiguration({[t]:r=>{let o=_e.isIndexableObject(r)?r:{};if(!Object.hasOwn(o,e))return r;let a=o[e],n=_e.isIndexableObject(a)?a:{},u=new Set(Object.keys(n));if([...aw].every(p=>!u.has(p)))return r;for(let p of aw)u.delete(p);if(u.size===0)return Object.keys(o).length===1?void 0:{...o,[e]:void 0};let A={};for(let p of aw)A[p]=void 0;return{...o,[e]:{...n,...A}}}})}Ye();qt();var q0=class extends ut{constructor(){super(...arguments);this.access=ge.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=ge.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=ge.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"});this.otp=ge.String("--otp",{description:"The OTP token to use with the command"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);if(a.manifest.private)throw new it("Private workspaces cannot be published");if(a.manifest.name===null||a.manifest.version===null)throw new it("Workspaces must have valid names and versions to be published on an external registry");await o.restoreInstallState();let n=a.manifest.name,u=a.manifest.version,A=Zn.getPublishRegistry(a.manifest,{configuration:r});return(await Lt.start({configuration:r,stdout:this.context.stdout},async h=>{if(this.tolerateRepublish)try{let C=await on.get(on.getIdentUrl(n),{configuration:r,registry:A,ident:n,jsonResponse:!0});if(!Object.hasOwn(C,"versions"))throw new Jt(15,'Registry returned invalid data for - missing "versions" field');if(Object.hasOwn(C.versions,u)){h.reportWarning(0,`Registry already knows about version ${u}; skipping.`);return}}catch(C){if(C.originalError?.response?.statusCode!==404)throw C}await un.maybeExecuteWorkspaceLifecycleScript(a,"prepublish",{report:h}),await CA.prepareForPack(a,{report:h},async()=>{let C=await CA.genPackList(a);for(let F of C)h.reportInfo(null,F);let I=await CA.genPackStream(a,C),v=await _e.bufferStream(I),b=await sw.getGitHead(a.cwd),E=await sw.makePublishBody(a,v,{access:this.access,tag:this.tag,registry:A,gitHead:b});await on.put(on.getIdentUrl(n),E,{configuration:r,registry:A,ident:n,otp:this.otp,jsonResponse:!0})}),h.reportInfo(0,"Package archive published")})).exitCode()}};q0.paths=[["npm","publish"]],q0.usage=nt.Usage({category:"Npm-related commands",description:"publish the active workspace to the npm registry",details:'\n This command will pack the active workspace into a fresh archive and upload it to the npm registry.\n\n The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\n\n Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka "private packages"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\n ',examples:[["Publish the active workspace","yarn npm publish"]]});Ye();qt();var DBe=$e(Jn());Ye();Pt();qt();var G0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String({required:!1})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n;if(typeof this.package<"u")n=G.parseIdent(this.package);else{if(!a)throw new rr(o.cwd,this.context.cwd);if(!a.manifest.name)throw new it(`Missing 'name' field in ${fe.fromPortablePath(V.join(a.cwd,dr.manifest))}`);n=a.manifest.name}let u=await Tv(n,r),p={children:_e.sortMap(Object.entries(u),([h])=>h).map(([h,C])=>({value:de.tuple(de.Type.RESOLUTION,{descriptor:G.makeDescriptor(n,h),locator:G.makeLocator(n,C)})}))};return $s.emitTree(p,{configuration:r,json:this.json,stdout:this.context.stdout})}};G0.paths=[["npm","tag","list"]],G0.usage=nt.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:` - This command will list all tags of a package from the npm registry. - - If the package is not specified, Yarn will default to the current workspace. - `,examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]});async function Tv(t,e){let r=`/-/package${on.getIdentUrl(t)}/dist-tags`;return on.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:on.customPackageError})}var Y0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=G.parseDescriptor(this.package,!0),u=n.range;if(!DBe.default.valid(u))throw new it(`The range ${de.pretty(r,n.range,de.Type.RANGE)} must be a valid semver version`);let A=Zn.getPublishRegistry(a.manifest,{configuration:r}),p=de.pretty(r,n,de.Type.IDENT),h=de.pretty(r,u,de.Type.RANGE),C=de.pretty(r,this.tag,de.Type.CODE);return(await Lt.start({configuration:r,stdout:this.context.stdout},async v=>{let b=await Tv(n,r);Object.hasOwn(b,this.tag)&&b[this.tag]===u&&v.reportWarning(0,`Tag ${C} is already set to version ${h}`);let E=`/-/package${on.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await on.put(E,u,{configuration:r,registry:A,ident:n,jsonRequest:!0,jsonResponse:!0}),v.reportInfo(0,`Tag ${C} added to version ${h} of package ${p}`)})).exitCode()}};Y0.paths=[["npm","tag","add"]],Y0.usage=nt.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:` - This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten. - `,examples:[["Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`","yarn npm tag add my-pkg@2.3.4-beta.4 beta"]]});Ye();qt();var W0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){if(this.tag==="latest")throw new it("The 'latest' tag cannot be removed.");let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=G.parseIdent(this.package),u=Zn.getPublishRegistry(a.manifest,{configuration:r}),A=de.pretty(r,this.tag,de.Type.CODE),p=de.pretty(r,n,de.Type.IDENT),h=await Tv(n,r);if(!Object.hasOwn(h,this.tag))throw new it(`${A} is not a tag of package ${p}`);return(await Lt.start({configuration:r,stdout:this.context.stdout},async I=>{let v=`/-/package${on.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await on.del(v,{configuration:r,registry:u,ident:n,jsonResponse:!0}),I.reportInfo(0,`Tag ${A} removed from package ${p}`)})).exitCode()}};W0.paths=[["npm","tag","remove"]],W0.usage=nt.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:` - This command will remove a tag from a package from the npm registry. - `,examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]});Ye();Ye();qt();var K0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Print username for the publish registry"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o;return this.scope&&this.publish?o=Zn.getScopeRegistry(this.scope,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):this.scope?o=Zn.getScopeRegistry(this.scope,{configuration:r}):this.publish?o=Zn.getPublishRegistry((await AC(r,this.context.cwd)).manifest,{configuration:r}):o=Zn.getDefaultRegistry({configuration:r}),(await Lt.start({configuration:r,stdout:this.context.stdout},async n=>{let u;try{u=await on.get("/-/whoami",{configuration:r,registry:o,authType:on.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?G.makeIdent(this.scope,""):void 0})}catch(A){if(A.response?.statusCode===401||A.response?.statusCode===403){n.reportError(41,"Authentication failed - your credentials may have expired");return}else throw A}n.reportInfo(0,u.username)})).exitCode()}};K0.paths=[["npm","whoami"]],K0.usage=nt.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]});var Mvt={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:"STRING",default:null},npmAuditExcludePackages:{description:"Array of glob patterns of packages to exclude from npm audit",type:"STRING",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:"Array of glob patterns of advisory IDs to exclude from npm audit",type:"STRING",default:[],isArray:!0}},commands:[U0,_0,H0,j0,q0,Y0,G0,W0,K0]},Uvt=Mvt;var TG={};Vt(TG,{PatchCommand:()=>J0,PatchCommitCommand:()=>z0,PatchFetcher:()=>Uv,PatchResolver:()=>_v,default:()=>nDt,patchUtils:()=>Dm});Ye();Ye();Pt();nA();var Dm={};Vt(Dm,{applyPatchFile:()=>tF,diffFolders:()=>FG,ensureUnpatchedDescriptor:()=>xG,ensureUnpatchedLocator:()=>nF,extractPackageToDisk:()=>QG,extractPatchFlags:()=>FBe,isParentRequired:()=>kG,isPatchDescriptor:()=>rF,isPatchLocator:()=>V0,loadPatchFiles:()=>Mv,makeDescriptor:()=>iF,makeLocator:()=>bG,makePatchHash:()=>RG,parseDescriptor:()=>Nv,parseLocator:()=>Ov,parsePatchFile:()=>Lv,unpatchDescriptor:()=>eDt,unpatchLocator:()=>tDt});Ye();Pt();Ye();Pt();var _vt=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function lw(t){return V.relative(Bt.root,V.resolve(Bt.root,fe.toPortablePath(t)))}function Hvt(t){let e=t.trim().match(_vt);if(!e)throw new Error(`Bad header line: '${t}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var jvt=420,qvt=493;var PBe=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),Gvt=t=>({header:Hvt(t),parts:[]}),Yvt={["@"]:"header",["-"]:"deletion",["+"]:"insertion",[" "]:"context",["\\"]:"pragma",undefined:"context"};function Wvt(t){let e=[],r=PBe(),o="parsing header",a=null,n=null;function u(){a&&(n&&(a.parts.push(n),n=null),r.hunks.push(a),a=null)}function A(){u(),e.push(r),r=PBe()}for(let p=0;p0?"patch":"mode change",z=null;switch(U){case"rename":{if(!C||!I)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:o,fromPath:lw(C),toPath:lw(I)}),z=I}break;case"file deletion":{let te=a||E;if(!te)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:o,hunk:N&&N[0]||null,path:lw(te),mode:eF(p),hash:v})}break;case"file creation":{let te=n||F;if(!te)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:o,hunk:N&&N[0]||null,path:lw(te),mode:eF(h),hash:b})}break;case"patch":case"mode change":z=F||n;break;default:_e.assertNever(U);break}z&&u&&A&&u!==A&&e.push({type:"mode change",semverExclusivity:o,path:lw(z),oldMode:eF(u),newMode:eF(A)}),z&&N&&N.length&&e.push({type:"patch",semverExclusivity:o,path:lw(z),hunks:N,beforeHash:v,afterHash:b})}if(e.length===0)throw new Error("Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string");return e}function eF(t){let e=parseInt(t,8)&511;if(e!==jvt&&e!==qvt)throw new Error(`Unexpected file mode string: ${t}`);return e}function Lv(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),Kvt(Wvt(e))}function Vvt(t){let e=0,r=0;for(let{type:o,lines:a}of t.parts)switch(o){case"context":r+=a.length,e+=a.length;break;case"deletion":e+=a.length;break;case"insertion":r+=a.length;break;default:_e.assertNever(o);break}if(e!==t.header.original.length||r!==t.header.patched.length){let o=a=>a<0?a:`+${a}`;throw new Error(`hunk header integrity check failed (expected @@ ${o(t.header.original.length)} ${o(t.header.patched.length)} @@, got @@ ${o(e)} ${o(r)} @@)`)}}Ye();Pt();var cw=class extends Error{constructor(r,o){super(`Cannot apply hunk #${r+1}`);this.hunk=o}};async function uw(t,e,r){let o=await t.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await t.lutimesPromise(e,o.atime,o.mtime)}async function tF(t,{baseFs:e=new Tn,dryRun:r=!1,version:o=null}={}){for(let a of t)if(!(a.semverExclusivity!==null&&o!==null&&!Qr.satisfiesWithPrereleases(o,a.semverExclusivity)))switch(a.type){case"file deletion":if(r){if(!e.existsSync(a.path))throw new Error(`Trying to delete a file that doesn't exist: ${a.path}`)}else await uw(e,V.dirname(a.path),async()=>{await e.unlinkPromise(a.path)});break;case"rename":if(r){if(!e.existsSync(a.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${a.fromPath}`)}else await uw(e,V.dirname(a.fromPath),async()=>{await uw(e,V.dirname(a.toPath),async()=>{await uw(e,a.fromPath,async()=>(await e.movePromise(a.fromPath,a.toPath),a.toPath))})});break;case"file creation":if(r){if(e.existsSync(a.path))throw new Error(`Trying to create a file that already exists: ${a.path}`)}else{let n=a.hunk?a.hunk.parts[0].lines.join(` -`)+(a.hunk.parts[0].noNewlineAtEndOfFile?"":` -`):"";await e.mkdirpPromise(V.dirname(a.path),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),await e.writeFilePromise(a.path,n,{mode:a.mode}),await e.utimesPromise(a.path,vi.SAFE_TIME,vi.SAFE_TIME)}break;case"patch":await uw(e,a.path,async()=>{await Xvt(a,{baseFs:e,dryRun:r})});break;case"mode change":{let u=(await e.statPromise(a.path)).mode;if(SBe(a.newMode)!==SBe(u))continue;await uw(e,a.path,async()=>{await e.chmodPromise(a.path,a.newMode)})}break;default:_e.assertNever(a);break}}function SBe(t){return(t&64)>0}function xBe(t){return t.replace(/\s+$/,"")}function Jvt(t,e){return xBe(t)===xBe(e)}async function Xvt({hunks:t,path:e},{baseFs:r,dryRun:o=!1}){let a=await r.statSync(e).mode,u=(await r.readFileSync(e,"utf8")).split(/\n/),A=[],p=0,h=0;for(let I of t){let v=Math.max(h,I.header.patched.start+p),b=Math.max(0,v-h),E=Math.max(0,u.length-v-I.header.original.length),F=Math.max(b,E),N=0,U=0,z=null;for(;N<=F;){if(N<=b&&(U=v-N,z=bBe(I,u,U),z!==null)){N=-N;break}if(N<=E&&(U=v+N,z=bBe(I,u,U),z!==null))break;N+=1}if(z===null)throw new cw(t.indexOf(I),I);A.push(z),p+=N,h=U+I.header.original.length}if(o)return;let C=0;for(let I of A)for(let v of I)switch(v.type){case"splice":{let b=v.index+C;u.splice(b,v.numToDelete,...v.linesToInsert),C+=v.linesToInsert.length-v.numToDelete}break;case"pop":u.pop();break;case"push":u.push(v.line);break;default:_e.assertNever(v);break}await r.writeFilePromise(e,u.join(` -`),{mode:a})}function bBe(t,e,r){let o=[];for(let a of t.parts)switch(a.type){case"context":case"deletion":{for(let n of a.lines){let u=e[r];if(u==null||!Jvt(u,n))return null;r+=1}a.type==="deletion"&&(o.push({type:"splice",index:r-a.lines.length,numToDelete:a.lines.length,linesToInsert:[]}),a.noNewlineAtEndOfFile&&o.push({type:"push",line:""}))}break;case"insertion":o.push({type:"splice",index:r,numToDelete:0,linesToInsert:a.lines}),a.noNewlineAtEndOfFile&&o.push({type:"pop"});break;default:_e.assertNever(a.type);break}return o}var $vt=/^builtin<([^>]+)>$/;function Aw(t,e){let{protocol:r,source:o,selector:a,params:n}=G.parseRange(t);if(r!=="patch:")throw new Error("Invalid patch range");if(o===null)throw new Error("Patch locators must explicitly define their source");let u=a?a.split(/&/).map(C=>fe.toPortablePath(C)):[],A=n&&typeof n.locator=="string"?G.parseLocator(n.locator):null,p=n&&typeof n.version=="string"?n.version:null,h=e(o);return{parentLocator:A,sourceItem:h,patchPaths:u,sourceVersion:p}}function rF(t){return t.range.startsWith("patch:")}function V0(t){return t.reference.startsWith("patch:")}function Nv(t){let{sourceItem:e,...r}=Aw(t.range,G.parseDescriptor);return{...r,sourceDescriptor:e}}function Ov(t){let{sourceItem:e,...r}=Aw(t.reference,G.parseLocator);return{...r,sourceLocator:e}}function eDt(t){let{sourceItem:e}=Aw(t.range,G.parseDescriptor);return e}function tDt(t){let{sourceItem:e}=Aw(t.reference,G.parseLocator);return e}function xG(t){if(!rF(t))return t;let{sourceItem:e}=Aw(t.range,G.parseDescriptor);return e}function nF(t){if(!V0(t))return t;let{sourceItem:e}=Aw(t.reference,G.parseLocator);return e}function kBe({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:o,patchHash:a},n){let u=t!==null?{locator:G.stringifyLocator(t)}:{},A=typeof o<"u"?{version:o}:{},p=typeof a<"u"?{hash:a}:{};return G.makeRange({protocol:"patch:",source:n(e),selector:r.join("&"),params:{...A,...p,...u}})}function iF(t,{parentLocator:e,sourceDescriptor:r,patchPaths:o}){return G.makeDescriptor(t,kBe({parentLocator:e,sourceItem:r,patchPaths:o},G.stringifyDescriptor))}function bG(t,{parentLocator:e,sourcePackage:r,patchPaths:o,patchHash:a}){return G.makeLocator(t,kBe({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:o,patchHash:a},G.stringifyLocator))}function QBe({onAbsolute:t,onRelative:e,onProject:r,onBuiltin:o},a){let n=a.lastIndexOf("!");n!==-1&&(a=a.slice(n+1));let u=a.match($vt);return u!==null?o(u[1]):a.startsWith("~/")?r(a.slice(2)):V.isAbsolute(a)?t(a):e(a)}function FBe(t){let e=t.lastIndexOf("!");return{optional:(e!==-1?new Set(t.slice(0,e).split(/!/)):new Set).has("optional")}}function kG(t){return QBe({onAbsolute:()=>!1,onRelative:()=>!0,onProject:()=>!1,onBuiltin:()=>!1},t)}async function Mv(t,e,r){let o=t!==null?await r.fetcher.fetch(t,r):null,a=o&&o.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,o.localPath)}:o;o&&o!==a&&o.releaseFs&&o.releaseFs();let n=await _e.releaseAfterUseAsync(async()=>await Promise.all(e.map(async u=>{let A=FBe(u),p=await QBe({onAbsolute:async h=>await oe.readFilePromise(h,"utf8"),onRelative:async h=>{if(a===null)throw new Error("Assertion failed: The parent locator should have been fetched");return await a.packageFs.readFilePromise(V.join(a.prefixPath,h),"utf8")},onProject:async h=>await oe.readFilePromise(V.join(r.project.cwd,h),"utf8"),onBuiltin:async h=>await r.project.configuration.firstHook(C=>C.getBuiltinPatch,r.project,h)},u);return{...A,source:p}})));for(let u of n)typeof u.source=="string"&&(u.source=u.source.replace(/\r\n?/g,` -`));return n}async function QG(t,{cache:e,project:r}){let o=r.storedPackages.get(t.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected the package to be registered");let a=nF(t),n=r.storedChecksums,u=new Qi,A=await oe.mktempPromise(),p=V.join(A,"source"),h=V.join(A,"user"),C=V.join(A,".yarn-patch.json"),I=r.configuration.makeFetcher(),v=[];try{let b,E;if(t.locatorHash===a.locatorHash){let F=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u});v.push(()=>F.releaseFs?.()),b=F,E=F}else b=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>b.releaseFs?.()),E=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>E.releaseFs?.());await Promise.all([oe.copyPromise(p,b.prefixPath,{baseFs:b.packageFs}),oe.copyPromise(h,E.prefixPath,{baseFs:E.packageFs}),oe.writeJsonPromise(C,{locator:G.stringifyLocator(t),version:o.version})])}finally{for(let b of v)b()}return oe.detachTemp(A),h}async function FG(t,e){let r=fe.fromPortablePath(t).replace(/\\/g,"/"),o=fe.fromPortablePath(e).replace(/\\/g,"/"),{stdout:a,stderr:n}=await Ur.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--no-renames","--text",r,o],{cwd:fe.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""}});if(n.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH. -The following error was reported by 'git': -${n}`);let u=r.startsWith("/")?A=>A.slice(1):A=>A;return a.replace(new RegExp(`(a|b)(${_e.escapeRegExp(`/${u(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${_e.escapeRegExp(`/${u(o)}/`)}`,"g"),"$1/").replace(new RegExp(_e.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(_e.escapeRegExp(`${o}/`),"g"),"")}function RG(t,e){let r=[];for(let{source:o}of t){if(o===null)continue;let a=Lv(o);for(let n of a){let{semverExclusivity:u,...A}=n;u!==null&&e!==null&&!Qr.satisfiesWithPrereleases(e,u)||r.push(JSON.stringify(A))}}return wn.makeHash(`${3}`,...r).slice(0,6)}Ye();function RBe(t,{configuration:e,report:r}){for(let o of t.parts)for(let a of o.lines)switch(o.type){case"context":r.reportInfo(null,` ${de.pretty(e,a,"grey")}`);break;case"deletion":r.reportError(28,`- ${de.pretty(e,a,de.Type.REMOVED)}`);break;case"insertion":r.reportError(28,`+ ${de.pretty(e,a,de.Type.ADDED)}`);break;default:_e.assertNever(o.type)}}var Uv=class{supports(e,r){return!!V0(e)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async patchPackage(e,r){let{parentLocator:o,sourceLocator:a,sourceVersion:n,patchPaths:u}=Ov(e),A=await Mv(o,u,r),p=await oe.mktempPromise(),h=V.join(p,"current.zip"),C=await r.fetcher.fetch(a,r),I=G.getIdentVendorPath(e),v=new Ji(h,{create:!0,level:r.project.configuration.get("compressionLevel")});await _e.releaseAfterUseAsync(async()=>{await v.copyPromise(I,C.prefixPath,{baseFs:C.packageFs,stableSort:!0})},C.releaseFs),v.saveAndClose();for(let{source:b,optional:E}of A){if(b===null)continue;let F=new Ji(h,{level:r.project.configuration.get("compressionLevel")}),N=new gn(V.resolve(Bt.root,I),{baseFs:F});try{await tF(Lv(b),{baseFs:N,version:n})}catch(U){if(!(U instanceof cw))throw U;let z=r.project.configuration.get("enableInlineHunks"),te=!z&&!E?" (set enableInlineHunks for details)":"",le=`${G.prettyLocator(r.project.configuration,e)}: ${U.message}${te}`,pe=ue=>{!z||RBe(U.hunk,{configuration:r.project.configuration,report:ue})};if(F.discardAndClose(),E){r.report.reportWarningOnce(66,le,{reportExtra:pe});continue}else throw new Jt(66,le,pe)}F.saveAndClose()}return new Ji(h,{level:r.project.configuration.get("compressionLevel")})}};Ye();var _v=class{supportsDescriptor(e,r){return!!rF(e)}supportsLocator(e,r){return!!V0(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){let{patchPaths:a}=Nv(e);return a.every(n=>!kG(n))?e:G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:o}=Nv(e);return{sourceDescriptor:r.project.configuration.normalizeDependency(o)}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:a,patchPaths:n}=Nv(e),u=await Mv(a,n,o.fetchOptions),A=r.sourceDescriptor;if(typeof A>"u")throw new Error("Assertion failed: The dependency should have been resolved");let p=RG(u,A.version);return[bG(e,{parentLocator:a,sourcePackage:A,patchPaths:n,patchHash:p})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let{sourceLocator:o}=Ov(e);return{...await r.resolver.resolve(o,r),...e}}};Ye();Pt();qt();var z0=class extends ut{constructor(){super(...arguments);this.save=ge.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=V.resolve(this.context.cwd,fe.toPortablePath(this.patchFolder)),u=V.join(n,"../source"),A=V.join(n,"../.yarn-patch.json");if(!oe.existsSync(u))throw new it("The argument folder didn't get created by 'yarn patch'");let p=await FG(u,n),h=await oe.readJsonPromise(A),C=G.parseLocator(h.locator,!0);if(!o.storedPackages.has(C.locatorHash))throw new it("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(p);return}let I=r.get("patchFolder"),v=V.join(I,`${G.slugifyLocator(C)}.patch`);await oe.mkdirPromise(I,{recursive:!0}),await oe.writeFilePromise(v,p);let b=[],E=new Map;for(let F of o.storedPackages.values()){if(G.isVirtualLocator(F))continue;let N=F.dependencies.get(C.identHash);if(!N)continue;let U=G.ensureDevirtualizedDescriptor(N),z=xG(U),te=o.storedResolutions.get(z.descriptorHash);if(!te)throw new Error("Assertion failed: Expected the resolution to have been registered");if(!o.storedPackages.get(te))throw new Error("Assertion failed: Expected the package to have been registered");let pe=o.tryWorkspaceByLocator(F);if(pe)b.push(pe);else{let ue=o.originalPackages.get(F.locatorHash);if(!ue)throw new Error("Assertion failed: Expected the original package to have been registered");let ye=ue.dependencies.get(N.identHash);if(!ye)throw new Error("Assertion failed: Expected the original dependency to have been registered");E.set(ye.descriptorHash,ye)}}for(let F of b)for(let N of Ot.hardDependencies){let U=F.manifest[N].get(C.identHash);if(!U)continue;let z=iF(U,{parentLocator:null,sourceDescriptor:G.convertLocatorToDescriptor(C),patchPaths:[V.join(dr.home,V.relative(o.cwd,v))]});F.manifest[N].set(U.identHash,z)}for(let F of E.values()){let N=iF(F,{parentLocator:null,sourceDescriptor:G.convertLocatorToDescriptor(C),patchPaths:[V.join(dr.home,V.relative(o.cwd,v))]});o.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:G.stringifyIdent(N),description:F.range}},reference:N.range})}await o.persist()}};z0.paths=[["patch-commit"]],z0.usage=nt.Usage({description:"generate a patch out of a directory",details:"\n By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\n\n With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\n\n Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "});Ye();Pt();qt();var J0=class extends ut{constructor(){super(...arguments);this.update=ge.Boolean("-u,--update",!1,{description:"Reapply local patches that already apply to this packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=G.parseLocator(this.package);if(u.reference==="unknown"){let A=_e.mapAndFilter([...o.storedPackages.values()],p=>p.identHash!==u.identHash?_e.mapAndFilter.skip:G.isVirtualLocator(p)?_e.mapAndFilter.skip:V0(p)!==this.update?_e.mapAndFilter.skip:p);if(A.length===0)throw new it("No package found in the project for the given locator");if(A.length>1)throw new it(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): -${A.map(p=>` -- ${G.prettyLocator(r,p)}`).join("")}`);u=A[0]}if(!o.storedPackages.has(u.locatorHash))throw new it("No package found in the project for the given locator");await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=nF(u),h=await QG(u,{cache:n,project:o});A.reportJson({locator:G.stringifyLocator(p),path:fe.fromPortablePath(h)});let C=this.update?" along with its current modifications":"";A.reportInfo(0,`Package ${G.prettyLocator(r,p)} got extracted with success${C}!`),A.reportInfo(0,`You can now edit the following folder: ${de.pretty(r,fe.fromPortablePath(h),"magenta")}`),A.reportInfo(0,`Once you are done run ${de.pretty(r,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${fe.fromPortablePath(h)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};J0.paths=[["patch"]],J0.usage=nt.Usage({description:"prepare a package for patching",details:"\n This command will cause a package to be extracted in a temporary directory intended to be editable at will.\n\n Once you're done with your changes, run `yarn patch-commit -s path` (with `path` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\n\n Calling the command when you already have a patch won't import it by default (in other words, the default behavior is to reset existing patches). However, adding the `-u,--update` flag will import any current patch.\n "});var rDt={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:"BOOLEAN",default:!1},patchFolder:{description:"Folder where the patch files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/patches"}},commands:[z0,J0],fetchers:[Uv],resolvers:[_v]},nDt=rDt;var OG={};Vt(OG,{PnpmLinker:()=>Hv,default:()=>lDt});Ye();Pt();qt();var Hv=class{getCustomDataKey(){return JSON.stringify({name:"PnpmLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the pnpm linker to be enabled");let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=a.pathsByLocator.get(e.locatorHash);if(typeof n>"u")throw new it(`Couldn't find ${G.prettyLocator(r.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return n.packageLocation}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(n){let p=a.locatorByPath.get(n[1]);if(p)return p}let u=e,A=e;do{A=u,u=V.dirname(A);let p=a.locatorByPath.get(A);if(p)return p}while(u!==A);return null}makeInstaller(e){return new LG(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},LG=class{constructor(e){this.opts=e;this.asyncActions=new _e.AsyncActions(10);this.customData={pathsByLocator:new Map,locatorByPath:new Map};this.indexFolderPromise=PD(oe,{indexPath:V.join(e.project.configuration.get("globalFolder"),"index")})}attachCustomData(e){}async installPackage(e,r,o){switch(e.linkType){case"SOFT":return this.installPackageSoft(e,r,o);case"HARD":return this.installPackageHard(e,r,o)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,o){let a=V.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.opts.project.tryWorkspaceByLocator(e)?V.join(a,dr.nodeModules):null;return this.customData.pathsByLocator.set(e.locatorHash,{packageLocation:a,dependenciesLocation:n}),{packageLocation:a,buildRequest:null}}async installPackageHard(e,r,o){let a=iDt(e,{project:this.opts.project}),n=a.packageLocation;this.customData.locatorByPath.set(n,G.stringifyLocator(e)),this.customData.pathsByLocator.set(e.locatorHash,a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await oe.mkdirPromise(n,{recursive:!0}),await oe.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1,linkStrategy:{type:"HardlinkFromIndex",indexPath:await this.indexFolderPromise,autoRepair:!0}})}));let A=G.isVirtualLocator(e)?G.devirtualizeLocator(e):e,p={manifest:await Ot.tryFind(r.prefixPath,{baseFs:r.packageFs})??new Ot,misc:{hasBindingGyp:mA.hasBindingGyp(r)}},h=this.opts.project.getDependencyMeta(A,e.version),C=mA.extractBuildRequest(e,p,h,{configuration:this.opts.project.configuration});return{packageLocation:n,buildRequest:C}}async attachInternalDependencies(e,r){if(this.opts.project.configuration.get("nodeLinker")!=="pnpm"||!TBe(e,{project:this.opts.project}))return;let o=this.customData.pathsByLocator.get(e.locatorHash);if(typeof o>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${G.stringifyLocator(e)})`);let{dependenciesLocation:a}=o;!a||this.asyncActions.reduce(e.locatorHash,async n=>{await oe.mkdirPromise(a,{recursive:!0});let u=await sDt(a),A=new Map(u),p=[n],h=(I,v)=>{let b=v;TBe(v,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),b=G.devirtualizeLocator(v));let E=this.customData.pathsByLocator.get(b.locatorHash);if(typeof E>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${G.stringifyLocator(v)})`);let F=G.stringifyIdent(I),N=V.join(a,F),U=V.relative(V.dirname(N),E.packageLocation),z=A.get(F);A.delete(F),p.push(Promise.resolve().then(async()=>{if(z){if(z.isSymbolicLink()&&await oe.readlinkPromise(N)===U)return;await oe.removePromise(N)}await oe.mkdirpPromise(V.dirname(N)),process.platform=="win32"&&this.opts.project.configuration.get("winLinkType")==="junctions"?await oe.symlinkPromise(E.packageLocation,N,"junction"):await oe.symlinkPromise(U,N)}))},C=!1;for(let[I,v]of r)I.identHash===e.identHash&&(C=!0),h(I,v);!C&&!this.opts.project.tryWorkspaceByLocator(e)&&h(G.convertLocatorToDescriptor(e),e),p.push(oDt(a,A)),await Promise.all(p)})}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=NBe(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await oe.removePromise(e);else{let r;try{r=new Set(await oe.readdirPromise(e))}catch{r=new Set}for(let{dependenciesLocation:o}of this.customData.pathsByLocator.values()){if(!o)continue;let a=V.contains(e,o);if(a===null)continue;let[n]=a.split(V.sep);r.delete(n)}await Promise.all([...r].map(async o=>{await oe.removePromise(V.join(e,o))}))}return await this.asyncActions.wait(),await NG(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await NG(LBe(this.opts.project)),{customData:this.customData}}};function LBe(t){return V.join(t.cwd,dr.nodeModules)}function NBe(t){return V.join(LBe(t),".store")}function iDt(t,{project:e}){let r=G.slugifyLocator(t),o=NBe(e),a=V.join(o,r,"package"),n=V.join(o,r,dr.nodeModules);return{packageLocation:a,dependenciesLocation:n}}function TBe(t,{project:e}){return!G.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function sDt(t){let e=new Map,r=[];try{r=await oe.readdirPromise(t,{withFileTypes:!0})}catch(o){if(o.code!=="ENOENT")throw o}try{for(let o of r)if(!o.name.startsWith("."))if(o.name.startsWith("@")){let a=await oe.readdirPromise(V.join(t,o.name),{withFileTypes:!0});if(a.length===0)e.set(o.name,o);else for(let n of a)e.set(`${o.name}/${n.name}`,n)}else e.set(o.name,o)}catch(o){if(o.code!=="ENOENT")throw o}return e}async function oDt(t,e){let r=[],o=new Set;for(let a of e.keys()){r.push(oe.removePromise(V.join(t,a)));let n=G.tryParseIdent(a)?.scope;n&&o.add(`@${n}`)}return Promise.all(r).then(()=>Promise.all([...o].map(a=>NG(V.join(t,a)))))}async function NG(t){try{await oe.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY")throw e}}var aDt={linkers:[Hv]},lDt=aDt;var GG={};Vt(GG,{StageCommand:()=>X0,default:()=>EDt,stageUtils:()=>oF});Ye();Pt();qt();Ye();Pt();var oF={};Vt(oF,{ActionType:()=>MG,checkConsensus:()=>sF,expandDirectory:()=>HG,findConsensus:()=>jG,findVcsRoot:()=>UG,genCommitMessage:()=>qG,getCommitPrefix:()=>OBe,isYarnFile:()=>_G});Pt();var MG=(n=>(n[n.CREATE=0]="CREATE",n[n.DELETE=1]="DELETE",n[n.ADD=2]="ADD",n[n.REMOVE=3]="REMOVE",n[n.MODIFY=4]="MODIFY",n))(MG||{});async function UG(t,{marker:e}){do if(!oe.existsSync(V.join(t,e)))t=V.dirname(t);else return t;while(t!=="/");return null}function _G(t,{roots:e,names:r}){if(r.has(V.basename(t)))return!0;do if(!e.has(t))t=V.dirname(t);else return!0;while(t!=="/");return!1}function HG(t){let e=[],r=[t];for(;r.length>0;){let o=r.pop(),a=oe.readdirSync(o);for(let n of a){let u=V.resolve(o,n);oe.lstatSync(u).isDirectory()?r.push(u):e.push(u)}}return e}function sF(t,e){let r=0,o=0;for(let a of t)a!=="wip"&&(e.test(a)?r+=1:o+=1);return r>=o}function jG(t){let e=sF(t,/^(\w\(\w+\):\s*)?\w+s/),r=sF(t,/^(\w\(\w+\):\s*)?[A-Z]/),o=sF(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:r,useComponent:o}}function OBe(t){return t.useComponent?"chore(yarn): ":""}var cDt=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function qG(t,e){let r=OBe(t),o=[],a=e.slice().sort((n,u)=>n[0]-u[0]);for(;a.length>0;){let[n,u]=a.shift(),A=cDt.get(n);t.useUpperCase&&o.length===0&&(A=`${A[0].toUpperCase()}${A.slice(1)}`),t.useThirdPerson&&(A+="s");let p=[u];for(;a.length>0&&a[0][0]===n;){let[,C]=a.shift();p.push(C)}p.sort();let h=p.shift();p.length===1?h+=" (and one other)":p.length>1&&(h+=` (and ${p.length} others)`),o.push(`${A} ${h}`)}return`${r}${o.join(", ")}`}var uDt="Commit generated via `yarn stage`",ADt=11;async function MBe(t){let{code:e,stdout:r}=await Ur.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?r.trim():null}async function fDt(t,e){let r=[],o=e.filter(h=>V.basename(h.path)==="package.json");for(let{action:h,path:C}of o){let I=V.relative(t,C);if(h===4){let v=await MBe(t),{stdout:b}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),E=await Ot.fromText(b),F=await Ot.fromFile(C),N=new Map([...F.dependencies,...F.devDependencies]),U=new Map([...E.dependencies,...E.devDependencies]);for(let[z,te]of U){let le=G.stringifyIdent(te),pe=N.get(z);pe?pe.range!==te.range&&r.push([4,`${le} to ${pe.range}`]):r.push([3,le])}for(let[z,te]of N)U.has(z)||r.push([2,G.stringifyIdent(te)])}else if(h===0){let v=await Ot.fromFile(C);v.name?r.push([0,G.stringifyIdent(v.name)]):r.push([0,"a package"])}else if(h===1){let v=await MBe(t),{stdout:b}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),E=await Ot.fromText(b);E.name?r.push([1,G.stringifyIdent(E.name)]):r.push([1,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:a,stdout:n}=await Ur.execvp("git",["log",`-${ADt}`,"--pretty=format:%s"],{cwd:t}),u=a===0?n.split(/\n/g).filter(h=>h!==""):[],A=jG(u);return qG(A,r)}var pDt={[0]:[" A ","?? "],[4]:[" M "],[1]:[" D "]},hDt={[0]:["A "],[4]:["M "],[1]:["D "]},UBe={async findRoot(t){return await UG(t,{marker:".git"})},async filterChanges(t,e,r,o){let{stdout:a}=await Ur.execvp("git",["status","-s"],{cwd:t,strict:!0}),n=a.toString().split(/\n/g),u=o?.staged?hDt:pDt;return[].concat(...n.map(p=>{if(p==="")return[];let h=p.slice(0,3),C=V.resolve(t,p.slice(3));if(!o?.staged&&h==="?? "&&p.endsWith("/"))return HG(C).map(I=>({action:0,path:I}));{let v=[0,4,1].find(b=>u[b].includes(h));return v!==void 0?[{action:v,path:C}]:[]}})).filter(p=>_G(p.path,{roots:e,names:r}))},async genCommitMessage(t,e){return await fDt(t,e)},async makeStage(t,e){let r=e.map(o=>fe.fromPortablePath(o.path));await Ur.execvp("git",["add","--",...r],{cwd:t,strict:!0})},async makeCommit(t,e,r){let o=e.map(a=>fe.fromPortablePath(a.path));await Ur.execvp("git",["add","-N","--",...o],{cwd:t,strict:!0}),await Ur.execvp("git",["commit","-m",`${r} - -${uDt} -`,"--",...o],{cwd:t,strict:!0})},async makeReset(t,e){let r=e.map(o=>fe.fromPortablePath(o.path));await Ur.execvp("git",["reset","HEAD","--",...r],{cwd:t,strict:!0})}};var gDt=[UBe],X0=class extends ut{constructor(){super(...arguments);this.commit=ge.Boolean("-c,--commit",!1,{description:"Commit the staged files"});this.reset=ge.Boolean("-r,--reset",!1,{description:"Remove all files from the staging area"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"Print the commit message and the list of modified files without staging / committing"});this.update=ge.Boolean("-u,--update",!1,{hidden:!0})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),{driver:a,root:n}=await dDt(o.cwd),u=[r.get("cacheFolder"),r.get("globalFolder"),r.get("virtualFolder"),r.get("yarnPath")];await r.triggerHook(I=>I.populateYarnPaths,o,I=>{u.push(I)});let A=new Set;for(let I of u)for(let v of mDt(n,I))A.add(v);let p=new Set([r.get("rcFilename"),dr.lockfile,dr.manifest]),h=await a.filterChanges(n,A,p),C=await a.genCommitMessage(n,h);if(this.dryRun)if(this.commit)this.context.stdout.write(`${C} -`);else for(let I of h)this.context.stdout.write(`${fe.fromPortablePath(I.path)} -`);else if(this.reset){let I=await a.filterChanges(n,A,p,{staged:!0});I.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,I)}else h.length===0?this.context.stdout.write("No changes found!"):this.commit?await a.makeCommit(n,h,C):(await a.makeStage(n,h),this.context.stdout.write(C))}};X0.paths=[["stage"]],X0.usage=nt.Usage({description:"add all yarn files to your vcs",details:"\n This command will add to your staging area the files belonging to Yarn (typically any modified `package.json` and `.yarnrc.yml` files, but also linker-generated files, cache data, etc). It will take your ignore list into account, so the cache files won't be added if the cache is ignored in a `.gitignore` file (assuming you use Git).\n\n Running `--reset` will instead remove them from the staging area (the changes will still be there, but won't be committed until you stage them back).\n\n Since the staging area is a non-existent concept in Mercurial, Yarn will always create a new commit when running this command on Mercurial repositories. You can get this behavior when using Git by using the `--commit` flag which will directly create a commit.\n ",examples:[["Adds all modified project files to the staging area","yarn stage"],["Creates a new commit containing all modified project files","yarn stage --commit"]]});async function dDt(t){let e=null,r=null;for(let o of gDt)if((r=await o.findRoot(t))!==null){e=o;break}if(e===null||r===null)throw new it("No stage driver has been found for your current project");return{driver:e,root:r}}function mDt(t,e){let r=[];if(e===null)return r;for(;;){(e===t||e.startsWith(`${t}/`))&&r.push(e);let o;try{o=oe.statSync(e)}catch{break}if(o.isSymbolicLink())e=V.resolve(V.dirname(e),oe.readlinkSync(e));else break}return r}var yDt={commands:[X0]},EDt=yDt;var YG={};Vt(YG,{default:()=>SDt});Ye();Ye();Pt();var jBe=$e(Jn());Ye();var _Be=$e(JH()),CDt="e8e1bd300d860104bb8c58453ffa1eb4",wDt="OFCNCOG2CU",HBe=async(t,e)=>{let r=G.stringifyIdent(t),a=IDt(e).initIndex("npm-search");try{return(await a.getObject(r,{attributesToRetrieve:["types"]})).types?.ts==="definitely-typed"}catch{return!1}},IDt=t=>(0,_Be.default)(wDt,CDt,{requester:{async send(r){try{let o=await rn.request(r.url,r.data||null,{configuration:t,headers:r.headers});return{content:o.body,isTimedOut:!1,status:o.statusCode}}catch(o){return{content:o.response.body,isTimedOut:!1,status:o.response.statusCode}}}}});var qBe=t=>t.scope?`${t.scope}__${t.name}`:`${t.name}`,BDt=async(t,e,r,o)=>{if(r.scope==="types")return;let{project:a}=t,{configuration:n}=a;if(!(n.get("tsEnableAutoTypes")??oe.existsSync(V.join(a.cwd,"tsconfig.json"))))return;let A=n.makeResolver(),p={project:a,resolver:A,report:new Qi};if(!await HBe(r,n))return;let C=qBe(r),I=G.parseRange(r.range).selector;if(!Qr.validRange(I)){let N=n.normalizeDependency(r),U=await A.getCandidates(N,{},p);I=G.parseRange(U[0].reference).selector}let v=jBe.default.coerce(I);if(v===null)return;let b=`${Jc.Modifier.CARET}${v.major}`,E=G.makeDescriptor(G.makeIdent("types",C),b),F=_e.mapAndFind(a.workspaces,N=>{let U=N.manifest.dependencies.get(r.identHash)?.descriptorHash,z=N.manifest.devDependencies.get(r.identHash)?.descriptorHash;if(U!==r.descriptorHash&&z!==r.descriptorHash)return _e.mapAndFind.skip;let te=[];for(let le of Ot.allDependencies){let pe=N.manifest[le].get(E.identHash);typeof pe>"u"||te.push([le,pe])}return te.length===0?_e.mapAndFind.skip:te});if(typeof F<"u")for(let[N,U]of F)t.manifest[N].set(U.identHash,U);else{try{let N=n.normalizeDependency(E);if((await A.getCandidates(N,{},p)).length===0)return}catch{return}t.manifest[Jc.Target.DEVELOPMENT].set(E.identHash,E)}},vDt=async(t,e,r)=>{if(r.scope==="types")return;let{project:o}=t,{configuration:a}=o;if(!(a.get("tsEnableAutoTypes")??oe.existsSync(V.join(o.cwd,"tsconfig.json"))))return;let u=qBe(r),A=G.makeIdent("types",u);for(let p of Ot.allDependencies)typeof t.manifest[p].get(A.identHash)>"u"||t.manifest[p].delete(A.identHash)},DDt=(t,e)=>{e.publishConfig&&e.publishConfig.typings&&(e.typings=e.publishConfig.typings),e.publishConfig&&e.publishConfig.types&&(e.types=e.publishConfig.types)},PDt={configuration:{tsEnableAutoTypes:{description:"Whether Yarn should auto-install @types/ dependencies on 'yarn add'",type:"BOOLEAN",isNullable:!0,default:null}},hooks:{afterWorkspaceDependencyAddition:BDt,afterWorkspaceDependencyRemoval:vDt,beforeWorkspacePacking:DDt}},SDt=PDt;var JG={};Vt(JG,{VersionApplyCommand:()=>Z0,VersionCheckCommand:()=>$0,VersionCommand:()=>eg,default:()=>WDt,versionUtils:()=>gw});Ye();Ye();qt();var gw={};Vt(gw,{Decision:()=>pw,applyPrerelease:()=>zBe,applyReleases:()=>zG,applyStrategy:()=>lF,clearVersionFiles:()=>WG,getUndecidedDependentWorkspaces:()=>qv,getUndecidedWorkspaces:()=>aF,openVersionFile:()=>hw,requireMoreDecisions:()=>qDt,resolveVersionFiles:()=>jv,suggestStrategy:()=>VG,updateVersionFiles:()=>KG,validateReleaseDecision:()=>fw});Ye();Pt();Ll();qt();var VBe=$e(KBe()),BA=$e(Jn()),jDt=/^(>=|[~^]|)(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/,pw=(u=>(u.UNDECIDED="undecided",u.DECLINE="decline",u.MAJOR="major",u.MINOR="minor",u.PATCH="patch",u.PRERELEASE="prerelease",u))(pw||{});function fw(t){let e=BA.default.valid(t);return e||_e.validateEnum((0,VBe.default)(pw,"UNDECIDED"),t)}async function jv(t,{prerelease:e=null}={}){let r=new Map,o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return r;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=V.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Ki(A);for(let[h,C]of Object.entries(p.releases||{})){if(C==="decline")continue;let I=G.parseIdent(h),v=t.tryWorkspaceByIdent(I);if(v===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${V.basename(u)} references ${h})`);if(v.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${G.prettyLocator(t.configuration,v.anchoredLocator)})`);let b=v.manifest.raw.stableVersion??v.manifest.version,E=r.get(v),F=lF(b,fw(C));if(F===null)throw new Error(`Assertion failed: Expected ${b} to support being bumped via strategy ${C}`);let N=typeof E<"u"?BA.default.gt(F,E)?F:E:F;r.set(v,N)}}return e&&(r=new Map([...r].map(([n,u])=>[n,zBe(u,{current:n.manifest.version,prerelease:e})]))),r}async function WG(t){let e=t.configuration.get("deferredVersionFolder");!oe.existsSync(e)||await oe.removePromise(e)}async function KG(t,e){let r=new Set(e),o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=V.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Ki(A),h=p?.releases;if(!!h){for(let C of Object.keys(h)){let I=G.parseIdent(C),v=t.tryWorkspaceByIdent(I);(v===null||r.has(v))&&delete p.releases[C]}Object.keys(p.releases).length>0?await oe.changeFilePromise(u,Ba(new Ba.PreserveOrdering(p))):await oe.unlinkPromise(u)}}}async function hw(t,{allowEmpty:e=!1}={}){let r=t.configuration;if(r.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let o=await ra.fetchRoot(r.projectCwd),a=o!==null?await ra.fetchBase(o,{baseRefs:r.get("changesetBaseRefs")}):null,n=o!==null?await ra.fetchChangedFiles(o,{base:a.hash,project:t}):[],u=r.get("deferredVersionFolder"),A=n.filter(b=>V.contains(u,b)!==null);if(A.length>1)throw new it(`Your current branch contains multiple versioning files; this isn't supported: -- ${A.map(b=>fe.fromPortablePath(b)).join(` -- `)}`);let p=new Set(_e.mapAndFilter(n,b=>{let E=t.tryWorkspaceByFilePath(b);return E===null?_e.mapAndFilter.skip:E}));if(A.length===0&&p.size===0&&!e)return null;let h=A.length===1?A[0]:V.join(u,`${wn.makeHash(Math.random().toString()).slice(0,8)}.yml`),C=oe.existsSync(h)?await oe.readFilePromise(h,"utf8"):"{}",I=Ki(C),v=new Map;for(let b of I.declined||[]){let E=G.parseIdent(b),F=t.getWorkspaceByIdent(E);v.set(F,"decline")}for(let[b,E]of Object.entries(I.releases||{})){let F=G.parseIdent(b),N=t.getWorkspaceByIdent(F);v.set(N,fw(E))}return{project:t,root:o,baseHash:a!==null?a.hash:null,baseTitle:a!==null?a.title:null,changedFiles:new Set(n),changedWorkspaces:p,releaseRoots:new Set([...p].filter(b=>b.manifest.version!==null)),releases:v,async saveAll(){let b={},E=[],F=[];for(let N of t.workspaces){if(N.manifest.version===null)continue;let U=G.stringifyIdent(N.anchoredLocator),z=v.get(N);z==="decline"?E.push(U):typeof z<"u"?b[U]=fw(z):p.has(N)&&F.push(U)}await oe.mkdirPromise(V.dirname(h),{recursive:!0}),await oe.changeFilePromise(h,Ba(new Ba.PreserveOrdering({releases:Object.keys(b).length>0?b:void 0,declined:E.length>0?E:void 0,undecided:F.length>0?F:void 0})))}}}function qDt(t){return aF(t).size>0||qv(t).length>0}function aF(t){let e=new Set;for(let r of t.changedWorkspaces)r.manifest.version!==null&&(t.releases.has(r)||e.add(r));return e}function qv(t,{include:e=new Set}={}){let r=[],o=new Map(_e.mapAndFilter([...t.releases],([n,u])=>u==="decline"?_e.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n])),a=new Map(_e.mapAndFilter([...t.releases],([n,u])=>u!=="decline"?_e.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n]));for(let n of t.project.workspaces)if(!(!e.has(n)&&(a.has(n.anchoredLocator.locatorHash)||o.has(n.anchoredLocator.locatorHash)))&&n.manifest.version!==null)for(let u of Ot.hardDependencies)for(let A of n.manifest.getForScope(u).values()){let p=t.project.tryWorkspaceByDescriptor(A);p!==null&&o.has(p.anchoredLocator.locatorHash)&&r.push([n,p])}return r}function VG(t,e){let r=BA.default.clean(e);for(let o of Object.values(pw))if(o!=="undecided"&&o!=="decline"&&BA.default.inc(t,o)===r)return o;return null}function lF(t,e){if(BA.default.valid(e))return e;if(t===null)throw new it(`Cannot apply the release strategy "${e}" unless the workspace already has a valid version`);if(!BA.default.valid(t))throw new it(`Cannot apply the release strategy "${e}" on a non-semver version (${t})`);let r=BA.default.inc(t,e);if(r===null)throw new it(`Cannot apply the release strategy "${e}" on the specified version (${t})`);return r}function zG(t,e,{report:r}){let o=new Map;for(let a of t.workspaces)for(let n of Ot.allDependencies)for(let u of a.manifest[n].values()){let A=t.tryWorkspaceByDescriptor(u);if(A===null||!e.has(A))continue;_e.getArrayWithDefault(o,A).push([a,n,u.identHash])}for(let[a,n]of e){let u=a.manifest.version;a.manifest.version=n,BA.default.prerelease(n)===null?delete a.manifest.raw.stableVersion:a.manifest.raw.stableVersion||(a.manifest.raw.stableVersion=u);let A=a.manifest.name!==null?G.stringifyIdent(a.manifest.name):null;r.reportInfo(0,`${G.prettyLocator(t.configuration,a.anchoredLocator)}: Bumped to ${n}`),r.reportJson({cwd:fe.fromPortablePath(a.cwd),ident:A,oldVersion:u,newVersion:n});let p=o.get(a);if(!(typeof p>"u"))for(let[h,C,I]of p){let v=h.manifest[C].get(I);if(typeof v>"u")throw new Error("Assertion failed: The dependency should have existed");let b=v.range,E=!1;if(b.startsWith(Xn.protocol)&&(b=b.slice(Xn.protocol.length),E=!0,b===a.relativeCwd))continue;let F=b.match(jDt);if(!F){r.reportWarning(0,`Couldn't auto-upgrade range ${b} (in ${G.prettyLocator(t.configuration,h.anchoredLocator)})`);continue}let N=`${F[1]}${n}`;E&&(N=`${Xn.protocol}${N}`);let U=G.makeDescriptor(v,N);h.manifest[C].set(I,U)}}}var GDt=new Map([["%n",{extract:t=>t.length>=1?[t[0],t.slice(1)]:null,generate:(t=0)=>`${t+1}`}]]);function zBe(t,{current:e,prerelease:r}){let o=new BA.default.SemVer(e),a=o.prerelease.slice(),n=[];o.prerelease=[],o.format()!==t&&(a.length=0);let u=!0,A=r.split(/\./g);for(let p of A){let h=GDt.get(p);if(typeof h>"u")n.push(p),a[0]===p?a.shift():u=!1;else{let C=u?h.extract(a):null;C!==null&&typeof C[0]=="number"?(n.push(h.generate(C[0])),a=C[1]):(n.push(h.generate()),u=!1)}}return o.prerelease&&(o.prerelease=[]),`${t}-${n.join(".")}`}var Z0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("--all",!1,{description:"Apply the deferred version changes on all workspaces"});this.dryRun=ge.Boolean("--dry-run",!1,{description:"Print the versions without actually generating the package archive"});this.prerelease=ge.String("--prerelease",{description:"Add a prerelease identifier to new versions",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",{description:"Release the transitive workspaces as well"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,h=await jv(o,{prerelease:p}),C=new Map;if(this.all)C=h;else{let I=this.recursive?a.getRecursiveWorkspaceDependencies():[a];for(let v of I){let b=h.get(v);typeof b<"u"&&C.set(v,b)}}if(C.size===0){let I=h.size>0?" Did you want to add --all?":"";A.reportWarning(0,`The current workspace doesn't seem to require a version bump.${I}`);return}zG(o,C,{report:A}),this.dryRun||(p||(this.all?await WG(o):await KG(o,[...C.keys()])),A.reportSeparator())});return u.hasErrors()?u.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};Z0.paths=[["version","apply"]],Z0.usage=nt.Usage({category:"Release-related commands",description:"apply all the deferred version bumps at once",details:` - This command will apply the deferred version changes and remove their definitions from the repository. - - Note that if \`--prerelease\` is set, the given prerelease identifier (by default \`rc.%d\`) will be used on all new versions and the version definitions will be kept as-is. - - By default only the current workspace will be bumped, but you can configure this behavior by using one of: - - - \`--recursive\` to also apply the version bump on its dependencies - - \`--all\` to apply the version bump on all packages in the repository - - Note that this command will also update the \`workspace:\` references across all your local workspaces, thus ensuring that they keep referring to the same workspaces even after the version bump. - `,examples:[["Apply the version change to the local workspace","yarn version apply"],["Apply the version change to all the workspaces in the local workspace","yarn version apply --all"]]});Ye();Pt();qt();var cF=$e(Jn());var $0=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Open an interactive interface used to set version bumps"})}async execute(){return this.interactive?await this.executeInteractive():await this.executeStandard()}async executeInteractive(){SC(this.context);let{Gem:r}=await Promise.resolve().then(()=>(cQ(),Bj)),{ScrollableItems:o}=await Promise.resolve().then(()=>(pQ(),fQ)),{FocusRequest:a}=await Promise.resolve().then(()=>(Dj(),zwe)),{useListInput:n}=await Promise.resolve().then(()=>(AQ(),Jwe)),{renderForm:u}=await Promise.resolve().then(()=>(mQ(),dQ)),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useCallback:C,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ke.find(this.context.cwd,this.context.plugins),{project:b,workspace:E}=await St.find(v,this.context.cwd);if(!E)throw new rr(b.cwd,this.context.cwd);await b.restoreInstallState();let F=await hw(b);if(F===null||F.releaseRoots.size===0)return 0;if(F.root===null)throw new it("This command can only be run on Git repositories");let N=()=>h.createElement(A,{flexDirection:"row",paddingBottom:1},h.createElement(A,{flexDirection:"column",width:60},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select workspaces.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select release strategies."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to save.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),U=({workspace:ye,active:ae,decision:Ie,setDecision:Fe})=>{let g=ye.manifest.raw.stableVersion??ye.manifest.version;if(g===null)throw new Error(`Assertion failed: The version should have been set (${G.prettyLocator(v,ye.anchoredLocator)})`);if(cF.default.prerelease(g)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${g})`);let Ee=["undecided","decline","patch","minor","major"];n(Ie,Ee,{active:ae,minus:"left",plus:"right",set:Fe});let De=Ie==="undecided"?h.createElement(p,{color:"yellow"},g):Ie==="decline"?h.createElement(p,{color:"green"},g):h.createElement(p,null,h.createElement(p,{color:"magenta"},g)," \u2192 ",h.createElement(p,{color:"green"},cF.default.valid(Ie)?Ie:cF.default.inc(g,Ie)));return h.createElement(A,{flexDirection:"column"},h.createElement(A,null,h.createElement(p,null,G.prettyLocator(v,ye.anchoredLocator)," - ",De)),h.createElement(A,null,Ee.map(ce=>h.createElement(A,{key:ce,paddingLeft:2},h.createElement(p,null,h.createElement(r,{active:ce===Ie})," ",ce)))))},z=ye=>{let ae=new Set(F.releaseRoots),Ie=new Map([...ye].filter(([Fe])=>ae.has(Fe)));for(;;){let Fe=qv({project:F.project,releases:Ie}),g=!1;if(Fe.length>0){for(let[Ee]of Fe)if(!ae.has(Ee)){ae.add(Ee),g=!0;let De=ye.get(Ee);typeof De<"u"&&Ie.set(Ee,De)}}if(!g)break}return{relevantWorkspaces:ae,relevantReleases:Ie}},te=()=>{let[ye,ae]=I(()=>new Map(F.releases)),Ie=C((Fe,g)=>{let Ee=new Map(ye);g!=="undecided"?Ee.set(Fe,g):Ee.delete(Fe);let{relevantReleases:De}=z(Ee);ae(De)},[ye,ae]);return[ye,Ie]},le=({workspaces:ye,releases:ae})=>{let Ie=[];Ie.push(`${ye.size} total`);let Fe=0,g=0;for(let Ee of ye){let De=ae.get(Ee);typeof De>"u"?g+=1:De!=="decline"&&(Fe+=1)}return Ie.push(`${Fe} release${Fe===1?"":"s"}`),Ie.push(`${g} remaining`),h.createElement(p,{color:"yellow"},Ie.join(", "))},ue=await u(({useSubmit:ye})=>{let[ae,Ie]=te();ye(ae);let{relevantWorkspaces:Fe}=z(ae),g=new Set([...Fe].filter(ne=>!F.releaseRoots.has(ne))),[Ee,De]=I(0),ce=C(ne=>{switch(ne){case a.BEFORE:De(Ee-1);break;case a.AFTER:De(Ee+1);break}},[Ee,De]);return h.createElement(A,{flexDirection:"column"},h.createElement(N,null),h.createElement(A,null,h.createElement(p,{wrap:"wrap"},"The following files have been modified in your local checkout.")),h.createElement(A,{flexDirection:"column",marginTop:1,paddingLeft:2},[...F.changedFiles].map(ne=>h.createElement(A,{key:ne},h.createElement(p,null,h.createElement(p,{color:"grey"},fe.fromPortablePath(F.root)),fe.sep,fe.relative(fe.fromPortablePath(F.root),fe.fromPortablePath(ne)))))),F.releaseRoots.size>0&&h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"Because of those files having been modified, the following workspaces may need to be released again (note that private workspaces are also shown here, because even though they won't be published, releasing them will allow us to flag their dependents for potential re-release):")),g.size>3?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:F.releaseRoots,releases:ae})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===0,radius:1,size:2,onFocusRequest:ce},[...F.releaseRoots].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:ae.get(ne)||"undecided",setDecision:ee=>Ie(ne,ee)}))))),g.size>0?h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"The following workspaces depend on other workspaces that have been marked for release, and thus may need to be released as well:")),h.createElement(A,null,h.createElement(p,null,"(Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move the focus between the workspace groups.)")),g.size>5?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:g,releases:ae})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===1,radius:2,size:2,onFocusRequest:ce},[...g].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:ae.get(ne)||"undecided",setDecision:ee=>Ie(ne,ee)}))))):null)},{versionFile:F},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof ue>"u")return 1;F.releases.clear();for(let[ye,ae]of ue)F.releases.set(ye,ae);await F.saveAll()}async executeStandard(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);return await o.restoreInstallState(),(await Lt.start({configuration:r,stdout:this.context.stdout},async u=>{let A=await hw(o);if(A===null||A.releaseRoots.size===0)return;if(A.root===null)throw new it("This command can only be run on Git repositories");if(u.reportInfo(0,`Your PR was started right after ${de.pretty(r,A.baseHash.slice(0,7),"yellow")} ${de.pretty(r,A.baseTitle,"magenta")}`),A.changedFiles.size>0){u.reportInfo(0,"You have changed the following files since then:"),u.reportSeparator();for(let v of A.changedFiles)u.reportInfo(null,`${de.pretty(r,fe.fromPortablePath(A.root),"gray")}${fe.sep}${fe.relative(fe.fromPortablePath(A.root),fe.fromPortablePath(v))}`)}let p=!1,h=!1,C=aF(A);if(C.size>0){p||u.reportSeparator();for(let v of C)u.reportError(0,`${G.prettyLocator(r,v.anchoredLocator)} has been modified but doesn't have a release strategy attached`);p=!0}let I=qv(A);for(let[v,b]of I)h||u.reportSeparator(),u.reportError(0,`${G.prettyLocator(r,v.anchoredLocator)} doesn't have a release strategy attached, but depends on ${G.prettyWorkspace(r,b)} which is planned for release.`),h=!0;(p||h)&&(u.reportSeparator(),u.reportInfo(0,"This command detected that at least some workspaces have received modifications without explicit instructions as to how they had to be released (if needed)."),u.reportInfo(0,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};$0.paths=[["version","check"]],$0.usage=nt.Usage({category:"Release-related commands",description:"check that all the relevant packages have been bumped",details:"\n **Warning:** This command currently requires Git.\n\n This command will check that all the packages covered by the files listed in argument have been properly bumped or declined to bump.\n\n In the case of a bump, the check will also cover transitive packages - meaning that should `Foo` be bumped, a package `Bar` depending on `Foo` will require a decision as to whether `Bar` will need to be bumped. This check doesn't cross packages that have declined to bump.\n\n In case no arguments are passed to the function, the list of modified files will be generated by comparing the HEAD against `master`.\n ",examples:[["Check whether the modified packages need a bump","yarn version check"]]});Ye();qt();var uF=$e(Jn());var eg=class extends ut{constructor(){super(...arguments);this.deferred=ge.Boolean("-d,--deferred",{description:"Prepare the version to be bumped during the next release cycle"});this.immediate=ge.Boolean("-i,--immediate",{description:"Bump the version immediately"});this.strategy=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=r.get("preferDeferredVersions");this.deferred&&(n=!0),this.immediate&&(n=!1);let u=uF.default.valid(this.strategy),A=this.strategy==="decline",p;if(u)if(a.manifest.version!==null){let C=VG(a.manifest.version,this.strategy);C!==null?p=C:p=this.strategy}else p=this.strategy;else{let C=a.manifest.version;if(!A){if(C===null)throw new it("Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.");if(typeof C!="string"||!uF.default.valid(C))throw new it(`Can't bump the version (${C}) if it's not valid semver`)}p=fw(this.strategy)}if(!n){let I=(await jv(o)).get(a);if(typeof I<"u"&&p!=="decline"){let v=lF(a.manifest.version,p);if(uF.default.lt(v,I))throw new it(`Can't bump the version to one that would be lower than the current deferred one (${I})`)}}let h=await hw(o,{allowEmpty:!0});return h.releases.set(a,p),await h.saveAll(),n?0:await this.cli.run(["version","apply"])}};eg.paths=[["version"]],eg.usage=nt.Usage({category:"Release-related commands",description:"apply a new version to the current package",details:"\n This command will bump the version number for the given package, following the specified strategy:\n\n - If `major`, the first number from the semver range will be increased (`X.0.0`).\n - If `minor`, the second number from the semver range will be increased (`0.X.0`).\n - If `patch`, the third number from the semver range will be increased (`0.0.X`).\n - If prefixed by `pre` (`premajor`, ...), a `-0` suffix will be set (`0.0.0-0`).\n - If `prerelease`, the suffix will be increased (`0.0.0-X`); the third number from the semver range will also be increased if there was no suffix in the previous version.\n - If `decline`, the nonce will be increased for `yarn version check` to pass without version bump.\n - If a valid semver range, it will be used as new version.\n - If unspecified, Yarn will ask you for guidance.\n\n For more information about the `--deferred` flag, consult our documentation (https://yarnpkg.com/features/release-workflow#deferred-versioning).\n ",examples:[["Immediately bump the version to the next major","yarn version major"],["Prepare the version to be bumped to the next major","yarn version major --deferred"]]});var YDt={configuration:{deferredVersionFolder:{description:"Folder where are stored the versioning files",type:"ABSOLUTE_PATH",default:"./.yarn/versions"},preferDeferredVersions:{description:"If true, running `yarn version` will assume the `--deferred` flag unless `--immediate` is set",type:"BOOLEAN",default:!1}},commands:[Z0,$0,eg]},WDt=YDt;var XG={};Vt(XG,{WorkspacesFocusCommand:()=>tg,WorkspacesForeachCommand:()=>sp,default:()=>zDt});Ye();Ye();qt();var tg=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.production=ge.Boolean("--production",!1,{description:"Only install regular dependencies by omitting dev dependencies"});this.all=ge.Boolean("-A,--all",!1,{description:"Install the entire project"});this.workspaces=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Nr.find(r);await o.restoreInstallState({restoreResolutions:!1});let u;if(this.all)u=new Set(o.workspaces);else if(this.workspaces.length===0){if(!a)throw new rr(o.cwd,this.context.cwd);u=new Set([a])}else u=new Set(this.workspaces.map(A=>o.getWorkspaceByIdent(G.parseIdent(A))));for(let A of u)for(let p of this.production?["dependencies"]:Ot.hardDependencies)for(let h of A.manifest.getForScope(p).values()){let C=o.tryWorkspaceByDescriptor(h);C!==null&&u.add(C)}for(let A of o.workspaces)u.has(A)?this.production&&A.manifest.devDependencies.clear():(A.manifest.installConfig=A.manifest.installConfig||{},A.manifest.installConfig.selfReferences=!1,A.manifest.dependencies.clear(),A.manifest.devDependencies.clear(),A.manifest.peerDependencies.clear(),A.manifest.scripts.clear());return await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n,persistProject:!1})}};tg.paths=[["workspaces","focus"]],tg.usage=nt.Usage({category:"Workspace-related commands",description:"install a single workspace and its dependencies",details:"\n This command will run an install as if the specified workspaces (and all other workspaces they depend on) were the only ones in the project. If no workspaces are explicitly listed, the active one will be assumed.\n\n Note that this command is only very moderately useful when using zero-installs, since the cache will contain all the packages anyway - meaning that the only difference between a full install and a focused install would just be a few extra lines in the `.pnp.cjs` file, at the cost of introducing an extra complexity.\n\n If the `-A,--all` flag is set, the entire project will be installed. Combine with `--production` to replicate the old `yarn install --production`.\n "});Ye();Ye();Ye();qt();var dw=$e(Zo()),XBe=$e(nd());Za();var sp=class extends ut{constructor(){super(...arguments);this.from=ge.Array("--from",{description:"An array of glob pattern idents or paths from which to base any recursion"});this.all=ge.Boolean("-A,--all",{description:"Run the command on all workspaces of a project"});this.recursive=ge.Boolean("-R,--recursive",{description:"Run the command on the current workspace and all of its recursive dependencies"});this.worktree=ge.Boolean("-W,--worktree",{description:"Run the command on all workspaces of the current worktree"});this.verbose=ge.Boolean("-v,--verbose",{description:"Prefix each output line with the name of the originating workspace"});this.parallel=ge.Boolean("-p,--parallel",!1,{description:"Run the commands in parallel"});this.interlaced=ge.Boolean("-i,--interlaced",!1,{description:"Print the output of commands in real-time instead of buffering it"});this.jobs=ge.String("-j,--jobs",{description:"The maximum number of parallel tasks that the execution will be limited to; or `unlimited`",validator:TT([Vs(["unlimited"]),rd(RT(),[NT(),LT(1)])])});this.topological=ge.Boolean("-t,--topological",!1,{description:"Run the command after all workspaces it depends on (regular) have finished"});this.topologicalDev=ge.Boolean("--topological-dev",!1,{description:"Run the command after all workspaces it depends on (regular + dev) have finished"});this.include=ge.Array("--include",[],{description:"An array of glob pattern idents or paths; only matching workspaces will be traversed"});this.exclude=ge.Array("--exclude",[],{description:"An array of glob pattern idents or paths; matching workspaces won't be traversed"});this.publicOnly=ge.Boolean("--no-private",{description:"Avoid running the command on private workspaces"});this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.dryRun=ge.Boolean("-n,--dry-run",{description:"Print the commands that would be run, without actually running them"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!this.all&&!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=this.cli.process([this.commandName,...this.args]),u=n.path.length===1&&n.path[0]==="run"&&typeof n.scriptName<"u"?n.scriptName:null;if(n.path.length===0)throw new it("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let A=ae=>{!this.dryRun||this.context.stdout.write(`${ae} -`)},p=()=>{let ae=this.from.map(Ie=>dw.default.matcher(Ie));return o.workspaces.filter(Ie=>{let Fe=G.stringifyIdent(Ie.anchoredLocator),g=Ie.relativeCwd;return ae.some(Ee=>Ee(Fe)||Ee(g))})},h=[];if(this.since?(A("Option --since is set; selecting the changed workspaces as root for workspace selection"),h=Array.from(await ra.fetchChangedWorkspaces({ref:this.since,project:o}))):this.from?(A("Option --from is set; selecting the specified workspaces"),h=[...p()]):this.worktree?(A("Option --worktree is set; selecting the current workspace"),h=[a]):this.recursive?(A("Option --recursive is set; selecting the current workspace"),h=[a]):this.all&&(A("Option --all is set; selecting all workspaces"),h=[...o.workspaces]),this.dryRun&&!this.all){for(let ae of h)A(` -- ${ae.relativeCwd} - ${G.prettyLocator(r,ae.anchoredLocator)}`);h.length>0&&A("")}let C;if(this.recursive?this.since?(A("Option --recursive --since is set; recursively selecting all dependent workspaces"),C=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceDependents()]).flat())):(A("Option --recursive is set; recursively selecting all transitive dependencies"),C=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceDependencies()]).flat())):this.worktree?(A("Option --worktree is set; recursively selecting all nested workspaces"),C=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceChildren()]).flat())):C=null,C!==null&&(h=[...new Set([...h,...C])],this.dryRun))for(let ae of C)A(` -- ${ae.relativeCwd} - ${G.prettyLocator(r,ae.anchoredLocator)}`);let I=[],v=!1;if(u?.includes(":")){for(let ae of o.workspaces)if(ae.manifest.scripts.has(u)&&(v=!v,v===!1))break}for(let ae of h){if(u&&!ae.manifest.scripts.has(u)&&!v&&!(await un.getWorkspaceAccessibleBinaries(ae)).has(u)){A(`Excluding ${ae.relativeCwd} because it doesn't have a "${u}" script`);continue}if(!(u===r.env.npm_lifecycle_event&&ae.cwd===a.cwd)){if(this.include.length>0&&!dw.default.isMatch(G.stringifyIdent(ae.anchoredLocator),this.include)&&!dw.default.isMatch(ae.relativeCwd,this.include)){A(`Excluding ${ae.relativeCwd} because it doesn't match the --include filter`);continue}if(this.exclude.length>0&&(dw.default.isMatch(G.stringifyIdent(ae.anchoredLocator),this.exclude)||dw.default.isMatch(ae.relativeCwd,this.exclude))){A(`Excluding ${ae.relativeCwd} because it matches the --include filter`);continue}if(this.publicOnly&&ae.manifest.private===!0){A(`Excluding ${ae.relativeCwd} because it's a private workspace and --no-private was set`);continue}I.push(ae)}}if(this.dryRun)return 0;let b=this.verbose??this.context.stdout.isTTY,E=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.ceil(zi.availableParallelism()/2):1,F=E===1?!1:this.parallel,N=F?this.interlaced:!0,U=(0,XBe.default)(E),z=new Map,te=new Set,le=0,pe=null,ue=!1,ye=await Lt.start({configuration:r,stdout:this.context.stdout,includePrefix:!1},async ae=>{let Ie=async(Fe,{commandIndex:g})=>{if(ue)return-1;!F&&b&&g>1&&ae.reportSeparator();let Ee=KDt(Fe,{configuration:r,verbose:b,commandIndex:g}),[De,ce]=JBe(ae,{prefix:Ee,interlaced:N}),[ne,ee]=JBe(ae,{prefix:Ee,interlaced:N});try{b&&ae.reportInfo(null,`${Ee} Process started`);let we=Date.now(),be=await this.cli.run([this.commandName,...this.args],{cwd:Fe.cwd,stdout:De,stderr:ne})||0;De.end(),ne.end(),await ce,await ee;let ht=Date.now();if(b){let H=r.get("enableTimers")?`, completed in ${de.pretty(r,ht-we,de.Type.DURATION)}`:"";ae.reportInfo(null,`${Ee} Process exited (exit code ${be})${H}`)}return be===130&&(ue=!0,pe=be),be}catch(we){throw De.end(),ne.end(),await ce,await ee,we}};for(let Fe of I)z.set(Fe.anchoredLocator.locatorHash,Fe);for(;z.size>0&&!ae.hasErrors();){let Fe=[];for(let[De,ce]of z){if(te.has(ce.anchoredDescriptor.descriptorHash))continue;let ne=!0;if(this.topological||this.topologicalDev){let ee=this.topologicalDev?new Map([...ce.manifest.dependencies,...ce.manifest.devDependencies]):ce.manifest.dependencies;for(let we of ee.values()){let be=o.tryWorkspaceByDescriptor(we);if(ne=be===null||!z.has(be.anchoredLocator.locatorHash),!ne)break}}if(!!ne&&(te.add(ce.anchoredDescriptor.descriptorHash),Fe.push(U(async()=>{let ee=await Ie(ce,{commandIndex:++le});return z.delete(De),te.delete(ce.anchoredDescriptor.descriptorHash),ee})),!F))break}if(Fe.length===0){let De=Array.from(z.values()).map(ce=>G.prettyLocator(r,ce.anchoredLocator)).join(", ");ae.reportError(3,`Dependency cycle detected (${De})`);return}let Ee=(await Promise.all(Fe)).find(De=>De!==0);pe===null&&(pe=typeof Ee<"u"?1:pe),(this.topological||this.topologicalDev)&&typeof Ee<"u"&&ae.reportError(0,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return pe!==null?pe:ye.exitCode()}};sp.paths=[["workspaces","foreach"]],sp.usage=nt.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`, or disabled by setting `-j unlimited`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project. This is the default behavior.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `-W,--worktree` is set, Yarn will find workspaces to run the command on by looking at the current worktree.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - If `--since` is set, Yarn will only run the command on workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `--dry-run` is set, Yarn will explain what it would do without actually doing anything.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n Adding the `-v,--verbose` flag (automatically enabled in interactive terminal environments) will cause Yarn to print more information; in particular the name of the workspace that generated the output will be printed at the front of each line.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish current and all descendant packages","yarn workspaces foreach npm publish --tolerate-republish"],["Run build script on current and all descendant packages","yarn workspaces foreach run build"],["Run build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -pt run build"],["Run build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -ptR --from '{workspace-a,workspace-b}' run build"]]}),sp.schema=[aI("all",Gu.Forbids,["from","recursive","since","worktree"],{missingIf:"undefined"}),OT(["all","recursive","since","worktree"],{missingIf:"undefined"})];function JBe(t,{prefix:e,interlaced:r}){let o=t.createStreamReporter(e),a=new _e.DefaultStream;a.pipe(o,{end:!1}),a.on("finish",()=>{o.end()});let n=new Promise(A=>{o.on("finish",()=>{A(a.active)})});if(r)return[a,n];let u=new _e.BufferStream;return u.pipe(a,{end:!1}),u.on("finish",()=>{a.end()}),[u,n]}function KDt(t,{configuration:e,commandIndex:r,verbose:o}){if(!o)return null;let n=`[${G.stringifyIdent(t.anchoredLocator)}]:`,u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[r%u.length];return de.pretty(e,n,A)}var VDt={commands:[tg,sp]},zDt=VDt;var fC=()=>({modules:new Map([["@yarnpkg/cli",s2],["@yarnpkg/core",i2],["@yarnpkg/fslib",Kw],["@yarnpkg/libzip",S1],["@yarnpkg/parsers",tI],["@yarnpkg/shell",F1],["clipanion",fI],["semver",JDt],["typanion",Vo],["@yarnpkg/plugin-essentials",$8],["@yarnpkg/plugin-compat",iH],["@yarnpkg/plugin-constraints",wH],["@yarnpkg/plugin-dlx",IH],["@yarnpkg/plugin-exec",DH],["@yarnpkg/plugin-file",SH],["@yarnpkg/plugin-git",Z8],["@yarnpkg/plugin-github",kH],["@yarnpkg/plugin-http",QH],["@yarnpkg/plugin-init",FH],["@yarnpkg/plugin-interactive-tools",Tj],["@yarnpkg/plugin-link",Lj],["@yarnpkg/plugin-nm",Eq],["@yarnpkg/plugin-npm",yG],["@yarnpkg/plugin-npm-cli",SG],["@yarnpkg/plugin-pack",pG],["@yarnpkg/plugin-patch",TG],["@yarnpkg/plugin-pnp",aq],["@yarnpkg/plugin-pnpm",OG],["@yarnpkg/plugin-stage",GG],["@yarnpkg/plugin-typescript",YG],["@yarnpkg/plugin-version",JG],["@yarnpkg/plugin-workspace-tools",XG]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"])});function eve({cwd:t,pluginConfiguration:e}){let r=new as({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:tn??""});return Object.assign(r,{defaultContext:{...as.defaultContext,cwd:t,plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr}})}function XDt(t){if(_e.parseOptionalBoolean(process.env.YARN_IGNORE_NODE))return!0;let r=process.versions.node,o=">=18.12.0";if(Qr.satisfiesWithPrereleases(r,o))return!0;let a=new it(`This tool requires a Node version compatible with ${o} (got ${r}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);return as.defaultContext.stdout.write(t.error(a)),!1}async function tve({selfPath:t,pluginConfiguration:e}){return await Ke.find(fe.toPortablePath(process.cwd()),e,{strict:!1,usePathCheck:t})}function ZDt(t,e,{yarnPath:r}){if(!oe.existsSync(r))return t.error(new Error(`The "yarn-path" option has been set, but the specified location doesn't exist (${r}).`)),1;process.on("SIGINT",()=>{});let o={stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1"}};try{(0,ZBe.execFileSync)(process.execPath,[fe.fromPortablePath(r),...e],o)}catch(a){return a.status??1}return 0}function $Dt(t,e){let r=null,o=e;return e.length>=2&&e[0]==="--cwd"?(r=fe.toPortablePath(e[1]),o=e.slice(2)):e.length>=1&&e[0].startsWith("--cwd=")?(r=fe.toPortablePath(e[0].slice(6)),o=e.slice(1)):e[0]==="add"&&e[e.length-2]==="--cwd"&&(r=fe.toPortablePath(e[e.length-1]),o=e.slice(0,e.length-2)),t.defaultContext.cwd=r!==null?V.resolve(r):V.cwd(),o}function ePt(t,{configuration:e}){if(!e.get("enableTelemetry")||$Be.isCI||!process.stdout.isTTY)return;Ke.telemetry=new cC(e,"puba9cdc10ec5790a2cf4969dd413a47270");let o=/^@yarnpkg\/plugin-(.*)$/;for(let a of e.plugins.keys())uC.has(a.match(o)?.[1]??"")&&Ke.telemetry?.reportPluginName(a);t.binaryVersion&&Ke.telemetry.reportVersion(t.binaryVersion)}function rve(t,{configuration:e}){for(let r of e.plugins.values())for(let o of r.commands||[])t.register(o)}async function tPt(t,e,{selfPath:r,pluginConfiguration:o}){if(!XDt(t))return 1;let a=await tve({selfPath:r,pluginConfiguration:o}),n=a.get("yarnPath"),u=a.get("ignorePath");if(n&&!u)return ZDt(t,e,{yarnPath:n});delete process.env.YARN_IGNORE_PATH;let A=$Dt(t,e);ePt(t,{configuration:a}),rve(t,{configuration:a});let p=t.process(A,t.defaultContext);return p.help||Ke.telemetry?.reportCommandName(p.path.join(" ")),await t.run(p,t.defaultContext)}async function ehe({cwd:t=V.cwd(),pluginConfiguration:e=fC()}={}){let r=eve({cwd:t,pluginConfiguration:e}),o=await tve({pluginConfiguration:e,selfPath:null});return rve(r,{configuration:o}),r}async function nk(t,{cwd:e=V.cwd(),selfPath:r,pluginConfiguration:o}){let a=eve({cwd:e,pluginConfiguration:o});try{process.exitCode=await tPt(a,t,{selfPath:r,pluginConfiguration:o})}catch(n){as.defaultContext.stdout.write(a.error(n)),process.exitCode=1}finally{await oe.rmtempPromise()}}nk(process.argv.slice(2),{cwd:V.cwd(),selfPath:fe.toPortablePath(fe.resolve(process.argv[1])),pluginConfiguration:fC()});})(); -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ -/*! - * buildToken - * Builds OAuth token prefix (helper function) - * - * @name buildToken - * @function - * @param {GitUrl} obj The parsed Git url object. - * @return {String} token prefix - */ -/*! - * fill-range - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Licensed under the MIT License. - */ -/*! - * is-extglob - * - * Copyright (c) 2014-2016, Jon Schlinkert. - * Licensed under the MIT License. - */ -/*! - * is-glob - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ -/*! - * is-number - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Released under the MIT License. - */ -/*! - * is-windows - * - * Copyright © 2015-2018, Jon Schlinkert. - * Released under the MIT License. - */ -/*! - * to-regex-range - * - * Copyright (c) 2015-present, Jon Schlinkert. - * Released under the MIT License. - */ -/** - @license - Copyright (c) 2015, Rebecca Turner - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - */ -/** - @license - Copyright Joyent, Inc. and other Node contributors. - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to permit - persons to whom the Software is furnished to do so, subject to the - following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN - NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -/** - @license - Copyright Node.js contributors. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. -*/ -/** - @license - The MIT License (MIT) - - Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ -/** @license React v0.18.0 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.24.0 - * react-reconciler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v16.13.1 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ diff --git a/.yarn/releases/yarn-4.1.0.cjs b/.yarn/releases/yarn-4.1.0.cjs new file mode 100755 index 0000000000000..738adce5914a0 --- /dev/null +++ b/.yarn/releases/yarn-4.1.0.cjs @@ -0,0 +1,893 @@ +#!/usr/bin/env node +/* eslint-disable */ +//prettier-ignore +(()=>{var Z3e=Object.create;var NR=Object.defineProperty;var $3e=Object.getOwnPropertyDescriptor;var e_e=Object.getOwnPropertyNames;var t_e=Object.getPrototypeOf,r_e=Object.prototype.hasOwnProperty;var ve=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var Et=(t,e)=>()=>(t&&(e=t(t=0)),e);var _=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Vt=(t,e)=>{for(var r in e)NR(t,r,{get:e[r],enumerable:!0})},n_e=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of e_e(e))!r_e.call(t,a)&&a!==r&&NR(t,a,{get:()=>e[a],enumerable:!(o=$3e(e,a))||o.enumerable});return t};var $e=(t,e,r)=>(r=t!=null?Z3e(t_e(t)):{},n_e(e||!t||!t.__esModule?NR(r,"default",{value:t,enumerable:!0}):r,t));var vi={};Vt(vi,{SAFE_TIME:()=>x7,S_IFDIR:()=>wD,S_IFLNK:()=>ID,S_IFMT:()=>Ou,S_IFREG:()=>jw});var Ou,wD,jw,ID,x7,k7=Et(()=>{Ou=61440,wD=16384,jw=32768,ID=40960,x7=456789e3});var ar={};Vt(ar,{EBADF:()=>Io,EBUSY:()=>i_e,EEXIST:()=>u_e,EINVAL:()=>o_e,EISDIR:()=>c_e,ENOENT:()=>a_e,ENOSYS:()=>s_e,ENOTDIR:()=>l_e,ENOTEMPTY:()=>f_e,EOPNOTSUPP:()=>p_e,EROFS:()=>A_e,ERR_DIR_CLOSED:()=>LR});function Tl(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function i_e(t){return Tl("EBUSY",t)}function s_e(t,e){return Tl("ENOSYS",`${t}, ${e}`)}function o_e(t){return Tl("EINVAL",`invalid argument, ${t}`)}function Io(t){return Tl("EBADF",`bad file descriptor, ${t}`)}function a_e(t){return Tl("ENOENT",`no such file or directory, ${t}`)}function l_e(t){return Tl("ENOTDIR",`not a directory, ${t}`)}function c_e(t){return Tl("EISDIR",`illegal operation on a directory, ${t}`)}function u_e(t){return Tl("EEXIST",`file already exists, ${t}`)}function A_e(t){return Tl("EROFS",`read-only filesystem, ${t}`)}function f_e(t){return Tl("ENOTEMPTY",`directory not empty, ${t}`)}function p_e(t){return Tl("EOPNOTSUPP",`operation not supported, ${t}`)}function LR(){return Tl("ERR_DIR_CLOSED","Directory handle was closed")}var BD=Et(()=>{});var Ea={};Vt(Ea,{BigIntStatsEntry:()=>ty,DEFAULT_MODE:()=>UR,DirEntry:()=>OR,StatEntry:()=>ey,areStatsEqual:()=>_R,clearStats:()=>vD,convertToBigIntStats:()=>g_e,makeDefaultStats:()=>Q7,makeEmptyStats:()=>h_e});function Q7(){return new ey}function h_e(){return vD(Q7())}function vD(t){for(let e in t)if(Object.hasOwn(t,e)){let r=t[e];typeof r=="number"?t[e]=0:typeof r=="bigint"?t[e]=BigInt(0):MR.types.isDate(r)&&(t[e]=new Date(0))}return t}function g_e(t){let e=new ty;for(let r in t)if(Object.hasOwn(t,r)){let o=t[r];typeof o=="number"?e[r]=BigInt(o):MR.types.isDate(o)&&(e[r]=new Date(o))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function _R(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs||t.blksize!==e.blksize||t.blocks!==e.blocks||t.ctimeMs!==e.ctimeMs||t.dev!==e.dev||t.gid!==e.gid||t.ino!==e.ino||t.isBlockDevice()!==e.isBlockDevice()||t.isCharacterDevice()!==e.isCharacterDevice()||t.isDirectory()!==e.isDirectory()||t.isFIFO()!==e.isFIFO()||t.isFile()!==e.isFile()||t.isSocket()!==e.isSocket()||t.isSymbolicLink()!==e.isSymbolicLink()||t.mode!==e.mode||t.mtimeMs!==e.mtimeMs||t.nlink!==e.nlink||t.rdev!==e.rdev||t.size!==e.size||t.uid!==e.uid)return!1;let r=t,o=e;return!(r.atimeNs!==o.atimeNs||r.mtimeNs!==o.mtimeNs||r.ctimeNs!==o.ctimeNs||r.birthtimeNs!==o.birthtimeNs)}var MR,UR,OR,ey,ty,HR=Et(()=>{MR=$e(ve("util")),UR=33188,OR=class{constructor(){this.name="";this.path="";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},ey=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=UR;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},ty=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(UR);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}}});function C_e(t){let e,r;if(e=t.match(y_e))t=e[1];else if(r=t.match(E_e))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function w_e(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(d_e))?t=`/${e[1]}`:(r=t.match(m_e))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t}function DD(t,e){return t===ue?R7(e):jR(e)}var Gw,Bt,dr,ue,V,F7,d_e,m_e,y_e,E_e,jR,R7,Ca=Et(()=>{Gw=$e(ve("path")),Bt={root:"/",dot:".",parent:".."},dr={home:"~",nodeModules:"node_modules",manifest:"package.json",lockfile:"yarn.lock",virtual:"__virtual__",pnpJs:".pnp.js",pnpCjs:".pnp.cjs",pnpData:".pnp.data.json",pnpEsmLoader:".pnp.loader.mjs",rc:".yarnrc.yml",env:".env"},ue=Object.create(Gw.default),V=Object.create(Gw.default.posix);ue.cwd=()=>process.cwd();V.cwd=process.platform==="win32"?()=>jR(process.cwd()):process.cwd;process.platform==="win32"&&(V.resolve=(...t)=>t.length>0&&V.isAbsolute(t[0])?Gw.default.posix.resolve(...t):Gw.default.posix.resolve(V.cwd(),...t));F7=function(t,e,r){return e=t.normalize(e),r=t.normalize(r),e===r?".":(e.endsWith(t.sep)||(e=e+t.sep),r.startsWith(e)?r.slice(e.length):null)};ue.contains=(t,e)=>F7(ue,t,e);V.contains=(t,e)=>F7(V,t,e);d_e=/^([a-zA-Z]:.*)$/,m_e=/^\/\/(\.\/)?(.*)$/,y_e=/^\/([a-zA-Z]:.*)$/,E_e=/^\/unc\/(\.dot\/)?(.*)$/;jR=process.platform==="win32"?w_e:t=>t,R7=process.platform==="win32"?C_e:t=>t;ue.fromPortablePath=R7;ue.toPortablePath=jR});async function SD(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.indexPath,{recursive:!0});let o=[];for(let a of r)for(let n of r)o.push(t.mkdirPromise(t.pathUtils.join(e.indexPath,`${a}${n}`),{recursive:!0}));return await Promise.all(o),e.indexPath}async function T7(t,e,r,o,a){let n=t.pathUtils.normalize(e),u=r.pathUtils.normalize(o),A=[],p=[],{atime:h,mtime:E}=a.stableTime?{atime:Og,mtime:Og}:await r.lstatPromise(u);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[h,E]}),await GR(A,p,t,n,r,u,{...a,didParentExist:!0});for(let I of A)await I();await Promise.all(p.map(I=>I()))}async function GR(t,e,r,o,a,n,u){let A=u.didParentExist?await N7(r,o):null,p=await a.lstatPromise(n),{atime:h,mtime:E}=u.stableTime?{atime:Og,mtime:Og}:p,I;switch(!0){case p.isDirectory():I=await B_e(t,e,r,o,A,a,n,p,u);break;case p.isFile():I=await S_e(t,e,r,o,A,a,n,p,u);break;case p.isSymbolicLink():I=await P_e(t,e,r,o,A,a,n,p,u);break;default:throw new Error(`Unsupported file type (${p.mode})`)}return(u.linkStrategy?.type!=="HardlinkFromIndex"||!p.isFile())&&((I||A?.mtime?.getTime()!==E.getTime()||A?.atime?.getTime()!==h.getTime())&&(e.push(()=>r.lutimesPromise(o,h,E)),I=!0),(A===null||(A.mode&511)!==(p.mode&511))&&(e.push(()=>r.chmodPromise(o,p.mode&511)),I=!0)),I}async function N7(t,e){try{return await t.lstatPromise(e)}catch{return null}}async function B_e(t,e,r,o,a,n,u,A,p){if(a!==null&&!a.isDirectory())if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;let h=!1;a===null&&(t.push(async()=>{try{await r.mkdirPromise(o,{mode:A.mode})}catch(v){if(v.code!=="EEXIST")throw v}}),h=!0);let E=await n.readdirPromise(u),I=p.didParentExist&&!a?{...p,didParentExist:!1}:p;if(p.stableSort)for(let v of E.sort())await GR(t,e,r,r.pathUtils.join(o,v),n,n.pathUtils.join(u,v),I)&&(h=!0);else(await Promise.all(E.map(async x=>{await GR(t,e,r,r.pathUtils.join(o,x),n,n.pathUtils.join(u,x),I)}))).some(x=>x)&&(h=!0);return h}async function v_e(t,e,r,o,a,n,u,A,p,h){let E=await n.checksumFilePromise(u,{algorithm:"sha1"}),I=420,v=A.mode&511,x=`${E}${v!==I?v.toString(8):""}`,C=r.pathUtils.join(h.indexPath,E.slice(0,2),`${x}.dat`),R;(ce=>(ce[ce.Lock=0]="Lock",ce[ce.Rename=1]="Rename"))(R||={});let L=1,U=await N7(r,C);if(a){let ae=U&&a.dev===U.dev&&a.ino===U.ino,fe=U?.mtimeMs!==I_e;if(ae&&fe&&h.autoRepair&&(L=0,U=null),!ae)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1}let J=!U&&L===1?`${C}.${Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0")}`:null,te=!1;return t.push(async()=>{if(!U&&(L===0&&await r.lockPromise(C,async()=>{let ae=await n.readFilePromise(u);await r.writeFilePromise(C,ae)}),L===1&&J)){let ae=await n.readFilePromise(u);await r.writeFilePromise(J,ae);try{await r.linkPromise(J,C)}catch(fe){if(fe.code==="EEXIST")te=!0,await r.unlinkPromise(J);else throw fe}}a||await r.linkPromise(C,o)}),e.push(async()=>{U||(await r.lutimesPromise(C,Og,Og),v!==I&&await r.chmodPromise(C,v)),J&&!te&&await r.unlinkPromise(J)}),!1}async function D_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{let h=await n.readFilePromise(u);await r.writeFilePromise(o,h)}),!0}async function S_e(t,e,r,o,a,n,u,A,p){return p.linkStrategy?.type==="HardlinkFromIndex"?v_e(t,e,r,o,a,n,u,A,p,p.linkStrategy):D_e(t,e,r,o,a,n,u,A,p)}async function P_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{await r.symlinkPromise(DD(r.pathUtils,await n.readlinkPromise(u)),o)}),!0}var Og,I_e,qR=Et(()=>{Ca();Og=new Date(456789e3*1e3),I_e=Og.getTime()});function PD(t,e,r,o){let a=()=>{let n=r.shift();if(typeof n>"u")return null;let u=t.pathUtils.join(e,n);return Object.assign(t.statSync(u),{name:n,path:void 0})};return new qw(e,a,o)}var qw,L7=Et(()=>{BD();qw=class{constructor(e,r,o={}){this.path=e;this.nextDirent=r;this.opts=o;this.closed=!1}throwIfClosed(){if(this.closed)throw LR()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let r=this.readSync();return typeof e<"u"?e(null,r):Promise.resolve(r)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<"u"?e(null):Promise.resolve()}closeSync(){this.throwIfClosed(),this.opts.onClose?.(),this.closed=!0}}});function O7(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var M7,ry,U7=Et(()=>{M7=ve("events");HR();ry=class extends M7.EventEmitter{constructor(r,o,{bigint:a=!1}={}){super();this.status="ready";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=r,this.path=o,this.bigint=a,this.lastStats=this.stat()}static create(r,o,a){let n=new ry(r,o,a);return n.start(),n}start(){O7(this.status,"ready"),this.status="running",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit("change",this.lastStats,this.lastStats)},3)}stop(){O7(this.status,"running"),this.status="stopped",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit("stop")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let o=this.bigint?new ty:new ey;return vD(o)}}makeInterval(r){let o=setInterval(()=>{let a=this.stat(),n=this.lastStats;_R(a,n)||(this.lastStats=a,this.emit("change",a,n))},r.interval);return r.persistent?o:o.unref()}registerChangeListener(r,o){this.addListener("change",r),this.changeListeners.set(r,this.makeInterval(o))}unregisterChangeListener(r){this.removeListener("change",r);let o=this.changeListeners.get(r);typeof o<"u"&&clearInterval(o),this.changeListeners.delete(r)}unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())this.unregisterChangeListener(r)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let r of this.changeListeners.values())r.ref();return this}unref(){for(let r of this.changeListeners.values())r.unref();return this}}});function ny(t,e,r,o){let a,n,u,A;switch(typeof r){case"function":a=!1,n=!0,u=5007,A=r;break;default:({bigint:a=!1,persistent:n=!0,interval:u=5007}=r),A=o;break}let p=bD.get(t);typeof p>"u"&&bD.set(t,p=new Map);let h=p.get(e);return typeof h>"u"&&(h=ry.create(t,e,{bigint:a}),p.set(e,h)),h.registerChangeListener(A,{persistent:n,interval:u}),h}function Mg(t,e,r){let o=bD.get(t);if(typeof o>"u")return;let a=o.get(e);typeof a>"u"||(typeof r>"u"?a.unregisterAllChangeListeners():a.unregisterChangeListener(r),a.hasChangeListeners()||(a.stop(),o.delete(e)))}function Ug(t){let e=bD.get(t);if(!(typeof e>"u"))for(let r of e.keys())Mg(t,r)}var bD,YR=Et(()=>{U7();bD=new WeakMap});function b_e(t){let e=t.match(/\r?\n/g);if(e===null)return H7.EOL;let r=e.filter(a=>a===`\r +`).length,o=e.length-r;return r>o?`\r +`:` +`}function _g(t,e){return e.replace(/\r?\n/g,b_e(t))}var _7,H7,gf,Mu,Hg=Et(()=>{_7=ve("crypto"),H7=ve("os");qR();Ca();gf=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let o=[e];for(;o.length>0;){let a=o.shift();if((await this.lstatPromise(a)).isDirectory()){let u=await this.readdirPromise(a);if(r)for(let A of u.sort())o.push(this.pathUtils.join(a,A));else throw new Error("Not supported")}else yield a}}async checksumFilePromise(e,{algorithm:r="sha512"}={}){let o=await this.openPromise(e,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,_7.createHash)(r),A=0;for(;(A=await this.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await this.closePromise(o)}}async removePromise(e,{recursive:r=!0,maxRetries:o=5}={}){let a;try{a=await this.lstatPromise(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(a.isDirectory()){if(r){let n=await this.readdirPromise(e);await Promise.all(n.map(u=>this.removePromise(this.pathUtils.resolve(e,u))))}for(let n=0;n<=o;n++)try{await this.rmdirPromise(e);break}catch(u){if(u.code!=="EBUSY"&&u.code!=="ENOTEMPTY")throw u;nsetTimeout(A,n*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:r=!0}={}){let o;try{o=this.lstatSync(e)}catch(a){if(a.code==="ENOENT")return;throw a}if(o.isDirectory()){if(r)for(let a of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,a));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{await this.mkdirPromise(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&await this.chmodPromise(A,r),o!=null)await this.utimesPromise(A,o[0],o[1]);else{let p=await this.statPromise(this.pathUtils.dirname(A));await this.utimesPromise(A,p.atime,p.mtime)}}}return n}mkdirpSync(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{this.mkdirSync(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&this.chmodSync(A,r),o!=null)this.utimesSync(A,o[0],o[1]);else{let p=this.statSync(this.pathUtils.dirname(A));this.utimesSync(A,p.atime,p.mtime)}}}return n}async copyPromise(e,r,{baseFs:o=this,overwrite:a=!0,stableSort:n=!1,stableTime:u=!1,linkStrategy:A=null}={}){return await T7(this,e,o,r,{overwrite:a,stableSort:n,stableTime:u,linkStrategy:A})}copySync(e,r,{baseFs:o=this,overwrite:a=!0}={}){let n=o.lstatSync(r),u=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);let p=o.readdirSync(r);for(let h of p)this.copySync(this.pathUtils.join(e,h),o.pathUtils.join(r,h),{baseFs:o,overwrite:a})}else if(n.isFile()){if(!u||a){u&&this.removeSync(e);let p=o.readFileSync(r);this.writeFileSync(e,p)}}else if(n.isSymbolicLink()){if(!u||a){u&&this.removeSync(e);let p=o.readlinkSync(r);this.symlinkSync(DD(this.pathUtils,p),e)}}else throw new Error(`Unsupported file type (file: ${r}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);let A=n.mode&511;this.chmodSync(e,A)}async changeFilePromise(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferPromise(e,r,o):this.changeFileTextPromise(e,r,o)}async changeFileBufferPromise(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=await this.readFilePromise(e)}catch{}Buffer.compare(a,r)!==0&&await this.writeFilePromise(e,r,{mode:o})}async changeFileTextPromise(e,r,{automaticNewlines:o,mode:a}={}){let n="";try{n=await this.readFilePromise(e,"utf8")}catch{}let u=o?_g(n,r):r;n!==u&&await this.writeFilePromise(e,u,{mode:a})}changeFileSync(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferSync(e,r,o):this.changeFileTextSync(e,r,o)}changeFileBufferSync(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=this.readFileSync(e)}catch{}Buffer.compare(a,r)!==0&&this.writeFileSync(e,r,{mode:o})}changeFileTextSync(e,r,{automaticNewlines:o=!1,mode:a}={}){let n="";try{n=this.readFileSync(e,"utf8")}catch{}let u=o?_g(n,r):r;n!==u&&this.writeFileSync(e,u,{mode:a})}async movePromise(e,r){try{await this.renamePromise(e,r)}catch(o){if(o.code==="EXDEV")await this.copyPromise(r,e),await this.removePromise(e);else throw o}}moveSync(e,r){try{this.renameSync(e,r)}catch(o){if(o.code==="EXDEV")this.copySync(r,e),this.removeSync(e);else throw o}}async lockPromise(e,r){let o=`${e}.flock`,a=1e3/60,n=Date.now(),u=null,A=async()=>{let p;try{[p]=await this.readJsonPromise(o)}catch{return Date.now()-n<500}try{return process.kill(p,0),!0}catch{return!1}};for(;u===null;)try{u=await this.openPromise(o,"wx")}catch(p){if(p.code==="EEXIST"){if(!await A())try{await this.unlinkPromise(o);continue}catch{}if(Date.now()-n<60*1e3)await new Promise(h=>setTimeout(h,a));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${o})`)}else throw p}await this.writePromise(u,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(u),await this.unlinkPromise(o)}catch{}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}async writeJsonPromise(e,r,{compact:o=!1}={}){let a=o?0:2;return await this.writeFilePromise(e,`${JSON.stringify(r,null,a)} +`)}writeJsonSync(e,r,{compact:o=!1}={}){let a=o?0:2;return this.writeFileSync(e,`${JSON.stringify(r,null,a)} +`)}async preserveTimePromise(e,r){let o=await this.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await this.lutimesPromise(e,o.atime,o.mtime)}async preserveTimeSync(e,r){let o=this.lstatSync(e),a=r();typeof a<"u"&&(e=a),this.lutimesSync(e,o.atime,o.mtime)}},Mu=class extends gf{constructor(){super(V)}}});var Ss,df=Et(()=>{Hg();Ss=class extends gf{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,r,o){return this.baseFs.openPromise(this.mapToBase(e),r,o)}openSync(e,r,o){return this.baseFs.openSync(this.mapToBase(e),r,o)}async opendirPromise(e,r){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),r),{path:e})}opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),r),{path:e})}async readPromise(e,r,o,a,n){return await this.baseFs.readPromise(e,r,o,a,n)}readSync(e,r,o,a,n){return this.baseFs.readSync(e,r,o,a,n)}async writePromise(e,r,o,a,n){return typeof r=="string"?await this.baseFs.writePromise(e,r,o):await this.baseFs.writePromise(e,r,o,a,n)}writeSync(e,r,o,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r,o):this.baseFs.writeSync(e,r,o,a,n)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,r)}createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,r)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase(e),r)}async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}fstatSync(e,r){return this.baseFs.fstatSync(e,r)}lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}fchmodSync(e,r){return this.baseFs.fchmodSync(e,r)}async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e),r)}chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}async fchownPromise(e,r,o){return this.baseFs.fchownPromise(e,r,o)}fchownSync(e,r,o){return this.baseFs.fchownSync(e,r,o)}async chownPromise(e,r,o){return this.baseFs.chownPromise(this.mapToBase(e),r,o)}chownSync(e,r,o){return this.baseFs.chownSync(this.mapToBase(e),r,o)}async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(r))}renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(r))}async copyFilePromise(e,r,o=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),o)}copyFileSync(e,r,o=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),o)}async appendFilePromise(e,r,o){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,o)}appendFileSync(e,r,o){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,o)}async writeFilePromise(e,r,o){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,o)}writeFileSync(e,r,o){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,o)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,o){return this.baseFs.utimesPromise(this.mapToBase(e),r,o)}utimesSync(e,r,o){return this.baseFs.utimesSync(this.mapToBase(e),r,o)}async lutimesPromise(e,r,o){return this.baseFs.lutimesPromise(this.mapToBase(e),r,o)}lutimesSync(e,r,o){return this.baseFs.lutimesSync(this.mapToBase(e),r,o)}async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e),r)}mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e),r)}rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(r))}linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(r))}async symlinkPromise(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkPromise(u,a,o)}symlinkSync(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkSync(u,a,o)}async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapToBase(e),r)}truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}watch(e,r,o){return this.baseFs.watch(this.mapToBase(e),r,o)}watchFile(e,r,o){return this.baseFs.watchFile(this.mapToBase(e),r,o)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}}});var Uu,j7=Et(()=>{df();Uu=class extends Ss{constructor(r,{baseFs:o,pathUtils:a}){super(a);this.target=r,this.baseFs=o}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(r){return r}mapToBase(r){return r}}});function G7(t){let e=t;return typeof t.path=="string"&&(e.path=ue.toPortablePath(t.path)),e}var q7,Tn,jg=Et(()=>{q7=$e(ve("fs"));Hg();Ca();Tn=class extends Mu{constructor(r=q7.default){super();this.realFs=r}getExtractHint(){return!1}getRealPath(){return Bt.root}resolve(r){return V.resolve(r)}async openPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.open(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}openSync(r,o,a){return this.realFs.openSync(ue.fromPortablePath(r),o,a)}async opendirPromise(r,o){return await new Promise((a,n)=>{typeof o<"u"?this.realFs.opendir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.opendir(ue.fromPortablePath(r),this.makeCallback(a,n))}).then(a=>{let n=a;return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n})}opendirSync(r,o){let n=typeof o<"u"?this.realFs.opendirSync(ue.fromPortablePath(r),o):this.realFs.opendirSync(ue.fromPortablePath(r));return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n}async readPromise(r,o,a=0,n=0,u=-1){return await new Promise((A,p)=>{this.realFs.read(r,o,a,n,u,(h,E)=>{h?p(h):A(E)})})}readSync(r,o,a,n,u){return this.realFs.readSync(r,o,a,n,u)}async writePromise(r,o,a,n,u){return await new Promise((A,p)=>typeof o=="string"?this.realFs.write(r,o,a,this.makeCallback(A,p)):this.realFs.write(r,o,a,n,u,this.makeCallback(A,p)))}writeSync(r,o,a,n,u){return typeof o=="string"?this.realFs.writeSync(r,o,a):this.realFs.writeSync(r,o,a,n,u)}async closePromise(r){await new Promise((o,a)=>{this.realFs.close(r,this.makeCallback(o,a))})}closeSync(r){this.realFs.closeSync(r)}createReadStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createReadStream(a,o)}createWriteStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createWriteStream(a,o)}async realpathPromise(r){return await new Promise((o,a)=>{this.realFs.realpath(ue.fromPortablePath(r),{},this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}realpathSync(r){return ue.toPortablePath(this.realFs.realpathSync(ue.fromPortablePath(r),{}))}async existsPromise(r){return await new Promise(o=>{this.realFs.exists(ue.fromPortablePath(r),o)})}accessSync(r,o){return this.realFs.accessSync(ue.fromPortablePath(r),o)}async accessPromise(r,o){return await new Promise((a,n)=>{this.realFs.access(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}existsSync(r){return this.realFs.existsSync(ue.fromPortablePath(r))}async statPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.stat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.stat(ue.fromPortablePath(r),this.makeCallback(a,n))})}statSync(r,o){return o?this.realFs.statSync(ue.fromPortablePath(r),o):this.realFs.statSync(ue.fromPortablePath(r))}async fstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.fstat(r,o,this.makeCallback(a,n)):this.realFs.fstat(r,this.makeCallback(a,n))})}fstatSync(r,o){return o?this.realFs.fstatSync(r,o):this.realFs.fstatSync(r)}async lstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.lstat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.lstat(ue.fromPortablePath(r),this.makeCallback(a,n))})}lstatSync(r,o){return o?this.realFs.lstatSync(ue.fromPortablePath(r),o):this.realFs.lstatSync(ue.fromPortablePath(r))}async fchmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.fchmod(r,o,this.makeCallback(a,n))})}fchmodSync(r,o){return this.realFs.fchmodSync(r,o)}async chmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.chmod(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}chmodSync(r,o){return this.realFs.chmodSync(ue.fromPortablePath(r),o)}async fchownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.fchown(r,o,a,this.makeCallback(n,u))})}fchownSync(r,o,a){return this.realFs.fchownSync(r,o,a)}async chownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.chown(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}chownSync(r,o,a){return this.realFs.chownSync(ue.fromPortablePath(r),o,a)}async renamePromise(r,o){return await new Promise((a,n)=>{this.realFs.rename(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}renameSync(r,o){return this.realFs.renameSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async copyFilePromise(r,o,a=0){return await new Promise((n,u)=>{this.realFs.copyFile(ue.fromPortablePath(r),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}copyFileSync(r,o,a=0){return this.realFs.copyFileSync(ue.fromPortablePath(r),ue.fromPortablePath(o),a)}async appendFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFile(A,o,a,this.makeCallback(n,u)):this.realFs.appendFile(A,o,this.makeCallback(n,u))})}appendFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFileSync(n,o,a):this.realFs.appendFileSync(n,o)}async writeFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFile(A,o,a,this.makeCallback(n,u)):this.realFs.writeFile(A,o,this.makeCallback(n,u))})}writeFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFileSync(n,o,a):this.realFs.writeFileSync(n,o)}async unlinkPromise(r){return await new Promise((o,a)=>{this.realFs.unlink(ue.fromPortablePath(r),this.makeCallback(o,a))})}unlinkSync(r){return this.realFs.unlinkSync(ue.fromPortablePath(r))}async utimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.utimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}utimesSync(r,o,a){this.realFs.utimesSync(ue.fromPortablePath(r),o,a)}async lutimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.lutimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}lutimesSync(r,o,a){this.realFs.lutimesSync(ue.fromPortablePath(r),o,a)}async mkdirPromise(r,o){return await new Promise((a,n)=>{this.realFs.mkdir(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}mkdirSync(r,o){return this.realFs.mkdirSync(ue.fromPortablePath(r),o)}async rmdirPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.rmdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.rmdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}rmdirSync(r,o){return this.realFs.rmdirSync(ue.fromPortablePath(r),o)}async linkPromise(r,o){return await new Promise((a,n)=>{this.realFs.link(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}linkSync(r,o){return this.realFs.linkSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async symlinkPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.symlink(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}symlinkSync(r,o,a){return this.realFs.symlinkSync(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a)}async readFilePromise(r,o){return await new Promise((a,n)=>{let u=typeof r=="string"?ue.fromPortablePath(r):r;this.realFs.readFile(u,o,this.makeCallback(a,n))})}readFileSync(r,o){let a=typeof r=="string"?ue.fromPortablePath(r):r;return this.realFs.readFileSync(a,o)}async readdirPromise(r,o){return await new Promise((a,n)=>{o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(G7)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(ue.toPortablePath)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.readdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}readdirSync(r,o){return o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdirSync(ue.fromPortablePath(r),o).map(G7):this.realFs.readdirSync(ue.fromPortablePath(r),o).map(ue.toPortablePath):this.realFs.readdirSync(ue.fromPortablePath(r),o):this.realFs.readdirSync(ue.fromPortablePath(r))}async readlinkPromise(r){return await new Promise((o,a)=>{this.realFs.readlink(ue.fromPortablePath(r),this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}readlinkSync(r){return ue.toPortablePath(this.realFs.readlinkSync(ue.fromPortablePath(r)))}async truncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.truncate(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}truncateSync(r,o){return this.realFs.truncateSync(ue.fromPortablePath(r),o)}async ftruncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.ftruncate(r,o,this.makeCallback(a,n))})}ftruncateSync(r,o){return this.realFs.ftruncateSync(r,o)}watch(r,o,a){return this.realFs.watch(ue.fromPortablePath(r),o,a)}watchFile(r,o,a){return this.realFs.watchFile(ue.fromPortablePath(r),o,a)}unwatchFile(r,o){return this.realFs.unwatchFile(ue.fromPortablePath(r),o)}makeCallback(r,o){return(a,n)=>{a?o(a):r(n)}}}});var gn,Y7=Et(()=>{jg();df();Ca();gn=class extends Ss{constructor(r,{baseFs:o=new Tn}={}){super(V);this.target=this.pathUtils.normalize(r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(r){return this.pathUtils.isAbsolute(r)?V.normalize(r):this.baseFs.resolve(V.join(this.target,r))}mapFromBase(r){return r}mapToBase(r){return this.pathUtils.isAbsolute(r)?r:this.pathUtils.join(this.target,r)}}});var W7,_u,K7=Et(()=>{jg();df();Ca();W7=Bt.root,_u=class extends Ss{constructor(r,{baseFs:o=new Tn}={}){super(V);this.target=this.pathUtils.resolve(Bt.root,r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Bt.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(r){let o=this.pathUtils.normalize(r);if(this.pathUtils.isAbsolute(r))return this.pathUtils.resolve(this.target,this.pathUtils.relative(W7,r));if(o.match(/^\.\.\/?/))throw new Error(`Resolving this path (${r}) would escape the jail`);return this.pathUtils.resolve(this.target,r)}mapFromBase(r){return this.pathUtils.resolve(W7,this.pathUtils.relative(this.target,r))}}});var iy,V7=Et(()=>{df();iy=class extends Ss{constructor(r,o){super(o);this.instance=null;this.factory=r}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(r){this.instance=r}mapFromBase(r){return r}mapToBase(r){return r}}});var Gg,wa,Hp,J7=Et(()=>{Gg=ve("fs");Hg();jg();YR();BD();Ca();wa=4278190080,Hp=class extends Mu{constructor({baseFs:r=new Tn,filter:o=null,magicByte:a=42,maxOpenFiles:n=1/0,useCache:u=!0,maxAge:A=5e3,typeCheck:p=Gg.constants.S_IFREG,getMountPoint:h,factoryPromise:E,factorySync:I}){if(Math.floor(a)!==a||!(a>1&&a<=127))throw new Error("The magic byte must be set to a round value between 1 and 127 included");super();this.fdMap=new Map;this.nextFd=3;this.isMount=new Set;this.notMount=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.baseFs=r,this.mountInstances=u?new Map:null,this.factoryPromise=E,this.factorySync=I,this.filter=o,this.getMountPoint=h,this.magic=a<<24,this.maxAge=A,this.maxOpenFiles=n,this.typeCheck=p}getExtractHint(r){return this.baseFs.getExtractHint(r)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Ug(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.saveAndClose?.(),this.mountInstances.delete(r)}discardAndClose(){if(Ug(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.discardAndClose?.(),this.mountInstances.delete(r)}resolve(r){return this.baseFs.resolve(r)}remapFd(r,o){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,o]),a}async openPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.openPromise(r,o,a),async(n,{subPath:u})=>this.remapFd(n,await n.openPromise(u,o,a)))}openSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,o,a),(n,{subPath:u})=>this.remapFd(n,n.openSync(u,o,a)))}async opendirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.opendirPromise(r,o),async(a,{subPath:n})=>await a.opendirPromise(n,o),{requireSubpath:!1})}opendirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.opendirSync(r,o),(a,{subPath:n})=>a.opendirSync(n,o),{requireSubpath:!1})}async readPromise(r,o,a,n,u){if((r&wa)!==this.magic)return await this.baseFs.readPromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("read");let[p,h]=A;return await p.readPromise(h,o,a,n,u)}readSync(r,o,a,n,u){if((r&wa)!==this.magic)return this.baseFs.readSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("readSync");let[p,h]=A;return p.readSync(h,o,a,n,u)}async writePromise(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?await this.baseFs.writePromise(r,o,a):await this.baseFs.writePromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("write");let[p,h]=A;return typeof o=="string"?await p.writePromise(h,o,a):await p.writePromise(h,o,a,n,u)}writeSync(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?this.baseFs.writeSync(r,o,a):this.baseFs.writeSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("writeSync");let[p,h]=A;return typeof o=="string"?p.writeSync(h,o,a):p.writeSync(h,o,a,n,u)}async closePromise(r){if((r&wa)!==this.magic)return await this.baseFs.closePromise(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("close");this.fdMap.delete(r);let[a,n]=o;return await a.closePromise(n)}closeSync(r){if((r&wa)!==this.magic)return this.baseFs.closeSync(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("closeSync");this.fdMap.delete(r);let[a,n]=o;return a.closeSync(n)}createReadStream(r,o){return r===null?this.baseFs.createReadStream(r,o):this.makeCallSync(r,()=>this.baseFs.createReadStream(r,o),(a,{archivePath:n,subPath:u})=>{let A=a.createReadStream(u,o);return A.path=ue.fromPortablePath(this.pathUtils.join(n,u)),A})}createWriteStream(r,o){return r===null?this.baseFs.createWriteStream(r,o):this.makeCallSync(r,()=>this.baseFs.createWriteStream(r,o),(a,{subPath:n})=>a.createWriteStream(n,o))}async realpathPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.realpathPromise(r),async(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=await this.baseFs.realpathPromise(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,await o.realpathPromise(n)))})}realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(r),(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=this.baseFs.realpathSync(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,o.realpathSync(n)))})}async existsPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.existsPromise(r),async(o,{subPath:a})=>await o.existsPromise(a))}existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(o,{subPath:a})=>o.existsSync(a))}async accessPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.accessPromise(r,o),async(a,{subPath:n})=>await a.accessPromise(n,o))}accessSync(r,o){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,o),(a,{subPath:n})=>a.accessSync(n,o))}async statPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.statPromise(r,o),async(a,{subPath:n})=>await a.statPromise(n,o))}statSync(r,o){return this.makeCallSync(r,()=>this.baseFs.statSync(r,o),(a,{subPath:n})=>a.statSync(n,o))}async fstatPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstat");let[n,u]=a;return n.fstatPromise(u,o)}fstatSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstatSync");let[n,u]=a;return n.fstatSync(u,o)}async lstatPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.lstatPromise(r,o),async(a,{subPath:n})=>await a.lstatPromise(n,o))}lstatSync(r,o){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,o),(a,{subPath:n})=>a.lstatSync(n,o))}async fchmodPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmod");let[n,u]=a;return n.fchmodPromise(u,o)}fchmodSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmodSync");let[n,u]=a;return n.fchmodSync(u,o)}async chmodPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.chmodPromise(r,o),async(a,{subPath:n})=>await a.chmodPromise(n,o))}chmodSync(r,o){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,o),(a,{subPath:n})=>a.chmodSync(n,o))}async fchownPromise(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownPromise(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchown");let[u,A]=n;return u.fchownPromise(A,o,a)}fchownSync(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownSync(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchownSync");let[u,A]=n;return u.fchownSync(A,o,a)}async chownPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.chownPromise(r,o,a),async(n,{subPath:u})=>await n.chownPromise(u,o,a))}chownSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,o,a),(n,{subPath:u})=>n.chownSync(u,o,a))}async renamePromise(r,o){return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.renamePromise(r,o),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(a,{subPath:n})=>await this.makeCallPromise(o,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await a.renamePromise(n,A)}))}renameSync(r,o){return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.renameSync(r,o),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(a,{subPath:n})=>this.makeCallSync(o,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return a.renameSync(n,A)}))}async copyFilePromise(r,o,a=0){let n=async(u,A,p,h)=>{if((a&Gg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&Gg.constants.COPYFILE_EXCL&&await this.existsPromise(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=await u.readFilePromise(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}await p.writeFilePromise(h,E)};return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.copyFilePromise(r,o,a),async(u,{subPath:A})=>await n(this.baseFs,r,u,A)),async(u,{subPath:A})=>await this.makeCallPromise(o,async()=>await n(u,A,this.baseFs,o),async(p,{subPath:h})=>u!==p?await n(u,A,p,h):await u.copyFilePromise(A,h,a)))}copyFileSync(r,o,a=0){let n=(u,A,p,h)=>{if((a&Gg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&Gg.constants.COPYFILE_EXCL&&this.existsSync(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=u.readFileSync(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}p.writeFileSync(h,E)};return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.copyFileSync(r,o,a),(u,{subPath:A})=>n(this.baseFs,r,u,A)),(u,{subPath:A})=>this.makeCallSync(o,()=>n(u,A,this.baseFs,o),(p,{subPath:h})=>u!==p?n(u,A,p,h):u.copyFileSync(A,h,a)))}async appendFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.appendFilePromise(r,o,a),async(n,{subPath:u})=>await n.appendFilePromise(u,o,a))}appendFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.appendFileSync(r,o,a),(n,{subPath:u})=>n.appendFileSync(u,o,a))}async writeFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.writeFilePromise(r,o,a),async(n,{subPath:u})=>await n.writeFilePromise(u,o,a))}writeFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.writeFileSync(r,o,a),(n,{subPath:u})=>n.writeFileSync(u,o,a))}async unlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.unlinkPromise(r),async(o,{subPath:a})=>await o.unlinkPromise(a))}unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(o,{subPath:a})=>o.unlinkSync(a))}async utimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.utimesPromise(r,o,a),async(n,{subPath:u})=>await n.utimesPromise(u,o,a))}utimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(r,o,a),(n,{subPath:u})=>n.utimesSync(u,o,a))}async lutimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.lutimesPromise(r,o,a),async(n,{subPath:u})=>await n.lutimesPromise(u,o,a))}lutimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSync(r,o,a),(n,{subPath:u})=>n.lutimesSync(u,o,a))}async mkdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.mkdirPromise(r,o),async(a,{subPath:n})=>await a.mkdirPromise(n,o))}mkdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,o),(a,{subPath:n})=>a.mkdirSync(n,o))}async rmdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmdirPromise(r,o),async(a,{subPath:n})=>await a.rmdirPromise(n,o))}rmdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,o),(a,{subPath:n})=>a.rmdirSync(n,o))}async linkPromise(r,o){return await this.makeCallPromise(o,async()=>await this.baseFs.linkPromise(r,o),async(a,{subPath:n})=>await a.linkPromise(r,n))}linkSync(r,o){return this.makeCallSync(o,()=>this.baseFs.linkSync(r,o),(a,{subPath:n})=>a.linkSync(r,n))}async symlinkPromise(r,o,a){return await this.makeCallPromise(o,async()=>await this.baseFs.symlinkPromise(r,o,a),async(n,{subPath:u})=>await n.symlinkPromise(r,u))}symlinkSync(r,o,a){return this.makeCallSync(o,()=>this.baseFs.symlinkSync(r,o,a),(n,{subPath:u})=>n.symlinkSync(r,u))}async readFilePromise(r,o){return this.makeCallPromise(r,async()=>await this.baseFs.readFilePromise(r,o),async(a,{subPath:n})=>await a.readFilePromise(n,o))}readFileSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readFileSync(r,o),(a,{subPath:n})=>a.readFileSync(n,o))}async readdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.readdirPromise(r,o),async(a,{subPath:n})=>await a.readdirPromise(n,o),{requireSubpath:!1})}readdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readdirSync(r,o),(a,{subPath:n})=>a.readdirSync(n,o),{requireSubpath:!1})}async readlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.readlinkPromise(r),async(o,{subPath:a})=>await o.readlinkPromise(a))}readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(r),(o,{subPath:a})=>o.readlinkSync(a))}async truncatePromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.truncatePromise(r,o),async(a,{subPath:n})=>await a.truncatePromise(n,o))}truncateSync(r,o){return this.makeCallSync(r,()=>this.baseFs.truncateSync(r,o),(a,{subPath:n})=>a.truncateSync(n,o))}async ftruncatePromise(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncatePromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncate");let[n,u]=a;return n.ftruncatePromise(u,o)}ftruncateSync(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncateSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncateSync");let[n,u]=a;return n.ftruncateSync(u,o)}watch(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,o,a),(n,{subPath:u})=>n.watch(u,o,a))}watchFile(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,o,a),()=>ny(this,r,o,a))}unwatchFile(r,o){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(r,o),()=>Mg(this,r,o))}async makeCallPromise(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return await o();let u=this.resolve(r),A=this.findMount(u);return A?n&&A.subPath==="/"?await o():await this.getMountPromise(A.archivePath,async p=>await a(p,A)):await o()}makeCallSync(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return o();let u=this.resolve(r),A=this.findMount(u);return!A||n&&A.subPath==="/"?o():this.getMountSync(A.archivePath,p=>a(p,A))}findMount(r){if(this.filter&&!this.filter.test(r))return null;let o="";for(;;){let a=r.substring(o.length),n=this.getMountPoint(a,o);if(!n)return null;if(o=this.pathUtils.join(o,n),!this.isMount.has(o)){if(this.notMount.has(o))continue;try{if(this.typeCheck!==null&&(this.baseFs.lstatSync(o).mode&Gg.constants.S_IFMT)!==this.typeCheck){this.notMount.add(o);continue}}catch{return null}this.isMount.add(o)}return{archivePath:o,subPath:this.pathUtils.join(Bt.root,r.substring(o.length))}}}limitOpenFiles(r){if(this.mountInstances===null)return;let o=Date.now(),a=o+this.maxAge,n=r===null?0:this.mountInstances.size-r;for(let[u,{childFs:A,expiresAt:p,refCount:h}]of this.mountInstances.entries())if(!(h!==0||A.hasOpenFileHandles?.())){if(o>=p){A.saveAndClose?.(),this.mountInstances.delete(u),n-=1;continue}else if(r===null||n<=0){a=p;break}A.saveAndClose?.(),this.mountInstances.delete(u),n-=1}this.limitOpenFilesTimeout===null&&(r===null&&this.mountInstances.size>0||r!==null)&&isFinite(a)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},a-o).unref())}async getMountPromise(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);if(!a){let n=await this.factoryPromise(this.baseFs,r);a=this.mountInstances.get(r),a||(a={childFs:n(),expiresAt:0,refCount:0})}this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,a.refCount+=1;try{return await o(a.childFs)}finally{a.refCount-=1}}else{let a=(await this.factoryPromise(this.baseFs,r))();try{return await o(a)}finally{a.saveAndClose?.()}}}getMountSync(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);return a||(a={childFs:this.factorySync(this.baseFs,r),expiresAt:0,refCount:0}),this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,o(a.childFs)}else{let a=this.factorySync(this.baseFs,r);try{return o(a)}finally{a.saveAndClose?.()}}}}});var Zt,WR,Yw,z7=Et(()=>{Hg();Ca();Zt=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),WR=class extends gf{constructor(){super(V)}getExtractHint(){throw Zt()}getRealPath(){throw Zt()}resolve(){throw Zt()}async openPromise(){throw Zt()}openSync(){throw Zt()}async opendirPromise(){throw Zt()}opendirSync(){throw Zt()}async readPromise(){throw Zt()}readSync(){throw Zt()}async writePromise(){throw Zt()}writeSync(){throw Zt()}async closePromise(){throw Zt()}closeSync(){throw Zt()}createWriteStream(){throw Zt()}createReadStream(){throw Zt()}async realpathPromise(){throw Zt()}realpathSync(){throw Zt()}async readdirPromise(){throw Zt()}readdirSync(){throw Zt()}async existsPromise(e){throw Zt()}existsSync(e){throw Zt()}async accessPromise(){throw Zt()}accessSync(){throw Zt()}async statPromise(){throw Zt()}statSync(){throw Zt()}async fstatPromise(e){throw Zt()}fstatSync(e){throw Zt()}async lstatPromise(e){throw Zt()}lstatSync(e){throw Zt()}async fchmodPromise(){throw Zt()}fchmodSync(){throw Zt()}async chmodPromise(){throw Zt()}chmodSync(){throw Zt()}async fchownPromise(){throw Zt()}fchownSync(){throw Zt()}async chownPromise(){throw Zt()}chownSync(){throw Zt()}async mkdirPromise(){throw Zt()}mkdirSync(){throw Zt()}async rmdirPromise(){throw Zt()}rmdirSync(){throw Zt()}async linkPromise(){throw Zt()}linkSync(){throw Zt()}async symlinkPromise(){throw Zt()}symlinkSync(){throw Zt()}async renamePromise(){throw Zt()}renameSync(){throw Zt()}async copyFilePromise(){throw Zt()}copyFileSync(){throw Zt()}async appendFilePromise(){throw Zt()}appendFileSync(){throw Zt()}async writeFilePromise(){throw Zt()}writeFileSync(){throw Zt()}async unlinkPromise(){throw Zt()}unlinkSync(){throw Zt()}async utimesPromise(){throw Zt()}utimesSync(){throw Zt()}async lutimesPromise(){throw Zt()}lutimesSync(){throw Zt()}async readFilePromise(){throw Zt()}readFileSync(){throw Zt()}async readlinkPromise(){throw Zt()}readlinkSync(){throw Zt()}async truncatePromise(){throw Zt()}truncateSync(){throw Zt()}async ftruncatePromise(e,r){throw Zt()}ftruncateSync(e,r){throw Zt()}watch(){throw Zt()}watchFile(){throw Zt()}unwatchFile(){throw Zt()}},Yw=WR;Yw.instance=new WR});var jp,X7=Et(()=>{df();Ca();jp=class extends Ss{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return ue.fromPortablePath(r)}mapToBase(r){return ue.toPortablePath(r)}}});var x_e,KR,k_e,mi,Z7=Et(()=>{jg();df();Ca();x_e=/^[0-9]+$/,KR=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,k_e=/^([^/]+-)?[a-f0-9]+$/,mi=class extends Ss{constructor({baseFs:r=new Tn}={}){super(V);this.baseFs=r}static makeVirtualPath(r,o,a){if(V.basename(r)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!V.basename(o).match(k_e))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let u=V.relative(V.dirname(r),a).split("/"),A=0;for(;A{VR=$e(ve("buffer")),$7=ve("url"),eY=ve("util");df();Ca();xD=class extends Ss{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return r}mapToBase(r){if(typeof r=="string")return r;if(r instanceof URL)return(0,$7.fileURLToPath)(r);if(Buffer.isBuffer(r)){let o=r.toString();if(!Q_e(r,o))throw new Error("Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942");return o}throw new Error(`Unsupported path type: ${(0,eY.inspect)(r)}`)}}});var rY,Bo,mf,Gp,kD,QD,sy,Tc,Nc,F_e,R_e,T_e,N_e,Ww,nY=Et(()=>{rY=ve("readline"),Bo=Symbol("kBaseFs"),mf=Symbol("kFd"),Gp=Symbol("kClosePromise"),kD=Symbol("kCloseResolve"),QD=Symbol("kCloseReject"),sy=Symbol("kRefs"),Tc=Symbol("kRef"),Nc=Symbol("kUnref"),Ww=class{constructor(e,r){this[F_e]=1;this[R_e]=void 0;this[T_e]=void 0;this[N_e]=void 0;this[Bo]=r,this[mf]=e}get fd(){return this[mf]}async appendFile(e,r){try{this[Tc](this.appendFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;return await this[Bo].appendFilePromise(this.fd,e,o?{encoding:o}:void 0)}finally{this[Nc]()}}async chown(e,r){try{return this[Tc](this.chown),await this[Bo].fchownPromise(this.fd,e,r)}finally{this[Nc]()}}async chmod(e){try{return this[Tc](this.chmod),await this[Bo].fchmodPromise(this.fd,e)}finally{this[Nc]()}}createReadStream(e){return this[Bo].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Bo].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error("Method not implemented.")}sync(){throw new Error("Method not implemented.")}async read(e,r,o,a){try{this[Tc](this.read);let n;return Buffer.isBuffer(e)?n=e:(e??={},n=e.buffer??Buffer.alloc(16384),r=e.offset||0,o=e.length??n.byteLength,a=e.position??null),r??=0,o??=0,o===0?{bytesRead:o,buffer:n}:{bytesRead:await this[Bo].readPromise(this.fd,n,r,o,a),buffer:n}}finally{this[Nc]()}}async readFile(e){try{this[Tc](this.readFile);let r=(typeof e=="string"?e:e?.encoding)??void 0;return await this[Bo].readFilePromise(this.fd,r)}finally{this[Nc]()}}readLines(e){return(0,rY.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Tc](this.stat),await this[Bo].fstatPromise(this.fd,e)}finally{this[Nc]()}}async truncate(e){try{return this[Tc](this.truncate),await this[Bo].ftruncatePromise(this.fd,e)}finally{this[Nc]()}}utimes(e,r){throw new Error("Method not implemented.")}async writeFile(e,r){try{this[Tc](this.writeFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;await this[Bo].writeFilePromise(this.fd,e,o)}finally{this[Nc]()}}async write(...e){try{if(this[Tc](this.write),ArrayBuffer.isView(e[0])){let[r,o,a,n]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o??void 0,a??void 0,n??void 0),buffer:r}}else{let[r,o,a]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o,a),buffer:r}}}finally{this[Nc]()}}async writev(e,r){try{this[Tc](this.writev);let o=0;if(typeof r<"u")for(let a of e){let n=await this.write(a,void 0,void 0,r);o+=n.bytesWritten,r+=n.bytesWritten}else for(let a of e){let n=await this.write(a);o+=n.bytesWritten}return{buffers:e,bytesWritten:o}}finally{this[Nc]()}}readv(e,r){throw new Error("Method not implemented.")}close(){if(this[mf]===-1)return Promise.resolve();if(this[Gp])return this[Gp];if(this[sy]--,this[sy]===0){let e=this[mf];this[mf]=-1,this[Gp]=this[Bo].closePromise(e).finally(()=>{this[Gp]=void 0})}else this[Gp]=new Promise((e,r)=>{this[kD]=e,this[QD]=r}).finally(()=>{this[Gp]=void 0,this[QD]=void 0,this[kD]=void 0});return this[Gp]}[(Bo,mf,F_e=sy,R_e=Gp,T_e=kD,N_e=QD,Tc)](e){if(this[mf]===-1){let r=new Error("file closed");throw r.code="EBADF",r.syscall=e.name,r}this[sy]++}[Nc](){if(this[sy]--,this[sy]===0){let e=this[mf];this[mf]=-1,this[Bo].closePromise(e).then(this[kD],this[QD])}}}});function Kw(t,e){e=new xD(e);let r=(o,a,n)=>{let u=o[a];o[a]=n,typeof u?.[oy.promisify.custom]<"u"&&(n[oy.promisify.custom]=u[oy.promisify.custom])};{r(t,"exists",(o,...a)=>{let u=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{e.existsPromise(o).then(A=>{u(A)},()=>{u(!1)})})}),r(t,"read",(...o)=>{let[a,n,u,A,p,h]=o;if(o.length<=3){let E={};o.length<3?h=o[1]:(E=o[1],h=o[2]),{buffer:n=Buffer.alloc(16384),offset:u=0,length:A=n.byteLength,position:p}=E}if(u==null&&(u=0),A|=0,A===0){process.nextTick(()=>{h(null,0,n)});return}p==null&&(p=-1),process.nextTick(()=>{e.readPromise(a,n,u,A,p).then(E=>{h(null,E,n)},E=>{h(E,0,n)})})});for(let o of iY){let a=o.replace(/Promise$/,"");if(typeof t[a]>"u")continue;let n=e[o];if(typeof n>"u")continue;r(t,a,(...A)=>{let h=typeof A[A.length-1]=="function"?A.pop():()=>{};process.nextTick(()=>{n.apply(e,A).then(E=>{h(null,E)},E=>{h(E)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",o=>{try{return e.existsSync(o)}catch{return!1}}),r(t,"readSync",(...o)=>{let[a,n,u,A,p]=o;return o.length<=3&&({offset:u=0,length:A=n.byteLength,position:p}=o[2]||{}),u==null&&(u=0),A|=0,A===0?0:(p==null&&(p=-1),e.readSync(a,n,u,A,p))});for(let o of L_e){let a=o;if(typeof t[a]>"u")continue;let n=e[o];typeof n>"u"||r(t,a,n.bind(e))}t.realpathSync.native=t.realpathSync}{let o=t.promises;for(let a of iY){let n=a.replace(/Promise$/,"");if(typeof o[n]>"u")continue;let u=e[a];typeof u>"u"||a!=="open"&&r(o,n,(A,...p)=>A instanceof Ww?A[n].apply(A,p):u.call(e,A,...p))}r(o,"open",async(...a)=>{let n=await e.openPromise(...a);return new Ww(n,e)})}t.read[oy.promisify.custom]=async(o,a,...n)=>({bytesRead:await e.readPromise(o,a,...n),buffer:a}),t.write[oy.promisify.custom]=async(o,a,...n)=>({bytesWritten:await e.writePromise(o,a,...n),buffer:a})}function FD(t,e){let r=Object.create(t);return Kw(r,e),r}var oy,L_e,iY,sY=Et(()=>{oy=ve("util");tY();nY();L_e=new Set(["accessSync","appendFileSync","createReadStream","createWriteStream","chmodSync","fchmodSync","chownSync","fchownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","statSync","symlinkSync","truncateSync","ftruncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),iY=new Set(["accessPromise","appendFilePromise","fchmodPromise","chmodPromise","fchownPromise","chownPromise","closePromise","copyFilePromise","linkPromise","fstatPromise","lstatPromise","lutimesPromise","mkdirPromise","openPromise","opendirPromise","readdirPromise","realpathPromise","readFilePromise","readdirPromise","readlinkPromise","renamePromise","rmdirPromise","statPromise","symlinkPromise","truncatePromise","ftruncatePromise","unlinkPromise","utimesPromise","writeFilePromise","writeSync"])});function oY(t){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return`${t}${e}`}function aY(){if(JR)return JR;let t=ue.toPortablePath(lY.default.tmpdir()),e=oe.realpathSync(t);return process.once("exit",()=>{oe.rmtempSync()}),JR={tmpdir:t,realTmpdir:e}}var lY,Lc,JR,oe,cY=Et(()=>{lY=$e(ve("os"));jg();Ca();Lc=new Set,JR=null;oe=Object.assign(new Tn,{detachTemp(t){Lc.delete(t)},mktempSync(t){let{tmpdir:e,realTmpdir:r}=aY();for(;;){let o=oY("xfs-");try{this.mkdirSync(V.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=V.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{this.removeSync(a)}catch{}}}}},async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=aY();for(;;){let o=oY("xfs-");try{await this.mkdirPromise(V.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=V.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return await t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{await this.removePromise(a)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Lc.values()).map(async t=>{try{await oe.removePromise(t,{maxRetries:0}),Lc.delete(t)}catch{}}))},rmtempSync(){for(let t of Lc)try{oe.removeSync(t),Lc.delete(t)}catch{}}})});var Vw={};Vt(Vw,{AliasFS:()=>Uu,BasePortableFakeFS:()=>Mu,CustomDir:()=>qw,CwdFS:()=>gn,FakeFS:()=>gf,Filename:()=>dr,JailFS:()=>_u,LazyFS:()=>iy,MountFS:()=>Hp,NoFS:()=>Yw,NodeFS:()=>Tn,PortablePath:()=>Bt,PosixFS:()=>jp,ProxiedFS:()=>Ss,VirtualFS:()=>mi,constants:()=>vi,errors:()=>ar,extendFs:()=>FD,normalizeLineEndings:()=>_g,npath:()=>ue,opendir:()=>PD,patchFs:()=>Kw,ppath:()=>V,setupCopyIndex:()=>SD,statUtils:()=>Ea,unwatchAllFiles:()=>Ug,unwatchFile:()=>Mg,watchFile:()=>ny,xfs:()=>oe});var St=Et(()=>{k7();BD();HR();qR();L7();YR();Hg();Ca();Ca();j7();Hg();Y7();K7();V7();J7();z7();jg();X7();df();Z7();sY();cY()});var hY=_((obt,pY)=>{pY.exports=fY;fY.sync=M_e;var uY=ve("fs");function O_e(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var o=0;o{yY.exports=dY;dY.sync=U_e;var gY=ve("fs");function dY(t,e,r){gY.stat(t,function(o,a){r(o,o?!1:mY(a,e))})}function U_e(t,e){return mY(gY.statSync(t),e)}function mY(t,e){return t.isFile()&&__e(t,e)}function __e(t,e){var r=t.mode,o=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),u=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),A=parseInt("100",8),p=parseInt("010",8),h=parseInt("001",8),E=A|p,I=r&h||r&p&&a===u||r&A&&o===n||r&E&&n===0;return I}});var wY=_((cbt,CY)=>{var lbt=ve("fs"),RD;process.platform==="win32"||global.TESTING_WINDOWS?RD=hY():RD=EY();CY.exports=zR;zR.sync=H_e;function zR(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(o,a){zR(t,e||{},function(n,u){n?a(n):o(u)})})}RD(t,e||{},function(o,a){o&&(o.code==="EACCES"||e&&e.ignoreErrors)&&(o=null,a=!1),r(o,a)})}function H_e(t,e){try{return RD.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var bY=_((ubt,PY)=>{var ay=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",IY=ve("path"),j_e=ay?";":":",BY=wY(),vY=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),DY=(t,e)=>{let r=e.colon||j_e,o=t.match(/\//)||ay&&t.match(/\\/)?[""]:[...ay?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],a=ay?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",n=ay?a.split(r):[""];return ay&&t.indexOf(".")!==-1&&n[0]!==""&&n.unshift(""),{pathEnv:o,pathExt:n,pathExtExe:a}},SY=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:o,pathExt:a,pathExtExe:n}=DY(t,e),u=[],A=h=>new Promise((E,I)=>{if(h===o.length)return e.all&&u.length?E(u):I(vY(t));let v=o[h],x=/^".*"$/.test(v)?v.slice(1,-1):v,C=IY.join(x,t),R=!x&&/^\.[\\\/]/.test(t)?t.slice(0,2)+C:C;E(p(R,h,0))}),p=(h,E,I)=>new Promise((v,x)=>{if(I===a.length)return v(A(E+1));let C=a[I];BY(h+C,{pathExt:n},(R,L)=>{if(!R&&L)if(e.all)u.push(h+C);else return v(h+C);return v(p(h,E,I+1))})});return r?A(0).then(h=>r(null,h),r):A(0)},G_e=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:o,pathExtExe:a}=DY(t,e),n=[];for(let u=0;u{"use strict";var xY=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(o=>o.toUpperCase()==="PATH")||"Path"};XR.exports=xY;XR.exports.default=xY});var TY=_((fbt,RY)=>{"use strict";var QY=ve("path"),q_e=bY(),Y_e=kY();function FY(t,e){let r=t.options.env||process.env,o=process.cwd(),a=t.options.cwd!=null,n=a&&process.chdir!==void 0&&!process.chdir.disabled;if(n)try{process.chdir(t.options.cwd)}catch{}let u;try{u=q_e.sync(t.command,{path:r[Y_e({env:r})],pathExt:e?QY.delimiter:void 0})}catch{}finally{n&&process.chdir(o)}return u&&(u=QY.resolve(a?t.options.cwd:"",u)),u}function W_e(t){return FY(t)||FY(t,!0)}RY.exports=W_e});var NY=_((pbt,$R)=>{"use strict";var ZR=/([()\][%!^"`<>&|;, *?])/g;function K_e(t){return t=t.replace(ZR,"^$1"),t}function V_e(t,e){return t=`${t}`,t=t.replace(/(\\*)"/g,'$1$1\\"'),t=t.replace(/(\\*)$/,"$1$1"),t=`"${t}"`,t=t.replace(ZR,"^$1"),e&&(t=t.replace(ZR,"^$1")),t}$R.exports.command=K_e;$R.exports.argument=V_e});var OY=_((hbt,LY)=>{"use strict";LY.exports=/^#!(.*)/});var UY=_((gbt,MY)=>{"use strict";var J_e=OY();MY.exports=(t="")=>{let e=t.match(J_e);if(!e)return null;let[r,o]=e[0].replace(/#! ?/,"").split(" "),a=r.split("/").pop();return a==="env"?o:o?`${a} ${o}`:a}});var HY=_((dbt,_Y)=>{"use strict";var eT=ve("fs"),z_e=UY();function X_e(t){let r=Buffer.alloc(150),o;try{o=eT.openSync(t,"r"),eT.readSync(o,r,0,150,0),eT.closeSync(o)}catch{}return z_e(r.toString())}_Y.exports=X_e});var YY=_((mbt,qY)=>{"use strict";var Z_e=ve("path"),jY=TY(),GY=NY(),$_e=HY(),e8e=process.platform==="win32",t8e=/\.(?:com|exe)$/i,r8e=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function n8e(t){t.file=jY(t);let e=t.file&&$_e(t.file);return e?(t.args.unshift(t.file),t.command=e,jY(t)):t.file}function i8e(t){if(!e8e)return t;let e=n8e(t),r=!t8e.test(e);if(t.options.forceShell||r){let o=r8e.test(e);t.command=Z_e.normalize(t.command),t.command=GY.command(t.command),t.args=t.args.map(n=>GY.argument(n,o));let a=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${a}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}function s8e(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let o={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?o:i8e(o)}qY.exports=s8e});var VY=_((ybt,KY)=>{"use strict";var tT=process.platform==="win32";function rT(t,e){return Object.assign(new Error(`${e} ${t.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${t.command}`,path:t.command,spawnargs:t.args})}function o8e(t,e){if(!tT)return;let r=t.emit;t.emit=function(o,a){if(o==="exit"){let n=WY(a,e,"spawn");if(n)return r.call(t,"error",n)}return r.apply(t,arguments)}}function WY(t,e){return tT&&t===1&&!e.file?rT(e.original,"spawn"):null}function a8e(t,e){return tT&&t===1&&!e.file?rT(e.original,"spawnSync"):null}KY.exports={hookChildProcess:o8e,verifyENOENT:WY,verifyENOENTSync:a8e,notFoundError:rT}});var sT=_((Ebt,ly)=>{"use strict";var JY=ve("child_process"),nT=YY(),iT=VY();function zY(t,e,r){let o=nT(t,e,r),a=JY.spawn(o.command,o.args,o.options);return iT.hookChildProcess(a,o),a}function l8e(t,e,r){let o=nT(t,e,r),a=JY.spawnSync(o.command,o.args,o.options);return a.error=a.error||iT.verifyENOENTSync(a.status,o),a}ly.exports=zY;ly.exports.spawn=zY;ly.exports.sync=l8e;ly.exports._parse=nT;ly.exports._enoent=iT});var ZY=_((Cbt,XY)=>{"use strict";function c8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function qg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,qg)}c8e(qg,Error);qg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I>",P=Br(">>",!1),y=">&",F=Br(">&",!1),z=">",X=Br(">",!1),Z="<<<",ie=Br("<<<",!1),Pe="<&",Ne=Br("<&",!1),ot="<",dt=Br("<",!1),Gt=function(N){return{type:"argument",segments:[].concat(...N)}},$t=function(N){return N},bt="$'",an=Br("$'",!1),Qr="'",mr=Br("'",!1),br=function(N){return[{type:"text",text:N}]},Wr='""',Kn=Br('""',!1),Ns=function(){return{type:"text",text:""}},Ti='"',ps=Br('"',!1),io=function(N){return N},Pi=function(N){return{type:"arithmetic",arithmetic:N,quoted:!0}},Ls=function(N){return{type:"shell",shell:N,quoted:!0}},so=function(N){return{type:"variable",...N,quoted:!0}},cc=function(N){return{type:"text",text:N}},cu=function(N){return{type:"arithmetic",arithmetic:N,quoted:!1}},lp=function(N){return{type:"shell",shell:N,quoted:!1}},cp=function(N){return{type:"variable",...N,quoted:!1}},Os=function(N){return{type:"glob",pattern:N}},Dn=/^[^']/,oo=Cs(["'"],!0,!1),Ms=function(N){return N.join("")},ml=/^[^$"]/,yl=Cs(["$",'"'],!0,!1),ao=`\\ +`,Vn=Br(`\\ +`,!1),On=function(){return""},Ni="\\",Mn=Br("\\",!1),_i=/^[\\$"`]/,tr=Cs(["\\","$",'"',"`"],!1,!1),Oe=function(N){return N},ii="\\a",Ma=Br("\\a",!1),hr=function(){return"a"},uc="\\b",uu=Br("\\b",!1),Ac=function(){return"\b"},El=/^[Ee]/,DA=Cs(["E","e"],!1,!1),Au=function(){return"\x1B"},Ce="\\f",Rt=Br("\\f",!1),fc=function(){return"\f"},Hi="\\n",fu=Br("\\n",!1),Yt=function(){return` +`},Cl="\\r",SA=Br("\\r",!1),up=function(){return"\r"},pc="\\t",PA=Br("\\t",!1),Qn=function(){return" "},hi="\\v",hc=Br("\\v",!1),bA=function(){return"\v"},sa=/^[\\'"?]/,Li=Cs(["\\","'",'"',"?"],!1,!1),_o=function(N){return String.fromCharCode(parseInt(N,16))},Ze="\\x",lo=Br("\\x",!1),gc="\\u",pu=Br("\\u",!1),ji="\\U",hu=Br("\\U",!1),xA=function(N){return String.fromCodePoint(parseInt(N,16))},Ua=/^[0-7]/,dc=Cs([["0","7"]],!1,!1),hs=/^[0-9a-fA-f]/,_t=Cs([["0","9"],["a","f"],["A","f"]],!1,!1),Fn=ug(),Ci="{}",oa=Br("{}",!1),co=function(){return"{}"},Us="-",aa=Br("-",!1),la="+",Ho=Br("+",!1),wi=".",gs=Br(".",!1),ds=function(N,K,re){return{type:"number",value:(N==="-"?-1:1)*parseFloat(K.join("")+"."+re.join(""))}},ms=function(N,K){return{type:"number",value:(N==="-"?-1:1)*parseInt(K.join(""))}},_s=function(N){return{type:"variable",...N}},Un=function(N){return{type:"variable",name:N}},Sn=function(N){return N},ys="*",We=Br("*",!1),tt="/",It=Br("/",!1),nr=function(N,K,re){return{type:K==="*"?"multiplication":"division",right:re}},$=function(N,K){return K.reduce((re,pe)=>({left:re,...pe}),N)},ye=function(N,K,re){return{type:K==="+"?"addition":"subtraction",right:re}},Le="$((",pt=Br("$((",!1),ht="))",Tt=Br("))",!1),er=function(N){return N},$r="$(",Gi=Br("$(",!1),es=function(N){return N},bi="${",jo=Br("${",!1),kA=":-",QA=Br(":-",!1),Ap=function(N,K){return{name:N,defaultValue:K}},ig=":-}",gu=Br(":-}",!1),sg=function(N){return{name:N,defaultValue:[]}},du=":+",uo=Br(":+",!1),FA=function(N,K){return{name:N,alternativeValue:K}},mc=":+}",ca=Br(":+}",!1),og=function(N){return{name:N,alternativeValue:[]}},yc=function(N){return{name:N}},Pm="$",ag=Br("$",!1),$n=function(N){return e.isGlobPattern(N)},fp=function(N){return N},lg=/^[a-zA-Z0-9_]/,RA=Cs([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Hs=function(){return cg()},mu=/^[$@*?#a-zA-Z0-9_\-]/,Ha=Cs(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),qi=/^[()}<>$|&; \t"']/,ua=Cs(["(",")","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),yu=/^[<>&; \t"']/,Es=Cs(["<",">","&",";"," "," ",'"',"'"],!1,!1),Ec=/^[ \t]/,Cc=Cs([" "," "],!1,!1),q=0,Dt=0,wl=[{line:1,column:1}],xi=0,wc=[],ct=0,Eu;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function cg(){return t.substring(Dt,q)}function yw(){return Ic(Dt,q)}function TA(N,K){throw K=K!==void 0?K:Ic(Dt,q),pg([fg(N)],t.substring(Dt,q),K)}function pp(N,K){throw K=K!==void 0?K:Ic(Dt,q),bm(N,K)}function Br(N,K){return{type:"literal",text:N,ignoreCase:K}}function Cs(N,K,re){return{type:"class",parts:N,inverted:K,ignoreCase:re}}function ug(){return{type:"any"}}function Ag(){return{type:"end"}}function fg(N){return{type:"other",description:N}}function hp(N){var K=wl[N],re;if(K)return K;for(re=N-1;!wl[re];)re--;for(K=wl[re],K={line:K.line,column:K.column};rexi&&(xi=q,wc=[]),wc.push(N))}function bm(N,K){return new qg(N,null,null,K)}function pg(N,K,re){return new qg(qg.buildMessage(N,K),N,K,re)}function hg(){var N,K,re;for(N=q,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(re=Cu(),re===r&&(re=null),re!==r?(Dt=N,K=n(re),N=K):(q=N,N=r)):(q=N,N=r),N}function Cu(){var N,K,re,pe,ze;if(N=q,K=wu(),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();re!==r?(pe=gg(),pe!==r?(ze=xm(),ze===r&&(ze=null),ze!==r?(Dt=N,K=u(K,pe,ze),N=K):(q=N,N=r)):(q=N,N=r)):(q=N,N=r)}else q=N,N=r;if(N===r)if(N=q,K=wu(),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();re!==r?(pe=gg(),pe===r&&(pe=null),pe!==r?(Dt=N,K=A(K,pe),N=K):(q=N,N=r)):(q=N,N=r)}else q=N,N=r;return N}function xm(){var N,K,re,pe,ze;for(N=q,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=Cu(),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();pe!==r?(Dt=N,K=p(re),N=K):(q=N,N=r)}else q=N,N=r;else q=N,N=r;return N}function gg(){var N;return t.charCodeAt(q)===59?(N=h,q++):(N=r,ct===0&&Ct(E)),N===r&&(t.charCodeAt(q)===38?(N=I,q++):(N=r,ct===0&&Ct(v))),N}function wu(){var N,K,re;return N=q,K=Aa(),K!==r?(re=Ew(),re===r&&(re=null),re!==r?(Dt=N,K=x(K,re),N=K):(q=N,N=r)):(q=N,N=r),N}function Ew(){var N,K,re,pe,ze,mt,fr;for(N=q,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=km(),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r)if(ze=wu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,K=C(re,ze),N=K):(q=N,N=r)}else q=N,N=r;else q=N,N=r}else q=N,N=r;else q=N,N=r;return N}function km(){var N;return t.substr(q,2)===R?(N=R,q+=2):(N=r,ct===0&&Ct(L)),N===r&&(t.substr(q,2)===U?(N=U,q+=2):(N=r,ct===0&&Ct(J))),N}function Aa(){var N,K,re;return N=q,K=dg(),K!==r?(re=Bc(),re===r&&(re=null),re!==r?(Dt=N,K=te(K,re),N=K):(q=N,N=r)):(q=N,N=r),N}function Bc(){var N,K,re,pe,ze,mt,fr;for(N=q,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(re=Il(),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r)if(ze=Aa(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,K=ae(re,ze),N=K):(q=N,N=r)}else q=N,N=r;else q=N,N=r}else q=N,N=r;else q=N,N=r;return N}function Il(){var N;return t.substr(q,2)===fe?(N=fe,q+=2):(N=r,ct===0&&Ct(ce)),N===r&&(t.charCodeAt(q)===124?(N=me,q++):(N=r,ct===0&&Ct(he))),N}function Iu(){var N,K,re,pe,ze,mt;if(N=q,K=Cg(),K!==r)if(t.charCodeAt(q)===61?(re=Be,q++):(re=r,ct===0&&Ct(we)),re!==r)if(pe=Go(),pe!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(Dt=N,K=g(K,pe),N=K):(q=N,N=r)}else q=N,N=r;else q=N,N=r;else q=N,N=r;if(N===r)if(N=q,K=Cg(),K!==r)if(t.charCodeAt(q)===61?(re=Be,q++):(re=r,ct===0&&Ct(we)),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();pe!==r?(Dt=N,K=Ee(K),N=K):(q=N,N=r)}else q=N,N=r;else q=N,N=r;return N}function dg(){var N,K,re,pe,ze,mt,fr,Cr,yn,oi,Oi;for(N=q,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(t.charCodeAt(q)===40?(re=Se,q++):(re=r,ct===0&&Ct(le)),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(q)===41?(fr=ne,q++):(fr=r,ct===0&&Ct(ee)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=ja();oi!==r;)yn.push(oi),oi=ja();if(yn!==r){for(oi=[],Oi=Qt();Oi!==r;)oi.push(Oi),Oi=Qt();oi!==r?(Dt=N,K=Ie(ze,yn),N=K):(q=N,N=r)}else q=N,N=r}else q=N,N=r}else q=N,N=r;else q=N,N=r}else q=N,N=r;else q=N,N=r}else q=N,N=r;else q=N,N=r;if(N===r){for(N=q,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r)if(t.charCodeAt(q)===123?(re=Fe,q++):(re=r,ct===0&&Ct(At)),re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(q)===125?(fr=H,q++):(fr=r,ct===0&&Ct(at)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=ja();oi!==r;)yn.push(oi),oi=ja();if(yn!==r){for(oi=[],Oi=Qt();Oi!==r;)oi.push(Oi),Oi=Qt();oi!==r?(Dt=N,K=Re(ze,yn),N=K):(q=N,N=r)}else q=N,N=r}else q=N,N=r}else q=N,N=r;else q=N,N=r}else q=N,N=r;else q=N,N=r}else q=N,N=r;else q=N,N=r;if(N===r){for(N=q,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){for(re=[],pe=Iu();pe!==r;)re.push(pe),pe=Iu();if(re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();if(pe!==r){if(ze=[],mt=gp(),mt!==r)for(;mt!==r;)ze.push(mt),mt=gp();else ze=r;if(ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,K=ke(re,ze),N=K):(q=N,N=r)}else q=N,N=r}else q=N,N=r}else q=N,N=r}else q=N,N=r;if(N===r){for(N=q,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){if(re=[],pe=Iu(),pe!==r)for(;pe!==r;)re.push(pe),pe=Iu();else re=r;if(re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();pe!==r?(Dt=N,K=xe(re),N=K):(q=N,N=r)}else q=N,N=r}else q=N,N=r}}}return N}function NA(){var N,K,re,pe,ze;for(N=q,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r){if(re=[],pe=dp(),pe!==r)for(;pe!==r;)re.push(pe),pe=dp();else re=r;if(re!==r){for(pe=[],ze=Qt();ze!==r;)pe.push(ze),ze=Qt();pe!==r?(Dt=N,K=He(re),N=K):(q=N,N=r)}else q=N,N=r}else q=N,N=r;return N}function gp(){var N,K,re;for(N=q,K=[],re=Qt();re!==r;)K.push(re),re=Qt();if(K!==r?(re=ja(),re!==r?(Dt=N,K=Te(re),N=K):(q=N,N=r)):(q=N,N=r),N===r){for(N=q,K=[],re=Qt();re!==r;)K.push(re),re=Qt();K!==r?(re=dp(),re!==r?(Dt=N,K=Te(re),N=K):(q=N,N=r)):(q=N,N=r)}return N}function ja(){var N,K,re,pe,ze;for(N=q,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(Je.test(t.charAt(q))?(re=t.charAt(q),q++):(re=r,ct===0&&Ct(je)),re===r&&(re=null),re!==r?(pe=mg(),pe!==r?(ze=dp(),ze!==r?(Dt=N,K=b(re,pe,ze),N=K):(q=N,N=r)):(q=N,N=r)):(q=N,N=r)):(q=N,N=r),N}function mg(){var N;return t.substr(q,2)===w?(N=w,q+=2):(N=r,ct===0&&Ct(P)),N===r&&(t.substr(q,2)===y?(N=y,q+=2):(N=r,ct===0&&Ct(F)),N===r&&(t.charCodeAt(q)===62?(N=z,q++):(N=r,ct===0&&Ct(X)),N===r&&(t.substr(q,3)===Z?(N=Z,q+=3):(N=r,ct===0&&Ct(ie)),N===r&&(t.substr(q,2)===Pe?(N=Pe,q+=2):(N=r,ct===0&&Ct(Ne)),N===r&&(t.charCodeAt(q)===60?(N=ot,q++):(N=r,ct===0&&Ct(dt))))))),N}function dp(){var N,K,re;for(N=q,K=[],re=Qt();re!==r;)K.push(re),re=Qt();return K!==r?(re=Go(),re!==r?(Dt=N,K=Te(re),N=K):(q=N,N=r)):(q=N,N=r),N}function Go(){var N,K,re;if(N=q,K=[],re=ws(),re!==r)for(;re!==r;)K.push(re),re=ws();else K=r;return K!==r&&(Dt=N,K=Gt(K)),N=K,N}function ws(){var N,K;return N=q,K=Ii(),K!==r&&(Dt=N,K=$t(K)),N=K,N===r&&(N=q,K=Qm(),K!==r&&(Dt=N,K=$t(K)),N=K,N===r&&(N=q,K=Fm(),K!==r&&(Dt=N,K=$t(K)),N=K,N===r&&(N=q,K=qo(),K!==r&&(Dt=N,K=$t(K)),N=K))),N}function Ii(){var N,K,re,pe;return N=q,t.substr(q,2)===bt?(K=bt,q+=2):(K=r,ct===0&&Ct(an)),K!==r?(re=ln(),re!==r?(t.charCodeAt(q)===39?(pe=Qr,q++):(pe=r,ct===0&&Ct(mr)),pe!==r?(Dt=N,K=br(re),N=K):(q=N,N=r)):(q=N,N=r)):(q=N,N=r),N}function Qm(){var N,K,re,pe;return N=q,t.charCodeAt(q)===39?(K=Qr,q++):(K=r,ct===0&&Ct(mr)),K!==r?(re=yp(),re!==r?(t.charCodeAt(q)===39?(pe=Qr,q++):(pe=r,ct===0&&Ct(mr)),pe!==r?(Dt=N,K=br(re),N=K):(q=N,N=r)):(q=N,N=r)):(q=N,N=r),N}function Fm(){var N,K,re,pe;if(N=q,t.substr(q,2)===Wr?(K=Wr,q+=2):(K=r,ct===0&&Ct(Kn)),K!==r&&(Dt=N,K=Ns()),N=K,N===r)if(N=q,t.charCodeAt(q)===34?(K=Ti,q++):(K=r,ct===0&&Ct(ps)),K!==r){for(re=[],pe=LA();pe!==r;)re.push(pe),pe=LA();re!==r?(t.charCodeAt(q)===34?(pe=Ti,q++):(pe=r,ct===0&&Ct(ps)),pe!==r?(Dt=N,K=io(re),N=K):(q=N,N=r)):(q=N,N=r)}else q=N,N=r;return N}function qo(){var N,K,re;if(N=q,K=[],re=mp(),re!==r)for(;re!==r;)K.push(re),re=mp();else K=r;return K!==r&&(Dt=N,K=io(K)),N=K,N}function LA(){var N,K;return N=q,K=qr(),K!==r&&(Dt=N,K=Pi(K)),N=K,N===r&&(N=q,K=Ep(),K!==r&&(Dt=N,K=Ls(K)),N=K,N===r&&(N=q,K=Dc(),K!==r&&(Dt=N,K=so(K)),N=K,N===r&&(N=q,K=yg(),K!==r&&(Dt=N,K=cc(K)),N=K))),N}function mp(){var N,K;return N=q,K=qr(),K!==r&&(Dt=N,K=cu(K)),N=K,N===r&&(N=q,K=Ep(),K!==r&&(Dt=N,K=lp(K)),N=K,N===r&&(N=q,K=Dc(),K!==r&&(Dt=N,K=cp(K)),N=K,N===r&&(N=q,K=Cw(),K!==r&&(Dt=N,K=Os(K)),N=K,N===r&&(N=q,K=pa(),K!==r&&(Dt=N,K=cc(K)),N=K)))),N}function yp(){var N,K,re;for(N=q,K=[],Dn.test(t.charAt(q))?(re=t.charAt(q),q++):(re=r,ct===0&&Ct(oo));re!==r;)K.push(re),Dn.test(t.charAt(q))?(re=t.charAt(q),q++):(re=r,ct===0&&Ct(oo));return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function yg(){var N,K,re;if(N=q,K=[],re=fa(),re===r&&(ml.test(t.charAt(q))?(re=t.charAt(q),q++):(re=r,ct===0&&Ct(yl))),re!==r)for(;re!==r;)K.push(re),re=fa(),re===r&&(ml.test(t.charAt(q))?(re=t.charAt(q),q++):(re=r,ct===0&&Ct(yl)));else K=r;return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function fa(){var N,K,re;return N=q,t.substr(q,2)===ao?(K=ao,q+=2):(K=r,ct===0&&Ct(Vn)),K!==r&&(Dt=N,K=On()),N=K,N===r&&(N=q,t.charCodeAt(q)===92?(K=Ni,q++):(K=r,ct===0&&Ct(Mn)),K!==r?(_i.test(t.charAt(q))?(re=t.charAt(q),q++):(re=r,ct===0&&Ct(tr)),re!==r?(Dt=N,K=Oe(re),N=K):(q=N,N=r)):(q=N,N=r)),N}function ln(){var N,K,re;for(N=q,K=[],re=Ao(),re===r&&(Dn.test(t.charAt(q))?(re=t.charAt(q),q++):(re=r,ct===0&&Ct(oo)));re!==r;)K.push(re),re=Ao(),re===r&&(Dn.test(t.charAt(q))?(re=t.charAt(q),q++):(re=r,ct===0&&Ct(oo)));return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function Ao(){var N,K,re;return N=q,t.substr(q,2)===ii?(K=ii,q+=2):(K=r,ct===0&&Ct(Ma)),K!==r&&(Dt=N,K=hr()),N=K,N===r&&(N=q,t.substr(q,2)===uc?(K=uc,q+=2):(K=r,ct===0&&Ct(uu)),K!==r&&(Dt=N,K=Ac()),N=K,N===r&&(N=q,t.charCodeAt(q)===92?(K=Ni,q++):(K=r,ct===0&&Ct(Mn)),K!==r?(El.test(t.charAt(q))?(re=t.charAt(q),q++):(re=r,ct===0&&Ct(DA)),re!==r?(Dt=N,K=Au(),N=K):(q=N,N=r)):(q=N,N=r),N===r&&(N=q,t.substr(q,2)===Ce?(K=Ce,q+=2):(K=r,ct===0&&Ct(Rt)),K!==r&&(Dt=N,K=fc()),N=K,N===r&&(N=q,t.substr(q,2)===Hi?(K=Hi,q+=2):(K=r,ct===0&&Ct(fu)),K!==r&&(Dt=N,K=Yt()),N=K,N===r&&(N=q,t.substr(q,2)===Cl?(K=Cl,q+=2):(K=r,ct===0&&Ct(SA)),K!==r&&(Dt=N,K=up()),N=K,N===r&&(N=q,t.substr(q,2)===pc?(K=pc,q+=2):(K=r,ct===0&&Ct(PA)),K!==r&&(Dt=N,K=Qn()),N=K,N===r&&(N=q,t.substr(q,2)===hi?(K=hi,q+=2):(K=r,ct===0&&Ct(hc)),K!==r&&(Dt=N,K=bA()),N=K,N===r&&(N=q,t.charCodeAt(q)===92?(K=Ni,q++):(K=r,ct===0&&Ct(Mn)),K!==r?(sa.test(t.charAt(q))?(re=t.charAt(q),q++):(re=r,ct===0&&Ct(Li)),re!==r?(Dt=N,K=Oe(re),N=K):(q=N,N=r)):(q=N,N=r),N===r&&(N=OA()))))))))),N}function OA(){var N,K,re,pe,ze,mt,fr,Cr,yn,oi,Oi,Ig;return N=q,t.charCodeAt(q)===92?(K=Ni,q++):(K=r,ct===0&&Ct(Mn)),K!==r?(re=Ga(),re!==r?(Dt=N,K=_o(re),N=K):(q=N,N=r)):(q=N,N=r),N===r&&(N=q,t.substr(q,2)===Ze?(K=Ze,q+=2):(K=r,ct===0&&Ct(lo)),K!==r?(re=q,pe=q,ze=Ga(),ze!==r?(mt=si(),mt!==r?(ze=[ze,mt],pe=ze):(q=pe,pe=r)):(q=pe,pe=r),pe===r&&(pe=Ga()),pe!==r?re=t.substring(re,q):re=pe,re!==r?(Dt=N,K=_o(re),N=K):(q=N,N=r)):(q=N,N=r),N===r&&(N=q,t.substr(q,2)===gc?(K=gc,q+=2):(K=r,ct===0&&Ct(pu)),K!==r?(re=q,pe=q,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(ze=[ze,mt,fr,Cr],pe=ze):(q=pe,pe=r)):(q=pe,pe=r)):(q=pe,pe=r)):(q=pe,pe=r),pe!==r?re=t.substring(re,q):re=pe,re!==r?(Dt=N,K=_o(re),N=K):(q=N,N=r)):(q=N,N=r),N===r&&(N=q,t.substr(q,2)===ji?(K=ji,q+=2):(K=r,ct===0&&Ct(hu)),K!==r?(re=q,pe=q,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(yn=si(),yn!==r?(oi=si(),oi!==r?(Oi=si(),Oi!==r?(Ig=si(),Ig!==r?(ze=[ze,mt,fr,Cr,yn,oi,Oi,Ig],pe=ze):(q=pe,pe=r)):(q=pe,pe=r)):(q=pe,pe=r)):(q=pe,pe=r)):(q=pe,pe=r)):(q=pe,pe=r)):(q=pe,pe=r)):(q=pe,pe=r),pe!==r?re=t.substring(re,q):re=pe,re!==r?(Dt=N,K=xA(re),N=K):(q=N,N=r)):(q=N,N=r)))),N}function Ga(){var N;return Ua.test(t.charAt(q))?(N=t.charAt(q),q++):(N=r,ct===0&&Ct(dc)),N}function si(){var N;return hs.test(t.charAt(q))?(N=t.charAt(q),q++):(N=r,ct===0&&Ct(_t)),N}function pa(){var N,K,re,pe,ze;if(N=q,K=[],re=q,t.charCodeAt(q)===92?(pe=Ni,q++):(pe=r,ct===0&&Ct(Mn)),pe!==r?(t.length>q?(ze=t.charAt(q),q++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(q=re,re=r)):(q=re,re=r),re===r&&(re=q,t.substr(q,2)===Ci?(pe=Ci,q+=2):(pe=r,ct===0&&Ct(oa)),pe!==r&&(Dt=re,pe=co()),re=pe,re===r&&(re=q,pe=q,ct++,ze=Rm(),ct--,ze===r?pe=void 0:(q=pe,pe=r),pe!==r?(t.length>q?(ze=t.charAt(q),q++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(q=re,re=r)):(q=re,re=r))),re!==r)for(;re!==r;)K.push(re),re=q,t.charCodeAt(q)===92?(pe=Ni,q++):(pe=r,ct===0&&Ct(Mn)),pe!==r?(t.length>q?(ze=t.charAt(q),q++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(q=re,re=r)):(q=re,re=r),re===r&&(re=q,t.substr(q,2)===Ci?(pe=Ci,q+=2):(pe=r,ct===0&&Ct(oa)),pe!==r&&(Dt=re,pe=co()),re=pe,re===r&&(re=q,pe=q,ct++,ze=Rm(),ct--,ze===r?pe=void 0:(q=pe,pe=r),pe!==r?(t.length>q?(ze=t.charAt(q),q++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(q=re,re=r)):(q=re,re=r)));else K=r;return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function vc(){var N,K,re,pe,ze,mt;if(N=q,t.charCodeAt(q)===45?(K=Us,q++):(K=r,ct===0&&Ct(aa)),K===r&&(t.charCodeAt(q)===43?(K=la,q++):(K=r,ct===0&&Ct(Ho))),K===r&&(K=null),K!==r){if(re=[],Je.test(t.charAt(q))?(pe=t.charAt(q),q++):(pe=r,ct===0&&Ct(je)),pe!==r)for(;pe!==r;)re.push(pe),Je.test(t.charAt(q))?(pe=t.charAt(q),q++):(pe=r,ct===0&&Ct(je));else re=r;if(re!==r)if(t.charCodeAt(q)===46?(pe=wi,q++):(pe=r,ct===0&&Ct(gs)),pe!==r){if(ze=[],Je.test(t.charAt(q))?(mt=t.charAt(q),q++):(mt=r,ct===0&&Ct(je)),mt!==r)for(;mt!==r;)ze.push(mt),Je.test(t.charAt(q))?(mt=t.charAt(q),q++):(mt=r,ct===0&&Ct(je));else ze=r;ze!==r?(Dt=N,K=ds(K,re,ze),N=K):(q=N,N=r)}else q=N,N=r;else q=N,N=r}else q=N,N=r;if(N===r){if(N=q,t.charCodeAt(q)===45?(K=Us,q++):(K=r,ct===0&&Ct(aa)),K===r&&(t.charCodeAt(q)===43?(K=la,q++):(K=r,ct===0&&Ct(Ho))),K===r&&(K=null),K!==r){if(re=[],Je.test(t.charAt(q))?(pe=t.charAt(q),q++):(pe=r,ct===0&&Ct(je)),pe!==r)for(;pe!==r;)re.push(pe),Je.test(t.charAt(q))?(pe=t.charAt(q),q++):(pe=r,ct===0&&Ct(je));else re=r;re!==r?(Dt=N,K=ms(K,re),N=K):(q=N,N=r)}else q=N,N=r;if(N===r&&(N=q,K=Dc(),K!==r&&(Dt=N,K=_s(K)),N=K,N===r&&(N=q,K=qa(),K!==r&&(Dt=N,K=Un(K)),N=K,N===r)))if(N=q,t.charCodeAt(q)===40?(K=Se,q++):(K=r,ct===0&&Ct(le)),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();if(re!==r)if(pe=ts(),pe!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.charCodeAt(q)===41?(mt=ne,q++):(mt=r,ct===0&&Ct(ee)),mt!==r?(Dt=N,K=Sn(pe),N=K):(q=N,N=r)):(q=N,N=r)}else q=N,N=r;else q=N,N=r}else q=N,N=r}return N}function Bl(){var N,K,re,pe,ze,mt,fr,Cr;if(N=q,K=vc(),K!==r){for(re=[],pe=q,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(q)===42?(mt=ys,q++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(q)===47?(mt=tt,q++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=pe,ze=nr(K,mt,Cr),pe=ze):(q=pe,pe=r)):(q=pe,pe=r)}else q=pe,pe=r;else q=pe,pe=r;for(;pe!==r;){for(re.push(pe),pe=q,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(q)===42?(mt=ys,q++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(q)===47?(mt=tt,q++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=pe,ze=nr(K,mt,Cr),pe=ze):(q=pe,pe=r)):(q=pe,pe=r)}else q=pe,pe=r;else q=pe,pe=r}re!==r?(Dt=N,K=$(K,re),N=K):(q=N,N=r)}else q=N,N=r;return N}function ts(){var N,K,re,pe,ze,mt,fr,Cr;if(N=q,K=Bl(),K!==r){for(re=[],pe=q,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(q)===43?(mt=la,q++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(q)===45?(mt=Us,q++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=pe,ze=ye(K,mt,Cr),pe=ze):(q=pe,pe=r)):(q=pe,pe=r)}else q=pe,pe=r;else q=pe,pe=r;for(;pe!==r;){for(re.push(pe),pe=q,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(q)===43?(mt=la,q++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(q)===45?(mt=Us,q++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=pe,ze=ye(K,mt,Cr),pe=ze):(q=pe,pe=r)):(q=pe,pe=r)}else q=pe,pe=r;else q=pe,pe=r}re!==r?(Dt=N,K=$(K,re),N=K):(q=N,N=r)}else q=N,N=r;return N}function qr(){var N,K,re,pe,ze,mt;if(N=q,t.substr(q,3)===Le?(K=Le,q+=3):(K=r,ct===0&&Ct(pt)),K!==r){for(re=[],pe=Qt();pe!==r;)re.push(pe),pe=Qt();if(re!==r)if(pe=ts(),pe!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.substr(q,2)===ht?(mt=ht,q+=2):(mt=r,ct===0&&Ct(Tt)),mt!==r?(Dt=N,K=er(pe),N=K):(q=N,N=r)):(q=N,N=r)}else q=N,N=r;else q=N,N=r}else q=N,N=r;return N}function Ep(){var N,K,re,pe;return N=q,t.substr(q,2)===$r?(K=$r,q+=2):(K=r,ct===0&&Ct(Gi)),K!==r?(re=Cu(),re!==r?(t.charCodeAt(q)===41?(pe=ne,q++):(pe=r,ct===0&&Ct(ee)),pe!==r?(Dt=N,K=es(re),N=K):(q=N,N=r)):(q=N,N=r)):(q=N,N=r),N}function Dc(){var N,K,re,pe,ze,mt;return N=q,t.substr(q,2)===bi?(K=bi,q+=2):(K=r,ct===0&&Ct(jo)),K!==r?(re=qa(),re!==r?(t.substr(q,2)===kA?(pe=kA,q+=2):(pe=r,ct===0&&Ct(QA)),pe!==r?(ze=NA(),ze!==r?(t.charCodeAt(q)===125?(mt=H,q++):(mt=r,ct===0&&Ct(at)),mt!==r?(Dt=N,K=Ap(re,ze),N=K):(q=N,N=r)):(q=N,N=r)):(q=N,N=r)):(q=N,N=r)):(q=N,N=r),N===r&&(N=q,t.substr(q,2)===bi?(K=bi,q+=2):(K=r,ct===0&&Ct(jo)),K!==r?(re=qa(),re!==r?(t.substr(q,3)===ig?(pe=ig,q+=3):(pe=r,ct===0&&Ct(gu)),pe!==r?(Dt=N,K=sg(re),N=K):(q=N,N=r)):(q=N,N=r)):(q=N,N=r),N===r&&(N=q,t.substr(q,2)===bi?(K=bi,q+=2):(K=r,ct===0&&Ct(jo)),K!==r?(re=qa(),re!==r?(t.substr(q,2)===du?(pe=du,q+=2):(pe=r,ct===0&&Ct(uo)),pe!==r?(ze=NA(),ze!==r?(t.charCodeAt(q)===125?(mt=H,q++):(mt=r,ct===0&&Ct(at)),mt!==r?(Dt=N,K=FA(re,ze),N=K):(q=N,N=r)):(q=N,N=r)):(q=N,N=r)):(q=N,N=r)):(q=N,N=r),N===r&&(N=q,t.substr(q,2)===bi?(K=bi,q+=2):(K=r,ct===0&&Ct(jo)),K!==r?(re=qa(),re!==r?(t.substr(q,3)===mc?(pe=mc,q+=3):(pe=r,ct===0&&Ct(ca)),pe!==r?(Dt=N,K=og(re),N=K):(q=N,N=r)):(q=N,N=r)):(q=N,N=r),N===r&&(N=q,t.substr(q,2)===bi?(K=bi,q+=2):(K=r,ct===0&&Ct(jo)),K!==r?(re=qa(),re!==r?(t.charCodeAt(q)===125?(pe=H,q++):(pe=r,ct===0&&Ct(at)),pe!==r?(Dt=N,K=yc(re),N=K):(q=N,N=r)):(q=N,N=r)):(q=N,N=r),N===r&&(N=q,t.charCodeAt(q)===36?(K=Pm,q++):(K=r,ct===0&&Ct(ag)),K!==r?(re=qa(),re!==r?(Dt=N,K=yc(re),N=K):(q=N,N=r)):(q=N,N=r)))))),N}function Cw(){var N,K,re;return N=q,K=Eg(),K!==r?(Dt=q,re=$n(K),re?re=void 0:re=r,re!==r?(Dt=N,K=fp(K),N=K):(q=N,N=r)):(q=N,N=r),N}function Eg(){var N,K,re,pe,ze;if(N=q,K=[],re=q,pe=q,ct++,ze=wg(),ct--,ze===r?pe=void 0:(q=pe,pe=r),pe!==r?(t.length>q?(ze=t.charAt(q),q++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(q=re,re=r)):(q=re,re=r),re!==r)for(;re!==r;)K.push(re),re=q,pe=q,ct++,ze=wg(),ct--,ze===r?pe=void 0:(q=pe,pe=r),pe!==r?(t.length>q?(ze=t.charAt(q),q++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,pe=Oe(ze),re=pe):(q=re,re=r)):(q=re,re=r);else K=r;return K!==r&&(Dt=N,K=Ms(K)),N=K,N}function Cg(){var N,K,re;if(N=q,K=[],lg.test(t.charAt(q))?(re=t.charAt(q),q++):(re=r,ct===0&&Ct(RA)),re!==r)for(;re!==r;)K.push(re),lg.test(t.charAt(q))?(re=t.charAt(q),q++):(re=r,ct===0&&Ct(RA));else K=r;return K!==r&&(Dt=N,K=Hs()),N=K,N}function qa(){var N,K,re;if(N=q,K=[],mu.test(t.charAt(q))?(re=t.charAt(q),q++):(re=r,ct===0&&Ct(Ha)),re!==r)for(;re!==r;)K.push(re),mu.test(t.charAt(q))?(re=t.charAt(q),q++):(re=r,ct===0&&Ct(Ha));else K=r;return K!==r&&(Dt=N,K=Hs()),N=K,N}function Rm(){var N;return qi.test(t.charAt(q))?(N=t.charAt(q),q++):(N=r,ct===0&&Ct(ua)),N}function wg(){var N;return yu.test(t.charAt(q))?(N=t.charAt(q),q++):(N=r,ct===0&&Ct(Es)),N}function Qt(){var N,K;if(N=[],Ec.test(t.charAt(q))?(K=t.charAt(q),q++):(K=r,ct===0&&Ct(Cc)),K!==r)for(;K!==r;)N.push(K),Ec.test(t.charAt(q))?(K=t.charAt(q),q++):(K=r,ct===0&&Ct(Cc));else N=r;return N}if(Eu=a(),Eu!==r&&q===t.length)return Eu;throw Eu!==r&&q!1}){try{return(0,$Y.parse)(t,e)}catch(r){throw r.location&&(r.message=r.message.replace(/(\.)?$/,` (line ${r.location.start.line}, column ${r.location.start.column})$1`)),r}}function cy(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:o},a)=>`${LD(r)}${o===";"?a!==t.length-1||e?";":"":" &"}`).join(" ")}function LD(t){return`${uy(t.chain)}${t.then?` ${oT(t.then)}`:""}`}function oT(t){return`${t.type} ${LD(t.line)}`}function uy(t){return`${lT(t)}${t.then?` ${aT(t.then)}`:""}`}function aT(t){return`${t.type} ${uy(t.chain)}`}function lT(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>TD(e)).join(" ")} `:""}${t.args.map(e=>cT(e)).join(" ")}`;case"subshell":return`(${cy(t.subshell)})${t.args.length>0?` ${t.args.map(e=>Jw(e)).join(" ")}`:""}`;case"group":return`{ ${cy(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>Jw(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>TD(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function TD(t){return`${t.name}=${t.args[0]?Yg(t.args[0]):""}`}function cT(t){switch(t.type){case"redirection":return Jw(t);case"argument":return Yg(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function Jw(t){return`${t.subtype} ${t.args.map(e=>Yg(e)).join(" ")}`}function Yg(t){return t.segments.map(e=>uT(e)).join("")}function uT(t){let e=(o,a)=>a?`"${o}"`:o,r=o=>o===""?"''":o.match(/[()}<>$|&;"'\n\t ]/)?o.match(/['\t\p{C}]/u)?o.match(/'/)?`"${o.replace(/["$\t\p{C}]/u,f8e)}"`:`$'${o.replace(/[\t\p{C}]/u,tW)}'`:`'${o}'`:o;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`\${${cy(t.shell)}}`,t.quoted);case"variable":return e(typeof t.defaultValue>"u"?typeof t.alternativeValue>"u"?`\${${t.name}}`:t.alternativeValue.length===0?`\${${t.name}:+}`:`\${${t.name}:+${t.alternativeValue.map(o=>Yg(o)).join(" ")}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(o=>Yg(o)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${OD(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function OD(t){let e=a=>{switch(a){case"addition":return"+";case"subtraction":return"-";case"multiplication":return"*";case"division":return"/";default:throw new Error(`Can't extract operator from arithmetic expression of type "${a}"`)}},r=(a,n)=>n?`( ${a} )`:a,o=a=>r(OD(a),!["number","variable"].includes(a.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${o(t.left)} ${e(t.type)} ${o(t.right)}`}}var $Y,eW,A8e,tW,f8e,rW=Et(()=>{$Y=$e(ZY());eW=new Map([["\f","\\f"],[` +`,"\\n"],["\r","\\r"],[" ","\\t"],["\v","\\v"],["\0","\\0"]]),A8e=new Map([["\\","\\\\"],["$","\\$"],['"','\\"'],...Array.from(eW,([t,e])=>[t,`"$'${e}'"`])]),tW=t=>eW.get(t)??`\\x${t.charCodeAt(0).toString(16).padStart(2,"0")}`,f8e=t=>A8e.get(t)??`"$'${tW(t)}'"`});var iW=_((Tbt,nW)=>{"use strict";function p8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Wg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Wg)}p8e(Wg,Error);Wg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;Ife&&(fe=J,ce=[]),ce.push(je))}function at(je,b){return new Wg(je,null,null,b)}function Re(je,b,w){return new Wg(Wg.buildMessage(je,b),je,b,w)}function ke(){var je,b,w,P;return je=J,b=xe(),b!==r?(t.charCodeAt(J)===47?(w=n,J++):(w=r,me===0&&H(u)),w!==r?(P=xe(),P!==r?(te=je,b=A(b,P),je=b):(J=je,je=r)):(J=je,je=r)):(J=je,je=r),je===r&&(je=J,b=xe(),b!==r&&(te=je,b=p(b)),je=b),je}function xe(){var je,b,w,P;return je=J,b=He(),b!==r?(t.charCodeAt(J)===64?(w=h,J++):(w=r,me===0&&H(E)),w!==r?(P=Je(),P!==r?(te=je,b=I(b,P),je=b):(J=je,je=r)):(J=je,je=r)):(J=je,je=r),je===r&&(je=J,b=He(),b!==r&&(te=je,b=v(b)),je=b),je}function He(){var je,b,w,P,y;return je=J,t.charCodeAt(J)===64?(b=h,J++):(b=r,me===0&&H(E)),b!==r?(w=Te(),w!==r?(t.charCodeAt(J)===47?(P=n,J++):(P=r,me===0&&H(u)),P!==r?(y=Te(),y!==r?(te=je,b=x(),je=b):(J=je,je=r)):(J=je,je=r)):(J=je,je=r)):(J=je,je=r),je===r&&(je=J,b=Te(),b!==r&&(te=je,b=x()),je=b),je}function Te(){var je,b,w;if(je=J,b=[],C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,me===0&&H(R)),w!==r)for(;w!==r;)b.push(w),C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,me===0&&H(R));else b=r;return b!==r&&(te=je,b=x()),je=b,je}function Je(){var je,b,w;if(je=J,b=[],L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,me===0&&H(U)),w!==r)for(;w!==r;)b.push(w),L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,me===0&&H(U));else b=r;return b!==r&&(te=je,b=x()),je=b,je}if(he=a(),he!==r&&J===t.length)return he;throw he!==r&&J{sW=$e(iW())});var Vg=_((Lbt,Kg)=>{"use strict";function aW(t){return typeof t>"u"||t===null}function g8e(t){return typeof t=="object"&&t!==null}function d8e(t){return Array.isArray(t)?t:aW(t)?[]:[t]}function m8e(t,e){var r,o,a,n;if(e)for(n=Object.keys(e),r=0,o=n.length;r{"use strict";function zw(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}zw.prototype=Object.create(Error.prototype);zw.prototype.constructor=zw;zw.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};lW.exports=zw});var AW=_((Mbt,uW)=>{"use strict";var cW=Vg();function AT(t,e,r,o,a){this.name=t,this.buffer=e,this.position=r,this.line=o,this.column=a}AT.prototype.getSnippet=function(e,r){var o,a,n,u,A;if(!this.buffer)return null;for(e=e||4,r=r||75,o="",a=this.position;a>0&&`\0\r +\x85\u2028\u2029`.indexOf(this.buffer.charAt(a-1))===-1;)if(a-=1,this.position-a>r/2-1){o=" ... ",a+=5;break}for(n="",u=this.position;ur/2-1){n=" ... ",u-=5;break}return A=this.buffer.slice(a,u),cW.repeat(" ",e)+o+A+n+` +`+cW.repeat(" ",e+this.position-a+o.length)+"^"};AT.prototype.toString=function(e){var r,o="";return this.name&&(o+='in "'+this.name+'" '),o+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(o+=`: +`+r)),o};uW.exports=AT});var os=_((Ubt,pW)=>{"use strict";var fW=Ay(),C8e=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],w8e=["scalar","sequence","mapping"];function I8e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(o){e[String(o)]=r})}),e}function B8e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(C8e.indexOf(r)===-1)throw new fW('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=I8e(e.styleAliases||null),w8e.indexOf(this.kind)===-1)throw new fW('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}pW.exports=B8e});var Jg=_((_bt,gW)=>{"use strict";var hW=Vg(),_D=Ay(),v8e=os();function fT(t,e,r){var o=[];return t.include.forEach(function(a){r=fT(a,e,r)}),t[e].forEach(function(a){r.forEach(function(n,u){n.tag===a.tag&&n.kind===a.kind&&o.push(u)}),r.push(a)}),r.filter(function(a,n){return o.indexOf(n)===-1})}function D8e(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function o(a){t[a.kind][a.tag]=t.fallback[a.tag]=a}for(e=0,r=arguments.length;e{"use strict";var S8e=os();dW.exports=new S8e("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var EW=_((jbt,yW)=>{"use strict";var P8e=os();yW.exports=new P8e("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var wW=_((Gbt,CW)=>{"use strict";var b8e=os();CW.exports=new b8e("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var HD=_((qbt,IW)=>{"use strict";var x8e=Jg();IW.exports=new x8e({explicit:[mW(),EW(),wW()]})});var vW=_((Ybt,BW)=>{"use strict";var k8e=os();function Q8e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function F8e(){return null}function R8e(t){return t===null}BW.exports=new k8e("tag:yaml.org,2002:null",{kind:"scalar",resolve:Q8e,construct:F8e,predicate:R8e,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var SW=_((Wbt,DW)=>{"use strict";var T8e=os();function N8e(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function L8e(t){return t==="true"||t==="True"||t==="TRUE"}function O8e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}DW.exports=new T8e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:N8e,construct:L8e,predicate:O8e,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})});var bW=_((Kbt,PW)=>{"use strict";var M8e=Vg(),U8e=os();function _8e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function H8e(t){return 48<=t&&t<=55}function j8e(t){return 48<=t&&t<=57}function G8e(t){if(t===null)return!1;var e=t.length,r=0,o=!1,a;if(!e)return!1;if(a=t[r],(a==="-"||a==="+")&&(a=t[++r]),a==="0"){if(r+1===e)return!0;if(a=t[++r],a==="b"){for(r++;r=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0"+t.toString(8):"-0"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var QW=_((Vbt,kW)=>{"use strict";var xW=Vg(),W8e=os(),K8e=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function V8e(t){return!(t===null||!K8e.test(t)||t[t.length-1]==="_")}function J8e(t){var e,r,o,a;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,a=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(n){a.unshift(parseFloat(n,10))}),e=0,o=1,a.forEach(function(n){e+=n*o,o*=60}),r*e):r*parseFloat(e,10)}var z8e=/^[-+]?[0-9]+e/;function X8e(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(xW.isNegativeZero(t))return"-0.0";return r=t.toString(10),z8e.test(r)?r.replace("e",".e"):r}function Z8e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||xW.isNegativeZero(t))}kW.exports=new W8e("tag:yaml.org,2002:float",{kind:"scalar",resolve:V8e,construct:J8e,predicate:Z8e,represent:X8e,defaultStyle:"lowercase"})});var pT=_((Jbt,FW)=>{"use strict";var $8e=Jg();FW.exports=new $8e({include:[HD()],implicit:[vW(),SW(),bW(),QW()]})});var hT=_((zbt,RW)=>{"use strict";var eHe=Jg();RW.exports=new eHe({include:[pT()]})});var OW=_((Xbt,LW)=>{"use strict";var tHe=os(),TW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),NW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function rHe(t){return t===null?!1:TW.exec(t)!==null||NW.exec(t)!==null}function nHe(t){var e,r,o,a,n,u,A,p=0,h=null,E,I,v;if(e=TW.exec(t),e===null&&(e=NW.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],o=+e[2]-1,a=+e[3],!e[4])return new Date(Date.UTC(r,o,a));if(n=+e[4],u=+e[5],A=+e[6],e[7]){for(p=e[7].slice(0,3);p.length<3;)p+="0";p=+p}return e[9]&&(E=+e[10],I=+(e[11]||0),h=(E*60+I)*6e4,e[9]==="-"&&(h=-h)),v=new Date(Date.UTC(r,o,a,n,u,A,p)),h&&v.setTime(v.getTime()-h),v}function iHe(t){return t.toISOString()}LW.exports=new tHe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:rHe,construct:nHe,instanceOf:Date,represent:iHe})});var UW=_((Zbt,MW)=>{"use strict";var sHe=os();function oHe(t){return t==="<<"||t===null}MW.exports=new sHe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:oHe})});var jW=_(($bt,HW)=>{"use strict";var zg;try{_W=ve,zg=_W("buffer").Buffer}catch{}var _W,aHe=os(),gT=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function lHe(t){if(t===null)return!1;var e,r,o=0,a=t.length,n=gT;for(r=0;r64)){if(e<0)return!1;o+=6}return o%8===0}function cHe(t){var e,r,o=t.replace(/[\r\n=]/g,""),a=o.length,n=gT,u=0,A=[];for(e=0;e>16&255),A.push(u>>8&255),A.push(u&255)),u=u<<6|n.indexOf(o.charAt(e));return r=a%4*6,r===0?(A.push(u>>16&255),A.push(u>>8&255),A.push(u&255)):r===18?(A.push(u>>10&255),A.push(u>>2&255)):r===12&&A.push(u>>4&255),zg?zg.from?zg.from(A):new zg(A):A}function uHe(t){var e="",r=0,o,a,n=t.length,u=gT;for(o=0;o>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]),r=(r<<8)+t[o];return a=n%3,a===0?(e+=u[r>>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]):a===2?(e+=u[r>>10&63],e+=u[r>>4&63],e+=u[r<<2&63],e+=u[64]):a===1&&(e+=u[r>>2&63],e+=u[r<<4&63],e+=u[64],e+=u[64]),e}function AHe(t){return zg&&zg.isBuffer(t)}HW.exports=new aHe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:lHe,construct:cHe,predicate:AHe,represent:uHe})});var qW=_((txt,GW)=>{"use strict";var fHe=os(),pHe=Object.prototype.hasOwnProperty,hHe=Object.prototype.toString;function gHe(t){if(t===null)return!0;var e=[],r,o,a,n,u,A=t;for(r=0,o=A.length;r{"use strict";var mHe=os(),yHe=Object.prototype.toString;function EHe(t){if(t===null)return!0;var e,r,o,a,n,u=t;for(n=new Array(u.length),e=0,r=u.length;e{"use strict";var wHe=os(),IHe=Object.prototype.hasOwnProperty;function BHe(t){if(t===null)return!0;var e,r=t;for(e in r)if(IHe.call(r,e)&&r[e]!==null)return!1;return!0}function vHe(t){return t!==null?t:{}}KW.exports=new wHe("tag:yaml.org,2002:set",{kind:"mapping",resolve:BHe,construct:vHe})});var py=_((ixt,JW)=>{"use strict";var DHe=Jg();JW.exports=new DHe({include:[hT()],implicit:[OW(),UW()],explicit:[jW(),qW(),WW(),VW()]})});var XW=_((sxt,zW)=>{"use strict";var SHe=os();function PHe(){return!0}function bHe(){}function xHe(){return""}function kHe(t){return typeof t>"u"}zW.exports=new SHe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:PHe,construct:bHe,predicate:kHe,represent:xHe})});var $W=_((oxt,ZW)=>{"use strict";var QHe=os();function FHe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),o="";return!(e[0]==="/"&&(r&&(o=r[1]),o.length>3||e[e.length-o.length-1]!=="/"))}function RHe(t){var e=t,r=/\/([gim]*)$/.exec(t),o="";return e[0]==="/"&&(r&&(o=r[1]),e=e.slice(1,e.length-o.length-1)),new RegExp(e,o)}function THe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function NHe(t){return Object.prototype.toString.call(t)==="[object RegExp]"}ZW.exports=new QHe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:FHe,construct:RHe,predicate:NHe,represent:THe})});var rK=_((axt,tK)=>{"use strict";var jD;try{eK=ve,jD=eK("esprima")}catch{typeof window<"u"&&(jD=window.esprima)}var eK,LHe=os();function OHe(t){if(t===null)return!1;try{var e="("+t+")",r=jD.parse(e,{range:!0});return!(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function MHe(t){var e="("+t+")",r=jD.parse(e,{range:!0}),o=[],a;if(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(n){o.push(n.name)}),a=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(o,e.slice(a[0]+1,a[1]-1)):new Function(o,"return "+e.slice(a[0],a[1]))}function UHe(t){return t.toString()}function _He(t){return Object.prototype.toString.call(t)==="[object Function]"}tK.exports=new LHe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:OHe,construct:MHe,predicate:_He,represent:UHe})});var Xw=_((cxt,iK)=>{"use strict";var nK=Jg();iK.exports=nK.DEFAULT=new nK({include:[py()],explicit:[XW(),$W(),rK()]})});var BK=_((uxt,Zw)=>{"use strict";var yf=Vg(),AK=Ay(),HHe=AW(),fK=py(),jHe=Xw(),Yp=Object.prototype.hasOwnProperty,GD=1,pK=2,hK=3,qD=4,dT=1,GHe=2,sK=3,qHe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,YHe=/[\x85\u2028\u2029]/,WHe=/[,\[\]\{\}]/,gK=/^(?:!|!!|![a-z\-]+!)$/i,dK=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function oK(t){return Object.prototype.toString.call(t)}function Hu(t){return t===10||t===13}function Zg(t){return t===9||t===32}function Ia(t){return t===9||t===32||t===10||t===13}function hy(t){return t===44||t===91||t===93||t===123||t===125}function KHe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function VHe(t){return t===120?2:t===117?4:t===85?8:0}function JHe(t){return 48<=t&&t<=57?t-48:-1}function aK(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?` +`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function zHe(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var mK=new Array(256),yK=new Array(256);for(Xg=0;Xg<256;Xg++)mK[Xg]=aK(Xg)?1:0,yK[Xg]=aK(Xg);var Xg;function XHe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||jHe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function EK(t,e){return new AK(e,new HHe(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function Pr(t,e){throw EK(t,e)}function YD(t,e){t.onWarning&&t.onWarning.call(null,EK(t,e))}var lK={YAML:function(e,r,o){var a,n,u;e.version!==null&&Pr(e,"duplication of %YAML directive"),o.length!==1&&Pr(e,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(o[0]),a===null&&Pr(e,"ill-formed argument of the YAML directive"),n=parseInt(a[1],10),u=parseInt(a[2],10),n!==1&&Pr(e,"unacceptable YAML version of the document"),e.version=o[0],e.checkLineBreaks=u<2,u!==1&&u!==2&&YD(e,"unsupported YAML version of the document")},TAG:function(e,r,o){var a,n;o.length!==2&&Pr(e,"TAG directive accepts exactly two arguments"),a=o[0],n=o[1],gK.test(a)||Pr(e,"ill-formed tag handle (first argument) of the TAG directive"),Yp.call(e.tagMap,a)&&Pr(e,'there is a previously declared suffix for "'+a+'" tag handle'),dK.test(n)||Pr(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[a]=n}};function qp(t,e,r,o){var a,n,u,A;if(e1&&(t.result+=yf.repeat(` +`,e-1))}function ZHe(t,e,r){var o,a,n,u,A,p,h,E,I=t.kind,v=t.result,x;if(x=t.input.charCodeAt(t.position),Ia(x)||hy(x)||x===35||x===38||x===42||x===33||x===124||x===62||x===39||x===34||x===37||x===64||x===96||(x===63||x===45)&&(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&hy(a)))return!1;for(t.kind="scalar",t.result="",n=u=t.position,A=!1;x!==0;){if(x===58){if(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&hy(a))break}else if(x===35){if(o=t.input.charCodeAt(t.position-1),Ia(o))break}else{if(t.position===t.lineStart&&WD(t)||r&&hy(x))break;if(Hu(x))if(p=t.line,h=t.lineStart,E=t.lineIndent,Wi(t,!1,-1),t.lineIndent>=e){A=!0,x=t.input.charCodeAt(t.position);continue}else{t.position=u,t.line=p,t.lineStart=h,t.lineIndent=E;break}}A&&(qp(t,n,u,!1),yT(t,t.line-p),n=u=t.position,A=!1),Zg(x)||(u=t.position+1),x=t.input.charCodeAt(++t.position)}return qp(t,n,u,!1),t.result?!0:(t.kind=I,t.result=v,!1)}function $He(t,e){var r,o,a;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,o=a=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(qp(t,o,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)o=t.position,t.position++,a=t.position;else return!0;else Hu(r)?(qp(t,o,a,!0),yT(t,Wi(t,!1,e)),o=a=t.position):t.position===t.lineStart&&WD(t)?Pr(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Pr(t,"unexpected end of the stream within a single quoted scalar")}function e6e(t,e){var r,o,a,n,u,A;if(A=t.input.charCodeAt(t.position),A!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=o=t.position;(A=t.input.charCodeAt(t.position))!==0;){if(A===34)return qp(t,r,t.position,!0),t.position++,!0;if(A===92){if(qp(t,r,t.position,!0),A=t.input.charCodeAt(++t.position),Hu(A))Wi(t,!1,e);else if(A<256&&mK[A])t.result+=yK[A],t.position++;else if((u=VHe(A))>0){for(a=u,n=0;a>0;a--)A=t.input.charCodeAt(++t.position),(u=KHe(A))>=0?n=(n<<4)+u:Pr(t,"expected hexadecimal character");t.result+=zHe(n),t.position++}else Pr(t,"unknown escape sequence");r=o=t.position}else Hu(A)?(qp(t,r,o,!0),yT(t,Wi(t,!1,e)),r=o=t.position):t.position===t.lineStart&&WD(t)?Pr(t,"unexpected end of the document within a double quoted scalar"):(t.position++,o=t.position)}Pr(t,"unexpected end of the stream within a double quoted scalar")}function t6e(t,e){var r=!0,o,a=t.tag,n,u=t.anchor,A,p,h,E,I,v={},x,C,R,L;if(L=t.input.charCodeAt(t.position),L===91)p=93,I=!1,n=[];else if(L===123)p=125,I=!0,n={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=n),L=t.input.charCodeAt(++t.position);L!==0;){if(Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===p)return t.position++,t.tag=a,t.anchor=u,t.kind=I?"mapping":"sequence",t.result=n,!0;r||Pr(t,"missed comma between flow collection entries"),C=x=R=null,h=E=!1,L===63&&(A=t.input.charCodeAt(t.position+1),Ia(A)&&(h=E=!0,t.position++,Wi(t,!0,e))),o=t.line,dy(t,e,GD,!1,!0),C=t.tag,x=t.result,Wi(t,!0,e),L=t.input.charCodeAt(t.position),(E||t.line===o)&&L===58&&(h=!0,L=t.input.charCodeAt(++t.position),Wi(t,!0,e),dy(t,e,GD,!1,!0),R=t.result),I?gy(t,n,v,C,x,R):h?n.push(gy(t,null,v,C,x,R)):n.push(x),Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===44?(r=!0,L=t.input.charCodeAt(++t.position)):r=!1}Pr(t,"unexpected end of the stream within a flow collection")}function r6e(t,e){var r,o,a=dT,n=!1,u=!1,A=e,p=0,h=!1,E,I;if(I=t.input.charCodeAt(t.position),I===124)o=!1;else if(I===62)o=!0;else return!1;for(t.kind="scalar",t.result="";I!==0;)if(I=t.input.charCodeAt(++t.position),I===43||I===45)dT===a?a=I===43?sK:GHe:Pr(t,"repeat of a chomping mode identifier");else if((E=JHe(I))>=0)E===0?Pr(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?Pr(t,"repeat of an indentation width identifier"):(A=e+E-1,u=!0);else break;if(Zg(I)){do I=t.input.charCodeAt(++t.position);while(Zg(I));if(I===35)do I=t.input.charCodeAt(++t.position);while(!Hu(I)&&I!==0)}for(;I!==0;){for(mT(t),t.lineIndent=0,I=t.input.charCodeAt(t.position);(!u||t.lineIndentA&&(A=t.lineIndent),Hu(I)){p++;continue}if(t.lineIndente)&&p!==0)Pr(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(dy(t,e,qD,!0,a)&&(C?v=t.result:x=t.result),C||(gy(t,h,E,I,v,x,n,u),I=v=x=null),Wi(t,!0,-1),L=t.input.charCodeAt(t.position)),t.lineIndent>e&&L!==0)Pr(t,"bad indentation of a mapping entry");else if(t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),I=0,v=t.implicitTypes.length;I tag; it should be "'+x.kind+'", not "'+t.kind+'"'),x.resolve(t.result)?(t.result=x.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Pr(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):Pr(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||E}function a6e(t){var e=t.position,r,o,a,n=!1,u;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(u=t.input.charCodeAt(t.position))!==0&&(Wi(t,!0,-1),u=t.input.charCodeAt(t.position),!(t.lineIndent>0||u!==37));){for(n=!0,u=t.input.charCodeAt(++t.position),r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);for(o=t.input.slice(r,t.position),a=[],o.length<1&&Pr(t,"directive name must not be less than one character in length");u!==0;){for(;Zg(u);)u=t.input.charCodeAt(++t.position);if(u===35){do u=t.input.charCodeAt(++t.position);while(u!==0&&!Hu(u));break}if(Hu(u))break;for(r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);a.push(t.input.slice(r,t.position))}u!==0&&mT(t),Yp.call(lK,o)?lK[o](t,o,a):YD(t,'unknown document directive "'+o+'"')}if(Wi(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Wi(t,!0,-1)):n&&Pr(t,"directives end mark is expected"),dy(t,t.lineIndent-1,qD,!1,!0),Wi(t,!0,-1),t.checkLineBreaks&&YHe.test(t.input.slice(e,t.position))&&YD(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&WD(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Wi(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var o=CK(t,r);if(typeof e!="function")return o;for(var a=0,n=o.length;a"u"&&(r=e,e=null),wK(t,e,yf.extend({schema:fK},r))}function c6e(t,e){return IK(t,yf.extend({schema:fK},e))}Zw.exports.loadAll=wK;Zw.exports.load=IK;Zw.exports.safeLoadAll=l6e;Zw.exports.safeLoad=c6e});var WK=_((Axt,IT)=>{"use strict";var eI=Vg(),tI=Ay(),u6e=Xw(),A6e=py(),QK=Object.prototype.toString,FK=Object.prototype.hasOwnProperty,f6e=9,$w=10,p6e=13,h6e=32,g6e=33,d6e=34,RK=35,m6e=37,y6e=38,E6e=39,C6e=42,TK=44,w6e=45,NK=58,I6e=61,B6e=62,v6e=63,D6e=64,LK=91,OK=93,S6e=96,MK=123,P6e=124,UK=125,vo={};vo[0]="\\0";vo[7]="\\a";vo[8]="\\b";vo[9]="\\t";vo[10]="\\n";vo[11]="\\v";vo[12]="\\f";vo[13]="\\r";vo[27]="\\e";vo[34]='\\"';vo[92]="\\\\";vo[133]="\\N";vo[160]="\\_";vo[8232]="\\L";vo[8233]="\\P";var b6e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function x6e(t,e){var r,o,a,n,u,A,p;if(e===null)return{};for(r={},o=Object.keys(e),a=0,n=o.length;a0?t.charCodeAt(n-1):null,v=v&&SK(u,A)}else{for(n=0;no&&t[I+1]!==" ",I=n);else if(!my(u))return KD;A=n>0?t.charCodeAt(n-1):null,v=v&&SK(u,A)}h=h||E&&n-I-1>o&&t[I+1]!==" "}return!p&&!h?v&&!a(t)?HK:jK:r>9&&_K(t)?KD:h?qK:GK}function N6e(t,e,r,o){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&b6e.indexOf(e)!==-1)return"'"+e+"'";var a=t.indent*Math.max(1,r),n=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),u=o||t.flowLevel>-1&&r>=t.flowLevel;function A(p){return Q6e(t,p)}switch(T6e(e,u,t.indent,n,A)){case HK:return e;case jK:return"'"+e.replace(/'/g,"''")+"'";case GK:return"|"+PK(e,t.indent)+bK(DK(e,a));case qK:return">"+PK(e,t.indent)+bK(DK(L6e(e,n),a));case KD:return'"'+O6e(e,n)+'"';default:throw new tI("impossible error: invalid scalar style")}}()}function PK(t,e){var r=_K(t)?String(e):"",o=t[t.length-1]===` +`,a=o&&(t[t.length-2]===` +`||t===` +`),n=a?"+":o?"":"-";return r+n+` +`}function bK(t){return t[t.length-1]===` +`?t.slice(0,-1):t}function L6e(t,e){for(var r=/(\n+)([^\n]*)/g,o=function(){var h=t.indexOf(` +`);return h=h!==-1?h:t.length,r.lastIndex=h,xK(t.slice(0,h),e)}(),a=t[0]===` +`||t[0]===" ",n,u;u=r.exec(t);){var A=u[1],p=u[2];n=p[0]===" ",o+=A+(!a&&!n&&p!==""?` +`:"")+xK(p,e),a=n}return o}function xK(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,o,a=0,n,u=0,A=0,p="";o=r.exec(t);)A=o.index,A-a>e&&(n=u>a?u:A,p+=` +`+t.slice(a,n),a=n+1),u=A;return p+=` +`,t.length-a>e&&u>a?p+=t.slice(a,u)+` +`+t.slice(u+1):p+=t.slice(a),p.slice(1)}function O6e(t){for(var e="",r,o,a,n=0;n=55296&&r<=56319&&(o=t.charCodeAt(n+1),o>=56320&&o<=57343)){e+=vK((r-55296)*1024+o-56320+65536),n++;continue}a=vo[r],e+=!a&&my(r)?t[n]:a||vK(r)}return e}function M6e(t,e,r){var o="",a=t.tag,n,u;for(n=0,u=r.length;n1024&&(E+="? "),E+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),$g(t,e,h,!1,!1)&&(E+=t.dump,o+=E));t.tag=a,t.dump="{"+o+"}"}function H6e(t,e,r,o){var a="",n=t.tag,u=Object.keys(r),A,p,h,E,I,v;if(t.sortKeys===!0)u.sort();else if(typeof t.sortKeys=="function")u.sort(t.sortKeys);else if(t.sortKeys)throw new tI("sortKeys must be a boolean or a function");for(A=0,p=u.length;A1024,I&&(t.dump&&$w===t.dump.charCodeAt(0)?v+="?":v+="? "),v+=t.dump,I&&(v+=ET(t,e)),$g(t,e+1,E,!0,I)&&(t.dump&&$w===t.dump.charCodeAt(0)?v+=":":v+=": ",v+=t.dump,a+=v));t.tag=n,t.dump=a||"{}"}function kK(t,e,r){var o,a,n,u,A,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,u=a.length;n tag resolver accepts not "'+p+'" style');t.dump=o}return!0}return!1}function $g(t,e,r,o,a,n){t.tag=null,t.dump=r,kK(t,r,!1)||kK(t,r,!0);var u=QK.call(t.dump);o&&(o=t.flowLevel<0||t.flowLevel>e);var A=u==="[object Object]"||u==="[object Array]",p,h;if(A&&(p=t.duplicates.indexOf(r),h=p!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&e>0)&&(a=!1),h&&t.usedDuplicates[p])t.dump="*ref_"+p;else{if(A&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),u==="[object Object]")o&&Object.keys(t.dump).length!==0?(H6e(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(_6e(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(u==="[object Array]"){var E=t.noArrayIndent&&e>0?e-1:e;o&&t.dump.length!==0?(U6e(t,E,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(M6e(t,E,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(u==="[object String]")t.tag!=="?"&&N6e(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new tI("unacceptable kind of an object to dump "+u)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function j6e(t,e){var r=[],o=[],a,n;for(CT(t,r,o),a=0,n=o.length;a{"use strict";var VD=BK(),KK=WK();function JD(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}ki.exports.Type=os();ki.exports.Schema=Jg();ki.exports.FAILSAFE_SCHEMA=HD();ki.exports.JSON_SCHEMA=pT();ki.exports.CORE_SCHEMA=hT();ki.exports.DEFAULT_SAFE_SCHEMA=py();ki.exports.DEFAULT_FULL_SCHEMA=Xw();ki.exports.load=VD.load;ki.exports.loadAll=VD.loadAll;ki.exports.safeLoad=VD.safeLoad;ki.exports.safeLoadAll=VD.safeLoadAll;ki.exports.dump=KK.dump;ki.exports.safeDump=KK.safeDump;ki.exports.YAMLException=Ay();ki.exports.MINIMAL_SCHEMA=HD();ki.exports.SAFE_SCHEMA=py();ki.exports.DEFAULT_SCHEMA=Xw();ki.exports.scan=JD("scan");ki.exports.parse=JD("parse");ki.exports.compose=JD("compose");ki.exports.addConstructor=JD("addConstructor")});var zK=_((pxt,JK)=>{"use strict";var q6e=VK();JK.exports=q6e});var ZK=_((hxt,XK)=>{"use strict";function Y6e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function ed(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,ed)}Y6e(ed,Error);ed.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I({[pt]:Le})))},fe=function($){return $},ce=function($){return $},me=sa("correct indentation"),he=" ",Be=Qn(" ",!1),we=function($){return $.length===nr*It},g=function($){return $.length===(nr+1)*It},Ee=function(){return nr++,!0},Se=function(){return nr--,!0},le=function(){return SA()},ne=sa("pseudostring"),ee=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,Ie=hi(["\r",` +`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),Fe=/^[^\r\n\t ,\][{}:#"']/,At=hi(["\r",` +`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),H=function(){return SA().replace(/^ *| *$/g,"")},at="--",Re=Qn("--",!1),ke=/^[a-zA-Z\/0-9]/,xe=hi([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),He=/^[^\r\n\t :,]/,Te=hi(["\r",` +`," "," ",":",","],!0,!1),Je="null",je=Qn("null",!1),b=function(){return null},w="true",P=Qn("true",!1),y=function(){return!0},F="false",z=Qn("false",!1),X=function(){return!1},Z=sa("string"),ie='"',Pe=Qn('"',!1),Ne=function(){return""},ot=function($){return $},dt=function($){return $.join("")},Gt=/^[^"\\\0-\x1F\x7F]/,$t=hi(['"',"\\",["\0",""],"\x7F"],!0,!1),bt='\\"',an=Qn('\\"',!1),Qr=function(){return'"'},mr="\\\\",br=Qn("\\\\",!1),Wr=function(){return"\\"},Kn="\\/",Ns=Qn("\\/",!1),Ti=function(){return"/"},ps="\\b",io=Qn("\\b",!1),Pi=function(){return"\b"},Ls="\\f",so=Qn("\\f",!1),cc=function(){return"\f"},cu="\\n",lp=Qn("\\n",!1),cp=function(){return` +`},Os="\\r",Dn=Qn("\\r",!1),oo=function(){return"\r"},Ms="\\t",ml=Qn("\\t",!1),yl=function(){return" "},ao="\\u",Vn=Qn("\\u",!1),On=function($,ye,Le,pt){return String.fromCharCode(parseInt(`0x${$}${ye}${Le}${pt}`))},Ni=/^[0-9a-fA-F]/,Mn=hi([["0","9"],["a","f"],["A","F"]],!1,!1),_i=sa("blank space"),tr=/^[ \t]/,Oe=hi([" "," "],!1,!1),ii=sa("white space"),Ma=/^[ \t\n\r]/,hr=hi([" "," ",` +`,"\r"],!1,!1),uc=`\r +`,uu=Qn(`\r +`,!1),Ac=` +`,El=Qn(` +`,!1),DA="\r",Au=Qn("\r",!1),Ce=0,Rt=0,fc=[{line:1,column:1}],Hi=0,fu=[],Yt=0,Cl;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function SA(){return t.substring(Rt,Ce)}function up(){return _o(Rt,Ce)}function pc($,ye){throw ye=ye!==void 0?ye:_o(Rt,Ce),gc([sa($)],t.substring(Rt,Ce),ye)}function PA($,ye){throw ye=ye!==void 0?ye:_o(Rt,Ce),lo($,ye)}function Qn($,ye){return{type:"literal",text:$,ignoreCase:ye}}function hi($,ye,Le){return{type:"class",parts:$,inverted:ye,ignoreCase:Le}}function hc(){return{type:"any"}}function bA(){return{type:"end"}}function sa($){return{type:"other",description:$}}function Li($){var ye=fc[$],Le;if(ye)return ye;for(Le=$-1;!fc[Le];)Le--;for(ye=fc[Le],ye={line:ye.line,column:ye.column};Le<$;)t.charCodeAt(Le)===10?(ye.line++,ye.column=1):ye.column++,Le++;return fc[$]=ye,ye}function _o($,ye){var Le=Li($),pt=Li(ye);return{start:{offset:$,line:Le.line,column:Le.column},end:{offset:ye,line:pt.line,column:pt.column}}}function Ze($){CeHi&&(Hi=Ce,fu=[]),fu.push($))}function lo($,ye){return new ed($,null,null,ye)}function gc($,ye,Le){return new ed(ed.buildMessage($,ye),$,ye,Le)}function pu(){var $;return $=xA(),$}function ji(){var $,ye,Le;for($=Ce,ye=[],Le=hu();Le!==r;)ye.push(Le),Le=hu();return ye!==r&&(Rt=$,ye=n(ye)),$=ye,$}function hu(){var $,ye,Le,pt,ht;return $=Ce,ye=hs(),ye!==r?(t.charCodeAt(Ce)===45?(Le=u,Ce++):(Le=r,Yt===0&&Ze(A)),Le!==r?(pt=Sn(),pt!==r?(ht=dc(),ht!==r?(Rt=$,ye=p(ht),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$}function xA(){var $,ye,Le;for($=Ce,ye=[],Le=Ua();Le!==r;)ye.push(Le),Le=Ua();return ye!==r&&(Rt=$,ye=h(ye)),$=ye,$}function Ua(){var $,ye,Le,pt,ht,Tt,er,$r,Gi;if($=Ce,ye=Sn(),ye===r&&(ye=null),ye!==r){if(Le=Ce,t.charCodeAt(Ce)===35?(pt=E,Ce++):(pt=r,Yt===0&&Ze(I)),pt!==r){if(ht=[],Tt=Ce,er=Ce,Yt++,$r=tt(),Yt--,$r===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?($r=t.charAt(Ce),Ce++):($r=r,Yt===0&&Ze(v)),$r!==r?(er=[er,$r],Tt=er):(Ce=Tt,Tt=r)):(Ce=Tt,Tt=r),Tt!==r)for(;Tt!==r;)ht.push(Tt),Tt=Ce,er=Ce,Yt++,$r=tt(),Yt--,$r===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?($r=t.charAt(Ce),Ce++):($r=r,Yt===0&&Ze(v)),$r!==r?(er=[er,$r],Tt=er):(Ce=Tt,Tt=r)):(Ce=Tt,Tt=r);else ht=r;ht!==r?(pt=[pt,ht],Le=pt):(Ce=Le,Le=r)}else Ce=Le,Le=r;if(Le===r&&(Le=null),Le!==r){if(pt=[],ht=We(),ht!==r)for(;ht!==r;)pt.push(ht),ht=We();else pt=r;pt!==r?(Rt=$,ye=x(),$=ye):(Ce=$,$=r)}else Ce=$,$=r}else Ce=$,$=r;if($===r&&($=Ce,ye=hs(),ye!==r?(Le=oa(),Le!==r?(pt=Sn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(Ce)===58?(ht=C,Ce++):(ht=r,Yt===0&&Ze(R)),ht!==r?(Tt=Sn(),Tt===r&&(Tt=null),Tt!==r?(er=dc(),er!==r?(Rt=$,ye=L(Le,er),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,ye=hs(),ye!==r?(Le=co(),Le!==r?(pt=Sn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(Ce)===58?(ht=C,Ce++):(ht=r,Yt===0&&Ze(R)),ht!==r?(Tt=Sn(),Tt===r&&(Tt=null),Tt!==r?(er=dc(),er!==r?(Rt=$,ye=L(Le,er),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))){if($=Ce,ye=hs(),ye!==r)if(Le=co(),Le!==r)if(pt=Sn(),pt!==r)if(ht=aa(),ht!==r){if(Tt=[],er=We(),er!==r)for(;er!==r;)Tt.push(er),er=We();else Tt=r;Tt!==r?(Rt=$,ye=L(Le,ht),$=ye):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;if($===r)if($=Ce,ye=hs(),ye!==r)if(Le=co(),Le!==r){if(pt=[],ht=Ce,Tt=Sn(),Tt===r&&(Tt=null),Tt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?($r=Sn(),$r===r&&($r=null),$r!==r?(Gi=co(),Gi!==r?(Rt=ht,Tt=te(Le,Gi),ht=Tt):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r),ht!==r)for(;ht!==r;)pt.push(ht),ht=Ce,Tt=Sn(),Tt===r&&(Tt=null),Tt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?($r=Sn(),$r===r&&($r=null),$r!==r?(Gi=co(),Gi!==r?(Rt=ht,Tt=te(Le,Gi),ht=Tt):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r)):(Ce=ht,ht=r);else pt=r;pt!==r?(ht=Sn(),ht===r&&(ht=null),ht!==r?(t.charCodeAt(Ce)===58?(Tt=C,Ce++):(Tt=r,Yt===0&&Ze(R)),Tt!==r?(er=Sn(),er===r&&(er=null),er!==r?($r=dc(),$r!==r?(Rt=$,ye=ae(Le,pt,$r),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r}return $}function dc(){var $,ye,Le,pt,ht,Tt,er;if($=Ce,ye=Ce,Yt++,Le=Ce,pt=tt(),pt!==r?(ht=_t(),ht!==r?(t.charCodeAt(Ce)===45?(Tt=u,Ce++):(Tt=r,Yt===0&&Ze(A)),Tt!==r?(er=Sn(),er!==r?(pt=[pt,ht,Tt,er],Le=pt):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r),Yt--,Le!==r?(Ce=ye,ye=void 0):ye=r,ye!==r?(Le=We(),Le!==r?(pt=Fn(),pt!==r?(ht=ji(),ht!==r?(Tt=Ci(),Tt!==r?(Rt=$,ye=fe(ht),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,ye=tt(),ye!==r?(Le=Fn(),Le!==r?(pt=xA(),pt!==r?(ht=Ci(),ht!==r?(Rt=$,ye=fe(pt),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))if($=Ce,ye=Us(),ye!==r){if(Le=[],pt=We(),pt!==r)for(;pt!==r;)Le.push(pt),pt=We();else Le=r;Le!==r?(Rt=$,ye=ce(ye),$=ye):(Ce=$,$=r)}else Ce=$,$=r;return $}function hs(){var $,ye,Le;for(Yt++,$=Ce,ye=[],t.charCodeAt(Ce)===32?(Le=he,Ce++):(Le=r,Yt===0&&Ze(Be));Le!==r;)ye.push(Le),t.charCodeAt(Ce)===32?(Le=he,Ce++):(Le=r,Yt===0&&Ze(Be));return ye!==r?(Rt=Ce,Le=we(ye),Le?Le=void 0:Le=r,Le!==r?(ye=[ye,Le],$=ye):(Ce=$,$=r)):(Ce=$,$=r),Yt--,$===r&&(ye=r,Yt===0&&Ze(me)),$}function _t(){var $,ye,Le;for($=Ce,ye=[],t.charCodeAt(Ce)===32?(Le=he,Ce++):(Le=r,Yt===0&&Ze(Be));Le!==r;)ye.push(Le),t.charCodeAt(Ce)===32?(Le=he,Ce++):(Le=r,Yt===0&&Ze(Be));return ye!==r?(Rt=Ce,Le=g(ye),Le?Le=void 0:Le=r,Le!==r?(ye=[ye,Le],$=ye):(Ce=$,$=r)):(Ce=$,$=r),$}function Fn(){var $;return Rt=Ce,$=Ee(),$?$=void 0:$=r,$}function Ci(){var $;return Rt=Ce,$=Se(),$?$=void 0:$=r,$}function oa(){var $;return $=ds(),$===r&&($=la()),$}function co(){var $,ye,Le;if($=ds(),$===r){if($=Ce,ye=[],Le=Ho(),Le!==r)for(;Le!==r;)ye.push(Le),Le=Ho();else ye=r;ye!==r&&(Rt=$,ye=le()),$=ye}return $}function Us(){var $;return $=wi(),$===r&&($=gs(),$===r&&($=ds(),$===r&&($=la()))),$}function aa(){var $;return $=wi(),$===r&&($=ds(),$===r&&($=Ho())),$}function la(){var $,ye,Le,pt,ht,Tt;if(Yt++,$=Ce,ee.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(Ie)),ye!==r){for(Le=[],pt=Ce,ht=Sn(),ht===r&&(ht=null),ht!==r?(Fe.test(t.charAt(Ce))?(Tt=t.charAt(Ce),Ce++):(Tt=r,Yt===0&&Ze(At)),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);pt!==r;)Le.push(pt),pt=Ce,ht=Sn(),ht===r&&(ht=null),ht!==r?(Fe.test(t.charAt(Ce))?(Tt=t.charAt(Ce),Ce++):(Tt=r,Yt===0&&Ze(At)),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);Le!==r?(Rt=$,ye=H(),$=ye):(Ce=$,$=r)}else Ce=$,$=r;return Yt--,$===r&&(ye=r,Yt===0&&Ze(ne)),$}function Ho(){var $,ye,Le,pt,ht;if($=Ce,t.substr(Ce,2)===at?(ye=at,Ce+=2):(ye=r,Yt===0&&Ze(Re)),ye===r&&(ye=null),ye!==r)if(ke.test(t.charAt(Ce))?(Le=t.charAt(Ce),Ce++):(Le=r,Yt===0&&Ze(xe)),Le!==r){for(pt=[],He.test(t.charAt(Ce))?(ht=t.charAt(Ce),Ce++):(ht=r,Yt===0&&Ze(Te));ht!==r;)pt.push(ht),He.test(t.charAt(Ce))?(ht=t.charAt(Ce),Ce++):(ht=r,Yt===0&&Ze(Te));pt!==r?(Rt=$,ye=H(),$=ye):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;return $}function wi(){var $,ye;return $=Ce,t.substr(Ce,4)===Je?(ye=Je,Ce+=4):(ye=r,Yt===0&&Ze(je)),ye!==r&&(Rt=$,ye=b()),$=ye,$}function gs(){var $,ye;return $=Ce,t.substr(Ce,4)===w?(ye=w,Ce+=4):(ye=r,Yt===0&&Ze(P)),ye!==r&&(Rt=$,ye=y()),$=ye,$===r&&($=Ce,t.substr(Ce,5)===F?(ye=F,Ce+=5):(ye=r,Yt===0&&Ze(z)),ye!==r&&(Rt=$,ye=X()),$=ye),$}function ds(){var $,ye,Le,pt;return Yt++,$=Ce,t.charCodeAt(Ce)===34?(ye=ie,Ce++):(ye=r,Yt===0&&Ze(Pe)),ye!==r?(t.charCodeAt(Ce)===34?(Le=ie,Ce++):(Le=r,Yt===0&&Ze(Pe)),Le!==r?(Rt=$,ye=Ne(),$=ye):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,t.charCodeAt(Ce)===34?(ye=ie,Ce++):(ye=r,Yt===0&&Ze(Pe)),ye!==r?(Le=ms(),Le!==r?(t.charCodeAt(Ce)===34?(pt=ie,Ce++):(pt=r,Yt===0&&Ze(Pe)),pt!==r?(Rt=$,ye=ot(Le),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)),Yt--,$===r&&(ye=r,Yt===0&&Ze(Z)),$}function ms(){var $,ye,Le;if($=Ce,ye=[],Le=_s(),Le!==r)for(;Le!==r;)ye.push(Le),Le=_s();else ye=r;return ye!==r&&(Rt=$,ye=dt(ye)),$=ye,$}function _s(){var $,ye,Le,pt,ht,Tt;return Gt.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze($t)),$===r&&($=Ce,t.substr(Ce,2)===bt?(ye=bt,Ce+=2):(ye=r,Yt===0&&Ze(an)),ye!==r&&(Rt=$,ye=Qr()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===mr?(ye=mr,Ce+=2):(ye=r,Yt===0&&Ze(br)),ye!==r&&(Rt=$,ye=Wr()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Kn?(ye=Kn,Ce+=2):(ye=r,Yt===0&&Ze(Ns)),ye!==r&&(Rt=$,ye=Ti()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===ps?(ye=ps,Ce+=2):(ye=r,Yt===0&&Ze(io)),ye!==r&&(Rt=$,ye=Pi()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Ls?(ye=Ls,Ce+=2):(ye=r,Yt===0&&Ze(so)),ye!==r&&(Rt=$,ye=cc()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===cu?(ye=cu,Ce+=2):(ye=r,Yt===0&&Ze(lp)),ye!==r&&(Rt=$,ye=cp()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Os?(ye=Os,Ce+=2):(ye=r,Yt===0&&Ze(Dn)),ye!==r&&(Rt=$,ye=oo()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===Ms?(ye=Ms,Ce+=2):(ye=r,Yt===0&&Ze(ml)),ye!==r&&(Rt=$,ye=yl()),$=ye,$===r&&($=Ce,t.substr(Ce,2)===ao?(ye=ao,Ce+=2):(ye=r,Yt===0&&Ze(Vn)),ye!==r?(Le=Un(),Le!==r?(pt=Un(),pt!==r?(ht=Un(),ht!==r?(Tt=Un(),Tt!==r?(Rt=$,ye=On(Le,pt,ht,Tt),$=ye):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)))))))))),$}function Un(){var $;return Ni.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze(Mn)),$}function Sn(){var $,ye;if(Yt++,$=[],tr.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(Oe)),ye!==r)for(;ye!==r;)$.push(ye),tr.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(Oe));else $=r;return Yt--,$===r&&(ye=r,Yt===0&&Ze(_i)),$}function ys(){var $,ye;if(Yt++,$=[],Ma.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(hr)),ye!==r)for(;ye!==r;)$.push(ye),Ma.test(t.charAt(Ce))?(ye=t.charAt(Ce),Ce++):(ye=r,Yt===0&&Ze(hr));else $=r;return Yt--,$===r&&(ye=r,Yt===0&&Ze(ii)),$}function We(){var $,ye,Le,pt,ht,Tt;if($=Ce,ye=tt(),ye!==r){for(Le=[],pt=Ce,ht=Sn(),ht===r&&(ht=null),ht!==r?(Tt=tt(),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);pt!==r;)Le.push(pt),pt=Ce,ht=Sn(),ht===r&&(ht=null),ht!==r?(Tt=tt(),Tt!==r?(ht=[ht,Tt],pt=ht):(Ce=pt,pt=r)):(Ce=pt,pt=r);Le!==r?(ye=[ye,Le],$=ye):(Ce=$,$=r)}else Ce=$,$=r;return $}function tt(){var $;return t.substr(Ce,2)===uc?($=uc,Ce+=2):($=r,Yt===0&&Ze(uu)),$===r&&(t.charCodeAt(Ce)===10?($=Ac,Ce++):($=r,Yt===0&&Ze(El)),$===r&&(t.charCodeAt(Ce)===13?($=DA,Ce++):($=r,Yt===0&&Ze(Au)))),$}let It=2,nr=0;if(Cl=a(),Cl!==r&&Ce===t.length)return Cl;throw Cl!==r&&Ce"u"?!0:typeof t=="object"&&t!==null&&!Array.isArray(t)?Object.keys(t).every(e=>rV(t[e])):!1}function BT(t,e,r){if(t===null)return`null +`;if(typeof t=="number"||typeof t=="boolean")return`${t.toString()} +`;if(typeof t=="string")return`${eV(t)} +`;if(Array.isArray(t)){if(t.length===0)return`[] +`;let o=" ".repeat(e);return` +${t.map(n=>`${o}- ${BT(n,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let[o,a]=t instanceof zD?[t.data,!1]:[t,!0],n=" ".repeat(e),u=Object.keys(o);a&&u.sort((p,h)=>{let E=$K.indexOf(p),I=$K.indexOf(h);return E===-1&&I===-1?ph?1:0:E!==-1&&I===-1?-1:E===-1&&I!==-1?1:E-I});let A=u.filter(p=>!rV(o[p])).map((p,h)=>{let E=o[p],I=eV(p),v=BT(E,e+1,!0),x=h>0||r?n:"",C=I.length>1024?`? ${I} +${x}:`:`${I}:`,R=v.startsWith(` +`)?v:` ${v}`;return`${x}${C}${R}`}).join(e===0?` +`:"")||` +`;return r?` +${A}`:`${A}`}throw new Error(`Unsupported value type (${t})`)}function Ba(t){try{let e=BT(t,0,!1);return e!==` +`?e:""}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}function V6e(t){return t.endsWith(` +`)||(t+=` +`),(0,tV.parse)(t)}function z6e(t){if(J6e.test(t))return V6e(t);let e=(0,XD.safeLoad)(t,{schema:XD.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!="object")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error("Expected an indexed object, got an array instead. Does your file follow Yaml's rules?");return e}function Ki(t){return z6e(t)}var XD,tV,K6e,$K,zD,J6e,nV=Et(()=>{XD=$e(zK()),tV=$e(ZK()),K6e=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,$K=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],zD=class{constructor(e){this.data=e}};Ba.PreserveOrdering=zD;J6e=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i});var rI={};Vt(rI,{parseResolution:()=>MD,parseShell:()=>ND,parseSyml:()=>Ki,stringifyArgument:()=>cT,stringifyArgumentSegment:()=>uT,stringifyArithmeticExpression:()=>OD,stringifyCommand:()=>lT,stringifyCommandChain:()=>uy,stringifyCommandChainThen:()=>aT,stringifyCommandLine:()=>LD,stringifyCommandLineThen:()=>oT,stringifyEnvSegment:()=>TD,stringifyRedirectArgument:()=>Jw,stringifyResolution:()=>UD,stringifyShell:()=>cy,stringifyShellLine:()=>cy,stringifySyml:()=>Ba,stringifyValueArgument:()=>Yg});var Nl=Et(()=>{rW();oW();nV()});var sV=_((Ext,vT)=>{"use strict";var X6e=t=>{let e=!1,r=!1,o=!1;for(let a=0;a{if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let r=a=>e.pascalCase?a.charAt(0).toUpperCase()+a.slice(1):a;return Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=X6e(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(a,n)=>n.toUpperCase()).replace(/\d+(\w|$)/g,a=>a.toUpperCase()),r(t))};vT.exports=iV;vT.exports.default=iV});var oV=_((Cxt,Z6e)=>{Z6e.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var td=_(Xa=>{"use strict";var lV=oV(),ju=process.env;Object.defineProperty(Xa,"_vendors",{value:lV.map(function(t){return t.constant})});Xa.name=null;Xa.isPR=null;lV.forEach(function(t){let r=(Array.isArray(t.env)?t.env:[t.env]).every(function(o){return aV(o)});if(Xa[t.constant]=r,r)switch(Xa.name=t.name,typeof t.pr){case"string":Xa.isPR=!!ju[t.pr];break;case"object":"env"in t.pr?Xa.isPR=t.pr.env in ju&&ju[t.pr.env]!==t.pr.ne:"any"in t.pr?Xa.isPR=t.pr.any.some(function(o){return!!ju[o]}):Xa.isPR=aV(t.pr);break;default:Xa.isPR=null}});Xa.isCI=!!(ju.CI||ju.CONTINUOUS_INTEGRATION||ju.BUILD_NUMBER||ju.RUN_ID||Xa.name);function aV(t){return typeof t=="string"?!!ju[t]:Object.keys(t).every(function(e){return ju[e]===t[e]})}});var Hn,cn,rd,DT,ZD,cV,ST,PT,$D=Et(()=>{(function(t){t.StartOfInput="\0",t.EndOfInput="",t.EndOfPartialInput=""})(Hn||(Hn={}));(function(t){t[t.InitialNode=0]="InitialNode",t[t.SuccessNode=1]="SuccessNode",t[t.ErrorNode=2]="ErrorNode",t[t.CustomNode=3]="CustomNode"})(cn||(cn={}));rd=-1,DT=/^(-h|--help)(?:=([0-9]+))?$/,ZD=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,cV=/^-[a-zA-Z]{2,}$/,ST=/^([^=]+)=([\s\S]*)$/,PT=process.env.DEBUG_CLI==="1"});var it,yy,eS,bT,tS=Et(()=>{$D();it=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},yy=class extends Error{constructor(e,r){if(super(),this.input=e,this.candidates=r,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(o=>o.reason!==null&&o.reason===r[0].reason)){let[{reason:o}]=this.candidates;this.message=`${o} + +${this.candidates.map(({usage:a})=>`$ ${a}`).join(` +`)}`}else if(this.candidates.length===1){let[{usage:o}]=this.candidates;this.message=`Command not found; did you mean: + +$ ${o} +${bT(e)}`}else this.message=`Command not found; did you mean one of: + +${this.candidates.map(({usage:o},a)=>`${`${a}.`.padStart(4)} ${o}`).join(` +`)} + +${bT(e)}`}},eS=class extends Error{constructor(e,r){super(),this.input=e,this.usages=r,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: + +${this.usages.map((o,a)=>`${`${a}.`.padStart(4)} ${o}`).join(` +`)} + +${bT(e)}`}},bT=t=>`While running ${t.filter(e=>e!==Hn.EndOfInput&&e!==Hn.EndOfPartialInput).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`});function $6e(t){let e=t.split(` +`),r=e.filter(a=>a.match(/\S/)),o=r.length>0?r.reduce((a,n)=>Math.min(a,n.length-n.trimStart().length),Number.MAX_VALUE):0;return e.map(a=>a.slice(o).trimRight()).join(` +`)}function Do(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` +`),t=$6e(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 + +`),t=t.replace(/\n(\n)?\n*/g,(o,a)=>a||" "),r&&(t=t.split(/\n/).map(o=>{let a=o.match(/^\s*[*-][\t ]+(.*)/);if(!a)return o.match(/(.{1,80})(?: |$)/g).join(` +`);let n=o.length-o.trimStart().length;return a[1].match(new RegExp(`(.{1,${78-n}})(?: |$)`,"g")).map((u,A)=>" ".repeat(n)+(A===0?"- ":" ")+u).join(` +`)}).join(` + +`)),t=t.replace(/(`+)((?:.|[\n])*?)\1/g,(o,a,n)=>e.code(a+n+a)),t=t.replace(/(\*\*)((?:.|[\n])*?)\1/g,(o,a,n)=>e.bold(a+n+a)),t?`${t} +`:""}var xT,uV,AV,kT=Et(()=>{xT=Array(80).fill("\u2501");for(let t=0;t<=24;++t)xT[xT.length-t]=`\x1B[38;5;${232+t}m\u2501`;uV={header:t=>`\x1B[1m\u2501\u2501\u2501 ${t}${t.length<80-5?` ${xT.slice(t.length+5).join("")}`:":"}\x1B[0m`,bold:t=>`\x1B[1m${t}\x1B[22m`,error:t=>`\x1B[31m\x1B[1m${t}\x1B[22m\x1B[39m`,code:t=>`\x1B[36m${t}\x1B[39m`},AV={header:t=>t,bold:t=>t,error:t=>t,code:t=>t}});function Ko(t){return{...t,[nI]:!0}}function Gu(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function rS(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(!r)return"validation failed";let[,o,a]=r;return e&&(a=a[0].toLowerCase()+a.slice(1)),a=o!=="."||!e?`${o.replace(/^\.(\[|$)/,"$1")}: ${a}`:`: ${a}`,a}function iI(t,e){return e.length===1?new it(`${t}${rS(e[0],{mergeName:!0})}`):new it(`${t}: +${e.map(r=>` +- ${rS(r)}`).join("")}`)}function nd(t,e,r){if(typeof r>"u")return e;let o=[],a=[],n=A=>{let p=e;return e=A,n.bind(null,p)};if(!r(e,{errors:o,coercions:a,coercion:n}))throw iI(`Invalid value for ${t}`,o);for(let[,A]of a)A();return e}var nI,Ef=Et(()=>{tS();nI=Symbol("clipanion/isOption")});var Vo={};Vt(Vo,{KeyRelationship:()=>qu,TypeAssertionError:()=>Kp,applyCascade:()=>aI,as:()=>yje,assert:()=>gje,assertWithErrors:()=>dje,cascade:()=>oS,fn:()=>Eje,hasAtLeastOneKey:()=>OT,hasExactLength:()=>dV,hasForbiddenKeys:()=>Mje,hasKeyRelationship:()=>cI,hasMaxLength:()=>wje,hasMinLength:()=>Cje,hasMutuallyExclusiveKeys:()=>Uje,hasRequiredKeys:()=>Oje,hasUniqueItems:()=>Ije,isArray:()=>nS,isAtLeast:()=>NT,isAtMost:()=>Dje,isBase64:()=>Rje,isBoolean:()=>aje,isDate:()=>cje,isDict:()=>fje,isEnum:()=>Ks,isHexColor:()=>Fje,isISO8601:()=>Qje,isInExclusiveRange:()=>Pje,isInInclusiveRange:()=>Sje,isInstanceOf:()=>hje,isInteger:()=>LT,isJSON:()=>Tje,isLiteral:()=>pV,isLowerCase:()=>bje,isMap:()=>Aje,isNegative:()=>Bje,isNullable:()=>Lje,isNumber:()=>RT,isObject:()=>hV,isOneOf:()=>TT,isOptional:()=>Nje,isPartial:()=>pje,isPayload:()=>lje,isPositive:()=>vje,isRecord:()=>sS,isSet:()=>uje,isString:()=>Cy,isTuple:()=>iS,isUUID4:()=>kje,isUnknown:()=>FT,isUpperCase:()=>xje,makeTrait:()=>gV,makeValidator:()=>Hr,matchesRegExp:()=>oI,softAssert:()=>mje});function jn(t){return t===null?"null":t===void 0?"undefined":t===""?"an empty string":typeof t=="symbol"?`<${t.toString()}>`:Array.isArray(t)?"an array":JSON.stringify(t)}function Ey(t,e){if(t.length===0)return"nothing";if(t.length===1)return jn(t[0]);let r=t.slice(0,-1),o=t[t.length-1],a=t.length>2?`, ${e} `:` ${e} `;return`${r.map(n=>jn(n)).join(", ")}${a}${jn(o)}`}function Wp(t,e){var r,o,a;return typeof e=="number"?`${(r=t?.p)!==null&&r!==void 0?r:"."}[${e}]`:eje.test(e)?`${(o=t?.p)!==null&&o!==void 0?o:""}.${e}`:`${(a=t?.p)!==null&&a!==void 0?a:"."}[${JSON.stringify(e)}]`}function QT(t,e,r){return t===1?e:r}function pr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}function sje(t,e){return r=>{t[e]=r}}function Yu(t,e){return r=>{let o=t[e];return t[e]=r,Yu(t,e).bind(null,o)}}function sI(t,e,r){let o=()=>(t(r()),a),a=()=>(t(e),o);return o}function FT(){return Hr({test:(t,e)=>!0})}function pV(t){return Hr({test:(e,r)=>e!==t?pr(r,`Expected ${jn(t)} (got ${jn(e)})`):!0})}function Cy(){return Hr({test:(t,e)=>typeof t!="string"?pr(e,`Expected a string (got ${jn(t)})`):!0})}function Ks(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>typeof a=="string"||typeof a=="number"),o=new Set(e);return o.size===1?pV([...o][0]):Hr({test:(a,n)=>o.has(a)?!0:r?pr(n,`Expected one of ${Ey(e,"or")} (got ${jn(a)})`):pr(n,`Expected a valid enumeration value (got ${jn(a)})`)})}function aje(){return Hr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o=oje.get(t);if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a boolean (got ${jn(t)})`)}return!0}})}function RT(){return Hr({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"){let a;try{a=JSON.parse(t)}catch{}if(typeof a=="number")if(JSON.stringify(a)===t)o=a;else return pr(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a number (got ${jn(t)})`)}return!0}})}function lje(t){return Hr({test:(e,r)=>{var o;if(typeof r?.coercions>"u")return pr(r,"The isPayload predicate can only be used with coercion enabled");if(typeof r.coercion>"u")return pr(r,"Unbound coercion result");if(typeof e!="string")return pr(r,`Expected a string (got ${jn(e)})`);let a;try{a=JSON.parse(e)}catch{return pr(r,`Expected a JSON string (got ${jn(e)})`)}let n={value:a};return t(a,Object.assign(Object.assign({},r),{coercion:Yu(n,"value")}))?(r.coercions.push([(o=r.p)!==null&&o!==void 0?o:".",r.coercion.bind(null,n.value)]),!0):!1}})}function cje(){return Hr({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"&&fV.test(t))o=new Date(t);else{let a;if(typeof t=="string"){let n;try{n=JSON.parse(t)}catch{}typeof n=="number"&&(a=n)}else typeof t=="number"&&(a=t);if(typeof a<"u")if(Number.isSafeInteger(a)||!Number.isSafeInteger(a*1e3))o=new Date(a*1e3);else return pr(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a date (got ${jn(t)})`)}return!0}})}function nS(t,{delimiter:e}={}){return Hr({test:(r,o)=>{var a;let n=r;if(typeof r=="string"&&typeof e<"u"&&typeof o?.coercions<"u"){if(typeof o?.coercion>"u")return pr(o,"Unbound coercion result");r=r.split(e)}if(!Array.isArray(r))return pr(o,`Expected an array (got ${jn(r)})`);let u=!0;for(let A=0,p=r.length;A{var n,u;if(Object.getPrototypeOf(o).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A=[...o],p=[...o];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((E,I)=>E!==A[I])?new Set(p):o;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",sI(a.coercion,o,h)]),!0}else{let A=!0;for(let p of o)if(A=t(p,Object.assign({},a))&&A,!A&&a?.errors==null)break;return A}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A={value:o};return r(o,Object.assign(Object.assign({},a),{coercion:Yu(A,"value")}))?(a.coercions.push([(u=a.p)!==null&&u!==void 0?u:".",sI(a.coercion,o,()=>new Set(A.value))]),!0):!1}return pr(a,`Expected a set (got ${jn(o)})`)}})}function Aje(t,e){let r=nS(iS([t,e])),o=sS(e,{keys:t});return Hr({test:(a,n)=>{var u,A,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h=[...a],E=[...a];if(!r(E,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let I=()=>E.some((v,x)=>v[0]!==h[x][0]||v[1]!==h[x][1])?new Map(E):a;return n.coercions.push([(u=n.p)!==null&&u!==void 0?u:".",sI(n.coercion,a,I)]),!0}else{let h=!0;for(let[E,I]of a)if(h=t(E,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(I,Object.assign(Object.assign({},n),{p:Wp(n,E)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h={value:a};return Array.isArray(a)?r(a,Object.assign(Object.assign({},n),{coercion:void 0}))?(n.coercions.push([(A=n.p)!==null&&A!==void 0?A:".",sI(n.coercion,a,()=>new Map(h.value))]),!0):!1:o(a,Object.assign(Object.assign({},n),{coercion:Yu(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",sI(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return pr(n,`Expected a map (got ${jn(a)})`)}})}function iS(t,{delimiter:e}={}){let r=dV(t.length);return Hr({test:(o,a)=>{var n;if(typeof o=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");o=o.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)])}if(!Array.isArray(o))return pr(a,`Expected a tuple (got ${jn(o)})`);let u=r(o,Object.assign({},a));for(let A=0,p=o.length;A{var n;if(Array.isArray(o)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?pr(a,"Unbound coercion result"):r(o,Object.assign(Object.assign({},a),{coercion:void 0}))?(o=Object.fromEntries(o),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)]),!0):!1;if(typeof o!="object"||o===null)return pr(a,`Expected an object (got ${jn(o)})`);let u=Object.keys(o),A=!0;for(let p=0,h=u.length;p{if(typeof a!="object"||a===null)return pr(n,`Expected an object (got ${jn(a)})`);let u=new Set([...r,...Object.keys(a)]),A={},p=!0;for(let h of u){if(h==="constructor"||h==="__proto__")p=pr(Object.assign(Object.assign({},n),{p:Wp(n,h)}),"Unsafe property name");else{let E=Object.prototype.hasOwnProperty.call(t,h)?t[h]:void 0,I=Object.prototype.hasOwnProperty.call(a,h)?a[h]:void 0;typeof E<"u"?p=E(I,Object.assign(Object.assign({},n),{p:Wp(n,h),coercion:Yu(a,h)}))&&p:e===null?p=pr(Object.assign(Object.assign({},n),{p:Wp(n,h)}),`Extraneous property (got ${jn(I)})`):Object.defineProperty(A,h,{enumerable:!0,get:()=>I,set:sje(a,h)})}if(!p&&n?.errors==null)break}return e!==null&&(p||n?.errors!=null)&&(p=e(A,n)&&p),p}});return Object.assign(o,{properties:t})}function pje(t){return hV(t,{extra:sS(FT())})}function gV(t){return()=>t}function Hr({test:t}){return gV(t)()}function gje(t,e){if(!e(t))throw new Kp}function dje(t,e){let r=[];if(!e(t,{errors:r}))throw new Kp({errors:r})}function mje(t,e){}function yje(t,e,{coerce:r=!1,errors:o,throw:a}={}){let n=o?[]:void 0;if(!r){if(e(t,{errors:n}))return a?t:{value:t,errors:void 0};if(a)throw new Kp({errors:n});return{value:void 0,errors:n??!0}}let u={value:t},A=Yu(u,"value"),p=[];if(!e(t,{errors:n,coercion:A,coercions:p})){if(a)throw new Kp({errors:n});return{value:void 0,errors:n??!0}}for(let[,h]of p)h();return a?u.value:{value:u.value,errors:void 0}}function Eje(t,e){let r=iS(t);return(...o)=>{if(!r(o))throw new Kp;return e(...o)}}function Cje(t){return Hr({test:(e,r)=>e.length>=t?!0:pr(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)})}function wje(t){return Hr({test:(e,r)=>e.length<=t?!0:pr(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)})}function dV(t){return Hr({test:(e,r)=>e.length!==t?pr(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0})}function Ije({map:t}={}){return Hr({test:(e,r)=>{let o=new Set,a=new Set;for(let n=0,u=e.length;nt<=0?!0:pr(e,`Expected to be negative (got ${t})`)})}function vje(){return Hr({test:(t,e)=>t>=0?!0:pr(e,`Expected to be positive (got ${t})`)})}function NT(t){return Hr({test:(e,r)=>e>=t?!0:pr(r,`Expected to be at least ${t} (got ${e})`)})}function Dje(t){return Hr({test:(e,r)=>e<=t?!0:pr(r,`Expected to be at most ${t} (got ${e})`)})}function Sje(t,e){return Hr({test:(r,o)=>r>=t&&r<=e?!0:pr(o,`Expected to be in the [${t}; ${e}] range (got ${r})`)})}function Pje(t,e){return Hr({test:(r,o)=>r>=t&&re!==Math.round(e)?pr(r,`Expected to be an integer (got ${e})`):!t&&!Number.isSafeInteger(e)?pr(r,`Expected to be a safe integer (got ${e})`):!0})}function oI(t){return Hr({test:(e,r)=>t.test(e)?!0:pr(r,`Expected to match the pattern ${t.toString()} (got ${jn(e)})`)})}function bje(){return Hr({test:(t,e)=>t!==t.toLowerCase()?pr(e,`Expected to be all-lowercase (got ${t})`):!0})}function xje(){return Hr({test:(t,e)=>t!==t.toUpperCase()?pr(e,`Expected to be all-uppercase (got ${t})`):!0})}function kje(){return Hr({test:(t,e)=>ije.test(t)?!0:pr(e,`Expected to be a valid UUID v4 (got ${jn(t)})`)})}function Qje(){return Hr({test:(t,e)=>fV.test(t)?!0:pr(e,`Expected to be a valid ISO 8601 date string (got ${jn(t)})`)})}function Fje({alpha:t=!1}){return Hr({test:(e,r)=>(t?tje.test(e):rje.test(e))?!0:pr(r,`Expected to be a valid hexadecimal color string (got ${jn(e)})`)})}function Rje(){return Hr({test:(t,e)=>nje.test(t)?!0:pr(e,`Expected to be a valid base 64 string (got ${jn(t)})`)})}function Tje(t=FT()){return Hr({test:(e,r)=>{let o;try{o=JSON.parse(e)}catch{return pr(r,`Expected to be a valid JSON string (got ${jn(e)})`)}return t(o,r)}})}function oS(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Hr({test:(o,a)=>{var n,u;let A={value:o},p=typeof a?.coercions<"u"?Yu(A,"value"):void 0,h=typeof a?.coercions<"u"?[]:void 0;if(!t(o,Object.assign(Object.assign({},a),{coercion:p,coercions:h})))return!1;let E=[];if(typeof h<"u")for(let[,I]of h)E.push(I());try{if(typeof a?.coercions<"u"){if(A.value!==o){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,A.value)])}(u=a?.coercions)===null||u===void 0||u.push(...h)}return r.every(I=>I(A.value,a))}finally{for(let I of E)I()}}})}function aI(t,...e){let r=Array.isArray(e[0])?e[0]:e;return oS(t,r)}function Nje(t){return Hr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}function Lje(t){return Hr({test:(e,r)=>e===null?!0:t(e,r)})}function Oje(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)||p.push(h);return p.length>0?pr(u,`Missing required ${QT(p.length,"property","properties")} ${Ey(p,"and")}`):!0}})}function OT(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>Object.keys(n).some(h=>a(o,h,n))?!0:pr(u,`Missing at least one property from ${Ey(Array.from(o),"or")}`)})}function Mje(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>0?pr(u,`Forbidden ${QT(p.length,"property","properties")} ${Ey(p,"and")}`):!0}})}function Uje(t,e){var r;let o=new Set(t),a=lI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>1?pr(u,`Mutually exclusive properties ${Ey(p,"and")}`):!0}})}function cI(t,e,r,o){var a,n;let u=new Set((a=o?.ignore)!==null&&a!==void 0?a:[]),A=lI[(n=o?.missingIf)!==null&&n!==void 0?n:"missing"],p=new Set(r),h=_je[e],E=e===qu.Forbids?"or":"and";return Hr({test:(I,v)=>{let x=new Set(Object.keys(I));if(!A(x,t,I)||u.has(I[t]))return!0;let C=[];for(let R of p)(A(x,R,I)&&!u.has(I[R]))!==h.expect&&C.push(R);return C.length>=1?pr(v,`Property "${t}" ${h.message} ${QT(C.length,"property","properties")} ${Ey(C,E)}`):!0}})}var eje,tje,rje,nje,ije,fV,oje,hje,TT,Kp,lI,qu,_je,Za=Et(()=>{eje=/^[a-zA-Z_][a-zA-Z0-9_]*$/;tje=/^#[0-9a-f]{6}$/i,rje=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,nje=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,ije=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,fV=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/;oje=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]);hje=t=>Hr({test:(e,r)=>e instanceof t?!0:pr(r,`Expected an instance of ${t.name} (got ${jn(e)})`)}),TT=(t,{exclusive:e=!1}={})=>Hr({test:(r,o)=>{var a,n,u;let A=[],p=typeof o?.errors<"u"?[]:void 0;for(let h=0,E=t.length;h1?pr(o,`Expected to match exactly a single predicate (matched ${A.join(", ")})`):(u=o?.errors)===null||u===void 0||u.push(...p),!1}});Kp=class extends Error{constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=` +`;for(let o of e)r+=` +- ${o}`}super(r)}};lI={missing:(t,e)=>t.has(e),undefined:(t,e,r)=>t.has(e)&&typeof r[e]<"u",nil:(t,e,r)=>t.has(e)&&r[e]!=null,falsy:(t,e,r)=>t.has(e)&&!!r[e]};(function(t){t.Forbids="Forbids",t.Requires="Requires"})(qu||(qu={}));_je={[qu.Forbids]:{expect:!1,message:"forbids using"},[qu.Requires]:{expect:!0,message:"requires using"}}});var nt,Vp=Et(()=>{Ef();nt=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(Array.isArray(r)){let{isDict:a,isUnknown:n,applyCascade:u}=await Promise.resolve().then(()=>(Za(),Vo)),A=u(a(n()),r),p=[],h=[];if(!A(this,{errors:p,coercions:h}))throw iI("Invalid option schema",p);for(let[,I]of h)I()}else if(r!=null)throw new Error("Invalid command schema");let o=await this.execute();return typeof o<"u"?o:0}};nt.isOption=nI;nt.Default=[]});function va(t){PT&&console.log(t)}function yV(){let t={nodes:[]};for(let e=0;e{if(e.has(o))return;e.add(o);let a=t.nodes[o];for(let u of Object.values(a.statics))for(let{to:A}of u)r(A);for(let[,{to:u}]of a.dynamics)r(u);for(let{to:u}of a.shortcuts)r(u);let n=new Set(a.shortcuts.map(({to:u})=>u));for(;a.shortcuts.length>0;){let{to:u}=a.shortcuts.shift(),A=t.nodes[u];for(let[p,h]of Object.entries(A.statics)){let E=Object.prototype.hasOwnProperty.call(a.statics,p)?a.statics[p]:a.statics[p]=[];for(let I of h)E.some(({to:v})=>I.to===v)||E.push(I)}for(let[p,h]of A.dynamics)a.dynamics.some(([E,{to:I}])=>p===E&&h.to===I)||a.dynamics.push([p,h]);for(let p of A.shortcuts)n.has(p.to)||(a.shortcuts.push(p),n.add(p.to))}};r(cn.InitialNode)}function Gje(t,{prefix:e=""}={}){if(PT){va(`${e}Nodes are:`);for(let r=0;rE!==cn.ErrorNode).map(({state:E})=>({usage:E.candidateUsage,reason:null})));if(h.every(({node:E})=>E===cn.ErrorNode))throw new yy(e,h.map(({state:E})=>({usage:E.candidateUsage,reason:E.errorMessage})));o=Wje(h)}if(o.length>0){va(" Results:");for(let n of o)va(` - ${n.node} -> ${JSON.stringify(n.state)}`)}else va(" No results");return o}function Yje(t,e,{endToken:r=Hn.EndOfInput}={}){let o=qje(t,[...e,r]);return Kje(e,o.map(({state:a})=>a))}function Wje(t){let e=0;for(let{state:r}of t)r.path.length>e&&(e=r.path.length);return t.filter(({state:r})=>r.path.length===e)}function Kje(t,e){let r=e.filter(v=>v.selectedIndex!==null),o=r.filter(v=>!v.partial);if(o.length>0&&(r=o),r.length===0)throw new Error;let a=r.filter(v=>v.selectedIndex===rd||v.requiredOptions.every(x=>x.some(C=>v.options.find(R=>R.name===C))));if(a.length===0)throw new yy(t,r.map(v=>({usage:v.candidateUsage,reason:null})));let n=0;for(let v of a)v.path.length>n&&(n=v.path.length);let u=a.filter(v=>v.path.length===n),A=v=>v.positionals.filter(({extra:x})=>!x).length+v.options.length,p=u.map(v=>({state:v,positionalCount:A(v)})),h=0;for(let{positionalCount:v}of p)v>h&&(h=v);let E=p.filter(({positionalCount:v})=>v===h).map(({state:v})=>v),I=Vje(E);if(I.length>1)throw new eS(t,I.map(v=>v.candidateUsage));return I[0]}function Vje(t){let e=[],r=[];for(let o of t)o.selectedIndex===rd?r.push(o):e.push(o);return r.length>0&&e.push({...mV,path:EV(...r.map(o=>o.path)),options:r.reduce((o,a)=>o.concat(a.options),[])}),e}function EV(t,e,...r){return e===void 0?Array.from(t):EV(t.filter((o,a)=>o===e[a]),...r)}function $a(){return{dynamics:[],shortcuts:[],statics:{}}}function CV(t){return t===cn.SuccessNode||t===cn.ErrorNode}function MT(t,e=0){return{to:CV(t.to)?t.to:t.to>=cn.CustomNode?t.to+e-cn.CustomNode+1:t.to+e,reducer:t.reducer}}function Jje(t,e=0){let r=$a();for(let[o,a]of t.dynamics)r.dynamics.push([o,MT(a,e)]);for(let o of t.shortcuts)r.shortcuts.push(MT(o,e));for(let[o,a]of Object.entries(t.statics))r.statics[o]=a.map(n=>MT(n,e));return r}function Ps(t,e,r,o,a){t.nodes[e].dynamics.push([r,{to:o,reducer:a}])}function wy(t,e,r,o){t.nodes[e].shortcuts.push({to:r,reducer:o})}function Jo(t,e,r,o,a){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:o,reducer:a})}function aS(t,e,r,o,a){if(Array.isArray(e)){let[n,...u]=e;return t[n](r,o,a,...u)}else return t[e](r,o,a)}var mV,zje,UT,el,_T,Iy,lS=Et(()=>{$D();tS();mV={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:rd,partial:!1,tokens:[]};zje={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,o)=>!t.ignoreOptions&&e===o,isBatchOption:(t,e,r,o)=>!t.ignoreOptions&&cV.test(e)&&[...e.slice(1)].every(a=>o.has(`-${a}`)),isBoundOption:(t,e,r,o,a)=>{let n=e.match(ST);return!t.ignoreOptions&&!!n&&ZD.test(n[1])&&o.has(n[1])&&a.filter(u=>u.nameSet.includes(n[1])).every(u=>u.allowBinding)},isNegatedOption:(t,e,r,o)=>!t.ignoreOptions&&e===`--no-${o.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&DT.test(e),isUnsupportedOption:(t,e,r,o)=>!t.ignoreOptions&&e.startsWith("-")&&ZD.test(e)&&!o.has(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!ZD.test(e)},UT={setCandidateState:(t,e,r,o)=>({...t,...o}),setSelectedIndex:(t,e,r,o)=>({...t,selectedIndex:o}),setPartialIndex:(t,e,r,o)=>({...t,selectedIndex:o,partial:!0}),pushBatch:(t,e,r,o)=>{let a=t.options.slice(),n=t.tokens.slice();for(let u=1;u{let[,o,a]=e.match(ST),n=t.options.concat({name:o,value:a}),u=t.tokens.concat([{segmentIndex:r,type:"option",slice:[0,o.length],option:o},{segmentIndex:r,type:"assign",slice:[o.length,o.length+1]},{segmentIndex:r,type:"value",slice:[o.length+1,o.length+a.length+1]}]);return{...t,options:n,tokens:u}},pushPath:(t,e,r)=>{let o=t.path.concat(e),a=t.tokens.concat({segmentIndex:r,type:"path"});return{...t,path:o,tokens:a}},pushPositional:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!1}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtra:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!0}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtraNoLimits:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:el}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushTrue:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushFalse:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!1}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushUndefined:(t,e,r,o)=>{let a=t.options.concat({name:e,value:void 0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:e});return{...t,options:a,tokens:n}},pushStringValue:(t,e,r)=>{var o;let a=t.options[t.options.length-1],n=t.options.slice(),u=t.tokens.concat({segmentIndex:r,type:"value"});return a.value=((o=a.value)!==null&&o!==void 0?o:[]).concat([e]),{...t,options:n,tokens:u}},setStringValue:(t,e,r)=>{let o=t.options[t.options.length-1],a=t.options.slice(),n=t.tokens.concat({segmentIndex:r,type:"value"});return o.value=e,{...t,options:a,tokens:n}},inhibateOptions:t=>({...t,ignoreOptions:!0}),useHelp:(t,e,r,o)=>{let[,,a]=e.match(DT);return typeof a<"u"?{...t,options:[{name:"-c",value:String(o)},{name:"-i",value:a}]}:{...t,options:[{name:"-c",value:String(o)}]}},setError:(t,e,r,o)=>e===Hn.EndOfInput||e===Hn.EndOfPartialInput?{...t,errorMessage:`${o}.`}:{...t,errorMessage:`${o} ("${e}").`},setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return{...t,errorMessage:`Not enough arguments to option ${r.name}.`}}},el=Symbol(),_T=class{constructor(e,r){this.allOptionNames=new Map,this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=r}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,extra:o=this.arity.extra,proxy:a=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:o,proxy:a})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===el)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!r&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!r&&this.arity.extra!==el?this.arity.extra.push(e):this.arity.extra!==el&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:r=0}={}){if(this.arity.extra===el)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let o=0;o1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(o))throw new Error(`The arity must be an integer, got ${o}`);if(o<0)throw new Error(`The arity must be positive, got ${o}`);let A=e.reduce((p,h)=>h.length>p.length?h:p,"");for(let p of e)this.allOptionNames.set(p,A);this.options.push({preferredName:A,nameSet:e,description:r,arity:o,hidden:a,required:n,allowBinding:u})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let o=[this.cliOpts.binaryName],a=[];if(this.paths.length>0&&o.push(...this.paths[0]),e){for(let{preferredName:u,nameSet:A,arity:p,hidden:h,description:E,required:I}of this.options){if(h)continue;let v=[];for(let C=0;C`:`[${x}]`)}o.push(...this.arity.leading.map(u=>`<${u}>`)),this.arity.extra===el?o.push("..."):o.push(...this.arity.extra.map(u=>`[${u}]`)),o.push(...this.arity.trailing.map(u=>`<${u}>`))}return{usage:o.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=yV(),r=cn.InitialNode,o=this.usage().usage,a=this.options.filter(A=>A.required).map(A=>A.nameSet);r=Oc(e,$a()),Jo(e,cn.InitialNode,Hn.StartOfInput,r,["setCandidateState",{candidateUsage:o,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",u=this.paths.length>0?this.paths:[[]];for(let A of u){let p=r;if(A.length>0){let v=Oc(e,$a());wy(e,p,v),this.registerOptions(e,v),p=v}for(let v=0;v0||!this.arity.proxy){let v=Oc(e,$a());Ps(e,p,"isHelp",v,["useHelp",this.cliIndex]),Ps(e,v,"always",v,"pushExtra"),Jo(e,v,Hn.EndOfInput,cn.SuccessNode,["setSelectedIndex",rd]),this.registerOptions(e,p)}this.arity.leading.length>0&&(Jo(e,p,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,p,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let h=p;for(let v=0;v0||v+1!==this.arity.leading.length)&&(Jo(e,x,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,x,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex])),Ps(e,h,"isNotOptionLike",x,"pushPositional"),h=x}let E=h;if(this.arity.extra===el||this.arity.extra.length>0){let v=Oc(e,$a());if(wy(e,h,v),this.arity.extra===el){let x=Oc(e,$a());this.arity.proxy||this.registerOptions(e,x),Ps(e,h,n,x,"pushExtraNoLimits"),Ps(e,x,n,x,"pushExtraNoLimits"),wy(e,x,v)}else for(let x=0;x0)&&this.registerOptions(e,C),Ps(e,E,n,C,"pushExtra"),wy(e,C,v),E=C}E=v}this.arity.trailing.length>0&&(Jo(e,E,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,E,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let I=E;for(let v=0;v=0&&e{let u=n?Hn.EndOfPartialInput:Hn.EndOfInput;return Yje(o,a,{endToken:u})}}}}});function IV(){return cS.default&&"getColorDepth"in cS.default.WriteStream.prototype?cS.default.WriteStream.prototype.getColorDepth():process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}function BV(t){let e=wV;if(typeof e>"u"){if(t.stdout===process.stdout&&t.stderr===process.stderr)return null;let{AsyncLocalStorage:r}=ve("async_hooks");e=wV=new r;let o=process.stdout._write;process.stdout._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?o.call(this,n,u,A):p.stdout.write(n,u,A)};let a=process.stderr._write;process.stderr._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?a.call(this,n,u,A):p.stderr.write(n,u,A)}}return r=>e.run(t,r)}var cS,wV,vV=Et(()=>{cS=$e(ve("tty"),1)});var By,DV=Et(()=>{Vp();By=class extends nt{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,r){let o=new By(r);o.path=e.path;for(let a of e.options)switch(a.name){case"-c":o.commands.push(Number(a.value));break;case"-i":o.index=Number(a.value);break}return o}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: +`),this.context.stdout.write(` +`);let r=0;for(let o of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[o].commandClass,{prefix:`${r++}. `.padStart(5)}));this.context.stdout.write(` +`),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. +`)}}}});async function bV(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=kV(t);return as.from(r,e).runExit(o,a)}async function xV(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=kV(t);return as.from(r,e).run(o,a)}function kV(t){let e,r,o,a;switch(typeof process<"u"&&typeof process.argv<"u"&&(o=process.argv.slice(2)),t.length){case 1:r=t[0];break;case 2:t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],Array.isArray(t[1])?o=t[1]:a=t[1]):(e=t[0],r=t[1]);break;case 3:Array.isArray(t[2])?(e=t[0],r=t[1],o=t[2]):t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],o=t[1],a=t[2]):(e=t[0],r=t[1],a=t[2]);break;default:e=t[0],r=t[1],o=t[2],a=t[3];break}if(typeof o>"u")throw new Error("The argv parameter must be provided when running Clipanion outside of a Node context");return{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}}function PV(t){return t()}var SV,as,QV=Et(()=>{$D();lS();kT();vV();Vp();DV();SV=Symbol("clipanion/errorCommand");as=class{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:o,enableCapture:a=!1,enableColors:n}={}){this.registrations=new Map,this.builder=new Iy({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=o,this.enableCapture=a,this.enableColors=n}static from(e,r={}){let o=new as(r),a=Array.isArray(e)?e:[e];for(let n of a)o.register(n);return o}register(e){var r;let o=new Map,a=new e;for(let p in a){let h=a[p];typeof h=="object"&&h!==null&&h[nt.isOption]&&o.set(p,h)}let n=this.builder.command(),u=n.cliIndex,A=(r=e.paths)!==null&&r!==void 0?r:a.paths;if(typeof A<"u")for(let p of A)n.addPath(p);this.registrations.set(e,{specs:o,builder:n,index:u});for(let[p,{definition:h}]of o.entries())h(n,p);n.setContext({commandClass:e})}process(e,r){let{input:o,context:a,partial:n}=typeof e=="object"&&Array.isArray(e)?{input:e,context:r}:e,{contexts:u,process:A}=this.builder.compile(),p=A(o,{partial:n}),h={...as.defaultContext,...a};switch(p.selectedIndex){case rd:{let E=By.from(p,u);return E.context=h,E.tokens=p.tokens,E}default:{let{commandClass:E}=u[p.selectedIndex],I=this.registrations.get(E);if(typeof I>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let v=new E;v.context=h,v.tokens=p.tokens,v.path=p.path;try{for(let[x,{transformer:C}]of I.specs.entries())v[x]=C(I.builder,x,p,h);return v}catch(x){throw x[SV]=v,x}}break}}async run(e,r){var o,a;let n,u={...as.defaultContext,...r},A=(o=this.enableColors)!==null&&o!==void 0?o:u.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e,u)}catch(E){return u.stdout.write(this.error(E,{colored:A})),1}if(n.help)return u.stdout.write(this.usage(n,{colored:A,detailed:!0})),0;n.context=u,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),definition:E=>this.definition(E),error:(E,I)=>this.error(E,I),format:E=>this.format(E),process:(E,I)=>this.process(E,{...u,...I}),run:(E,I)=>this.run(E,{...u,...I}),usage:(E,I)=>this.usage(E,I)};let p=this.enableCapture&&(a=BV(u))!==null&&a!==void 0?a:PV,h;try{h=await p(()=>n.validateAndExecute().catch(E=>n.catch(E).then(()=>0)))}catch(E){return u.stdout.write(this.error(E,{colored:A,command:n})),1}return h}async runExit(e,r){process.exitCode=await this.run(e,r)}definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:o}=this.getUsageByRegistration(e,{detailed:!1}),{usage:a,options:n}=this.getUsageByRegistration(e,{detailed:!0,inlineOptions:!1}),u=typeof e.usage.category<"u"?Do(e.usage.category,{format:this.format(r),paragraphs:!1}):void 0,A=typeof e.usage.description<"u"?Do(e.usage.description,{format:this.format(r),paragraphs:!1}):void 0,p=typeof e.usage.details<"u"?Do(e.usage.details,{format:this.format(r),paragraphs:!0}):void 0,h=typeof e.usage.examples<"u"?e.usage.examples.map(([E,I])=>[Do(E,{format:this.format(r),paragraphs:!1}),I.replace(/\$0/g,this.binaryName)]):void 0;return{path:o,usage:a,category:u,description:A,details:p,examples:h,options:n}}definitions({colored:e=!1}={}){let r=[];for(let o of this.registrations.keys()){let a=this.definition(o,{colored:e});!a||r.push(a)}return r}usage(e=null,{colored:r,detailed:o=!1,prefix:a="$ "}={}){var n;if(e===null){for(let p of this.registrations.keys()){let h=p.paths,E=typeof p.usage<"u";if(!h||h.length===0||h.length===1&&h[0].length===0||((n=h?.some(x=>x.length===0))!==null&&n!==void 0?n:!1))if(e){e=null;break}else e=p;else if(E){e=null;continue}}e&&(o=!0)}let u=e!==null&&e instanceof nt?e.constructor:e,A="";if(u)if(o){let{description:p="",details:h="",examples:E=[]}=u.usage||{};p!==""&&(A+=Do(p,{format:this.format(r),paragraphs:!1}).replace(/^./,x=>x.toUpperCase()),A+=` +`),(h!==""||E.length>0)&&(A+=`${this.format(r).header("Usage")} +`,A+=` +`);let{usage:I,options:v}=this.getUsageByRegistration(u,{inlineOptions:!1});if(A+=`${this.format(r).bold(a)}${I} +`,v.length>0){A+=` +`,A+=`${this.format(r).header("Options")} +`;let x=v.reduce((C,R)=>Math.max(C,R.definition.length),0);A+=` +`;for(let{definition:C,description:R}of v)A+=` ${this.format(r).bold(C.padEnd(x))} ${Do(R,{format:this.format(r),paragraphs:!1})}`}if(h!==""&&(A+=` +`,A+=`${this.format(r).header("Details")} +`,A+=` +`,A+=Do(h,{format:this.format(r),paragraphs:!0})),E.length>0){A+=` +`,A+=`${this.format(r).header("Examples")} +`;for(let[x,C]of E)A+=` +`,A+=Do(x,{format:this.format(r),paragraphs:!1}),A+=`${C.replace(/^/m,` ${this.format(r).bold(a)}`).replace(/\$0/g,this.binaryName)} +`}}else{let{usage:p}=this.getUsageByRegistration(u);A+=`${this.format(r).bold(a)}${p} +`}else{let p=new Map;for(let[v,{index:x}]of this.registrations.entries()){if(typeof v.usage>"u")continue;let C=typeof v.usage.category<"u"?Do(v.usage.category,{format:this.format(r),paragraphs:!1}):null,R=p.get(C);typeof R>"u"&&p.set(C,R=[]);let{usage:L}=this.getUsageByIndex(x);R.push({commandClass:v,usage:L})}let h=Array.from(p.keys()).sort((v,x)=>v===null?-1:x===null?1:v.localeCompare(x,"en",{usage:"sort",caseFirst:"upper"})),E=typeof this.binaryLabel<"u",I=typeof this.binaryVersion<"u";E||I?(E&&I?A+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} + +`:E?A+=`${this.format(r).header(`${this.binaryLabel}`)} +`:A+=`${this.format(r).header(`${this.binaryVersion}`)} +`,A+=` ${this.format(r).bold(a)}${this.binaryName} +`):A+=`${this.format(r).bold(a)}${this.binaryName} +`;for(let v of h){let x=p.get(v).slice().sort((R,L)=>R.usage.localeCompare(L.usage,"en",{usage:"sort",caseFirst:"upper"})),C=v!==null?v.trim():"General commands";A+=` +`,A+=`${this.format(r).header(`${C}`)} +`;for(let{commandClass:R,usage:L}of x){let U=R.usage.description||"undocumented";A+=` +`,A+=` ${this.format(r).bold(L)} +`,A+=` ${Do(U,{format:this.format(r),paragraphs:!1})}`}}A+=` +`,A+=Do("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(r),paragraphs:!0})}return A}error(e,r){var o,{colored:a,command:n=(o=e[SV])!==null&&o!==void 0?o:null}=r===void 0?{}:r;(!e||typeof e!="object"||!("stack"in e))&&(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let u="",A=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");A==="Error"&&(A="Internal Error"),u+=`${this.format(a).error(A)}: ${e.message} +`;let p=e.clipanion;return typeof p<"u"?p.type==="usage"&&(u+=` +`,u+=this.usage(n)):e.stack&&(u+=`${e.stack.replace(/^.*\n/,"")} +`),u}format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:as.defaultContext.colorDepth>1)?uV:AV}getUsageByRegistration(e,r){let o=this.registrations.get(e);if(typeof o>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(o.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}};as.defaultContext={env:process.env,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:IV()}});var uI,FV=Et(()=>{Vp();uI=class extends nt{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} +`)}};uI.paths=[["--clipanion=definitions"]]});var AI,RV=Et(()=>{Vp();AI=class extends nt{async execute(){this.context.stdout.write(this.cli.usage())}};AI.paths=[["-h"],["--help"]]});function uS(t={}){return Ko({definition(e,r){var o;e.addProxy({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){return o.positionals.map(({value:a})=>a)}})}var HT=Et(()=>{Ef()});var fI,TV=Et(()=>{Vp();HT();fI=class extends nt{constructor(){super(...arguments),this.args=uS()}async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.process(this.args).tokens,null,2)} +`)}};fI.paths=[["--clipanion=tokens"]]});var pI,NV=Et(()=>{Vp();pI=class extends nt{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} +`)}};pI.paths=[["-v"],["--version"]]});var jT={};Vt(jT,{DefinitionsCommand:()=>uI,HelpCommand:()=>AI,TokensCommand:()=>fI,VersionCommand:()=>pI});var LV=Et(()=>{FV();RV();TV();NV()});function OV(t,e,r){let[o,a]=Gu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Ko({definition(p){p.addOption({names:u,arity:n,hidden:a?.hidden,description:a?.description,required:a.required})},transformer(p,h,E){let I,v=typeof o<"u"?[...o]:void 0;for(let{name:x,value:C}of E.options)!A.has(x)||(I=x,v=v??[],v.push(C));return typeof v<"u"?nd(I??h,v,a.validator):v}})}var MV=Et(()=>{Ef()});function UV(t,e,r){let[o,a]=Gu(e,r??{}),n=t.split(","),u=new Set(n);return Ko({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E=v);return E}})}var _V=Et(()=>{Ef()});function HV(t,e,r){let[o,a]=Gu(e,r??{}),n=t.split(","),u=new Set(n);return Ko({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E??(E=0),v?E+=1:E=0);return E}})}var jV=Et(()=>{Ef()});function GV(t={}){return Ko({definition(e,r){var o;e.addRest({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){let a=u=>{let A=o.positionals[u];return A.extra===el||A.extra===!1&&uu)}})}var qV=Et(()=>{lS();Ef()});function Xje(t,e,r){let[o,a]=Gu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Ko({definition(p){p.addOption({names:u,arity:a.tolerateBoolean?0:n,hidden:a.hidden,description:a.description,required:a.required})},transformer(p,h,E,I){let v,x=o;typeof a.env<"u"&&I.env[a.env]&&(v=a.env,x=I.env[a.env]);for(let{name:C,value:R}of E.options)!A.has(C)||(v=C,x=R);return typeof x=="string"?nd(v??h,x,a.validator):x}})}function Zje(t={}){let{required:e=!0}=t;return Ko({definition(r,o){var a;r.addPositional({name:(a=t.name)!==null&&a!==void 0?a:o,required:t.required})},transformer(r,o,a){var n;for(let u=0;u{lS();Ef()});var ge={};Vt(ge,{Array:()=>OV,Boolean:()=>UV,Counter:()=>HV,Proxy:()=>uS,Rest:()=>GV,String:()=>YV,applyValidator:()=>nd,cleanValidationError:()=>rS,formatError:()=>iI,isOptionSymbol:()=>nI,makeCommandOption:()=>Ko,rerouteArguments:()=>Gu});var KV=Et(()=>{Ef();HT();MV();_V();jV();qV();WV()});var hI={};Vt(hI,{Builtins:()=>jT,Cli:()=>as,Command:()=>nt,Option:()=>ge,UsageError:()=>it,formatMarkdownish:()=>Do,run:()=>xV,runExit:()=>bV});var jt=Et(()=>{tS();kT();Vp();QV();LV();KV()});var VV=_((Pkt,$je)=>{$je.exports={name:"dotenv",version:"16.3.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard","lint-readme":"standard-markdown",pretest:"npm run lint && npm run dts-check",test:"tap tests/*.js --100 -Rspec",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},funding:"https://github.com/motdotla/dotenv?sponsor=1",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@definitelytyped/dtslint":"^0.0.133","@types/node":"^18.11.3",decache:"^4.6.1",sinon:"^14.0.1",standard:"^17.0.0","standard-markdown":"^7.1.0","standard-version":"^9.5.0",tap:"^16.3.0",tar:"^6.1.11",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var ZV=_((bkt,Cf)=>{var JV=ve("fs"),qT=ve("path"),eGe=ve("os"),tGe=ve("crypto"),rGe=VV(),YT=rGe.version,nGe=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function iGe(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,` +`);let o;for(;(o=nGe.exec(r))!=null;){let a=o[1],n=o[2]||"";n=n.trim();let u=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),u==='"'&&(n=n.replace(/\\n/g,` +`),n=n.replace(/\\r/g,"\r")),e[a]=n}return e}function sGe(t){let e=XV(t),r=bs.configDotenv({path:e});if(!r.parsed)throw new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);let o=zV(t).split(","),a=o.length,n;for(let u=0;u=a)throw A}return bs.parse(n)}function oGe(t){console.log(`[dotenv@${YT}][INFO] ${t}`)}function aGe(t){console.log(`[dotenv@${YT}][WARN] ${t}`)}function GT(t){console.log(`[dotenv@${YT}][DEBUG] ${t}`)}function zV(t){return t&&t.DOTENV_KEY&&t.DOTENV_KEY.length>0?t.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function lGe(t,e){let r;try{r=new URL(e)}catch(A){throw A.code==="ERR_INVALID_URL"?new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development"):A}let o=r.password;if(!o)throw new Error("INVALID_DOTENV_KEY: Missing key part");let a=r.searchParams.get("environment");if(!a)throw new Error("INVALID_DOTENV_KEY: Missing environment part");let n=`DOTENV_VAULT_${a.toUpperCase()}`,u=t.parsed[n];if(!u)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);return{ciphertext:u,key:o}}function XV(t){let e=qT.resolve(process.cwd(),".env");return t&&t.path&&t.path.length>0&&(e=t.path),e.endsWith(".vault")?e:`${e}.vault`}function cGe(t){return t[0]==="~"?qT.join(eGe.homedir(),t.slice(1)):t}function uGe(t){oGe("Loading env from encrypted .env.vault");let e=bs._parseVault(t),r=process.env;return t&&t.processEnv!=null&&(r=t.processEnv),bs.populate(r,e,t),{parsed:e}}function AGe(t){let e=qT.resolve(process.cwd(),".env"),r="utf8",o=Boolean(t&&t.debug);t&&(t.path!=null&&(e=cGe(t.path)),t.encoding!=null&&(r=t.encoding));try{let a=bs.parse(JV.readFileSync(e,{encoding:r})),n=process.env;return t&&t.processEnv!=null&&(n=t.processEnv),bs.populate(n,a,t),{parsed:a}}catch(a){return o&>(`Failed to load ${e} ${a.message}`),{error:a}}}function fGe(t){let e=XV(t);return zV(t).length===0?bs.configDotenv(t):JV.existsSync(e)?bs._configVault(t):(aGe(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),bs.configDotenv(t))}function pGe(t,e){let r=Buffer.from(e.slice(-64),"hex"),o=Buffer.from(t,"base64"),a=o.slice(0,12),n=o.slice(-16);o=o.slice(12,-16);try{let u=tGe.createDecipheriv("aes-256-gcm",r,a);return u.setAuthTag(n),`${u.update(o)}${u.final()}`}catch(u){let A=u instanceof RangeError,p=u.message==="Invalid key length",h=u.message==="Unsupported state or unable to authenticate data";if(A||p){let E="INVALID_DOTENV_KEY: It must be 64 characters long (or more)";throw new Error(E)}else if(h){let E="DECRYPTION_FAILED: Please check your DOTENV_KEY";throw new Error(E)}else throw console.error("Error: ",u.code),console.error("Error: ",u.message),u}}function hGe(t,e,r={}){let o=Boolean(r&&r.debug),a=Boolean(r&&r.override);if(typeof e!="object")throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(t,n)?(a===!0&&(t[n]=e[n]),o&>(a===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):t[n]=e[n]}var bs={configDotenv:AGe,_configVault:uGe,_parseVault:sGe,config:fGe,decrypt:pGe,parse:iGe,populate:hGe};Cf.exports.configDotenv=bs.configDotenv;Cf.exports._configVault=bs._configVault;Cf.exports._parseVault=bs._parseVault;Cf.exports.config=bs.config;Cf.exports.decrypt=bs.decrypt;Cf.exports.parse=bs.parse;Cf.exports.populate=bs.populate;Cf.exports=bs});var eJ=_((xkt,$V)=>{"use strict";$V.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var id=_((kkt,WT)=>{"use strict";var gGe=eJ(),tJ=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,o=()=>{r--,e.length>0&&e.shift()()},a=(A,p,...h)=>{r++;let E=gGe(A,...h);p(E),E.then(o,o)},n=(A,p,...h)=>{rnew Promise(h=>n(A,h,...p));return Object.defineProperties(u,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),u};WT.exports=tJ;WT.exports.default=tJ});function Wu(t){return`YN${t.toString(10).padStart(4,"0")}`}function AS(t){let e=Number(t.slice(2));if(typeof wr[e]>"u")throw new Error(`Unknown message name: "${t}"`);return e}var wr,fS=Et(()=>{wr=(Oe=>(Oe[Oe.UNNAMED=0]="UNNAMED",Oe[Oe.EXCEPTION=1]="EXCEPTION",Oe[Oe.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",Oe[Oe.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",Oe[Oe.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",Oe[Oe.BUILD_DISABLED=5]="BUILD_DISABLED",Oe[Oe.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",Oe[Oe.MUST_BUILD=7]="MUST_BUILD",Oe[Oe.MUST_REBUILD=8]="MUST_REBUILD",Oe[Oe.BUILD_FAILED=9]="BUILD_FAILED",Oe[Oe.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",Oe[Oe.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",Oe[Oe.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",Oe[Oe.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",Oe[Oe.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",Oe[Oe.REMOTE_INVALID=15]="REMOTE_INVALID",Oe[Oe.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",Oe[Oe.RESOLUTION_PACK=17]="RESOLUTION_PACK",Oe[Oe.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",Oe[Oe.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",Oe[Oe.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",Oe[Oe.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",Oe[Oe.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",Oe[Oe.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",Oe[Oe.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",Oe[Oe.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",Oe[Oe.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",Oe[Oe.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",Oe[Oe.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",Oe[Oe.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",Oe[Oe.FETCH_FAILED=30]="FETCH_FAILED",Oe[Oe.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",Oe[Oe.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",Oe[Oe.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",Oe[Oe.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",Oe[Oe.NETWORK_ERROR=35]="NETWORK_ERROR",Oe[Oe.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",Oe[Oe.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",Oe[Oe.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",Oe[Oe.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",Oe[Oe.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",Oe[Oe.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",Oe[Oe.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",Oe[Oe.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",Oe[Oe.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",Oe[Oe.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",Oe[Oe.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",Oe[Oe.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",Oe[Oe.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",Oe[Oe.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",Oe[Oe.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",Oe[Oe.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",Oe[Oe.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",Oe[Oe.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",Oe[Oe.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",Oe[Oe.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",Oe[Oe.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",Oe[Oe.INVALID_MANIFEST=57]="INVALID_MANIFEST",Oe[Oe.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",Oe[Oe.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",Oe[Oe.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",Oe[Oe.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",Oe[Oe.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",Oe[Oe.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",Oe[Oe.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",Oe[Oe.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",Oe[Oe.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",Oe[Oe.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",Oe[Oe.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",Oe[Oe.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",Oe[Oe.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",Oe[Oe.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",Oe[Oe.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",Oe[Oe.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK",Oe[Oe.NM_HARDLINKS_MODE_DOWNGRADED=74]="NM_HARDLINKS_MODE_DOWNGRADED",Oe[Oe.PROLOG_INSTANTIATION_ERROR=75]="PROLOG_INSTANTIATION_ERROR",Oe[Oe.INCOMPATIBLE_ARCHITECTURE=76]="INCOMPATIBLE_ARCHITECTURE",Oe[Oe.GHOST_ARCHITECTURE=77]="GHOST_ARCHITECTURE",Oe[Oe.RESOLUTION_MISMATCH=78]="RESOLUTION_MISMATCH",Oe[Oe.PROLOG_LIMIT_EXCEEDED=79]="PROLOG_LIMIT_EXCEEDED",Oe[Oe.NETWORK_DISABLED=80]="NETWORK_DISABLED",Oe[Oe.NETWORK_UNSAFE_HTTP=81]="NETWORK_UNSAFE_HTTP",Oe[Oe.RESOLUTION_FAILED=82]="RESOLUTION_FAILED",Oe[Oe.AUTOMERGE_GIT_ERROR=83]="AUTOMERGE_GIT_ERROR",Oe[Oe.CONSTRAINTS_CHECK_FAILED=84]="CONSTRAINTS_CHECK_FAILED",Oe[Oe.UPDATED_RESOLUTION_RECORD=85]="UPDATED_RESOLUTION_RECORD",Oe[Oe.EXPLAIN_PEER_DEPENDENCIES_CTA=86]="EXPLAIN_PEER_DEPENDENCIES_CTA",Oe[Oe.MIGRATION_SUCCESS=87]="MIGRATION_SUCCESS",Oe[Oe.VERSION_NOTICE=88]="VERSION_NOTICE",Oe[Oe.TIPS_NOTICE=89]="TIPS_NOTICE",Oe[Oe.OFFLINE_MODE_ENABLED=90]="OFFLINE_MODE_ENABLED",Oe))(wr||{})});var gI=_((Fkt,rJ)=>{var dGe="2.0.0",mGe=Number.MAX_SAFE_INTEGER||9007199254740991,yGe=16,EGe=256-6,CGe=["major","premajor","minor","preminor","patch","prepatch","prerelease"];rJ.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:yGe,MAX_SAFE_BUILD_LENGTH:EGe,MAX_SAFE_INTEGER:mGe,RELEASE_TYPES:CGe,SEMVER_SPEC_VERSION:dGe,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var dI=_((Rkt,nJ)=>{var wGe=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};nJ.exports=wGe});var vy=_((wf,iJ)=>{var{MAX_SAFE_COMPONENT_LENGTH:KT,MAX_SAFE_BUILD_LENGTH:IGe,MAX_LENGTH:BGe}=gI(),vGe=dI();wf=iJ.exports={};var DGe=wf.re=[],SGe=wf.safeRe=[],lr=wf.src=[],cr=wf.t={},PGe=0,VT="[a-zA-Z0-9-]",bGe=[["\\s",1],["\\d",BGe],[VT,IGe]],xGe=t=>{for(let[e,r]of bGe)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},Jr=(t,e,r)=>{let o=xGe(e),a=PGe++;vGe(t,a,e),cr[t]=a,lr[a]=e,DGe[a]=new RegExp(e,r?"g":void 0),SGe[a]=new RegExp(o,r?"g":void 0)};Jr("NUMERICIDENTIFIER","0|[1-9]\\d*");Jr("NUMERICIDENTIFIERLOOSE","\\d+");Jr("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${VT}*`);Jr("MAINVERSION",`(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})`);Jr("MAINVERSIONLOOSE",`(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})`);Jr("PRERELEASEIDENTIFIER",`(?:${lr[cr.NUMERICIDENTIFIER]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASEIDENTIFIERLOOSE",`(?:${lr[cr.NUMERICIDENTIFIERLOOSE]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASE",`(?:-(${lr[cr.PRERELEASEIDENTIFIER]}(?:\\.${lr[cr.PRERELEASEIDENTIFIER]})*))`);Jr("PRERELEASELOOSE",`(?:-?(${lr[cr.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${lr[cr.PRERELEASEIDENTIFIERLOOSE]})*))`);Jr("BUILDIDENTIFIER",`${VT}+`);Jr("BUILD",`(?:\\+(${lr[cr.BUILDIDENTIFIER]}(?:\\.${lr[cr.BUILDIDENTIFIER]})*))`);Jr("FULLPLAIN",`v?${lr[cr.MAINVERSION]}${lr[cr.PRERELEASE]}?${lr[cr.BUILD]}?`);Jr("FULL",`^${lr[cr.FULLPLAIN]}$`);Jr("LOOSEPLAIN",`[v=\\s]*${lr[cr.MAINVERSIONLOOSE]}${lr[cr.PRERELEASELOOSE]}?${lr[cr.BUILD]}?`);Jr("LOOSE",`^${lr[cr.LOOSEPLAIN]}$`);Jr("GTLT","((?:<|>)?=?)");Jr("XRANGEIDENTIFIERLOOSE",`${lr[cr.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);Jr("XRANGEIDENTIFIER",`${lr[cr.NUMERICIDENTIFIER]}|x|X|\\*`);Jr("XRANGEPLAIN",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:${lr[cr.PRERELEASE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGEPLAINLOOSE",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:${lr[cr.PRERELEASELOOSE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAIN]}$`);Jr("XRANGELOOSE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COERCE",`(^|[^\\d])(\\d{1,${KT}})(?:\\.(\\d{1,${KT}}))?(?:\\.(\\d{1,${KT}}))?(?:$|[^\\d])`);Jr("COERCERTL",lr[cr.COERCE],!0);Jr("LONETILDE","(?:~>?)");Jr("TILDETRIM",`(\\s*)${lr[cr.LONETILDE]}\\s+`,!0);wf.tildeTrimReplace="$1~";Jr("TILDE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAIN]}$`);Jr("TILDELOOSE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("LONECARET","(?:\\^)");Jr("CARETTRIM",`(\\s*)${lr[cr.LONECARET]}\\s+`,!0);wf.caretTrimReplace="$1^";Jr("CARET",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAIN]}$`);Jr("CARETLOOSE",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COMPARATORLOOSE",`^${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]})$|^$`);Jr("COMPARATOR",`^${lr[cr.GTLT]}\\s*(${lr[cr.FULLPLAIN]})$|^$`);Jr("COMPARATORTRIM",`(\\s*)${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]}|${lr[cr.XRANGEPLAIN]})`,!0);wf.comparatorTrimReplace="$1$2$3";Jr("HYPHENRANGE",`^\\s*(${lr[cr.XRANGEPLAIN]})\\s+-\\s+(${lr[cr.XRANGEPLAIN]})\\s*$`);Jr("HYPHENRANGELOOSE",`^\\s*(${lr[cr.XRANGEPLAINLOOSE]})\\s+-\\s+(${lr[cr.XRANGEPLAINLOOSE]})\\s*$`);Jr("STAR","(<|>)?=?\\s*\\*");Jr("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");Jr("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var pS=_((Tkt,sJ)=>{var kGe=Object.freeze({loose:!0}),QGe=Object.freeze({}),FGe=t=>t?typeof t!="object"?kGe:t:QGe;sJ.exports=FGe});var JT=_((Nkt,lJ)=>{var oJ=/^[0-9]+$/,aJ=(t,e)=>{let r=oJ.test(t),o=oJ.test(e);return r&&o&&(t=+t,e=+e),t===e?0:r&&!o?-1:o&&!r?1:taJ(e,t);lJ.exports={compareIdentifiers:aJ,rcompareIdentifiers:RGe}});var So=_((Lkt,fJ)=>{var hS=dI(),{MAX_LENGTH:cJ,MAX_SAFE_INTEGER:gS}=gI(),{safeRe:uJ,t:AJ}=vy(),TGe=pS(),{compareIdentifiers:Dy}=JT(),tl=class{constructor(e,r){if(r=TGe(r),e instanceof tl){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>cJ)throw new TypeError(`version is longer than ${cJ} characters`);hS("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let o=e.trim().match(r.loose?uJ[AJ.LOOSE]:uJ[AJ.FULL]);if(!o)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+o[1],this.minor=+o[2],this.patch=+o[3],this.major>gS||this.major<0)throw new TypeError("Invalid major version");if(this.minor>gS||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>gS||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map(a=>{if(/^[0-9]+$/.test(a)){let n=+a;if(n>=0&&n=0;)typeof this.prerelease[n]=="number"&&(this.prerelease[n]++,n=-2);if(n===-1){if(r===this.prerelease.join(".")&&o===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let n=[r,a];o===!1&&(n=[r]),Dy(this.prerelease[0],r)===0?isNaN(this.prerelease[1])&&(this.prerelease=n):this.prerelease=n}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};fJ.exports=tl});var sd=_((Okt,hJ)=>{var pJ=So(),NGe=(t,e,r=!1)=>{if(t instanceof pJ)return t;try{return new pJ(t,e)}catch(o){if(!r)return null;throw o}};hJ.exports=NGe});var dJ=_((Mkt,gJ)=>{var LGe=sd(),OGe=(t,e)=>{let r=LGe(t,e);return r?r.version:null};gJ.exports=OGe});var yJ=_((Ukt,mJ)=>{var MGe=sd(),UGe=(t,e)=>{let r=MGe(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};mJ.exports=UGe});var wJ=_((_kt,CJ)=>{var EJ=So(),_Ge=(t,e,r,o,a)=>{typeof r=="string"&&(a=o,o=r,r=void 0);try{return new EJ(t instanceof EJ?t.version:t,r).inc(e,o,a).version}catch{return null}};CJ.exports=_Ge});var vJ=_((Hkt,BJ)=>{var IJ=sd(),HGe=(t,e)=>{let r=IJ(t,null,!0),o=IJ(e,null,!0),a=r.compare(o);if(a===0)return null;let n=a>0,u=n?r:o,A=n?o:r,p=!!u.prerelease.length;if(!!A.prerelease.length&&!p)return!A.patch&&!A.minor?"major":u.patch?"patch":u.minor?"minor":"major";let E=p?"pre":"";return r.major!==o.major?E+"major":r.minor!==o.minor?E+"minor":r.patch!==o.patch?E+"patch":"prerelease"};BJ.exports=HGe});var SJ=_((jkt,DJ)=>{var jGe=So(),GGe=(t,e)=>new jGe(t,e).major;DJ.exports=GGe});var bJ=_((Gkt,PJ)=>{var qGe=So(),YGe=(t,e)=>new qGe(t,e).minor;PJ.exports=YGe});var kJ=_((qkt,xJ)=>{var WGe=So(),KGe=(t,e)=>new WGe(t,e).patch;xJ.exports=KGe});var FJ=_((Ykt,QJ)=>{var VGe=sd(),JGe=(t,e)=>{let r=VGe(t,e);return r&&r.prerelease.length?r.prerelease:null};QJ.exports=JGe});var Ll=_((Wkt,TJ)=>{var RJ=So(),zGe=(t,e,r)=>new RJ(t,r).compare(new RJ(e,r));TJ.exports=zGe});var LJ=_((Kkt,NJ)=>{var XGe=Ll(),ZGe=(t,e,r)=>XGe(e,t,r);NJ.exports=ZGe});var MJ=_((Vkt,OJ)=>{var $Ge=Ll(),eqe=(t,e)=>$Ge(t,e,!0);OJ.exports=eqe});var dS=_((Jkt,_J)=>{var UJ=So(),tqe=(t,e,r)=>{let o=new UJ(t,r),a=new UJ(e,r);return o.compare(a)||o.compareBuild(a)};_J.exports=tqe});var jJ=_((zkt,HJ)=>{var rqe=dS(),nqe=(t,e)=>t.sort((r,o)=>rqe(r,o,e));HJ.exports=nqe});var qJ=_((Xkt,GJ)=>{var iqe=dS(),sqe=(t,e)=>t.sort((r,o)=>iqe(o,r,e));GJ.exports=sqe});var mI=_((Zkt,YJ)=>{var oqe=Ll(),aqe=(t,e,r)=>oqe(t,e,r)>0;YJ.exports=aqe});var mS=_(($kt,WJ)=>{var lqe=Ll(),cqe=(t,e,r)=>lqe(t,e,r)<0;WJ.exports=cqe});var zT=_((eQt,KJ)=>{var uqe=Ll(),Aqe=(t,e,r)=>uqe(t,e,r)===0;KJ.exports=Aqe});var XT=_((tQt,VJ)=>{var fqe=Ll(),pqe=(t,e,r)=>fqe(t,e,r)!==0;VJ.exports=pqe});var yS=_((rQt,JJ)=>{var hqe=Ll(),gqe=(t,e,r)=>hqe(t,e,r)>=0;JJ.exports=gqe});var ES=_((nQt,zJ)=>{var dqe=Ll(),mqe=(t,e,r)=>dqe(t,e,r)<=0;zJ.exports=mqe});var ZT=_((iQt,XJ)=>{var yqe=zT(),Eqe=XT(),Cqe=mI(),wqe=yS(),Iqe=mS(),Bqe=ES(),vqe=(t,e,r,o)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return yqe(t,r,o);case"!=":return Eqe(t,r,o);case">":return Cqe(t,r,o);case">=":return wqe(t,r,o);case"<":return Iqe(t,r,o);case"<=":return Bqe(t,r,o);default:throw new TypeError(`Invalid operator: ${e}`)}};XJ.exports=vqe});var $J=_((sQt,ZJ)=>{var Dqe=So(),Sqe=sd(),{safeRe:CS,t:wS}=vy(),Pqe=(t,e)=>{if(t instanceof Dqe)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(CS[wS.COERCE]);else{let o;for(;(o=CS[wS.COERCERTL].exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||o.index+o[0].length!==r.index+r[0].length)&&(r=o),CS[wS.COERCERTL].lastIndex=o.index+o[1].length+o[2].length;CS[wS.COERCERTL].lastIndex=-1}return r===null?null:Sqe(`${r[2]}.${r[3]||"0"}.${r[4]||"0"}`,e)};ZJ.exports=Pqe});var tz=_((oQt,ez)=>{"use strict";ez.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var IS=_((aQt,rz)=>{"use strict";rz.exports=Cn;Cn.Node=od;Cn.create=Cn;function Cn(t){var e=this;if(e instanceof Cn||(e=new Cn),e.tail=null,e.head=null,e.length=0,t&&typeof t.forEach=="function")t.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var r=0,o=arguments.length;r1)r=e;else if(this.head)o=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;o!==null;a++)r=t(r,o.value,a),o=o.next;return r};Cn.prototype.reduceReverse=function(t,e){var r,o=this.tail;if(arguments.length>1)r=e;else if(this.tail)o=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;o!==null;a--)r=t(r,o.value,a),o=o.prev;return r};Cn.prototype.toArray=function(){for(var t=new Array(this.length),e=0,r=this.head;r!==null;e++)t[e]=r.value,r=r.next;return t};Cn.prototype.toArrayReverse=function(){for(var t=new Array(this.length),e=0,r=this.tail;r!==null;e++)t[e]=r.value,r=r.prev;return t};Cn.prototype.slice=function(t,e){e=e||this.length,e<0&&(e+=this.length),t=t||0,t<0&&(t+=this.length);var r=new Cn;if(ethis.length&&(e=this.length);for(var o=0,a=this.head;a!==null&&othis.length&&(e=this.length);for(var o=this.length,a=this.tail;a!==null&&o>e;o--)a=a.prev;for(;a!==null&&o>t;o--,a=a.prev)r.push(a.value);return r};Cn.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var o=0,a=this.head;a!==null&&o{"use strict";var Qqe=IS(),ad=Symbol("max"),Bf=Symbol("length"),Sy=Symbol("lengthCalculator"),EI=Symbol("allowStale"),ld=Symbol("maxAge"),If=Symbol("dispose"),nz=Symbol("noDisposeOnSet"),xs=Symbol("lruList"),Mc=Symbol("cache"),sz=Symbol("updateAgeOnGet"),$T=()=>1,tN=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let r=this[ad]=e.max||1/0,o=e.length||$T;if(this[Sy]=typeof o!="function"?$T:o,this[EI]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[ld]=e.maxAge||0,this[If]=e.dispose,this[nz]=e.noDisposeOnSet||!1,this[sz]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[ad]=e||1/0,yI(this)}get max(){return this[ad]}set allowStale(e){this[EI]=!!e}get allowStale(){return this[EI]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[ld]=e,yI(this)}get maxAge(){return this[ld]}set lengthCalculator(e){typeof e!="function"&&(e=$T),e!==this[Sy]&&(this[Sy]=e,this[Bf]=0,this[xs].forEach(r=>{r.length=this[Sy](r.value,r.key),this[Bf]+=r.length})),yI(this)}get lengthCalculator(){return this[Sy]}get length(){return this[Bf]}get itemCount(){return this[xs].length}rforEach(e,r){r=r||this;for(let o=this[xs].tail;o!==null;){let a=o.prev;iz(this,e,o,r),o=a}}forEach(e,r){r=r||this;for(let o=this[xs].head;o!==null;){let a=o.next;iz(this,e,o,r),o=a}}keys(){return this[xs].toArray().map(e=>e.key)}values(){return this[xs].toArray().map(e=>e.value)}reset(){this[If]&&this[xs]&&this[xs].length&&this[xs].forEach(e=>this[If](e.key,e.value)),this[Mc]=new Map,this[xs]=new Qqe,this[Bf]=0}dump(){return this[xs].map(e=>BS(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[xs]}set(e,r,o){if(o=o||this[ld],o&&typeof o!="number")throw new TypeError("maxAge must be a number");let a=o?Date.now():0,n=this[Sy](r,e);if(this[Mc].has(e)){if(n>this[ad])return Py(this,this[Mc].get(e)),!1;let p=this[Mc].get(e).value;return this[If]&&(this[nz]||this[If](e,p.value)),p.now=a,p.maxAge=o,p.value=r,this[Bf]+=n-p.length,p.length=n,this.get(e),yI(this),!0}let u=new rN(e,r,n,a,o);return u.length>this[ad]?(this[If]&&this[If](e,r),!1):(this[Bf]+=u.length,this[xs].unshift(u),this[Mc].set(e,this[xs].head),yI(this),!0)}has(e){if(!this[Mc].has(e))return!1;let r=this[Mc].get(e).value;return!BS(this,r)}get(e){return eN(this,e,!0)}peek(e){return eN(this,e,!1)}pop(){let e=this[xs].tail;return e?(Py(this,e),e.value):null}del(e){Py(this,this[Mc].get(e))}load(e){this.reset();let r=Date.now();for(let o=e.length-1;o>=0;o--){let a=e[o],n=a.e||0;if(n===0)this.set(a.k,a.v);else{let u=n-r;u>0&&this.set(a.k,a.v,u)}}}prune(){this[Mc].forEach((e,r)=>eN(this,r,!1))}},eN=(t,e,r)=>{let o=t[Mc].get(e);if(o){let a=o.value;if(BS(t,a)){if(Py(t,o),!t[EI])return}else r&&(t[sz]&&(o.value.now=Date.now()),t[xs].unshiftNode(o));return a.value}},BS=(t,e)=>{if(!e||!e.maxAge&&!t[ld])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[ld]&&r>t[ld]},yI=t=>{if(t[Bf]>t[ad])for(let e=t[xs].tail;t[Bf]>t[ad]&&e!==null;){let r=e.prev;Py(t,e),e=r}},Py=(t,e)=>{if(e){let r=e.value;t[If]&&t[If](r.key,r.value),t[Bf]-=r.length,t[Mc].delete(r.key),t[xs].removeNode(e)}},rN=class{constructor(e,r,o,a,n){this.key=e,this.value=r,this.length=o,this.now=a,this.maxAge=n||0}},iz=(t,e,r,o)=>{let a=r.value;BS(t,a)&&(Py(t,r),t[EI]||(a=void 0)),a&&e.call(o,a.value,a.key,t)};oz.exports=tN});var Ol=_((cQt,Az)=>{var cd=class{constructor(e,r){if(r=Rqe(r),e instanceof cd)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new cd(e.raw,r);if(e instanceof nN)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(o=>this.parseRange(o.trim())).filter(o=>o.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let o=this.set[0];if(this.set=this.set.filter(a=>!cz(a[0])),this.set.length===0)this.set=[o];else if(this.set.length>1){for(let a of this.set)if(a.length===1&&_qe(a[0])){this.set=[a];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let o=((this.options.includePrerelease&&Mqe)|(this.options.loose&&Uqe))+":"+e,a=lz.get(o);if(a)return a;let n=this.options.loose,u=n?Da[zo.HYPHENRANGELOOSE]:Da[zo.HYPHENRANGE];e=e.replace(u,zqe(this.options.includePrerelease)),ci("hyphen replace",e),e=e.replace(Da[zo.COMPARATORTRIM],Nqe),ci("comparator trim",e),e=e.replace(Da[zo.TILDETRIM],Lqe),ci("tilde trim",e),e=e.replace(Da[zo.CARETTRIM],Oqe),ci("caret trim",e);let A=e.split(" ").map(I=>Hqe(I,this.options)).join(" ").split(/\s+/).map(I=>Jqe(I,this.options));n&&(A=A.filter(I=>(ci("loose invalid filter",I,this.options),!!I.match(Da[zo.COMPARATORLOOSE])))),ci("range list",A);let p=new Map,h=A.map(I=>new nN(I,this.options));for(let I of h){if(cz(I))return[I];p.set(I.value,I)}p.size>1&&p.has("")&&p.delete("");let E=[...p.values()];return lz.set(o,E),E}intersects(e,r){if(!(e instanceof cd))throw new TypeError("a Range is required");return this.set.some(o=>uz(o,r)&&e.set.some(a=>uz(a,r)&&o.every(n=>a.every(u=>n.intersects(u,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new Tqe(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",_qe=t=>t.value==="",uz=(t,e)=>{let r=!0,o=t.slice(),a=o.pop();for(;r&&o.length;)r=o.every(n=>a.intersects(n,e)),a=o.pop();return r},Hqe=(t,e)=>(ci("comp",t,e),t=qqe(t,e),ci("caret",t),t=jqe(t,e),ci("tildes",t),t=Wqe(t,e),ci("xrange",t),t=Vqe(t,e),ci("stars",t),t),Xo=t=>!t||t.toLowerCase()==="x"||t==="*",jqe=(t,e)=>t.trim().split(/\s+/).map(r=>Gqe(r,e)).join(" "),Gqe=(t,e)=>{let r=e.loose?Da[zo.TILDELOOSE]:Da[zo.TILDE];return t.replace(r,(o,a,n,u,A)=>{ci("tilde",t,o,a,n,u,A);let p;return Xo(a)?p="":Xo(n)?p=`>=${a}.0.0 <${+a+1}.0.0-0`:Xo(u)?p=`>=${a}.${n}.0 <${a}.${+n+1}.0-0`:A?(ci("replaceTilde pr",A),p=`>=${a}.${n}.${u}-${A} <${a}.${+n+1}.0-0`):p=`>=${a}.${n}.${u} <${a}.${+n+1}.0-0`,ci("tilde return",p),p})},qqe=(t,e)=>t.trim().split(/\s+/).map(r=>Yqe(r,e)).join(" "),Yqe=(t,e)=>{ci("caret",t,e);let r=e.loose?Da[zo.CARETLOOSE]:Da[zo.CARET],o=e.includePrerelease?"-0":"";return t.replace(r,(a,n,u,A,p)=>{ci("caret",t,a,n,u,A,p);let h;return Xo(n)?h="":Xo(u)?h=`>=${n}.0.0${o} <${+n+1}.0.0-0`:Xo(A)?n==="0"?h=`>=${n}.${u}.0${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.0${o} <${+n+1}.0.0-0`:p?(ci("replaceCaret pr",p),n==="0"?u==="0"?h=`>=${n}.${u}.${A}-${p} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}-${p} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A}-${p} <${+n+1}.0.0-0`):(ci("no pr"),n==="0"?u==="0"?h=`>=${n}.${u}.${A}${o} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A} <${+n+1}.0.0-0`),ci("caret return",h),h})},Wqe=(t,e)=>(ci("replaceXRanges",t,e),t.split(/\s+/).map(r=>Kqe(r,e)).join(" ")),Kqe=(t,e)=>{t=t.trim();let r=e.loose?Da[zo.XRANGELOOSE]:Da[zo.XRANGE];return t.replace(r,(o,a,n,u,A,p)=>{ci("xRange",t,o,a,n,u,A,p);let h=Xo(n),E=h||Xo(u),I=E||Xo(A),v=I;return a==="="&&v&&(a=""),p=e.includePrerelease?"-0":"",h?a===">"||a==="<"?o="<0.0.0-0":o="*":a&&v?(E&&(u=0),A=0,a===">"?(a=">=",E?(n=+n+1,u=0,A=0):(u=+u+1,A=0)):a==="<="&&(a="<",E?n=+n+1:u=+u+1),a==="<"&&(p="-0"),o=`${a+n}.${u}.${A}${p}`):E?o=`>=${n}.0.0${p} <${+n+1}.0.0-0`:I&&(o=`>=${n}.${u}.0${p} <${n}.${+u+1}.0-0`),ci("xRange return",o),o})},Vqe=(t,e)=>(ci("replaceStars",t,e),t.trim().replace(Da[zo.STAR],"")),Jqe=(t,e)=>(ci("replaceGTE0",t,e),t.trim().replace(Da[e.includePrerelease?zo.GTE0PRE:zo.GTE0],"")),zqe=t=>(e,r,o,a,n,u,A,p,h,E,I,v,x)=>(Xo(o)?r="":Xo(a)?r=`>=${o}.0.0${t?"-0":""}`:Xo(n)?r=`>=${o}.${a}.0${t?"-0":""}`:u?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,Xo(h)?p="":Xo(E)?p=`<${+h+1}.0.0-0`:Xo(I)?p=`<${h}.${+E+1}.0-0`:v?p=`<=${h}.${E}.${I}-${v}`:t?p=`<${h}.${E}.${+I+1}-0`:p=`<=${p}`,`${r} ${p}`.trim()),Xqe=(t,e,r)=>{for(let o=0;o0){let a=t[o].semver;if(a.major===e.major&&a.minor===e.minor&&a.patch===e.patch)return!0}return!1}return!0}});var CI=_((uQt,mz)=>{var wI=Symbol("SemVer ANY"),by=class{static get ANY(){return wI}constructor(e,r){if(r=fz(r),e instanceof by){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),sN("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===wI?this.value="":this.value=this.operator+this.semver.version,sN("comp",this)}parse(e){let r=this.options.loose?pz[hz.COMPARATORLOOSE]:pz[hz.COMPARATOR],o=e.match(r);if(!o)throw new TypeError(`Invalid comparator: ${e}`);this.operator=o[1]!==void 0?o[1]:"",this.operator==="="&&(this.operator=""),o[2]?this.semver=new gz(o[2],this.options.loose):this.semver=wI}toString(){return this.value}test(e){if(sN("Comparator.test",e,this.options.loose),this.semver===wI||e===wI)return!0;if(typeof e=="string")try{e=new gz(e,this.options)}catch{return!1}return iN(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof by))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new dz(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new dz(this.value,r).test(e.semver):(r=fz(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||iN(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||iN(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};mz.exports=by;var fz=pS(),{safeRe:pz,t:hz}=vy(),iN=ZT(),sN=dI(),gz=So(),dz=Ol()});var II=_((AQt,yz)=>{var Zqe=Ol(),$qe=(t,e,r)=>{try{e=new Zqe(e,r)}catch{return!1}return e.test(t)};yz.exports=$qe});var Cz=_((fQt,Ez)=>{var e9e=Ol(),t9e=(t,e)=>new e9e(t,e).set.map(r=>r.map(o=>o.value).join(" ").trim().split(" "));Ez.exports=t9e});var Iz=_((pQt,wz)=>{var r9e=So(),n9e=Ol(),i9e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new n9e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===-1)&&(o=u,a=new r9e(o,r))}),o};wz.exports=i9e});var vz=_((hQt,Bz)=>{var s9e=So(),o9e=Ol(),a9e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new o9e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===1)&&(o=u,a=new s9e(o,r))}),o};Bz.exports=a9e});var Pz=_((gQt,Sz)=>{var oN=So(),l9e=Ol(),Dz=mI(),c9e=(t,e)=>{t=new l9e(t,e);let r=new oN("0.0.0");if(t.test(r)||(r=new oN("0.0.0-0"),t.test(r)))return r;r=null;for(let o=0;o{let A=new oN(u.semver.version);switch(u.operator){case">":A.prerelease.length===0?A.patch++:A.prerelease.push(0),A.raw=A.format();case"":case">=":(!n||Dz(A,n))&&(n=A);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${u.operator}`)}}),n&&(!r||Dz(r,n))&&(r=n)}return r&&t.test(r)?r:null};Sz.exports=c9e});var xz=_((dQt,bz)=>{var u9e=Ol(),A9e=(t,e)=>{try{return new u9e(t,e).range||"*"}catch{return null}};bz.exports=A9e});var vS=_((mQt,Rz)=>{var f9e=So(),Fz=CI(),{ANY:p9e}=Fz,h9e=Ol(),g9e=II(),kz=mI(),Qz=mS(),d9e=ES(),m9e=yS(),y9e=(t,e,r,o)=>{t=new f9e(t,o),e=new h9e(e,o);let a,n,u,A,p;switch(r){case">":a=kz,n=d9e,u=Qz,A=">",p=">=";break;case"<":a=Qz,n=m9e,u=kz,A="<",p="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(g9e(t,e,o))return!1;for(let h=0;h{x.semver===p9e&&(x=new Fz(">=0.0.0")),I=I||x,v=v||x,a(x.semver,I.semver,o)?I=x:u(x.semver,v.semver,o)&&(v=x)}),I.operator===A||I.operator===p||(!v.operator||v.operator===A)&&n(t,v.semver))return!1;if(v.operator===p&&u(t,v.semver))return!1}return!0};Rz.exports=y9e});var Nz=_((yQt,Tz)=>{var E9e=vS(),C9e=(t,e,r)=>E9e(t,e,">",r);Tz.exports=C9e});var Oz=_((EQt,Lz)=>{var w9e=vS(),I9e=(t,e,r)=>w9e(t,e,"<",r);Lz.exports=I9e});var _z=_((CQt,Uz)=>{var Mz=Ol(),B9e=(t,e,r)=>(t=new Mz(t,r),e=new Mz(e,r),t.intersects(e,r));Uz.exports=B9e});var jz=_((wQt,Hz)=>{var v9e=II(),D9e=Ll();Hz.exports=(t,e,r)=>{let o=[],a=null,n=null,u=t.sort((E,I)=>D9e(E,I,r));for(let E of u)v9e(E,e,r)?(n=E,a||(a=E)):(n&&o.push([a,n]),n=null,a=null);a&&o.push([a,null]);let A=[];for(let[E,I]of o)E===I?A.push(E):!I&&E===u[0]?A.push("*"):I?E===u[0]?A.push(`<=${I}`):A.push(`${E} - ${I}`):A.push(`>=${E}`);let p=A.join(" || "),h=typeof e.raw=="string"?e.raw:String(e);return p.length{var Gz=Ol(),lN=CI(),{ANY:aN}=lN,BI=II(),cN=Ll(),S9e=(t,e,r={})=>{if(t===e)return!0;t=new Gz(t,r),e=new Gz(e,r);let o=!1;e:for(let a of t.set){for(let n of e.set){let u=b9e(a,n,r);if(o=o||u!==null,u)continue e}if(o)return!1}return!0},P9e=[new lN(">=0.0.0-0")],qz=[new lN(">=0.0.0")],b9e=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===aN){if(e.length===1&&e[0].semver===aN)return!0;r.includePrerelease?t=P9e:t=qz}if(e.length===1&&e[0].semver===aN){if(r.includePrerelease)return!0;e=qz}let o=new Set,a,n;for(let x of t)x.operator===">"||x.operator===">="?a=Yz(a,x,r):x.operator==="<"||x.operator==="<="?n=Wz(n,x,r):o.add(x.semver);if(o.size>1)return null;let u;if(a&&n){if(u=cN(a.semver,n.semver,r),u>0)return null;if(u===0&&(a.operator!==">="||n.operator!=="<="))return null}for(let x of o){if(a&&!BI(x,String(a),r)||n&&!BI(x,String(n),r))return null;for(let C of e)if(!BI(x,String(C),r))return!1;return!0}let A,p,h,E,I=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1,v=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;I&&I.prerelease.length===1&&n.operator==="<"&&I.prerelease[0]===0&&(I=!1);for(let x of e){if(E=E||x.operator===">"||x.operator===">=",h=h||x.operator==="<"||x.operator==="<=",a){if(v&&x.semver.prerelease&&x.semver.prerelease.length&&x.semver.major===v.major&&x.semver.minor===v.minor&&x.semver.patch===v.patch&&(v=!1),x.operator===">"||x.operator===">="){if(A=Yz(a,x,r),A===x&&A!==a)return!1}else if(a.operator===">="&&!BI(a.semver,String(x),r))return!1}if(n){if(I&&x.semver.prerelease&&x.semver.prerelease.length&&x.semver.major===I.major&&x.semver.minor===I.minor&&x.semver.patch===I.patch&&(I=!1),x.operator==="<"||x.operator==="<="){if(p=Wz(n,x,r),p===x&&p!==n)return!1}else if(n.operator==="<="&&!BI(n.semver,String(x),r))return!1}if(!x.operator&&(n||a)&&u!==0)return!1}return!(a&&h&&!n&&u!==0||n&&E&&!a&&u!==0||v||I)},Yz=(t,e,r)=>{if(!t)return e;let o=cN(t.semver,e.semver,r);return o>0?t:o<0||e.operator===">"&&t.operator===">="?e:t},Wz=(t,e,r)=>{if(!t)return e;let o=cN(t.semver,e.semver,r);return o<0?t:o>0||e.operator==="<"&&t.operator==="<="?e:t};Kz.exports=S9e});var zn=_((BQt,Xz)=>{var uN=vy(),Jz=gI(),x9e=So(),zz=JT(),k9e=sd(),Q9e=dJ(),F9e=yJ(),R9e=wJ(),T9e=vJ(),N9e=SJ(),L9e=bJ(),O9e=kJ(),M9e=FJ(),U9e=Ll(),_9e=LJ(),H9e=MJ(),j9e=dS(),G9e=jJ(),q9e=qJ(),Y9e=mI(),W9e=mS(),K9e=zT(),V9e=XT(),J9e=yS(),z9e=ES(),X9e=ZT(),Z9e=$J(),$9e=CI(),e5e=Ol(),t5e=II(),r5e=Cz(),n5e=Iz(),i5e=vz(),s5e=Pz(),o5e=xz(),a5e=vS(),l5e=Nz(),c5e=Oz(),u5e=_z(),A5e=jz(),f5e=Vz();Xz.exports={parse:k9e,valid:Q9e,clean:F9e,inc:R9e,diff:T9e,major:N9e,minor:L9e,patch:O9e,prerelease:M9e,compare:U9e,rcompare:_9e,compareLoose:H9e,compareBuild:j9e,sort:G9e,rsort:q9e,gt:Y9e,lt:W9e,eq:K9e,neq:V9e,gte:J9e,lte:z9e,cmp:X9e,coerce:Z9e,Comparator:$9e,Range:e5e,satisfies:t5e,toComparators:r5e,maxSatisfying:n5e,minSatisfying:i5e,minVersion:s5e,validRange:o5e,outside:a5e,gtr:l5e,ltr:c5e,intersects:u5e,simplifyRange:A5e,subset:f5e,SemVer:x9e,re:uN.re,src:uN.src,tokens:uN.t,SEMVER_SPEC_VERSION:Jz.SEMVER_SPEC_VERSION,RELEASE_TYPES:Jz.RELEASE_TYPES,compareIdentifiers:zz.compareIdentifiers,rcompareIdentifiers:zz.rcompareIdentifiers}});var $z=_((vQt,Zz)=>{"use strict";function p5e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function ud(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,ud)}p5e(ud,Error);ud.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I{switch(Ne[1]){case"|":return Pe|Ne[3];case"&":return Pe&Ne[3];case"^":return Pe^Ne[3]}},Z)},v="!",x=Re("!",!1),C=function(Z){return!Z},R="(",L=Re("(",!1),U=")",J=Re(")",!1),te=function(Z){return Z},ae=/^[^ \t\n\r()!|&\^]/,fe=ke([" "," ",` +`,"\r","(",")","!","|","&","^"],!0,!1),ce=function(Z){return e.queryPattern.test(Z)},me=function(Z){return e.checkFn(Z)},he=Te("whitespace"),Be=/^[ \t\n\r]/,we=ke([" "," ",` +`,"\r"],!1,!1),g=0,Ee=0,Se=[{line:1,column:1}],le=0,ne=[],ee=0,Ie;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function Fe(){return t.substring(Ee,g)}function At(){return je(Ee,g)}function H(Z,ie){throw ie=ie!==void 0?ie:je(Ee,g),P([Te(Z)],t.substring(Ee,g),ie)}function at(Z,ie){throw ie=ie!==void 0?ie:je(Ee,g),w(Z,ie)}function Re(Z,ie){return{type:"literal",text:Z,ignoreCase:ie}}function ke(Z,ie,Pe){return{type:"class",parts:Z,inverted:ie,ignoreCase:Pe}}function xe(){return{type:"any"}}function He(){return{type:"end"}}function Te(Z){return{type:"other",description:Z}}function Je(Z){var ie=Se[Z],Pe;if(ie)return ie;for(Pe=Z-1;!Se[Pe];)Pe--;for(ie=Se[Pe],ie={line:ie.line,column:ie.column};Pele&&(le=g,ne=[]),ne.push(Z))}function w(Z,ie){return new ud(Z,null,null,ie)}function P(Z,ie,Pe){return new ud(ud.buildMessage(Z,ie),Z,ie,Pe)}function y(){var Z,ie,Pe,Ne,ot,dt,Gt,$t;if(Z=g,ie=F(),ie!==r){for(Pe=[],Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&b(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&b(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&b(E)))),dt!==r?(Gt=X(),Gt!==r?($t=F(),$t!==r?(ot=[ot,dt,Gt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Ne!==r;)Pe.push(Ne),Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&b(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&b(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&b(E)))),dt!==r?(Gt=X(),Gt!==r?($t=F(),$t!==r?(ot=[ot,dt,Gt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Pe!==r?(Ee=Z,ie=I(ie,Pe),Z=ie):(g=Z,Z=r)}else g=Z,Z=r;return Z}function F(){var Z,ie,Pe,Ne,ot,dt;return Z=g,t.charCodeAt(g)===33?(ie=v,g++):(ie=r,ee===0&&b(x)),ie!==r?(Pe=F(),Pe!==r?(Ee=Z,ie=C(Pe),Z=ie):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=g,t.charCodeAt(g)===40?(ie=R,g++):(ie=r,ee===0&&b(L)),ie!==r?(Pe=X(),Pe!==r?(Ne=y(),Ne!==r?(ot=X(),ot!==r?(t.charCodeAt(g)===41?(dt=U,g++):(dt=r,ee===0&&b(J)),dt!==r?(Ee=Z,ie=te(Ne),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=z())),Z}function z(){var Z,ie,Pe,Ne,ot;if(Z=g,ie=X(),ie!==r){if(Pe=g,Ne=[],ae.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&b(fe)),ot!==r)for(;ot!==r;)Ne.push(ot),ae.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&b(fe));else Ne=r;Ne!==r?Pe=t.substring(Pe,g):Pe=Ne,Pe!==r?(Ee=g,Ne=ce(Pe),Ne?Ne=void 0:Ne=r,Ne!==r?(Ee=Z,ie=me(Pe),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)}else g=Z,Z=r;return Z}function X(){var Z,ie;for(ee++,Z=[],Be.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&b(we));ie!==r;)Z.push(ie),Be.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&b(we));return ee--,Z===r&&(ie=r,ee===0&&b(he)),Z}if(Ie=a(),Ie!==r&&g===t.length)return Ie;throw Ie!==r&&g{var{parse:g5e}=$z();DS.makeParser=(t=/[a-z]+/)=>(e,r)=>g5e(e,{queryPattern:t,checkFn:r});DS.parse=DS.makeParser()});var rX=_((SQt,tX)=>{"use strict";tX.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var AN=_((PQt,iX)=>{var vI=rX(),nX={};for(let t of Object.keys(vI))nX[vI[t]]=t;var Ar={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};iX.exports=Ar;for(let t of Object.keys(Ar)){if(!("channels"in Ar[t]))throw new Error("missing channels property: "+t);if(!("labels"in Ar[t]))throw new Error("missing channel labels property: "+t);if(Ar[t].labels.length!==Ar[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=Ar[t];delete Ar[t].channels,delete Ar[t].labels,Object.defineProperty(Ar[t],"channels",{value:e}),Object.defineProperty(Ar[t],"labels",{value:r})}Ar.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(e,r,o),n=Math.max(e,r,o),u=n-a,A,p;n===a?A=0:e===n?A=(r-o)/u:r===n?A=2+(o-e)/u:o===n&&(A=4+(e-r)/u),A=Math.min(A*60,360),A<0&&(A+=360);let h=(a+n)/2;return n===a?p=0:h<=.5?p=u/(n+a):p=u/(2-n-a),[A,p*100,h*100]};Ar.rgb.hsv=function(t){let e,r,o,a,n,u=t[0]/255,A=t[1]/255,p=t[2]/255,h=Math.max(u,A,p),E=h-Math.min(u,A,p),I=function(v){return(h-v)/6/E+1/2};return E===0?(a=0,n=0):(n=E/h,e=I(u),r=I(A),o=I(p),u===h?a=o-r:A===h?a=1/3+e-o:p===h&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[a*360,n*100,h*100]};Ar.rgb.hwb=function(t){let e=t[0],r=t[1],o=t[2],a=Ar.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,o));return o=1-1/255*Math.max(e,Math.max(r,o)),[a,n*100,o*100]};Ar.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(1-e,1-r,1-o),n=(1-e-a)/(1-a)||0,u=(1-r-a)/(1-a)||0,A=(1-o-a)/(1-a)||0;return[n*100,u*100,A*100,a*100]};function d5e(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}Ar.rgb.keyword=function(t){let e=nX[t];if(e)return e;let r=1/0,o;for(let a of Object.keys(vI)){let n=vI[a],u=d5e(t,n);u.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92;let a=e*.4124+r*.3576+o*.1805,n=e*.2126+r*.7152+o*.0722,u=e*.0193+r*.1192+o*.9505;return[a*100,n*100,u*100]};Ar.rgb.lab=function(t){let e=Ar.rgb.xyz(t),r=e[0],o=e[1],a=e[2];r/=95.047,o/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;let n=116*o-16,u=500*(r-o),A=200*(o-a);return[n,u,A]};Ar.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a,n,u;if(r===0)return u=o*255,[u,u,u];o<.5?a=o*(1+r):a=o+r-o*r;let A=2*o-a,p=[0,0,0];for(let h=0;h<3;h++)n=e+1/3*-(h-1),n<0&&n++,n>1&&n--,6*n<1?u=A+(a-A)*6*n:2*n<1?u=a:3*n<2?u=A+(a-A)*(2/3-n)*6:u=A,p[h]=u*255;return p};Ar.hsl.hsv=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=r,n=Math.max(o,.01);o*=2,r*=o<=1?o:2-o,a*=n<=1?n:2-n;let u=(o+r)/2,A=o===0?2*a/(n+a):2*r/(o+r);return[e,A*100,u*100]};Ar.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,o=t[2]/100,a=Math.floor(e)%6,n=e-Math.floor(e),u=255*o*(1-r),A=255*o*(1-r*n),p=255*o*(1-r*(1-n));switch(o*=255,a){case 0:return[o,p,u];case 1:return[A,o,u];case 2:return[u,o,p];case 3:return[u,A,o];case 4:return[p,u,o];case 5:return[o,u,A]}};Ar.hsv.hsl=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=Math.max(o,.01),n,u;u=(2-r)*o;let A=(2-r)*a;return n=r*a,n/=A<=1?A:2-A,n=n||0,u/=2,[e,n*100,u*100]};Ar.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a=r+o,n;a>1&&(r/=a,o/=a);let u=Math.floor(6*e),A=1-o;n=6*e-u,(u&1)!==0&&(n=1-n);let p=r+n*(A-r),h,E,I;switch(u){default:case 6:case 0:h=A,E=p,I=r;break;case 1:h=p,E=A,I=r;break;case 2:h=r,E=A,I=p;break;case 3:h=r,E=p,I=A;break;case 4:h=p,E=r,I=A;break;case 5:h=A,E=r,I=p;break}return[h*255,E*255,I*255]};Ar.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a=t[3]/100,n=1-Math.min(1,e*(1-a)+a),u=1-Math.min(1,r*(1-a)+a),A=1-Math.min(1,o*(1-a)+a);return[n*255,u*255,A*255]};Ar.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a,n,u;return a=e*3.2406+r*-1.5372+o*-.4986,n=e*-.9689+r*1.8758+o*.0415,u=e*.0557+r*-.204+o*1.057,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,u=u>.0031308?1.055*u**(1/2.4)-.055:u*12.92,a=Math.min(Math.max(0,a),1),n=Math.min(Math.max(0,n),1),u=Math.min(Math.max(0,u),1),[a*255,n*255,u*255]};Ar.xyz.lab=function(t){let e=t[0],r=t[1],o=t[2];e/=95.047,r/=100,o/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let a=116*r-16,n=500*(e-r),u=200*(r-o);return[a,n,u]};Ar.lab.xyz=function(t){let e=t[0],r=t[1],o=t[2],a,n,u;n=(e+16)/116,a=r/500+n,u=n-o/200;let A=n**3,p=a**3,h=u**3;return n=A>.008856?A:(n-16/116)/7.787,a=p>.008856?p:(a-16/116)/7.787,u=h>.008856?h:(u-16/116)/7.787,a*=95.047,n*=100,u*=108.883,[a,n,u]};Ar.lab.lch=function(t){let e=t[0],r=t[1],o=t[2],a;a=Math.atan2(o,r)*360/2/Math.PI,a<0&&(a+=360);let u=Math.sqrt(r*r+o*o);return[e,u,a]};Ar.lch.lab=function(t){let e=t[0],r=t[1],a=t[2]/360*2*Math.PI,n=r*Math.cos(a),u=r*Math.sin(a);return[e,n,u]};Ar.rgb.ansi16=function(t,e=null){let[r,o,a]=t,n=e===null?Ar.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let u=30+(Math.round(a/255)<<2|Math.round(o/255)<<1|Math.round(r/255));return n===2&&(u+=60),u};Ar.hsv.ansi16=function(t){return Ar.rgb.ansi16(Ar.hsv.rgb(t),t[2])};Ar.rgb.ansi256=function(t){let e=t[0],r=t[1],o=t[2];return e===r&&r===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)};Ar.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let r=(~~(t>50)+1)*.5,o=(e&1)*r*255,a=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[o,a,n]};Ar.ansi256.rgb=function(t){if(t>=232){let n=(t-232)*10+8;return[n,n,n]}t-=16;let e,r=Math.floor(t/36)/5*255,o=Math.floor((e=t%36)/6)/5*255,a=e%6/5*255;return[r,o,a]};Ar.rgb.hex=function(t){let r=(((Math.round(t[0])&255)<<16)+((Math.round(t[1])&255)<<8)+(Math.round(t[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};Ar.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];e[0].length===3&&(r=r.split("").map(A=>A+A).join(""));let o=parseInt(r,16),a=o>>16&255,n=o>>8&255,u=o&255;return[a,n,u]};Ar.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.max(Math.max(e,r),o),n=Math.min(Math.min(e,r),o),u=a-n,A,p;return u<1?A=n/(1-u):A=0,u<=0?p=0:a===e?p=(r-o)/u%6:a===r?p=2+(o-e)/u:p=4+(e-r)/u,p/=6,p%=1,[p*360,u*100,A*100]};Ar.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=r<.5?2*e*r:2*e*(1-r),a=0;return o<1&&(a=(r-.5*o)/(1-o)),[t[0],o*100,a*100]};Ar.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=e*r,a=0;return o<1&&(a=(r-o)/(1-o)),[t[0],o*100,a*100]};Ar.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100;if(r===0)return[o*255,o*255,o*255];let a=[0,0,0],n=e%1*6,u=n%1,A=1-u,p=0;switch(Math.floor(n)){case 0:a[0]=1,a[1]=u,a[2]=0;break;case 1:a[0]=A,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=u;break;case 3:a[0]=0,a[1]=A,a[2]=1;break;case 4:a[0]=u,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=A}return p=(1-r)*o,[(r*a[0]+p)*255,(r*a[1]+p)*255,(r*a[2]+p)*255]};Ar.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e),a=0;return o>0&&(a=e/o),[t[0],a*100,o*100]};Ar.hcg.hsl=function(t){let e=t[1]/100,o=t[2]/100*(1-e)+.5*e,a=0;return o>0&&o<.5?a=e/(2*o):o>=.5&&o<1&&(a=e/(2*(1-o))),[t[0],a*100,o*100]};Ar.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e);return[t[0],(o-e)*100,(1-o)*100]};Ar.hwb.hcg=function(t){let e=t[1]/100,o=1-t[2]/100,a=o-e,n=0;return a<1&&(n=(o-a)/(1-a)),[t[0],a*100,n*100]};Ar.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};Ar.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};Ar.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};Ar.gray.hsl=function(t){return[0,0,t[0]]};Ar.gray.hsv=Ar.gray.hsl;Ar.gray.hwb=function(t){return[0,100,t[0]]};Ar.gray.cmyk=function(t){return[0,0,0,t[0]]};Ar.gray.lab=function(t){return[t[0],0,0]};Ar.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,o=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(o.length)+o};Ar.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var oX=_((bQt,sX)=>{var SS=AN();function m5e(){let t={},e=Object.keys(SS);for(let r=e.length,o=0;o{var fN=AN(),w5e=oX(),xy={},I5e=Object.keys(fN);function B5e(t){let e=function(...r){let o=r[0];return o==null?o:(o.length>1&&(r=o),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function v5e(t){let e=function(...r){let o=r[0];if(o==null)return o;o.length>1&&(r=o);let a=t(r);if(typeof a=="object")for(let n=a.length,u=0;u{xy[t]={},Object.defineProperty(xy[t],"channels",{value:fN[t].channels}),Object.defineProperty(xy[t],"labels",{value:fN[t].labels});let e=w5e(t);Object.keys(e).forEach(o=>{let a=e[o];xy[t][o]=v5e(a),xy[t][o].raw=B5e(a)})});aX.exports=xy});var DI=_((kQt,pX)=>{"use strict";var cX=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,uX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};5;${o}m`},AX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};2;${o[0]};${o[1]};${o[2]}m`},PS=t=>t,fX=(t,e,r)=>[t,e,r],ky=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let o=r();return Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0}),o},enumerable:!0,configurable:!0})},pN,Qy=(t,e,r,o)=>{pN===void 0&&(pN=lX());let a=o?10:0,n={};for(let[u,A]of Object.entries(pN)){let p=u==="ansi16"?"ansi":u;u===e?n[p]=t(r,a):typeof A=="object"&&(n[p]=t(A[e],a))}return n};function D5e(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[r,o]of Object.entries(e)){for(let[a,n]of Object.entries(o))e[a]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},o[a]=e[a],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:o,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",ky(e.color,"ansi",()=>Qy(cX,"ansi16",PS,!1)),ky(e.color,"ansi256",()=>Qy(uX,"ansi256",PS,!1)),ky(e.color,"ansi16m",()=>Qy(AX,"rgb",fX,!1)),ky(e.bgColor,"ansi",()=>Qy(cX,"ansi16",PS,!0)),ky(e.bgColor,"ansi256",()=>Qy(uX,"ansi256",PS,!0)),ky(e.bgColor,"ansi16m",()=>Qy(AX,"rgb",fX,!0)),e}Object.defineProperty(pX,"exports",{enumerable:!0,get:D5e})});var gX=_((QQt,hX)=>{"use strict";hX.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",o=e.indexOf(r+t),a=e.indexOf("--");return o!==-1&&(a===-1||o{"use strict";var S5e=ve("os"),dX=ve("tty"),Ml=gX(),{env:ls}=process,Jp;Ml("no-color")||Ml("no-colors")||Ml("color=false")||Ml("color=never")?Jp=0:(Ml("color")||Ml("colors")||Ml("color=true")||Ml("color=always"))&&(Jp=1);"FORCE_COLOR"in ls&&(ls.FORCE_COLOR==="true"?Jp=1:ls.FORCE_COLOR==="false"?Jp=0:Jp=ls.FORCE_COLOR.length===0?1:Math.min(parseInt(ls.FORCE_COLOR,10),3));function hN(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function gN(t,e){if(Jp===0)return 0;if(Ml("color=16m")||Ml("color=full")||Ml("color=truecolor"))return 3;if(Ml("color=256"))return 2;if(t&&!e&&Jp===void 0)return 0;let r=Jp||0;if(ls.TERM==="dumb")return r;if(process.platform==="win32"){let o=S5e.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in ls)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(o=>o in ls)||ls.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in ls)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ls.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in ls)return 1;if(ls.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ls){let o=parseInt((ls.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ls.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ls.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ls.TERM)||"COLORTERM"in ls?1:r}function P5e(t){let e=gN(t,t&&t.isTTY);return hN(e)}mX.exports={supportsColor:P5e,stdout:hN(gN(!0,dX.isatty(1))),stderr:hN(gN(!0,dX.isatty(2)))}});var EX=_((RQt,yX)=>{"use strict";var b5e=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},x5e=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`:` +`)+r,a=o+1,o=t.indexOf(` +`,a)}while(o!==-1);return n+=t.substr(a),n};yX.exports={stringReplaceAll:b5e,stringEncaseCRLFWithFirstIndex:x5e}});var vX=_((TQt,BX)=>{"use strict";var k5e=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,CX=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,Q5e=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,F5e=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,R5e=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function IX(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):R5e.get(t)||t}function T5e(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(Q5e))r.push(a[2].replace(F5e,(A,p,h)=>p?IX(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function N5e(t){CX.lastIndex=0;let e=[],r;for(;(r=CX.exec(t))!==null;){let o=r[1];if(r[2]){let a=T5e(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function wX(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}BX.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(k5e,(n,u,A,p,h,E)=>{if(u)a.push(IX(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:wX(t,r)(I)),r.push({inverse:A,styles:N5e(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(wX(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var IN=_((NQt,bX)=>{"use strict";var SI=DI(),{stdout:yN,stderr:EN}=dN(),{stringReplaceAll:L5e,stringEncaseCRLFWithFirstIndex:O5e}=EX(),DX=["ansi","ansi","ansi256","ansi16m"],Fy=Object.create(null),M5e=(t,e={})=>{if(e.level>3||e.level<0)throw new Error("The `level` option should be an integer from 0 to 3");let r=yN?yN.level:0;t.level=e.level===void 0?r:e.level},CN=class{constructor(e){return SX(e)}},SX=t=>{let e={};return M5e(e,t),e.template=(...r)=>H5e(e.template,...r),Object.setPrototypeOf(e,bS.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=CN,e.template};function bS(t){return SX(t)}for(let[t,e]of Object.entries(SI))Fy[t]={get(){let r=xS(this,wN(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};Fy.visible={get(){let t=xS(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var PX=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of PX)Fy[t]={get(){let{level:e}=this;return function(...r){let o=wN(SI.color[DX[e]][t](...r),SI.color.close,this._styler);return xS(this,o,this._isEmpty)}}};for(let t of PX){let e="bg"+t[0].toUpperCase()+t.slice(1);Fy[e]={get(){let{level:r}=this;return function(...o){let a=wN(SI.bgColor[DX[r]][t](...o),SI.bgColor.close,this._styler);return xS(this,a,this._isEmpty)}}}}var U5e=Object.defineProperties(()=>{},{...Fy,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),wN=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},xS=(t,e,r)=>{let o=(...a)=>_5e(o,a.length===1?""+a[0]:a.join(" "));return o.__proto__=U5e,o._generator=t,o._styler=e,o._isEmpty=r,o},_5e=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=L5e(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=O5e(e,a,o,n)),o+e+a},mN,H5e=(t,...e)=>{let[r]=e;if(!Array.isArray(r))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";Ul.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Ul.find=(t,e)=>t.nodes.find(r=>r.type===e);Ul.exceedsLimit=(t,e,r=1,o)=>o===!1||!Ul.isInteger(t)||!Ul.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=o;Ul.escapeNode=(t,e=0,r)=>{let o=t.nodes[e];!o||(r&&o.type===r||o.type==="open"||o.type==="close")&&o.escaped!==!0&&(o.value="\\"+o.value,o.escaped=!0)};Ul.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;Ul.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:t.commas>>0+t.ranges>>0===0||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;Ul.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Ul.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Ul.flatten=(...t)=>{let e=[],r=o=>{for(let a=0;a{"use strict";var xX=kS();kX.exports=(t,e={})=>{let r=(o,a={})=>{let n=e.escapeInvalid&&xX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A="";if(o.value)return(n||u)&&xX.isOpenOrClose(o)?"\\"+o.value:o.value;if(o.value)return o.value;if(o.nodes)for(let p of o.nodes)A+=r(p);return A};return r(t)}});var FX=_((MQt,QX)=>{"use strict";QX.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var HX=_((UQt,_X)=>{"use strict";var RX=FX(),Ad=(t,e,r)=>{if(RX(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(RX(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let o={relaxZeros:!0,...r};typeof o.strictZeros=="boolean"&&(o.relaxZeros=o.strictZeros===!1);let a=String(o.relaxZeros),n=String(o.shorthand),u=String(o.capture),A=String(o.wrap),p=t+":"+e+"="+a+n+u+A;if(Ad.cache.hasOwnProperty(p))return Ad.cache[p].result;let h=Math.min(t,e),E=Math.max(t,e);if(Math.abs(h-E)===1){let R=t+"|"+e;return o.capture?`(${R})`:o.wrap===!1?R:`(?:${R})`}let I=UX(t)||UX(e),v={min:t,max:e,a:h,b:E},x=[],C=[];if(I&&(v.isPadded=I,v.maxLen=String(v.max).length),h<0){let R=E<0?Math.abs(E):1;C=TX(R,Math.abs(h),v,o),h=v.a=0}return E>=0&&(x=TX(h,E,v,o)),v.negatives=C,v.positives=x,v.result=j5e(C,x,o),o.capture===!0?v.result=`(${v.result})`:o.wrap!==!1&&x.length+C.length>1&&(v.result=`(?:${v.result})`),Ad.cache[p]=v,v.result};function j5e(t,e,r){let o=BN(t,e,"-",!1,r)||[],a=BN(e,t,"",!1,r)||[],n=BN(t,e,"-?",!0,r)||[];return o.concat(n).concat(a).join("|")}function G5e(t,e){let r=1,o=1,a=LX(t,r),n=new Set([e]);for(;t<=a&&a<=e;)n.add(a),r+=1,a=LX(t,r);for(a=OX(e+1,o)-1;t1&&A.count.pop(),A.count.push(E.count[0]),A.string=A.pattern+MX(A.count),u=h+1;continue}r.isPadded&&(I=V5e(h,r,o)),E.string=I+E.pattern+MX(E.count),n.push(E),u=h+1,A=E}return n}function BN(t,e,r,o,a){let n=[];for(let u of t){let{string:A}=u;!o&&!NX(e,"string",A)&&n.push(r+A),o&&NX(e,"string",A)&&n.push(r+A)}return n}function Y5e(t,e){let r=[];for(let o=0;oe?1:e>t?-1:0}function NX(t,e,r){return t.some(o=>o[e]===r)}function LX(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function OX(t,e){return t-t%Math.pow(10,e)}function MX(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function K5e(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function UX(t){return/^-?(0+)\d/.test(t)}function V5e(t,e,r){if(!e.isPadded)return t;let o=Math.abs(e.maxLen-String(t).length),a=r.relaxZeros!==!1;switch(o){case 0:return"";case 1:return a?"0?":"0";case 2:return a?"0{0,2}":"00";default:return a?`0{0,${o}}`:`0{${o}}`}}Ad.cache={};Ad.clearCache=()=>Ad.cache={};_X.exports=Ad});var SN=_((_Qt,JX)=>{"use strict";var J5e=ve("util"),qX=HX(),jX=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),z5e=t=>e=>t===!0?Number(e):String(e),vN=t=>typeof t=="number"||typeof t=="string"&&t!=="",bI=t=>Number.isInteger(+t),DN=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},X5e=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,Z5e=(t,e,r)=>{if(e>0){let o=t[0]==="-"?"-":"";o&&(t=t.slice(1)),t=o+t.padStart(o?e-1:e,"0")}return r===!1?String(t):t},GX=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((u,A)=>uA?1:0),t.positives.sort((u,A)=>uA?1:0);let r=e.capture?"":"?:",o="",a="",n;return t.positives.length&&(o=t.positives.join("|")),t.negatives.length&&(a=`-(${r}${t.negatives.join("|")})`),o&&a?n=`${o}|${a}`:n=o||a,e.wrap?`(${r}${n})`:n},YX=(t,e,r,o)=>{if(r)return qX(t,e,{wrap:!1,...o});let a=String.fromCharCode(t);if(t===e)return a;let n=String.fromCharCode(e);return`[${a}-${n}]`},WX=(t,e,r)=>{if(Array.isArray(t)){let o=r.wrap===!0,a=r.capture?"":"?:";return o?`(${a}${t.join("|")})`:t.join("|")}return qX(t,e,r)},KX=(...t)=>new RangeError("Invalid range arguments: "+J5e.inspect(...t)),VX=(t,e,r)=>{if(r.strictRanges===!0)throw KX([t,e]);return[]},e7e=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},t7e=(t,e,r=1,o={})=>{let a=Number(t),n=Number(e);if(!Number.isInteger(a)||!Number.isInteger(n)){if(o.strictRanges===!0)throw KX([t,e]);return[]}a===0&&(a=0),n===0&&(n=0);let u=a>n,A=String(t),p=String(e),h=String(r);r=Math.max(Math.abs(r),1);let E=DN(A)||DN(p)||DN(h),I=E?Math.max(A.length,p.length,h.length):0,v=E===!1&&X5e(t,e,o)===!1,x=o.transform||z5e(v);if(o.toRegex&&r===1)return YX(GX(t,I),GX(e,I),!0,o);let C={negatives:[],positives:[]},R=J=>C[J<0?"negatives":"positives"].push(Math.abs(J)),L=[],U=0;for(;u?a>=n:a<=n;)o.toRegex===!0&&r>1?R(a):L.push(Z5e(x(a,U),I,v)),a=u?a-r:a+r,U++;return o.toRegex===!0?r>1?$5e(C,o):WX(L,null,{wrap:!1,...o}):L},r7e=(t,e,r=1,o={})=>{if(!bI(t)&&t.length>1||!bI(e)&&e.length>1)return VX(t,e,o);let a=o.transform||(v=>String.fromCharCode(v)),n=`${t}`.charCodeAt(0),u=`${e}`.charCodeAt(0),A=n>u,p=Math.min(n,u),h=Math.max(n,u);if(o.toRegex&&r===1)return YX(p,h,!1,o);let E=[],I=0;for(;A?n>=u:n<=u;)E.push(a(n,I)),n=A?n-r:n+r,I++;return o.toRegex===!0?WX(E,null,{wrap:!1,options:o}):E},RS=(t,e,r,o={})=>{if(e==null&&vN(t))return[t];if(!vN(t)||!vN(e))return VX(t,e,o);if(typeof r=="function")return RS(t,e,1,{transform:r});if(jX(r))return RS(t,e,0,r);let a={...o};return a.capture===!0&&(a.wrap=!0),r=r||a.step||1,bI(r)?bI(t)&&bI(e)?t7e(t,e,r,a):r7e(t,e,Math.max(Math.abs(r),1),a):r!=null&&!jX(r)?e7e(r,a):RS(t,e,1,r)};JX.exports=RS});var ZX=_((HQt,XX)=>{"use strict";var n7e=SN(),zX=kS(),i7e=(t,e={})=>{let r=(o,a={})=>{let n=zX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A=n===!0||u===!0,p=e.escapeInvalid===!0?"\\":"",h="";if(o.isOpen===!0||o.isClose===!0)return p+o.value;if(o.type==="open")return A?p+o.value:"(";if(o.type==="close")return A?p+o.value:")";if(o.type==="comma")return o.prev.type==="comma"?"":A?o.value:"|";if(o.value)return o.value;if(o.nodes&&o.ranges>0){let E=zX.reduce(o.nodes),I=n7e(...E,{...e,wrap:!1,toRegex:!0});if(I.length!==0)return E.length>1&&I.length>1?`(${I})`:I}if(o.nodes)for(let E of o.nodes)h+=r(E,o);return h};return r(t)};XX.exports=i7e});var tZ=_((jQt,eZ)=>{"use strict";var s7e=SN(),$X=QS(),Ry=kS(),fd=(t="",e="",r=!1)=>{let o=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Ry.flatten(e).map(a=>`{${a}}`):e;for(let a of t)if(Array.isArray(a))for(let n of a)o.push(fd(n,e,r));else for(let n of e)r===!0&&typeof n=="string"&&(n=`{${n}}`),o.push(Array.isArray(n)?fd(a,n,r):a+n);return Ry.flatten(o)},o7e=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,o=(a,n={})=>{a.queue=[];let u=n,A=n.queue;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,A=u.queue;if(a.invalid||a.dollar){A.push(fd(A.pop(),$X(a,e)));return}if(a.type==="brace"&&a.invalid!==!0&&a.nodes.length===2){A.push(fd(A.pop(),["{}"]));return}if(a.nodes&&a.ranges>0){let I=Ry.reduce(a.nodes);if(Ry.exceedsLimit(...I,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let v=s7e(...I,e);v.length===0&&(v=$X(a,e)),A.push(fd(A.pop(),v)),a.nodes=[];return}let p=Ry.encloseBrace(a),h=a.queue,E=a;for(;E.type!=="brace"&&E.type!=="root"&&E.parent;)E=E.parent,h=E.queue;for(let I=0;I{"use strict";rZ.exports={MAX_LENGTH:1024*64,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:` +`,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var lZ=_((qQt,aZ)=>{"use strict";var a7e=QS(),{MAX_LENGTH:iZ,CHAR_BACKSLASH:PN,CHAR_BACKTICK:l7e,CHAR_COMMA:c7e,CHAR_DOT:u7e,CHAR_LEFT_PARENTHESES:A7e,CHAR_RIGHT_PARENTHESES:f7e,CHAR_LEFT_CURLY_BRACE:p7e,CHAR_RIGHT_CURLY_BRACE:h7e,CHAR_LEFT_SQUARE_BRACKET:sZ,CHAR_RIGHT_SQUARE_BRACKET:oZ,CHAR_DOUBLE_QUOTE:g7e,CHAR_SINGLE_QUOTE:d7e,CHAR_NO_BREAK_SPACE:m7e,CHAR_ZERO_WIDTH_NOBREAK_SPACE:y7e}=nZ(),E7e=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},o=typeof r.maxLength=="number"?Math.min(iZ,r.maxLength):iZ;if(t.length>o)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${o})`);let a={type:"root",input:t,nodes:[]},n=[a],u=a,A=a,p=0,h=t.length,E=0,I=0,v,x={},C=()=>t[E++],R=L=>{if(L.type==="text"&&A.type==="dot"&&(A.type="text"),A&&A.type==="text"&&L.type==="text"){A.value+=L.value;return}return u.nodes.push(L),L.parent=u,L.prev=A,A=L,L};for(R({type:"bos"});E0){if(u.ranges>0){u.ranges=0;let L=u.nodes.shift();u.nodes=[L,{type:"text",value:a7e(u)}]}R({type:"comma",value:v}),u.commas++;continue}if(v===u7e&&I>0&&u.commas===0){let L=u.nodes;if(I===0||L.length===0){R({type:"text",value:v});continue}if(A.type==="dot"){if(u.range=[],A.value+=v,A.type="range",u.nodes.length!==3&&u.nodes.length!==5){u.invalid=!0,u.ranges=0,A.type="text";continue}u.ranges++,u.args=[];continue}if(A.type==="range"){L.pop();let U=L[L.length-1];U.value+=A.value+v,A=U,u.ranges--;continue}R({type:"dot",value:v});continue}R({type:"text",value:v})}do if(u=n.pop(),u.type!=="root"){u.nodes.forEach(J=>{J.nodes||(J.type==="open"&&(J.isOpen=!0),J.type==="close"&&(J.isClose=!0),J.nodes||(J.type="text"),J.invalid=!0)});let L=n[n.length-1],U=L.nodes.indexOf(u);L.nodes.splice(U,1,...u.nodes)}while(n.length>0);return R({type:"eos"}),a};aZ.exports=E7e});var AZ=_((YQt,uZ)=>{"use strict";var cZ=QS(),C7e=ZX(),w7e=tZ(),I7e=lZ(),rl=(t,e={})=>{let r=[];if(Array.isArray(t))for(let o of t){let a=rl.create(o,e);Array.isArray(a)?r.push(...a):r.push(a)}else r=[].concat(rl.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};rl.parse=(t,e={})=>I7e(t,e);rl.stringify=(t,e={})=>cZ(typeof t=="string"?rl.parse(t,e):t,e);rl.compile=(t,e={})=>(typeof t=="string"&&(t=rl.parse(t,e)),C7e(t,e));rl.expand=(t,e={})=>{typeof t=="string"&&(t=rl.parse(t,e));let r=w7e(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};rl.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?rl.compile(t,e):rl.expand(t,e);uZ.exports=rl});var xI=_((WQt,dZ)=>{"use strict";var B7e=ve("path"),Ku="\\\\/",fZ=`[^${Ku}]`,vf="\\.",v7e="\\+",D7e="\\?",TS="\\/",S7e="(?=.)",pZ="[^/]",bN=`(?:${TS}|$)`,hZ=`(?:^|${TS})`,xN=`${vf}{1,2}${bN}`,P7e=`(?!${vf})`,b7e=`(?!${hZ}${xN})`,x7e=`(?!${vf}{0,1}${bN})`,k7e=`(?!${xN})`,Q7e=`[^.${TS}]`,F7e=`${pZ}*?`,gZ={DOT_LITERAL:vf,PLUS_LITERAL:v7e,QMARK_LITERAL:D7e,SLASH_LITERAL:TS,ONE_CHAR:S7e,QMARK:pZ,END_ANCHOR:bN,DOTS_SLASH:xN,NO_DOT:P7e,NO_DOTS:b7e,NO_DOT_SLASH:x7e,NO_DOTS_SLASH:k7e,QMARK_NO_DOT:Q7e,STAR:F7e,START_ANCHOR:hZ},R7e={...gZ,SLASH_LITERAL:`[${Ku}]`,QMARK:fZ,STAR:`${fZ}*?`,DOTS_SLASH:`${vf}{1,2}(?:[${Ku}]|$)`,NO_DOT:`(?!${vf})`,NO_DOTS:`(?!(?:^|[${Ku}])${vf}{1,2}(?:[${Ku}]|$))`,NO_DOT_SLASH:`(?!${vf}{0,1}(?:[${Ku}]|$))`,NO_DOTS_SLASH:`(?!${vf}{1,2}(?:[${Ku}]|$))`,QMARK_NO_DOT:`[^.${Ku}]`,START_ANCHOR:`(?:^|[${Ku}])`,END_ANCHOR:`(?:[${Ku}]|$)`},T7e={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};dZ.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:T7e,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:B7e.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?R7e:gZ}}});var kI=_(Sa=>{"use strict";var N7e=ve("path"),L7e=process.platform==="win32",{REGEX_BACKSLASH:O7e,REGEX_REMOVE_BACKSLASH:M7e,REGEX_SPECIAL_CHARS:U7e,REGEX_SPECIAL_CHARS_GLOBAL:_7e}=xI();Sa.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);Sa.hasRegexChars=t=>U7e.test(t);Sa.isRegexChar=t=>t.length===1&&Sa.hasRegexChars(t);Sa.escapeRegex=t=>t.replace(_7e,"\\$1");Sa.toPosixSlashes=t=>t.replace(O7e,"/");Sa.removeBackslashes=t=>t.replace(M7e,e=>e==="\\"?"":e);Sa.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};Sa.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:L7e===!0||N7e.sep==="\\";Sa.escapeLast=(t,e,r)=>{let o=t.lastIndexOf(e,r);return o===-1?t:t[o-1]==="\\"?Sa.escapeLast(t,e,o-1):`${t.slice(0,o)}\\${t.slice(o)}`};Sa.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};Sa.wrapOutput=(t,e={},r={})=>{let o=r.contains?"":"^",a=r.contains?"":"$",n=`${o}(?:${t})${a}`;return e.negated===!0&&(n=`(?:^(?!${n}).*$)`),n}});var vZ=_((VQt,BZ)=>{"use strict";var mZ=kI(),{CHAR_ASTERISK:kN,CHAR_AT:H7e,CHAR_BACKWARD_SLASH:QI,CHAR_COMMA:j7e,CHAR_DOT:QN,CHAR_EXCLAMATION_MARK:FN,CHAR_FORWARD_SLASH:IZ,CHAR_LEFT_CURLY_BRACE:RN,CHAR_LEFT_PARENTHESES:TN,CHAR_LEFT_SQUARE_BRACKET:G7e,CHAR_PLUS:q7e,CHAR_QUESTION_MARK:yZ,CHAR_RIGHT_CURLY_BRACE:Y7e,CHAR_RIGHT_PARENTHESES:EZ,CHAR_RIGHT_SQUARE_BRACKET:W7e}=xI(),CZ=t=>t===IZ||t===QI,wZ=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},K7e=(t,e)=>{let r=e||{},o=t.length-1,a=r.parts===!0||r.scanToEnd===!0,n=[],u=[],A=[],p=t,h=-1,E=0,I=0,v=!1,x=!1,C=!1,R=!1,L=!1,U=!1,J=!1,te=!1,ae=!1,fe=!1,ce=0,me,he,Be={value:"",depth:0,isGlob:!1},we=()=>h>=o,g=()=>p.charCodeAt(h+1),Ee=()=>(me=he,p.charCodeAt(++h));for(;h0&&(le=p.slice(0,E),p=p.slice(E),I-=E),Se&&C===!0&&I>0?(Se=p.slice(0,I),ne=p.slice(I)):C===!0?(Se="",ne=p):Se=p,Se&&Se!==""&&Se!=="/"&&Se!==p&&CZ(Se.charCodeAt(Se.length-1))&&(Se=Se.slice(0,-1)),r.unescape===!0&&(ne&&(ne=mZ.removeBackslashes(ne)),Se&&J===!0&&(Se=mZ.removeBackslashes(Se)));let ee={prefix:le,input:t,start:E,base:Se,glob:ne,isBrace:v,isBracket:x,isGlob:C,isExtglob:R,isGlobstar:L,negated:te,negatedExtglob:ae};if(r.tokens===!0&&(ee.maxDepth=0,CZ(he)||u.push(Be),ee.tokens=u),r.parts===!0||r.tokens===!0){let Ie;for(let Fe=0;Fe{"use strict";var NS=xI(),nl=kI(),{MAX_LENGTH:LS,POSIX_REGEX_SOURCE:V7e,REGEX_NON_SPECIAL_CHARS:J7e,REGEX_SPECIAL_CHARS_BACKREF:z7e,REPLACEMENTS:DZ}=NS,X7e=(t,e)=>{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();let r=`[${t.join("-")}]`;try{new RegExp(r)}catch{return t.map(a=>nl.escapeRegex(a)).join("..")}return r},Ty=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,NN=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=DZ[t]||t;let r={...e},o=typeof r.maxLength=="number"?Math.min(LS,r.maxLength):LS,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);let n={type:"bos",value:"",output:r.prepend||""},u=[n],A=r.capture?"":"?:",p=nl.isWindows(e),h=NS.globChars(p),E=NS.extglobChars(h),{DOT_LITERAL:I,PLUS_LITERAL:v,SLASH_LITERAL:x,ONE_CHAR:C,DOTS_SLASH:R,NO_DOT:L,NO_DOT_SLASH:U,NO_DOTS_SLASH:J,QMARK:te,QMARK_NO_DOT:ae,STAR:fe,START_ANCHOR:ce}=h,me=b=>`(${A}(?:(?!${ce}${b.dot?R:I}).)*?)`,he=r.dot?"":L,Be=r.dot?te:ae,we=r.bash===!0?me(r):fe;r.capture&&(we=`(${we})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let g={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:u};t=nl.removePrefix(t,g),a=t.length;let Ee=[],Se=[],le=[],ne=n,ee,Ie=()=>g.index===a-1,Fe=g.peek=(b=1)=>t[g.index+b],At=g.advance=()=>t[++g.index]||"",H=()=>t.slice(g.index+1),at=(b="",w=0)=>{g.consumed+=b,g.index+=w},Re=b=>{g.output+=b.output!=null?b.output:b.value,at(b.value)},ke=()=>{let b=1;for(;Fe()==="!"&&(Fe(2)!=="("||Fe(3)==="?");)At(),g.start++,b++;return b%2===0?!1:(g.negated=!0,g.start++,!0)},xe=b=>{g[b]++,le.push(b)},He=b=>{g[b]--,le.pop()},Te=b=>{if(ne.type==="globstar"){let w=g.braces>0&&(b.type==="comma"||b.type==="brace"),P=b.extglob===!0||Ee.length&&(b.type==="pipe"||b.type==="paren");b.type!=="slash"&&b.type!=="paren"&&!w&&!P&&(g.output=g.output.slice(0,-ne.output.length),ne.type="star",ne.value="*",ne.output=we,g.output+=ne.output)}if(Ee.length&&b.type!=="paren"&&(Ee[Ee.length-1].inner+=b.value),(b.value||b.output)&&Re(b),ne&&ne.type==="text"&&b.type==="text"){ne.value+=b.value,ne.output=(ne.output||"")+b.value;return}b.prev=ne,u.push(b),ne=b},Je=(b,w)=>{let P={...E[w],conditions:1,inner:""};P.prev=ne,P.parens=g.parens,P.output=g.output;let y=(r.capture?"(":"")+P.open;xe("parens"),Te({type:b,value:w,output:g.output?"":C}),Te({type:"paren",extglob:!0,value:At(),output:y}),Ee.push(P)},je=b=>{let w=b.close+(r.capture?")":""),P;if(b.type==="negate"){let y=we;if(b.inner&&b.inner.length>1&&b.inner.includes("/")&&(y=me(r)),(y!==we||Ie()||/^\)+$/.test(H()))&&(w=b.close=`)$))${y}`),b.inner.includes("*")&&(P=H())&&/^\.[^\\/.]+$/.test(P)){let F=NN(P,{...e,fastpaths:!1}).output;w=b.close=`)${F})${y})`}b.prev.type==="bos"&&(g.negatedExtglob=!0)}Te({type:"paren",extglob:!0,value:ee,output:w}),He("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let b=!1,w=t.replace(z7e,(P,y,F,z,X,Z)=>z==="\\"?(b=!0,P):z==="?"?y?y+z+(X?te.repeat(X.length):""):Z===0?Be+(X?te.repeat(X.length):""):te.repeat(F.length):z==="."?I.repeat(F.length):z==="*"?y?y+z+(X?we:""):we:y?P:`\\${P}`);return b===!0&&(r.unescape===!0?w=w.replace(/\\/g,""):w=w.replace(/\\+/g,P=>P.length%2===0?"\\\\":P?"\\":"")),w===t&&r.contains===!0?(g.output=t,g):(g.output=nl.wrapOutput(w,g,e),g)}for(;!Ie();){if(ee=At(),ee==="\0")continue;if(ee==="\\"){let P=Fe();if(P==="/"&&r.bash!==!0||P==="."||P===";")continue;if(!P){ee+="\\",Te({type:"text",value:ee});continue}let y=/^\\+/.exec(H()),F=0;if(y&&y[0].length>2&&(F=y[0].length,g.index+=F,F%2!==0&&(ee+="\\")),r.unescape===!0?ee=At():ee+=At(),g.brackets===0){Te({type:"text",value:ee});continue}}if(g.brackets>0&&(ee!=="]"||ne.value==="["||ne.value==="[^")){if(r.posix!==!1&&ee===":"){let P=ne.value.slice(1);if(P.includes("[")&&(ne.posix=!0,P.includes(":"))){let y=ne.value.lastIndexOf("["),F=ne.value.slice(0,y),z=ne.value.slice(y+2),X=V7e[z];if(X){ne.value=F+X,g.backtrack=!0,At(),!n.output&&u.indexOf(ne)===1&&(n.output=C);continue}}}(ee==="["&&Fe()!==":"||ee==="-"&&Fe()==="]")&&(ee=`\\${ee}`),ee==="]"&&(ne.value==="["||ne.value==="[^")&&(ee=`\\${ee}`),r.posix===!0&&ee==="!"&&ne.value==="["&&(ee="^"),ne.value+=ee,Re({value:ee});continue}if(g.quotes===1&&ee!=='"'){ee=nl.escapeRegex(ee),ne.value+=ee,Re({value:ee});continue}if(ee==='"'){g.quotes=g.quotes===1?0:1,r.keepQuotes===!0&&Te({type:"text",value:ee});continue}if(ee==="("){xe("parens"),Te({type:"paren",value:ee});continue}if(ee===")"){if(g.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Ty("opening","("));let P=Ee[Ee.length-1];if(P&&g.parens===P.parens+1){je(Ee.pop());continue}Te({type:"paren",value:ee,output:g.parens?")":"\\)"}),He("parens");continue}if(ee==="["){if(r.nobracket===!0||!H().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));ee=`\\${ee}`}else xe("brackets");Te({type:"bracket",value:ee});continue}if(ee==="]"){if(r.nobracket===!0||ne&&ne.type==="bracket"&&ne.value.length===1){Te({type:"text",value:ee,output:`\\${ee}`});continue}if(g.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(Ty("opening","["));Te({type:"text",value:ee,output:`\\${ee}`});continue}He("brackets");let P=ne.value.slice(1);if(ne.posix!==!0&&P[0]==="^"&&!P.includes("/")&&(ee=`/${ee}`),ne.value+=ee,Re({value:ee}),r.literalBrackets===!1||nl.hasRegexChars(P))continue;let y=nl.escapeRegex(ne.value);if(g.output=g.output.slice(0,-ne.value.length),r.literalBrackets===!0){g.output+=y,ne.value=y;continue}ne.value=`(${A}${y}|${ne.value})`,g.output+=ne.value;continue}if(ee==="{"&&r.nobrace!==!0){xe("braces");let P={type:"brace",value:ee,output:"(",outputIndex:g.output.length,tokensIndex:g.tokens.length};Se.push(P),Te(P);continue}if(ee==="}"){let P=Se[Se.length-1];if(r.nobrace===!0||!P){Te({type:"text",value:ee,output:ee});continue}let y=")";if(P.dots===!0){let F=u.slice(),z=[];for(let X=F.length-1;X>=0&&(u.pop(),F[X].type!=="brace");X--)F[X].type!=="dots"&&z.unshift(F[X].value);y=X7e(z,r),g.backtrack=!0}if(P.comma!==!0&&P.dots!==!0){let F=g.output.slice(0,P.outputIndex),z=g.tokens.slice(P.tokensIndex);P.value=P.output="\\{",ee=y="\\}",g.output=F;for(let X of z)g.output+=X.output||X.value}Te({type:"brace",value:ee,output:y}),He("braces"),Se.pop();continue}if(ee==="|"){Ee.length>0&&Ee[Ee.length-1].conditions++,Te({type:"text",value:ee});continue}if(ee===","){let P=ee,y=Se[Se.length-1];y&&le[le.length-1]==="braces"&&(y.comma=!0,P="|"),Te({type:"comma",value:ee,output:P});continue}if(ee==="/"){if(ne.type==="dot"&&g.index===g.start+1){g.start=g.index+1,g.consumed="",g.output="",u.pop(),ne=n;continue}Te({type:"slash",value:ee,output:x});continue}if(ee==="."){if(g.braces>0&&ne.type==="dot"){ne.value==="."&&(ne.output=I);let P=Se[Se.length-1];ne.type="dots",ne.output+=ee,ne.value+=ee,P.dots=!0;continue}if(g.braces+g.parens===0&&ne.type!=="bos"&&ne.type!=="slash"){Te({type:"text",value:ee,output:I});continue}Te({type:"dot",value:ee,output:I});continue}if(ee==="?"){if(!(ne&&ne.value==="(")&&r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){Je("qmark",ee);continue}if(ne&&ne.type==="paren"){let y=Fe(),F=ee;if(y==="<"&&!nl.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(ne.value==="("&&!/[!=<:]/.test(y)||y==="<"&&!/<([!=]|\w+>)/.test(H()))&&(F=`\\${ee}`),Te({type:"text",value:ee,output:F});continue}if(r.dot!==!0&&(ne.type==="slash"||ne.type==="bos")){Te({type:"qmark",value:ee,output:ae});continue}Te({type:"qmark",value:ee,output:te});continue}if(ee==="!"){if(r.noextglob!==!0&&Fe()==="("&&(Fe(2)!=="?"||!/[!=<:]/.test(Fe(3)))){Je("negate",ee);continue}if(r.nonegate!==!0&&g.index===0){ke();continue}}if(ee==="+"){if(r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){Je("plus",ee);continue}if(ne&&ne.value==="("||r.regex===!1){Te({type:"plus",value:ee,output:v});continue}if(ne&&(ne.type==="bracket"||ne.type==="paren"||ne.type==="brace")||g.parens>0){Te({type:"plus",value:ee});continue}Te({type:"plus",value:v});continue}if(ee==="@"){if(r.noextglob!==!0&&Fe()==="("&&Fe(2)!=="?"){Te({type:"at",extglob:!0,value:ee,output:""});continue}Te({type:"text",value:ee});continue}if(ee!=="*"){(ee==="$"||ee==="^")&&(ee=`\\${ee}`);let P=J7e.exec(H());P&&(ee+=P[0],g.index+=P[0].length),Te({type:"text",value:ee});continue}if(ne&&(ne.type==="globstar"||ne.star===!0)){ne.type="star",ne.star=!0,ne.value+=ee,ne.output=we,g.backtrack=!0,g.globstar=!0,at(ee);continue}let b=H();if(r.noextglob!==!0&&/^\([^?]/.test(b)){Je("star",ee);continue}if(ne.type==="star"){if(r.noglobstar===!0){at(ee);continue}let P=ne.prev,y=P.prev,F=P.type==="slash"||P.type==="bos",z=y&&(y.type==="star"||y.type==="globstar");if(r.bash===!0&&(!F||b[0]&&b[0]!=="/")){Te({type:"star",value:ee,output:""});continue}let X=g.braces>0&&(P.type==="comma"||P.type==="brace"),Z=Ee.length&&(P.type==="pipe"||P.type==="paren");if(!F&&P.type!=="paren"&&!X&&!Z){Te({type:"star",value:ee,output:""});continue}for(;b.slice(0,3)==="/**";){let ie=t[g.index+4];if(ie&&ie!=="/")break;b=b.slice(3),at("/**",3)}if(P.type==="bos"&&Ie()){ne.type="globstar",ne.value+=ee,ne.output=me(r),g.output=ne.output,g.globstar=!0,at(ee);continue}if(P.type==="slash"&&P.prev.type!=="bos"&&!z&&Ie()){g.output=g.output.slice(0,-(P.output+ne.output).length),P.output=`(?:${P.output}`,ne.type="globstar",ne.output=me(r)+(r.strictSlashes?")":"|$)"),ne.value+=ee,g.globstar=!0,g.output+=P.output+ne.output,at(ee);continue}if(P.type==="slash"&&P.prev.type!=="bos"&&b[0]==="/"){let ie=b[1]!==void 0?"|$":"";g.output=g.output.slice(0,-(P.output+ne.output).length),P.output=`(?:${P.output}`,ne.type="globstar",ne.output=`${me(r)}${x}|${x}${ie})`,ne.value+=ee,g.output+=P.output+ne.output,g.globstar=!0,at(ee+At()),Te({type:"slash",value:"/",output:""});continue}if(P.type==="bos"&&b[0]==="/"){ne.type="globstar",ne.value+=ee,ne.output=`(?:^|${x}|${me(r)}${x})`,g.output=ne.output,g.globstar=!0,at(ee+At()),Te({type:"slash",value:"/",output:""});continue}g.output=g.output.slice(0,-ne.output.length),ne.type="globstar",ne.output=me(r),ne.value+=ee,g.output+=ne.output,g.globstar=!0,at(ee);continue}let w={type:"star",value:ee,output:we};if(r.bash===!0){w.output=".*?",(ne.type==="bos"||ne.type==="slash")&&(w.output=he+w.output),Te(w);continue}if(ne&&(ne.type==="bracket"||ne.type==="paren")&&r.regex===!0){w.output=ee,Te(w);continue}(g.index===g.start||ne.type==="slash"||ne.type==="dot")&&(ne.type==="dot"?(g.output+=U,ne.output+=U):r.dot===!0?(g.output+=J,ne.output+=J):(g.output+=he,ne.output+=he),Fe()!=="*"&&(g.output+=C,ne.output+=C)),Te(w)}for(;g.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));g.output=nl.escapeLast(g.output,"["),He("brackets")}for(;g.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing",")"));g.output=nl.escapeLast(g.output,"("),He("parens")}for(;g.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","}"));g.output=nl.escapeLast(g.output,"{"),He("braces")}if(r.strictSlashes!==!0&&(ne.type==="star"||ne.type==="bracket")&&Te({type:"maybe_slash",value:"",output:`${x}?`}),g.backtrack===!0){g.output="";for(let b of g.tokens)g.output+=b.output!=null?b.output:b.value,b.suffix&&(g.output+=b.suffix)}return g};NN.fastpaths=(t,e)=>{let r={...e},o=typeof r.maxLength=="number"?Math.min(LS,r.maxLength):LS,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);t=DZ[t]||t;let n=nl.isWindows(e),{DOT_LITERAL:u,SLASH_LITERAL:A,ONE_CHAR:p,DOTS_SLASH:h,NO_DOT:E,NO_DOTS:I,NO_DOTS_SLASH:v,STAR:x,START_ANCHOR:C}=NS.globChars(n),R=r.dot?I:E,L=r.dot?v:E,U=r.capture?"":"?:",J={negated:!1,prefix:""},te=r.bash===!0?".*?":x;r.capture&&(te=`(${te})`);let ae=he=>he.noglobstar===!0?te:`(${U}(?:(?!${C}${he.dot?h:u}).)*?)`,fe=he=>{switch(he){case"*":return`${R}${p}${te}`;case".*":return`${u}${p}${te}`;case"*.*":return`${R}${te}${u}${p}${te}`;case"*/*":return`${R}${te}${A}${p}${L}${te}`;case"**":return R+ae(r);case"**/*":return`(?:${R}${ae(r)}${A})?${L}${p}${te}`;case"**/*.*":return`(?:${R}${ae(r)}${A})?${L}${te}${u}${p}${te}`;case"**/.*":return`(?:${R}${ae(r)}${A})?${u}${p}${te}`;default:{let Be=/^(.*?)\.(\w+)$/.exec(he);if(!Be)return;let we=fe(Be[1]);return we?we+u+Be[2]:void 0}}},ce=nl.removePrefix(t,J),me=fe(ce);return me&&r.strictSlashes!==!0&&(me+=`${A}?`),me};SZ.exports=NN});var xZ=_((zQt,bZ)=>{"use strict";var Z7e=ve("path"),$7e=vZ(),LN=PZ(),ON=kI(),eYe=xI(),tYe=t=>t&&typeof t=="object"&&!Array.isArray(t),Mi=(t,e,r=!1)=>{if(Array.isArray(t)){let E=t.map(v=>Mi(v,e,r));return v=>{for(let x of E){let C=x(v);if(C)return C}return!1}}let o=tYe(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!o)throw new TypeError("Expected pattern to be a non-empty string");let a=e||{},n=ON.isWindows(e),u=o?Mi.compileRe(t,e):Mi.makeRe(t,e,!1,!0),A=u.state;delete u.state;let p=()=>!1;if(a.ignore){let E={...e,ignore:null,onMatch:null,onResult:null};p=Mi(a.ignore,E,r)}let h=(E,I=!1)=>{let{isMatch:v,match:x,output:C}=Mi.test(E,u,e,{glob:t,posix:n}),R={glob:t,state:A,regex:u,posix:n,input:E,output:C,match:x,isMatch:v};return typeof a.onResult=="function"&&a.onResult(R),v===!1?(R.isMatch=!1,I?R:!1):p(E)?(typeof a.onIgnore=="function"&&a.onIgnore(R),R.isMatch=!1,I?R:!1):(typeof a.onMatch=="function"&&a.onMatch(R),I?R:!0)};return r&&(h.state=A),h};Mi.test=(t,e,r,{glob:o,posix:a}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let n=r||{},u=n.format||(a?ON.toPosixSlashes:null),A=t===o,p=A&&u?u(t):t;return A===!1&&(p=u?u(t):t,A=p===o),(A===!1||n.capture===!0)&&(n.matchBase===!0||n.basename===!0?A=Mi.matchBase(t,e,r,a):A=e.exec(p)),{isMatch:Boolean(A),match:A,output:p}};Mi.matchBase=(t,e,r,o=ON.isWindows(r))=>(e instanceof RegExp?e:Mi.makeRe(e,r)).test(Z7e.basename(t));Mi.isMatch=(t,e,r)=>Mi(e,r)(t);Mi.parse=(t,e)=>Array.isArray(t)?t.map(r=>Mi.parse(r,e)):LN(t,{...e,fastpaths:!1});Mi.scan=(t,e)=>$7e(t,e);Mi.compileRe=(t,e,r=!1,o=!1)=>{if(r===!0)return t.output;let a=e||{},n=a.contains?"":"^",u=a.contains?"":"$",A=`${n}(?:${t.output})${u}`;t&&t.negated===!0&&(A=`^(?!${A}).*$`);let p=Mi.toRegex(A,e);return o===!0&&(p.state=t),p};Mi.makeRe=(t,e={},r=!1,o=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let a={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(a.output=LN.fastpaths(t,e)),a.output||(a=LN(t,e)),Mi.compileRe(a,e,r,o)};Mi.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};Mi.constants=eYe;bZ.exports=Mi});var QZ=_((XQt,kZ)=>{"use strict";kZ.exports=xZ()});var Zo=_((ZQt,NZ)=>{"use strict";var RZ=ve("util"),TZ=AZ(),Vu=QZ(),MN=kI(),FZ=t=>t===""||t==="./",yi=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let o=new Set,a=new Set,n=new Set,u=0,A=E=>{n.add(E.output),r&&r.onResult&&r.onResult(E)};for(let E=0;E!o.has(E));if(r&&h.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(E=>E.replace(/\\/g,"")):e}return h};yi.match=yi;yi.matcher=(t,e)=>Vu(t,e);yi.isMatch=(t,e,r)=>Vu(e,r)(t);yi.any=yi.isMatch;yi.not=(t,e,r={})=>{e=[].concat(e).map(String);let o=new Set,a=[],n=A=>{r.onResult&&r.onResult(A),a.push(A.output)},u=new Set(yi(t,e,{...r,onResult:n}));for(let A of a)u.has(A)||o.add(A);return[...o]};yi.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${RZ.inspect(t)}"`);if(Array.isArray(e))return e.some(o=>yi.contains(t,o,r));if(typeof e=="string"){if(FZ(t)||FZ(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return yi.isMatch(t,e,{...r,contains:!0})};yi.matchKeys=(t,e,r)=>{if(!MN.isObject(t))throw new TypeError("Expected the first argument to be an object");let o=yi(Object.keys(t),e,r),a={};for(let n of o)a[n]=t[n];return a};yi.some=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Vu(String(a),r);if(o.some(u=>n(u)))return!0}return!1};yi.every=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Vu(String(a),r);if(!o.every(u=>n(u)))return!1}return!0};yi.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${RZ.inspect(t)}"`);return[].concat(e).every(o=>Vu(o,r)(t))};yi.capture=(t,e,r)=>{let o=MN.isWindows(r),n=Vu.makeRe(String(t),{...r,capture:!0}).exec(o?MN.toPosixSlashes(e):e);if(n)return n.slice(1).map(u=>u===void 0?"":u)};yi.makeRe=(...t)=>Vu.makeRe(...t);yi.scan=(...t)=>Vu.scan(...t);yi.parse=(t,e)=>{let r=[];for(let o of[].concat(t||[]))for(let a of TZ(String(o),e))r.push(Vu.parse(a,e));return r};yi.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:TZ(t,e)};yi.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return yi.braces(t,{...e,expand:!0})};NZ.exports=yi});var OZ=_(($Qt,LZ)=>{"use strict";LZ.exports=({onlyFirst:t=!1}={})=>{let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}});var OS=_((eFt,MZ)=>{"use strict";var rYe=OZ();MZ.exports=t=>typeof t=="string"?t.replace(rYe(),""):t});var _Z=_((tFt,UZ)=>{function nYe(){this.__data__=[],this.size=0}UZ.exports=nYe});var Ny=_((rFt,HZ)=>{function iYe(t,e){return t===e||t!==t&&e!==e}HZ.exports=iYe});var FI=_((nFt,jZ)=>{var sYe=Ny();function oYe(t,e){for(var r=t.length;r--;)if(sYe(t[r][0],e))return r;return-1}jZ.exports=oYe});var qZ=_((iFt,GZ)=>{var aYe=FI(),lYe=Array.prototype,cYe=lYe.splice;function uYe(t){var e=this.__data__,r=aYe(e,t);if(r<0)return!1;var o=e.length-1;return r==o?e.pop():cYe.call(e,r,1),--this.size,!0}GZ.exports=uYe});var WZ=_((sFt,YZ)=>{var AYe=FI();function fYe(t){var e=this.__data__,r=AYe(e,t);return r<0?void 0:e[r][1]}YZ.exports=fYe});var VZ=_((oFt,KZ)=>{var pYe=FI();function hYe(t){return pYe(this.__data__,t)>-1}KZ.exports=hYe});var zZ=_((aFt,JZ)=>{var gYe=FI();function dYe(t,e){var r=this.__data__,o=gYe(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}JZ.exports=dYe});var RI=_((lFt,XZ)=>{var mYe=_Z(),yYe=qZ(),EYe=WZ(),CYe=VZ(),wYe=zZ();function Ly(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var IYe=RI();function BYe(){this.__data__=new IYe,this.size=0}ZZ.exports=BYe});var t$=_((uFt,e$)=>{function vYe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}e$.exports=vYe});var n$=_((AFt,r$)=>{function DYe(t){return this.__data__.get(t)}r$.exports=DYe});var s$=_((fFt,i$)=>{function SYe(t){return this.__data__.has(t)}i$.exports=SYe});var UN=_((pFt,o$)=>{var PYe=typeof global=="object"&&global&&global.Object===Object&&global;o$.exports=PYe});var _l=_((hFt,a$)=>{var bYe=UN(),xYe=typeof self=="object"&&self&&self.Object===Object&&self,kYe=bYe||xYe||Function("return this")();a$.exports=kYe});var pd=_((gFt,l$)=>{var QYe=_l(),FYe=QYe.Symbol;l$.exports=FYe});var f$=_((dFt,A$)=>{var c$=pd(),u$=Object.prototype,RYe=u$.hasOwnProperty,TYe=u$.toString,TI=c$?c$.toStringTag:void 0;function NYe(t){var e=RYe.call(t,TI),r=t[TI];try{t[TI]=void 0;var o=!0}catch{}var a=TYe.call(t);return o&&(e?t[TI]=r:delete t[TI]),a}A$.exports=NYe});var h$=_((mFt,p$)=>{var LYe=Object.prototype,OYe=LYe.toString;function MYe(t){return OYe.call(t)}p$.exports=MYe});var hd=_((yFt,m$)=>{var g$=pd(),UYe=f$(),_Ye=h$(),HYe="[object Null]",jYe="[object Undefined]",d$=g$?g$.toStringTag:void 0;function GYe(t){return t==null?t===void 0?jYe:HYe:d$&&d$ in Object(t)?UYe(t):_Ye(t)}m$.exports=GYe});var il=_((EFt,y$)=>{function qYe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}y$.exports=qYe});var MS=_((CFt,E$)=>{var YYe=hd(),WYe=il(),KYe="[object AsyncFunction]",VYe="[object Function]",JYe="[object GeneratorFunction]",zYe="[object Proxy]";function XYe(t){if(!WYe(t))return!1;var e=YYe(t);return e==VYe||e==JYe||e==KYe||e==zYe}E$.exports=XYe});var w$=_((wFt,C$)=>{var ZYe=_l(),$Ye=ZYe["__core-js_shared__"];C$.exports=$Ye});var v$=_((IFt,B$)=>{var _N=w$(),I$=function(){var t=/[^.]+$/.exec(_N&&_N.keys&&_N.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function eWe(t){return!!I$&&I$ in t}B$.exports=eWe});var HN=_((BFt,D$)=>{var tWe=Function.prototype,rWe=tWe.toString;function nWe(t){if(t!=null){try{return rWe.call(t)}catch{}try{return t+""}catch{}}return""}D$.exports=nWe});var P$=_((vFt,S$)=>{var iWe=MS(),sWe=v$(),oWe=il(),aWe=HN(),lWe=/[\\^$.*+?()[\]{}|]/g,cWe=/^\[object .+?Constructor\]$/,uWe=Function.prototype,AWe=Object.prototype,fWe=uWe.toString,pWe=AWe.hasOwnProperty,hWe=RegExp("^"+fWe.call(pWe).replace(lWe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function gWe(t){if(!oWe(t)||sWe(t))return!1;var e=iWe(t)?hWe:cWe;return e.test(aWe(t))}S$.exports=gWe});var x$=_((DFt,b$)=>{function dWe(t,e){return t?.[e]}b$.exports=dWe});var zp=_((SFt,k$)=>{var mWe=P$(),yWe=x$();function EWe(t,e){var r=yWe(t,e);return mWe(r)?r:void 0}k$.exports=EWe});var US=_((PFt,Q$)=>{var CWe=zp(),wWe=_l(),IWe=CWe(wWe,"Map");Q$.exports=IWe});var NI=_((bFt,F$)=>{var BWe=zp(),vWe=BWe(Object,"create");F$.exports=vWe});var N$=_((xFt,T$)=>{var R$=NI();function DWe(){this.__data__=R$?R$(null):{},this.size=0}T$.exports=DWe});var O$=_((kFt,L$)=>{function SWe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}L$.exports=SWe});var U$=_((QFt,M$)=>{var PWe=NI(),bWe="__lodash_hash_undefined__",xWe=Object.prototype,kWe=xWe.hasOwnProperty;function QWe(t){var e=this.__data__;if(PWe){var r=e[t];return r===bWe?void 0:r}return kWe.call(e,t)?e[t]:void 0}M$.exports=QWe});var H$=_((FFt,_$)=>{var FWe=NI(),RWe=Object.prototype,TWe=RWe.hasOwnProperty;function NWe(t){var e=this.__data__;return FWe?e[t]!==void 0:TWe.call(e,t)}_$.exports=NWe});var G$=_((RFt,j$)=>{var LWe=NI(),OWe="__lodash_hash_undefined__";function MWe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=LWe&&e===void 0?OWe:e,this}j$.exports=MWe});var Y$=_((TFt,q$)=>{var UWe=N$(),_We=O$(),HWe=U$(),jWe=H$(),GWe=G$();function Oy(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var W$=Y$(),qWe=RI(),YWe=US();function WWe(){this.size=0,this.__data__={hash:new W$,map:new(YWe||qWe),string:new W$}}K$.exports=WWe});var z$=_((LFt,J$)=>{function KWe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}J$.exports=KWe});var LI=_((OFt,X$)=>{var VWe=z$();function JWe(t,e){var r=t.__data__;return VWe(e)?r[typeof e=="string"?"string":"hash"]:r.map}X$.exports=JWe});var $$=_((MFt,Z$)=>{var zWe=LI();function XWe(t){var e=zWe(this,t).delete(t);return this.size-=e?1:0,e}Z$.exports=XWe});var tee=_((UFt,eee)=>{var ZWe=LI();function $We(t){return ZWe(this,t).get(t)}eee.exports=$We});var nee=_((_Ft,ree)=>{var eKe=LI();function tKe(t){return eKe(this,t).has(t)}ree.exports=tKe});var see=_((HFt,iee)=>{var rKe=LI();function nKe(t,e){var r=rKe(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}iee.exports=nKe});var _S=_((jFt,oee)=>{var iKe=V$(),sKe=$$(),oKe=tee(),aKe=nee(),lKe=see();function My(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var cKe=RI(),uKe=US(),AKe=_S(),fKe=200;function pKe(t,e){var r=this.__data__;if(r instanceof cKe){var o=r.__data__;if(!uKe||o.length{var hKe=RI(),gKe=$Z(),dKe=t$(),mKe=n$(),yKe=s$(),EKe=lee();function Uy(t){var e=this.__data__=new hKe(t);this.size=e.size}Uy.prototype.clear=gKe;Uy.prototype.delete=dKe;Uy.prototype.get=mKe;Uy.prototype.has=yKe;Uy.prototype.set=EKe;cee.exports=Uy});var Aee=_((YFt,uee)=>{var CKe="__lodash_hash_undefined__";function wKe(t){return this.__data__.set(t,CKe),this}uee.exports=wKe});var pee=_((WFt,fee)=>{function IKe(t){return this.__data__.has(t)}fee.exports=IKe});var gee=_((KFt,hee)=>{var BKe=_S(),vKe=Aee(),DKe=pee();function jS(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new BKe;++e{function SKe(t,e){for(var r=-1,o=t==null?0:t.length;++r{function PKe(t,e){return t.has(e)}yee.exports=PKe});var jN=_((zFt,Cee)=>{var bKe=gee(),xKe=mee(),kKe=Eee(),QKe=1,FKe=2;function RKe(t,e,r,o,a,n){var u=r&QKe,A=t.length,p=e.length;if(A!=p&&!(u&&p>A))return!1;var h=n.get(t),E=n.get(e);if(h&&E)return h==e&&E==t;var I=-1,v=!0,x=r&FKe?new bKe:void 0;for(n.set(t,e),n.set(e,t);++I{var TKe=_l(),NKe=TKe.Uint8Array;wee.exports=NKe});var Bee=_((ZFt,Iee)=>{function LKe(t){var e=-1,r=Array(t.size);return t.forEach(function(o,a){r[++e]=[a,o]}),r}Iee.exports=LKe});var Dee=_(($Ft,vee)=>{function OKe(t){var e=-1,r=Array(t.size);return t.forEach(function(o){r[++e]=o}),r}vee.exports=OKe});var kee=_((eRt,xee)=>{var See=pd(),Pee=GN(),MKe=Ny(),UKe=jN(),_Ke=Bee(),HKe=Dee(),jKe=1,GKe=2,qKe="[object Boolean]",YKe="[object Date]",WKe="[object Error]",KKe="[object Map]",VKe="[object Number]",JKe="[object RegExp]",zKe="[object Set]",XKe="[object String]",ZKe="[object Symbol]",$Ke="[object ArrayBuffer]",eVe="[object DataView]",bee=See?See.prototype:void 0,qN=bee?bee.valueOf:void 0;function tVe(t,e,r,o,a,n,u){switch(r){case eVe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case $Ke:return!(t.byteLength!=e.byteLength||!n(new Pee(t),new Pee(e)));case qKe:case YKe:case VKe:return MKe(+t,+e);case WKe:return t.name==e.name&&t.message==e.message;case JKe:case XKe:return t==e+"";case KKe:var A=_Ke;case zKe:var p=o&jKe;if(A||(A=HKe),t.size!=e.size&&!p)return!1;var h=u.get(t);if(h)return h==e;o|=GKe,u.set(t,e);var E=UKe(A(t),A(e),o,a,n,u);return u.delete(t),E;case ZKe:if(qN)return qN.call(t)==qN.call(e)}return!1}xee.exports=tVe});var GS=_((tRt,Qee)=>{function rVe(t,e){for(var r=-1,o=e.length,a=t.length;++r{var nVe=Array.isArray;Fee.exports=nVe});var YN=_((nRt,Ree)=>{var iVe=GS(),sVe=Hl();function oVe(t,e,r){var o=e(t);return sVe(t)?o:iVe(o,r(t))}Ree.exports=oVe});var Nee=_((iRt,Tee)=>{function aVe(t,e){for(var r=-1,o=t==null?0:t.length,a=0,n=[];++r{function lVe(){return[]}Lee.exports=lVe});var qS=_((oRt,Mee)=>{var cVe=Nee(),uVe=WN(),AVe=Object.prototype,fVe=AVe.propertyIsEnumerable,Oee=Object.getOwnPropertySymbols,pVe=Oee?function(t){return t==null?[]:(t=Object(t),cVe(Oee(t),function(e){return fVe.call(t,e)}))}:uVe;Mee.exports=pVe});var _ee=_((aRt,Uee)=>{function hVe(t,e){for(var r=-1,o=Array(t);++r{function gVe(t){return t!=null&&typeof t=="object"}Hee.exports=gVe});var Gee=_((cRt,jee)=>{var dVe=hd(),mVe=Ju(),yVe="[object Arguments]";function EVe(t){return mVe(t)&&dVe(t)==yVe}jee.exports=EVe});var OI=_((uRt,Wee)=>{var qee=Gee(),CVe=Ju(),Yee=Object.prototype,wVe=Yee.hasOwnProperty,IVe=Yee.propertyIsEnumerable,BVe=qee(function(){return arguments}())?qee:function(t){return CVe(t)&&wVe.call(t,"callee")&&!IVe.call(t,"callee")};Wee.exports=BVe});var Vee=_((ARt,Kee)=>{function vVe(){return!1}Kee.exports=vVe});var UI=_((MI,_y)=>{var DVe=_l(),SVe=Vee(),Xee=typeof MI=="object"&&MI&&!MI.nodeType&&MI,Jee=Xee&&typeof _y=="object"&&_y&&!_y.nodeType&&_y,PVe=Jee&&Jee.exports===Xee,zee=PVe?DVe.Buffer:void 0,bVe=zee?zee.isBuffer:void 0,xVe=bVe||SVe;_y.exports=xVe});var _I=_((fRt,Zee)=>{var kVe=9007199254740991,QVe=/^(?:0|[1-9]\d*)$/;function FVe(t,e){var r=typeof t;return e=e??kVe,!!e&&(r=="number"||r!="symbol"&&QVe.test(t))&&t>-1&&t%1==0&&t{var RVe=9007199254740991;function TVe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=RVe}$ee.exports=TVe});var tte=_((hRt,ete)=>{var NVe=hd(),LVe=YS(),OVe=Ju(),MVe="[object Arguments]",UVe="[object Array]",_Ve="[object Boolean]",HVe="[object Date]",jVe="[object Error]",GVe="[object Function]",qVe="[object Map]",YVe="[object Number]",WVe="[object Object]",KVe="[object RegExp]",VVe="[object Set]",JVe="[object String]",zVe="[object WeakMap]",XVe="[object ArrayBuffer]",ZVe="[object DataView]",$Ve="[object Float32Array]",eJe="[object Float64Array]",tJe="[object Int8Array]",rJe="[object Int16Array]",nJe="[object Int32Array]",iJe="[object Uint8Array]",sJe="[object Uint8ClampedArray]",oJe="[object Uint16Array]",aJe="[object Uint32Array]",ui={};ui[$Ve]=ui[eJe]=ui[tJe]=ui[rJe]=ui[nJe]=ui[iJe]=ui[sJe]=ui[oJe]=ui[aJe]=!0;ui[MVe]=ui[UVe]=ui[XVe]=ui[_Ve]=ui[ZVe]=ui[HVe]=ui[jVe]=ui[GVe]=ui[qVe]=ui[YVe]=ui[WVe]=ui[KVe]=ui[VVe]=ui[JVe]=ui[zVe]=!1;function lJe(t){return OVe(t)&&LVe(t.length)&&!!ui[NVe(t)]}ete.exports=lJe});var WS=_((gRt,rte)=>{function cJe(t){return function(e){return t(e)}}rte.exports=cJe});var KS=_((HI,Hy)=>{var uJe=UN(),nte=typeof HI=="object"&&HI&&!HI.nodeType&&HI,jI=nte&&typeof Hy=="object"&&Hy&&!Hy.nodeType&&Hy,AJe=jI&&jI.exports===nte,KN=AJe&&uJe.process,fJe=function(){try{var t=jI&&jI.require&&jI.require("util").types;return t||KN&&KN.binding&&KN.binding("util")}catch{}}();Hy.exports=fJe});var VS=_((dRt,ote)=>{var pJe=tte(),hJe=WS(),ite=KS(),ste=ite&&ite.isTypedArray,gJe=ste?hJe(ste):pJe;ote.exports=gJe});var VN=_((mRt,ate)=>{var dJe=_ee(),mJe=OI(),yJe=Hl(),EJe=UI(),CJe=_I(),wJe=VS(),IJe=Object.prototype,BJe=IJe.hasOwnProperty;function vJe(t,e){var r=yJe(t),o=!r&&mJe(t),a=!r&&!o&&EJe(t),n=!r&&!o&&!a&&wJe(t),u=r||o||a||n,A=u?dJe(t.length,String):[],p=A.length;for(var h in t)(e||BJe.call(t,h))&&!(u&&(h=="length"||a&&(h=="offset"||h=="parent")||n&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||CJe(h,p)))&&A.push(h);return A}ate.exports=vJe});var JS=_((yRt,lte)=>{var DJe=Object.prototype;function SJe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||DJe;return t===r}lte.exports=SJe});var JN=_((ERt,cte)=>{function PJe(t,e){return function(r){return t(e(r))}}cte.exports=PJe});var Ate=_((CRt,ute)=>{var bJe=JN(),xJe=bJe(Object.keys,Object);ute.exports=xJe});var pte=_((wRt,fte)=>{var kJe=JS(),QJe=Ate(),FJe=Object.prototype,RJe=FJe.hasOwnProperty;function TJe(t){if(!kJe(t))return QJe(t);var e=[];for(var r in Object(t))RJe.call(t,r)&&r!="constructor"&&e.push(r);return e}fte.exports=TJe});var GI=_((IRt,hte)=>{var NJe=MS(),LJe=YS();function OJe(t){return t!=null&&LJe(t.length)&&!NJe(t)}hte.exports=OJe});var zS=_((BRt,gte)=>{var MJe=VN(),UJe=pte(),_Je=GI();function HJe(t){return _Je(t)?MJe(t):UJe(t)}gte.exports=HJe});var zN=_((vRt,dte)=>{var jJe=YN(),GJe=qS(),qJe=zS();function YJe(t){return jJe(t,qJe,GJe)}dte.exports=YJe});var Ete=_((DRt,yte)=>{var mte=zN(),WJe=1,KJe=Object.prototype,VJe=KJe.hasOwnProperty;function JJe(t,e,r,o,a,n){var u=r&WJe,A=mte(t),p=A.length,h=mte(e),E=h.length;if(p!=E&&!u)return!1;for(var I=p;I--;){var v=A[I];if(!(u?v in e:VJe.call(e,v)))return!1}var x=n.get(t),C=n.get(e);if(x&&C)return x==e&&C==t;var R=!0;n.set(t,e),n.set(e,t);for(var L=u;++I{var zJe=zp(),XJe=_l(),ZJe=zJe(XJe,"DataView");Cte.exports=ZJe});var Bte=_((PRt,Ite)=>{var $Je=zp(),eze=_l(),tze=$Je(eze,"Promise");Ite.exports=tze});var Dte=_((bRt,vte)=>{var rze=zp(),nze=_l(),ize=rze(nze,"Set");vte.exports=ize});var Pte=_((xRt,Ste)=>{var sze=zp(),oze=_l(),aze=sze(oze,"WeakMap");Ste.exports=aze});var qI=_((kRt,Tte)=>{var XN=wte(),ZN=US(),$N=Bte(),eL=Dte(),tL=Pte(),Rte=hd(),jy=HN(),bte="[object Map]",lze="[object Object]",xte="[object Promise]",kte="[object Set]",Qte="[object WeakMap]",Fte="[object DataView]",cze=jy(XN),uze=jy(ZN),Aze=jy($N),fze=jy(eL),pze=jy(tL),gd=Rte;(XN&&gd(new XN(new ArrayBuffer(1)))!=Fte||ZN&&gd(new ZN)!=bte||$N&&gd($N.resolve())!=xte||eL&&gd(new eL)!=kte||tL&&gd(new tL)!=Qte)&&(gd=function(t){var e=Rte(t),r=e==lze?t.constructor:void 0,o=r?jy(r):"";if(o)switch(o){case cze:return Fte;case uze:return bte;case Aze:return xte;case fze:return kte;case pze:return Qte}return e});Tte.exports=gd});var jte=_((QRt,Hte)=>{var rL=HS(),hze=jN(),gze=kee(),dze=Ete(),Nte=qI(),Lte=Hl(),Ote=UI(),mze=VS(),yze=1,Mte="[object Arguments]",Ute="[object Array]",XS="[object Object]",Eze=Object.prototype,_te=Eze.hasOwnProperty;function Cze(t,e,r,o,a,n){var u=Lte(t),A=Lte(e),p=u?Ute:Nte(t),h=A?Ute:Nte(e);p=p==Mte?XS:p,h=h==Mte?XS:h;var E=p==XS,I=h==XS,v=p==h;if(v&&Ote(t)){if(!Ote(e))return!1;u=!0,E=!1}if(v&&!E)return n||(n=new rL),u||mze(t)?hze(t,e,r,o,a,n):gze(t,e,p,r,o,a,n);if(!(r&yze)){var x=E&&_te.call(t,"__wrapped__"),C=I&&_te.call(e,"__wrapped__");if(x||C){var R=x?t.value():t,L=C?e.value():e;return n||(n=new rL),a(R,L,r,o,n)}}return v?(n||(n=new rL),dze(t,e,r,o,a,n)):!1}Hte.exports=Cze});var Wte=_((FRt,Yte)=>{var wze=jte(),Gte=Ju();function qte(t,e,r,o,a){return t===e?!0:t==null||e==null||!Gte(t)&&!Gte(e)?t!==t&&e!==e:wze(t,e,r,o,qte,a)}Yte.exports=qte});var Vte=_((RRt,Kte)=>{var Ize=Wte();function Bze(t,e){return Ize(t,e)}Kte.exports=Bze});var nL=_((TRt,Jte)=>{var vze=zp(),Dze=function(){try{var t=vze(Object,"defineProperty");return t({},"",{}),t}catch{}}();Jte.exports=Dze});var ZS=_((NRt,Xte)=>{var zte=nL();function Sze(t,e,r){e=="__proto__"&&zte?zte(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}Xte.exports=Sze});var iL=_((LRt,Zte)=>{var Pze=ZS(),bze=Ny();function xze(t,e,r){(r!==void 0&&!bze(t[e],r)||r===void 0&&!(e in t))&&Pze(t,e,r)}Zte.exports=xze});var ere=_((ORt,$te)=>{function kze(t){return function(e,r,o){for(var a=-1,n=Object(e),u=o(e),A=u.length;A--;){var p=u[t?A:++a];if(r(n[p],p,n)===!1)break}return e}}$te.exports=kze});var rre=_((MRt,tre)=>{var Qze=ere(),Fze=Qze();tre.exports=Fze});var sL=_((YI,Gy)=>{var Rze=_l(),ore=typeof YI=="object"&&YI&&!YI.nodeType&&YI,nre=ore&&typeof Gy=="object"&&Gy&&!Gy.nodeType&&Gy,Tze=nre&&nre.exports===ore,ire=Tze?Rze.Buffer:void 0,sre=ire?ire.allocUnsafe:void 0;function Nze(t,e){if(e)return t.slice();var r=t.length,o=sre?sre(r):new t.constructor(r);return t.copy(o),o}Gy.exports=Nze});var $S=_((URt,lre)=>{var are=GN();function Lze(t){var e=new t.constructor(t.byteLength);return new are(e).set(new are(t)),e}lre.exports=Lze});var oL=_((_Rt,cre)=>{var Oze=$S();function Mze(t,e){var r=e?Oze(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}cre.exports=Mze});var eP=_((HRt,ure)=>{function Uze(t,e){var r=-1,o=t.length;for(e||(e=Array(o));++r{var _ze=il(),Are=Object.create,Hze=function(){function t(){}return function(e){if(!_ze(e))return{};if(Are)return Are(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();fre.exports=Hze});var tP=_((GRt,hre)=>{var jze=JN(),Gze=jze(Object.getPrototypeOf,Object);hre.exports=Gze});var aL=_((qRt,gre)=>{var qze=pre(),Yze=tP(),Wze=JS();function Kze(t){return typeof t.constructor=="function"&&!Wze(t)?qze(Yze(t)):{}}gre.exports=Kze});var mre=_((YRt,dre)=>{var Vze=GI(),Jze=Ju();function zze(t){return Jze(t)&&Vze(t)}dre.exports=zze});var lL=_((WRt,Ere)=>{var Xze=hd(),Zze=tP(),$ze=Ju(),eXe="[object Object]",tXe=Function.prototype,rXe=Object.prototype,yre=tXe.toString,nXe=rXe.hasOwnProperty,iXe=yre.call(Object);function sXe(t){if(!$ze(t)||Xze(t)!=eXe)return!1;var e=Zze(t);if(e===null)return!0;var r=nXe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&yre.call(r)==iXe}Ere.exports=sXe});var cL=_((KRt,Cre)=>{function oXe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}Cre.exports=oXe});var rP=_((VRt,wre)=>{var aXe=ZS(),lXe=Ny(),cXe=Object.prototype,uXe=cXe.hasOwnProperty;function AXe(t,e,r){var o=t[e];(!(uXe.call(t,e)&&lXe(o,r))||r===void 0&&!(e in t))&&aXe(t,e,r)}wre.exports=AXe});var dd=_((JRt,Ire)=>{var fXe=rP(),pXe=ZS();function hXe(t,e,r,o){var a=!r;r||(r={});for(var n=-1,u=e.length;++n{function gXe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}Bre.exports=gXe});var Sre=_((XRt,Dre)=>{var dXe=il(),mXe=JS(),yXe=vre(),EXe=Object.prototype,CXe=EXe.hasOwnProperty;function wXe(t){if(!dXe(t))return yXe(t);var e=mXe(t),r=[];for(var o in t)o=="constructor"&&(e||!CXe.call(t,o))||r.push(o);return r}Dre.exports=wXe});var qy=_((ZRt,Pre)=>{var IXe=VN(),BXe=Sre(),vXe=GI();function DXe(t){return vXe(t)?IXe(t,!0):BXe(t)}Pre.exports=DXe});var xre=_(($Rt,bre)=>{var SXe=dd(),PXe=qy();function bXe(t){return SXe(t,PXe(t))}bre.exports=bXe});var Nre=_((eTt,Tre)=>{var kre=iL(),xXe=sL(),kXe=oL(),QXe=eP(),FXe=aL(),Qre=OI(),Fre=Hl(),RXe=mre(),TXe=UI(),NXe=MS(),LXe=il(),OXe=lL(),MXe=VS(),Rre=cL(),UXe=xre();function _Xe(t,e,r,o,a,n,u){var A=Rre(t,r),p=Rre(e,r),h=u.get(p);if(h){kre(t,r,h);return}var E=n?n(A,p,r+"",t,e,u):void 0,I=E===void 0;if(I){var v=Fre(p),x=!v&&TXe(p),C=!v&&!x&&MXe(p);E=p,v||x||C?Fre(A)?E=A:RXe(A)?E=QXe(A):x?(I=!1,E=xXe(p,!0)):C?(I=!1,E=kXe(p,!0)):E=[]:OXe(p)||Qre(p)?(E=A,Qre(A)?E=UXe(A):(!LXe(A)||NXe(A))&&(E=FXe(p))):I=!1}I&&(u.set(p,E),a(E,p,o,n,u),u.delete(p)),kre(t,r,E)}Tre.exports=_Xe});var Mre=_((tTt,Ore)=>{var HXe=HS(),jXe=iL(),GXe=rre(),qXe=Nre(),YXe=il(),WXe=qy(),KXe=cL();function Lre(t,e,r,o,a){t!==e&&GXe(e,function(n,u){if(a||(a=new HXe),YXe(n))qXe(t,e,u,r,Lre,o,a);else{var A=o?o(KXe(t,u),n,u+"",t,e,a):void 0;A===void 0&&(A=n),jXe(t,u,A)}},WXe)}Ore.exports=Lre});var uL=_((rTt,Ure)=>{function VXe(t){return t}Ure.exports=VXe});var Hre=_((nTt,_re)=>{function JXe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}_re.exports=JXe});var AL=_((iTt,Gre)=>{var zXe=Hre(),jre=Math.max;function XXe(t,e,r){return e=jre(e===void 0?t.length-1:e,0),function(){for(var o=arguments,a=-1,n=jre(o.length-e,0),u=Array(n);++a{function ZXe(t){return function(){return t}}qre.exports=ZXe});var Vre=_((oTt,Kre)=>{var $Xe=Yre(),Wre=nL(),eZe=uL(),tZe=Wre?function(t,e){return Wre(t,"toString",{configurable:!0,enumerable:!1,value:$Xe(e),writable:!0})}:eZe;Kre.exports=tZe});var zre=_((aTt,Jre)=>{var rZe=800,nZe=16,iZe=Date.now;function sZe(t){var e=0,r=0;return function(){var o=iZe(),a=nZe-(o-r);if(r=o,a>0){if(++e>=rZe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}Jre.exports=sZe});var fL=_((lTt,Xre)=>{var oZe=Vre(),aZe=zre(),lZe=aZe(oZe);Xre.exports=lZe});var $re=_((cTt,Zre)=>{var cZe=uL(),uZe=AL(),AZe=fL();function fZe(t,e){return AZe(uZe(t,e,cZe),t+"")}Zre.exports=fZe});var tne=_((uTt,ene)=>{var pZe=Ny(),hZe=GI(),gZe=_I(),dZe=il();function mZe(t,e,r){if(!dZe(r))return!1;var o=typeof e;return(o=="number"?hZe(r)&&gZe(e,r.length):o=="string"&&e in r)?pZe(r[e],t):!1}ene.exports=mZe});var nne=_((ATt,rne)=>{var yZe=$re(),EZe=tne();function CZe(t){return yZe(function(e,r){var o=-1,a=r.length,n=a>1?r[a-1]:void 0,u=a>2?r[2]:void 0;for(n=t.length>3&&typeof n=="function"?(a--,n):void 0,u&&EZe(r[0],r[1],u)&&(n=a<3?void 0:n,a=1),e=Object(e);++o{var wZe=Mre(),IZe=nne(),BZe=IZe(function(t,e,r,o){wZe(t,e,r,o)});ine.exports=BZe});var _e={};Vt(_e,{AsyncActions:()=>gL,BufferStream:()=>hL,CachingStrategy:()=>mne,DefaultStream:()=>dL,allSettledSafe:()=>Uc,assertNever:()=>yL,bufferStream:()=>Vy,buildIgnorePattern:()=>kZe,convertMapsToIndexableObjects:()=>iP,dynamicRequire:()=>Df,escapeRegExp:()=>DZe,getArrayWithDefault:()=>Yy,getFactoryWithDefault:()=>ol,getMapWithDefault:()=>Wy,getSetWithDefault:()=>md,groupBy:()=>wL,isIndexableObject:()=>pL,isPathLike:()=>QZe,isTaggedYarnVersion:()=>vZe,makeDeferred:()=>hne,mapAndFilter:()=>sl,mapAndFind:()=>KI,mergeIntoTarget:()=>Ene,overrideType:()=>SZe,parseBoolean:()=>VI,parseInt:()=>Jy,parseOptionalBoolean:()=>yne,plural:()=>nP,prettifyAsyncErrors:()=>Ky,prettifySyncErrors:()=>EL,releaseAfterUseAsync:()=>bZe,replaceEnvVariables:()=>sP,sortMap:()=>ks,toMerged:()=>FZe,tryParseOptionalBoolean:()=>CL,validateEnum:()=>PZe});function vZe(t){return!!(Ane.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9]+)?$/))}function nP(t,{one:e,more:r,zero:o=r}){return t===0?o:t===1?e:r}function DZe(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function SZe(t){}function yL(t){throw new Error(`Assertion failed: Unexpected object '${t}'`)}function PZe(t,e){let r=Object.values(t);if(!r.includes(e))throw new it(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${r.map(o=>JSON.stringify(o)).join(", ")})`);return e}function sl(t,e){let r=[];for(let o of t){let a=e(o);a!==fne&&r.push(a)}return r}function KI(t,e){for(let r of t){let o=e(r);if(o!==pne)return o}}function pL(t){return typeof t=="object"&&t!==null}async function Uc(t){let e=await Promise.allSettled(t),r=[];for(let o of e){if(o.status==="rejected")throw o.reason;r.push(o.value)}return r}function iP(t){if(t instanceof Map&&(t=Object.fromEntries(t)),pL(t))for(let e of Object.keys(t)){let r=t[e];pL(r)&&(t[e]=iP(r))}return t}function ol(t,e,r){let o=t.get(e);return typeof o>"u"&&t.set(e,o=r()),o}function Yy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}function md(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}function Wy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}async function bZe(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function Ky(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function EL(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function Vy(t){return await new Promise((e,r)=>{let o=[];t.on("error",a=>{r(a)}),t.on("data",a=>{o.push(a)}),t.on("end",()=>{e(Buffer.concat(o))})})}function hne(){let t,e;return{promise:new Promise((o,a)=>{t=o,e=a}),resolve:t,reject:e}}function gne(t){return WI(ue.fromPortablePath(t))}function dne(path){let physicalPath=ue.fromPortablePath(path),currentCacheEntry=WI.cache[physicalPath];delete WI.cache[physicalPath];let result;try{result=gne(physicalPath);let freshCacheEntry=WI.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{WI.cache[physicalPath]=currentCacheEntry}return result}function xZe(t){let e=one.get(t),r=oe.statSync(t);if(e?.mtime===r.mtimeMs)return e.instance;let o=dne(t);return one.set(t,{mtime:r.mtimeMs,instance:o}),o}function Df(t,{cachingStrategy:e=2}={}){switch(e){case 0:return dne(t);case 1:return xZe(t);case 2:return gne(t);default:throw new Error("Unsupported caching strategy")}}function ks(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function kZe(t){return t.length===0?null:t.map(e=>`(${cne.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function sP(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...o)=>{let{variableName:a,colon:n,fallback:u}=o[o.length-1],A=Object.hasOwn(e,a),p=e[a];if(p||A&&!n)return p;if(u!=null)return u;throw new it(`Environment variable not found (${a})`)})}function VI(t){switch(t){case"true":case"1":case 1:case!0:return!0;case"false":case"0":case 0:case!1:return!1;default:throw new Error(`Couldn't parse "${t}" as a boolean`)}}function yne(t){return typeof t>"u"?t:VI(t)}function CL(t){try{return yne(t)}catch{return null}}function QZe(t){return!!(ue.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}function Ene(t,...e){let r=u=>({value:u}),o=r(t),a=e.map(u=>r(u)),{value:n}=(0,lne.default)(o,...a,(u,A)=>{if(Array.isArray(u)&&Array.isArray(A)){for(let p of A)u.find(h=>(0,ane.default)(h,p))||u.push(p);return u}});return n}function FZe(...t){return Ene({},...t)}function wL(t,e){let r=Object.create(null);for(let o of t){let a=o[e];r[a]??=[],r[a].push(o)}return r}function Jy(t){return typeof t=="string"?Number.parseInt(t,10):t}var ane,lne,cne,une,Ane,mL,fne,pne,hL,gL,dL,WI,one,mne,jl=Et(()=>{St();jt();ane=$e(Vte()),lne=$e(sne()),cne=$e(Zo()),une=$e(id()),Ane=$e(zn()),mL=ve("stream");fne=Symbol();sl.skip=fne;pne=Symbol();KI.skip=pne;hL=class extends mL.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(r),a(null,null)}_flush(r){r(null,Buffer.concat(this.chunks))}};gL=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,une.default)(e)}set(e,r){let o=this.deferred.get(e);typeof o>"u"&&this.deferred.set(e,o=hne());let a=this.limit(()=>r());return this.promises.set(e,a),a.then(()=>{this.promises.get(e)===a&&o.resolve()},n=>{this.promises.get(e)===a&&o.reject(n)}),o.promise}reduce(e,r){let o=this.promises.get(e)??Promise.resolve();this.set(e,()=>r(o))}async wait(){await Promise.all(this.promises.values())}},dL=class extends mL.Transform{constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,a(null,r)}_flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}},WI=eval("require");one=new Map;mne=(o=>(o[o.NoCache=0]="NoCache",o[o.FsTime=1]="FsTime",o[o.Node=2]="Node",o))(mne||{})});var zy,IL,BL,Cne=Et(()=>{zy=(r=>(r.HARD="HARD",r.SOFT="SOFT",r))(zy||{}),IL=(o=>(o.Dependency="Dependency",o.PeerDependency="PeerDependency",o.PeerDependencyMeta="PeerDependencyMeta",o))(IL||{}),BL=(o=>(o.Inactive="inactive",o.Redundant="redundant",o.Active="active",o))(BL||{})});var de={};Vt(de,{LogLevel:()=>uP,Style:()=>aP,Type:()=>yt,addLogFilterSupport:()=>XI,applyColor:()=>Vs,applyHyperlink:()=>Zy,applyStyle:()=>yd,json:()=>Ed,jsonOrPretty:()=>NZe,mark:()=>bL,pretty:()=>Mt,prettyField:()=>zu,prettyList:()=>PL,prettyTruncatedLocatorList:()=>cP,stripAnsi:()=>Xy.default,supportsColor:()=>lP,supportsHyperlinks:()=>SL,tuple:()=>_c});function wne(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1024**r;)r-=1;let o=1024**r;return`${Math.floor(t*100/o)/100} ${e[r-1]}`}function _c(t,e){return[e,t]}function yd(t,e,r){return t.get("enableColors")&&r&2&&(e=zI.default.bold(e)),e}function Vs(t,e,r){if(!t.get("enableColors"))return e;let o=RZe.get(r);if(o===null)return e;let a=typeof o>"u"?r:DL.level>=3?o[0]:o[1],n=typeof a=="number"?vL.ansi256(a):a.startsWith("#")?vL.hex(a):vL[a];if(typeof n!="function")throw new Error(`Invalid format type ${a}`);return n(e)}function Zy(t,e,r){return t.get("enableHyperlinks")?TZe?`\x1B]8;;${r}\x1B\\${e}\x1B]8;;\x1B\\`:`\x1B]8;;${r}\x07${e}\x1B]8;;\x07`:e}function Mt(t,e,r){if(e===null)return Vs(t,"null",yt.NULL);if(Object.hasOwn(oP,r))return oP[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Vs(t,e,r)}function PL(t,e,r,{separator:o=", "}={}){return[...e].map(a=>Mt(t,a,r)).join(o)}function Ed(t,e){if(t===null)return null;if(Object.hasOwn(oP,e))return oP[e].json(t);if(typeof t!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof t}`);return t}function NZe(t,e,[r,o]){return t?Ed(r,o):Mt(e,r,o)}function bL(t){return{Check:Vs(t,"\u2713","green"),Cross:Vs(t,"\u2718","red"),Question:Vs(t,"?","cyan")}}function zu(t,{label:e,value:[r,o]}){return`${Mt(t,e,yt.CODE)}: ${Mt(t,r,o)}`}function cP(t,e,r){let o=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=`${jr(t,h)}, `,I=xL(h).length+2;if(o.length>0&&nh).join("").slice(0,-2);let u="X".repeat(a.length.toString().length),A=`and ${u} more.`,p=a.length;for(;o.length>1&&nh).join(""),A.replace(u,Mt(t,p,yt.NUMBER))].join("")}function XI(t,{configuration:e}){let r=e.get("logFilters"),o=new Map,a=new Map,n=[];for(let I of r){let v=I.get("level");if(typeof v>"u")continue;let x=I.get("code");typeof x<"u"&&o.set(x,v);let C=I.get("text");typeof C<"u"&&a.set(C,v);let R=I.get("pattern");typeof R<"u"&&n.push([Ine.default.matcher(R,{contains:!0}),v])}n.reverse();let u=(I,v,x)=>{if(I===null||I===0)return x;let C=a.size>0||n.length>0?(0,Xy.default)(v):v;if(a.size>0){let R=a.get(C);if(typeof R<"u")return R??x}if(n.length>0){for(let[R,L]of n)if(R(C))return L??x}if(o.size>0){let R=o.get(Wu(I));if(typeof R<"u")return R??x}return x},A=t.reportInfo,p=t.reportWarning,h=t.reportError,E=function(I,v,x,C){switch(u(v,x,C)){case"info":A.call(I,v,x);break;case"warning":p.call(I,v??0,x);break;case"error":h.call(I,v??0,x);break}};t.reportInfo=function(...I){return E(this,...I,"info")},t.reportWarning=function(...I){return E(this,...I,"warning")},t.reportError=function(...I){return E(this,...I,"error")}}var zI,JI,Ine,Xy,Bne,yt,aP,DL,lP,SL,vL,RZe,Po,oP,TZe,uP,Gl=Et(()=>{St();zI=$e(IN()),JI=$e(td());jt();Ine=$e(Zo()),Xy=$e(OS()),Bne=ve("util");fS();bo();yt={NO_HINT:"NO_HINT",ID:"ID",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",INSPECT:"INSPECT",DURATION:"DURATION",SIZE:"SIZE",SIZE_DIFF:"SIZE_DIFF",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING",MARKDOWN:"MARKDOWN",MARKDOWN_INLINE:"MARKDOWN_INLINE"},aP=(e=>(e[e.BOLD=2]="BOLD",e))(aP||{}),DL=JI.default.GITHUB_ACTIONS?{level:2}:zI.default.supportsColor?{level:zI.default.supportsColor.level}:{level:0},lP=DL.level!==0,SL=lP&&!JI.default.GITHUB_ACTIONS&&!JI.default.CIRCLE&&!JI.default.GITLAB,vL=new zI.default.Instance(DL),RZe=new Map([[yt.NO_HINT,null],[yt.NULL,["#a853b5",129]],[yt.SCOPE,["#d75f00",166]],[yt.NAME,["#d7875f",173]],[yt.RANGE,["#00afaf",37]],[yt.REFERENCE,["#87afff",111]],[yt.NUMBER,["#ffd700",220]],[yt.PATH,["#d75fd7",170]],[yt.URL,["#d75fd7",170]],[yt.ADDED,["#5faf00",70]],[yt.REMOVED,["#ff3131",160]],[yt.CODE,["#87afff",111]],[yt.SIZE,["#ffd700",220]]]),Po=t=>t;oP={[yt.ID]:Po({pretty:(t,e)=>typeof e=="number"?Vs(t,`${e}`,yt.NUMBER):Vs(t,e,yt.CODE),json:t=>t}),[yt.INSPECT]:Po({pretty:(t,e)=>(0,Bne.inspect)(e,{depth:1/0,colors:t.get("enableColors"),compact:!0,breakLength:1/0}),json:t=>t}),[yt.NUMBER]:Po({pretty:(t,e)=>Vs(t,`${e}`,yt.NUMBER),json:t=>t}),[yt.IDENT]:Po({pretty:(t,e)=>cs(t,e),json:t=>fn(t)}),[yt.LOCATOR]:Po({pretty:(t,e)=>jr(t,e),json:t=>ba(t)}),[yt.DESCRIPTOR]:Po({pretty:(t,e)=>Gn(t,e),json:t=>Pa(t)}),[yt.RESOLUTION]:Po({pretty:(t,{descriptor:e,locator:r})=>ZI(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:Pa(t),locator:e!==null?ba(e):null})}),[yt.DEPENDENT]:Po({pretty:(t,{locator:e,descriptor:r})=>kL(t,e,r),json:({locator:t,descriptor:e})=>({locator:ba(t),descriptor:Pa(e)})}),[yt.PACKAGE_EXTENSION]:Po({pretty:(t,e)=>{switch(e.type){case"Dependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Vs(t,"dependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Vs(t,"peerDependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependencyMeta":return`${cs(t,e.parentDescriptor)} \u27A4 ${Vs(t,"peerDependenciesMeta",yt.CODE)} \u27A4 ${cs(t,Js(e.selector))} \u27A4 ${Vs(t,e.key,yt.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case"Dependency":return`${fn(t.parentDescriptor)} > ${fn(t.descriptor)}`;case"PeerDependency":return`${fn(t.parentDescriptor)} >> ${fn(t.descriptor)}`;case"PeerDependencyMeta":return`${fn(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[yt.SETTING]:Po({pretty:(t,e)=>(t.get(e),Zy(t,Vs(t,e,yt.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[yt.DURATION]:Po({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),o=Math.ceil((e-r*60*1e3)/1e3);return o===0?`${r}m`:`${r}m ${o}s`}else{let r=Math.floor(e/1e3),o=e-r*1e3;return o===0?`${r}s`:`${r}s ${o}ms`}},json:t=>t}),[yt.SIZE]:Po({pretty:(t,e)=>Vs(t,wne(e),yt.NUMBER),json:t=>t}),[yt.SIZE_DIFF]:Po({pretty:(t,e)=>{let r=e>=0?"+":"-",o=r==="+"?yt.REMOVED:yt.ADDED;return Vs(t,`${r} ${wne(Math.max(Math.abs(e),1))}`,o)},json:t=>t}),[yt.PATH]:Po({pretty:(t,e)=>Vs(t,ue.fromPortablePath(e),yt.PATH),json:t=>ue.fromPortablePath(t)}),[yt.MARKDOWN]:Po({pretty:(t,{text:e,format:r,paragraphs:o})=>Do(e,{format:r,paragraphs:o}),json:({text:t})=>t}),[yt.MARKDOWN_INLINE]:Po({pretty:(t,e)=>(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(r,o,a)=>Mt(t,o+a+o,yt.CODE)),e=e.replace(/(\*\*)((?:.|[\n])*?)\1/g,(r,o,a)=>yd(t,a,2)),e),json:t=>t})};TZe=!!process.env.KONSOLE_VERSION;uP=(a=>(a.Error="error",a.Warning="warning",a.Info="info",a.Discard="discard",a))(uP||{})});var vne=_($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.splitWhen=$y.flatten=void 0;function LZe(t){return t.reduce((e,r)=>[].concat(e,r),[])}$y.flatten=LZe;function OZe(t,e){let r=[[]],o=0;for(let a of t)e(a)?(o++,r[o]=[]):r[o].push(a);return r}$y.splitWhen=OZe});var Dne=_(AP=>{"use strict";Object.defineProperty(AP,"__esModule",{value:!0});AP.isEnoentCodeError=void 0;function MZe(t){return t.code==="ENOENT"}AP.isEnoentCodeError=MZe});var Sne=_(fP=>{"use strict";Object.defineProperty(fP,"__esModule",{value:!0});fP.createDirentFromStats=void 0;var QL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function UZe(t,e){return new QL(t,e)}fP.createDirentFromStats=UZe});var Pne=_(Xu=>{"use strict";Object.defineProperty(Xu,"__esModule",{value:!0});Xu.removeLeadingDotSegment=Xu.escape=Xu.makeAbsolute=Xu.unixify=void 0;var _Ze=ve("path"),HZe=2,jZe=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;function GZe(t){return t.replace(/\\/g,"/")}Xu.unixify=GZe;function qZe(t,e){return _Ze.resolve(t,e)}Xu.makeAbsolute=qZe;function YZe(t){return t.replace(jZe,"\\$2")}Xu.escape=YZe;function WZe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(HZe)}return t}Xu.removeLeadingDotSegment=WZe});var xne=_((PTt,bne)=>{bne.exports=function(e){if(typeof e!="string"||e==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(r[2])return!0;e=e.slice(r.index+r[0].length)}return!1}});var Fne=_((bTt,Qne)=>{var KZe=xne(),kne={"{":"}","(":")","[":"]"},VZe=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,o=-2,a=-2,n=-2,u=-2;ee&&(u===-1||u>o||(u=t.indexOf("\\",e),u===-1||u>o)))||a!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(a=t.indexOf("}",e),a>e&&(u=t.indexOf("\\",e),u===-1||u>a))||n!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(n=t.indexOf(")",e),n>e&&(u=t.indexOf("\\",e),u===-1||u>n))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(rr&&(u=t.indexOf("\\",r),u===-1||u>n))))return!0;if(t[e]==="\\"){var A=t[e+1];e+=2;var p=kne[A];if(p){var h=t.indexOf(p,e);h!==-1&&(e=h+1)}if(t[e]==="!")return!0}else e++}return!1},JZe=function(t){if(t[0]==="!")return!0;for(var e=0;e{"use strict";var zZe=Fne(),XZe=ve("path").posix.dirname,ZZe=ve("os").platform()==="win32",FL="/",$Ze=/\\/g,e$e=/[\{\[].*[\}\]]$/,t$e=/(^|[^\\])([\{\[]|\([^\)]+$)/,r$e=/\\([\!\*\?\|\[\]\(\)\{\}])/g;Rne.exports=function(e,r){var o=Object.assign({flipBackslashes:!0},r);o.flipBackslashes&&ZZe&&e.indexOf(FL)<0&&(e=e.replace($Ze,FL)),e$e.test(e)&&(e+=FL),e+="a";do e=XZe(e);while(zZe(e)||t$e.test(e));return e.replace(r$e,"$1")}});var jne=_(Gr=>{"use strict";Object.defineProperty(Gr,"__esModule",{value:!0});Gr.matchAny=Gr.convertPatternsToRe=Gr.makeRe=Gr.getPatternParts=Gr.expandBraceExpansion=Gr.expandPatternsWithBraceExpansion=Gr.isAffectDepthOfReadingPattern=Gr.endsWithSlashGlobStar=Gr.hasGlobStar=Gr.getBaseDirectory=Gr.isPatternRelatedToParentDirectory=Gr.getPatternsOutsideCurrentDirectory=Gr.getPatternsInsideCurrentDirectory=Gr.getPositivePatterns=Gr.getNegativePatterns=Gr.isPositivePattern=Gr.isNegativePattern=Gr.convertToNegativePattern=Gr.convertToPositivePattern=Gr.isDynamicPattern=Gr.isStaticPattern=void 0;var n$e=ve("path"),i$e=Tne(),RL=Zo(),Nne="**",s$e="\\",o$e=/[*?]|^!/,a$e=/\[[^[]*]/,l$e=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,c$e=/[!*+?@]\([^(]*\)/,u$e=/,|\.\./;function Lne(t,e={}){return!One(t,e)}Gr.isStaticPattern=Lne;function One(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(s$e)||o$e.test(t)||a$e.test(t)||l$e.test(t)||e.extglob!==!1&&c$e.test(t)||e.braceExpansion!==!1&&A$e(t))}Gr.isDynamicPattern=One;function A$e(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let o=t.slice(e,r);return u$e.test(o)}function f$e(t){return pP(t)?t.slice(1):t}Gr.convertToPositivePattern=f$e;function p$e(t){return"!"+t}Gr.convertToNegativePattern=p$e;function pP(t){return t.startsWith("!")&&t[1]!=="("}Gr.isNegativePattern=pP;function Mne(t){return!pP(t)}Gr.isPositivePattern=Mne;function h$e(t){return t.filter(pP)}Gr.getNegativePatterns=h$e;function g$e(t){return t.filter(Mne)}Gr.getPositivePatterns=g$e;function d$e(t){return t.filter(e=>!TL(e))}Gr.getPatternsInsideCurrentDirectory=d$e;function m$e(t){return t.filter(TL)}Gr.getPatternsOutsideCurrentDirectory=m$e;function TL(t){return t.startsWith("..")||t.startsWith("./..")}Gr.isPatternRelatedToParentDirectory=TL;function y$e(t){return i$e(t,{flipBackslashes:!1})}Gr.getBaseDirectory=y$e;function E$e(t){return t.includes(Nne)}Gr.hasGlobStar=E$e;function Une(t){return t.endsWith("/"+Nne)}Gr.endsWithSlashGlobStar=Une;function C$e(t){let e=n$e.basename(t);return Une(t)||Lne(e)}Gr.isAffectDepthOfReadingPattern=C$e;function w$e(t){return t.reduce((e,r)=>e.concat(_ne(r)),[])}Gr.expandPatternsWithBraceExpansion=w$e;function _ne(t){return RL.braces(t,{expand:!0,nodupes:!0})}Gr.expandBraceExpansion=_ne;function I$e(t,e){let{parts:r}=RL.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.length===0&&(r=[t]),r[0].startsWith("/")&&(r[0]=r[0].slice(1),r.unshift("")),r}Gr.getPatternParts=I$e;function Hne(t,e){return RL.makeRe(t,e)}Gr.makeRe=Hne;function B$e(t,e){return t.map(r=>Hne(r,e))}Gr.convertPatternsToRe=B$e;function v$e(t,e){return e.some(r=>r.test(t))}Gr.matchAny=v$e});var Wne=_((QTt,Yne)=>{"use strict";var D$e=ve("stream"),Gne=D$e.PassThrough,S$e=Array.prototype.slice;Yne.exports=P$e;function P$e(){let t=[],e=S$e.call(arguments),r=!1,o=e[e.length-1];o&&!Array.isArray(o)&&o.pipe==null?e.pop():o={};let a=o.end!==!1,n=o.pipeError===!0;o.objectMode==null&&(o.objectMode=!0),o.highWaterMark==null&&(o.highWaterMark=64*1024);let u=Gne(o);function A(){for(let E=0,I=arguments.length;E0||(r=!1,p())}function x(C){function R(){C.removeListener("merge2UnpipeEnd",R),C.removeListener("end",R),n&&C.removeListener("error",L),v()}function L(U){u.emit("error",U)}if(C._readableState.endEmitted)return v();C.on("merge2UnpipeEnd",R),C.on("end",R),n&&C.on("error",L),C.pipe(u,{end:!1}),C.resume()}for(let C=0;C{"use strict";Object.defineProperty(hP,"__esModule",{value:!0});hP.merge=void 0;var b$e=Wne();function x$e(t){let e=b$e(t);return t.forEach(r=>{r.once("error",o=>e.emit("error",o))}),e.once("close",()=>Kne(t)),e.once("end",()=>Kne(t)),e}hP.merge=x$e;function Kne(t){t.forEach(e=>e.emit("close"))}});var Jne=_(eE=>{"use strict";Object.defineProperty(eE,"__esModule",{value:!0});eE.isEmpty=eE.isString=void 0;function k$e(t){return typeof t=="string"}eE.isString=k$e;function Q$e(t){return t===""}eE.isEmpty=Q$e});var Sf=_(xo=>{"use strict";Object.defineProperty(xo,"__esModule",{value:!0});xo.string=xo.stream=xo.pattern=xo.path=xo.fs=xo.errno=xo.array=void 0;var F$e=vne();xo.array=F$e;var R$e=Dne();xo.errno=R$e;var T$e=Sne();xo.fs=T$e;var N$e=Pne();xo.path=N$e;var L$e=jne();xo.pattern=L$e;var O$e=Vne();xo.stream=O$e;var M$e=Jne();xo.string=M$e});var Zne=_(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.convertPatternGroupToTask=ko.convertPatternGroupsToTasks=ko.groupPatternsByBaseDirectory=ko.getNegativePatternsAsPositive=ko.getPositivePatterns=ko.convertPatternsToTasks=ko.generate=void 0;var Pf=Sf();function U$e(t,e){let r=zne(t),o=Xne(t,e.ignore),a=r.filter(p=>Pf.pattern.isStaticPattern(p,e)),n=r.filter(p=>Pf.pattern.isDynamicPattern(p,e)),u=NL(a,o,!1),A=NL(n,o,!0);return u.concat(A)}ko.generate=U$e;function NL(t,e,r){let o=[],a=Pf.pattern.getPatternsOutsideCurrentDirectory(t),n=Pf.pattern.getPatternsInsideCurrentDirectory(t),u=LL(a),A=LL(n);return o.push(...OL(u,e,r)),"."in A?o.push(ML(".",n,e,r)):o.push(...OL(A,e,r)),o}ko.convertPatternsToTasks=NL;function zne(t){return Pf.pattern.getPositivePatterns(t)}ko.getPositivePatterns=zne;function Xne(t,e){return Pf.pattern.getNegativePatterns(t).concat(e).map(Pf.pattern.convertToPositivePattern)}ko.getNegativePatternsAsPositive=Xne;function LL(t){let e={};return t.reduce((r,o)=>{let a=Pf.pattern.getBaseDirectory(o);return a in r?r[a].push(o):r[a]=[o],r},e)}ko.groupPatternsByBaseDirectory=LL;function OL(t,e,r){return Object.keys(t).map(o=>ML(o,t[o],e,r))}ko.convertPatternGroupsToTasks=OL;function ML(t,e,r,o){return{dynamic:o,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Pf.pattern.convertToNegativePattern))}}ko.convertPatternGroupToTask=ML});var eie=_(tE=>{"use strict";Object.defineProperty(tE,"__esModule",{value:!0});tE.removeDuplicateSlashes=tE.transform=void 0;var _$e=/(?!^)\/{2,}/g;function H$e(t){return t.map(e=>$ne(e))}tE.transform=H$e;function $ne(t){return t.replace(_$e,"/")}tE.removeDuplicateSlashes=$ne});var rie=_(gP=>{"use strict";Object.defineProperty(gP,"__esModule",{value:!0});gP.read=void 0;function j$e(t,e,r){e.fs.lstat(t,(o,a)=>{if(o!==null){tie(r,o);return}if(!a.isSymbolicLink()||!e.followSymbolicLink){UL(r,a);return}e.fs.stat(t,(n,u)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){tie(r,n);return}UL(r,a);return}e.markSymbolicLink&&(u.isSymbolicLink=()=>!0),UL(r,u)})})}gP.read=j$e;function tie(t,e){t(e)}function UL(t,e){t(null,e)}});var nie=_(dP=>{"use strict";Object.defineProperty(dP,"__esModule",{value:!0});dP.read=void 0;function G$e(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let o=e.fs.statSync(t);return e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),o}catch(o){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw o}}dP.read=G$e});var iie=_(Xp=>{"use strict";Object.defineProperty(Xp,"__esModule",{value:!0});Xp.createFileSystemAdapter=Xp.FILE_SYSTEM_ADAPTER=void 0;var mP=ve("fs");Xp.FILE_SYSTEM_ADAPTER={lstat:mP.lstat,stat:mP.stat,lstatSync:mP.lstatSync,statSync:mP.statSync};function q$e(t){return t===void 0?Xp.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},Xp.FILE_SYSTEM_ADAPTER),t)}Xp.createFileSystemAdapter=q$e});var sie=_(HL=>{"use strict";Object.defineProperty(HL,"__esModule",{value:!0});var Y$e=iie(),_L=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=Y$e.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e??r}};HL.default=_L});var Cd=_(Zp=>{"use strict";Object.defineProperty(Zp,"__esModule",{value:!0});Zp.statSync=Zp.stat=Zp.Settings=void 0;var oie=rie(),W$e=nie(),jL=sie();Zp.Settings=jL.default;function K$e(t,e,r){if(typeof e=="function"){oie.read(t,qL(),e);return}oie.read(t,qL(e),r)}Zp.stat=K$e;function V$e(t,e){let r=qL(e);return W$e.read(t,r)}Zp.statSync=V$e;function qL(t={}){return t instanceof jL.default?t:new jL.default(t)}});var lie=_((jTt,aie)=>{aie.exports=J$e;function J$e(t,e){var r,o,a,n=!0;Array.isArray(t)?(r=[],o=t.length):(a=Object.keys(t),r={},o=a.length);function u(p){function h(){e&&e(p,r),e=null}n?process.nextTick(h):h()}function A(p,h,E){r[p]=E,(--o===0||h)&&u(h)}o?a?a.forEach(function(p){t[p](function(h,E){A(p,h,E)})}):t.forEach(function(p,h){p(function(E,I){A(h,E,I)})}):u(null),n=!1}});var YL=_(EP=>{"use strict";Object.defineProperty(EP,"__esModule",{value:!0});EP.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var yP=process.versions.node.split(".");if(yP[0]===void 0||yP[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var cie=Number.parseInt(yP[0],10),z$e=Number.parseInt(yP[1],10),uie=10,X$e=10,Z$e=cie>uie,$$e=cie===uie&&z$e>=X$e;EP.IS_SUPPORT_READDIR_WITH_FILE_TYPES=Z$e||$$e});var Aie=_(CP=>{"use strict";Object.defineProperty(CP,"__esModule",{value:!0});CP.createDirentFromStats=void 0;var WL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function eet(t,e){return new WL(t,e)}CP.createDirentFromStats=eet});var KL=_(wP=>{"use strict";Object.defineProperty(wP,"__esModule",{value:!0});wP.fs=void 0;var tet=Aie();wP.fs=tet});var VL=_(IP=>{"use strict";Object.defineProperty(IP,"__esModule",{value:!0});IP.joinPathSegments=void 0;function ret(t,e,r){return t.endsWith(r)?t+e:t+r+e}IP.joinPathSegments=ret});var mie=_($p=>{"use strict";Object.defineProperty($p,"__esModule",{value:!0});$p.readdir=$p.readdirWithFileTypes=$p.read=void 0;var net=Cd(),fie=lie(),iet=YL(),pie=KL(),hie=VL();function set(t,e,r){if(!e.stats&&iet.IS_SUPPORT_READDIR_WITH_FILE_TYPES){gie(t,e,r);return}die(t,e,r)}$p.read=set;function gie(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(o,a)=>{if(o!==null){BP(r,o);return}let n=a.map(A=>({dirent:A,name:A.name,path:hie.joinPathSegments(t,A.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){JL(r,n);return}let u=n.map(A=>oet(A,e));fie(u,(A,p)=>{if(A!==null){BP(r,A);return}JL(r,p)})})}$p.readdirWithFileTypes=gie;function oet(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(o,a)=>{if(o!==null){if(e.throwErrorOnBrokenSymbolicLink){r(o);return}r(null,t);return}t.dirent=pie.fs.createDirentFromStats(t.name,a),r(null,t)})}}function die(t,e,r){e.fs.readdir(t,(o,a)=>{if(o!==null){BP(r,o);return}let n=a.map(u=>{let A=hie.joinPathSegments(t,u,e.pathSegmentSeparator);return p=>{net.stat(A,e.fsStatSettings,(h,E)=>{if(h!==null){p(h);return}let I={name:u,path:A,dirent:pie.fs.createDirentFromStats(u,E)};e.stats&&(I.stats=E),p(null,I)})}});fie(n,(u,A)=>{if(u!==null){BP(r,u);return}JL(r,A)})})}$p.readdir=die;function BP(t,e){t(e)}function JL(t,e){t(null,e)}});var Iie=_(eh=>{"use strict";Object.defineProperty(eh,"__esModule",{value:!0});eh.readdir=eh.readdirWithFileTypes=eh.read=void 0;var aet=Cd(),cet=YL(),yie=KL(),Eie=VL();function uet(t,e){return!e.stats&&cet.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Cie(t,e):wie(t,e)}eh.read=uet;function Cie(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(o=>{let a={dirent:o,name:o.name,path:Eie.joinPathSegments(t,o.name,e.pathSegmentSeparator)};if(a.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let n=e.fs.statSync(a.path);a.dirent=yie.fs.createDirentFromStats(a.name,n)}catch(n){if(e.throwErrorOnBrokenSymbolicLink)throw n}return a})}eh.readdirWithFileTypes=Cie;function wie(t,e){return e.fs.readdirSync(t).map(o=>{let a=Eie.joinPathSegments(t,o,e.pathSegmentSeparator),n=aet.statSync(a,e.fsStatSettings),u={name:o,path:a,dirent:yie.fs.createDirentFromStats(o,n)};return e.stats&&(u.stats=n),u})}eh.readdir=wie});var Bie=_(th=>{"use strict";Object.defineProperty(th,"__esModule",{value:!0});th.createFileSystemAdapter=th.FILE_SYSTEM_ADAPTER=void 0;var rE=ve("fs");th.FILE_SYSTEM_ADAPTER={lstat:rE.lstat,stat:rE.stat,lstatSync:rE.lstatSync,statSync:rE.statSync,readdir:rE.readdir,readdirSync:rE.readdirSync};function Aet(t){return t===void 0?th.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},th.FILE_SYSTEM_ADAPTER),t)}th.createFileSystemAdapter=Aet});var vie=_(XL=>{"use strict";Object.defineProperty(XL,"__esModule",{value:!0});var fet=ve("path"),pet=Cd(),het=Bie(),zL=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=het.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,fet.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new pet.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};XL.default=zL});var vP=_(rh=>{"use strict";Object.defineProperty(rh,"__esModule",{value:!0});rh.Settings=rh.scandirSync=rh.scandir=void 0;var Die=mie(),get=Iie(),ZL=vie();rh.Settings=ZL.default;function det(t,e,r){if(typeof e=="function"){Die.read(t,$L(),e);return}Die.read(t,$L(e),r)}rh.scandir=det;function met(t,e){let r=$L(e);return get.read(t,r)}rh.scandirSync=met;function $L(t={}){return t instanceof ZL.default?t:new ZL.default(t)}});var Pie=_((ZTt,Sie)=>{"use strict";function yet(t){var e=new t,r=e;function o(){var n=e;return n.next?e=n.next:(e=new t,r=e),n.next=null,n}function a(n){r.next=n,r=n}return{get:o,release:a}}Sie.exports=yet});var xie=_(($Tt,eO)=>{"use strict";var Eet=Pie();function bie(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),r<1)throw new Error("fastqueue concurrency must be greater than 1");var o=Eet(Cet),a=null,n=null,u=0,A=null,p={push:R,drain:ql,saturated:ql,pause:E,paused:!1,concurrency:r,running:h,resume:x,idle:C,length:I,getQueue:v,unshift:L,empty:ql,kill:J,killAndDrain:te,error:ae};return p;function h(){return u}function E(){p.paused=!0}function I(){for(var fe=a,ce=0;fe;)fe=fe.next,ce++;return ce}function v(){for(var fe=a,ce=[];fe;)ce.push(fe.value),fe=fe.next;return ce}function x(){if(!!p.paused){p.paused=!1;for(var fe=0;fe{"use strict";Object.defineProperty(Zu,"__esModule",{value:!0});Zu.joinPathSegments=Zu.replacePathSegmentSeparator=Zu.isAppliedFilter=Zu.isFatalError=void 0;function Iet(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Zu.isFatalError=Iet;function Bet(t,e){return t===null||t(e)}Zu.isAppliedFilter=Bet;function vet(t,e){return t.split(/[/\\]/).join(e)}Zu.replacePathSegmentSeparator=vet;function Det(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Zu.joinPathSegments=Det});var nO=_(rO=>{"use strict";Object.defineProperty(rO,"__esModule",{value:!0});var Pet=DP(),tO=class{constructor(e,r){this._root=e,this._settings=r,this._root=Pet.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};rO.default=tO});var oO=_(sO=>{"use strict";Object.defineProperty(sO,"__esModule",{value:!0});var bet=ve("events"),xet=vP(),ket=xie(),SP=DP(),Qet=nO(),iO=class extends Qet.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=xet.scandir,this._emitter=new bet.EventEmitter,this._queue=ket(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let o={directory:e,base:r};this._queue.push(o,a=>{a!==null&&this._handleError(a)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(o,a)=>{if(o!==null){r(o,void 0);return}for(let n of a)this._handleEntry(n,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!SP.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let o=e.path;r!==void 0&&(e.path=SP.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),SP.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&SP.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};sO.default=iO});var kie=_(lO=>{"use strict";Object.defineProperty(lO,"__esModule",{value:!0});var Fet=oO(),aO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Fet.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{Ret(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{Tet(e,this._storage)}),this._reader.read()}};lO.default=aO;function Ret(t,e){t(e)}function Tet(t,e){t(null,e)}});var Qie=_(uO=>{"use strict";Object.defineProperty(uO,"__esModule",{value:!0});var Net=ve("stream"),Let=oO(),cO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Let.default(this._root,this._settings),this._stream=new Net.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};uO.default=cO});var Fie=_(fO=>{"use strict";Object.defineProperty(fO,"__esModule",{value:!0});var Oet=vP(),PP=DP(),Met=nO(),AO=class extends Met.default{constructor(){super(...arguments),this._scandir=Oet.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let o=this._scandir(e,this._settings.fsScandirSettings);for(let a of o)this._handleEntry(a,r)}catch(o){this._handleError(o)}}_handleError(e){if(!!PP.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let o=e.path;r!==void 0&&(e.path=PP.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),PP.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&PP.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};fO.default=AO});var Rie=_(hO=>{"use strict";Object.defineProperty(hO,"__esModule",{value:!0});var Uet=Fie(),pO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Uet.default(this._root,this._settings)}read(){return this._reader.read()}};hO.default=pO});var Tie=_(dO=>{"use strict";Object.defineProperty(dO,"__esModule",{value:!0});var _et=ve("path"),Het=vP(),gO=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,_et.sep),this.fsScandirSettings=new Het.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};dO.default=gO});var xP=_($u=>{"use strict";Object.defineProperty($u,"__esModule",{value:!0});$u.Settings=$u.walkStream=$u.walkSync=$u.walk=void 0;var Nie=kie(),jet=Qie(),Get=Rie(),mO=Tie();$u.Settings=mO.default;function qet(t,e,r){if(typeof e=="function"){new Nie.default(t,bP()).read(e);return}new Nie.default(t,bP(e)).read(r)}$u.walk=qet;function Yet(t,e){let r=bP(e);return new Get.default(t,r).read()}$u.walkSync=Yet;function Wet(t,e){let r=bP(e);return new jet.default(t,r).read()}$u.walkStream=Wet;function bP(t={}){return t instanceof mO.default?t:new mO.default(t)}});var kP=_(EO=>{"use strict";Object.defineProperty(EO,"__esModule",{value:!0});var Ket=ve("path"),Vet=Cd(),Lie=Sf(),yO=class{constructor(e){this._settings=e,this._fsStatSettings=new Vet.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return Ket.resolve(this._settings.cwd,e)}_makeEntry(e,r){let o={name:r,path:r,dirent:Lie.fs.createDirentFromStats(r,e)};return this._settings.stats&&(o.stats=e),o}_isFatalError(e){return!Lie.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};EO.default=yO});var IO=_(wO=>{"use strict";Object.defineProperty(wO,"__esModule",{value:!0});var Jet=ve("stream"),zet=Cd(),Xet=xP(),Zet=kP(),CO=class extends Zet.default{constructor(){super(...arguments),this._walkStream=Xet.walkStream,this._stat=zet.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let o=e.map(this._getFullEntryPath,this),a=new Jet.PassThrough({objectMode:!0});a._write=(n,u,A)=>this._getEntry(o[n],e[n],r).then(p=>{p!==null&&r.entryFilter(p)&&a.push(p),n===o.length-1&&a.end(),A()}).catch(A);for(let n=0;nthis._makeEntry(a,r)).catch(a=>{if(o.errorFilter(a))return null;throw a})}_getStat(e){return new Promise((r,o)=>{this._stat(e,this._fsStatSettings,(a,n)=>a===null?r(n):o(a))})}};wO.default=CO});var Oie=_(vO=>{"use strict";Object.defineProperty(vO,"__esModule",{value:!0});var $et=xP(),ett=kP(),ttt=IO(),BO=class extends ett.default{constructor(){super(...arguments),this._walkAsync=$et.walk,this._readerStream=new ttt.default(this._settings)}dynamic(e,r){return new Promise((o,a)=>{this._walkAsync(e,r,(n,u)=>{n===null?o(u):a(n)})})}async static(e,r){let o=[],a=this._readerStream.static(e,r);return new Promise((n,u)=>{a.once("error",u),a.on("data",A=>o.push(A)),a.once("end",()=>n(o))})}};vO.default=BO});var Mie=_(SO=>{"use strict";Object.defineProperty(SO,"__esModule",{value:!0});var nE=Sf(),DO=class{constructor(e,r,o){this._patterns=e,this._settings=r,this._micromatchOptions=o,this._storage=[],this._fillStorage()}_fillStorage(){let e=nE.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let r of e){let o=this._getPatternSegments(r),a=this._splitSegmentsIntoSections(o);this._storage.push({complete:a.length<=1,pattern:r,segments:o,sections:a})}}_getPatternSegments(e){return nE.pattern.getPatternParts(e,this._micromatchOptions).map(o=>nE.pattern.isDynamicPattern(o,this._settings)?{dynamic:!0,pattern:o,patternRe:nE.pattern.makeRe(o,this._micromatchOptions)}:{dynamic:!1,pattern:o})}_splitSegmentsIntoSections(e){return nE.array.splitWhen(e,r=>r.dynamic&&nE.pattern.hasGlobStar(r.pattern))}};SO.default=DO});var Uie=_(bO=>{"use strict";Object.defineProperty(bO,"__esModule",{value:!0});var rtt=Mie(),PO=class extends rtt.default{match(e){let r=e.split("/"),o=r.length,a=this._storage.filter(n=>!n.complete||n.segments.length>o);for(let n of a){let u=n.sections[0];if(!n.complete&&o>u.length||r.every((p,h)=>{let E=n.segments[h];return!!(E.dynamic&&E.patternRe.test(p)||!E.dynamic&&E.pattern===p)}))return!0}return!1}};bO.default=PO});var _ie=_(kO=>{"use strict";Object.defineProperty(kO,"__esModule",{value:!0});var QP=Sf(),ntt=Uie(),xO=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,o){let a=this._getMatcher(r),n=this._getNegativePatternsRe(o);return u=>this._filter(e,u,a,n)}_getMatcher(e){return new ntt.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(QP.pattern.isAffectDepthOfReadingPattern);return QP.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,o,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let n=QP.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(n,o)?!1:this._isSkippedByNegativePatterns(n,a)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let o=r.split("/").length;if(e==="")return o;let a=e.split("/").length;return o-a}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!QP.pattern.matchAny(e,r)}};kO.default=xO});var Hie=_(FO=>{"use strict";Object.defineProperty(FO,"__esModule",{value:!0});var wd=Sf(),QO=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let o=wd.pattern.convertPatternsToRe(e,this._micromatchOptions),a=wd.pattern.convertPatternsToRe(r,this._micromatchOptions);return n=>this._filter(n,o,a)}_filter(e,r,o){if(this._settings.unique&&this._isDuplicateEntry(e)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e.path,o))return!1;let a=this._settings.baseNameMatch?e.name:e.path,n=e.dirent.isDirectory(),u=this._isMatchToPatterns(a,r,n)&&!this._isMatchToPatterns(e.path,o,n);return this._settings.unique&&u&&this._createIndexRecord(e),u}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)return!1;let o=wd.path.makeAbsolute(this._settings.cwd,e);return wd.pattern.matchAny(o,r)}_isMatchToPatterns(e,r,o){let a=wd.path.removeLeadingDotSegment(e),n=wd.pattern.matchAny(a,r);return!n&&o?wd.pattern.matchAny(a+"/",r):n}};FO.default=QO});var jie=_(TO=>{"use strict";Object.defineProperty(TO,"__esModule",{value:!0});var itt=Sf(),RO=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return itt.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};TO.default=RO});var qie=_(LO=>{"use strict";Object.defineProperty(LO,"__esModule",{value:!0});var Gie=Sf(),NO=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=Gie.path.makeAbsolute(this._settings.cwd,r),r=Gie.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};LO.default=NO});var FP=_(MO=>{"use strict";Object.defineProperty(MO,"__esModule",{value:!0});var stt=ve("path"),ott=_ie(),att=Hie(),ltt=jie(),ctt=qie(),OO=class{constructor(e){this._settings=e,this.errorFilter=new ltt.default(this._settings),this.entryFilter=new att.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new ott.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new ctt.default(this._settings)}_getRootDirectory(e){return stt.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};MO.default=OO});var Yie=_(_O=>{"use strict";Object.defineProperty(_O,"__esModule",{value:!0});var utt=Oie(),Att=FP(),UO=class extends Att.default{constructor(){super(...arguments),this._reader=new utt.default(this._settings)}async read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return(await this.api(r,e,o)).map(n=>o.transform(n))}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};_O.default=UO});var Wie=_(jO=>{"use strict";Object.defineProperty(jO,"__esModule",{value:!0});var ftt=ve("stream"),ptt=IO(),htt=FP(),HO=class extends htt.default{constructor(){super(...arguments),this._reader=new ptt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e),a=this.api(r,e,o),n=new ftt.Readable({objectMode:!0,read:()=>{}});return a.once("error",u=>n.emit("error",u)).on("data",u=>n.emit("data",o.transform(u))).once("end",()=>n.emit("end")),n.once("close",()=>a.destroy()),n}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};jO.default=HO});var Kie=_(qO=>{"use strict";Object.defineProperty(qO,"__esModule",{value:!0});var gtt=Cd(),dtt=xP(),mtt=kP(),GO=class extends mtt.default{constructor(){super(...arguments),this._walkSync=dtt.walkSync,this._statSync=gtt.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let o=[];for(let a of e){let n=this._getFullEntryPath(a),u=this._getEntry(n,a,r);u===null||!r.entryFilter(u)||o.push(u)}return o}_getEntry(e,r,o){try{let a=this._getStat(e);return this._makeEntry(a,r)}catch(a){if(o.errorFilter(a))return null;throw a}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};qO.default=GO});var Vie=_(WO=>{"use strict";Object.defineProperty(WO,"__esModule",{value:!0});var ytt=Kie(),Ett=FP(),YO=class extends Ett.default{constructor(){super(...arguments),this._reader=new ytt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return this.api(r,e,o).map(o.transform)}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};WO.default=YO});var Jie=_(sE=>{"use strict";Object.defineProperty(sE,"__esModule",{value:!0});sE.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var iE=ve("fs"),Ctt=ve("os"),wtt=Math.max(Ctt.cpus().length,1);sE.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:iE.lstat,lstatSync:iE.lstatSync,stat:iE.stat,statSync:iE.statSync,readdir:iE.readdir,readdirSync:iE.readdirSync};var KO=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,wtt),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},sE.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};sE.default=KO});var RP=_((vNt,Zie)=>{"use strict";var zie=Zne(),Xie=eie(),Itt=Yie(),Btt=Wie(),vtt=Vie(),VO=Jie(),Id=Sf();async function JO(t,e){oE(t);let r=zO(t,Itt.default,e),o=await Promise.all(r);return Id.array.flatten(o)}(function(t){function e(u,A){oE(u);let p=zO(u,vtt.default,A);return Id.array.flatten(p)}t.sync=e;function r(u,A){oE(u);let p=zO(u,Btt.default,A);return Id.stream.merge(p)}t.stream=r;function o(u,A){oE(u);let p=Xie.transform([].concat(u)),h=new VO.default(A);return zie.generate(p,h)}t.generateTasks=o;function a(u,A){oE(u);let p=new VO.default(A);return Id.pattern.isDynamicPattern(u,p)}t.isDynamicPattern=a;function n(u){return oE(u),Id.path.escape(u)}t.escapePath=n})(JO||(JO={}));function zO(t,e,r){let o=Xie.transform([].concat(t)),a=new VO.default(r),n=zie.generate(o,a),u=new e(a);return n.map(u.read,u)}function oE(t){if(![].concat(t).every(o=>Id.string.isString(o)&&!Id.string.isEmpty(o)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}Zie.exports=JO});var wn={};Vt(wn,{checksumFile:()=>NP,checksumPattern:()=>LP,makeHash:()=>zs});function zs(...t){let e=(0,TP.createHash)("sha512"),r="";for(let o of t)typeof o=="string"?r+=o:o&&(r&&(e.update(r),r=""),e.update(o));return r&&e.update(r),e.digest("hex")}async function NP(t,{baseFs:e,algorithm:r}={baseFs:oe,algorithm:"sha512"}){let o=await e.openPromise(t,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,TP.createHash)(r),A=0;for(;(A=await e.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await e.closePromise(o)}}async function LP(t,{cwd:e}){let o=(await(0,XO.default)(t,{cwd:ue.fromPortablePath(e),onlyDirectories:!0})).map(A=>`${A}/**/*`),a=await(0,XO.default)([t,...o],{cwd:ue.fromPortablePath(e),onlyFiles:!1});a.sort();let n=await Promise.all(a.map(async A=>{let p=[Buffer.from(A)],h=ue.toPortablePath(A),E=await oe.lstatPromise(h);return E.isSymbolicLink()?p.push(Buffer.from(await oe.readlinkPromise(h))):E.isFile()&&p.push(await oe.readFilePromise(h)),p.join("\0")})),u=(0,TP.createHash)("sha512");for(let A of n)u.update(A);return u.digest("hex")}var TP,XO,nh=Et(()=>{St();TP=ve("crypto"),XO=$e(RP())});var W={};Vt(W,{areDescriptorsEqual:()=>nse,areIdentsEqual:()=>n1,areLocatorsEqual:()=>i1,areVirtualPackagesEquivalent:()=>Rtt,bindDescriptor:()=>Qtt,bindLocator:()=>Ftt,convertDescriptorToLocator:()=>OP,convertLocatorToDescriptor:()=>$O,convertPackageToLocator:()=>btt,convertToIdent:()=>Ptt,convertToManifestRange:()=>Gtt,copyPackage:()=>e1,devirtualizeDescriptor:()=>t1,devirtualizeLocator:()=>r1,ensureDevirtualizedDescriptor:()=>xtt,ensureDevirtualizedLocator:()=>ktt,getIdentVendorPath:()=>nM,isPackageCompatible:()=>jP,isVirtualDescriptor:()=>bf,isVirtualLocator:()=>Hc,makeDescriptor:()=>In,makeIdent:()=>eA,makeLocator:()=>Qs,makeRange:()=>_P,parseDescriptor:()=>ih,parseFileStyleRange:()=>Htt,parseIdent:()=>Js,parseLocator:()=>xf,parseRange:()=>Bd,prettyDependent:()=>kL,prettyDescriptor:()=>Gn,prettyIdent:()=>cs,prettyLocator:()=>jr,prettyLocatorNoColors:()=>xL,prettyRange:()=>cE,prettyReference:()=>o1,prettyResolution:()=>ZI,prettyWorkspace:()=>a1,renamePackage:()=>eM,slugifyIdent:()=>ZO,slugifyLocator:()=>lE,sortDescriptors:()=>uE,stringifyDescriptor:()=>Pa,stringifyIdent:()=>fn,stringifyLocator:()=>ba,tryParseDescriptor:()=>s1,tryParseIdent:()=>ise,tryParseLocator:()=>UP,tryParseRange:()=>_tt,virtualizeDescriptor:()=>tM,virtualizePackage:()=>rM});function eA(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:zs(t,e),scope:t,name:e}}function In(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:zs(t.identHash,e),range:e}}function Qs(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:zs(t.identHash,e),reference:e}}function Ptt(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function OP(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function $O(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function btt(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function eM(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:t.version,languageName:t.languageName,linkType:t.linkType,conditions:t.conditions,dependencies:new Map(t.dependencies),peerDependencies:new Map(t.peerDependencies),dependenciesMeta:new Map(t.dependenciesMeta),peerDependenciesMeta:new Map(t.peerDependenciesMeta),bin:new Map(t.bin)}}function e1(t){return eM(t,t)}function tM(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return In(t,`virtual:${e}#${t.range}`)}function rM(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return eM(t,Qs(t,`virtual:${e}#${t.reference}`))}function bf(t){return t.range.startsWith($I)}function Hc(t){return t.reference.startsWith($I)}function t1(t){if(!bf(t))throw new Error("Not a virtual descriptor");return In(t,t.range.replace(MP,""))}function r1(t){if(!Hc(t))throw new Error("Not a virtual descriptor");return Qs(t,t.reference.replace(MP,""))}function xtt(t){return bf(t)?In(t,t.range.replace(MP,"")):t}function ktt(t){return Hc(t)?Qs(t,t.reference.replace(MP,"")):t}function Qtt(t,e){return t.range.includes("::")?t:In(t,`${t.range}::${aE.default.stringify(e)}`)}function Ftt(t,e){return t.reference.includes("::")?t:Qs(t,`${t.reference}::${aE.default.stringify(e)}`)}function n1(t,e){return t.identHash===e.identHash}function nse(t,e){return t.descriptorHash===e.descriptorHash}function i1(t,e){return t.locatorHash===e.locatorHash}function Rtt(t,e){if(!Hc(t))throw new Error("Invalid package type");if(!Hc(e))throw new Error("Invalid package type");if(!n1(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let o=e.dependencies.get(r.identHash);if(!o||!nse(r,o))return!1}return!0}function Js(t){let e=ise(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function ise(t){let e=t.match(Ttt);if(!e)return null;let[,r,o]=e;return eA(typeof r<"u"?r:null,o)}function ih(t,e=!1){let r=s1(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function s1(t,e=!1){let r=e?t.match(Ntt):t.match(Ltt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid range (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return In(eA(u,a),A)}function xf(t,e=!1){let r=UP(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function UP(t,e=!1){let r=e?t.match(Ott):t.match(Mtt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid reference (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return Qs(eA(u,a),A)}function Bd(t,e){let r=t.match(Utt);if(r===null)throw new Error(`Invalid range (${t})`);let o=typeof r[1]<"u"?r[1]:null;if(typeof e?.requireProtocol=="string"&&o!==e.requireProtocol)throw new Error(`Invalid protocol (${o})`);if(e?.requireProtocol&&o===null)throw new Error(`Missing protocol (${o})`);let a=typeof r[3]<"u"?decodeURIComponent(r[2]):null;if(e?.requireSource&&a===null)throw new Error(`Missing source (${t})`);let n=typeof r[3]<"u"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),u=e?.parseSelector?aE.default.parse(n):n,A=typeof r[4]<"u"?aE.default.parse(r[4]):null;return{protocol:o,source:a,selector:u,params:A}}function _tt(t,e){try{return Bd(t,e)}catch{return null}}function Htt(t,{protocol:e}){let{selector:r,params:o}=Bd(t,{requireProtocol:e,requireBindings:!0});if(typeof o.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:xf(o.locator,!0),path:r}}function $ie(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A"),t=t.replaceAll("#","%23"),t}function jtt(t){return t===null?!1:Object.entries(t).length>0}function _P({protocol:t,source:e,selector:r,params:o}){let a="";return t!==null&&(a+=`${t}`),e!==null&&(a+=`${$ie(e)}#`),a+=$ie(r),jtt(o)&&(a+=`::${aE.default.stringify(o)}`),a}function Gtt(t){let{params:e,protocol:r,source:o,selector:a}=Bd(t);for(let n in e)n.startsWith("__")&&delete e[n];return _P({protocol:r,source:o,params:e,selector:a})}function fn(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function Pa(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function ba(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function ZO(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function lE(t){let{protocol:e,selector:r}=Bd(t.reference),o=e!==null?e.replace(qtt,""):"exotic",a=ese.default.valid(r),n=a!==null?`${o}-${a}`:`${o}`,u=10;return t.scope?`${ZO(t)}-${n}-${t.locatorHash.slice(0,u)}`:`${ZO(t)}-${n}-${t.locatorHash.slice(0,u)}`}function cs(t,e){return e.scope?`${Mt(t,`@${e.scope}/`,yt.SCOPE)}${Mt(t,e.name,yt.NAME)}`:`${Mt(t,e.name,yt.NAME)}`}function HP(t){if(t.startsWith($I)){let e=HP(t.substring(t.indexOf("#")+1)),r=t.substring($I.length,$I.length+Dtt);return`${e} [${r}]`}else return t.replace(Ytt,"?[...]")}function cE(t,e){return`${Mt(t,HP(e),yt.RANGE)}`}function Gn(t,e){return`${cs(t,e)}${Mt(t,"@",yt.RANGE)}${cE(t,e.range)}`}function o1(t,e){return`${Mt(t,HP(e),yt.REFERENCE)}`}function jr(t,e){return`${cs(t,e)}${Mt(t,"@",yt.REFERENCE)}${o1(t,e.reference)}`}function xL(t){return`${fn(t)}@${HP(t.reference)}`}function uE(t){return ks(t,[e=>fn(e),e=>e.range])}function a1(t,e){return cs(t,e.anchoredLocator)}function ZI(t,e,r){let o=bf(e)?t1(e):e;return r===null?`${Gn(t,o)} \u2192 ${bL(t).Cross}`:o.identHash===r.identHash?`${Gn(t,o)} \u2192 ${o1(t,r.reference)}`:`${Gn(t,o)} \u2192 ${jr(t,r)}`}function kL(t,e,r){return r===null?`${jr(t,e)}`:`${jr(t,e)} (via ${cE(t,r.range)})`}function nM(t){return`node_modules/${fn(t)}`}function jP(t,e){return t.conditions?Stt(t.conditions,r=>{let[,o,a]=r.match(rse),n=e[o];return n?n.includes(a):!0}):!0}var aE,ese,tse,$I,Dtt,rse,Stt,MP,Ttt,Ntt,Ltt,Ott,Mtt,Utt,qtt,Ytt,bo=Et(()=>{aE=$e(ve("querystring")),ese=$e(zn()),tse=$e(eX());Gl();nh();jl();bo();$I="virtual:",Dtt=5,rse=/(os|cpu|libc)=([a-z0-9_-]+)/,Stt=(0,tse.makeParser)(rse);MP=/^[^#]*#/;Ttt=/^(?:@([^/]+?)\/)?([^@/]+)$/;Ntt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Ltt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Ott=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Mtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Utt=/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/;qtt=/:$/;Ytt=/\?.*/});var sse,ose=Et(()=>{bo();sse={hooks:{reduceDependency:(t,e,r,o,{resolver:a,resolveOptions:n})=>{for(let{pattern:u,reference:A}of e.topLevelWorkspace.manifest.resolutions){if(u.from&&(u.from.fullName!==fn(r)||e.configuration.normalizeLocator(Qs(Js(u.from.fullName),u.from.description??r.reference)).locatorHash!==r.locatorHash)||u.descriptor.fullName!==fn(t)||e.configuration.normalizeDependency(In(xf(u.descriptor.fullName),u.descriptor.description??t.range)).descriptorHash!==t.descriptorHash)continue;return a.bindDescriptor(e.configuration.normalizeDependency(In(t,A)),e.topLevelWorkspace.anchoredLocator,n)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let o=a1(t.configuration,r);await t.configuration.triggerHook(a=>a.validateWorkspace,r,{reportWarning:(a,n)=>e.reportWarning(a,`${o}: ${n}`),reportError:(a,n)=>e.reportError(a,`${o}: ${n}`)})}},validateWorkspace:async(t,e)=>{let{manifest:r}=t;r.resolutions.length&&t.cwd!==t.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(let o of r.errors)e.reportWarning(57,o.message)}}}});var l1,Xn,vd=Et(()=>{l1=class{supportsDescriptor(e,r){return!!(e.range.startsWith(l1.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(l1.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[o.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.getWorkspaceByCwd(e.reference.slice(l1.protocol.length));return{...e,version:o.manifest.version||"0.0.0",languageName:"unknown",linkType:"SOFT",conditions:null,dependencies:r.project.configuration.normalizeDependencyMap(new Map([...o.manifest.dependencies,...o.manifest.devDependencies])),peerDependencies:new Map([...o.manifest.peerDependencies]),dependenciesMeta:o.manifest.dependenciesMeta,peerDependenciesMeta:o.manifest.peerDependenciesMeta,bin:o.manifest.bin}}},Xn=l1;Xn.protocol="workspace:"});var kr={};Vt(kr,{SemVer:()=>Ase.SemVer,clean:()=>Ktt,getComparator:()=>cse,mergeComparators:()=>iM,satisfiesWithPrereleases:()=>kf,simplifyRanges:()=>sM,stringifyComparator:()=>use,validRange:()=>xa});function kf(t,e,r=!1){if(!t)return!1;let o=`${e}${r}`,a=ase.get(o);if(typeof a>"u")try{a=new sh.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{ase.set(o,a||null)}else if(a===null)return!1;let n;try{n=new sh.default.SemVer(t,a)}catch{return!1}return a.test(n)?!0:(n.prerelease&&(n.prerelease=[]),a.set.some(u=>{for(let A of u)A.semver.prerelease&&(A.semver.prerelease=[]);return u.every(A=>A.test(n))}))}function xa(t){if(t.indexOf(":")!==-1)return null;let e=lse.get(t);if(typeof e<"u")return e;try{e=new sh.default.Range(t)}catch{e=null}return lse.set(t,e),e}function Ktt(t){let e=Wtt.exec(t);return e?e[1]:null}function cse(t){if(t.semver===sh.default.Comparator.ANY)return{gt:null,lt:null};switch(t.operator){case"":return{gt:[">=",t.semver],lt:["<=",t.semver]};case">":case">=":return{gt:[t.operator,t.semver],lt:null};case"<":case"<=":return{gt:null,lt:[t.operator,t.semver]};default:throw new Error(`Assertion failed: Unexpected comparator operator (${t.operator})`)}}function iM(t){if(t.length===0)return null;let e=null,r=null;for(let o of t){if(o.gt){let a=e!==null?sh.default.compare(o.gt[1],e[1]):null;(a===null||a>0||a===0&&o.gt[0]===">")&&(e=o.gt)}if(o.lt){let a=r!==null?sh.default.compare(o.lt[1],r[1]):null;(a===null||a<0||a===0&&o.lt[0]==="<")&&(r=o.lt)}}if(e&&r){let o=sh.default.compare(e[1],r[1]);if(o===0&&(e[0]===">"||r[0]==="<")||o>0)return null}return{gt:e,lt:r}}function use(t){if(t.gt&&t.lt){if(t.gt[0]===">="&&t.lt[0]==="<="&&t.gt[1].version===t.lt[1].version)return t.gt[1].version;if(t.gt[0]===">="&&t.lt[0]==="<"){if(t.lt[1].version===`${t.gt[1].major+1}.0.0-0`)return`^${t.gt[1].version}`;if(t.lt[1].version===`${t.gt[1].major}.${t.gt[1].minor+1}.0-0`)return`~${t.gt[1].version}`}}let e=[];return t.gt&&e.push(t.gt[0]+t.gt[1].version),t.lt&&e.push(t.lt[0]+t.lt[1].version),e.length?e.join(" "):"*"}function sM(t){let e=t.map(o=>xa(o).set.map(a=>a.map(n=>cse(n)))),r=e.shift().map(o=>iM(o)).filter(o=>o!==null);for(let o of e){let a=[];for(let n of r)for(let u of o){let A=iM([n,...u]);A!==null&&a.push(A)}r=a}return r.length===0?null:r.map(o=>use(o)).join(" || ")}var sh,Ase,ase,lse,Wtt,Qf=Et(()=>{sh=$e(zn()),Ase=$e(zn()),ase=new Map;lse=new Map;Wtt=/^(?:[\sv=]*?)((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(?:\s*)$/});function fse(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function pse(t){return t.charCodeAt(0)===65279?t.slice(1):t}function $o(t){return t.replace(/\\/g,"/")}function GP(t,{yamlCompatibilityMode:e}){return e?CL(t):typeof t>"u"||typeof t=="boolean"?t:null}function hse(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let o=r%2===0?"":"!",a=e.slice(r);return`${o}${t}=${a}`}function oM(t,e){return e.length===1?hse(t,e[0]):`(${e.map(r=>hse(t,r)).join(" | ")})`}var gse,AE,Ot,fE=Et(()=>{St();Nl();gse=$e(zn());vd();jl();Qf();bo();AE=class{constructor(){this.indent=" ";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:r=new Tn}={}){let o=V.join(e,"package.json");try{return await AE.fromFile(o,{baseFs:r})}catch(a){if(a.code==="ENOENT")return null;throw a}}static async find(e,{baseFs:r}={}){let o=await AE.tryFind(e,{baseFs:r});if(o===null)throw new Error("Manifest not found");return o}static async fromFile(e,{baseFs:r=new Tn}={}){let o=new AE;return await o.loadFile(e,{baseFs:r}),o}static fromText(e){let r=new AE;return r.loadFromText(e),r}loadFromText(e){let r;try{r=JSON.parse(pse(e)||"{}")}catch(o){throw o.message+=` (when parsing ${e})`,o}this.load(r),this.indent=fse(e)}async loadFile(e,{baseFs:r=new Tn}){let o=await r.readFilePromise(e,"utf8"),a;try{a=JSON.parse(pse(o)||"{}")}catch(n){throw n.message+=` (when parsing ${e})`,n}this.load(a),this.indent=fse(o)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let o=[];if(this.name=null,typeof e.name=="string")try{this.name=Js(e.name)}catch{o.push(new Error("Parsing failed for the 'name' field"))}if(typeof e.version=="string"?this.version=e.version:this.version=null,Array.isArray(e.os)){let n=[];this.os=n;for(let u of e.os)typeof u!="string"?o.push(new Error("Parsing failed for the 'os' field")):n.push(u)}else this.os=null;if(Array.isArray(e.cpu)){let n=[];this.cpu=n;for(let u of e.cpu)typeof u!="string"?o.push(new Error("Parsing failed for the 'cpu' field")):n.push(u)}else this.cpu=null;if(Array.isArray(e.libc)){let n=[];this.libc=n;for(let u of e.libc)typeof u!="string"?o.push(new Error("Parsing failed for the 'libc' field")):n.push(u)}else this.libc=null;if(typeof e.type=="string"?this.type=e.type:this.type=null,typeof e.packageManager=="string"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private=="boolean"?this.private=e.private:this.private=!1,typeof e.license=="string"?this.license=e.license:this.license=null,typeof e.languageName=="string"?this.languageName=e.languageName:this.languageName=null,typeof e.main=="string"?this.main=$o(e.main):this.main=null,typeof e.module=="string"?this.module=$o(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=$o(e.browser);else{this.browser=new Map;for(let[n,u]of Object.entries(e.browser))this.browser.set($o(n),typeof u=="string"?$o(u):u)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")e.bin.trim()===""?o.push(new Error("Invalid bin field")):this.name!==null?this.bin.set(this.name.name,$o(e.bin)):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[n,u]of Object.entries(e.bin)){if(typeof u!="string"||u.trim()===""){o.push(new Error(`Invalid bin definition for '${n}'`));continue}let A=Js(n);this.bin.set(A.name,$o(u))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[n,u]of Object.entries(e.scripts)){if(typeof u!="string"){o.push(new Error(`Invalid script definition for '${n}'`));continue}this.scripts.set(n,u)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[n,u]of Object.entries(e.dependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[n,u]of Object.entries(e.devDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.devDependencies.set(p.identHash,p)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[n,u]of Object.entries(e.peerDependencies)){let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}(typeof u!="string"||!u.startsWith(Xn.protocol)&&!xa(u))&&(o.push(new Error(`Invalid dependency range for '${n}'`)),u="*");let p=In(A,u);this.peerDependencies.set(p.identHash,p)}typeof e.workspaces=="object"&&e.workspaces!==null&&e.workspaces.nohoist&&o.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let a=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces=="object"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let n of a){if(typeof n!="string"){o.push(new Error(`Invalid workspace definition for '${n}'`));continue}this.workspaceDefinitions.push({pattern:n})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[n,u]of Object.entries(e.dependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}`));continue}let A=ih(n),p=this.ensureDependencyMeta(A),h=GP(u.built,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid built meta field for '${n}'`));continue}let E=GP(u.optional,{yamlCompatibilityMode:r});if(E===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}let I=GP(u.unplugged,{yamlCompatibilityMode:r});if(I===null){o.push(new Error(`Invalid unplugged meta field for '${n}'`));continue}Object.assign(p,{built:h,optional:E,unplugged:I})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[n,u]of Object.entries(e.peerDependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}'`));continue}let A=ih(n),p=this.ensurePeerDependencyMeta(A),h=GP(u.optional,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}Object.assign(p,{optional:h})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[n,u]of Object.entries(e.resolutions)){if(typeof u!="string"){o.push(new Error(`Invalid resolution entry for '${n}'`));continue}try{this.resolutions.push({pattern:MD(n),reference:u})}catch(A){o.push(A);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let n of e.files){if(typeof n!="string"){o.push(new Error(`Invalid files entry for '${n}'`));continue}this.files.add(n)}}else this.files=null;if(typeof e.publishConfig=="object"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access=="string"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main=="string"&&(this.publishConfig.main=$o(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=$o(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=$o(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[n,u]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set($o(n),typeof u=="string"?$o(u):u)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,$o(e.publishConfig.bin)]]):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.publishConfig.bin=="object"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[n,u]of Object.entries(e.publishConfig.bin)){if(typeof u!="string"){o.push(new Error(`Invalid bin definition for '${n}'`));continue}this.publishConfig.bin.set(n,$o(u))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let n of e.publishConfig.executableFiles){if(typeof n!="string"){o.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add($o(n))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let n of Object.keys(e.installConfig))n==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:o.push(new Error("Invalid hoisting limits definition")):n=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:o.push(new Error("Invalid selfReferences definition, must be a boolean value")):o.push(new Error(`Unrecognized installConfig key: ${n}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[n,u]of Object.entries(e.optionalDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p);let h=In(A,"unknown"),E=this.ensureDependencyMeta(h);Object.assign(E,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=o}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(oM("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(oM("cpu",this.cpu)),this.libc&&this.libc.length>0&&e.push(oM("libc",this.libc)),e.length>0?e.join(" & "):null}ensureDependencyMeta(e){if(e.range!=="unknown"&&!gse.default.valid(e.range))throw new Error(`Invalid meta field range for '${Pa(e)}'`);let r=fn(e),o=e.range!=="unknown"?e.range:null,a=this.dependenciesMeta.get(r);a||this.dependenciesMeta.set(r,a=new Map);let n=a.get(o);return n||a.set(o,n={}),n}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${Pa(e)}'`);let r=fn(e),o=this.peerDependenciesMeta.get(r);return o||this.peerDependenciesMeta.set(r,o={}),o}setRawField(e,r,{after:o=[]}={}){let a=new Set(o.filter(n=>Object.hasOwn(this.raw,n)));if(a.size===0||Object.hasOwn(this.raw,e))this.raw[e]=r;else{let n=this.raw,u=this.raw={},A=!1;for(let p of Object.keys(n))u[p]=n[p],A||(a.delete(p),a.size===0&&(u[e]=r,A=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=fn(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let n=this.browser;typeof n=="string"?e.browser=n:n instanceof Map&&(e.browser=Object.assign({},...Array.from(n.keys()).sort().map(u=>({[u]:n.get(u)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(n=>({[n]:this.bin.get(n)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:n})=>n)}:e.workspaces=this.workspaceDefinitions.map(({pattern:n})=>n):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let o=[],a=[];for(let n of this.dependencies.values()){let u=this.dependenciesMeta.get(fn(n)),A=!1;if(r&&u){let p=u.get(null);p&&p.optional&&(A=!0)}A?a.push(n):o.push(n)}o.length>0?e.dependencies=Object.assign({},...uE(o).map(n=>({[fn(n)]:n.range}))):delete e.dependencies,a.length>0?e.optionalDependencies=Object.assign({},...uE(a).map(n=>({[fn(n)]:n.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...uE(this.devDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...uE(this.peerDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[n,u]of ks(this.dependenciesMeta.entries(),([A,p])=>A))for(let[A,p]of ks(u.entries(),([h,E])=>h!==null?`0${h}`:"1")){let h=A!==null?Pa(In(Js(n),A)):n,E={...p};r&&A===null&&delete E.optional,Object.keys(E).length!==0&&(e.dependenciesMeta[h]=E)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...ks(this.peerDependenciesMeta.entries(),([n,u])=>n).map(([n,u])=>({[n]:u}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:n,reference:u})=>({[UD(n)]:u}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){e.scripts??={};for(let n of Object.keys(e.scripts))this.scripts.has(n)||delete e.scripts[n];for(let[n,u]of this.scripts.entries())e.scripts[n]=u}else delete e.scripts;return e}},Ot=AE;Ot.fileName="package.json",Ot.allDependencies=["dependencies","devDependencies","peerDependencies"],Ot.hardDependencies=["dependencies","devDependencies"]});var mse=_((UNt,dse)=>{var Vtt=_l(),Jtt=function(){return Vtt.Date.now()};dse.exports=Jtt});var Ese=_((_Nt,yse)=>{var ztt=/\s/;function Xtt(t){for(var e=t.length;e--&&ztt.test(t.charAt(e)););return e}yse.exports=Xtt});var wse=_((HNt,Cse)=>{var Ztt=Ese(),$tt=/^\s+/;function ert(t){return t&&t.slice(0,Ztt(t)+1).replace($tt,"")}Cse.exports=ert});var pE=_((jNt,Ise)=>{var trt=hd(),rrt=Ju(),nrt="[object Symbol]";function irt(t){return typeof t=="symbol"||rrt(t)&&trt(t)==nrt}Ise.exports=irt});var Sse=_((GNt,Dse)=>{var srt=wse(),Bse=il(),ort=pE(),vse=0/0,art=/^[-+]0x[0-9a-f]+$/i,lrt=/^0b[01]+$/i,crt=/^0o[0-7]+$/i,urt=parseInt;function Art(t){if(typeof t=="number")return t;if(ort(t))return vse;if(Bse(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Bse(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=srt(t);var r=lrt.test(t);return r||crt.test(t)?urt(t.slice(2),r?2:8):art.test(t)?vse:+t}Dse.exports=Art});var xse=_((qNt,bse)=>{var frt=il(),aM=mse(),Pse=Sse(),prt="Expected a function",hrt=Math.max,grt=Math.min;function drt(t,e,r){var o,a,n,u,A,p,h=0,E=!1,I=!1,v=!0;if(typeof t!="function")throw new TypeError(prt);e=Pse(e)||0,frt(r)&&(E=!!r.leading,I="maxWait"in r,n=I?hrt(Pse(r.maxWait)||0,e):n,v="trailing"in r?!!r.trailing:v);function x(ce){var me=o,he=a;return o=a=void 0,h=ce,u=t.apply(he,me),u}function C(ce){return h=ce,A=setTimeout(U,e),E?x(ce):u}function R(ce){var me=ce-p,he=ce-h,Be=e-me;return I?grt(Be,n-he):Be}function L(ce){var me=ce-p,he=ce-h;return p===void 0||me>=e||me<0||I&&he>=n}function U(){var ce=aM();if(L(ce))return J(ce);A=setTimeout(U,R(ce))}function J(ce){return A=void 0,v&&o?x(ce):(o=a=void 0,u)}function te(){A!==void 0&&clearTimeout(A),h=0,o=p=a=A=void 0}function ae(){return A===void 0?u:J(aM())}function fe(){var ce=aM(),me=L(ce);if(o=arguments,a=this,p=ce,me){if(A===void 0)return C(p);if(I)return clearTimeout(A),A=setTimeout(U,e),x(p)}return A===void 0&&(A=setTimeout(U,e)),u}return fe.cancel=te,fe.flush=ae,fe}bse.exports=drt});var lM=_((YNt,kse)=>{var mrt=xse(),yrt=il(),Ert="Expected a function";function Crt(t,e,r){var o=!0,a=!0;if(typeof t!="function")throw new TypeError(Ert);return yrt(r)&&(o="leading"in r?!!r.leading:o,a="trailing"in r?!!r.trailing:a),mrt(t,e,{leading:o,maxWait:e,trailing:a})}kse.exports=Crt});function Irt(t){return typeof t.reportCode<"u"}var Qse,Fse,Rse,wrt,zt,Xs,Yl=Et(()=>{Qse=$e(lM()),Fse=ve("stream"),Rse=ve("string_decoder"),wrt=15,zt=class extends Error{constructor(r,o,a){super(o);this.reportExtra=a;this.reportCode=r}};Xs=class{constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}getRecommendedLength(){return 180}reportCacheHit(e){this.cacheHits.add(e.locatorHash)}reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}static progressViaCounter(e){let r=0,o,a=new Promise(p=>{o=p}),n=p=>{let h=o;a=new Promise(E=>{o=E}),r=p,h()},u=(p=0)=>{n(r+1)},A=async function*(){for(;r{r=u}),a=(0,Qse.default)(u=>{let A=r;o=new Promise(p=>{r=p}),e=u,A()},1e3/wrt),n=async function*(){for(;;)await o,yield{title:e}}();return{[Symbol.asyncIterator](){return n},hasProgress:!1,hasTitle:!0,setTitle:a}}async startProgressPromise(e,r){let o=this.reportProgress(e);try{return await r(e)}finally{o.stop()}}startProgressSync(e,r){let o=this.reportProgress(e);try{return r(e)}finally{o.stop()}}reportInfoOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedInfos.has(a)||(this.reportedInfos.add(a),this.reportInfo(e,r),o?.reportExtra?.(this))}reportWarningOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedWarnings.has(a)||(this.reportedWarnings.add(a),this.reportWarning(e,r),o?.reportExtra?.(this))}reportErrorOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedErrors.has(a)||(this.reportedErrors.add(a),this.reportError(e,r),o?.reportExtra?.(this))}reportExceptionOnce(e){Irt(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let r=new Fse.PassThrough,o=new Rse.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",e!==null?this.reportInfo(null,`${e} ${p}`):this.reportInfo(null,p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&(e!==null?this.reportInfo(null,`${e} ${n}`):this.reportInfo(null,n))}),r}}});var hE,cM=Et(()=>{Yl();bo();hE=class{constructor(e){this.fetchers=e}supports(e,r){return!!this.tryFetcher(e,r)}getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}tryFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));return o||null}getFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));if(!o)throw new zt(11,`${jr(r.project.configuration,e)} isn't supported by any available fetcher`);return o}}});var Dd,uM=Et(()=>{bo();Dd=class{constructor(e){this.resolvers=e.filter(r=>r)}supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.getResolverByDescriptor(e,o).bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,o){return await this.getResolverByDescriptor(e,o).getCandidates(e,r,o)}async getSatisfying(e,r,o,a){return this.getResolverByDescriptor(e,a).getSatisfying(e,r,o,a)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));return o||null}getResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));if(!o)throw new Error(`${Gn(r.project.configuration,e)} isn't supported by any available resolver`);return o}tryResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));return o||null}getResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));if(!o)throw new Error(`${jr(r.project.configuration,e)} isn't supported by any available resolver`);return o}}});var gE,AM=Et(()=>{St();bo();gE=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a);return r.fetcher.getLocalPath(n,r)}async fetch(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a),u=await r.fetcher.fetch(n,r);return await this.ensureVirtualLink(e,u,r)}getLocatorFilename(e){return lE(e)}async ensureVirtualLink(e,r,o){let a=r.packageFs.getRealPath(),n=o.project.configuration.get("virtualFolder"),u=this.getLocatorFilename(e),A=mi.makeVirtualPath(n,u,a),p=new Uu(A,{baseFs:r.packageFs,pathUtils:V});return{...r,packageFs:p}}}});var dE,c1,Tse=Et(()=>{dE=class{static isVirtualDescriptor(e){return!!e.range.startsWith(dE.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(dE.protocol)}supportsDescriptor(e,r){return dE.isVirtualDescriptor(e)}supportsLocator(e,r){return dE.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,r){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,r,o){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,o,a){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,r){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}},c1=dE;c1.protocol="virtual:"});var mE,fM=Et(()=>{St();vd();mE=class{supports(e){return!!e.reference.startsWith(Xn.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let o=this.getWorkspace(e,r).cwd;return{packageFs:new gn(o),prefixPath:Bt.dot,localPath:o}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Xn.protocol.length))}}});function u1(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Nse(t){return typeof t>"u"?3:u1(t)?0:Array.isArray(t)?1:2}function gM(t,e){return Object.hasOwn(t,e)}function vrt(t){return u1(t)&&gM(t,"onConflict")&&typeof t.onConflict=="string"}function Drt(t){if(typeof t>"u")return{onConflict:"default",value:t};if(!vrt(t))return{onConflict:"default",value:t};if(gM(t,"value"))return t;let{onConflict:e,...r}=t;return{onConflict:e,value:r}}function Lse(t,e){let r=u1(t)&&gM(t,e)?t[e]:void 0;return Drt(r)}function yE(t,e){return[t,e,Ose]}function dM(t){return Array.isArray(t)?t[2]===Ose:!1}function pM(t,e){if(u1(t)){let r={};for(let o of Object.keys(t))r[o]=pM(t[o],e);return yE(e,r)}return Array.isArray(t)?yE(e,t.map(r=>pM(r,e))):yE(e,t)}function hM(t,e,r,o,a){let n,u=[],A=a,p=0;for(let E=a-1;E>=o;--E){let[I,v]=t[E],{onConflict:x,value:C}=Lse(v,r),R=Nse(C);if(R!==3){if(n??=R,R!==n||x==="hardReset"){p=A;break}if(R===2)return yE(I,C);if(u.unshift([I,C]),x==="reset"){p=E;break}x==="extend"&&E===o&&(o=0),A=E}}if(typeof n>"u")return null;let h=u.map(([E])=>E).join(", ");switch(n){case 1:return yE(h,new Array().concat(...u.map(([E,I])=>I.map(v=>pM(v,E)))));case 0:{let E=Object.assign({},...u.map(([,R])=>R)),I=Object.keys(E),v={},x=t.map(([R,L])=>[R,Lse(L,r).value]),C=Brt(x,([R,L])=>{let U=Nse(L);return U!==0&&U!==3});if(C!==-1){let R=x.slice(C+1);for(let L of I)v[L]=hM(R,e,L,0,R.length)}else for(let R of I)v[R]=hM(x,e,R,p,x.length);return yE(h,v)}default:throw new Error("Assertion failed: Non-extendable value type")}}function Mse(t){return hM(t.map(([e,r])=>[e,{["."]:r}]),[],".",0,t.length)}function A1(t){return dM(t)?t[1]:t}function qP(t){let e=dM(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>qP(r));if(u1(e)){let r={};for(let[o,a]of Object.entries(e))r[o]=qP(a);return r}return e}function mM(t){return dM(t)?t[0]:null}var Brt,Ose,Use=Et(()=>{Brt=(t,e,r)=>{let o=[...t];return o.reverse(),o.findIndex(e,r)};Ose=Symbol()});var YP={};Vt(YP,{getDefaultGlobalFolder:()=>EM,getHomeFolder:()=>EE,isFolderInside:()=>CM});function EM(){if(process.platform==="win32"){let t=ue.toPortablePath(process.env.LOCALAPPDATA||ue.join((0,yM.homedir)(),"AppData","Local"));return V.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=ue.toPortablePath(process.env.XDG_DATA_HOME);return V.resolve(t,"yarn/berry")}return V.resolve(EE(),".yarn/berry")}function EE(){return ue.toPortablePath((0,yM.homedir)()||"/usr/local/share")}function CM(t,e){let r=V.relative(e,t);return r&&!r.startsWith("..")&&!V.isAbsolute(r)}var yM,WP=Et(()=>{St();yM=ve("os")});var Gse=_(CE=>{"use strict";var iLt=ve("net"),Prt=ve("tls"),wM=ve("http"),_se=ve("https"),brt=ve("events"),sLt=ve("assert"),xrt=ve("util");CE.httpOverHttp=krt;CE.httpsOverHttp=Qrt;CE.httpOverHttps=Frt;CE.httpsOverHttps=Rrt;function krt(t){var e=new Ff(t);return e.request=wM.request,e}function Qrt(t){var e=new Ff(t);return e.request=wM.request,e.createSocket=Hse,e.defaultPort=443,e}function Frt(t){var e=new Ff(t);return e.request=_se.request,e}function Rrt(t){var e=new Ff(t);return e.request=_se.request,e.createSocket=Hse,e.defaultPort=443,e}function Ff(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||wM.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(o,a,n,u){for(var A=jse(a,n,u),p=0,h=e.requests.length;p=this.maxSockets){n.requests.push(u);return}n.createSocket(u,function(A){A.on("free",p),A.on("close",h),A.on("agentRemove",h),e.onSocket(A);function p(){n.emit("free",A,u)}function h(E){n.removeSocket(A),A.removeListener("free",p),A.removeListener("close",h),A.removeListener("agentRemove",h)}})};Ff.prototype.createSocket=function(e,r){var o=this,a={};o.sockets.push(a);var n=IM({},o.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(n.localAddress=e.localAddress),n.proxyAuth&&(n.headers=n.headers||{},n.headers["Proxy-Authorization"]="Basic "+new Buffer(n.proxyAuth).toString("base64")),oh("making CONNECT request");var u=o.request(n);u.useChunkedEncodingByDefault=!1,u.once("response",A),u.once("upgrade",p),u.once("connect",h),u.once("error",E),u.end();function A(I){I.upgrade=!0}function p(I,v,x){process.nextTick(function(){h(I,v,x)})}function h(I,v,x){if(u.removeAllListeners(),v.removeAllListeners(),I.statusCode!==200){oh("tunneling socket could not be established, statusCode=%d",I.statusCode),v.destroy();var C=new Error("tunneling socket could not be established, statusCode="+I.statusCode);C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}if(x.length>0){oh("got illegal response body from proxy"),v.destroy();var C=new Error("got illegal response body from proxy");C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}return oh("tunneling connection has established"),o.sockets[o.sockets.indexOf(a)]=v,r(v)}function E(I){u.removeAllListeners(),oh(`tunneling socket could not be established, cause=%s +`,I.message,I.stack);var v=new Error("tunneling socket could not be established, cause="+I.message);v.code="ECONNRESET",e.request.emit("error",v),o.removeSocket(a)}};Ff.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var o=this.requests.shift();o&&this.createSocket(o,function(a){o.request.onSocket(a)})}};function Hse(t,e){var r=this;Ff.prototype.createSocket.call(r,t,function(o){var a=t.request.getHeader("host"),n=IM({},r.options,{socket:o,servername:a?a.replace(/:.*$/,""):t.host}),u=Prt.connect(0,n);r.sockets[r.sockets.indexOf(o)]=u,e(u)})}function jse(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function IM(t){for(var e=1,r=arguments.length;e{qse.exports=Gse()});var Tf=_((Rf,KP)=>{"use strict";Object.defineProperty(Rf,"__esModule",{value:!0});var Wse=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Trt(t){return Wse.includes(t)}var Nrt=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","FormData","URLSearchParams","HTMLElement",...Wse];function Lrt(t){return Nrt.includes(t)}var Ort=["null","undefined","string","number","bigint","boolean","symbol"];function Mrt(t){return Ort.includes(t)}function wE(t){return e=>typeof e===t}var{toString:Kse}=Object.prototype,f1=t=>{let e=Kse.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&be.domElement(t))return"HTMLElement";if(Lrt(e))return e},ei=t=>e=>f1(e)===t;function be(t){if(t===null)return"null";switch(typeof t){case"undefined":return"undefined";case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"function":return"Function";case"bigint":return"bigint";case"symbol":return"symbol";default:}if(be.observable(t))return"Observable";if(be.array(t))return"Array";if(be.buffer(t))return"Buffer";let e=f1(t);if(e)return e;if(t instanceof String||t instanceof Boolean||t instanceof Number)throw new TypeError("Please don't use object wrappers for primitive types");return"Object"}be.undefined=wE("undefined");be.string=wE("string");var Urt=wE("number");be.number=t=>Urt(t)&&!be.nan(t);be.bigint=wE("bigint");be.function_=wE("function");be.null_=t=>t===null;be.class_=t=>be.function_(t)&&t.toString().startsWith("class ");be.boolean=t=>t===!0||t===!1;be.symbol=wE("symbol");be.numericString=t=>be.string(t)&&!be.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));be.array=(t,e)=>Array.isArray(t)?be.function_(e)?t.every(e):!0:!1;be.buffer=t=>{var e,r,o,a;return(a=(o=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||o===void 0?void 0:o.call(r,t))!==null&&a!==void 0?a:!1};be.nullOrUndefined=t=>be.null_(t)||be.undefined(t);be.object=t=>!be.null_(t)&&(typeof t=="object"||be.function_(t));be.iterable=t=>{var e;return be.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};be.asyncIterable=t=>{var e;return be.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};be.generator=t=>be.iterable(t)&&be.function_(t.next)&&be.function_(t.throw);be.asyncGenerator=t=>be.asyncIterable(t)&&be.function_(t.next)&&be.function_(t.throw);be.nativePromise=t=>ei("Promise")(t);var _rt=t=>{var e,r;return be.function_((e=t)===null||e===void 0?void 0:e.then)&&be.function_((r=t)===null||r===void 0?void 0:r.catch)};be.promise=t=>be.nativePromise(t)||_rt(t);be.generatorFunction=ei("GeneratorFunction");be.asyncGeneratorFunction=t=>f1(t)==="AsyncGeneratorFunction";be.asyncFunction=t=>f1(t)==="AsyncFunction";be.boundFunction=t=>be.function_(t)&&!t.hasOwnProperty("prototype");be.regExp=ei("RegExp");be.date=ei("Date");be.error=ei("Error");be.map=t=>ei("Map")(t);be.set=t=>ei("Set")(t);be.weakMap=t=>ei("WeakMap")(t);be.weakSet=t=>ei("WeakSet")(t);be.int8Array=ei("Int8Array");be.uint8Array=ei("Uint8Array");be.uint8ClampedArray=ei("Uint8ClampedArray");be.int16Array=ei("Int16Array");be.uint16Array=ei("Uint16Array");be.int32Array=ei("Int32Array");be.uint32Array=ei("Uint32Array");be.float32Array=ei("Float32Array");be.float64Array=ei("Float64Array");be.bigInt64Array=ei("BigInt64Array");be.bigUint64Array=ei("BigUint64Array");be.arrayBuffer=ei("ArrayBuffer");be.sharedArrayBuffer=ei("SharedArrayBuffer");be.dataView=ei("DataView");be.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;be.urlInstance=t=>ei("URL")(t);be.urlString=t=>{if(!be.string(t))return!1;try{return new URL(t),!0}catch{return!1}};be.truthy=t=>Boolean(t);be.falsy=t=>!t;be.nan=t=>Number.isNaN(t);be.primitive=t=>be.null_(t)||Mrt(typeof t);be.integer=t=>Number.isInteger(t);be.safeInteger=t=>Number.isSafeInteger(t);be.plainObject=t=>{if(Kse.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};be.typedArray=t=>Trt(f1(t));var Hrt=t=>be.safeInteger(t)&&t>=0;be.arrayLike=t=>!be.nullOrUndefined(t)&&!be.function_(t)&&Hrt(t.length);be.inRange=(t,e)=>{if(be.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(be.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var jrt=1,Grt=["innerHTML","ownerDocument","style","attributes","nodeValue"];be.domElement=t=>be.object(t)&&t.nodeType===jrt&&be.string(t.nodeName)&&!be.plainObject(t)&&Grt.every(e=>e in t);be.observable=t=>{var e,r,o,a;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((a=(o=t)["@@observable"])===null||a===void 0?void 0:a.call(o)):!1};be.nodeStream=t=>be.object(t)&&be.function_(t.pipe)&&!be.observable(t);be.infinite=t=>t===1/0||t===-1/0;var Vse=t=>e=>be.integer(e)&&Math.abs(e%2)===t;be.evenInteger=Vse(0);be.oddInteger=Vse(1);be.emptyArray=t=>be.array(t)&&t.length===0;be.nonEmptyArray=t=>be.array(t)&&t.length>0;be.emptyString=t=>be.string(t)&&t.length===0;be.nonEmptyString=t=>be.string(t)&&t.length>0;var qrt=t=>be.string(t)&&!/\S/.test(t);be.emptyStringOrWhitespace=t=>be.emptyString(t)||qrt(t);be.emptyObject=t=>be.object(t)&&!be.map(t)&&!be.set(t)&&Object.keys(t).length===0;be.nonEmptyObject=t=>be.object(t)&&!be.map(t)&&!be.set(t)&&Object.keys(t).length>0;be.emptySet=t=>be.set(t)&&t.size===0;be.nonEmptySet=t=>be.set(t)&&t.size>0;be.emptyMap=t=>be.map(t)&&t.size===0;be.nonEmptyMap=t=>be.map(t)&&t.size>0;be.propertyKey=t=>be.any([be.string,be.number,be.symbol],t);be.formData=t=>ei("FormData")(t);be.urlSearchParams=t=>ei("URLSearchParams")(t);var Jse=(t,e,r)=>{if(!be.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(r.length===0)throw new TypeError("Invalid number of values");return t.call(r,e)};be.any=(t,...e)=>(be.array(t)?t:[t]).some(o=>Jse(Array.prototype.some,o,e));be.all=(t,...e)=>Jse(Array.prototype.every,t,e);var Ht=(t,e,r,o={})=>{if(!t){let{multipleValues:a}=o,n=a?`received values of types ${[...new Set(r.map(u=>`\`${be(u)}\``))].join(", ")}`:`received value of type \`${be(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${n}.`)}};Rf.assert={undefined:t=>Ht(be.undefined(t),"undefined",t),string:t=>Ht(be.string(t),"string",t),number:t=>Ht(be.number(t),"number",t),bigint:t=>Ht(be.bigint(t),"bigint",t),function_:t=>Ht(be.function_(t),"Function",t),null_:t=>Ht(be.null_(t),"null",t),class_:t=>Ht(be.class_(t),"Class",t),boolean:t=>Ht(be.boolean(t),"boolean",t),symbol:t=>Ht(be.symbol(t),"symbol",t),numericString:t=>Ht(be.numericString(t),"string with a number",t),array:(t,e)=>{Ht(be.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>Ht(be.buffer(t),"Buffer",t),nullOrUndefined:t=>Ht(be.nullOrUndefined(t),"null or undefined",t),object:t=>Ht(be.object(t),"Object",t),iterable:t=>Ht(be.iterable(t),"Iterable",t),asyncIterable:t=>Ht(be.asyncIterable(t),"AsyncIterable",t),generator:t=>Ht(be.generator(t),"Generator",t),asyncGenerator:t=>Ht(be.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>Ht(be.nativePromise(t),"native Promise",t),promise:t=>Ht(be.promise(t),"Promise",t),generatorFunction:t=>Ht(be.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>Ht(be.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>Ht(be.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>Ht(be.boundFunction(t),"Function",t),regExp:t=>Ht(be.regExp(t),"RegExp",t),date:t=>Ht(be.date(t),"Date",t),error:t=>Ht(be.error(t),"Error",t),map:t=>Ht(be.map(t),"Map",t),set:t=>Ht(be.set(t),"Set",t),weakMap:t=>Ht(be.weakMap(t),"WeakMap",t),weakSet:t=>Ht(be.weakSet(t),"WeakSet",t),int8Array:t=>Ht(be.int8Array(t),"Int8Array",t),uint8Array:t=>Ht(be.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>Ht(be.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>Ht(be.int16Array(t),"Int16Array",t),uint16Array:t=>Ht(be.uint16Array(t),"Uint16Array",t),int32Array:t=>Ht(be.int32Array(t),"Int32Array",t),uint32Array:t=>Ht(be.uint32Array(t),"Uint32Array",t),float32Array:t=>Ht(be.float32Array(t),"Float32Array",t),float64Array:t=>Ht(be.float64Array(t),"Float64Array",t),bigInt64Array:t=>Ht(be.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>Ht(be.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>Ht(be.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>Ht(be.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>Ht(be.dataView(t),"DataView",t),urlInstance:t=>Ht(be.urlInstance(t),"URL",t),urlString:t=>Ht(be.urlString(t),"string with a URL",t),truthy:t=>Ht(be.truthy(t),"truthy",t),falsy:t=>Ht(be.falsy(t),"falsy",t),nan:t=>Ht(be.nan(t),"NaN",t),primitive:t=>Ht(be.primitive(t),"primitive",t),integer:t=>Ht(be.integer(t),"integer",t),safeInteger:t=>Ht(be.safeInteger(t),"integer",t),plainObject:t=>Ht(be.plainObject(t),"plain object",t),typedArray:t=>Ht(be.typedArray(t),"TypedArray",t),arrayLike:t=>Ht(be.arrayLike(t),"array-like",t),domElement:t=>Ht(be.domElement(t),"HTMLElement",t),observable:t=>Ht(be.observable(t),"Observable",t),nodeStream:t=>Ht(be.nodeStream(t),"Node.js Stream",t),infinite:t=>Ht(be.infinite(t),"infinite number",t),emptyArray:t=>Ht(be.emptyArray(t),"empty array",t),nonEmptyArray:t=>Ht(be.nonEmptyArray(t),"non-empty array",t),emptyString:t=>Ht(be.emptyString(t),"empty string",t),nonEmptyString:t=>Ht(be.nonEmptyString(t),"non-empty string",t),emptyStringOrWhitespace:t=>Ht(be.emptyStringOrWhitespace(t),"empty string or whitespace",t),emptyObject:t=>Ht(be.emptyObject(t),"empty object",t),nonEmptyObject:t=>Ht(be.nonEmptyObject(t),"non-empty object",t),emptySet:t=>Ht(be.emptySet(t),"empty set",t),nonEmptySet:t=>Ht(be.nonEmptySet(t),"non-empty set",t),emptyMap:t=>Ht(be.emptyMap(t),"empty map",t),nonEmptyMap:t=>Ht(be.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>Ht(be.propertyKey(t),"PropertyKey",t),formData:t=>Ht(be.formData(t),"FormData",t),urlSearchParams:t=>Ht(be.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>Ht(be.evenInteger(t),"even integer",t),oddInteger:t=>Ht(be.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>Ht(be.directInstanceOf(t,e),"T",t),inRange:(t,e)=>Ht(be.inRange(t,e),"in range",t),any:(t,...e)=>Ht(be.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>Ht(be.all(t,...e),"predicate returns truthy for all values",e,{multipleValues:!0})};Object.defineProperties(be,{class:{value:be.class_},function:{value:be.function_},null:{value:be.null_}});Object.defineProperties(Rf.assert,{class:{value:Rf.assert.class_},function:{value:Rf.assert.function_},null:{value:Rf.assert.null_}});Rf.default=be;KP.exports=be;KP.exports.default=be;KP.exports.assert=Rf.assert});var zse=_((lLt,BM)=>{"use strict";var VP=class extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}},IE=class{static fn(e){return(...r)=>new IE((o,a,n)=>{r.push(n),e(...r).then(o,a)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,o)=>{this._reject=o;let a=A=>{this._isPending=!1,r(A)},n=A=>{this._isPending=!1,o(A)},u=A=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(A)};return Object.defineProperties(u,{shouldReject:{get:()=>this._rejectOnCancel,set:A=>{this._rejectOnCancel=A}}}),e(a,n,u)})}then(e,r){return this._promise.then(e,r)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let r of this._cancelHandlers)r()}catch(r){this._reject(r)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new VP(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(IE.prototype,Promise.prototype);BM.exports=IE;BM.exports.CancelError=VP});var Xse=_((DM,SM)=>{"use strict";Object.defineProperty(DM,"__esModule",{value:!0});var Yrt=ve("tls"),vM=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let o=typeof r.connect=="function",a=typeof r.secureConnect=="function",n=typeof r.close=="function",u=()=>{o&&r.connect(),t instanceof Yrt.TLSSocket&&a&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),n&&t.once("close",r.close)};t.writable&&!t.connecting?u():t.connecting?t.once("connect",u):t.destroyed&&n&&r.close(t._hadError)};DM.default=vM;SM.exports=vM;SM.exports.default=vM});var Zse=_((bM,xM)=>{"use strict";Object.defineProperty(bM,"__esModule",{value:!0});var Wrt=Xse(),Krt=Number(process.versions.node.split(".")[0]),PM=t=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};t.timings=e;let r=u=>{let A=u.emit.bind(u);u.emit=(p,...h)=>(p==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,u.emit=A),A(p,...h))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||Krt>=13)&&(e.phases.total=Date.now()-e.start)});let o=u=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let A=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};u.prependOnceListener("lookup",A),Wrt.default(u,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(u.removeListener("lookup",A),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};t.socket?o(t.socket):t.prependOnceListener("socket",o);let a=()=>{var u;e.upload=Date.now(),e.phases.request=e.upload-(u=e.secureConnect,u??e.connect)};return(()=>typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))()?a():t.prependOnceListener("finish",a),t.prependOnceListener("response",u=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,u.timings=e,r(u),u.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};bM.default=PM;xM.exports=PM;xM.exports.default=PM});var soe=_((cLt,FM)=>{"use strict";var{V4MAPPED:Vrt,ADDRCONFIG:Jrt,ALL:ioe,promises:{Resolver:$se},lookup:zrt}=ve("dns"),{promisify:kM}=ve("util"),Xrt=ve("os"),BE=Symbol("cacheableLookupCreateConnection"),QM=Symbol("cacheableLookupInstance"),eoe=Symbol("expires"),Zrt=typeof ioe=="number",toe=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},$rt=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},roe=()=>{let t=!1,e=!1;for(let r of Object.values(Xrt.networkInterfaces()))for(let o of r)if(!o.internal&&(o.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},ent=t=>Symbol.iterator in t,noe={ttl:!0},tnt={all:!0},JP=class{constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:o=3600,errorTtl:a=.15,resolver:n=new $se,lookup:u=zrt}={}){if(this.maxTtl=r,this.errorTtl=a,this._cache=e,this._resolver=n,this._dnsLookup=kM(u),this._resolver instanceof $se?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=kM(this._resolver.resolve4.bind(this._resolver)),this._resolve6=kM(this._resolver.resolve6.bind(this._resolver))),this._iface=roe(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,o<1)this._fallback=!1;else{this._fallback=!0;let A=setInterval(()=>{this._hostnamesToFallback.clear()},o*1e3);A.unref&&A.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,r,o){if(typeof r=="function"?(o=r,r={}):typeof r=="number"&&(r={family:r}),!o)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(a=>{r.all?o(null,a):o(null,a.address,a.family,a.expires,a.ttl)},o)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let o=await this.query(e);if(r.family===6){let a=o.filter(n=>n.family===6);r.hints&Vrt&&(Zrt&&r.hints&ioe||a.length===0)?$rt(o):o=a}else r.family===4&&(o=o.filter(a=>a.family===4));if(r.hints&Jrt){let{_iface:a}=this;o=o.filter(n=>n.family===6?a.has6:a.has4)}if(o.length===0){let a=new Error(`cacheableLookup ENOTFOUND ${e}`);throw a.code="ENOTFOUND",a.hostname=e,a}return r.all?o:o[0]}async query(e){let r=await this._cache.get(e);if(!r){let o=this._pending[e];if(o)r=await o;else{let a=this.queryAndCache(e);this._pending[e]=a,r=await a}}return r=r.map(o=>({...o})),r}async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code==="ENODATA"||E.code==="ENOTFOUND")return[];throw E}},[o,a]=await Promise.all([this._resolve4(e,noe),this._resolve6(e,noe)].map(h=>r(h))),n=0,u=0,A=0,p=Date.now();for(let h of o)h.family=4,h.expires=p+h.ttl*1e3,n=Math.max(n,h.ttl);for(let h of a)h.family=6,h.expires=p+h.ttl*1e3,u=Math.max(u,h.ttl);return o.length>0?a.length>0?A=Math.min(n,u):A=n:A=u,{entries:[...o,...a],cacheTtl:A}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,r,o){if(this.maxTtl>0&&o>0){o=Math.min(o,this.maxTtl)*1e3,r[eoe]=Date.now()+o;try{await this._cache.set(e,r,o)}catch(a){this.lookupAsync=async()=>{let n=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw n.cause=a,n}}ent(this._cache)&&this._tick(o)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,tnt);try{let r=await this._resolve(e);r.entries.length===0&&this._fallback&&(r=await this._lookup(e),r.entries.length!==0&&this._hostnamesToFallback.add(e));let o=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,o),delete this._pending[e],r.entries}catch(r){throw delete this._pending[e],r}}_tick(e){let r=this._nextRemovalTime;(!r||e{this._nextRemovalTime=!1;let o=1/0,a=Date.now();for(let[n,u]of this._cache){let A=u[eoe];a>=A?this._cache.delete(n):A("lookup"in r||(r.lookup=this.lookup),e[BE](r,o))}uninstall(e){if(toe(e),e[BE]){if(e[QM]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[BE],delete e[BE],delete e[QM]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=roe(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};FM.exports=JP;FM.exports.default=JP});var loe=_((uLt,RM)=>{"use strict";var rnt=typeof URL>"u"?ve("url").URL:URL,nnt="text/plain",int="us-ascii",ooe=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),snt=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let o=r[1].split(";"),a=r[2],n=e?"":r[3],u=!1;o[o.length-1]==="base64"&&(o.pop(),u=!0);let A=(o.shift()||"").toLowerCase(),h=[...o.map(E=>{let[I,v=""]=E.split("=").map(x=>x.trim());return I==="charset"&&(v=v.toLowerCase(),v===int)?"":`${I}${v?`=${v}`:""}`}).filter(Boolean)];return u&&h.push("base64"),(h.length!==0||A&&A!==nnt)&&h.unshift(A),`data:${h.join(";")},${u?a.trim():a}${n?`#${n}`:""}`},aoe=(t,e)=>{if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,"normalizeHttps"))throw new Error("options.normalizeHttps is renamed to options.forceHttp");if(Reflect.has(e,"normalizeHttp"))throw new Error("options.normalizeHttp is renamed to options.forceHttps");if(Reflect.has(e,"stripFragment"))throw new Error("options.stripFragment is renamed to options.stripHash");if(t=t.trim(),/^data:/i.test(t))return snt(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new rnt(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash&&(a.hash=""),a.pathname&&(a.pathname=a.pathname.replace(/((?!:).|^)\/{2,}/g,(n,u)=>/^(?!\/)/g.test(u)?`${u}/`:"/")),a.pathname&&(a.pathname=decodeURI(a.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let n=a.pathname.split("/"),u=n[n.length-1];ooe(u,e.removeDirectoryIndex)&&(n=n.slice(0,n.length-1),a.pathname=n.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let n of[...a.searchParams.keys()])ooe(n,e.removeQueryParameters)&&a.searchParams.delete(n);return e.sortQueryParameters&&a.searchParams.sort(),e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,"")),t=a.toString(),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t};RM.exports=aoe;RM.exports.default=aoe});var Aoe=_((ALt,uoe)=>{uoe.exports=coe;function coe(t,e){if(t&&e)return coe(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(o){r[o]=t[o]}),r;function r(){for(var o=new Array(arguments.length),a=0;a{var foe=Aoe();TM.exports=foe(zP);TM.exports.strict=foe(poe);zP.proto=zP(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return zP(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return poe(this)},configurable:!0})});function zP(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function poe(t){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=t.apply(this,arguments)},r=t.name||"Function wrapped with `once`";return e.onceError=r+" shouldn't be called more than once",e.called=!1,e}});var LM=_((pLt,goe)=>{var ont=NM(),ant=function(){},lnt=function(t){return t.setHeader&&typeof t.abort=="function"},cnt=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},hoe=function(t,e,r){if(typeof e=="function")return hoe(t,null,e);e||(e={}),r=ont(r||ant);var o=t._writableState,a=t._readableState,n=e.readable||e.readable!==!1&&t.readable,u=e.writable||e.writable!==!1&&t.writable,A=function(){t.writable||p()},p=function(){u=!1,n||r.call(t)},h=function(){n=!1,u||r.call(t)},E=function(C){r.call(t,C?new Error("exited with error code: "+C):null)},I=function(C){r.call(t,C)},v=function(){if(n&&!(a&&a.ended))return r.call(t,new Error("premature close"));if(u&&!(o&&o.ended))return r.call(t,new Error("premature close"))},x=function(){t.req.on("finish",p)};return lnt(t)?(t.on("complete",p),t.on("abort",v),t.req?x():t.on("request",x)):u&&!o&&(t.on("end",A),t.on("close",A)),cnt(t)&&t.on("exit",E),t.on("end",h),t.on("finish",p),e.error!==!1&&t.on("error",I),t.on("close",v),function(){t.removeListener("complete",p),t.removeListener("abort",v),t.removeListener("request",x),t.req&&t.req.removeListener("finish",p),t.removeListener("end",A),t.removeListener("close",A),t.removeListener("finish",p),t.removeListener("exit",E),t.removeListener("end",h),t.removeListener("error",I),t.removeListener("close",v)}};goe.exports=hoe});var yoe=_((hLt,moe)=>{var unt=NM(),Ant=LM(),OM=ve("fs"),p1=function(){},fnt=/^v?\.0/.test(process.version),XP=function(t){return typeof t=="function"},pnt=function(t){return!fnt||!OM?!1:(t instanceof(OM.ReadStream||p1)||t instanceof(OM.WriteStream||p1))&&XP(t.close)},hnt=function(t){return t.setHeader&&XP(t.abort)},gnt=function(t,e,r,o){o=unt(o);var a=!1;t.on("close",function(){a=!0}),Ant(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,pnt(t))return t.close(p1);if(hnt(t))return t.abort();if(XP(t.destroy))return t.destroy();o(u||new Error("stream was destroyed"))}}},doe=function(t){t()},dnt=function(t,e){return t.pipe(e)},mnt=function(){var t=Array.prototype.slice.call(arguments),e=XP(t[t.length-1]||p1)&&t.pop()||p1;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,o=t.map(function(a,n){var u=n0;return gnt(a,u,A,function(p){r||(r=p),p&&o.forEach(doe),!u&&(o.forEach(doe),e(r))})});return t.reduce(dnt)};moe.exports=mnt});var Coe=_((gLt,Eoe)=>{"use strict";var{PassThrough:ynt}=ve("stream");Eoe.exports=t=>{t={...t};let{array:e}=t,{encoding:r}=t,o=r==="buffer",a=!1;e?a=!(r||o):r=r||"utf8",o&&(r=null);let n=new ynt({objectMode:a});r&&n.setEncoding(r);let u=0,A=[];return n.on("data",p=>{A.push(p),a?u=A.length:u+=p.length}),n.getBufferedValue=()=>e?A:o?Buffer.concat(A,u):A.join(""),n.getBufferedLength=()=>u,n}});var woe=_((dLt,vE)=>{"use strict";var Ent=yoe(),Cnt=Coe(),ZP=class extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}};async function $P(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e={maxBuffer:1/0,...e};let{maxBuffer:r}=e,o;return await new Promise((a,n)=>{let u=A=>{A&&(A.bufferedData=o.getBufferedValue()),n(A)};o=Ent(t,Cnt(e),A=>{if(A){u(A);return}a()}),o.on("data",()=>{o.getBufferedLength()>r&&u(new ZP)})}),o.getBufferedValue()}vE.exports=$P;vE.exports.default=$P;vE.exports.buffer=(t,e)=>$P(t,{...e,encoding:"buffer"});vE.exports.array=(t,e)=>$P(t,{...e,array:!0});vE.exports.MaxBufferError=ZP});var Boe=_((yLt,Ioe)=>{"use strict";var wnt=new Set([200,203,204,206,300,301,404,405,410,414,501]),Int=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),Bnt=new Set([500,502,503,504]),vnt={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},Dnt={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function Sd(t){let e=parseInt(t,10);return isFinite(e)?e:0}function Snt(t){return t?Bnt.has(t.status):!0}function MM(t){let e={};if(!t)return e;let r=t.trim().split(/\s*,\s*/);for(let o of r){let[a,n]=o.split(/\s*=\s*/,2);e[a]=n===void 0?!0:n.replace(/^"|"$/g,"")}return e}function Pnt(t){let e=[];for(let r in t){let o=t[r];e.push(o===!0?r:r+"="+o)}if(!!e.length)return e.join(", ")}Ioe.exports=class{constructor(e,r,{shared:o,cacheHeuristic:a,immutableMinTimeToLive:n,ignoreCargoCult:u,_fromObject:A}={}){if(A){this._fromObject(A);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=o!==!1,this._cacheHeuristic=a!==void 0?a:.1,this._immutableMinTtl=n!==void 0?n:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=MM(r.headers["cache-control"]),this._method="method"in e?e.method:"GET",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=r.headers.vary?e.headers:null,this._reqcc=MM(e.headers["cache-control"]),u&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":Pnt(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),r.headers["cache-control"]==null&&/no-cache/.test(r.headers.pragma)&&(this._rescc["no-cache"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc["no-store"]&&(this._method==="GET"||this._method==="HEAD"||this._method==="POST"&&this._hasExplicitExpiration())&&Int.has(this._status)&&!this._rescc["no-store"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc["max-age"]||this._isShared&&this._rescc["s-maxage"]||this._rescc.public||wnt.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]||this._rescc["max-age"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request headers missing")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let r=MM(e.headers["cache-control"]);return r["no-cache"]||/no-cache/.test(e.headers.pragma)||r["max-age"]&&this.age()>r["max-age"]||r["min-fresh"]&&this.timeToLive()<1e3*r["min-fresh"]||this.stale()&&!(r["max-stale"]&&!this._rescc["must-revalidate"]&&(r["max-stale"]===!0||r["max-stale"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||r&&e.method==="HEAD")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary==="*")return!1;let r=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(let o of r)if(e.headers[o]!==this._reqHeaders[o])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let o in e)vnt[o]||(r[o]=e[o]);if(e.connection){let o=e.connection.trim().split(/\s*,\s*/);for(let a of o)delete r[a]}if(r.warning){let o=r.warning.split(/,/).filter(a=>!/^\s*1[0-9][0-9]/.test(a));o.length?r.warning=o.join(",").trim():delete r.warning}return r}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),r=this.age();return r>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:"")+'113 - "rfc7234 5.5.4"'),e.age=`${Math.round(r)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){return Sd(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc["no-cache"]||this._isShared&&this._resHeaders["set-cookie"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary==="*")return 0;if(this._isShared){if(this._rescc["proxy-revalidate"])return 0;if(this._rescc["s-maxage"])return Sd(this._rescc["s-maxage"])}if(this._rescc["max-age"])return Sd(this._rescc["max-age"]);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this.date();if(this._resHeaders.expires){let o=Date.parse(this._resHeaders.expires);return Number.isNaN(o)||oo)return Math.max(e,(r-o)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),r=e+Sd(this._rescc["stale-if-error"]),o=e+Sd(this._rescc["stale-while-revalidate"]);return Math.max(0,e,r,o)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Sd(this._rescc["stale-if-error"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Sd(this._rescc["stale-while-revalidate"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e||e.v!==1)throw Error("Invalid serialization");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let r=this._copyWithoutHopByHopHeaders(e.headers);if(delete r["if-range"],!this._requestMatches(e,!0)||!this.storable())return delete r["if-none-match"],delete r["if-modified-since"],r;if(this._resHeaders.etag&&(r["if-none-match"]=r["if-none-match"]?`${r["if-none-match"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),r["accept-ranges"]||r["if-match"]||r["if-unmodified-since"]||this._method&&this._method!="GET"){if(delete r["if-modified-since"],r["if-none-match"]){let a=r["if-none-match"].split(/,/).filter(n=>!/^\s*W\//.test(n));a.length?r["if-none-match"]=a.join(",").trim():delete r["if-none-match"]}}else this._resHeaders["last-modified"]&&!r["if-modified-since"]&&(r["if-modified-since"]=this._resHeaders["last-modified"]);return r}revalidatedPolicy(e,r){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Snt(r))return{modified:!1,matches:!1,policy:this};if(!r||!r.headers)throw Error("Response headers missing");let o=!1;if(r.status!==void 0&&r.status!=304?o=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?o=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?o=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?o=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(o=!0),!o)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let a={};for(let u in this._resHeaders)a[u]=u in r.headers&&!Dnt[u]?r.headers[u]:this._resHeaders[u];let n=Object.assign({},r,{status:this._status,method:this._method,headers:a});return{policy:new this.constructor(e,n,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var eb=_((ELt,voe)=>{"use strict";voe.exports=t=>{let e={};for(let[r,o]of Object.entries(t))e[r.toLowerCase()]=o;return e}});var Soe=_((CLt,Doe)=>{"use strict";var bnt=ve("stream").Readable,xnt=eb(),UM=class extends bnt{constructor(e,r,o,a){if(typeof e!="number")throw new TypeError("Argument `statusCode` should be a number");if(typeof r!="object")throw new TypeError("Argument `headers` should be an object");if(!(o instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof a!="string")throw new TypeError("Argument `url` should be a string");super(),this.statusCode=e,this.headers=xnt(r),this.body=o,this.url=a}_read(){this.push(this.body),this.push(null)}};Doe.exports=UM});var boe=_((wLt,Poe)=>{"use strict";var knt=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];Poe.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(knt));for(let o of r)o in e||(e[o]=typeof t[o]=="function"?t[o].bind(t):t[o])}});var koe=_((ILt,xoe)=>{"use strict";var Qnt=ve("stream").PassThrough,Fnt=boe(),Rnt=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new Qnt;return Fnt(t,e),t.pipe(e)};xoe.exports=Rnt});var Qoe=_(_M=>{_M.stringify=function t(e){if(typeof e>"u")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(":base64:"+e.toString("base64"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e=="object"){var r="",o=Array.isArray(e);r=o?"[":"{";var a=!0;for(var n in e){var u=typeof e[n]=="function"||!o&&typeof e[n]>"u";Object.hasOwnProperty.call(e,n)&&!u&&(a||(r+=","),a=!1,o?e[n]==null?r+="null":r+=t(e[n]):e[n]!==void 0&&(r+=t(n)+":"+t(e[n])))}return r+=o?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e>"u"?"null":JSON.stringify(e)};_M.parse=function(t){return JSON.parse(t,function(e,r){return typeof r=="string"?/^:base64:/.test(r)?Buffer.from(r.substring(8),"base64"):/^:/.test(r)?r.substring(1):r:r})}});var Toe=_((vLt,Roe)=>{"use strict";var Tnt=ve("events"),Foe=Qoe(),Nnt=t=>{let e={redis:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql"};if(t.adapter||t.uri){let r=t.adapter||/^[^:]*/.exec(t.uri)[0];return new(ve(e[r]))(t)}return new Map},HM=class extends Tnt{constructor(e,r){if(super(),this.opts=Object.assign({namespace:"keyv",serialize:Foe.stringify,deserialize:Foe.parse},typeof e=="string"?{uri:e}:e,r),!this.opts.store){let o=Object.assign({},this.opts);this.opts.store=Nnt(o)}typeof this.opts.store.on=="function"&&this.opts.store.on("error",o=>this.emit("error",o)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,r){e=this._getKeyPrefix(e);let{store:o}=this.opts;return Promise.resolve().then(()=>o.get(e)).then(a=>typeof a=="string"?this.opts.deserialize(a):a).then(a=>{if(a!==void 0){if(typeof a.expires=="number"&&Date.now()>a.expires){this.delete(e);return}return r&&r.raw?a:a.value}})}set(e,r,o){e=this._getKeyPrefix(e),typeof o>"u"&&(o=this.opts.ttl),o===0&&(o=void 0);let{store:a}=this.opts;return Promise.resolve().then(()=>{let n=typeof o=="number"?Date.now()+o:null;return r={value:r,expires:n},this.opts.serialize(r)}).then(n=>a.set(e,n,o)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:r}=this.opts;return Promise.resolve().then(()=>r.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};Roe.exports=HM});var Ooe=_((SLt,Loe)=>{"use strict";var Lnt=ve("events"),tb=ve("url"),Ont=loe(),Mnt=woe(),jM=Boe(),Noe=Soe(),Unt=eb(),_nt=koe(),Hnt=Toe(),jc=class{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new Hnt({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,o)=>{let a;if(typeof r=="string")a=GM(tb.parse(r)),r={};else if(r instanceof tb.URL)a=GM(tb.parse(r.toString())),r={};else{let[I,...v]=(r.path||"").split("?"),x=v.length>0?`?${v.join("?")}`:"";a=GM({...r,pathname:I,search:x})}r={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...r,...jnt(a)},r.headers=Unt(r.headers);let n=new Lnt,u=Ont(tb.format(a),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),A=`${r.method}:${u}`,p=!1,h=!1,E=I=>{h=!0;let v=!1,x,C=new Promise(L=>{x=()=>{v||(v=!0,L())}}),R=L=>{if(p&&!I.forceRefresh){L.status=L.statusCode;let J=jM.fromObject(p.cachePolicy).revalidatedPolicy(I,L);if(!J.modified){let te=J.policy.responseHeaders();L=new Noe(p.statusCode,te,p.body,p.url),L.cachePolicy=J.policy,L.fromCache=!0}}L.fromCache||(L.cachePolicy=new jM(I,L,I),L.fromCache=!1);let U;I.cache&&L.cachePolicy.storable()?(U=_nt(L),(async()=>{try{let J=Mnt.buffer(L);if(await Promise.race([C,new Promise(ce=>L.once("end",ce))]),v)return;let te=await J,ae={cachePolicy:L.cachePolicy.toObject(),url:L.url,statusCode:L.fromCache?p.statusCode:L.statusCode,body:te},fe=I.strictTtl?L.cachePolicy.timeToLive():void 0;I.maxTtl&&(fe=fe?Math.min(fe,I.maxTtl):I.maxTtl),await this.cache.set(A,ae,fe)}catch(J){n.emit("error",new jc.CacheError(J))}})()):I.cache&&p&&(async()=>{try{await this.cache.delete(A)}catch(J){n.emit("error",new jc.CacheError(J))}})(),n.emit("response",U||L),typeof o=="function"&&o(U||L)};try{let L=e(I,R);L.once("error",x),L.once("abort",x),n.emit("request",L)}catch(L){n.emit("error",new jc.RequestError(L))}};return(async()=>{let I=async x=>{await Promise.resolve();let C=x.cache?await this.cache.get(A):void 0;if(typeof C>"u")return E(x);let R=jM.fromObject(C.cachePolicy);if(R.satisfiesWithoutRevalidation(x)&&!x.forceRefresh){let L=R.responseHeaders(),U=new Noe(C.statusCode,L,C.body,C.url);U.cachePolicy=R,U.fromCache=!0,n.emit("response",U),typeof o=="function"&&o(U)}else p=C,x.headers=R.revalidationHeaders(x),E(x)},v=x=>n.emit("error",new jc.CacheError(x));this.cache.once("error",v),n.on("response",()=>this.cache.removeListener("error",v));try{await I(r)}catch(x){r.automaticFailover&&!h&&E(r),n.emit("error",new jc.CacheError(x))}})(),n}}};function jnt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function GM(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}jc.RequestError=class extends Error{constructor(t){super(t.message),this.name="RequestError",Object.assign(this,t)}};jc.CacheError=class extends Error{constructor(t){super(t.message),this.name="CacheError",Object.assign(this,t)}};Loe.exports=jc});var Uoe=_((xLt,Moe)=>{"use strict";var Gnt=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];Moe.exports=(t,e)=>{if(e._readableState.autoDestroy)throw new Error("The second stream must have the `autoDestroy` option set to `false`");let r=new Set(Object.keys(t).concat(Gnt)),o={};for(let a of r)a in e||(o[a]={get(){let n=t[a];return typeof n=="function"?n.bind(t):n},set(n){t[a]=n},enumerable:!0,configurable:!1});return Object.defineProperties(e,o),t.once("aborted",()=>{e.destroy(),e.emit("aborted")}),t.once("close",()=>{t.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var Hoe=_((kLt,_oe)=>{"use strict";var{Transform:qnt,PassThrough:Ynt}=ve("stream"),qM=ve("zlib"),Wnt=Uoe();_oe.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof qM.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let o=!0,a=new qnt({transform(A,p,h){o=!1,h(null,A)},flush(A){A()}}),n=new Ynt({autoDestroy:!1,destroy(A,p){t.destroy(),p(A)}}),u=r?qM.createBrotliDecompress():qM.createUnzip();return u.once("error",A=>{if(o&&!t.readable){n.end();return}n.destroy(A)}),Wnt(t,n),t.pipe(a).pipe(u).pipe(n),n}});var WM=_((QLt,joe)=>{"use strict";var YM=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction=="function")for(let[o,a]of this.oldCache.entries())this.onEviction(o,a);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let r=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,r),r}}set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCache.delete(e)||r}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[r]=e;this.cache.has(r)||(yield e)}}get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||e++;return Math.min(this._size+e,this.maxSize)}};joe.exports=YM});var VM=_((FLt,Woe)=>{"use strict";var Knt=ve("events"),Vnt=ve("tls"),Jnt=ve("http2"),znt=WM(),ea=Symbol("currentStreamsCount"),Goe=Symbol("request"),Wl=Symbol("cachedOriginSet"),DE=Symbol("gracefullyClosing"),Xnt=["maxDeflateDynamicTableSize","maxSessionMemory","maxHeaderListPairs","maxOutstandingPings","maxReservedRemoteStreams","maxSendHeaderBlockLength","paddingStrategy","localAddress","path","rejectUnauthorized","minDHSize","ca","cert","clientCertEngine","ciphers","key","pfx","servername","minVersion","maxVersion","secureProtocol","crl","honorCipherOrder","ecdhCurve","dhparam","secureOptions","sessionIdContext"],Znt=(t,e,r)=>{let o=0,a=t.length;for(;o>>1;r(t[n],e)?o=n+1:a=n}return o},$nt=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,KM=(t,e)=>{for(let r of t)r[Wl].lengthe[Wl].includes(o))&&r[ea]+e[ea]<=e.remoteSettings.maxConcurrentStreams&&Yoe(r)},eit=(t,e)=>{for(let r of t)e[Wl].lengthr[Wl].includes(o))&&e[ea]+r[ea]<=r.remoteSettings.maxConcurrentStreams&&Yoe(e)},qoe=({agent:t,isFree:e})=>{let r={};for(let o in t.sessions){let n=t.sessions[o].filter(u=>{let A=u[tA.kCurrentStreamsCount]{t[DE]=!0,t[ea]===0&&t.close()},tA=class extends Knt{constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:o=10,maxCachedTlsSessions:a=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=o,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new znt({maxSize:a})}static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&&e.hostname!==r&&(e.hostname=r),e.origin}normalizeOptions(e){let r="";if(e)for(let o of Xnt)e[o]&&(r+=`:${e[o]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let o=this.queue[e][r];this._sessionsCount{Array.isArray(o)?(o=[...o],a()):o=[{resolve:a,reject:n}];let u=this.normalizeOptions(r),A=tA.normalizeOrigin(e,r&&r.servername);if(A===void 0){for(let{reject:E}of o)E(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(u in this.sessions){let E=this.sessions[u],I=-1,v=-1,x;for(let C of E){let R=C.remoteSettings.maxConcurrentStreams;if(R=R||C[DE]||C.destroyed)continue;x||(I=R),L>v&&(x=C,v=L)}}if(x){if(o.length!==1){for(let{reject:C}of o){let R=new Error(`Expected the length of listeners to be 1, got ${o.length}. +Please report this to https://github.com/szmarczak/http2-wrapper/`);C(R)}return}o[0].resolve(x);return}}if(u in this.queue){if(A in this.queue[u]){this.queue[u][A].listeners.push(...o),this._tryToCreateNewSession(u,A);return}}else this.queue[u]={};let p=()=>{u in this.queue&&this.queue[u][A]===h&&(delete this.queue[u][A],Object.keys(this.queue[u]).length===0&&delete this.queue[u])},h=()=>{let E=`${A}:${u}`,I=!1;try{let v=Jnt.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(E),...r});v[ea]=0,v[DE]=!1;let x=()=>v[ea]{this.tlsSessionCache.set(E,L)}),v.once("error",L=>{for(let{reject:U}of o)U(L);this.tlsSessionCache.delete(E)}),v.setTimeout(this.timeout,()=>{v.destroy()}),v.once("close",()=>{if(I){C&&this._freeSessionsCount--,this._sessionsCount--;let L=this.sessions[u];L.splice(L.indexOf(v),1),L.length===0&&delete this.sessions[u]}else{let L=new Error("Session closed without receiving a SETTINGS frame");L.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:U}of o)U(L);p()}this._tryToCreateNewSession(u,A)});let R=()=>{if(!(!(u in this.queue)||!x())){for(let L of v[Wl])if(L in this.queue[u]){let{listeners:U}=this.queue[u][L];for(;U.length!==0&&x();)U.shift().resolve(v);let J=this.queue[u];if(J[L].listeners.length===0&&(delete J[L],Object.keys(J).length===0)){delete this.queue[u];break}if(!x())break}}};v.on("origin",()=>{v[Wl]=v.originSet,x()&&(R(),KM(this.sessions[u],v))}),v.once("remoteSettings",()=>{if(v.ref(),v.unref(),this._sessionsCount++,h.destroyed){let L=new Error("Agent has been destroyed");for(let U of o)U.reject(L);v.destroy();return}v[Wl]=v.originSet;{let L=this.sessions;if(u in L){let U=L[u];U.splice(Znt(U,v,$nt),0,v)}else L[u]=[v]}this._freeSessionsCount+=1,I=!0,this.emit("session",v),R(),p(),v[ea]===0&&this._freeSessionsCount>this.maxFreeSessions&&v.close(),o.length!==0&&(this.getSession(A,r,o),o.length=0),v.on("remoteSettings",()=>{R(),KM(this.sessions[u],v)})}),v[Goe]=v.request,v.request=(L,U)=>{if(v[DE])throw new Error("The session is gracefully closing. No new streams are allowed.");let J=v[Goe](L,U);return v.ref(),++v[ea],v[ea]===v.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,J.once("close",()=>{if(C=x(),--v[ea],!v.destroyed&&!v.closed&&(eit(this.sessions[u],v),x()&&!v.closed)){C||(this._freeSessionsCount++,C=!0);let te=v[ea]===0;te&&v.unref(),te&&(this._freeSessionsCount>this.maxFreeSessions||v[DE])?v.close():(KM(this.sessions[u],v),R())}}),J}}catch(v){for(let x of o)x.reject(v);p()}};h.listeners=o,h.completed=!1,h.destroyed=!1,this.queue[u][A]=h,this._tryToCreateNewSession(u,A)})}request(e,r,o,a){return new Promise((n,u)=>{this.getSession(e,r,[{reject:u,resolve:A=>{try{n(A.request(o,a))}catch(p){u(p)}}}])})}createConnection(e,r){return tA.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let o=e.port||443,a=e.hostname||e.host;return typeof r.servername>"u"&&(r.servername=a),Vnt.connect(o,a,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[ea]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let o of r)o.destroy(e);for(let r of Object.values(this.queue))for(let o of Object.values(r))o.destroyed=!0;this.queue={}}get freeSessions(){return qoe({agent:this,isFree:!0})}get busySessions(){return qoe({agent:this,isFree:!1})}};tA.kCurrentStreamsCount=ea;tA.kGracefullyClosing=DE;Woe.exports={Agent:tA,globalAgent:new tA}});var zM=_((RLt,Koe)=>{"use strict";var{Readable:tit}=ve("stream"),JM=class extends tit{constructor(e,r){super({highWaterMark:r,autoDestroy:!1}),this.statusCode=null,this.statusMessage="",this.httpVersion="2.0",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,r){return this.req.setTimeout(e,r),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),this.resume())}_read(){this.req&&this.req._request.resume()}};Koe.exports=JM});var XM=_((TLt,Voe)=>{"use strict";Voe.exports=t=>{let e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return typeof t.port=="string"&&t.port.length!==0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var zoe=_((NLt,Joe)=>{"use strict";Joe.exports=(t,e,r)=>{for(let o of r)t.on(o,(...a)=>e.emit(o,...a))}});var Zoe=_((LLt,Xoe)=>{"use strict";Xoe.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var eae=_((MLt,$oe)=>{"use strict";var SE=(t,e,r)=>{$oe.exports[e]=class extends t{constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.name} [${e}]`,this.code=e}}};SE(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],o=Array.isArray(r);return o&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${o?"one of":"of"} type ${r}. Received ${typeof t[2]}`});SE(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);SE(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);SE(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);SE(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);SE(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var r4=_((ULt,aae)=>{"use strict";var rit=ve("http2"),{Writable:nit}=ve("stream"),{Agent:tae,globalAgent:iit}=VM(),sit=zM(),oit=XM(),ait=zoe(),lit=Zoe(),{ERR_INVALID_ARG_TYPE:ZM,ERR_INVALID_PROTOCOL:cit,ERR_HTTP_HEADERS_SENT:rae,ERR_INVALID_HTTP_TOKEN:uit,ERR_HTTP_INVALID_HEADER_VALUE:Ait,ERR_INVALID_CHAR:fit}=eae(),{HTTP2_HEADER_STATUS:nae,HTTP2_HEADER_METHOD:iae,HTTP2_HEADER_PATH:sae,HTTP2_METHOD_CONNECT:pit}=rit.constants,Qo=Symbol("headers"),$M=Symbol("origin"),e4=Symbol("session"),oae=Symbol("options"),rb=Symbol("flushedHeaders"),h1=Symbol("jobs"),hit=/^[\^`\-\w!#$%&*+.|~]+$/,git=/[^\t\u0020-\u007E\u0080-\u00FF]/,t4=class extends nit{constructor(e,r,o){super({autoDestroy:!1});let a=typeof e=="string"||e instanceof URL;if(a&&(e=oit(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(o=r,r=a?e:{...e}):r={...e,...r},r.h2session)this[e4]=r.h2session;else if(r.agent===!1)this.agent=new tae({maxFreeSessions:0});else if(typeof r.agent>"u"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new tae({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=iit;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new ZM("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new cit(r.protocol,"https:");let n=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,u=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:A}=r;if(r.timeout=void 0,this[Qo]=Object.create(null),this[h1]=[],this.socket=null,this.connection=null,this.method=r.method||"GET",this.path=r.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,r.headers)for(let[p,h]of Object.entries(r.headers))this.setHeader(p,h);r.auth&&!("authorization"in this[Qo])&&(this[Qo].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[oae]=r,n===443?(this[$M]=`https://${u}`,":authority"in this[Qo]||(this[Qo][":authority"]=u)):(this[$M]=`https://${u}:${n}`,":authority"in this[Qo]||(this[Qo][":authority"]=`${u}:${n}`)),A&&this.setTimeout(A),o&&this.once("response",o),this[rb]=!1}get method(){return this[Qo][iae]}set method(e){e&&(this[Qo][iae]=e.toUpperCase())}get path(){return this[Qo][sae]}set path(e){e&&(this[Qo][sae]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,o){if(this._mustNotHaveABody){o(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let a=()=>this._request.write(e,r,o);this._request?a():this[h1].push(a)}_final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?r():this[h1].push(r)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit("abort")),this.aborted=!0,this.destroy())}_destroy(e,r){this.res&&this.res._dump(),this._request&&this._request.destroy(),r(e)}async flushHeaders(){if(this[rb]||this.destroyed)return;this[rb]=!0;let e=this.method===pit,r=o=>{if(this._request=o,this.destroyed){o.destroy();return}e||ait(o,this,["timeout","continue","close","error"]);let a=u=>(...A)=>{!this.writable&&!this.destroyed?u(...A):this.once("finish",()=>{u(...A)})};o.once("response",a((u,A,p)=>{let h=new sit(this.socket,o.readableHighWaterMark);this.res=h,h.req=this,h.statusCode=u[nae],h.headers=u,h.rawHeaders=p,h.once("end",()=>{this.aborted?(h.aborted=!0,h.emit("aborted")):(h.complete=!0,h.socket=null,h.connection=null)}),e?(h.upgrade=!0,this.emit("connect",h,o,Buffer.alloc(0))?this.emit("close"):o.destroy()):(o.on("data",E=>{!h._dumped&&!h.push(E)&&o.pause()}),o.once("end",()=>{h.push(null)}),this.emit("response",h)||h._dump())})),o.once("headers",a(u=>this.emit("information",{statusCode:u[nae]}))),o.once("trailers",a((u,A,p)=>{let{res:h}=this;h.trailers=u,h.rawTrailers=p}));let{socket:n}=o.session;this.socket=n,this.connection=n;for(let u of this[h1])u();this.emit("socket",this.socket)};if(this[e4])try{r(this[e4].request(this[Qo]))}catch(o){this.emit("error",o)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[$M],this[oae],this[Qo]))}catch(o){this.emit("error",o)}}}getHeader(e){if(typeof e!="string")throw new ZM("name","string",e);return this[Qo][e.toLowerCase()]}get headersSent(){return this[rb]}removeHeader(e){if(typeof e!="string")throw new ZM("name","string",e);if(this.headersSent)throw new rae("remove");delete this[Qo][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new rae("set");if(typeof e!="string"||!hit.test(e)&&!lit(e))throw new uit("Header name",e);if(typeof r>"u")throw new Ait(r,e);if(git.test(r))throw new fit("header content",e);this[Qo][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let o=()=>this._request.setTimeout(e,r);return this._request?o():this[h1].push(o),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};aae.exports=t4});var cae=_((_Lt,lae)=>{"use strict";var dit=ve("tls");lae.exports=(t={})=>new Promise((e,r)=>{let o=dit.connect(t,()=>{t.resolveSocket?(o.off("error",r),e({alpnProtocol:o.alpnProtocol,socket:o})):(o.destroy(),e({alpnProtocol:o.alpnProtocol}))});o.on("error",r)})});var Aae=_((HLt,uae)=>{"use strict";var mit=ve("net");uae.exports=t=>{let e=t.host,r=t.headers&&t.headers.host;return r&&(r.startsWith("[")?r.indexOf("]")===-1?e=r:e=r.slice(1,-1):e=r.split(":",1)[0]),mit.isIP(e)?"":e}});var hae=_((jLt,i4)=>{"use strict";var fae=ve("http"),n4=ve("https"),yit=cae(),Eit=WM(),Cit=r4(),wit=Aae(),Iit=XM(),nb=new Eit({maxSize:100}),g1=new Map,pae=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let o=()=>{t.emit("free",e,r)};e.on("free",o);let a=()=>{t.removeSocket(e,r)};e.on("close",a);let n=()=>{t.removeSocket(e,r),e.off("close",a),e.off("free",o),e.off("agentRemove",n)};e.on("agentRemove",n),t.emit("free",e,r)},Bit=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!nb.has(e)){if(g1.has(e))return(await g1.get(e)).alpnProtocol;let{path:r,agent:o}=t;t.path=t.socketPath;let a=yit(t);g1.set(e,a);try{let{socket:n,alpnProtocol:u}=await a;if(nb.set(e,u),t.path=r,u==="h2")n.destroy();else{let{globalAgent:A}=n4,p=n4.Agent.prototype.createConnection;o?o.createConnection===p?pae(o,n,t):n.destroy():A.createConnection===p?pae(A,n,t):n.destroy()}return g1.delete(e),u}catch(n){throw g1.delete(e),n}}return nb.get(e)};i4.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=Iit(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e={ALPNProtocols:["h2","http/1.1"],...t,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");e.protocol=e.protocol||"https:";let o=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||wit(e),e.port=e.port||(o?443:80),e._defaultAgent=o?n4.globalAgent:fae.globalAgent;let a=e.agent;if(a){if(a.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=a[o?"https":"http"]}return o&&await Bit(e)==="h2"?(a&&(e.agent=a.http2),new Cit(e,r)):fae.request(e,r)};i4.exports.protocolCache=nb});var dae=_((GLt,gae)=>{"use strict";var vit=ve("http2"),Dit=VM(),s4=r4(),Sit=zM(),Pit=hae(),bit=(t,e,r)=>new s4(t,e,r),xit=(t,e,r)=>{let o=new s4(t,e,r);return o.end(),o};gae.exports={...vit,ClientRequest:s4,IncomingMessage:Sit,...Dit,request:bit,get:xit,auto:Pit}});var a4=_(o4=>{"use strict";Object.defineProperty(o4,"__esModule",{value:!0});var mae=Tf();o4.default=t=>mae.default.nodeStream(t)&&mae.default.function_(t.getBoundary)});var wae=_(l4=>{"use strict";Object.defineProperty(l4,"__esModule",{value:!0});var Eae=ve("fs"),Cae=ve("util"),yae=Tf(),kit=a4(),Qit=Cae.promisify(Eae.stat);l4.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(yae.default.string(t))return Buffer.byteLength(t);if(yae.default.buffer(t))return t.length;if(kit.default(t))return Cae.promisify(t.getLength.bind(t))();if(t instanceof Eae.ReadStream){let{size:r}=await Qit(t.path);return r===0?void 0:r}}});var u4=_(c4=>{"use strict";Object.defineProperty(c4,"__esModule",{value:!0});function Fit(t,e,r){let o={};for(let a of r)o[a]=(...n)=>{e.emit(a,...n)},t.on(a,o[a]);return()=>{for(let a of r)t.off(a,o[a])}}c4.default=Fit});var Iae=_(A4=>{"use strict";Object.defineProperty(A4,"__esModule",{value:!0});A4.default=()=>{let t=[];return{once(e,r,o){e.once(r,o),t.push({origin:e,event:r,fn:o})},unhandleAll(){for(let e of t){let{origin:r,event:o,fn:a}=e;r.removeListener(o,a)}t.length=0}}}});var vae=_(d1=>{"use strict";Object.defineProperty(d1,"__esModule",{value:!0});d1.TimeoutError=void 0;var Rit=ve("net"),Tit=Iae(),Bae=Symbol("reentry"),Nit=()=>{},ib=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};d1.TimeoutError=ib;d1.default=(t,e,r)=>{if(Bae in t)return Nit;t[Bae]=!0;let o=[],{once:a,unhandleAll:n}=Tit.default(),u=(I,v,x)=>{var C;let R=setTimeout(v,I,I,x);(C=R.unref)===null||C===void 0||C.call(R);let L=()=>{clearTimeout(R)};return o.push(L),L},{host:A,hostname:p}=r,h=(I,v)=>{t.destroy(new ib(I,v))},E=()=>{for(let I of o)I();n()};if(t.once("error",I=>{if(E(),t.listenerCount("error")===0)throw I}),t.once("close",E),a(t,"response",I=>{a(I,"end",E)}),typeof e.request<"u"&&u(e.request,h,"request"),typeof e.socket<"u"){let I=()=>{h(e.socket,"socket")};t.setTimeout(e.socket,I),o.push(()=>{t.removeListener("timeout",I)})}return a(t,"socket",I=>{var v;let{socketPath:x}=t;if(I.connecting){let C=Boolean(x??Rit.isIP((v=p??A)!==null&&v!==void 0?v:"")!==0);if(typeof e.lookup<"u"&&!C&&typeof I.address().address>"u"){let R=u(e.lookup,h,"lookup");a(I,"lookup",R)}if(typeof e.connect<"u"){let R=()=>u(e.connect,h,"connect");C?a(I,"connect",R()):a(I,"lookup",L=>{L===null&&a(I,"connect",R())})}typeof e.secureConnect<"u"&&r.protocol==="https:"&&a(I,"connect",()=>{let R=u(e.secureConnect,h,"secureConnect");a(I,"secureConnect",R)})}if(typeof e.send<"u"){let C=()=>u(e.send,h,"send");I.connecting?a(I,"connect",()=>{a(t,"upload-complete",C())}):a(t,"upload-complete",C())}}),typeof e.response<"u"&&a(t,"upload-complete",()=>{let I=u(e.response,h,"response");a(t,"response",I)}),E}});var Sae=_(f4=>{"use strict";Object.defineProperty(f4,"__esModule",{value:!0});var Dae=Tf();f4.default=t=>{t=t;let e={protocol:t.protocol,hostname:Dae.default.string(t.hostname)&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return Dae.default.string(t.port)&&t.port.length>0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var Pae=_(p4=>{"use strict";Object.defineProperty(p4,"__esModule",{value:!0});var Lit=ve("url"),Oit=["protocol","host","hostname","port","pathname","search"];p4.default=(t,e)=>{var r,o;if(e.path){if(e.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(e.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(e.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(e.search&&e.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!t){if(!e.protocol)throw new TypeError("No URL protocol specified");t=`${e.protocol}//${(o=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&o!==void 0?o:""}`}let a=new Lit.URL(t);if(e.path){let n=e.path.indexOf("?");n===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,n),e.search=e.path.slice(n+1)),delete e.path}for(let n of Oit)e[n]&&(a[n]=e[n].toString());return a}});var bae=_(g4=>{"use strict";Object.defineProperty(g4,"__esModule",{value:!0});var h4=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,r){typeof e=="object"?this.weakMap.set(e,r):this.map.set(e,r)}get(e){return typeof e=="object"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e=="object"?this.weakMap.has(e):this.map.has(e)}};g4.default=h4});var m4=_(d4=>{"use strict";Object.defineProperty(d4,"__esModule",{value:!0});var Mit=async t=>{let e=[],r=0;for await(let o of t)e.push(o),r+=Buffer.byteLength(o);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};d4.default=Mit});var kae=_(Pd=>{"use strict";Object.defineProperty(Pd,"__esModule",{value:!0});Pd.dnsLookupIpVersionToFamily=Pd.isDnsLookupIpVersion=void 0;var xae={auto:0,ipv4:4,ipv6:6};Pd.isDnsLookupIpVersion=t=>t in xae;Pd.dnsLookupIpVersionToFamily=t=>{if(Pd.isDnsLookupIpVersion(t))return xae[t];throw new Error("Invalid DNS lookup IP version")}});var y4=_(sb=>{"use strict";Object.defineProperty(sb,"__esModule",{value:!0});sb.isResponseOk=void 0;sb.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var Fae=_(E4=>{"use strict";Object.defineProperty(E4,"__esModule",{value:!0});var Qae=new Set;E4.default=t=>{Qae.has(t)||(Qae.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var Rae=_(C4=>{"use strict";Object.defineProperty(C4,"__esModule",{value:!0});var Ai=Tf(),Uit=(t,e)=>{if(Ai.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");Ai.assert.any([Ai.default.string,Ai.default.undefined],t.encoding),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.resolveBodyOnly),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.methodRewriting),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.isStream),Ai.assert.any([Ai.default.string,Ai.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry={...e.retry}:t.retry={calculateDelay:o=>o.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},Ai.default.object(r)?(t.retry={...t.retry,...r},t.retry.methods=[...new Set(t.retry.methods.map(o=>o.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):Ai.default.number(r)&&(t.retry.limit=r),Ai.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(Ai.default.number))),Ai.default.object(t.pagination)){e&&(t.pagination={...e.pagination,...t.pagination});let{pagination:o}=t;if(!Ai.default.function_(o.transform))throw new Error("`options.pagination.transform` must be implemented");if(!Ai.default.function_(o.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!Ai.default.function_(o.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!Ai.default.function_(o.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return t.responseType==="json"&&t.headers.accept===void 0&&(t.headers.accept="application/json"),t};C4.default=Uit});var Tae=_(m1=>{"use strict";Object.defineProperty(m1,"__esModule",{value:!0});m1.retryAfterStatusCodes=void 0;m1.retryAfterStatusCodes=new Set([413,429,503]);var _it=({attemptCount:t,retryOptions:e,error:r,retryAfter:o})=>{if(t>e.limit)return 0;let a=e.methods.includes(r.options.method),n=e.errorCodes.includes(r.code),u=r.response&&e.statusCodes.includes(r.response.statusCode);if(!a||!n&&!u)return 0;if(r.response){if(o)return e.maxRetryAfter===void 0||o>e.maxRetryAfter?0:o;if(r.response.statusCode===413)return 0}let A=Math.random()*100;return 2**(t-1)*1e3+A};m1.default=_it});var C1=_(Bn=>{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});Bn.UnsupportedProtocolError=Bn.ReadError=Bn.TimeoutError=Bn.UploadError=Bn.CacheError=Bn.HTTPError=Bn.MaxRedirectsError=Bn.RequestError=Bn.setNonEnumerableProperties=Bn.knownHookEvents=Bn.withoutBody=Bn.kIsNormalizedAlready=void 0;var Nae=ve("util"),Lae=ve("stream"),Hit=ve("fs"),ah=ve("url"),Oae=ve("http"),w4=ve("http"),jit=ve("https"),Git=Zse(),qit=soe(),Mae=Ooe(),Yit=Hoe(),Wit=dae(),Kit=eb(),st=Tf(),Vit=wae(),Uae=a4(),Jit=u4(),_ae=vae(),zit=Sae(),Hae=Pae(),Xit=bae(),Zit=m4(),jae=kae(),$it=y4(),lh=Fae(),est=Rae(),tst=Tae(),I4,Zs=Symbol("request"),lb=Symbol("response"),PE=Symbol("responseSize"),bE=Symbol("downloadedSize"),xE=Symbol("bodySize"),kE=Symbol("uploadedSize"),ob=Symbol("serverResponsesPiped"),Gae=Symbol("unproxyEvents"),qae=Symbol("isFromCache"),B4=Symbol("cancelTimeouts"),Yae=Symbol("startedReading"),QE=Symbol("stopReading"),ab=Symbol("triggerRead"),ch=Symbol("body"),y1=Symbol("jobs"),Wae=Symbol("originalResponse"),Kae=Symbol("retryTimeout");Bn.kIsNormalizedAlready=Symbol("isNormalizedAlready");var rst=st.default.string(process.versions.brotli);Bn.withoutBody=new Set(["GET","HEAD"]);Bn.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function nst(t){for(let e in t){let r=t[e];if(!st.default.string(r)&&!st.default.number(r)&&!st.default.boolean(r)&&!st.default.null_(r)&&!st.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function ist(t){return st.default.object(t)&&!("statusCode"in t)}var v4=new Xit.default,sst=async t=>new Promise((e,r)=>{let o=a=>{r(a)};t.pending||e(),t.once("error",o),t.once("ready",()=>{t.off("error",o),e()})}),ost=new Set([300,301,302,303,304,307,308]),ast=["context","body","json","form"];Bn.setNonEnumerableProperties=(t,e)=>{let r={};for(let o of t)if(!!o)for(let a of ast)a in o&&(r[a]={writable:!0,configurable:!0,enumerable:!1,value:o[a]});Object.defineProperties(e,r)};var Vi=class extends Error{constructor(e,r,o){var a;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,o instanceof db?(Object.defineProperty(this,"request",{enumerable:!1,value:o}),Object.defineProperty(this,"response",{enumerable:!1,value:o[lb]}),Object.defineProperty(this,"options",{enumerable:!1,value:o.options})):Object.defineProperty(this,"options",{enumerable:!1,value:o}),this.timings=(a=this.request)===null||a===void 0?void 0:a.timings,st.default.string(r.stack)&&st.default.string(this.stack)){let n=this.stack.indexOf(this.message)+this.message.length,u=this.stack.slice(n).split(` +`).reverse(),A=r.stack.slice(r.stack.indexOf(r.message)+r.message.length).split(` +`).reverse();for(;A.length!==0&&A[0]===u[0];)u.shift();this.stack=`${this.stack.slice(0,n)}${u.reverse().join(` +`)}${A.reverse().join(` +`)}`}}};Bn.RequestError=Vi;var ub=class extends Vi{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}};Bn.MaxRedirectsError=ub;var Ab=class extends Vi{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}};Bn.HTTPError=Ab;var fb=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="CacheError"}};Bn.CacheError=fb;var pb=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="UploadError"}};Bn.UploadError=pb;var hb=class extends Vi{constructor(e,r,o){super(e.message,e,o),this.name="TimeoutError",this.event=e.event,this.timings=r}};Bn.TimeoutError=hb;var E1=class extends Vi{constructor(e,r){super(e.message,e,r),this.name="ReadError"}};Bn.ReadError=E1;var gb=class extends Vi{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}};Bn.UnsupportedProtocolError=gb;var lst=["socket","connect","continue","information","upgrade","timeout"],db=class extends Lae.Duplex{constructor(e,r={},o){super({autoDestroy:!1,highWaterMark:0}),this[bE]=0,this[kE]=0,this.requestInitialized=!1,this[ob]=new Set,this.redirects=[],this[QE]=!1,this[ab]=!1,this[y1]=[],this.retryCount=0,this._progressCallbacks=[];let a=()=>this._unlockWrite(),n=()=>this._lockWrite();this.on("pipe",h=>{h.prependListener("data",a),h.on("data",n),h.prependListener("end",a),h.on("end",n)}),this.on("unpipe",h=>{h.off("data",a),h.off("data",n),h.off("end",a),h.off("end",n)}),this.on("pipe",h=>{h instanceof w4.IncomingMessage&&(this.options.headers={...h.headers,...this.options.headers})});let{json:u,body:A,form:p}=r;if((u||A||p)&&this._lockWrite(),Bn.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,o)}catch(h){st.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(h);return}(async()=>{var h;try{this.options.body instanceof Hit.ReadStream&&await sst(this.options.body);let{url:E}=this.options;if(!E)throw new TypeError("Missing `url` property");if(this.requestUrl=E.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(h=this[Zs])===null||h===void 0||h.destroy();return}for(let I of this[y1])I();this[y1].length=0,this.requestInitialized=!0}catch(E){if(E instanceof Vi){this._beforeError(E);return}this.destroyed||this.destroy(E)}})()}static normalizeArguments(e,r,o){var a,n,u,A,p;let h=r;if(st.default.object(e)&&!st.default.urlInstance(e))r={...o,...e,...r};else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...o,...r},e!==void 0&&(r.url=e),st.default.urlInstance(r.url)&&(r.url=new ah.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),st.assert.any([st.default.string,st.default.undefined],r.method),st.assert.any([st.default.object,st.default.undefined],r.headers),st.assert.any([st.default.string,st.default.urlInstance,st.default.undefined],r.prefixUrl),st.assert.any([st.default.object,st.default.undefined],r.cookieJar),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.searchParams),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.cache),st.assert.any([st.default.object,st.default.number,st.default.undefined],r.timeout),st.assert.any([st.default.object,st.default.undefined],r.context),st.assert.any([st.default.object,st.default.undefined],r.hooks),st.assert.any([st.default.boolean,st.default.undefined],r.decompress),st.assert.any([st.default.boolean,st.default.undefined],r.ignoreInvalidCookies),st.assert.any([st.default.boolean,st.default.undefined],r.followRedirect),st.assert.any([st.default.number,st.default.undefined],r.maxRedirects),st.assert.any([st.default.boolean,st.default.undefined],r.throwHttpErrors),st.assert.any([st.default.boolean,st.default.undefined],r.http2),st.assert.any([st.default.boolean,st.default.undefined],r.allowGetBody),st.assert.any([st.default.string,st.default.undefined],r.localAddress),st.assert.any([jae.isDnsLookupIpVersion,st.default.undefined],r.dnsLookupIpVersion),st.assert.any([st.default.object,st.default.undefined],r.https),st.assert.any([st.default.boolean,st.default.undefined],r.rejectUnauthorized),r.https&&(st.assert.any([st.default.boolean,st.default.undefined],r.https.rejectUnauthorized),st.assert.any([st.default.function_,st.default.undefined],r.https.checkServerIdentity),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificateAuthority),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.key),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificate),st.assert.any([st.default.string,st.default.undefined],r.https.passphrase),st.assert.any([st.default.string,st.default.buffer,st.default.array,st.default.undefined],r.https.pfx)),st.assert.any([st.default.object,st.default.undefined],r.cacheOptions),st.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===o?.headers?r.headers={...r.headers}:r.headers=Kit({...o?.headers,...r.headers}),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==o?.searchParams){let x;if(st.default.string(r.searchParams)||r.searchParams instanceof ah.URLSearchParams)x=new ah.URLSearchParams(r.searchParams);else{nst(r.searchParams),x=new ah.URLSearchParams;for(let C in r.searchParams){let R=r.searchParams[C];R===null?x.append(C,""):R!==void 0&&x.append(C,R)}}(a=o?.searchParams)===null||a===void 0||a.forEach((C,R)=>{x.has(R)||x.append(R,C)}),r.searchParams=x}if(r.username=(n=r.username)!==null&&n!==void 0?n:"",r.password=(u=r.password)!==null&&u!==void 0?u:"",st.default.undefined(r.prefixUrl)?r.prefixUrl=(A=o?.prefixUrl)!==null&&A!==void 0?A:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),st.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=Hae.default(r.prefixUrl+r.url,r)}else(st.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=Hae.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:x}=r;Object.defineProperty(r,"prefixUrl",{set:R=>{let L=r.url;if(!L.href.startsWith(R))throw new Error(`Cannot change \`prefixUrl\` from ${x} to ${R}: ${L.href}`);r.url=new ah.URL(R+L.href.slice(x.length)),x=R},get:()=>x});let{protocol:C}=r.url;if(C==="unix:"&&(C="http:",r.url=new ah.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),C!=="http:"&&C!=="https:")throw new gb(r);r.username===""?r.username=r.url.username:r.url.username=r.username,r.password===""?r.password=r.url.password:r.url.password=r.password}let{cookieJar:E}=r;if(E){let{setCookie:x,getCookieString:C}=E;st.assert.function_(x),st.assert.function_(C),x.length===4&&C.length===0&&(x=Nae.promisify(x.bind(r.cookieJar)),C=Nae.promisify(C.bind(r.cookieJar)),r.cookieJar={setCookie:x,getCookieString:C})}let{cache:I}=r;if(I&&(v4.has(I)||v4.set(I,new Mae((x,C)=>{let R=x[Zs](x,C);return st.default.promise(R)&&(R.once=(L,U)=>{if(L==="error")R.catch(U);else if(L==="abort")(async()=>{try{(await R).once("abort",U)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${L}`);return R}),R},I))),r.cacheOptions={...r.cacheOptions},r.dnsCache===!0)I4||(I4=new qit.default),r.dnsCache=I4;else if(!st.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${st.default(r.dnsCache)}`);st.default.number(r.timeout)?r.timeout={request:r.timeout}:o&&r.timeout!==o.timeout?r.timeout={...o.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});let v=r.hooks===o?.hooks;r.hooks={...r.hooks};for(let x of Bn.knownHookEvents)if(x in r.hooks)if(st.default.array(r.hooks[x]))r.hooks[x]=[...r.hooks[x]];else throw new TypeError(`Parameter \`${x}\` must be an Array, got ${st.default(r.hooks[x])}`);else r.hooks[x]=[];if(o&&!v)for(let x of Bn.knownHookEvents)o.hooks[x].length>0&&(r.hooks[x]=[...o.hooks[x],...r.hooks[x]]);if("family"in r&&lh.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),o?.https&&(r.https={...o.https,...r.https}),"rejectUnauthorized"in r&&lh.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&lh.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&lh.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&lh.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&lh.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&lh.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&lh.default('"options.pfx" was never documented, please use "options.https.pfx"'),"followRedirects"in r)throw new TypeError("The `followRedirects` option does not exist. Use `followRedirect` instead.");if(r.agent){for(let x in r.agent)if(x!=="http"&&x!=="https"&&x!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${x}\``)}return r.maxRedirects=(p=r.maxRedirects)!==null&&p!==void 0?p:0,Bn.setNonEnumerableProperties([o,h],r),est.default(r,o)}_lockWrite(){let e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:r}=e,o=!st.default.undefined(e.form),a=!st.default.undefined(e.json),n=!st.default.undefined(e.body),u=o||a||n,A=Bn.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=A,u){if(A)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([n,o,a].filter(p=>p).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(n&&!(e.body instanceof Lae.Readable)&&!st.default.string(e.body)&&!st.default.buffer(e.body)&&!Uae.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(o&&!st.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let p=!st.default.string(r["content-type"]);n?(Uae.default(e.body)&&p&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[ch]=e.body):o?(p&&(r["content-type"]="application/x-www-form-urlencoded"),this[ch]=new ah.URLSearchParams(e.form).toString()):(p&&(r["content-type"]="application/json"),this[ch]=e.stringifyJson(e.json));let h=await Vit.default(this[ch],e.headers);st.default.undefined(r["content-length"])&&st.default.undefined(r["transfer-encoding"])&&!A&&!st.default.undefined(h)&&(r["content-length"]=String(h))}}else A?this._lockWrite():this._unlockWrite();this[xE]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:o}=r;this[Wae]=e,r.decompress&&(e=Yit(e));let a=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:Oae.STATUS_CODES[a],n.url=r.url.toString(),n.requestUrl=this.requestUrl,n.redirectUrls=this.redirects,n.request=this,n.isFromCache=e.fromCache||!1,n.ip=this.ip,n.retryCount=this.retryCount,this[qae]=n.isFromCache,this[PE]=Number(e.headers["content-length"])||void 0,this[lb]=e,e.once("end",()=>{this[PE]=this[bE],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",A=>{e.destroy(),this._beforeError(new E1(A,this))}),e.once("aborted",()=>{this._beforeError(new E1({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let u=e.headers["set-cookie"];if(st.default.object(r.cookieJar)&&u){let A=u.map(async p=>r.cookieJar.setCookie(p,o.toString()));r.ignoreInvalidCookies&&(A=A.map(async p=>p.catch(()=>{})));try{await Promise.all(A)}catch(p){this._beforeError(p);return}}if(r.followRedirect&&e.headers.location&&ost.has(a)){if(e.resume(),this[Zs]&&(this[B4](),delete this[Zs],this[Gae]()),(a===303&&r.method!=="GET"&&r.method!=="HEAD"||!r.methodRewriting)&&(r.method="GET","body"in r&&delete r.body,"json"in r&&delete r.json,"form"in r&&delete r.form,this[ch]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new ub(this));return}try{let p=Buffer.from(e.headers.location,"binary").toString(),h=new ah.URL(p,o),E=h.toString();decodeURI(E),h.hostname!==o.hostname||h.port!==o.port?("host"in r.headers&&delete r.headers.host,"cookie"in r.headers&&delete r.headers.cookie,"authorization"in r.headers&&delete r.headers.authorization,(r.username||r.password)&&(r.username="",r.password="")):(h.username=r.username,h.password=r.password),this.redirects.push(E),r.url=h;for(let I of r.hooks.beforeRedirect)await I(r,n);this.emit("redirect",n,r),await this._makeRequest()}catch(p){this._beforeError(p);return}return}if(r.isStream&&r.throwHttpErrors&&!$it.isResponseOk(n)){this._beforeError(new Ab(n));return}e.on("readable",()=>{this[ab]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let A of this[ob])if(!A.headersSent){for(let p in e.headers){let h=r.decompress?p!=="content-encoding":!0,E=e.headers[p];h&&A.setHeader(p,E)}A.statusCode=a}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:o,url:a}=r;Git.default(e),this[B4]=_ae.default(e,o,a);let n=r.cache?"cacheableResponse":"response";e.once(n,p=>{this._onResponse(p)}),e.once("error",p=>{var h;e.destroy(),(h=e.res)===null||h===void 0||h.removeAllListeners("end"),p=p instanceof _ae.TimeoutError?new hb(p,this.timings,this):new Vi(p.message,p,this),this._beforeError(p)}),this[Gae]=Jit.default(e,this,lst),this[Zs]=e,this.emit("uploadProgress",this.uploadProgress);let u=this[ch],A=this.redirects.length===0?this:e;st.default.nodeStream(u)?(u.pipe(A),u.once("error",p=>{this._beforeError(new pb(p,this))})):(this._unlockWrite(),st.default.undefined(u)?(this._cannotHaveBody||this._noPipe)&&(A.end(),this._lockWrite()):(this._writeRequest(u,void 0,()=>{}),A.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((o,a)=>{Object.assign(r,zit.default(e)),delete r.url;let n,u=v4.get(r.cache)(r,async A=>{A._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",A),o(A)});r.url=e,u.once("error",a),u.once("request",async A=>{n=A,o(n)})})}async _makeRequest(){var e,r,o,a,n;let{options:u}=this,{headers:A}=u;for(let U in A)if(st.default.undefined(A[U]))delete A[U];else if(st.default.null_(A[U]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${U}\` header`);if(u.decompress&&st.default.undefined(A["accept-encoding"])&&(A["accept-encoding"]=rst?"gzip, deflate, br":"gzip, deflate"),u.cookieJar){let U=await u.cookieJar.getCookieString(u.url.toString());st.default.nonEmptyString(U)&&(u.headers.cookie=U)}for(let U of u.hooks.beforeRequest){let J=await U(u);if(!st.default.undefined(J)){u.request=()=>J;break}}u.body&&this[ch]!==u.body&&(this[ch]=u.body);let{agent:p,request:h,timeout:E,url:I}=u;if(u.dnsCache&&!("lookup"in u)&&(u.lookup=u.dnsCache.lookup),I.hostname==="unix"){let U=/(?.+?):(?.+)/.exec(`${I.pathname}${I.search}`);if(U?.groups){let{socketPath:J,path:te}=U.groups;Object.assign(u,{socketPath:J,path:te,host:""})}}let v=I.protocol==="https:",x;u.http2?x=Wit.auto:x=v?jit.request:Oae.request;let C=(e=u.request)!==null&&e!==void 0?e:x,R=u.cache?this._createCacheableRequest:C;p&&!u.http2&&(u.agent=p[v?"https":"http"]),u[Zs]=C,delete u.request,delete u.timeout;let L=u;if(L.shared=(r=u.cacheOptions)===null||r===void 0?void 0:r.shared,L.cacheHeuristic=(o=u.cacheOptions)===null||o===void 0?void 0:o.cacheHeuristic,L.immutableMinTimeToLive=(a=u.cacheOptions)===null||a===void 0?void 0:a.immutableMinTimeToLive,L.ignoreCargoCult=(n=u.cacheOptions)===null||n===void 0?void 0:n.ignoreCargoCult,u.dnsLookupIpVersion!==void 0)try{L.family=jae.dnsLookupIpVersionToFamily(u.dnsLookupIpVersion)}catch{throw new Error("Invalid `dnsLookupIpVersion` option value")}u.https&&("rejectUnauthorized"in u.https&&(L.rejectUnauthorized=u.https.rejectUnauthorized),u.https.checkServerIdentity&&(L.checkServerIdentity=u.https.checkServerIdentity),u.https.certificateAuthority&&(L.ca=u.https.certificateAuthority),u.https.certificate&&(L.cert=u.https.certificate),u.https.key&&(L.key=u.https.key),u.https.passphrase&&(L.passphrase=u.https.passphrase),u.https.pfx&&(L.pfx=u.https.pfx));try{let U=await R(I,L);st.default.undefined(U)&&(U=x(I,L)),u.request=h,u.timeout=E,u.agent=p,u.https&&("rejectUnauthorized"in u.https&&delete L.rejectUnauthorized,u.https.checkServerIdentity&&delete L.checkServerIdentity,u.https.certificateAuthority&&delete L.ca,u.https.certificate&&delete L.cert,u.https.key&&delete L.key,u.https.passphrase&&delete L.passphrase,u.https.pfx&&delete L.pfx),ist(U)?this._onRequest(U):this.writable?(this.once("finish",()=>{this._onResponse(U)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(U)}catch(U){throw U instanceof Mae.CacheError?new fb(U,this):new Vi(U.message,U,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new Vi(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[QE])return;let{options:r}=this,o=this.retryCount+1;this[QE]=!0,e instanceof Vi||(e=new Vi(e.message,e,this));let a=e,{response:n}=a;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await Zit.default(n),n.body=n.rawBody.toString()}catch{}}if(this.listenerCount("retry")!==0){let u;try{let A;n&&"retry-after"in n.headers&&(A=Number(n.headers["retry-after"]),Number.isNaN(A)?(A=Date.parse(n.headers["retry-after"])-Date.now(),A<=0&&(A=1)):A*=1e3),u=await r.retry.calculateDelay({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:tst.default({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:0})})}catch(A){this._error(new Vi(A.message,A,this));return}if(u){let A=async()=>{try{for(let p of this.options.hooks.beforeRetry)await p(this.options,a,o)}catch(p){this._error(new Vi(p.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",o,e))};this[Kae]=setTimeout(A,u);return}}this._error(a)})()}_read(){this[ab]=!0;let e=this[lb];if(e&&!this[QE]){e.readableLength&&(this[ab]=!1);let r;for(;(r=e.read())!==null;){this[bE]+=r.length,this[Yae]=!0;let o=this.downloadProgress;o.percent<1&&this.emit("downloadProgress",o),this.push(r)}}}_write(e,r,o){let a=()=>{this._writeRequest(e,r,o)};this.requestInitialized?a():this[y1].push(a)}_writeRequest(e,r,o){this[Zs].destroyed||(this._progressCallbacks.push(()=>{this[kE]+=Buffer.byteLength(e,r);let a=this.uploadProgress;a.percent<1&&this.emit("uploadProgress",a)}),this[Zs].write(e,r,a=>{!a&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),o(a)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Zs in this)){e();return}if(this[Zs].destroyed){e();return}this[Zs].end(o=>{o||(this[xE]=this[kE],this.emit("uploadProgress",this.uploadProgress),this[Zs].emit("upload-complete")),e(o)})};this.requestInitialized?r():this[y1].push(r)}_destroy(e,r){var o;this[QE]=!0,clearTimeout(this[Kae]),Zs in this&&(this[B4](),!((o=this[lb])===null||o===void 0)&&o.complete||this[Zs].destroy()),e!==null&&!st.default.undefined(e)&&!(e instanceof Vi)&&(e=new Vi(e.message,e,this)),r(e)}get _isAboutToError(){return this[QE]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,o;return((r=(e=this[Zs])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!(!((o=this[Wae])===null||o===void 0)&&o.complete)}get socket(){var e,r;return(r=(e=this[Zs])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[PE]?e=this[bE]/this[PE]:this[PE]===this[bE]?e=1:e=0,{percent:e,transferred:this[bE],total:this[PE]}}get uploadProgress(){let e;return this[xE]?e=this[kE]/this[xE]:this[xE]===this[kE]?e=1:e=0,{percent:e,transferred:this[kE],total:this[xE]}}get timings(){var e;return(e=this[Zs])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[qae]}pipe(e,r){if(this[Yae])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof w4.ServerResponse&&this[ob].add(e),super.pipe(e,r)}unpipe(e){return e instanceof w4.ServerResponse&&this[ob].delete(e),super.unpipe(e),this}};Bn.default=db});var w1=_(Gc=>{"use strict";var cst=Gc&&Gc.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),ust=Gc&&Gc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&cst(e,t,r)};Object.defineProperty(Gc,"__esModule",{value:!0});Gc.CancelError=Gc.ParseError=void 0;var Vae=C1(),D4=class extends Vae.RequestError{constructor(e,r){let{options:o}=r.request;super(`${e.message} in "${o.url.toString()}"`,e,r.request),this.name="ParseError"}};Gc.ParseError=D4;var S4=class extends Vae.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}};Gc.CancelError=S4;ust(C1(),Gc)});var zae=_(P4=>{"use strict";Object.defineProperty(P4,"__esModule",{value:!0});var Jae=w1(),Ast=(t,e,r,o)=>{let{rawBody:a}=t;try{if(e==="text")return a.toString(o);if(e==="json")return a.length===0?"":r(a.toString());if(e==="buffer")return a;throw new Jae.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(n){throw new Jae.ParseError(n,t)}};P4.default=Ast});var b4=_(uh=>{"use strict";var fst=uh&&uh.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),pst=uh&&uh.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&fst(e,t,r)};Object.defineProperty(uh,"__esModule",{value:!0});var hst=ve("events"),gst=Tf(),dst=zse(),mb=w1(),Xae=zae(),Zae=C1(),mst=u4(),yst=m4(),$ae=y4(),Est=["request","response","redirect","uploadProgress","downloadProgress"];function ele(t){let e,r,o=new hst.EventEmitter,a=new dst((u,A,p)=>{let h=E=>{let I=new Zae.default(void 0,t);I.retryCount=E,I._noPipe=!0,p(()=>I.destroy()),p.shouldReject=!1,p(()=>A(new mb.CancelError(I))),e=I,I.once("response",async C=>{var R;if(C.retryCount=E,C.request.aborted)return;let L;try{L=await yst.default(I),C.rawBody=L}catch{return}if(I._isAboutToError)return;let U=((R=C.headers["content-encoding"])!==null&&R!==void 0?R:"").toLowerCase(),J=["gzip","deflate","br"].includes(U),{options:te}=I;if(J&&!te.decompress)C.body=L;else try{C.body=Xae.default(C,te.responseType,te.parseJson,te.encoding)}catch(ae){if(C.body=L.toString(),$ae.isResponseOk(C)){I._beforeError(ae);return}}try{for(let[ae,fe]of te.hooks.afterResponse.entries())C=await fe(C,async ce=>{let me=Zae.default.normalizeArguments(void 0,{...ce,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},te);me.hooks.afterResponse=me.hooks.afterResponse.slice(0,ae);for(let Be of me.hooks.beforeRetry)await Be(me);let he=ele(me);return p(()=>{he.catch(()=>{}),he.cancel()}),he})}catch(ae){I._beforeError(new mb.RequestError(ae.message,ae,I));return}if(!$ae.isResponseOk(C)){I._beforeError(new mb.HTTPError(C));return}r=C,u(I.options.resolveBodyOnly?C.body:C)});let v=C=>{if(a.isCanceled)return;let{options:R}=I;if(C instanceof mb.HTTPError&&!R.throwHttpErrors){let{response:L}=C;u(I.options.resolveBodyOnly?L.body:L);return}A(C)};I.once("error",v);let x=I.options.body;I.once("retry",(C,R)=>{var L,U;if(x===((L=R.request)===null||L===void 0?void 0:L.options.body)&&gst.default.nodeStream((U=R.request)===null||U===void 0?void 0:U.options.body)){v(R);return}h(C)}),mst.default(I,o,Est)};h(0)});a.on=(u,A)=>(o.on(u,A),a);let n=u=>{let A=(async()=>{await a;let{options:p}=r.request;return Xae.default(r,u,p.parseJson,p.encoding)})();return Object.defineProperties(A,Object.getOwnPropertyDescriptors(a)),A};return a.json=()=>{let{headers:u}=e.options;return!e.writableFinished&&u.accept===void 0&&(u.accept="application/json"),n("json")},a.buffer=()=>n("buffer"),a.text=()=>n("text"),a}uh.default=ele;pst(w1(),uh)});var tle=_(x4=>{"use strict";Object.defineProperty(x4,"__esModule",{value:!0});var Cst=w1();function wst(t,...e){let r=(async()=>{if(t instanceof Cst.RequestError)try{for(let a of e)if(a)for(let n of a)t=await n(t)}catch(a){t=a}throw t})(),o=()=>r;return r.json=o,r.text=o,r.buffer=o,r.on=o,r}x4.default=wst});var ile=_(k4=>{"use strict";Object.defineProperty(k4,"__esModule",{value:!0});var rle=Tf();function nle(t){for(let e of Object.values(t))(rle.default.plainObject(e)||rle.default.array(e))&&nle(e);return Object.freeze(t)}k4.default=nle});var ole=_(sle=>{"use strict";Object.defineProperty(sle,"__esModule",{value:!0})});var Q4=_(Vl=>{"use strict";var Ist=Vl&&Vl.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),Bst=Vl&&Vl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Ist(e,t,r)};Object.defineProperty(Vl,"__esModule",{value:!0});Vl.defaultHandler=void 0;var ale=Tf(),Kl=b4(),vst=tle(),Eb=C1(),Dst=ile(),Sst={RequestError:Kl.RequestError,CacheError:Kl.CacheError,ReadError:Kl.ReadError,HTTPError:Kl.HTTPError,MaxRedirectsError:Kl.MaxRedirectsError,TimeoutError:Kl.TimeoutError,ParseError:Kl.ParseError,CancelError:Kl.CancelError,UnsupportedProtocolError:Kl.UnsupportedProtocolError,UploadError:Kl.UploadError},Pst=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:yb}=Eb.default,lle=(...t)=>{let e;for(let r of t)e=yb(void 0,r,e);return e},bst=t=>t.isStream?new Eb.default(void 0,t):Kl.default(t),xst=t=>"defaults"in t&&"options"in t.defaults,kst=["get","post","put","patch","head","delete"];Vl.defaultHandler=(t,e)=>e(t);var cle=(t,e)=>{if(t)for(let r of t)r(e)},ule=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(o=>(a,n)=>{let u,A=o(a,p=>(u=n(p),u));if(A!==u&&!a.isStream&&u){let p=A,{then:h,catch:E,finally:I}=p;Object.setPrototypeOf(p,Object.getPrototypeOf(u)),Object.defineProperties(p,Object.getOwnPropertyDescriptors(u)),p.then=h,p.catch=E,p.finally=I}return A});let e=(o,a={},n)=>{var u,A;let p=0,h=E=>t.handlers[p++](E,p===t.handlers.length?bst:h);if(ale.default.plainObject(o)){let E={...o,...a};Eb.setNonEnumerableProperties([o,a],E),a=E,o=void 0}try{let E;try{cle(t.options.hooks.init,a),cle((u=a.hooks)===null||u===void 0?void 0:u.init,a)}catch(v){E=v}let I=yb(o,a,n??t.options);if(I[Eb.kIsNormalizedAlready]=!0,E)throw new Kl.RequestError(E.message,E,I);return h(I)}catch(E){if(a.isStream)throw E;return vst.default(E,t.options.hooks.beforeError,(A=a.hooks)===null||A===void 0?void 0:A.beforeError)}};e.extend=(...o)=>{let a=[t.options],n=[...t._rawHandlers],u;for(let A of o)xst(A)?(a.push(A.defaults.options),n.push(...A.defaults._rawHandlers),u=A.defaults.mutableDefaults):(a.push(A),"handlers"in A&&n.push(...A.handlers),u=A.mutableDefaults);return n=n.filter(A=>A!==Vl.defaultHandler),n.length===0&&n.push(Vl.defaultHandler),ule({options:lle(...a),handlers:n,mutableDefaults:Boolean(u)})};let r=async function*(o,a){let n=yb(o,a,t.options);n.resolveBodyOnly=!1;let u=n.pagination;if(!ale.default.object(u))throw new TypeError("`options.pagination` must be implemented");let A=[],{countLimit:p}=u,h=0;for(;h{let n=[];for await(let u of r(o,a))n.push(u);return n},e.paginate.each=r,e.stream=(o,a)=>e(o,{...a,isStream:!0});for(let o of kst)e[o]=(a,n)=>e(a,{...n,method:o}),e.stream[o]=(a,n)=>e(a,{...n,method:o,isStream:!0});return Object.assign(e,Sst),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:Dst.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=lle,e};Vl.default=ule;Bst(ole(),Vl)});var ple=_((Nf,Cb)=>{"use strict";var Qst=Nf&&Nf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),Ale=Nf&&Nf.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Qst(e,t,r)};Object.defineProperty(Nf,"__esModule",{value:!0});var Fst=ve("url"),fle=Q4(),Rst={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:t})=>t},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:t=>t.request.options.responseType==="json"?t.body:JSON.parse(t.body),paginate:t=>{if(!Reflect.has(t.headers,"link"))return!1;let e=t.headers.link.split(","),r;for(let o of e){let a=o.split(";");if(a[1].includes("next")){r=a[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new Fst.URL(r)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:t=>JSON.parse(t),stringifyJson:t=>JSON.stringify(t),cacheOptions:{}},handlers:[fle.defaultHandler],mutableDefaults:!1},F4=fle.default(Rst);Nf.default=F4;Cb.exports=F4;Cb.exports.default=F4;Cb.exports.__esModule=!0;Ale(Q4(),Nf);Ale(b4(),Nf)});var nn={};Vt(nn,{Method:()=>Cle,del:()=>Mst,get:()=>L4,getNetworkSettings:()=>Ele,post:()=>O4,put:()=>Ost,request:()=>I1});function dle(t){let e=new URL(t),r={host:e.hostname,headers:{}};return e.port&&(r.port=Number(e.port)),e.username&&e.password&&(r.proxyAuth=`${e.username}:${e.password}`),{proxy:r}}async function R4(t){return ol(gle,t,()=>oe.readFilePromise(t).then(e=>(gle.set(t,e),e)))}function Lst({statusCode:t,statusMessage:e},r){let o=Mt(r,t,yt.NUMBER),a=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return Zy(r,`${o}${e?` (${e})`:""}`,a)}async function wb(t,{configuration:e,customErrorMessage:r}){try{return await t}catch(o){if(o.name!=="HTTPError")throw o;let a=r?.(o,e)??o.response.body?.error;a==null&&(o.message.startsWith("Response code")?a="The remote server failed to provide the requested resource":a=o.message),o.code==="ETIMEDOUT"&&o.event==="socket"&&(a+=`(can be increased via ${Mt(e,"httpTimeout",yt.SETTING)})`);let n=new zt(35,a,u=>{o.response&&u.reportError(35,` ${zu(e,{label:"Response Code",value:_c(yt.NO_HINT,Lst(o.response,e))})}`),o.request&&(u.reportError(35,` ${zu(e,{label:"Request Method",value:_c(yt.NO_HINT,o.request.options.method)})}`),u.reportError(35,` ${zu(e,{label:"Request URL",value:_c(yt.URL,o.request.requestUrl)})}`)),o.request.redirects.length>0&&u.reportError(35,` ${zu(e,{label:"Request Redirects",value:_c(yt.NO_HINT,PL(e,o.request.redirects,yt.URL))})}`),o.request.retryCount===o.request.options.retry.limit&&u.reportError(35,` ${zu(e,{label:"Request Retry Count",value:_c(yt.NO_HINT,`${Mt(e,o.request.retryCount,yt.NUMBER)} (can be increased via ${Mt(e,"httpRetry",yt.SETTING)})`)})}`)});throw n.originalError=o,n}}function Ele(t,e){let r=[...e.configuration.get("networkSettings")].sort(([u],[A])=>A.length-u.length),o={enableNetwork:void 0,httpsCaFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},a=Object.keys(o),n=typeof t=="string"?new URL(t):t;for(let[u,A]of r)if(N4.default.isMatch(n.hostname,u))for(let p of a){let h=A.get(p);h!==null&&typeof o[p]>"u"&&(o[p]=h)}for(let u of a)typeof o[u]>"u"&&(o[u]=e.configuration.get(u));return o}async function I1(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET",wrapNetworkRequest:A}){let p={target:t,body:e,configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u},h=async()=>await Ust(t,e,p),E=typeof A<"u"?await A(h,p):h;return await(await r.reduceHook(v=>v.wrapNetworkRequest,E,p))()}async function L4(t,{configuration:e,jsonResponse:r,customErrorMessage:o,wrapNetworkRequest:a,...n}){let u=()=>wb(I1(t,null,{configuration:e,wrapNetworkRequest:a,...n}),{configuration:e,customErrorMessage:o}).then(p=>p.body),A=await(typeof a<"u"?u():ol(hle,t,()=>u().then(p=>(hle.set(t,p),p))));return r?JSON.parse(A.toString()):A}async function Ost(t,e,{customErrorMessage:r,...o}){return(await wb(I1(t,e,{...o,method:"PUT"}),{customErrorMessage:r,configuration:o.configuration})).body}async function O4(t,e,{customErrorMessage:r,...o}){return(await wb(I1(t,e,{...o,method:"POST"}),{customErrorMessage:r,configuration:o.configuration})).body}async function Mst(t,{customErrorMessage:e,...r}){return(await wb(I1(t,null,{...r,method:"DELETE"}),{customErrorMessage:e,configuration:r.configuration})).body}async function Ust(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET"}){let A=typeof t=="string"?new URL(t):t,p=Ele(A,{configuration:r});if(p.enableNetwork===!1)throw new zt(80,`Request to '${A.href}' has been blocked because of your configuration settings`);if(A.protocol==="http:"&&!N4.default.isMatch(A.hostname,r.get("unsafeHttpWhitelist")))throw new zt(81,`Unsafe http requests must be explicitly whitelisted in your configuration (${A.hostname})`);let E={agent:{http:p.httpProxy?T4.default.httpOverHttp(dle(p.httpProxy)):Tst,https:p.httpsProxy?T4.default.httpsOverHttp(dle(p.httpsProxy)):Nst},headers:o,method:u};E.responseType=n?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!a&&typeof e=="string"?E.body=e:E.json=e);let I=r.get("httpTimeout"),v=r.get("httpRetry"),x=r.get("enableStrictSsl"),C=p.httpsCaFilePath,R=p.httpsCertFilePath,L=p.httpsKeyFilePath,{default:U}=await Promise.resolve().then(()=>$e(ple())),J=C?await R4(C):void 0,te=R?await R4(R):void 0,ae=L?await R4(L):void 0,fe=U.extend({timeout:{socket:I},retry:v,https:{rejectUnauthorized:x,certificateAuthority:J,certificate:te,key:ae},...E});return r.getLimit("networkConcurrency")(()=>fe(A))}var mle,yle,N4,T4,hle,gle,Tst,Nst,Cle,Ib=Et(()=>{St();mle=ve("https"),yle=ve("http"),N4=$e(Zo()),T4=$e(Yse());Yl();Gl();jl();hle=new Map,gle=new Map,Tst=new yle.Agent({keepAlive:!0}),Nst=new mle.Agent({keepAlive:!0});Cle=(a=>(a.GET="GET",a.PUT="PUT",a.POST="POST",a.DELETE="DELETE",a))(Cle||{})});var Ji={};Vt(Ji,{availableParallelism:()=>U4,getArchitecture:()=>B1,getArchitectureName:()=>qst,getArchitectureSet:()=>M4,getCaller:()=>Vst,major:()=>_st,openUrl:()=>Hst});function Gst(){if(process.platform==="darwin"||process.platform==="win32")return null;let t;try{t=oe.readFileSync(jst)}catch{}if(typeof t<"u"){if(t&&t.includes("GLIBC"))return"glibc";if(t&&t.includes("musl"))return"musl"}let r=(process.report?.getReport()??{}).sharedObjects??[],o=/\/(?:(ld-linux-|[^/]+-linux-gnu\/)|(libc.musl-|ld-musl-))/;return KI(r,a=>{let n=a.match(o);if(!n)return KI.skip;if(n[1])return"glibc";if(n[2])return"musl";throw new Error("Assertion failed: Expected the libc variant to have been detected")})??null}function B1(){return Ile=Ile??{os:process.platform,cpu:process.arch,libc:Gst()}}function qst(t=B1()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}-${t.cpu}`}function M4(){let t=B1();return Ble=Ble??{os:[t.os],cpu:[t.cpu],libc:t.libc?[t.libc]:[]}}function Kst(t){let e=Yst.exec(t);if(!e)return null;let r=e[2]&&e[2].indexOf("native")===0,o=e[2]&&e[2].indexOf("eval")===0,a=Wst.exec(e[2]);return o&&a!=null&&(e[2]=a[1],e[3]=a[2],e[4]=a[3]),{file:r?null:e[2],methodName:e[1]||"",arguments:r?[e[2]]:[],line:e[3]?+e[3]:null,column:e[4]?+e[4]:null}}function Vst(){let e=new Error().stack.split(` +`)[3];return Kst(e)}function U4(){return typeof Bb.default.availableParallelism<"u"?Bb.default.availableParallelism():Math.max(1,Bb.default.cpus().length)}var Bb,_st,wle,Hst,jst,Ile,Ble,Yst,Wst,vb=Et(()=>{St();Bb=$e(ve("os"));Db();jl();_st=Number(process.versions.node.split(".")[0]),wle=new Map([["darwin","open"],["linux","xdg-open"],["win32","explorer.exe"]]).get(process.platform),Hst=typeof wle<"u"?async t=>{try{return await _4(wle,[t],{cwd:V.cwd()}),!0}catch{return!1}}:void 0,jst="/usr/bin/ldd";Yst=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Wst=/\((\S*)(?::(\d+))(?::(\d+))\)/});function Y4(t,e,r,o,a){let n=A1(r);if(o.isArray||o.type==="ANY"&&Array.isArray(n))return Array.isArray(n)?n.map((u,A)=>H4(t,`${e}[${A}]`,u,o,a)):String(n).split(/,/).map(u=>H4(t,e,u,o,a));if(Array.isArray(n))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return H4(t,e,r,o,a)}function H4(t,e,r,o,a){let n=A1(r);switch(o.type){case"ANY":return qP(n);case"SHAPE":return Zst(t,e,r,o,a);case"MAP":return $st(t,e,r,o,a)}if(n===null&&!o.isNullable&&o.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if(o.values?.includes(n))return n;let A=(()=>{if(o.type==="BOOLEAN"&&typeof n!="string")return VI(n);if(typeof n!="string")throw new Error(`Expected configuration setting "${e}" to be a string, got ${typeof n}`);let p=sP(n,{env:t.env});switch(o.type){case"ABSOLUTE_PATH":{let h=a,E=mM(r);return E&&E[0]!=="<"&&(h=V.dirname(E)),V.resolve(h,ue.toPortablePath(p))}case"LOCATOR_LOOSE":return xf(p,!1);case"NUMBER":return parseInt(p);case"LOCATOR":return xf(p);case"BOOLEAN":return VI(p);default:return p}})();if(o.values&&!o.values.includes(A))throw new Error(`Invalid value, expected one of ${o.values.join(", ")}`);return A}function Zst(t,e,r,o,a){let n=A1(r);if(typeof n!="object"||Array.isArray(n))throw new it(`Object configuration settings "${e}" must be an object`);let u=W4(t,o,{ignoreArrays:!0});if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=`${e}.${A}`;if(!o.properties[A])throw new it(`Unrecognized configuration settings found: ${e}.${A} - run "yarn config -v" to see the list of settings supported in Yarn`);u.set(A,Y4(t,h,p,o.properties[A],a))}return u}function $st(t,e,r,o,a){let n=A1(r),u=new Map;if(typeof n!="object"||Array.isArray(n))throw new it(`Map configuration settings "${e}" must be an object`);if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=o.normalizeKeys?o.normalizeKeys(A):A,E=`${e}['${h}']`,I=o.valueDefinition;u.set(h,Y4(t,E,p,I,a))}return u}function W4(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e.isArray&&!r)return[];let o=new Map;for(let[a,n]of Object.entries(e.properties))o.set(a,W4(t,n));return o}case"MAP":return e.isArray&&!r?[]:new Map;case"ABSOLUTE_PATH":return e.default===null?null:t.projectCwd===null?Array.isArray(e.default)?e.default.map(o=>V.normalize(o)):V.isAbsolute(e.default)?V.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(o=>V.resolve(t.projectCwd,o)):V.resolve(t.projectCwd,e.default);default:return e.default}}function Pb(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecrets)return Xst;if(e.type==="ABSOLUTE_PATH"&&typeof t=="string"&&r.getNativePaths)return ue.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let o=[];for(let a of t)o.push(Pb(a,e,r));return o}if(e.type==="MAP"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=Pb(n,e.valueDefinition,r);typeof u<"u"&&o.set(a,u)}return o}if(e.type==="SHAPE"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=e.properties[a],A=Pb(n,u,r);typeof A<"u"&&o.set(a,A)}return o}return t}function eot(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(bb)&&(e=(0,Dle.default)(e.slice(bb.length)),t[e]=r);return t}function G4(){let t=`${bb}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return q4}async function vle(t){try{return await oe.readFilePromise(t)}catch{return Buffer.of()}}async function tot(t,e){return Buffer.compare(...await Promise.all([vle(t),vle(e)]))===0}async function rot(t,e){let[r,o]=await Promise.all([oe.statPromise(t),oe.statPromise(e)]);return r.dev===o.dev&&r.ino===o.ino}async function iot({configuration:t,selfPath:e}){let r=t.get("yarnPath");return t.get("ignorePath")||r===null||r===e||await not(r,e)?null:r}var Dle,Lf,Sle,Ple,ble,j4,Jst,v1,zst,FE,bb,q4,Xst,D1,xle,xb,Sb,not,rA,Ke,S1=Et(()=>{St();Nl();Dle=$e(sV()),Lf=$e(td());jt();Sle=$e(ZV()),Ple=ve("module"),ble=$e(id()),j4=ve("stream");ose();fE();cM();uM();AM();Tse();fM();vd();Use();WP();Gl();nh();Ib();jl();vb();Qf();bo();Jst=function(){if(!Lf.GITHUB_ACTIONS||!process.env.GITHUB_EVENT_PATH)return!1;let t=ue.toPortablePath(process.env.GITHUB_EVENT_PATH),e;try{e=oe.readJsonSync(t)}catch{return!1}return!(!("repository"in e)||!e.repository||(e.repository.private??!0))}(),v1=new Set(["@yarnpkg/plugin-constraints","@yarnpkg/plugin-exec","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]),zst=new Set(["isTestEnv","injectNpmUser","injectNpmPassword","injectNpm2FaToken","zipDataEpilogue","cacheCheckpointOverride","cacheVersionOverride","lockfileVersionOverride","binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir","registry","ignoreCwd"]),FE=/^(?!v)[a-z0-9._-]+$/i,bb="yarn_",q4=".yarnrc.yml",Xst="********",D1=(E=>(E.ANY="ANY",E.BOOLEAN="BOOLEAN",E.ABSOLUTE_PATH="ABSOLUTE_PATH",E.LOCATOR="LOCATOR",E.LOCATOR_LOOSE="LOCATOR_LOOSE",E.NUMBER="NUMBER",E.STRING="STRING",E.SECRET="SECRET",E.SHAPE="SHAPE",E.MAP="MAP",E))(D1||{}),xle=yt,xb=(r=>(r.JUNCTIONS="junctions",r.SYMLINKS="symlinks",r))(xb||{}),Sb={lastUpdateCheck:{description:"Last timestamp we checked whether new Yarn versions were available",type:"STRING",default:null},yarnPath:{description:"Path to the local executable that must be used over the global one",type:"ABSOLUTE_PATH",default:null},ignorePath:{description:"If true, the local executable will be ignored when using the global one",type:"BOOLEAN",default:!1},globalFolder:{description:"Folder where all system-global files are stored",type:"ABSOLUTE_PATH",default:EM()},cacheFolder:{description:"Folder where the cache files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/cache"},compressionLevel:{description:"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)",type:"NUMBER",values:["mixed",0,1,2,3,4,5,6,7,8,9],default:0},virtualFolder:{description:"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)",type:"ABSOLUTE_PATH",default:"./.yarn/__virtual__"},installStatePath:{description:"Path of the file where the install state will be persisted",type:"ABSOLUTE_PATH",default:"./.yarn/install-state.gz"},immutablePatterns:{description:"Array of glob patterns; files matching them won't be allowed to change during immutable installs",type:"STRING",default:[],isArray:!0},rcFilename:{description:"Name of the files where the configuration can be found",type:"STRING",default:G4()},enableGlobalCache:{description:"If true, the system-wide cache folder will be used regardless of `cache-folder`",type:"BOOLEAN",default:!0},cacheMigrationMode:{description:"Defines the conditions under which Yarn upgrades should cause the cache archives to be regenerated.",type:"STRING",values:["always","match-spec","required-only"],default:"always"},enableColors:{description:"If true, the CLI is allowed to use colors in its output",type:"BOOLEAN",default:lP,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:"BOOLEAN",default:SL,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:"BOOLEAN",default:Lf.isCI,defaultText:""},enableMessageNames:{description:"If true, the CLI will prefix most messages with codes suitable for search engines",type:"BOOLEAN",default:!0},enableProgressBars:{description:"If true, the CLI is allowed to show a progress bar for long-running events",type:"BOOLEAN",default:!Lf.isCI,defaultText:""},enableTimers:{description:"If true, the CLI is allowed to print the time spent executing commands",type:"BOOLEAN",default:!0},enableTips:{description:"If true, installs will print a helpful message every day of the week",type:"BOOLEAN",default:!Lf.isCI,defaultText:""},preferInteractive:{description:"If true, the CLI will automatically use the interactive mode when called from a TTY",type:"BOOLEAN",default:!1},preferTruncatedLines:{description:"If true, the CLI will truncate lines that would go beyond the size of the terminal",type:"BOOLEAN",default:!1},progressBarStyle:{description:"Which style of progress bar should be used (only when progress bars are enabled)",type:"STRING",default:void 0,defaultText:""},defaultLanguageName:{description:"Default language mode that should be used when a package doesn't offer any insight",type:"STRING",default:"node"},defaultProtocol:{description:"Default resolution protocol used when resolving pure semver and tag ranges",type:"STRING",default:"npm:"},enableTransparentWorkspaces:{description:"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol",type:"BOOLEAN",default:!0},supportedArchitectures:{description:"Architectures that Yarn will fetch and inject into the resolver",type:"SHAPE",properties:{os:{description:"Array of supported process.platform strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},cpu:{description:"Array of supported process.arch strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},libc:{description:"Array of supported libc libraries, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]}}},enableMirror:{description:"If true, the downloaded packages will be retrieved and stored in both the local and global folders",type:"BOOLEAN",default:!0},enableNetwork:{description:"If false, Yarn will refuse to use the network if required to",type:"BOOLEAN",default:!0},enableOfflineMode:{description:"If true, Yarn will attempt to retrieve files and metadata from the global cache rather than the network",type:"BOOLEAN",default:!1},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},unsafeHttpWhitelist:{description:"List of the hostnames for which http queries are allowed (glob patterns are supported)",type:"STRING",default:[],isArray:!0},httpTimeout:{description:"Timeout of each http request in milliseconds",type:"NUMBER",default:6e4},httpRetry:{description:"Retry times on http failure",type:"NUMBER",default:3},networkConcurrency:{description:"Maximal number of concurrent requests",type:"NUMBER",default:50},taskPoolConcurrency:{description:"Maximal amount of concurrent heavy task processing",type:"NUMBER",default:U4()},taskPoolMode:{description:"Execution strategy for heavy tasks",type:"STRING",values:["async","workers"],default:"workers"},networkSettings:{description:"Network settings per hostname (glob patterns are supported)",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{httpsCaFilePath:{description:"Path to file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:"BOOLEAN",default:null},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null}}}},httpsCaFilePath:{description:"A path to a file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null},enableStrictSsl:{description:"If false, SSL certificate errors will be ignored",type:"BOOLEAN",default:!0},logFilters:{description:"Overrides for log levels",type:"SHAPE",isArray:!0,concatenateValues:!0,properties:{code:{description:"Code of the messages covered by this override",type:"STRING",default:void 0},text:{description:"Code of the texts covered by this override",type:"STRING",default:void 0},pattern:{description:"Code of the patterns covered by this override",type:"STRING",default:void 0},level:{description:"Log level override, set to null to remove override",type:"STRING",values:Object.values(uP),isNullable:!0,default:void 0}}},enableTelemetry:{description:"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry",type:"BOOLEAN",default:!0},telemetryInterval:{description:"Minimal amount of time between two telemetry uploads, in days",type:"NUMBER",default:7},telemetryUserId:{description:"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.",type:"STRING",default:null},enableHardenedMode:{description:"If true, automatically enable --check-resolutions --refresh-lockfile on installs",type:"BOOLEAN",default:Lf.isPR&&Jst,defaultText:""},enableScripts:{description:"If true, packages are allowed to have install scripts by default",type:"BOOLEAN",default:!0},enableStrictSettings:{description:"If true, unknown settings will cause Yarn to abort",type:"BOOLEAN",default:!0},enableImmutableCache:{description:"If true, the cache is reputed immutable and actions that would modify it will throw",type:"BOOLEAN",default:!1},checksumBehavior:{description:"Enumeration defining what to do when a checksum doesn't match expectations",type:"STRING",default:"throw"},injectEnvironmentFiles:{description:"List of all the environment files that Yarn should inject inside the process when it starts",type:"ABSOLUTE_PATH",default:[".env.yarn?"],isArray:!0},packageExtensions:{description:"Map of package corrections to apply on the dependency tree",type:"MAP",valueDefinition:{description:"The extension that will be applied to any package whose version matches the specified range",type:"SHAPE",properties:{dependencies:{description:"The set of dependencies that must be made available to the current package in order for it to work properly",type:"MAP",valueDefinition:{description:"A range",type:"STRING"}},peerDependencies:{description:"Inherited dependencies - the consumer of the package will be tasked to provide them",type:"MAP",valueDefinition:{description:"A semver range",type:"STRING"}},peerDependenciesMeta:{description:"Extra information related to the dependencies listed in the peerDependencies field",type:"MAP",valueDefinition:{description:"The peerDependency meta",type:"SHAPE",properties:{optional:{description:"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error",type:"BOOLEAN",default:!1}}}}}}}};not=process.platform==="win32"?tot:rot;rA=class{constructor(e){this.isCI=Lf.isCI;this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.env={};this.limits=new Map;this.packageExtensions=null;this.startingCwd=e}static create(e,r,o){let a=new rA(e);typeof r<"u"&&!(r instanceof Map)&&(a.projectCwd=r),a.importSettings(Sb);let n=typeof o<"u"?o:r instanceof Map?r:new Map;for(let[u,A]of n)a.activatePlugin(u,A);return a}static async find(e,r,{strict:o=!0,usePathCheck:a=null,useRc:n=!0}={}){let u=eot();delete u.rcFilename;let A=new rA(e),p=await rA.findRcFiles(e),h=await rA.findFolderRcFile(EE());h&&(p.find(me=>me.path===h.path)||p.unshift(h));let E=Mse(p.map(ce=>[ce.path,ce.data])),I=Bt.dot,v=new Set(Object.keys(Sb)),x=({yarnPath:ce,ignorePath:me,injectEnvironmentFiles:he})=>({yarnPath:ce,ignorePath:me,injectEnvironmentFiles:he}),C=({yarnPath:ce,ignorePath:me,injectEnvironmentFiles:he,...Be})=>{let we={};for(let[g,Ee]of Object.entries(Be))v.has(g)&&(we[g]=Ee);return we},R=({yarnPath:ce,ignorePath:me,...he})=>{let Be={};for(let[we,g]of Object.entries(he))v.has(we)||(Be[we]=g);return Be};if(A.importSettings(x(Sb)),A.useWithSource("",x(u),e,{strict:!1}),E){let[ce,me]=E;A.useWithSource(ce,x(me),I,{strict:!1})}if(a){if(await iot({configuration:A,selfPath:a})!==null)return A;A.useWithSource("",{ignorePath:!0},e,{strict:!1,overwrite:!0})}let L=await rA.findProjectCwd(e);A.startingCwd=e,A.projectCwd=L;let U=Object.assign(Object.create(null),process.env);A.env=U;let J=await Promise.all(A.get("injectEnvironmentFiles").map(async ce=>{let me=ce.endsWith("?")?await oe.readFilePromise(ce.slice(0,-1),"utf8").catch(()=>""):await oe.readFilePromise(ce,"utf8");return(0,Sle.parse)(me)}));for(let ce of J)for(let[me,he]of Object.entries(ce))A.env[me]=sP(he,{env:U});if(A.importSettings(C(Sb)),A.useWithSource("",C(u),e,{strict:o}),E){let[ce,me]=E;A.useWithSource(ce,C(me),I,{strict:o})}let te=ce=>"default"in ce?ce.default:ce,ae=new Map([["@@core",sse]]);if(r!==null)for(let ce of r.plugins.keys())ae.set(ce,te(r.modules.get(ce)));for(let[ce,me]of ae)A.activatePlugin(ce,me);let fe=new Map([]);if(r!==null){let ce=new Map;for(let Be of Ple.builtinModules)ce.set(Be,()=>Df(Be));for(let[Be,we]of r.modules)ce.set(Be,()=>we);let me=new Set,he=async(Be,we)=>{let{factory:g,name:Ee}=Df(Be);if(!g||me.has(Ee))return;let Se=new Map(ce),le=ee=>{if(Se.has(ee))return Se.get(ee)();throw new it(`This plugin cannot access the package referenced via ${ee} which is neither a builtin, nor an exposed entry`)},ne=await Ky(async()=>te(await g(le)),ee=>`${ee} (when initializing ${Ee}, defined in ${we})`);ce.set(Ee,()=>ne),me.add(Ee),fe.set(Ee,ne)};if(u.plugins)for(let Be of u.plugins.split(";")){let we=V.resolve(e,ue.toPortablePath(Be));await he(we,"")}for(let{path:Be,cwd:we,data:g}of p)if(!!n&&!!Array.isArray(g.plugins))for(let Ee of g.plugins){let Se=typeof Ee!="string"?Ee.path:Ee,le=Ee?.spec??"",ne=Ee?.checksum??"";if(v1.has(le))continue;let ee=V.resolve(we,ue.toPortablePath(Se));if(!await oe.existsPromise(ee)){if(!le){let At=Mt(A,V.basename(ee,".cjs"),yt.NAME),H=Mt(A,".gitignore",yt.NAME),at=Mt(A,A.values.get("rcFilename"),yt.NAME),Re=Mt(A,"https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored",yt.URL);throw new it(`Missing source for the ${At} plugin - please try to remove the plugin from ${at} then reinstall it manually. This error usually occurs because ${H} is incorrect, check ${Re} to make sure your plugin folder isn't gitignored.`)}if(!le.match(/^https?:/)){let At=Mt(A,V.basename(ee,".cjs"),yt.NAME),H=Mt(A,A.values.get("rcFilename"),yt.NAME);throw new it(`Failed to recognize the source for the ${At} plugin - please try to delete the plugin from ${H} then reinstall it manually.`)}let Ie=await L4(le,{configuration:A}),Fe=zs(Ie);if(ne&&ne!==Fe){let At=Mt(A,V.basename(ee,".cjs"),yt.NAME),H=Mt(A,A.values.get("rcFilename"),yt.NAME),at=Mt(A,`yarn plugin import ${le}`,yt.CODE);throw new it(`Failed to fetch the ${At} plugin from its remote location: its checksum seems to have changed. If this is expected, please remove the plugin from ${H} then run ${at} to reimport it.`)}await oe.mkdirPromise(V.dirname(ee),{recursive:!0}),await oe.writeFilePromise(ee,Ie)}await he(ee,Be)}}for(let[ce,me]of fe)A.activatePlugin(ce,me);if(A.useWithSource("",R(u),e,{strict:o}),E){let[ce,me]=E;A.useWithSource(ce,R(me),I,{strict:o})}return A.get("enableGlobalCache")&&(A.values.set("cacheFolder",`${A.get("globalFolder")}/cache`),A.sources.set("cacheFolder","")),A}static async findRcFiles(e){let r=G4(),o=[],a=e,n=null;for(;a!==n;){n=a;let u=V.join(n,r);if(oe.existsSync(u)){let A=await oe.readFilePromise(u,"utf8"),p;try{p=Ki(A)}catch{let E="";throw A.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(E=" (in particular, make sure you list the colons after each key name)"),new it(`Parse error when loading ${u}; please check it's proper Yaml${E}`)}o.unshift({path:u,cwd:n,data:p})}a=V.dirname(n)}return o}static async findFolderRcFile(e){let r=V.join(e,dr.rc),o;try{o=await oe.readFilePromise(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let a=Ki(o);return{path:r,cwd:e,data:a}}static async findProjectCwd(e){let r=null,o=e,a=null;for(;o!==a;){if(a=o,oe.existsSync(V.join(a,dr.lockfile)))return a;oe.existsSync(V.join(a,dr.manifest))&&(r=a),o=V.dirname(a)}return r}static async updateConfiguration(e,r,o={}){let a=G4(),n=V.join(e,a),u=oe.existsSync(n)?Ki(await oe.readFilePromise(n,"utf8")):{},A=!1,p;if(typeof r=="function"){try{p=r(u)}catch{p=r({})}if(p===u)return!1}else{p=u;for(let h of Object.keys(r)){let E=u[h],I=r[h],v;if(typeof I=="function")try{v=I(E)}catch{v=I(void 0)}else v=I;E!==v&&(v===rA.deleteProperty?delete p[h]:p[h]=v,A=!0)}if(!A)return!1}return await oe.changeFilePromise(n,Ba(p),{automaticNewlines:!0}),!0}static async addPlugin(e,r){r.length!==0&&await rA.updateConfiguration(e,o=>{let a=o.plugins??[];if(a.length===0)return{...o,plugins:r};let n=[],u=[...r];for(let A of a){let p=typeof A!="string"?A.path:A,h=u.find(E=>E.path===p);h?(n.push(h),u=u.filter(E=>E!==h)):n.push(A)}return n.push(...u),{...o,plugins:n}})}static async updateHomeConfiguration(e){let r=EE();return await rA.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,o]of Object.entries(e))if(o!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,o),this.values.set(r,W4(this,o))}}useWithSource(e,r,o,a){try{this.use(e,r,o,a)}catch(n){throw n.message+=` (in ${Mt(this,e,yt.PATH)})`,n}}use(e,r,o,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSettings");for(let u of["enableStrictSettings",...Object.keys(r)]){let A=r[u],p=mM(A);if(p&&(e=p),typeof A>"u"||u==="plugins"||e===""&&zst.has(u))continue;if(u==="rcFilename")throw new it(`The rcFilename settings can only be set via ${`${bb}RC_FILENAME`.toUpperCase()}, not via a rc file`);let h=this.settings.get(u);if(!h){let I=EE(),v=e[0]!=="<"?V.dirname(e):null;if(a&&!(v!==null?I===v:!1))throw new it(`Unrecognized or legacy configuration settings found: ${u} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(u,e);continue}if(this.sources.has(u)&&!(n||h.type==="MAP"||h.isArray&&h.concatenateValues))continue;let E;try{E=Y4(this,u,A,h,o)}catch(I){throw I.message+=` in ${Mt(this,e,yt.PATH)}`,I}if(u==="enableStrictSettings"&&e!==""){a=E;continue}if(h.type==="MAP"){let I=this.values.get(u);this.values.set(u,new Map(n?[...I,...E]:[...E,...I])),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else if(h.isArray&&h.concatenateValues){let I=this.values.get(u);this.values.set(u,n?[...I,...E]:[...E,...I]),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else this.values.set(u,E),this.sources.set(u,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:r=!1,getNativePaths:o=!1}){let a=this.get(e),n=this.settings.get(e);if(typeof n>"u")throw new it(`Couldn't find a configuration settings named "${e}"`);return Pb(a,n,{hideSecrets:r,getNativePaths:o})}getSubprocessStreams(e,{header:r,prefix:o,report:a}){let n,u,A=oe.createWriteStream(e);if(this.get("enableInlineBuilds")){let p=a.createStreamReporter(`${o} ${Mt(this,"STDOUT","green")}`),h=a.createStreamReporter(`${o} ${Mt(this,"STDERR","red")}`);n=new j4.PassThrough,n.pipe(p),n.pipe(A),u=new j4.PassThrough,u.pipe(h),u.pipe(A)}else n=A,u=A,typeof r<"u"&&n.write(`${r} +`);return{stdout:n,stderr:u}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let o of r.resolvers||[])e.push(new o);return new Dd([new c1,new Xn,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let o of r.fetchers||[])e.push(new o);return new hE([new gE,new mE,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let o of r.linkers||[])e.push(new o);return e}getSupportedArchitectures(){let e=B1(),r=this.get("supportedArchitectures"),o=r.get("os");o!==null&&(o=o.map(u=>u==="current"?e.os:u));let a=r.get("cpu");a!==null&&(a=a.map(u=>u==="current"?e.cpu:u));let n=r.get("libc");return n!==null&&(n=sl(n,u=>u==="current"?e.libc??sl.skip:u)),{os:o,cpu:a,libc:n}}async getPackageExtensions(){if(this.packageExtensions!==null)return this.packageExtensions;this.packageExtensions=new Map;let e=this.packageExtensions,r=(o,a,{userProvided:n=!1}={})=>{if(!xa(o.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let u=new Ot;u.load(a,{yamlCompatibilityMode:!0});let A=Yy(e,o.identHash),p=[];A.push([o.range,p]);let h={status:"inactive",userProvided:n,parentDescriptor:o};for(let E of u.dependencies.values())p.push({...h,type:"Dependency",descriptor:E});for(let E of u.peerDependencies.values())p.push({...h,type:"PeerDependency",descriptor:E});for(let[E,I]of u.peerDependenciesMeta)for(let[v,x]of Object.entries(I))p.push({...h,type:"PeerDependencyMeta",selector:E,key:v,value:x})};await this.triggerHook(o=>o.registerPackageExtensions,this,r);for(let[o,a]of this.get("packageExtensions"))r(ih(o,!0),iP(a),{userProvided:!0});return e}normalizeLocator(e){return xa(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):FE.test(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):e}normalizeDependency(e){return xa(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):FE.test(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):e}normalizeDependencyMap(e){return new Map([...e].map(([r,o])=>[r,this.normalizeDependency(o)]))}normalizePackage(e,{packageExtensions:r}){let o=e1(e),a=r.get(e.identHash);if(typeof a<"u"){let u=e.version;if(u!==null){for(let[A,p]of a)if(!!kf(u,A))for(let h of p)switch(h.status==="inactive"&&(h.status="redundant"),h.type){case"Dependency":typeof o.dependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.dependencies.set(h.descriptor.identHash,this.normalizeDependency(h.descriptor)));break;case"PeerDependency":typeof o.peerDependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.peerDependencies.set(h.descriptor.identHash,h.descriptor));break;case"PeerDependencyMeta":{let E=o.peerDependenciesMeta.get(h.selector);(typeof E>"u"||!Object.hasOwn(E,h.key)||E[h.key]!==h.value)&&(h.status="active",ol(o.peerDependenciesMeta,h.selector,()=>({}))[h.key]=h.value)}break;default:yL(h)}}}let n=u=>u.scope?`${u.scope}__${u.name}`:`${u.name}`;for(let u of o.peerDependenciesMeta.keys()){let A=Js(u);o.peerDependencies.has(A.identHash)||o.peerDependencies.set(A.identHash,In(A,"*"))}for(let u of o.peerDependencies.values()){if(u.scope==="types")continue;let A=n(u),p=eA("types",A),h=fn(p);o.peerDependencies.has(p.identHash)||o.peerDependenciesMeta.has(h)||(o.peerDependencies.set(p.identHash,In(p,"*")),o.peerDependenciesMeta.set(h,{optional:!0}))}return o.dependencies=new Map(ks(o.dependencies,([,u])=>Pa(u))),o.peerDependencies=new Map(ks(o.peerDependencies,([,u])=>Pa(u))),o}getLimit(e){return ol(this.limits,e,()=>(0,ble.default)(this.get(e)))}async triggerHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);!n||await n(...r)}}async triggerMultipleHooks(e,r){for(let o of r)await this.triggerHook(e,...o)}async reduceHook(e,r,...o){let a=r;for(let n of this.plugins.values()){let u=n.hooks;if(!u)continue;let A=e(u);!A||(a=await A(a,...o))}return a}async firstHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);if(!n)continue;let u=await n(...r);if(typeof u<"u")return u}return null}},Ke=rA;Ke.deleteProperty=Symbol(),Ke.telemetry=null});var Ur={};Vt(Ur,{EndStrategy:()=>z4,ExecError:()=>kb,PipeError:()=>P1,execvp:()=>_4,pipevp:()=>qc});function bd(t){return t!==null&&typeof t.fd=="number"}function K4(){}function V4(){for(let t of xd)t.kill()}async function qc(t,e,{cwd:r,env:o=process.env,strict:a=!1,stdin:n=null,stdout:u,stderr:A,end:p=2}){let h=["pipe","pipe","pipe"];n===null?h[0]="ignore":bd(n)&&(h[0]=n),bd(u)&&(h[1]=u),bd(A)&&(h[2]=A);let E=(0,J4.default)(t,e,{cwd:ue.fromPortablePath(r),env:{...o,PWD:ue.fromPortablePath(r)},stdio:h});xd.add(E),xd.size===1&&(process.on("SIGINT",K4),process.on("SIGTERM",V4)),!bd(n)&&n!==null&&n.pipe(E.stdin),bd(u)||E.stdout.pipe(u,{end:!1}),bd(A)||E.stderr.pipe(A,{end:!1});let I=()=>{for(let v of new Set([u,A]))bd(v)||v.end()};return new Promise((v,x)=>{E.on("error",C=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",K4),process.off("SIGTERM",V4)),(p===2||p===1)&&I(),x(C)}),E.on("close",(C,R)=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",K4),process.off("SIGTERM",V4)),(p===2||p===1&&C!==0)&&I(),C===0||!a?v({code:X4(C,R)}):x(new P1({fileName:t,code:C,signal:R}))})})}async function _4(t,e,{cwd:r,env:o=process.env,encoding:a="utf8",strict:n=!1}){let u=["ignore","pipe","pipe"],A=[],p=[],h=ue.fromPortablePath(r);typeof o.PWD<"u"&&(o={...o,PWD:h});let E=(0,J4.default)(t,e,{cwd:h,env:o,stdio:u});return E.stdout.on("data",I=>{A.push(I)}),E.stderr.on("data",I=>{p.push(I)}),await new Promise((I,v)=>{E.on("error",x=>{let C=Ke.create(r),R=Mt(C,t,yt.PATH);v(new zt(1,`Process ${R} failed to spawn`,L=>{L.reportError(1,` ${zu(C,{label:"Thrown Error",value:_c(yt.NO_HINT,x.message)})}`)}))}),E.on("close",(x,C)=>{let R=a==="buffer"?Buffer.concat(A):Buffer.concat(A).toString(a),L=a==="buffer"?Buffer.concat(p):Buffer.concat(p).toString(a);x===0||!n?I({code:X4(x,C),stdout:R,stderr:L}):v(new kb({fileName:t,code:x,signal:C,stdout:R,stderr:L}))})})}function X4(t,e){let r=sot.get(e);return typeof r<"u"?128+r:t??1}function oot(t,e,{configuration:r,report:o}){o.reportError(1,` ${zu(r,t!==null?{label:"Exit Code",value:_c(yt.NUMBER,t)}:{label:"Exit Signal",value:_c(yt.CODE,e)})}`)}var J4,z4,P1,kb,xd,sot,Db=Et(()=>{St();J4=$e(sT());S1();Yl();Gl();z4=(o=>(o[o.Never=0]="Never",o[o.ErrorCode=1]="ErrorCode",o[o.Always=2]="Always",o))(z4||{}),P1=class extends zt{constructor({fileName:r,code:o,signal:a}){let n=Ke.create(V.cwd()),u=Mt(n,r,yt.PATH);super(1,`Child ${u} reported an error`,A=>{oot(o,a,{configuration:n,report:A})});this.code=X4(o,a)}},kb=class extends P1{constructor({fileName:r,code:o,signal:a,stdout:n,stderr:u}){super({fileName:r,code:o,signal:a});this.stdout=n,this.stderr=u}};xd=new Set;sot=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]])});function Qle(t){kle=t}function b1(){return typeof Z4>"u"&&(Z4=kle()),Z4}var Z4,kle,$4=Et(()=>{kle=()=>{throw new Error("Assertion failed: No libzip instance is available, and no factory was configured")}});var Fle=_((Qb,tU)=>{var aot=Object.assign({},ve("fs")),eU=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(t=t||__filename),function(e){e=e||{};var r=typeof e<"u"?e:{},o,a;r.ready=new Promise(function(We,tt){o=We,a=tt});var n={},u;for(u in r)r.hasOwnProperty(u)&&(n[u]=r[u]);var A=[],p="./this.program",h=function(We,tt){throw tt},E=!1,I=!0,v="";function x(We){return r.locateFile?r.locateFile(We,v):v+We}var C,R,L,U;I&&(E?v=ve("path").dirname(v)+"/":v=__dirname+"/",C=function(tt,It){var nr=ii(tt);return nr?It?nr:nr.toString():(L||(L=aot),U||(U=ve("path")),tt=U.normalize(tt),L.readFileSync(tt,It?null:"utf8"))},R=function(tt){var It=C(tt,!0);return It.buffer||(It=new Uint8Array(It)),Ee(It.buffer),It},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),A=process.argv.slice(2),h=function(We){process.exit(We)},r.inspect=function(){return"[Emscripten Module object]"});var J=r.print||console.log.bind(console),te=r.printErr||console.warn.bind(console);for(u in n)n.hasOwnProperty(u)&&(r[u]=n[u]);n=null,r.arguments&&(A=r.arguments),r.thisProgram&&(p=r.thisProgram),r.quit&&(h=r.quit);var ae=0,fe=function(We){ae=We},ce;r.wasmBinary&&(ce=r.wasmBinary);var me=r.noExitRuntime||!0;typeof WebAssembly!="object"&&Ti("no native wasm support detected");function he(We,tt,It){switch(tt=tt||"i8",tt.charAt(tt.length-1)==="*"&&(tt="i32"),tt){case"i1":return He[We>>0];case"i8":return He[We>>0];case"i16":return cp((We>>1)*2);case"i32":return Os((We>>2)*4);case"i64":return Os((We>>2)*4);case"float":return cu((We>>2)*4);case"double":return lp((We>>3)*8);default:Ti("invalid type for getValue: "+tt)}return null}var Be,we=!1,g;function Ee(We,tt){We||Ti("Assertion failed: "+tt)}function Se(We){var tt=r["_"+We];return Ee(tt,"Cannot call unknown function "+We+", make sure it is exported"),tt}function le(We,tt,It,nr,$){var ye={string:function(es){var bi=0;if(es!=null&&es!==0){var jo=(es.length<<2)+1;bi=Un(jo),At(es,bi,jo)}return bi},array:function(es){var bi=Un(es.length);return Re(es,bi),bi}};function Le(es){return tt==="string"?Ie(es):tt==="boolean"?Boolean(es):es}var pt=Se(We),ht=[],Tt=0;if(nr)for(var er=0;er=It)&&Te[nr];)++nr;return ee.decode(Te.subarray(We,nr))}function Fe(We,tt,It,nr){if(!(nr>0))return 0;for(var $=It,ye=It+nr-1,Le=0;Le=55296&&pt<=57343){var ht=We.charCodeAt(++Le);pt=65536+((pt&1023)<<10)|ht&1023}if(pt<=127){if(It>=ye)break;tt[It++]=pt}else if(pt<=2047){if(It+1>=ye)break;tt[It++]=192|pt>>6,tt[It++]=128|pt&63}else if(pt<=65535){if(It+2>=ye)break;tt[It++]=224|pt>>12,tt[It++]=128|pt>>6&63,tt[It++]=128|pt&63}else{if(It+3>=ye)break;tt[It++]=240|pt>>18,tt[It++]=128|pt>>12&63,tt[It++]=128|pt>>6&63,tt[It++]=128|pt&63}}return tt[It]=0,It-$}function At(We,tt,It){return Fe(We,Te,tt,It)}function H(We){for(var tt=0,It=0;It=55296&&nr<=57343&&(nr=65536+((nr&1023)<<10)|We.charCodeAt(++It)&1023),nr<=127?++tt:nr<=2047?tt+=2:nr<=65535?tt+=3:tt+=4}return tt}function at(We){var tt=H(We)+1,It=Li(tt);return It&&Fe(We,He,It,tt),It}function Re(We,tt){He.set(We,tt)}function ke(We,tt){return We%tt>0&&(We+=tt-We%tt),We}var xe,He,Te,Je,je,b,w,P,y,F;function z(We){xe=We,r.HEAP_DATA_VIEW=F=new DataView(We),r.HEAP8=He=new Int8Array(We),r.HEAP16=Je=new Int16Array(We),r.HEAP32=b=new Int32Array(We),r.HEAPU8=Te=new Uint8Array(We),r.HEAPU16=je=new Uint16Array(We),r.HEAPU32=w=new Uint32Array(We),r.HEAPF32=P=new Float32Array(We),r.HEAPF64=y=new Float64Array(We)}var X=r.INITIAL_MEMORY||16777216,Z,ie=[],Pe=[],Ne=[],ot=!1;function dt(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bt(r.preRun.shift());oo(ie)}function Gt(){ot=!0,oo(Pe)}function $t(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Qr(r.postRun.shift());oo(Ne)}function bt(We){ie.unshift(We)}function an(We){Pe.unshift(We)}function Qr(We){Ne.unshift(We)}var mr=0,br=null,Wr=null;function Kn(We){mr++,r.monitorRunDependencies&&r.monitorRunDependencies(mr)}function Ns(We){if(mr--,r.monitorRunDependencies&&r.monitorRunDependencies(mr),mr==0&&(br!==null&&(clearInterval(br),br=null),Wr)){var tt=Wr;Wr=null,tt()}}r.preloadedImages={},r.preloadedAudios={};function Ti(We){r.onAbort&&r.onAbort(We),We+="",te(We),we=!0,g=1,We="abort("+We+"). Build with -s ASSERTIONS=1 for more info.";var tt=new WebAssembly.RuntimeError(We);throw a(tt),tt}var ps="data:application/octet-stream;base64,";function io(We){return We.startsWith(ps)}var Pi="data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQ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KAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASEL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NgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsi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CyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYg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DCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcN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DCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==";io(Pi)||(Pi=x(Pi));function Ls(We){try{if(We==Pi&&ce)return new Uint8Array(ce);var tt=ii(We);if(tt)return tt;if(R)return R(We);throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}catch(It){Ti(It)}}function so(We,tt){var It,nr,$;try{$=Ls(We),nr=new WebAssembly.Module($),It=new WebAssembly.Instance(nr,tt)}catch(Le){var ye=Le.toString();throw te("failed to compile wasm module: "+ye),(ye.includes("imported Memory")||ye.includes("memory import"))&&te("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),Le}return[It,nr]}function cc(){var We={a:Ma};function tt($,ye){var Le=$.exports;r.asm=Le,Be=r.asm.g,z(Be.buffer),Z=r.asm.W,an(r.asm.h),Ns("wasm-instantiate")}if(Kn("wasm-instantiate"),r.instantiateWasm)try{var It=r.instantiateWasm(We,tt);return It}catch($){return te("Module.instantiateWasm callback failed with error: "+$),!1}var nr=so(Pi,We);return tt(nr[0]),r.asm}function cu(We){return F.getFloat32(We,!0)}function lp(We){return F.getFloat64(We,!0)}function cp(We){return F.getInt16(We,!0)}function Os(We){return F.getInt32(We,!0)}function Dn(We,tt){F.setInt32(We,tt,!0)}function oo(We){for(;We.length>0;){var tt=We.shift();if(typeof tt=="function"){tt(r);continue}var It=tt.func;typeof It=="number"?tt.arg===void 0?Z.get(It)():Z.get(It)(tt.arg):It(tt.arg===void 0?null:tt.arg)}}function Ms(We,tt){var It=new Date(Os((We>>2)*4)*1e3);Dn((tt>>2)*4,It.getUTCSeconds()),Dn((tt+4>>2)*4,It.getUTCMinutes()),Dn((tt+8>>2)*4,It.getUTCHours()),Dn((tt+12>>2)*4,It.getUTCDate()),Dn((tt+16>>2)*4,It.getUTCMonth()),Dn((tt+20>>2)*4,It.getUTCFullYear()-1900),Dn((tt+24>>2)*4,It.getUTCDay()),Dn((tt+36>>2)*4,0),Dn((tt+32>>2)*4,0);var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((tt+28>>2)*4,$),Ms.GMTString||(Ms.GMTString=at("GMT")),Dn((tt+40>>2)*4,Ms.GMTString),tt}function ml(We,tt){return Ms(We,tt)}function yl(We,tt,It){Te.copyWithin(We,tt,tt+It)}function ao(We){try{return Be.grow(We-xe.byteLength+65535>>>16),z(Be.buffer),1}catch{}}function Vn(We){var tt=Te.length;We=We>>>0;var It=2147483648;if(We>It)return!1;for(var nr=1;nr<=4;nr*=2){var $=tt*(1+.2/nr);$=Math.min($,We+100663296);var ye=Math.min(It,ke(Math.max(We,$),65536)),Le=ao(ye);if(Le)return!0}return!1}function On(We){fe(We)}function Ni(We){var tt=Date.now()/1e3|0;return We&&Dn((We>>2)*4,tt),tt}function Mn(){if(Mn.called)return;Mn.called=!0;var We=new Date().getFullYear(),tt=new Date(We,0,1),It=new Date(We,6,1),nr=tt.getTimezoneOffset(),$=It.getTimezoneOffset(),ye=Math.max(nr,$);Dn((ds()>>2)*4,ye*60),Dn((gs()>>2)*4,Number(nr!=$));function Le($r){var Gi=$r.toTimeString().match(/\(([A-Za-z ]+)\)$/);return Gi?Gi[1]:"GMT"}var pt=Le(tt),ht=Le(It),Tt=at(pt),er=at(ht);$>2)*4,Tt),Dn((wi()+4>>2)*4,er)):(Dn((wi()>>2)*4,er),Dn((wi()+4>>2)*4,Tt))}function _i(We){Mn();var tt=Date.UTC(Os((We+20>>2)*4)+1900,Os((We+16>>2)*4),Os((We+12>>2)*4),Os((We+8>>2)*4),Os((We+4>>2)*4),Os((We>>2)*4),0),It=new Date(tt);Dn((We+24>>2)*4,It.getUTCDay());var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((We+28>>2)*4,$),It.getTime()/1e3|0}var tr=typeof atob=="function"?atob:function(We){var tt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",It="",nr,$,ye,Le,pt,ht,Tt,er=0;We=We.replace(/[^A-Za-z0-9\+\/\=]/g,"");do Le=tt.indexOf(We.charAt(er++)),pt=tt.indexOf(We.charAt(er++)),ht=tt.indexOf(We.charAt(er++)),Tt=tt.indexOf(We.charAt(er++)),nr=Le<<2|pt>>4,$=(pt&15)<<4|ht>>2,ye=(ht&3)<<6|Tt,It=It+String.fromCharCode(nr),ht!==64&&(It=It+String.fromCharCode($)),Tt!==64&&(It=It+String.fromCharCode(ye));while(er0||(dt(),mr>0))return;function tt(){Sn||(Sn=!0,r.calledRun=!0,!we&&(Gt(),o(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),$t()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),tt()},1)):tt()}if(r.run=ys,r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return ys(),e}}();typeof Qb=="object"&&typeof tU=="object"?tU.exports=eU:typeof define=="function"&&define.amd?define([],function(){return eU}):typeof Qb=="object"&&(Qb.createModule=eU)});var Of,Rle,Tle,Nle=Et(()=>{Of=["number","number"],Rle=(ee=>(ee[ee.ZIP_ER_OK=0]="ZIP_ER_OK",ee[ee.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",ee[ee.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",ee[ee.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",ee[ee.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",ee[ee.ZIP_ER_READ=5]="ZIP_ER_READ",ee[ee.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",ee[ee.ZIP_ER_CRC=7]="ZIP_ER_CRC",ee[ee.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",ee[ee.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",ee[ee.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",ee[ee.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",ee[ee.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",ee[ee.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",ee[ee.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",ee[ee.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",ee[ee.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",ee[ee.ZIP_ER_EOF=17]="ZIP_ER_EOF",ee[ee.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",ee[ee.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",ee[ee.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",ee[ee.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",ee[ee.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",ee[ee.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",ee[ee.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",ee[ee.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",ee[ee.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",ee[ee.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",ee[ee.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",ee[ee.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",ee[ee.ZIP_ER_TELL=30]="ZIP_ER_TELL",ee[ee.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA",ee))(Rle||{}),Tle=t=>({get HEAPU8(){return t.HEAPU8},errors:Rle,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_EXCL:2,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:t._malloc(1),uint32S:t._malloc(4),malloc:t._malloc,free:t._free,getValue:t.getValue,openFromSource:t.cwrap("zip_open_from_source","number",["number","number","number"]),close:t.cwrap("zip_close","number",["number"]),discard:t.cwrap("zip_discard",null,["number"]),getError:t.cwrap("zip_get_error","number",["number"]),getName:t.cwrap("zip_get_name","string",["number","number","number"]),getNumEntries:t.cwrap("zip_get_num_entries","number",["number","number"]),delete:t.cwrap("zip_delete","number",["number","number"]),statIndex:t.cwrap("zip_stat_index","number",["number",...Of,"number","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...Of,"number"]),fread:t.cwrap("zip_fread","number",["number","number","number","number"]),fclose:t.cwrap("zip_fclose","number",["number"]),dir:{add:t.cwrap("zip_dir_add","number",["number","string"])},file:{add:t.cwrap("zip_file_add","number",["number","string","number","number"]),getError:t.cwrap("zip_file_get_error","number",["number"]),getExternalAttributes:t.cwrap("zip_file_get_external_attributes","number",["number",...Of,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...Of,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...Of,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...Of,"number","number"])},ext:{countSymlinks:t.cwrap("zip_ext_count_symlinks","number",["number"])},error:{initWithCode:t.cwrap("zip_error_init_with_code",null,["number","number"]),strerror:t.cwrap("zip_error_strerror","string",["number"])},name:{locate:t.cwrap("zip_name_locate","number",["number","string","number"])},source:{fromUnattachedBuffer:t.cwrap("zip_source_buffer_create","number",["number",...Of,"number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...Of,"number"]),free:t.cwrap("zip_source_free",null,["number"]),keep:t.cwrap("zip_source_keep",null,["number"]),open:t.cwrap("zip_source_open","number",["number"]),close:t.cwrap("zip_source_close","number",["number"]),seek:t.cwrap("zip_source_seek","number",["number",...Of,"number"]),tell:t.cwrap("zip_source_tell","number",["number"]),read:t.cwrap("zip_source_read","number",["number","number","number"]),error:t.cwrap("zip_source_error","number",["number"])},struct:{statS:t.cwrap("zipstruct_statS","number",[]),statSize:t.cwrap("zipstruct_stat_size","number",["number"]),statCompSize:t.cwrap("zipstruct_stat_comp_size","number",["number"]),statCompMethod:t.cwrap("zipstruct_stat_comp_method","number",["number"]),statMtime:t.cwrap("zipstruct_stat_mtime","number",["number"]),statCrc:t.cwrap("zipstruct_stat_crc","number",["number"]),errorS:t.cwrap("zipstruct_errorS","number",[]),errorCodeZip:t.cwrap("zipstruct_error_code_zip","number",["number"])}})});function rU(t,e){let r=t.indexOf(e);if(r<=0)return null;let o=r;for(;r>=0&&(o=r+e.length,t[o]!==V.sep);){if(t[r-1]===V.sep)return null;r=t.indexOf(e,o)}return t.length>o&&t[o]!==V.sep?null:t.slice(0,o)}var Jl,Lle=Et(()=>{St();St();nA();Jl=class extends Hp{static async openPromise(e,r){let o=new Jl(r);try{return await e(o)}finally{o.saveAndClose()}}constructor(e={}){let r=e.fileExtensions,o=e.readOnlyArchives,a=typeof r>"u"?A=>rU(A,".zip"):A=>{for(let p of r){let h=rU(A,p);if(h)return h}return null},n=(A,p)=>new zi(p,{baseFs:A,readOnly:o,stats:A.statSync(p)}),u=async(A,p)=>{let h={baseFs:A,readOnly:o,stats:await A.statPromise(p)};return()=>new zi(p,h)};super({...e,factorySync:n,factoryPromise:u,getMountPoint:a})}}});function lot(t){if(typeof t=="string"&&String(+t)===t)return+t;if(typeof t=="number"&&Number.isFinite(t))return t<0?Date.now()/1e3:t;if(Ole.types.isDate(t))return t.getTime()/1e3;throw new Error("Invalid time")}function Fb(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var ta,nU,Ole,iU,Mle,Rb,zi,sU=Et(()=>{St();St();St();St();St();St();ta=ve("fs"),nU=ve("stream"),Ole=ve("util"),iU=$e(ve("zlib"));$4();Mle="mixed";Rb=class extends Error{constructor(r,o){super(r);this.name="Libzip Error",this.code=o}},zi=class extends Mu{constructor(r,o={}){super();this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;let a=o;if(this.level=typeof a.level<"u"?a.level:Mle,r??=Fb(),typeof r=="string"){let{baseFs:A=new Tn}=a;this.baseFs=A,this.path=r}else this.path=null,this.baseFs=null;if(o.stats)this.stats=o.stats;else if(typeof r=="string")try{this.stats=this.baseFs.statSync(r)}catch(A){if(A.code==="ENOENT"&&a.create)this.stats=Ea.makeDefaultStats();else throw A}else this.stats=Ea.makeDefaultStats();this.libzip=b1();let n=this.libzip.malloc(4);try{let A=0;o.readOnly&&(A|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof r=="string"&&(r=a.create?Fb():this.baseFs.readFileSync(r));let p=this.allocateUnattachedSource(r);try{this.zip=this.libzip.openFromSource(p,A,n),this.lzSource=p}catch(h){throw this.libzip.source.free(p),h}if(this.zip===0){let h=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(h,this.libzip.getValue(n,"i32")),this.makeLibzipError(h)}}finally{this.libzip.free(n)}this.listings.set(Bt.root,new Set);let u=this.libzip.getNumEntries(this.zip,0);for(let A=0;Ar)throw new Error("Overread");let n=Buffer.from(this.libzip.HEAPU8.subarray(o,o+r));return process.env.YARN_IS_TEST_ENV&&process.env.YARN_ZIP_DATA_EPILOGUE&&(n=Buffer.concat([n,Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)])),n}finally{this.libzip.free(o)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.readOnly){this.discardAndClose();return}let r=this.baseFs.existsSync(this.path)||this.stats.mode===Ea.DEFAULT_MODE?void 0:this.stats.mode;this.baseFs.writeFileSync(this.path,this.getBufferAndClose(),{mode:r}),this.ready=!1}resolve(r){return V.resolve(Bt.root,r)}async openPromise(r,o,a){return this.openSync(r,o,a)}openSync(r,o,a){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:r}),n}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(r,o){return this.opendirSync(r,o)}opendirSync(r,o={}){let a=this.resolveFilename(`opendir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`opendir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`opendir '${r}'`);let u=[...n],A=this.openSync(a,"r");return PD(this,a,u,{onClose:()=>{this.closeSync(A)}})}async readPromise(r,o,a,n,u){return this.readSync(r,o,a,n,u)}readSync(r,o,a=0,n=o.byteLength,u=-1){let A=this.fds.get(r);if(typeof A>"u")throw ar.EBADF("read");let p=u===-1||u===null?A.cursor:u,h=this.readFileSync(A.p);h.copy(o,a,p,p+n);let E=Math.max(0,Math.min(h.length-p,n));return(u===-1||u===null)&&(A.cursor+=E),E}async writePromise(r,o,a,n,u){return typeof o=="string"?this.writeSync(r,o,u):this.writeSync(r,o,a,n,u)}writeSync(r,o,a,n,u){throw typeof this.fds.get(r)>"u"?ar.EBADF("read"):new Error("Unimplemented")}async closePromise(r){return this.closeSync(r)}closeSync(r){if(typeof this.fds.get(r)>"u")throw ar.EBADF("read");this.fds.delete(r)}createReadStream(r,{encoding:o}={}){if(r===null)throw new Error("Unimplemented");let a=this.openSync(r,"r"),n=Object.assign(new nU.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(A,p)=>{clearImmediate(u),this.closeSync(a),p(A)}}),{close(){n.destroy()},bytesRead:0,path:r,pending:!1}),u=setImmediate(async()=>{try{let A=await this.readFilePromise(r,o);n.bytesRead=A.length,n.end(A)}catch(A){n.destroy(A)}});return n}createWriteStream(r,{encoding:o}={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);if(r===null)throw new Error("Unimplemented");let a=[],n=this.openSync(r,"w"),u=Object.assign(new nU.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(A,p)=>{try{A?p(A):(this.writeFileSync(r,Buffer.concat(a),o),p(null))}catch(h){p(h)}finally{this.closeSync(n)}}}),{close(){u.destroy()},bytesWritten:0,path:r,pending:!1});return u.on("data",A=>{let p=Buffer.from(A);u.bytesWritten+=p.length,a.push(p)}),u}async realpathPromise(r){return this.realpathSync(r)}realpathSync(r){let o=this.resolveFilename(`lstat '${r}'`,r);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`lstat '${r}'`);return o}async existsPromise(r){return this.existsSync(r)}existsSync(r){if(!this.ready)throw ar.EBUSY(`archive closed, existsSync '${r}'`);if(this.symlinkCount===0){let a=V.resolve(Bt.root,r);return this.entries.has(a)||this.listings.has(a)}let o;try{o=this.resolveFilename(`stat '${r}'`,r,void 0,!1)}catch{return!1}return o===void 0?!1:this.entries.has(o)||this.listings.has(o)}async accessPromise(r,o){return this.accessSync(r,o)}accessSync(r,o=ta.constants.F_OK){let a=this.resolveFilename(`access '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`access '${r}'`);if(this.readOnly&&o&ta.constants.W_OK)throw ar.EROFS(`access '${r}'`)}async statPromise(r,o={bigint:!1}){return o.bigint?this.statSync(r,{bigint:!0}):this.statSync(r)}statSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`stat '${r}'`,r,void 0,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`stat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`stat '${r}'`);return this.statImpl(`stat '${r}'`,a,o)}}async fstatPromise(r,o){return this.fstatSync(r,o)}fstatSync(r,o){let a=this.fds.get(r);if(typeof a>"u")throw ar.EBADF("fstatSync");let{p:n}=a,u=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(u)&&!this.listings.has(u))throw ar.ENOENT(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(u))throw ar.ENOTDIR(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,u,o)}async lstatPromise(r,o={bigint:!1}){return o.bigint?this.lstatSync(r,{bigint:!0}):this.lstatSync(r)}lstatSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`lstat '${r}'`,r,!1,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`lstat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`lstat '${r}'`);return this.statImpl(`lstat '${r}'`,a,o)}}statImpl(r,o,a={}){let n=this.entries.get(o);if(typeof n<"u"){let u=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,n,0,0,u)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let p=this.stats.uid,h=this.stats.gid,E=this.libzip.struct.statSize(u)>>>0,I=512,v=Math.ceil(E/I),x=(this.libzip.struct.statMtime(u)>>>0)*1e3,C=x,R=x,L=x,U=new Date(C),J=new Date(R),te=new Date(L),ae=new Date(x),fe=this.listings.has(o)?ta.constants.S_IFDIR:this.isSymbolicLink(n)?ta.constants.S_IFLNK:ta.constants.S_IFREG,ce=fe===ta.constants.S_IFDIR?493:420,me=fe|this.getUnixMode(n,ce)&511,he=this.libzip.struct.statCrc(u),Be=Object.assign(new Ea.StatEntry,{uid:p,gid:h,size:E,blksize:I,blocks:v,atime:U,birthtime:J,ctime:te,mtime:ae,atimeMs:C,birthtimeMs:R,ctimeMs:L,mtimeMs:x,mode:me,crc:he});return a.bigint===!0?Ea.convertToBigIntStats(Be):Be}if(this.listings.has(o)){let u=this.stats.uid,A=this.stats.gid,p=0,h=512,E=0,I=this.stats.mtimeMs,v=this.stats.mtimeMs,x=this.stats.mtimeMs,C=this.stats.mtimeMs,R=new Date(I),L=new Date(v),U=new Date(x),J=new Date(C),te=ta.constants.S_IFDIR|493,ae=0,fe=Object.assign(new Ea.StatEntry,{uid:u,gid:A,size:p,blksize:h,blocks:E,atime:R,birthtime:L,ctime:U,mtime:J,atimeMs:I,birthtimeMs:v,ctimeMs:x,mtimeMs:C,mode:te,crc:ae});return a.bigint===!0?Ea.convertToBigIntStats(fe):fe}throw new Error("Unreachable")}getUnixMode(r,o){if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?o:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(r){let o=this.listings.get(r);if(o)return o;this.registerListing(V.dirname(r)).add(V.basename(r));let n=new Set;return this.listings.set(r,n),n}registerEntry(r,o){this.registerListing(V.dirname(r)).add(V.basename(r)),this.entries.set(r,o)}unregisterListing(r){this.listings.delete(r),this.listings.get(V.dirname(r))?.delete(V.basename(r))}unregisterEntry(r){this.unregisterListing(r);let o=this.entries.get(r);this.entries.delete(r),!(typeof o>"u")&&(this.fileSources.delete(o),this.isSymbolicLink(o)&&this.symlinkCount--)}deleteEntry(r,o){if(this.unregisterEntry(r),this.libzip.delete(this.zip,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(r,o,a=!0,n=!0){if(!this.ready)throw ar.EBUSY(`archive closed, ${r}`);let u=V.resolve(Bt.root,o);if(u==="/")return Bt.root;let A=this.entries.get(u);if(a&&A!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(A)){let p=this.getFileSource(A).toString();return this.resolveFilename(r,V.resolve(V.dirname(u),p),!0,n)}else return u;for(;;){let p=this.resolveFilename(r,V.dirname(u),!0,n);if(p===void 0)return p;let h=this.listings.has(p),E=this.entries.has(p);if(!h&&!E){if(n===!1)return;throw ar.ENOENT(r)}if(!h)throw ar.ENOTDIR(r);if(u=V.resolve(p,V.basename(u)),!a||this.symlinkCount===0)break;let I=this.libzip.name.locate(this.zip,u.slice(1),0);if(I===-1)break;if(this.isSymbolicLink(I)){let v=this.getFileSource(I).toString();u=V.resolve(V.dirname(u),v)}else break}return u}allocateBuffer(r){Buffer.isBuffer(r)||(r=Buffer.from(r));let o=this.libzip.malloc(r.byteLength);if(!o)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,o,r.byteLength).set(r),{buffer:o,byteLength:r.byteLength}}allocateUnattachedSource(r){let o=this.libzip.struct.errorS(),{buffer:a,byteLength:n}=this.allocateBuffer(r),u=this.libzip.source.fromUnattachedBuffer(a,n,0,1,o);if(u===0)throw this.libzip.free(o),this.makeLibzipError(o);return u}allocateSource(r){let{buffer:o,byteLength:a}=this.allocateBuffer(r),n=this.libzip.source.fromBuffer(this.zip,o,a,0,1);if(n===0)throw this.libzip.free(o),this.makeLibzipError(this.libzip.getError(this.zip));return n}setFileSource(r,o){let a=Buffer.isBuffer(o)?o:Buffer.from(o),n=V.relative(Bt.root,r),u=this.allocateSource(o);try{let A=this.libzip.file.add(this.zip,n,u,this.libzip.ZIP_FL_OVERWRITE);if(A===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!=="mixed"){let p=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,A,0,p,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(A,a),A}catch(A){throw this.libzip.source.free(u),A}}isSymbolicLink(r){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,"i32")>>>16&ta.constants.S_IFMT)===ta.constants.S_IFLNK}getFileSource(r,o={asyncDecompress:!1}){let a=this.fileSources.get(r);if(typeof a<"u")return a;let n=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,r,0,0,n)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let A=this.libzip.struct.statCompSize(n),p=this.libzip.struct.statCompMethod(n),h=this.libzip.malloc(A);try{let E=this.libzip.fopenIndex(this.zip,r,0,this.libzip.ZIP_FL_COMPRESSED);if(E===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let I=this.libzip.fread(E,h,A,0);if(I===-1)throw this.makeLibzipError(this.libzip.file.getError(E));if(IA)throw new Error("Overread");let v=this.libzip.HEAPU8.subarray(h,h+A),x=Buffer.from(v);if(p===0)return this.fileSources.set(r,x),x;if(o.asyncDecompress)return new Promise((C,R)=>{iU.default.inflateRaw(x,(L,U)=>{L?R(L):(this.fileSources.set(r,U),C(U))})});{let C=iU.default.inflateRawSync(x);return this.fileSources.set(r,C),C}}finally{this.libzip.fclose(E)}}finally{this.libzip.free(h)}}async fchmodPromise(r,o){return this.chmodPromise(this.fdToPath(r,"fchmod"),o)}fchmodSync(r,o){return this.chmodSync(this.fdToPath(r,"fchmodSync"),o)}async chmodPromise(r,o){return this.chmodSync(r,o)}chmodSync(r,o){if(this.readOnly)throw ar.EROFS(`chmod '${r}'`);o&=493;let a=this.resolveFilename(`chmod '${r}'`,r,!1),n=this.entries.get(a);if(typeof n>"u")throw new Error(`Assertion failed: The entry should have been registered (${a})`);let A=this.getUnixMode(n,ta.constants.S_IFREG|0)&-512|o;if(this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,A<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(r,o,a){return this.chownPromise(this.fdToPath(r,"fchown"),o,a)}fchownSync(r,o,a){return this.chownSync(this.fdToPath(r,"fchownSync"),o,a)}async chownPromise(r,o,a){return this.chownSync(r,o,a)}chownSync(r,o,a){throw new Error("Unimplemented")}async renamePromise(r,o){return this.renameSync(r,o)}renameSync(r,o){throw new Error("Unimplemented")}async copyFilePromise(r,o,a){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=await this.getFileSource(n,{asyncDecompress:!0}),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}copyFileSync(r,o,a=0){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=this.getFileSource(n),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}prepareCopyFile(r,o,a=0){if(this.readOnly)throw ar.EROFS(`copyfile '${r} -> '${o}'`);if((a&ta.constants.COPYFILE_FICLONE_FORCE)!==0)throw ar.ENOSYS("unsupported clone operation",`copyfile '${r}' -> ${o}'`);let n=this.resolveFilename(`copyfile '${r} -> ${o}'`,r),u=this.entries.get(n);if(typeof u>"u")throw ar.EINVAL(`copyfile '${r}' -> '${o}'`);let A=this.resolveFilename(`copyfile '${r}' -> ${o}'`,o),p=this.entries.get(A);if((a&(ta.constants.COPYFILE_EXCL|ta.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof p<"u")throw ar.EEXIST(`copyfile '${r}' -> '${o}'`);return{indexSource:u,resolvedDestP:A,indexDest:p}}async appendFilePromise(r,o,a){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFilePromise(r,o,a)}appendFileSync(r,o,a={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFileSync(r,o,a)}fdToPath(r,o){let a=this.fds.get(r)?.p;if(typeof a>"u")throw ar.EBADF(o);return a}async writeFilePromise(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([await this.getFileSource(A,{asyncDecompress:!0}),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&await this.chmodPromise(p,u)}writeFileSync(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([this.getFileSource(A),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&this.chmodSync(p,u)}prepareWriteFile(r,o){if(typeof r=="number"&&(r=this.fdToPath(r,"read")),this.readOnly)throw ar.EROFS(`open '${r}'`);let a=this.resolveFilename(`open '${r}'`,r);if(this.listings.has(a))throw ar.EISDIR(`open '${r}'`);let n=null,u=null;typeof o=="string"?n=o:typeof o=="object"&&({encoding:n=null,mode:u=null}=o);let A=this.entries.get(a);return{encoding:n,mode:u,resolvedP:a,index:A}}async unlinkPromise(r){return this.unlinkSync(r)}unlinkSync(r){if(this.readOnly)throw ar.EROFS(`unlink '${r}'`);let o=this.resolveFilename(`unlink '${r}'`,r);if(this.listings.has(o))throw ar.EISDIR(`unlink '${r}'`);let a=this.entries.get(o);if(typeof a>"u")throw ar.EINVAL(`unlink '${r}'`);this.deleteEntry(o,a)}async utimesPromise(r,o,a){return this.utimesSync(r,o,a)}utimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`utimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r);this.utimesImpl(n,a)}async lutimesPromise(r,o,a){return this.lutimesSync(r,o,a)}lutimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`lutimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r,!1);this.utimesImpl(n,a)}utimesImpl(r,o){this.listings.has(r)&&(this.entries.has(r)||this.hydrateDirectory(r));let a=this.entries.get(r);if(a===void 0)throw new Error("Unreachable");if(this.libzip.file.setMtime(this.zip,a,0,lot(o),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(r,o){return this.mkdirSync(r,o)}mkdirSync(r,{mode:o=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(r,{chmod:o});if(this.readOnly)throw ar.EROFS(`mkdir '${r}'`);let n=this.resolveFilename(`mkdir '${r}'`,r);if(this.entries.has(n)||this.listings.has(n))throw ar.EEXIST(`mkdir '${r}'`);this.hydrateDirectory(n),this.chmodSync(n,o)}async rmdirPromise(r,o){return this.rmdirSync(r,o)}rmdirSync(r,{recursive:o=!1}={}){if(this.readOnly)throw ar.EROFS(`rmdir '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rmdir '${r}'`,r),n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`rmdir '${r}'`);if(n.size>0)throw ar.ENOTEMPTY(`rmdir '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw ar.EINVAL(`rmdir '${r}'`);this.deleteEntry(r,u)}hydrateDirectory(r){let o=this.libzip.dir.add(this.zip,V.relative(Bt.root,r));if(o===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(r),this.registerEntry(r,o),o}async linkPromise(r,o){return this.linkSync(r,o)}linkSync(r,o){throw ar.EOPNOTSUPP(`link '${r}' -> '${o}'`)}async symlinkPromise(r,o){return this.symlinkSync(r,o)}symlinkSync(r,o){if(this.readOnly)throw ar.EROFS(`symlink '${r}' -> '${o}'`);let a=this.resolveFilename(`symlink '${r}' -> '${o}'`,o);if(this.listings.has(a))throw ar.EISDIR(`symlink '${r}' -> '${o}'`);if(this.entries.has(a))throw ar.EEXIST(`symlink '${r}' -> '${o}'`);let n=this.setFileSource(a,r);if(this.registerEntry(a,n),this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,(ta.constants.S_IFLNK|511)<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=await this.readFileBuffer(r,{asyncDecompress:!0});return o?a.toString(o):a}readFileSync(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=this.readFileBuffer(r);return o?a.toString(o):a}readFileBuffer(r,o={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdToPath(r,"read"));let a=this.resolveFilename(`open '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`open '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(a))throw ar.EISDIR("read");let n=this.entries.get(a);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,o)}async readdirPromise(r,o){return this.readdirSync(r,o)}readdirSync(r,o){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`scandir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`scandir '${r}'`);if(o?.recursive)if(o?.withFileTypes){let u=Array.from(n,A=>Object.assign(this.statImpl("lstat",V.join(r,A)),{name:A,path:Bt.dot}));for(let A of u){if(!A.isDirectory())continue;let p=V.join(A.path,A.name),h=this.listings.get(V.join(a,p));for(let E of h)u.push(Object.assign(this.statImpl("lstat",V.join(r,p,E)),{name:E,path:p}))}return u}else{let u=[...n];for(let A of u){let p=this.listings.get(V.join(a,A));if(!(typeof p>"u"))for(let h of p)u.push(V.join(A,h))}return u}else return o?.withFileTypes?Array.from(n,u=>Object.assign(this.statImpl("lstat",V.join(r,u)),{name:u,path:void 0})):[...n]}async readlinkPromise(r){let o=this.prepareReadlink(r);return(await this.getFileSource(o,{asyncDecompress:!0})).toString()}readlinkSync(r){let o=this.prepareReadlink(r);return this.getFileSource(o).toString()}prepareReadlink(r){let o=this.resolveFilename(`readlink '${r}'`,r,!1);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`readlink '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(o))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(o))throw ar.EINVAL(`readlink '${r}'`);let a=this.entries.get(o);if(a===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(a))throw ar.EINVAL(`readlink '${r}'`);return a}async truncatePromise(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=await this.getFileSource(n,{asyncDecompress:!0}),A=Buffer.alloc(o,0);return u.copy(A),await this.writeFilePromise(r,A)}truncateSync(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=this.getFileSource(n),A=Buffer.alloc(o,0);return u.copy(A),this.writeFileSync(r,A)}async ftruncatePromise(r,o){return this.truncatePromise(this.fdToPath(r,"ftruncate"),o)}ftruncateSync(r,o){return this.truncateSync(this.fdToPath(r,"ftruncateSync"),o)}watch(r,o,a){let n;switch(typeof o){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=o);break}if(!n)return{on:()=>{},close:()=>{}};let u=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(u)}}}watchFile(r,o,a){let n=V.resolve(Bt.root,r);return ny(this,n,o,a)}unwatchFile(r,o){let a=V.resolve(Bt.root,r);return Mg(this,a,o)}}});function _le(t,e,r=Buffer.alloc(0),o){let a=new zi(r),n=I=>I===e||I.startsWith(`${e}/`)?I.slice(0,e.length):null,u=async(I,v)=>()=>a,A=(I,v)=>a,p={...t},h=new Tn(p),E=new Hp({baseFs:h,getMountPoint:n,factoryPromise:u,factorySync:A,magicByte:21,maxAge:1/0,typeCheck:o?.typeCheck});return Kw(Ule.default,new jp(E)),a}var Ule,Hle=Et(()=>{St();Ule=$e(ve("fs"));sU()});var jle=Et(()=>{Lle();sU();Hle()});var x1={};Vt(x1,{DEFAULT_COMPRESSION_LEVEL:()=>Mle,LibzipError:()=>Rb,ZipFS:()=>zi,ZipOpenFS:()=>Jl,getArchivePart:()=>rU,getLibzipPromise:()=>uot,getLibzipSync:()=>cot,makeEmptyArchive:()=>Fb,mountMemoryDrive:()=>_le});function cot(){return b1()}async function uot(){return b1()}var Gle,nA=Et(()=>{$4();Gle=$e(Fle());Nle();jle();Qle(()=>{let t=(0,Gle.default)();return Tle(t)})});var RE,qle=Et(()=>{St();jt();k1();RE=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",process.cwd(),{description:"The directory to run the command in"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=this.args.length>0?`${this.commandName} ${this.args.join(" ")}`:this.commandName;return await TE(r,[],{cwd:ue.toPortablePath(this.cwd),stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}};RE.usage={description:"run a command using yarn's portable shell",details:` + This command will run a command using Yarn's portable shell. + + Make sure to escape glob patterns, redirections, and other features that might be expanded by your own shell. + + Note: To escape something from Yarn's shell, you might have to escape it twice, the first time from your own shell. + + Note: Don't use this command in Yarn scripts, as Yarn's shell is automatically used. + + For a list of features, visit: https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-shell/README.md. + `,examples:[["Run a simple command","$0 echo Hello"],["Run a command with a glob pattern","$0 echo '*.js'"],["Run a command with a redirection","$0 echo Hello World '>' hello.txt"],["Run a command with an escaped glob pattern (The double escape is needed in Unix shells)",`$0 echo '"*.js"'`],["Run a command with a variable (Double quotes are needed in Unix shells, to prevent them from expanding the variable)",'$0 "GREETING=Hello echo $GREETING World"']]}});var al,Yle=Et(()=>{al=class extends Error{constructor(e){super(e),this.name="ShellError"}}});var Lb={};Vt(Lb,{fastGlobOptions:()=>Vle,isBraceExpansion:()=>oU,isGlobPattern:()=>Aot,match:()=>fot,micromatchOptions:()=>Nb});function Aot(t){if(!Tb.default.scan(t,Nb).isGlob)return!1;try{Tb.default.parse(t,Nb)}catch{return!1}return!0}function fot(t,{cwd:e,baseFs:r}){return(0,Wle.default)(t,{...Vle,cwd:ue.fromPortablePath(e),fs:FD(Kle.default,new jp(r))})}function oU(t){return Tb.default.scan(t,Nb).isBrace}var Wle,Kle,Tb,Nb,Vle,Jle=Et(()=>{St();Wle=$e(RP()),Kle=$e(ve("fs")),Tb=$e(Zo()),Nb={strictBrackets:!0},Vle={onlyDirectories:!1,onlyFiles:!1}});function aU(){}function lU(){for(let t of kd)t.kill()}function $le(t,e,r,o){return a=>{let n=a[0]instanceof iA.Transform?"pipe":a[0],u=a[1]instanceof iA.Transform?"pipe":a[1],A=a[2]instanceof iA.Transform?"pipe":a[2],p=(0,Xle.default)(t,e,{...o,stdio:[n,u,A]});return kd.add(p),kd.size===1&&(process.on("SIGINT",aU),process.on("SIGTERM",lU)),a[0]instanceof iA.Transform&&a[0].pipe(p.stdin),a[1]instanceof iA.Transform&&p.stdout.pipe(a[1],{end:!1}),a[2]instanceof iA.Transform&&p.stderr.pipe(a[2],{end:!1}),{stdin:p.stdin,promise:new Promise(h=>{p.on("error",E=>{switch(kd.delete(p),kd.size===0&&(process.off("SIGINT",aU),process.off("SIGTERM",lU)),E.code){case"ENOENT":a[2].write(`command not found: ${t} +`),h(127);break;case"EACCES":a[2].write(`permission denied: ${t} +`),h(128);break;default:a[2].write(`uncaught error: ${E.message} +`),h(1);break}}),p.on("close",E=>{kd.delete(p),kd.size===0&&(process.off("SIGINT",aU),process.off("SIGTERM",lU)),h(E!==null?E:129)})})}}}function ece(t){return e=>{let r=e[0]==="pipe"?new iA.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}function Ob(t,e){return NE.start(t,e)}function zle(t,e=null){let r=new iA.PassThrough,o=new Zle.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",t(e!==null?`${e} ${p}`:p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&t(e!==null?`${e} ${n}`:n)}),r}function tce(t,{prefix:e}){return{stdout:zle(r=>t.stdout.write(`${r} +`),t.stdout.isTTY?e:null),stderr:zle(r=>t.stderr.write(`${r} +`),t.stderr.isTTY?e:null)}}var Xle,iA,Zle,kd,zl,cU,NE,uU=Et(()=>{Xle=$e(sT()),iA=ve("stream"),Zle=ve("string_decoder"),kd=new Set;zl=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},cU=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");return this.stream}},NE=class{constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=r}static start(e,{stdin:r,stdout:o,stderr:a}){let n=new NE(null,e);return n.stdin=r,n.stdout=o,n.stderr=a,n}pipeTo(e,r=1){let o=new NE(this,e),a=new cU;return o.pipe=a,o.stdout=this.stdout,o.stderr=this.stderr,(r&1)===1?this.stdout=a:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)===2?this.stderr=a:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),o}async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(this.stdin===null)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let r;if(this.stdout===null)throw new Error("Assertion failed: No output stream registered");r=this.stdout,e[1]=r.get();let o;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");o=this.stderr,e[2]=o.get();let a=this.implementation(e);return this.pipe&&this.pipe.attach(a.stdin),await a.promise.then(n=>(r.close(),o.close(),n))}async run(){let e=[];for(let o=this;o;o=o.ancestor)e.push(o.exec());return(await Promise.all(e))[0]}}});var T1={};Vt(T1,{EntryCommand:()=>RE,ShellError:()=>al,execute:()=>TE,globUtils:()=>Lb});function rce(t,e,r){let o=new ll.PassThrough({autoDestroy:!0});switch(t){case 0:(e&1)===1&&r.stdin.pipe(o,{end:!1}),(e&2)===2&&r.stdin instanceof ll.Writable&&o.pipe(r.stdin,{end:!1});break;case 1:(e&1)===1&&r.stdout.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stdout,{end:!1});break;case 2:(e&1)===1&&r.stderr.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stderr,{end:!1});break;default:throw new al(`Bad file descriptor: "${t}"`)}return o}function Ub(t,e={}){let r={...t,...e};return r.environment={...t.environment,...e.environment},r.variables={...t.variables,...e.variables},r}async function hot(t,e,r){let o=[],a=new ll.PassThrough;return a.on("data",n=>o.push(n)),await _b(t,e,Ub(r,{stdout:a})),Buffer.concat(o).toString().replace(/[\r\n]+$/,"")}async function nce(t,e,r){let o=t.map(async n=>{let u=await Qd(n.args,e,r);return{name:n.name,value:u.join(" ")}});return(await Promise.all(o)).reduce((n,u)=>(n[u.name]=u.value,n),{})}function Mb(t){return t.match(/[^ \r\n\t]+/g)||[]}async function cce(t,e,r,o,a=o){switch(t.name){case"$":o(String(process.pid));break;case"#":o(String(e.args.length));break;case"@":if(t.quoted)for(let n of e.args)a(n);else for(let n of e.args){let u=Mb(n);for(let A=0;A=0&&n"u"&&(t.defaultValue?u=(await Qd(t.defaultValue,e,r)).join(" "):t.alternativeValue&&(u="")),typeof u>"u")throw A?new al(`Unbound argument #${n}`):new al(`Unbound variable "${t.name}"`);if(t.quoted)o(u);else{let p=Mb(u);for(let E=0;Eo.push(n));let a=Number(o.join(" "));return Number.isNaN(a)?Q1({type:"variable",name:o.join(" ")},e,r):Q1({type:"number",value:a},e,r)}else return got[t.type](await Q1(t.left,e,r),await Q1(t.right,e,r))}async function Qd(t,e,r){let o=new Map,a=[],n=[],u=E=>{n.push(E)},A=()=>{n.length>0&&a.push(n.join("")),n=[]},p=E=>{u(E),A()},h=(E,I,v)=>{let x=JSON.stringify({type:E,fd:I}),C=o.get(x);typeof C>"u"&&o.set(x,C=[]),C.push(v)};for(let E of t){let I=!1;switch(E.type){case"redirection":{let v=await Qd(E.args,e,r);for(let x of v)h(E.subtype,E.fd,x)}break;case"argument":for(let v of E.segments)switch(v.type){case"text":u(v.text);break;case"glob":u(v.pattern),I=!0;break;case"shell":{let x=await hot(v.shell,e,r);if(v.quoted)u(x);else{let C=Mb(x);for(let R=0;R"u")throw new Error("Assertion failed: Expected a glob pattern to have been set");let x=await e.glob.match(v,{cwd:r.cwd,baseFs:e.baseFs});if(x.length===0){let C=oU(v)?". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22":"";throw new al(`No matches found: "${v}"${C}`)}for(let C of x.sort())p(C)}}if(o.size>0){let E=[];for(let[I,v]of o.entries())E.splice(E.length,0,I,String(v.length),...v);a.splice(0,0,"__ysh_set_redirects",...E,"--")}return a}function F1(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let o=ue.fromPortablePath(r.cwd),a=r.environment;typeof a.PWD<"u"&&(a={...a,PWD:o});let[n,...u]=t;if(n==="command")return $le(u[0],u.slice(1),e,{cwd:o,env:a});let A=e.builtins.get(n);if(typeof A>"u")throw new Error(`Assertion failed: A builtin should exist for "${n}"`);return ece(async({stdin:p,stdout:h,stderr:E})=>{let{stdin:I,stdout:v,stderr:x}=r;r.stdin=p,r.stdout=h,r.stderr=E;try{return await A(u,e,r)}finally{r.stdin=I,r.stdout=v,r.stderr=x}})}function dot(t,e,r){return o=>{let a=new ll.PassThrough,n=_b(t,e,Ub(r,{stdin:a}));return{stdin:a,promise:n}}}function mot(t,e,r){return o=>{let a=new ll.PassThrough,n=_b(t,e,r);return{stdin:a,promise:n}}}function ice(t,e,r,o){if(e.length===0)return t;{let a;do a=String(Math.random());while(Object.hasOwn(o.procedures,a));return o.procedures={...o.procedures},o.procedures[a]=t,F1([...e,"__ysh_run_procedure",a],r,o)}}async function sce(t,e,r){let o=t,a=null,n=null;for(;o;){let u=o.then?{...r}:r,A;switch(o.type){case"command":{let p=await Qd(o.args,e,r),h=await nce(o.envs,e,r);A=o.envs.length?F1(p,e,Ub(u,{environment:h})):F1(p,e,u)}break;case"subshell":{let p=await Qd(o.args,e,r),h=dot(o.subshell,e,u);A=ice(h,p,e,u)}break;case"group":{let p=await Qd(o.args,e,r),h=mot(o.group,e,u);A=ice(h,p,e,u)}break;case"envs":{let p=await nce(o.envs,e,r);u.environment={...u.environment,...p},A=F1(["true"],e,u)}break}if(typeof A>"u")throw new Error("Assertion failed: An action should have been generated");if(a===null)n=Ob(A,{stdin:new zl(u.stdin),stdout:new zl(u.stdout),stderr:new zl(u.stderr)});else{if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(a){case"|":n=n.pipeTo(A,1);break;case"|&":n=n.pipeTo(A,3);break}}o.then?(a=o.then.type,o=o.then.chain):o=null}if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await n.run()}async function yot(t,e,r,{background:o=!1}={}){function a(n){let u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[n%u.length];return oce.default.hex(A)}if(o){let n=r.nextBackgroundJobIndex++,u=a(n),A=`[${n}]`,p=u(A),{stdout:h,stderr:E}=tce(r,{prefix:p});return r.backgroundJobs.push(sce(t,e,Ub(r,{stdout:h,stderr:E})).catch(I=>E.write(`${I.message} +`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${p}, '${u(uy(t))}' has ended +`)})),0}return await sce(t,e,r)}async function Eot(t,e,r,{background:o=!1}={}){let a,n=A=>{a=A,r.variables["?"]=String(A)},u=async A=>{try{return await yot(A.chain,e,r,{background:o&&typeof A.then>"u"})}catch(p){if(!(p instanceof al))throw p;return r.stderr.write(`${p.message} +`),1}};for(n(await u(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":a===0&&n(await u(t.then.line));break;case"||":a!==0&&n(await u(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return a}async function _b(t,e,r){let o=r.backgroundJobs;r.backgroundJobs=[];let a=0;for(let{command:n,type:u}of t){if(a=await Eot(n,e,r,{background:u==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(a)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=o,a}function uce(t){switch(t.type){case"variable":return t.name==="@"||t.name==="#"||t.name==="*"||Number.isFinite(parseInt(t.name,10))||"defaultValue"in t&&!!t.defaultValue&&t.defaultValue.some(e=>R1(e))||"alternativeValue"in t&&!!t.alternativeValue&&t.alternativeValue.some(e=>R1(e));case"arithmetic":return AU(t.arithmetic);case"shell":return fU(t.shell);default:return!1}}function R1(t){switch(t.type){case"redirection":return t.args.some(e=>R1(e));case"argument":return t.segments.some(e=>uce(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function AU(t){switch(t.type){case"variable":return uce(t);case"number":return!1;default:return AU(t.left)||AU(t.right)}}function fU(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let o;switch(r.type){case"subshell":o=fU(r.subshell);break;case"command":o=r.envs.some(a=>a.args.some(n=>R1(n)))||r.args.some(a=>R1(a));break}if(o)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function TE(t,e=[],{baseFs:r=new Tn,builtins:o={},cwd:a=ue.toPortablePath(process.cwd()),env:n=process.env,stdin:u=process.stdin,stdout:A=process.stdout,stderr:p=process.stderr,variables:h={},glob:E=Lb}={}){let I={};for(let[C,R]of Object.entries(n))typeof R<"u"&&(I[C]=R);let v=new Map(pot);for(let[C,R]of Object.entries(o))v.set(C,R);u===null&&(u=new ll.PassThrough,u.end());let x=ND(t,E);if(!fU(x)&&x.length>0&&e.length>0){let{command:C}=x[x.length-1];for(;C.then;)C=C.then.line;let R=C.chain;for(;R.then;)R=R.then.chain;R.type==="command"&&(R.args=R.args.concat(e.map(L=>({type:"argument",segments:[{type:"text",text:L}]}))))}return await _b(x,{args:e,baseFs:r,builtins:v,initialStdin:u,initialStdout:A,initialStderr:p,glob:E},{cwd:a,environment:I,exitCode:null,procedures:{},stdin:u,stdout:A,stderr:p,variables:Object.assign({},h,{["?"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var oce,ace,ll,lce,pot,got,k1=Et(()=>{St();Nl();oce=$e(IN()),ace=ve("os"),ll=ve("stream"),lce=ve("timers/promises");qle();Yle();Jle();uU();uU();pot=new Map([["cd",async([t=(0,ace.homedir)(),...e],r,o)=>{let a=V.resolve(o.cwd,ue.toPortablePath(t));if(!(await r.baseFs.statPromise(a).catch(u=>{throw u.code==="ENOENT"?new al(`cd: no such file or directory: ${t}`):u})).isDirectory())throw new al(`cd: not a directory: ${t}`);return o.cwd=a,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${ue.fromPortablePath(r.cwd)} +`),0)],[":",async(t,e,r)=>0],["true",async(t,e,r)=>0],["false",async(t,e,r)=>1],["exit",async([t,...e],r,o)=>o.exitCode=parseInt(t??o.variables["?"],10)],["echo",async(t,e,r)=>(r.stdout.write(`${t.join(" ")} +`),0)],["sleep",async([t],e,r)=>{if(typeof t>"u")throw new al("sleep: missing operand");let o=Number(t);if(Number.isNaN(o))throw new al(`sleep: invalid time interval '${t}'`);return await(0,lce.setTimeout)(1e3*o,0)}],["__ysh_run_procedure",async(t,e,r)=>{let o=r.procedures[t[0]];return await Ob(o,{stdin:new zl(r.stdin),stdout:new zl(r.stdout),stderr:new zl(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let o=r.stdin,a=r.stdout,n=r.stderr,u=[],A=[],p=[],h=0;for(;t[h]!=="--";){let I=t[h++],{type:v,fd:x}=JSON.parse(I),C=J=>{switch(x){case null:case 0:u.push(J);break;default:throw new Error(`Unsupported file descriptor: "${x}"`)}},R=J=>{switch(x){case null:case 1:A.push(J);break;case 2:p.push(J);break;default:throw new Error(`Unsupported file descriptor: "${x}"`)}},L=Number(t[h++]),U=h+L;for(let J=h;Je.baseFs.createReadStream(V.resolve(r.cwd,ue.toPortablePath(t[J]))));break;case"<<<":C(()=>{let te=new ll.PassThrough;return process.nextTick(()=>{te.write(`${t[J]} +`),te.end()}),te});break;case"<&":C(()=>rce(Number(t[J]),1,r));break;case">":case">>":{let te=V.resolve(r.cwd,ue.toPortablePath(t[J]));R(te==="/dev/null"?new ll.Writable({autoDestroy:!0,emitClose:!0,write(ae,fe,ce){setImmediate(ce)}}):e.baseFs.createWriteStream(te,v===">>"?{flags:"a"}:void 0))}break;case">&":R(rce(Number(t[J]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${v}"`)}}if(u.length>0){let I=new ll.PassThrough;o=I;let v=x=>{if(x===u.length)I.end();else{let C=u[x]();C.pipe(I,{end:!1}),C.on("end",()=>{v(x+1)})}};v(0)}if(A.length>0){let I=new ll.PassThrough;a=I;for(let v of A)I.pipe(v)}if(p.length>0){let I=new ll.PassThrough;n=I;for(let v of p)I.pipe(v)}let E=await Ob(F1(t.slice(h+1),e,r),{stdin:new zl(o),stdout:new zl(a),stderr:new zl(n)}).run();return await Promise.all(A.map(I=>new Promise((v,x)=>{I.on("error",C=>{x(C)}),I.on("close",()=>{v()}),I.end()}))),await Promise.all(p.map(I=>new Promise((v,x)=>{I.on("error",C=>{x(C)}),I.on("close",()=>{v()}),I.end()}))),E}]]);got={addition:(t,e)=>t+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)}});var Hb=_((r4t,Ace)=>{function Cot(t,e){for(var r=-1,o=t==null?0:t.length,a=Array(o);++r{var fce=pd(),wot=Hb(),Iot=Hl(),Bot=pE(),vot=1/0,pce=fce?fce.prototype:void 0,hce=pce?pce.toString:void 0;function gce(t){if(typeof t=="string")return t;if(Iot(t))return wot(t,gce)+"";if(Bot(t))return hce?hce.call(t):"";var e=t+"";return e=="0"&&1/t==-vot?"-0":e}dce.exports=gce});var N1=_((i4t,yce)=>{var Dot=mce();function Sot(t){return t==null?"":Dot(t)}yce.exports=Sot});var pU=_((s4t,Ece)=>{function Pot(t,e,r){var o=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<0&&(r+=a),a=e>r?0:r-e>>>0,e>>>=0;for(var n=Array(a);++o{var bot=pU();function xot(t,e,r){var o=t.length;return r=r===void 0?o:r,!e&&r>=o?t:bot(t,e,r)}Cce.exports=xot});var hU=_((a4t,Ice)=>{var kot="\\ud800-\\udfff",Qot="\\u0300-\\u036f",Fot="\\ufe20-\\ufe2f",Rot="\\u20d0-\\u20ff",Tot=Qot+Fot+Rot,Not="\\ufe0e\\ufe0f",Lot="\\u200d",Oot=RegExp("["+Lot+kot+Tot+Not+"]");function Mot(t){return Oot.test(t)}Ice.exports=Mot});var vce=_((l4t,Bce)=>{function Uot(t){return t.split("")}Bce.exports=Uot});var Fce=_((c4t,Qce)=>{var Dce="\\ud800-\\udfff",_ot="\\u0300-\\u036f",Hot="\\ufe20-\\ufe2f",jot="\\u20d0-\\u20ff",Got=_ot+Hot+jot,qot="\\ufe0e\\ufe0f",Yot="["+Dce+"]",gU="["+Got+"]",dU="\\ud83c[\\udffb-\\udfff]",Wot="(?:"+gU+"|"+dU+")",Sce="[^"+Dce+"]",Pce="(?:\\ud83c[\\udde6-\\uddff]){2}",bce="[\\ud800-\\udbff][\\udc00-\\udfff]",Kot="\\u200d",xce=Wot+"?",kce="["+qot+"]?",Vot="(?:"+Kot+"(?:"+[Sce,Pce,bce].join("|")+")"+kce+xce+")*",Jot=kce+xce+Vot,zot="(?:"+[Sce+gU+"?",gU,Pce,bce,Yot].join("|")+")",Xot=RegExp(dU+"(?="+dU+")|"+zot+Jot,"g");function Zot(t){return t.match(Xot)||[]}Qce.exports=Zot});var Tce=_((u4t,Rce)=>{var $ot=vce(),eat=hU(),tat=Fce();function rat(t){return eat(t)?tat(t):$ot(t)}Rce.exports=rat});var Lce=_((A4t,Nce)=>{var nat=wce(),iat=hU(),sat=Tce(),oat=N1();function aat(t){return function(e){e=oat(e);var r=iat(e)?sat(e):void 0,o=r?r[0]:e.charAt(0),a=r?nat(r,1).join(""):e.slice(1);return o[t]()+a}}Nce.exports=aat});var Mce=_((f4t,Oce)=>{var lat=Lce(),cat=lat("toUpperCase");Oce.exports=cat});var mU=_((p4t,Uce)=>{var uat=N1(),Aat=Mce();function fat(t){return Aat(uat(t).toLowerCase())}Uce.exports=fat});var _ce=_((h4t,jb)=>{function pat(){var t=0,e=1,r=2,o=3,a=4,n=5,u=6,A=7,p=8,h=9,E=10,I=11,v=12,x=13,C=14,R=15,L=16,U=17,J=0,te=1,ae=2,fe=3,ce=4;function me(g,Ee){return 55296<=g.charCodeAt(Ee)&&g.charCodeAt(Ee)<=56319&&56320<=g.charCodeAt(Ee+1)&&g.charCodeAt(Ee+1)<=57343}function he(g,Ee){Ee===void 0&&(Ee=0);var Se=g.charCodeAt(Ee);if(55296<=Se&&Se<=56319&&Ee=1){var le=g.charCodeAt(Ee-1),ne=Se;return 55296<=le&&le<=56319?(le-55296)*1024+(ne-56320)+65536:ne}return Se}function Be(g,Ee,Se){var le=[g].concat(Ee).concat([Se]),ne=le[le.length-2],ee=Se,Ie=le.lastIndexOf(C);if(Ie>1&&le.slice(1,Ie).every(function(H){return H==o})&&[o,x,U].indexOf(g)==-1)return ae;var Fe=le.lastIndexOf(a);if(Fe>0&&le.slice(1,Fe).every(function(H){return H==a})&&[v,a].indexOf(ne)==-1)return le.filter(function(H){return H==a}).length%2==1?fe:ce;if(ne==t&&ee==e)return J;if(ne==r||ne==t||ne==e)return ee==C&&Ee.every(function(H){return H==o})?ae:te;if(ee==r||ee==t||ee==e)return te;if(ne==u&&(ee==u||ee==A||ee==h||ee==E))return J;if((ne==h||ne==A)&&(ee==A||ee==p))return J;if((ne==E||ne==p)&&ee==p)return J;if(ee==o||ee==R)return J;if(ee==n)return J;if(ne==v)return J;var At=le.indexOf(o)!=-1?le.lastIndexOf(o)-1:le.length-2;return[x,U].indexOf(le[At])!=-1&&le.slice(At+1,-1).every(function(H){return H==o})&&ee==C||ne==R&&[L,U].indexOf(ee)!=-1?J:Ee.indexOf(a)!=-1?ae:ne==a&&ee==a?J:te}this.nextBreak=function(g,Ee){if(Ee===void 0&&(Ee=0),Ee<0)return 0;if(Ee>=g.length-1)return g.length;for(var Se=we(he(g,Ee)),le=[],ne=Ee+1;ne{var hat=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,Gb;function gat(){if(Gb)return Gb;if(typeof Intl.Segmenter<"u"){let t=new Intl.Segmenter("en",{granularity:"grapheme"});return Gb=e=>Array.from(t.segment(e),({segment:r})=>r)}else{let t=_ce(),e=new t;return Gb=r=>e.splitGraphemes(r)}}Hce.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let o=r-e,a="",n=0,u=0;for(;t.length>0;){let A=t.match(hat)||[t,t,void 0],p=gat()(A[1]),h=Math.min(e-n,p.length);p=p.slice(h);let E=Math.min(o-u,p.length);a+=p.slice(0,E).join(""),n+=h,u+=E,typeof A[2]<"u"&&(a+=A[2]),t=t.slice(A[0].length)}return a}});var rn,L1=Et(()=>{rn=process.env.YARN_IS_TEST_ENV?"0.0.0":"4.1.0"});function Vce(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let a=Wu(t===null?0:t);return!r&&t===null?Mt(e,a,"grey"):a}function yU(t,{configuration:e,json:r}){let o=Vce(t,{configuration:e,json:r});if(!o||t===null||t===0)return o;let a=wr[t],n=`https://yarnpkg.com/advanced/error-codes#${o}---${a}`.toLowerCase();return Zy(e,o,n)}async function LE({configuration:t,stdout:e,forceError:r},o){let a=await Nt.start({configuration:t,stdout:e,includeFooter:!1},async n=>{let u=!1,A=!1;for(let p of o)typeof p.option<"u"&&(p.error||r?(A=!0,n.reportError(50,p.message)):(u=!0,n.reportWarning(50,p.message)),p.callback?.());u&&!A&&n.reportSeparator()});return a.hasErrors()?a.exitCode():null}var Wce,qb,dat,Gce,qce,Ah,Kce,Yce,mat,yat,Yb,Eat,Nt,O1=Et(()=>{Wce=$e(jce()),qb=$e(td());fS();Yl();L1();Gl();dat="\xB7",Gce=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],qce=80,Ah=qb.default.GITHUB_ACTIONS?{start:t=>`::group::${t} +`,end:t=>`::endgroup:: +`}:qb.default.TRAVIS?{start:t=>`travis_fold:start:${t} +`,end:t=>`travis_fold:end:${t} +`}:qb.default.GITLAB?{start:t=>`section_start:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}[collapsed=true]\r\x1B[0K${t} +`,end:t=>`section_end:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}\r\x1B[0K`}:null,Kce=Ah!==null,Yce=new Date,mat=["iTerm.app","Apple_Terminal","WarpTerminal","vscode"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,yat=t=>t,Yb=yat({patrick:{date:[17,3],chars:["\u{1F340}","\u{1F331}"],size:40},simba:{date:[19,7],chars:["\u{1F981}","\u{1F334}"],size:40},jack:{date:[31,10],chars:["\u{1F383}","\u{1F987}"],size:40},hogsfather:{date:[31,12],chars:["\u{1F389}","\u{1F384}"],size:40},default:{chars:["=","-"],size:80}}),Eat=mat&&Object.keys(Yb).find(t=>{let e=Yb[t];return!(e.date&&(e.date[0]!==Yce.getDate()||e.date[1]!==Yce.getMonth()+1))})||"default";Nt=class extends Xs{constructor({configuration:r,stdout:o,json:a=!1,forceSectionAlignment:n=!1,includeNames:u=!0,includePrefix:A=!0,includeFooter:p=!0,includeLogs:h=!a,includeInfos:E=h,includeWarnings:I=h}){super();this.uncommitted=new Set;this.warningCount=0;this.errorCount=0;this.timerFooter=[];this.startTime=Date.now();this.indent=0;this.level=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;if(XI(this,{configuration:r}),this.configuration=r,this.forceSectionAlignment=n,this.includeNames=u,this.includePrefix=A,this.includeFooter=p,this.includeInfos=E,this.includeWarnings=I,this.json=a,this.stdout=o,r.get("enableProgressBars")&&!a&&o.isTTY&&o.columns>22){let v=r.get("progressBarStyle")||Eat;if(!Object.hasOwn(Yb,v))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=Yb[v];let x=Math.min(this.getRecommendedLength(),80);this.progressMaxScaledSize=Math.floor(this.progressStyle.size*x/80)}}static async start(r,o){let a=new this(r),n=process.emitWarning;process.emitWarning=(u,A)=>{if(typeof u!="string"){let h=u;u=h.message,A=A??h.name}let p=typeof A<"u"?`${A}: ${u}`:u;a.reportWarning(0,p)},r.includeVersion&&a.reportInfo(0,yd(r.configuration,`Yarn ${rn}`,2));try{await o(a)}catch(u){a.reportExceptionOnce(u)}finally{await a.finalize(),process.emitWarning=n}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}getRecommendedLength(){let o=this.progressStyle!==null?this.stdout.columns-1:super.getRecommendedLength();return Math.max(40,o-12-this.indent*2)}startSectionSync({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}async startSectionPromise({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return await n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}startTimerImpl(r,o,a){return{cb:typeof o=="function"?o:a,reportHeader:()=>{this.level+=1,this.reportInfo(null,`\u250C ${r}`),this.indent+=1,Ah!==null&&!this.json&&this.includeInfos&&this.stdout.write(Ah.start(r))},reportFooter:A=>{if(this.indent-=1,Ah!==null&&!this.json&&this.includeInfos){this.stdout.write(Ah.end(r));for(let p of this.timerFooter)p()}this.configuration.get("enableTimers")&&A>200?this.reportInfo(null,`\u2514 Completed in ${Mt(this.configuration,A,yt.DURATION)}`):this.reportInfo(null,"\u2514 Completed"),this.level-=1},skipIfEmpty:(typeof o=="function"?{}:o).skipIfEmpty}}startTimerSync(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionSync(u,n)}async startTimerPromise(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionPromise(u,n)}reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(null,"")}reportInfo(r,o){if(!this.includeInfos)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"",u=`${this.formatPrefix(n,"blueBright")}${o}`;this.json?this.reportJson({type:"info",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(u)}reportWarning(r,o){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"warning",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"yellowBright")}${o}`)}reportError(r,o){this.errorCount+=1,this.timerFooter.push(()=>this.reportErrorImpl(r,o)),this.reportErrorImpl(r,o)}reportErrorImpl(r,o){this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"error",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"redBright")}${o}`,{truncate:!1})}reportFold(r,o){if(!Ah)return;let a=`${Ah.start(r)}${o}${Ah.end(r)}`;this.timerFooter.push(()=>this.stdout.write(a))}reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(r.hasProgress&&r.hasTitle)throw new Error("Unimplemented: Progress bars can't have both progress and titles.");let o=!1,a=Promise.resolve().then(async()=>{let u={progress:r.hasProgress?0:void 0,title:r.hasTitle?"":void 0};this.progress.set(r,{definition:u,lastScaledSize:r.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:A,title:p}of r)o||u.progress===A&&u.title===p||(u.progress=A,u.title=p,this.refreshProgress());n()}),n=()=>{o||(o=!0,this.progress.delete(r),this.refreshProgress({delta:1}))};return{...a,stop:n}}reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>0?r="Failed with errors":this.warningCount>0?r="Done with warnings":r="Done";let o=Mt(this.configuration,Date.now()-this.startTime,yt.DURATION),a=this.configuration.get("enableTimers")?`${r} in ${o}`:r;this.errorCount>0?this.reportError(0,a):this.warningCount>0?this.reportWarning(0,a):this.reportInfo(0,a)}writeLine(r,{truncate:o}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(r,{truncate:o})} +`),this.writeProgress()}writeLines(r,{truncate:o}={}){this.clearProgress({delta:r.length});for(let a of r)this.stdout.write(`${this.truncate(a,{truncate:o})} +`);this.writeProgress()}commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let o of r)o.committed=!0,o.action()}clearProgress({delta:r=0,clear:o=!1}){this.progressStyle!==null&&this.progress.size+r>0&&(this.stdout.write(`\x1B[${this.progress.size+r}A`),(r>0||o)&&this.stdout.write("\x1B[0J"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let r=Date.now();r-this.progressTime>qce&&(this.progressFrame=(this.progressFrame+1)%Gce.length,this.progressTime=r);let o=Gce[this.progressFrame];for(let a of this.progress.values()){let n="";if(typeof a.lastScaledSize<"u"){let h=this.progressStyle.chars[0].repeat(a.lastScaledSize),E=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-a.lastScaledSize);n=` ${h}${E}`}let u=this.formatName(null),A=u?`${u}: `:"",p=a.definition.title?` ${a.definition.title}`:"";this.stdout.write(`${Mt(this.configuration,"\u27A4","blueBright")} ${A}${o}${n}${p} +`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},qce)}refreshProgress({delta:r=0,force:o=!1}={}){let a=!1,n=!1;if(o||this.progress.size===0)a=!0;else for(let u of this.progress.values()){let A=typeof u.definition.progress<"u"?Math.trunc(this.progressMaxScaledSize*u.definition.progress):void 0,p=u.lastScaledSize;u.lastScaledSize=A;let h=u.lastTitle;if(u.lastTitle=u.definition.title,A!==p||(n=h!==u.definition.title)){a=!0;break}}a&&(this.clearProgress({delta:r,clear:n}),this.writeProgress())}truncate(r,{truncate:o}={}){return this.progressStyle===null&&(o=!1),typeof o>"u"&&(o=this.configuration.get("preferTruncatedLines")),o&&(r=(0,Wce.default)(r,0,this.stdout.columns-1)),r}formatName(r){return this.includeNames?Vce(r,{configuration:this.configuration,json:this.json}):""}formatPrefix(r,o){return this.includePrefix?`${Mt(this.configuration,"\u27A4",o)} ${r}${this.formatIndent()}`:""}formatNameWithHyperlink(r){return this.includeNames?yU(r,{configuration:this.configuration,json:this.json}):""}formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ".repeat(this.indent):`${dat} `}}});var un={};Vt(un,{PackageManager:()=>Xce,detectPackageManager:()=>Zce,executePackageAccessibleBinary:()=>nue,executePackageScript:()=>Wb,executePackageShellcode:()=>EU,executeWorkspaceAccessibleBinary:()=>Sat,executeWorkspaceLifecycleScript:()=>tue,executeWorkspaceScript:()=>eue,getPackageAccessibleBinaries:()=>Kb,getWorkspaceAccessibleBinaries:()=>rue,hasPackageScript:()=>Bat,hasWorkspaceScript:()=>CU,isNodeScript:()=>wU,makeScriptEnv:()=>M1,maybeExecuteWorkspaceLifecycleScript:()=>Dat,prepareExternalProject:()=>Iat});async function fh(t,e,r,o=[]){if(process.platform==="win32"){let a=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${o.map(n=>`"${n.replace('"','""')}"`).join(" ")} %*`;await oe.writeFilePromise(V.format({dir:t,name:e,ext:".cmd"}),a)}await oe.writeFilePromise(V.join(t,e),`#!/bin/sh +exec "${r}" ${o.map(a=>`'${a.replace(/'/g,`'"'"'`)}'`).join(" ")} "$@" +`,{mode:493})}async function Zce(t){let e=await Ot.tryFind(t);if(e?.packageManager){let o=UP(e.packageManager);if(o?.name){let a=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[n]=o.reference.split(".");switch(o.name){case"yarn":return{packageManagerField:!0,packageManager:Number(n)===1?"Yarn Classic":"Yarn",reason:a};case"npm":return{packageManagerField:!0,packageManager:"npm",reason:a};case"pnpm":return{packageManagerField:!0,packageManager:"pnpm",reason:a}}}}let r;try{r=await oe.readFilePromise(V.join(t,dr.lockfile),"utf8")}catch{}return r!==void 0?r.match(/^__metadata:$/m)?{packageManager:"Yarn",reason:'"__metadata" key found in yarn.lock'}:{packageManager:"Yarn Classic",reason:'"__metadata" key not found in yarn.lock, must be a Yarn classic lockfile'}:oe.existsSync(V.join(t,"package-lock.json"))?{packageManager:"npm",reason:`found npm's "package-lock.json" lockfile`}:oe.existsSync(V.join(t,"pnpm-lock.yaml"))?{packageManager:"pnpm",reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function M1({project:t,locator:e,binFolder:r,ignoreCorepack:o,lifecycleScript:a,baseEnv:n=t?.configuration.env??process.env}){let u={};for(let[E,I]of Object.entries(n))typeof I<"u"&&(u[E.toLowerCase()!=="path"?E:"PATH"]=I);let A=ue.fromPortablePath(r);u.BERRY_BIN_FOLDER=ue.fromPortablePath(A);let p=process.env.COREPACK_ROOT&&!o?ue.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([fh(r,"node",process.execPath),...rn!==null?[fh(r,"run",process.execPath,[p,"run"]),fh(r,"yarn",process.execPath,[p]),fh(r,"yarnpkg",process.execPath,[p]),fh(r,"node-gyp",process.execPath,[p,"run","--top-level","node-gyp"])]:[]]),t&&(u.INIT_CWD=ue.fromPortablePath(t.configuration.startingCwd),u.PROJECT_CWD=ue.fromPortablePath(t.cwd)),u.PATH=u.PATH?`${A}${ue.delimiter}${u.PATH}`:`${A}`,u.npm_execpath=`${A}${ue.sep}yarn`,u.npm_node_execpath=`${A}${ue.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let E=t.tryWorkspaceByLocator(e),I=E?E.manifest.version??"":t.storedPackages.get(e.locatorHash).version??"";u.npm_package_name=fn(e),u.npm_package_version=I;let v;if(E)v=E.cwd;else{let x=t.storedPackages.get(e.locatorHash);if(!x)throw new Error(`Package for ${jr(t.configuration,e)} not found in the project`);let C=t.configuration.getLinkers(),R={project:t,report:new Nt({stdout:new ph.PassThrough,configuration:t.configuration})},L=C.find(U=>U.supportsPackage(x,R));if(!L)throw new Error(`The package ${jr(t.configuration,x)} isn't supported by any of the available linkers`);v=await L.findPackageLocation(x,R)}u.npm_package_json=ue.fromPortablePath(V.join(v,dr.manifest))}let h=rn!==null?`yarn/${rn}`:`yarn/${Df("@yarnpkg/core").version}-core`;return u.npm_config_user_agent=`${h} npm/? node/${process.version} ${process.platform} ${process.arch}`,a&&(u.npm_lifecycle_event=a),t&&await t.configuration.triggerHook(E=>E.setupScriptEnvironment,t,u,async(E,I,v)=>await fh(r,E,I,v)),u}async function Iat(t,e,{configuration:r,report:o,workspace:a=null,locator:n=null}){await wat(async()=>{await oe.mktempPromise(async u=>{let A=V.join(u,"pack.log"),p=null,{stdout:h,stderr:E}=r.getSubprocessStreams(A,{prefix:ue.fromPortablePath(t),report:o}),I=n&&Hc(n)?r1(n):n,v=I?ba(I):"an external project";h.write(`Packing ${v} from sources +`);let x=await Zce(t),C;x!==null?(h.write(`Using ${x.packageManager} for bootstrap. Reason: ${x.reason} + +`),C=x.packageManager):(h.write(`No package manager configuration detected; defaulting to Yarn + +`),C="Yarn");let R=C==="Yarn"&&!x?.packageManagerField;await oe.mktempPromise(async L=>{let U=await M1({binFolder:L,ignoreCorepack:R}),te=new Map([["Yarn Classic",async()=>{let fe=a!==null?["workspace",a]:[],ce=V.join(t,dr.manifest),me=await oe.readFilePromise(ce),he=await qc(process.execPath,[process.argv[1],"set","version","classic","--only-if-needed","--yarn-path"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(he.code!==0)return he.code;await oe.writeFilePromise(ce,me),await oe.appendFilePromise(V.join(t,".npmignore"),`/.yarn +`),h.write(` +`),delete U.NODE_ENV;let Be=await qc("yarn",["install"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(Be.code!==0)return Be.code;h.write(` +`);let we=await qc("yarn",[...fe,"pack","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return we.code!==0?we.code:0}],["Yarn",async()=>{let fe=a!==null?["workspace",a]:[];U.YARN_ENABLE_INLINE_BUILDS="1";let ce=V.join(t,dr.lockfile);await oe.existsPromise(ce)||await oe.writeFilePromise(ce,"");let me=await qc("yarn",[...fe,"pack","--install-if-needed","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return me.code!==0?me.code:0}],["npm",async()=>{if(a!==null){let Ee=new ph.PassThrough,Se=Vy(Ee);Ee.pipe(h,{end:!1});let le=await qc("npm",["--version"],{cwd:t,env:U,stdin:p,stdout:Ee,stderr:E,end:0});if(Ee.end(),le.code!==0)return h.end(),E.end(),le.code;let ne=(await Se).toString().trim();if(!kf(ne,">=7.x")){let ee=eA(null,"npm"),Ie=In(ee,ne),Fe=In(ee,">=7.x");throw new Error(`Workspaces aren't supported by ${Gn(r,Ie)}; please upgrade to ${Gn(r,Fe)} (npm has been detected as the primary package manager for ${Mt(r,t,yt.PATH)})`)}}let fe=a!==null?["--workspace",a]:[];delete U.npm_config_user_agent,delete U.npm_config_production,delete U.NPM_CONFIG_PRODUCTION,delete U.NODE_ENV;let ce=await qc("npm",["install","--legacy-peer-deps"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(ce.code!==0)return ce.code;let me=new ph.PassThrough,he=Vy(me);me.pipe(h);let Be=await qc("npm",["pack","--silent",...fe],{cwd:t,env:U,stdin:p,stdout:me,stderr:E});if(Be.code!==0)return Be.code;let we=(await he).toString().trim().replace(/^.*\n/s,""),g=V.resolve(t,ue.toPortablePath(we));return await oe.renamePromise(g,e),0}]]).get(C);if(typeof te>"u")throw new Error("Assertion failed: Unsupported workflow");let ae=await te();if(!(ae===0||typeof ae>"u"))throw oe.detachTemp(u),new zt(58,`Packing the package failed (exit code ${ae}, logs can be found here: ${Mt(r,A,yt.PATH)})`)})})})}async function Bat(t,e,{project:r}){let o=r.tryWorkspaceByLocator(t);if(o!==null)return CU(o,e);let a=r.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r.configuration,t)} not found in the project`);return await Jl.openPromise(async n=>{let u=r.configuration,A=r.configuration.getLinkers(),p={project:r,report:new Nt({stdout:new ph.PassThrough,configuration:u})},h=A.find(x=>x.supportsPackage(a,p));if(!h)throw new Error(`The package ${jr(r.configuration,a)} isn't supported by any of the available linkers`);let E=await h.findPackageLocation(a,p),I=new gn(E,{baseFs:n});return(await Ot.find(Bt.dot,{baseFs:I})).scripts.has(e)})}async function Wb(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{manifest:h,env:E,cwd:I}=await $ce(t,{project:a,binFolder:p,cwd:o,lifecycleScript:e}),v=h.scripts.get(e);if(typeof v>"u")return 1;let x=async()=>await TE(v,r,{cwd:I,env:E,stdin:n,stdout:u,stderr:A});return await(await a.configuration.reduceHook(R=>R.wrapScriptExecution,x,a,t,e,{script:v,args:r,cwd:I,env:E,stdin:n,stdout:u,stderr:A}))()})}async function EU(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{env:h,cwd:E}=await $ce(t,{project:a,binFolder:p,cwd:o});return await TE(e,r,{cwd:E,env:h,stdin:n,stdout:u,stderr:A})})}async function vat(t,{binFolder:e,cwd:r,lifecycleScript:o}){let a=await M1({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:o});return await IU(e,await rue(t)),typeof r>"u"&&(r=V.dirname(await oe.realpathPromise(V.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:a,cwd:r}}async function $ce(t,{project:e,binFolder:r,cwd:o,lifecycleScript:a}){let n=e.tryWorkspaceByLocator(t);if(n!==null)return vat(n,{binFolder:r,cwd:o,lifecycleScript:a});let u=e.storedPackages.get(t.locatorHash);if(!u)throw new Error(`Package for ${jr(e.configuration,t)} not found in the project`);return await Jl.openPromise(async A=>{let p=e.configuration,h=e.configuration.getLinkers(),E={project:e,report:new Nt({stdout:new ph.PassThrough,configuration:p})},I=h.find(L=>L.supportsPackage(u,E));if(!I)throw new Error(`The package ${jr(e.configuration,u)} isn't supported by any of the available linkers`);let v=await M1({project:e,locator:t,binFolder:r,lifecycleScript:a});await IU(r,await Kb(t,{project:e}));let x=await I.findPackageLocation(u,E),C=new gn(x,{baseFs:A}),R=await Ot.find(Bt.dot,{baseFs:C});return typeof o>"u"&&(o=x),{manifest:R,binFolder:r,env:v,cwd:o}})}async function eue(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u}){return await Wb(t.anchoredLocator,e,r,{cwd:o,project:t.project,stdin:a,stdout:n,stderr:u})}function CU(t,e){return t.manifest.scripts.has(e)}async function tue(t,e,{cwd:r,report:o}){let{configuration:a}=t.project,n=null;await oe.mktempPromise(async u=>{let A=V.join(u,`${e}.log`),p=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${ue.fromPortablePath(t.cwd)}") +`,{stdout:h,stderr:E}=a.getSubprocessStreams(A,{report:o,prefix:jr(a,t.anchoredLocator),header:p});o.reportInfo(36,`Calling the "${e}" lifecycle script`);let I=await eue(t,e,[],{cwd:r,stdin:n,stdout:h,stderr:E});if(h.end(),E.end(),I!==0)throw oe.detachTemp(u),new zt(36,`${(0,Jce.default)(e)} script failed (exit code ${Mt(a,I,yt.NUMBER)}, logs can be found here: ${Mt(a,A,yt.PATH)}); run ${Mt(a,`yarn ${e}`,yt.CODE)} to investigate`)})}async function Dat(t,e,r){CU(t,e)&&await tue(t,e,r)}function wU(t){let e=V.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0;if(e===".exe"||e===".bin")return!1;let r=Buffer.alloc(4),o;try{o=oe.openSync(t,"r")}catch{return!0}try{oe.readSync(o,r,0,r.length,0)}finally{oe.closeSync(o)}let a=r.readUint32BE();return!(a===3405691582||a===3489328638||a===2135247942||(a&4294901760)===1297743872)}async function Kb(t,{project:e}){let r=e.configuration,o=new Map,a=e.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r,t)} not found in the project`);let n=new ph.Writable,u=r.getLinkers(),A={project:e,report:new Nt({configuration:r,stdout:n})},p=new Set([t.locatorHash]);for(let E of a.dependencies.values()){let I=e.storedResolutions.get(E.descriptorHash);if(!I)throw new Error(`Assertion failed: The resolution (${Gn(r,E)}) should have been registered`);p.add(I)}let h=await Promise.all(Array.from(p,async E=>{let I=e.storedPackages.get(E);if(!I)throw new Error(`Assertion failed: The package (${E}) should have been registered`);if(I.bin.size===0)return sl.skip;let v=u.find(C=>C.supportsPackage(I,A));if(!v)return sl.skip;let x=null;try{x=await v.findPackageLocation(I,A)}catch(C){if(C.code==="LOCATOR_NOT_INSTALLED")return sl.skip;throw C}return{dependency:I,packageLocation:x}}));for(let E of h){if(E===sl.skip)continue;let{dependency:I,packageLocation:v}=E;for(let[x,C]of I.bin){let R=V.resolve(v,C);o.set(x,[I,ue.fromPortablePath(R),wU(R)])}}return o}async function rue(t){return await Kb(t.anchoredLocator,{project:t.project})}async function IU(t,e){await Promise.all(Array.from(e,([r,[,o,a]])=>a?fh(t,r,process.execPath,[o]):fh(t,r,o,[])))}async function nue(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A,nodeArgs:p=[],packageAccessibleBinaries:h}){h??=await Kb(t,{project:a});let E=h.get(e);if(!E)throw new Error(`Binary not found (${e}) for ${jr(a.configuration,t)}`);return await oe.mktempPromise(async I=>{let[,v]=E,x=await M1({project:a,locator:t,binFolder:I});await IU(x.BERRY_BIN_FOLDER,h);let C=wU(ue.toPortablePath(v))?qc(process.execPath,[...p,v,...r],{cwd:o,env:x,stdin:n,stdout:u,stderr:A}):qc(v,r,{cwd:o,env:x,stdin:n,stdout:u,stderr:A}),R;try{R=await C}finally{await oe.removePromise(x.BERRY_BIN_FOLDER)}return R.code})}async function Sat(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A}){return await nue(t.anchoredLocator,e,r,{project:t.project,cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A})}var Jce,zce,ph,Xce,Cat,wat,BU=Et(()=>{St();St();nA();k1();Jce=$e(mU()),zce=$e(id()),ph=ve("stream");fE();Yl();O1();L1();Db();Gl();jl();Qf();bo();Xce=(a=>(a.Yarn1="Yarn Classic",a.Yarn2="Yarn",a.Npm="npm",a.Pnpm="pnpm",a))(Xce||{});Cat=2,wat=(0,zce.default)(Cat)});var OE=_((L4t,sue)=>{"use strict";var iue=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"]]);sue.exports=t=>t?Object.keys(t).map(e=>[iue.has(e)?iue.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var UE=_((O4t,hue)=>{"use strict";var oue=typeof process=="object"&&process?process:{stdout:null,stderr:null},Pat=ve("events"),aue=ve("stream"),lue=ve("string_decoder").StringDecoder,Mf=Symbol("EOF"),Uf=Symbol("maybeEmitEnd"),hh=Symbol("emittedEnd"),Vb=Symbol("emittingEnd"),U1=Symbol("emittedError"),Jb=Symbol("closed"),cue=Symbol("read"),zb=Symbol("flush"),uue=Symbol("flushChunk"),ka=Symbol("encoding"),_f=Symbol("decoder"),Xb=Symbol("flowing"),_1=Symbol("paused"),ME=Symbol("resume"),Fs=Symbol("bufferLength"),vU=Symbol("bufferPush"),DU=Symbol("bufferShift"),Fo=Symbol("objectMode"),Ro=Symbol("destroyed"),SU=Symbol("emitData"),Aue=Symbol("emitEnd"),PU=Symbol("emitEnd2"),Hf=Symbol("async"),H1=t=>Promise.resolve().then(t),fue=global._MP_NO_ITERATOR_SYMBOLS_!=="1",bat=fue&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),xat=fue&&Symbol.iterator||Symbol("iterator not implemented"),kat=t=>t==="end"||t==="finish"||t==="prefinish",Qat=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Fat=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),Zb=class{constructor(e,r,o){this.src=e,this.dest=r,this.opts=o,this.ondrain=()=>e[ME](),r.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},bU=class extends Zb{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,o){super(e,r,o),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}};hue.exports=class pue extends aue{constructor(e){super(),this[Xb]=!1,this[_1]=!1,this.pipes=[],this.buffer=[],this[Fo]=e&&e.objectMode||!1,this[Fo]?this[ka]=null:this[ka]=e&&e.encoding||null,this[ka]==="buffer"&&(this[ka]=null),this[Hf]=e&&!!e.async||!1,this[_f]=this[ka]?new lue(this[ka]):null,this[Mf]=!1,this[hh]=!1,this[Vb]=!1,this[Jb]=!1,this[U1]=null,this.writable=!0,this.readable=!0,this[Fs]=0,this[Ro]=!1}get bufferLength(){return this[Fs]}get encoding(){return this[ka]}set encoding(e){if(this[Fo])throw new Error("cannot set encoding in objectMode");if(this[ka]&&e!==this[ka]&&(this[_f]&&this[_f].lastNeed||this[Fs]))throw new Error("cannot change encoding");this[ka]!==e&&(this[_f]=e?new lue(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[_f].write(r)))),this[ka]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Fo]}set objectMode(e){this[Fo]=this[Fo]||!!e}get async(){return this[Hf]}set async(e){this[Hf]=this[Hf]||!!e}write(e,r,o){if(this[Mf])throw new Error("write after end");if(this[Ro])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(o=r,r="utf8"),r||(r="utf8");let a=this[Hf]?H1:n=>n();return!this[Fo]&&!Buffer.isBuffer(e)&&(Fat(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):Qat(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),this[Fo]?(this.flowing&&this[Fs]!==0&&this[zb](!0),this.flowing?this.emit("data",e):this[vU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):e.length?(typeof e=="string"&&!(r===this[ka]&&!this[_f].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[ka]&&(e=this[_f].write(e)),this.flowing&&this[Fs]!==0&&this[zb](!0),this.flowing?this.emit("data",e):this[vU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):(this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing)}read(e){if(this[Ro])return null;if(this[Fs]===0||e===0||e>this[Fs])return this[Uf](),null;this[Fo]&&(e=null),this.buffer.length>1&&!this[Fo]&&(this.encoding?this.buffer=[this.buffer.join("")]:this.buffer=[Buffer.concat(this.buffer,this[Fs])]);let r=this[cue](e||null,this.buffer[0]);return this[Uf](),r}[cue](e,r){return e===r.length||e===null?this[DU]():(this.buffer[0]=r.slice(e),r=r.slice(0,e),this[Fs]-=e),this.emit("data",r),!this.buffer.length&&!this[Mf]&&this.emit("drain"),r}end(e,r,o){return typeof e=="function"&&(o=e,e=null),typeof r=="function"&&(o=r,r="utf8"),e&&this.write(e,r),o&&this.once("end",o),this[Mf]=!0,this.writable=!1,(this.flowing||!this[_1])&&this[Uf](),this}[ME](){this[Ro]||(this[_1]=!1,this[Xb]=!0,this.emit("resume"),this.buffer.length?this[zb]():this[Mf]?this[Uf]():this.emit("drain"))}resume(){return this[ME]()}pause(){this[Xb]=!1,this[_1]=!0}get destroyed(){return this[Ro]}get flowing(){return this[Xb]}get paused(){return this[_1]}[vU](e){this[Fo]?this[Fs]+=1:this[Fs]+=e.length,this.buffer.push(e)}[DU](){return this.buffer.length&&(this[Fo]?this[Fs]-=1:this[Fs]-=this.buffer[0].length),this.buffer.shift()}[zb](e){do;while(this[uue](this[DU]()));!e&&!this.buffer.length&&!this[Mf]&&this.emit("drain")}[uue](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[Ro])return;let o=this[hh];return r=r||{},e===oue.stdout||e===oue.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,o?r.end&&e.end():(this.pipes.push(r.proxyErrors?new bU(this,e,r):new Zb(this,e,r)),this[Hf]?H1(()=>this[ME]()):this[ME]()),e}unpipe(e){let r=this.pipes.find(o=>o.dest===e);r&&(this.pipes.splice(this.pipes.indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let o=super.on(e,r);return e==="data"&&!this.pipes.length&&!this.flowing?this[ME]():e==="readable"&&this[Fs]!==0?super.emit("readable"):kat(e)&&this[hh]?(super.emit(e),this.removeAllListeners(e)):e==="error"&&this[U1]&&(this[Hf]?H1(()=>r.call(this,this[U1])):r.call(this,this[U1])),o}get emittedEnd(){return this[hh]}[Uf](){!this[Vb]&&!this[hh]&&!this[Ro]&&this.buffer.length===0&&this[Mf]&&(this[Vb]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[Jb]&&this.emit("close"),this[Vb]=!1)}emit(e,r,...o){if(e!=="error"&&e!=="close"&&e!==Ro&&this[Ro])return;if(e==="data")return r?this[Hf]?H1(()=>this[SU](r)):this[SU](r):!1;if(e==="end")return this[Aue]();if(e==="close"){if(this[Jb]=!0,!this[hh]&&!this[Ro])return;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[U1]=r;let n=super.emit("error",r);return this[Uf](),n}else if(e==="resume"){let n=super.emit("resume");return this[Uf](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,r,...o);return this[Uf](),a}[SU](e){for(let o of this.pipes)o.dest.write(e)===!1&&this.pause();let r=super.emit("data",e);return this[Uf](),r}[Aue](){this[hh]||(this[hh]=!0,this.readable=!1,this[Hf]?H1(()=>this[PU]()):this[PU]())}[PU](){if(this[_f]){let r=this[_f].end();if(r){for(let o of this.pipes)o.dest.write(r);super.emit("data",r)}}for(let r of this.pipes)r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}collect(){let e=[];this[Fo]||(e.dataLength=0);let r=this.promise();return this.on("data",o=>{e.push(o),this[Fo]||(e.dataLength+=o.length)}),r.then(()=>e)}concat(){return this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this[ka]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(Ro,()=>r(new Error("stream destroyed"))),this.on("error",o=>r(o)),this.on("end",()=>e())})}[bat](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[Mf])return Promise.resolve({done:!0});let o=null,a=null,n=h=>{this.removeListener("data",u),this.removeListener("end",A),a(h)},u=h=>{this.removeListener("error",n),this.removeListener("end",A),this.pause(),o({value:h,done:!!this[Mf]})},A=()=>{this.removeListener("error",n),this.removeListener("data",u),o({done:!0})},p=()=>n(new Error("stream destroyed"));return new Promise((h,E)=>{a=E,o=h,this.once(Ro,p),this.once("error",n),this.once("end",A),this.once("data",u)})}}}[xat](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[Ro]?(e?this.emit("error",e):this.emit(Ro),this):(this[Ro]=!0,this.buffer.length=0,this[Fs]=0,typeof this.close=="function"&&!this[Jb]&&this.close(),e?this.emit("error",e):this.emit(Ro),this)}static isStream(e){return!!e&&(e instanceof pue||e instanceof aue||e instanceof Pat&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var due=_((M4t,gue)=>{var Rat=ve("zlib").constants||{ZLIB_VERNUM:4736};gue.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},Rat))});var qU=_(cl=>{"use strict";var RU=ve("assert"),gh=ve("buffer").Buffer,Eue=ve("zlib"),Fd=cl.constants=due(),Tat=UE(),mue=gh.concat,Rd=Symbol("_superWrite"),HE=class extends Error{constructor(e){super("zlib: "+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return"ZlibError"}},Nat=Symbol("opts"),j1=Symbol("flushFlag"),yue=Symbol("finishFlushFlag"),GU=Symbol("fullFlushFlag"),ti=Symbol("handle"),$b=Symbol("onError"),_E=Symbol("sawError"),xU=Symbol("level"),kU=Symbol("strategy"),QU=Symbol("ended"),U4t=Symbol("_defaultFullFlush"),ex=class extends Tat{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[_E]=!1,this[QU]=!1,this[Nat]=e,this[j1]=e.flush,this[yue]=e.finishFlush;try{this[ti]=new Eue[r](e)}catch(o){throw new HE(o)}this[$b]=o=>{this[_E]||(this[_E]=!0,this.close(),this.emit("error",o))},this[ti].on("error",o=>this[$b](new HE(o))),this.once("end",()=>this.close)}close(){this[ti]&&(this[ti].close(),this[ti]=null,this.emit("close"))}reset(){if(!this[_E])return RU(this[ti],"zlib binding closed"),this[ti].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[GU]),this.write(Object.assign(gh.alloc(0),{[j1]:e})))}end(e,r,o){return e&&this.write(e,r),this.flush(this[yue]),this[QU]=!0,super.end(null,null,o)}get ended(){return this[QU]}write(e,r,o){if(typeof r=="function"&&(o=r,r="utf8"),typeof e=="string"&&(e=gh.from(e,r)),this[_E])return;RU(this[ti],"zlib binding closed");let a=this[ti]._handle,n=a.close;a.close=()=>{};let u=this[ti].close;this[ti].close=()=>{},gh.concat=h=>h;let A;try{let h=typeof e[j1]=="number"?e[j1]:this[j1];A=this[ti]._processChunk(e,h),gh.concat=mue}catch(h){gh.concat=mue,this[$b](new HE(h))}finally{this[ti]&&(this[ti]._handle=a,a.close=n,this[ti].close=u,this[ti].removeAllListeners("error"))}this[ti]&&this[ti].on("error",h=>this[$b](new HE(h)));let p;if(A)if(Array.isArray(A)&&A.length>0){p=this[Rd](gh.from(A[0]));for(let h=1;h{this.flush(a),n()};try{this[ti].params(e,r)}finally{this[ti].flush=o}this[ti]&&(this[xU]=e,this[kU]=r)}}}},TU=class extends jf{constructor(e){super(e,"Deflate")}},NU=class extends jf{constructor(e){super(e,"Inflate")}},FU=Symbol("_portable"),LU=class extends jf{constructor(e){super(e,"Gzip"),this[FU]=e&&!!e.portable}[Rd](e){return this[FU]?(this[FU]=!1,e[9]=255,super[Rd](e)):super[Rd](e)}},OU=class extends jf{constructor(e){super(e,"Gunzip")}},MU=class extends jf{constructor(e){super(e,"DeflateRaw")}},UU=class extends jf{constructor(e){super(e,"InflateRaw")}},_U=class extends jf{constructor(e){super(e,"Unzip")}},tx=class extends ex{constructor(e,r){e=e||{},e.flush=e.flush||Fd.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Fd.BROTLI_OPERATION_FINISH,super(e,r),this[GU]=Fd.BROTLI_OPERATION_FLUSH}},HU=class extends tx{constructor(e){super(e,"BrotliCompress")}},jU=class extends tx{constructor(e){super(e,"BrotliDecompress")}};cl.Deflate=TU;cl.Inflate=NU;cl.Gzip=LU;cl.Gunzip=OU;cl.DeflateRaw=MU;cl.InflateRaw=UU;cl.Unzip=_U;typeof Eue.BrotliCompress=="function"?(cl.BrotliCompress=HU,cl.BrotliDecompress=jU):cl.BrotliCompress=cl.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var jE=_((j4t,Cue)=>{var Lat=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;Cue.exports=Lat!=="win32"?t=>t:t=>t&&t.replace(/\\/g,"/")});var rx=_((q4t,wue)=>{"use strict";var Oat=UE(),YU=jE(),WU=Symbol("slurp");wue.exports=class extends Oat{constructor(e,r,o){switch(super(),this.pause(),this.extended=r,this.globalExtended=o,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=YU(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=YU(e.linkpath),this.uname=e.uname,this.gname=e.gname,r&&this[WU](r),o&&this[WU](o,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let o=this.remain,a=this.blockRemain;return this.remain=Math.max(0,o-r),this.blockRemain=Math.max(0,a-r),this.ignore?!0:o>=r?super.write(e):super.write(e.slice(0,o))}[WU](e,r){for(let o in e)e[o]!==null&&e[o]!==void 0&&!(r&&o==="path")&&(this[o]=o==="path"||o==="linkpath"?YU(e[o]):e[o])}}});var KU=_(nx=>{"use strict";nx.name=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]);nx.code=new Map(Array.from(nx.name).map(t=>[t[1],t[0]]))});var Due=_((W4t,vue)=>{"use strict";var Mat=(t,e)=>{if(Number.isSafeInteger(t))t<0?_at(t,e):Uat(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},Uat=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},_at=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var o=e.length;o>1;o--){var a=t&255;t=Math.floor(t/256),r?e[o-1]=Iue(a):a===0?e[o-1]=0:(r=!0,e[o-1]=Bue(a))}},Hat=t=>{let e=t[0],r=e===128?Gat(t.slice(1,t.length)):e===255?jat(t):null;if(r===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(r))throw Error("parsed number outside of javascript safe integer range");return r},jat=t=>{for(var e=t.length,r=0,o=!1,a=e-1;a>-1;a--){var n=t[a],u;o?u=Iue(n):n===0?u=n:(o=!0,u=Bue(n)),u!==0&&(r-=u*Math.pow(256,e-a-1))}return r},Gat=t=>{for(var e=t.length,r=0,o=e-1;o>-1;o--){var a=t[o];a!==0&&(r+=a*Math.pow(256,e-o-1))}return r},Iue=t=>(255^t)&255,Bue=t=>(255^t)+1&255;vue.exports={encode:Mat,parse:Hat}});var qE=_((K4t,Pue)=>{"use strict";var VU=KU(),GE=ve("path").posix,Sue=Due(),JU=Symbol("slurp"),ul=Symbol("type"),ZU=class{constructor(e,r,o,a){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[ul]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,r||0,o,a):e&&this.set(e)}decode(e,r,o,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=Td(e,r,100),this.mode=dh(e,r+100,8),this.uid=dh(e,r+108,8),this.gid=dh(e,r+116,8),this.size=dh(e,r+124,12),this.mtime=zU(e,r+136,12),this.cksum=dh(e,r+148,12),this[JU](o),this[JU](a,!0),this[ul]=Td(e,r+156,1),this[ul]===""&&(this[ul]="0"),this[ul]==="0"&&this.path.substr(-1)==="/"&&(this[ul]="5"),this[ul]==="5"&&(this.size=0),this.linkpath=Td(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=Td(e,r+265,32),this.gname=Td(e,r+297,32),this.devmaj=dh(e,r+329,8),this.devmin=dh(e,r+337,8),e[r+475]!==0){let u=Td(e,r+345,155);this.path=u+"/"+this.path}else{let u=Td(e,r+345,130);u&&(this.path=u+"/"+this.path),this.atime=zU(e,r+476,12),this.ctime=zU(e,r+488,12)}let n=8*32;for(let u=r;u=r+512))throw new Error("need 512 bytes for header");let o=this.ctime||this.atime?130:155,a=qat(this.path||"",o),n=a[0],u=a[1];this.needPax=a[2],this.needPax=Nd(e,r,100,n)||this.needPax,this.needPax=mh(e,r+100,8,this.mode)||this.needPax,this.needPax=mh(e,r+108,8,this.uid)||this.needPax,this.needPax=mh(e,r+116,8,this.gid)||this.needPax,this.needPax=mh(e,r+124,12,this.size)||this.needPax,this.needPax=XU(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[ul].charCodeAt(0),this.needPax=Nd(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=Nd(e,r+265,32,this.uname)||this.needPax,this.needPax=Nd(e,r+297,32,this.gname)||this.needPax,this.needPax=mh(e,r+329,8,this.devmaj)||this.needPax,this.needPax=mh(e,r+337,8,this.devmin)||this.needPax,this.needPax=Nd(e,r+345,o,u)||this.needPax,e[r+475]!==0?this.needPax=Nd(e,r+345,155,u)||this.needPax:(this.needPax=Nd(e,r+345,130,u)||this.needPax,this.needPax=XU(e,r+476,12,this.atime)||this.needPax,this.needPax=XU(e,r+488,12,this.ctime)||this.needPax);let A=8*32;for(let p=r;p{let o=t,a="",n,u=GE.parse(t).root||".";if(Buffer.byteLength(o)<100)n=[o,a,!1];else{a=GE.dirname(o),o=GE.basename(o);do Buffer.byteLength(o)<=100&&Buffer.byteLength(a)<=e?n=[o,a,!1]:Buffer.byteLength(o)>100&&Buffer.byteLength(a)<=e?n=[o.substr(0,100-1),a,!0]:(o=GE.join(GE.basename(a),o),a=GE.dirname(a));while(a!==u&&!n);n||(n=[t.substr(0,100-1),"",!0])}return n},Td=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),zU=(t,e,r)=>Yat(dh(t,e,r)),Yat=t=>t===null?null:new Date(t*1e3),dh=(t,e,r)=>t[e]&128?Sue.parse(t.slice(e,e+r)):Kat(t,e,r),Wat=t=>isNaN(t)?null:t,Kat=(t,e,r)=>Wat(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),Vat={12:8589934591,8:2097151},mh=(t,e,r,o)=>o===null?!1:o>Vat[r]||o<0?(Sue.encode(o,t.slice(e,e+r)),!0):(Jat(t,e,r,o),!1),Jat=(t,e,r,o)=>t.write(zat(o,r),e,r,"ascii"),zat=(t,e)=>Xat(Math.floor(t).toString(8),e),Xat=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",XU=(t,e,r,o)=>o===null?!1:mh(t,e,r,o.getTime()/1e3),Zat=new Array(156).join("\0"),Nd=(t,e,r,o)=>o===null?!1:(t.write(o+Zat,e,r,"utf8"),o.length!==Buffer.byteLength(o)||o.length>r);Pue.exports=ZU});var ix=_((V4t,bue)=>{"use strict";var $at=qE(),elt=ve("path"),G1=class{constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=r||!1}encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byteLength(e),o=512*Math.ceil(1+r/512),a=Buffer.allocUnsafe(o);for(let n=0;n<512;n++)a[n]=0;new $at({path:("PaxHeader/"+elt.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:r,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(a),a.write(e,512,r,"utf8");for(let n=r+512;n=Math.pow(10,n)&&(n+=1),n+a+o}};G1.parse=(t,e,r)=>new G1(tlt(rlt(t),e),r);var tlt=(t,e)=>e?Object.keys(t).reduce((r,o)=>(r[o]=t[o],r),e):t,rlt=t=>t.replace(/\n$/,"").split(` +`).reduce(nlt,Object.create(null)),nlt=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let o=e.split("="),a=o.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!a)return t;let n=o.join("=");return t[a]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(a)?new Date(n*1e3):/^[0-9]+$/.test(n)?+n:n,t};bue.exports=G1});var YE=_((J4t,xue)=>{xue.exports=t=>{let e=t.length-1,r=-1;for(;e>-1&&t.charAt(e)==="/";)r=e,e--;return r===-1?t:t.slice(0,r)}});var sx=_((z4t,kue)=>{"use strict";kue.exports=t=>class extends t{warn(e,r,o={}){this.file&&(o.file=this.file),this.cwd&&(o.cwd=this.cwd),o.code=r instanceof Error&&r.code||e,o.tarCode=e,!this.strict&&o.recoverable!==!1?(r instanceof Error&&(o=Object.assign(r,o),r=r.message),this.emit("warn",o.tarCode,r,o)):r instanceof Error?this.emit("error",Object.assign(r,o)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),o))}}});var e3=_((Z4t,Que)=>{"use strict";var ox=["|","<",">","?",":"],$U=ox.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),ilt=new Map(ox.map((t,e)=>[t,$U[e]])),slt=new Map($U.map((t,e)=>[t,ox[e]]));Que.exports={encode:t=>ox.reduce((e,r)=>e.split(r).join(ilt.get(r)),t),decode:t=>$U.reduce((e,r)=>e.split(r).join(slt.get(r)),t)}});var t3=_(($4t,Rue)=>{var{isAbsolute:olt,parse:Fue}=ve("path").win32;Rue.exports=t=>{let e="",r=Fue(t);for(;olt(t)||r.root;){let o=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.substr(o.length),e+=o,r=Fue(t)}return[e,t]}});var Nue=_((eUt,Tue)=>{"use strict";Tue.exports=(t,e,r)=>(t&=4095,r&&(t=(t|384)&-19),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t)});var A3=_((nUt,Jue)=>{"use strict";var jue=UE(),Gue=ix(),que=qE(),oA=ve("fs"),Lue=ve("path"),sA=jE(),alt=YE(),Yue=(t,e)=>e?(t=sA(t).replace(/^\.(\/|$)/,""),alt(e)+"/"+t):sA(t),llt=16*1024*1024,Oue=Symbol("process"),Mue=Symbol("file"),Uue=Symbol("directory"),n3=Symbol("symlink"),_ue=Symbol("hardlink"),q1=Symbol("header"),ax=Symbol("read"),i3=Symbol("lstat"),lx=Symbol("onlstat"),s3=Symbol("onread"),o3=Symbol("onreadlink"),a3=Symbol("openfile"),l3=Symbol("onopenfile"),yh=Symbol("close"),cx=Symbol("mode"),c3=Symbol("awaitDrain"),r3=Symbol("ondrain"),aA=Symbol("prefix"),Hue=Symbol("hadError"),Wue=sx(),clt=e3(),Kue=t3(),Vue=Nue(),ux=Wue(class extends jue{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=sA(e),this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||llt,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=sA(r.cwd||process.cwd()),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime||null,this.prefix=r.prefix?sA(r.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Kue(this.path);a&&(this.path=n,o=a)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=clt.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=sA(r.absolute||Lue.resolve(this.cwd,e)),this.path===""&&(this.path="./"),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.statCache.has(this.absolute)?this[lx](this.statCache.get(this.absolute)):this[i3]()}emit(e,...r){return e==="error"&&(this[Hue]=!0),super.emit(e,...r)}[i3](){oA.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[lx](r)})}[lx](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=Alt(e),this.emit("stat",e),this[Oue]()}[Oue](){switch(this.type){case"File":return this[Mue]();case"Directory":return this[Uue]();case"SymbolicLink":return this[n3]();default:return this.end()}}[cx](e){return Vue(e,this.type==="Directory",this.portable)}[aA](e){return Yue(e,this.prefix)}[q1](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new que({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this[cx](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new Gue({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[Uue](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[q1](),this.end()}[n3](){oA.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[o3](r)})}[o3](e){this.linkpath=sA(e),this[q1](),this.end()}[_ue](e){this.type="Link",this.linkpath=sA(Lue.relative(this.cwd,e)),this.stat.size=0,this[q1](),this.end()}[Mue](){if(this.stat.nlink>1){let e=this.stat.dev+":"+this.stat.ino;if(this.linkCache.has(e)){let r=this.linkCache.get(e);if(r.indexOf(this.cwd)===0)return this[_ue](r)}this.linkCache.set(e,this.absolute)}if(this[q1](),this.stat.size===0)return this.end();this[a3]()}[a3](){oA.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[l3](r)})}[l3](e){if(this.fd=e,this[Hue])return this[yh]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let r=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(r),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[ax]()}[ax](){let{fd:e,buf:r,offset:o,length:a,pos:n}=this;oA.read(e,r,o,a,n,(u,A)=>{if(u)return this[yh](()=>this.emit("error",u));this[s3](A)})}[yh](e){oA.close(this.fd,e)}[s3](e){if(e<=0&&this.remain>0){let a=new Error("encountered unexpected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[yh](()=>this.emit("error",a))}if(e>this.remain){let a=new Error("did not encounter expected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[yh](()=>this.emit("error",a))}if(e===this.remain)for(let a=e;athis[r3]())}[c3](e){this.once("drain",e)}write(e){if(this.blockRemaine?this.emit("error",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[ax]()}}),u3=class extends ux{[i3](){this[lx](oA.lstatSync(this.absolute))}[n3](){this[o3](oA.readlinkSync(this.absolute))}[a3](){this[l3](oA.openSync(this.absolute,"r"))}[ax](){let e=!0;try{let{fd:r,buf:o,offset:a,length:n,pos:u}=this,A=oA.readSync(r,o,a,n,u);this[s3](A),e=!1}finally{if(e)try{this[yh](()=>{})}catch{}}}[c3](e){e()}[yh](e){oA.closeSync(this.fd),e()}},ult=Wue(class extends jue{constructor(e,r){r=r||{},super(r),this.preservePaths=!!r.preservePaths,this.portable=!!r.portable,this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.readEntry=e,this.type=e.type,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=r.prefix||null,this.path=sA(e.path),this.mode=this[cx](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:r.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=sA(e.linkpath),typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Kue(this.path);a&&(this.path=n,o=a)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new que({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.header.encode()&&!this.noPax&&super.write(new Gue({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[aA](e){return Yue(e,this.prefix)}[cx](e){return Vue(e,this.type==="Directory",this.portable)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=r,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});ux.Sync=u3;ux.Tar=ult;var Alt=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";Jue.exports=ux});var Ex=_((sUt,rAe)=>{"use strict";var mx=class{constructor(e,r){this.path=e||"./",this.absolute=r,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},flt=UE(),plt=qU(),hlt=rx(),C3=A3(),glt=C3.Sync,dlt=C3.Tar,mlt=IS(),zue=Buffer.alloc(1024),px=Symbol("onStat"),Ax=Symbol("ended"),lA=Symbol("queue"),WE=Symbol("current"),Ld=Symbol("process"),fx=Symbol("processing"),Xue=Symbol("processJob"),cA=Symbol("jobs"),f3=Symbol("jobDone"),hx=Symbol("addFSEntry"),Zue=Symbol("addTarEntry"),d3=Symbol("stat"),m3=Symbol("readdir"),gx=Symbol("onreaddir"),dx=Symbol("pipe"),$ue=Symbol("entry"),p3=Symbol("entryOpt"),y3=Symbol("writeEntryClass"),tAe=Symbol("write"),h3=Symbol("ondrain"),yx=ve("fs"),eAe=ve("path"),ylt=sx(),g3=jE(),w3=ylt(class extends flt{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||"",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=g3(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[y3]=C3,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!="object"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new plt.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[h3]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[h3]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter=="function"?e.filter:r=>!0,this[lA]=new mlt,this[cA]=0,this.jobs=+e.jobs||4,this[fx]=!1,this[Ax]=!1}[tAe](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[Ax]=!0,this[Ld](),this}write(e){if(this[Ax])throw new Error("write after end");return e instanceof hlt?this[Zue](e):this[hx](e),this.flowing}[Zue](e){let r=g3(eAe.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let o=new mx(e.path,r,!1);o.entry=new dlt(e,this[p3](o)),o.entry.on("end",a=>this[f3](o)),this[cA]+=1,this[lA].push(o)}this[Ld]()}[hx](e){let r=g3(eAe.resolve(this.cwd,e));this[lA].push(new mx(e,r)),this[Ld]()}[d3](e){e.pending=!0,this[cA]+=1;let r=this.follow?"stat":"lstat";yx[r](e.absolute,(o,a)=>{e.pending=!1,this[cA]-=1,o?this.emit("error",o):this[px](e,a)})}[px](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[Ld]()}[m3](e){e.pending=!0,this[cA]+=1,yx.readdir(e.absolute,(r,o)=>{if(e.pending=!1,this[cA]-=1,r)return this.emit("error",r);this[gx](e,o)})}[gx](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[Ld]()}[Ld](){if(!this[fx]){this[fx]=!0;for(let e=this[lA].head;e!==null&&this[cA]this.warn(r,o,a),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[$ue](e){this[cA]+=1;try{return new this[y3](e.path,this[p3](e)).on("end",()=>this[f3](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[h3](){this[WE]&&this[WE].entry&&this[WE].entry.resume()}[dx](e){e.piped=!0,e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[hx](u+a)});let r=e.entry,o=this.zip;o?r.on("data",a=>{o.write(a)||r.pause()}):r.on("data",a=>{super.write(a)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),E3=class extends w3{constructor(e){super(e),this[y3]=glt}pause(){}resume(){}[d3](e){let r=this.follow?"statSync":"lstatSync";this[px](e,yx[r](e.absolute))}[m3](e,r){this[gx](e,yx.readdirSync(e.absolute))}[dx](e){let r=e.entry,o=this.zip;e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[hx](u+a)}),o?r.on("data",a=>{o.write(a)}):r.on("data",a=>{super[tAe](a)})}};w3.Sync=E3;rAe.exports=w3});var eC=_(W1=>{"use strict";var Elt=UE(),Clt=ve("events").EventEmitter,Qa=ve("fs"),v3=Qa.writev;if(!v3){let t=process.binding("fs"),e=t.FSReqWrap||t.FSReqCallback;v3=(r,o,a,n)=>{let u=(p,h)=>n(p,h,o),A=new e;A.oncomplete=u,t.writeBuffers(r,o,a,A)}}var ZE=Symbol("_autoClose"),Yc=Symbol("_close"),Y1=Symbol("_ended"),qn=Symbol("_fd"),nAe=Symbol("_finished"),Ch=Symbol("_flags"),I3=Symbol("_flush"),D3=Symbol("_handleChunk"),S3=Symbol("_makeBuf"),vx=Symbol("_mode"),Cx=Symbol("_needDrain"),zE=Symbol("_onerror"),$E=Symbol("_onopen"),B3=Symbol("_onread"),VE=Symbol("_onwrite"),wh=Symbol("_open"),Gf=Symbol("_path"),Od=Symbol("_pos"),uA=Symbol("_queue"),JE=Symbol("_read"),iAe=Symbol("_readSize"),Eh=Symbol("_reading"),wx=Symbol("_remain"),sAe=Symbol("_size"),Ix=Symbol("_write"),KE=Symbol("_writing"),Bx=Symbol("_defaultFlag"),XE=Symbol("_errored"),Dx=class extends Elt{constructor(e,r){if(r=r||{},super(r),this.readable=!0,this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[XE]=!1,this[qn]=typeof r.fd=="number"?r.fd:null,this[Gf]=e,this[iAe]=r.readSize||16*1024*1024,this[Eh]=!1,this[sAe]=typeof r.size=="number"?r.size:1/0,this[wx]=this[sAe],this[ZE]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[qn]=="number"?this[JE]():this[wh]()}get fd(){return this[qn]}get path(){return this[Gf]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[wh](){Qa.open(this[Gf],"r",(e,r)=>this[$E](e,r))}[$E](e,r){e?this[zE](e):(this[qn]=r,this.emit("open",r),this[JE]())}[S3](){return Buffer.allocUnsafe(Math.min(this[iAe],this[wx]))}[JE](){if(!this[Eh]){this[Eh]=!0;let e=this[S3]();if(e.length===0)return process.nextTick(()=>this[B3](null,0,e));Qa.read(this[qn],e,0,e.length,null,(r,o,a)=>this[B3](r,o,a))}}[B3](e,r,o){this[Eh]=!1,e?this[zE](e):this[D3](r,o)&&this[JE]()}[Yc](){if(this[ZE]&&typeof this[qn]=="number"){let e=this[qn];this[qn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}[zE](e){this[Eh]=!0,this[Yc](),this.emit("error",e)}[D3](e,r){let o=!1;return this[wx]-=e,e>0&&(o=super.write(ethis[$E](e,r))}[$E](e,r){this[Bx]&&this[Ch]==="r+"&&e&&e.code==="ENOENT"?(this[Ch]="w",this[wh]()):e?this[zE](e):(this[qn]=r,this.emit("open",r),this[I3]())}end(e,r){return e&&this.write(e,r),this[Y1]=!0,!this[KE]&&!this[uA].length&&typeof this[qn]=="number"&&this[VE](null,0),this}write(e,r){return typeof e=="string"&&(e=Buffer.from(e,r)),this[Y1]?(this.emit("error",new Error("write() after end()")),!1):this[qn]===null||this[KE]||this[uA].length?(this[uA].push(e),this[Cx]=!0,!1):(this[KE]=!0,this[Ix](e),!0)}[Ix](e){Qa.write(this[qn],e,0,e.length,this[Od],(r,o)=>this[VE](r,o))}[VE](e,r){e?this[zE](e):(this[Od]!==null&&(this[Od]+=r),this[uA].length?this[I3]():(this[KE]=!1,this[Y1]&&!this[nAe]?(this[nAe]=!0,this[Yc](),this.emit("finish")):this[Cx]&&(this[Cx]=!1,this.emit("drain"))))}[I3](){if(this[uA].length===0)this[Y1]&&this[VE](null,0);else if(this[uA].length===1)this[Ix](this[uA].pop());else{let e=this[uA];this[uA]=[],v3(this[qn],e,this[Od],(r,o)=>this[VE](r,o))}}[Yc](){if(this[ZE]&&typeof this[qn]=="number"){let e=this[qn];this[qn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}},b3=class extends Sx{[wh](){let e;if(this[Bx]&&this[Ch]==="r+")try{e=Qa.openSync(this[Gf],this[Ch],this[vx])}catch(r){if(r.code==="ENOENT")return this[Ch]="w",this[wh]();throw r}else e=Qa.openSync(this[Gf],this[Ch],this[vx]);this[$E](null,e)}[Yc](){if(this[ZE]&&typeof this[qn]=="number"){let e=this[qn];this[qn]=null,Qa.closeSync(e),this.emit("close")}}[Ix](e){let r=!0;try{this[VE](null,Qa.writeSync(this[qn],e,0,e.length,this[Od])),r=!1}finally{if(r)try{this[Yc]()}catch{}}}};W1.ReadStream=Dx;W1.ReadStreamSync=P3;W1.WriteStream=Sx;W1.WriteStreamSync=b3});var Rx=_((lUt,fAe)=>{"use strict";var wlt=sx(),Ilt=qE(),Blt=ve("events"),vlt=IS(),Dlt=1024*1024,Slt=rx(),oAe=ix(),Plt=qU(),x3=Buffer.from([31,139]),Xl=Symbol("state"),Md=Symbol("writeEntry"),qf=Symbol("readEntry"),k3=Symbol("nextEntry"),aAe=Symbol("processEntry"),Zl=Symbol("extendedHeader"),K1=Symbol("globalExtendedHeader"),Ih=Symbol("meta"),lAe=Symbol("emitMeta"),fi=Symbol("buffer"),Yf=Symbol("queue"),Ud=Symbol("ended"),cAe=Symbol("emittedEnd"),_d=Symbol("emit"),Fa=Symbol("unzip"),Px=Symbol("consumeChunk"),bx=Symbol("consumeChunkSub"),Q3=Symbol("consumeBody"),uAe=Symbol("consumeMeta"),AAe=Symbol("consumeHeader"),xx=Symbol("consuming"),F3=Symbol("bufferConcat"),R3=Symbol("maybeEnd"),V1=Symbol("writing"),Bh=Symbol("aborted"),kx=Symbol("onDone"),Hd=Symbol("sawValidEntry"),Qx=Symbol("sawNullBlock"),Fx=Symbol("sawEOF"),blt=t=>!0;fAe.exports=wlt(class extends Blt{constructor(e){e=e||{},super(e),this.file=e.file||"",this[Hd]=null,this.on(kx,r=>{(this[Xl]==="begin"||this[Hd]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(kx,e.ondone):this.on(kx,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||Dlt,this.filter=typeof e.filter=="function"?e.filter:blt,this.writable=!0,this.readable=!1,this[Yf]=new vlt,this[fi]=null,this[qf]=null,this[Md]=null,this[Xl]="begin",this[Ih]="",this[Zl]=null,this[K1]=null,this[Ud]=!1,this[Fa]=null,this[Bh]=!1,this[Qx]=!1,this[Fx]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[AAe](e,r){this[Hd]===null&&(this[Hd]=!1);let o;try{o=new Ilt(e,r,this[Zl],this[K1])}catch(a){return this.warn("TAR_ENTRY_INVALID",a)}if(o.nullBlock)this[Qx]?(this[Fx]=!0,this[Xl]==="begin"&&(this[Xl]="header"),this[_d]("eof")):(this[Qx]=!0,this[_d]("nullBlock"));else if(this[Qx]=!1,!o.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:o});else if(!o.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:o});else{let a=o.type;if(/^(Symbolic)?Link$/.test(a)&&!o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:o});else if(!/^(Symbolic)?Link$/.test(a)&&o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:o});else{let n=this[Md]=new Slt(o,this[Zl],this[K1]);if(!this[Hd])if(n.remain){let u=()=>{n.invalid||(this[Hd]=!0)};n.on("end",u)}else this[Hd]=!0;n.meta?n.size>this.maxMetaEntrySize?(n.ignore=!0,this[_d]("ignoredEntry",n),this[Xl]="ignore",n.resume()):n.size>0&&(this[Ih]="",n.on("data",u=>this[Ih]+=u),this[Xl]="meta"):(this[Zl]=null,n.ignore=n.ignore||!this.filter(n.path,n),n.ignore?(this[_d]("ignoredEntry",n),this[Xl]=n.remain?"ignore":"header",n.resume()):(n.remain?this[Xl]="body":(this[Xl]="header",n.end()),this[qf]?this[Yf].push(n):(this[Yf].push(n),this[k3]())))}}}[aAe](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[qf]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",o=>this[k3]()),r=!1)):(this[qf]=null,r=!1),r}[k3](){do;while(this[aAe](this[Yf].shift()));if(!this[Yf].length){let e=this[qf];!e||e.flowing||e.size===e.remain?this[V1]||this.emit("drain"):e.once("drain",o=>this.emit("drain"))}}[Q3](e,r){let o=this[Md],a=o.blockRemain,n=a>=e.length&&r===0?e:e.slice(r,r+a);return o.write(n),o.blockRemain||(this[Xl]="header",this[Md]=null,o.end()),n.length}[uAe](e,r){let o=this[Md],a=this[Q3](e,r);return this[Md]||this[lAe](o),a}[_d](e,r,o){!this[Yf].length&&!this[qf]?this.emit(e,r,o):this[Yf].push([e,r,o])}[lAe](e){switch(this[_d]("meta",this[Ih]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[Zl]=oAe.parse(this[Ih],this[Zl],!1);break;case"GlobalExtendedHeader":this[K1]=oAe.parse(this[Ih],this[K1],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[Zl]=this[Zl]||Object.create(null),this[Zl].path=this[Ih].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[Zl]=this[Zl]||Object.create(null),this[Zl].linkpath=this[Ih].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[Bh]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[Bh])return;if(this[Fa]===null&&e){if(this[fi]&&(e=Buffer.concat([this[fi],e]),this[fi]=null),e.lengththis[Px](n)),this[Fa].on("error",n=>this.abort(n)),this[Fa].on("end",n=>{this[Ud]=!0,this[Px]()}),this[V1]=!0;let a=this[Fa][o?"end":"write"](e);return this[V1]=!1,a}}this[V1]=!0,this[Fa]?this[Fa].write(e):this[Px](e),this[V1]=!1;let r=this[Yf].length?!1:this[qf]?this[qf].flowing:!0;return!r&&!this[Yf].length&&this[qf].once("drain",o=>this.emit("drain")),r}[F3](e){e&&!this[Bh]&&(this[fi]=this[fi]?Buffer.concat([this[fi],e]):e)}[R3](){if(this[Ud]&&!this[cAe]&&!this[Bh]&&!this[xx]){this[cAe]=!0;let e=this[Md];if(e&&e.blockRemain){let r=this[fi]?this[fi].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[fi]&&e.write(this[fi]),e.end()}this[_d](kx)}}[Px](e){if(this[xx])this[F3](e);else if(!e&&!this[fi])this[R3]();else{if(this[xx]=!0,this[fi]){this[F3](e);let r=this[fi];this[fi]=null,this[bx](r)}else this[bx](e);for(;this[fi]&&this[fi].length>=512&&!this[Bh]&&!this[Fx];){let r=this[fi];this[fi]=null,this[bx](r)}this[xx]=!1}(!this[fi]||this[Ud])&&this[R3]()}[bx](e){let r=0,o=e.length;for(;r+512<=o&&!this[Bh]&&!this[Fx];)switch(this[Xl]){case"begin":case"header":this[AAe](e,r),r+=512;break;case"ignore":case"body":r+=this[Q3](e,r);break;case"meta":r+=this[uAe](e,r);break;default:throw new Error("invalid state: "+this[Xl])}r{"use strict";var xlt=OE(),hAe=Rx(),tC=ve("fs"),klt=eC(),pAe=ve("path"),T3=YE();dAe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=xlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Flt(o,e),o.noResume||Qlt(o),o.file&&o.sync?Rlt(o):o.file?Tlt(o,r):gAe(o)};var Qlt=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},Flt=(t,e)=>{let r=new Map(e.map(n=>[T3(n),!0])),o=t.filter,a=(n,u)=>{let A=u||pAe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(pAe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(T3(n)):n=>a(T3(n))},Rlt=t=>{let e=gAe(t),r=t.file,o=!0,a;try{let n=tC.statSync(r),u=t.maxReadSize||16*1024*1024;if(n.size{let r=new hAe(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("end",u),tC.stat(a,(p,h)=>{if(p)A(p);else{let E=new klt.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},gAe=t=>new hAe(t)});var IAe=_((uUt,wAe)=>{"use strict";var Nlt=OE(),Nx=Ex(),mAe=eC(),yAe=Tx(),EAe=ve("path");wAe.exports=(t,e,r)=>{if(typeof e=="function"&&(r=e),Array.isArray(t)&&(e=t,t={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let o=Nlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return o.file&&o.sync?Llt(o,e):o.file?Olt(o,e,r):o.sync?Mlt(o,e):Ult(o,e)};var Llt=(t,e)=>{let r=new Nx.Sync(t),o=new mAe.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(o),CAe(r,e)},Olt=(t,e,r)=>{let o=new Nx(t),a=new mAe.WriteStream(t.file,{mode:t.mode||438});o.pipe(a);let n=new Promise((u,A)=>{a.on("error",A),a.on("close",u),o.on("error",A)});return N3(o,e),r?n.then(r,r):n},CAe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?yAe({file:EAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},N3=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return yAe({file:EAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>N3(t,e));t.add(r)}t.end()},Mlt=(t,e)=>{let r=new Nx.Sync(t);return CAe(r,e),r},Ult=(t,e)=>{let r=new Nx(t);return N3(r,e),r}});var L3=_((AUt,xAe)=>{"use strict";var _lt=OE(),BAe=Ex(),Al=ve("fs"),vAe=eC(),DAe=Tx(),SAe=ve("path"),PAe=qE();xAe.exports=(t,e,r)=>{let o=_lt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),o.sync?Hlt(o,e):Glt(o,e,r)};var Hlt=(t,e)=>{let r=new BAe.Sync(t),o=!0,a,n;try{try{a=Al.openSync(t.file,"r+")}catch(p){if(p.code==="ENOENT")a=Al.openSync(t.file,"w+");else throw p}let u=Al.fstatSync(a),A=Buffer.alloc(512);e:for(n=0;nu.size)break;n+=h,t.mtimeCache&&t.mtimeCache.set(p.path,p.mtime)}o=!1,jlt(t,r,n,a,e)}finally{if(o)try{Al.closeSync(a)}catch{}}},jlt=(t,e,r,o,a)=>{let n=new vAe.WriteStreamSync(t.file,{fd:o,start:r});e.pipe(n),qlt(e,a)},Glt=(t,e,r)=>{e=Array.from(e);let o=new BAe(t),a=(u,A,p)=>{let h=(C,R)=>{C?Al.close(u,L=>p(C)):p(null,R)},E=0;if(A===0)return h(null,0);let I=0,v=Buffer.alloc(512),x=(C,R)=>{if(C)return h(C);if(I+=R,I<512&&R)return Al.read(u,v,I,v.length-I,E+I,x);if(E===0&&v[0]===31&&v[1]===139)return h(new Error("cannot append to compressed archives"));if(I<512)return h(null,E);let L=new PAe(v);if(!L.cksumValid)return h(null,E);let U=512*Math.ceil(L.size/512);if(E+U+512>A||(E+=U+512,E>=A))return h(null,E);t.mtimeCache&&t.mtimeCache.set(L.path,L.mtime),I=0,Al.read(u,v,0,512,E,x)};Al.read(u,v,0,512,E,x)},n=new Promise((u,A)=>{o.on("error",A);let p="r+",h=(E,I)=>{if(E&&E.code==="ENOENT"&&p==="r+")return p="w+",Al.open(t.file,p,h);if(E)return A(E);Al.fstat(I,(v,x)=>{if(v)return Al.close(I,()=>A(v));a(I,x.size,(C,R)=>{if(C)return A(C);let L=new vAe.WriteStream(t.file,{fd:I,start:R});o.pipe(L),L.on("error",A),L.on("close",u),bAe(o,e)})})};Al.open(t.file,p,h)});return r?n.then(r,r):n},qlt=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?DAe({file:SAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},bAe=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return DAe({file:SAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>bAe(t,e));t.add(r)}t.end()}});var QAe=_((fUt,kAe)=>{"use strict";var Ylt=OE(),Wlt=L3();kAe.exports=(t,e,r)=>{let o=Ylt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),Klt(o),Wlt(o,e,r)};var Klt=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,o)=>e(r,o)&&!(t.mtimeCache.get(r)>o.mtime):(r,o)=>!(t.mtimeCache.get(r)>o.mtime)}});var TAe=_((pUt,RAe)=>{var{promisify:FAe}=ve("util"),vh=ve("fs"),Vlt=t=>{if(!t)t={mode:511,fs:vh};else if(typeof t=="object")t={mode:511,fs:vh,...t};else if(typeof t=="number")t={mode:t,fs:vh};else if(typeof t=="string")t={mode:parseInt(t,8),fs:vh};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||vh.mkdir,t.mkdirAsync=FAe(t.mkdir),t.stat=t.stat||t.fs.stat||vh.stat,t.statAsync=FAe(t.stat),t.statSync=t.statSync||t.fs.statSync||vh.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||vh.mkdirSync,t};RAe.exports=Vlt});var LAe=_((hUt,NAe)=>{var Jlt=process.platform,{resolve:zlt,parse:Xlt}=ve("path"),Zlt=t=>{if(/\0/.test(t))throw Object.assign(new TypeError("path must be a string without null bytes"),{path:t,code:"ERR_INVALID_ARG_VALUE"});if(t=zlt(t),Jlt==="win32"){let e=/[*|"<>?:]/,{root:r}=Xlt(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};NAe.exports=Zlt});var HAe=_((gUt,_Ae)=>{var{dirname:OAe}=ve("path"),MAe=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(o=>o.isDirectory()?r:void 0,o=>o.code==="ENOENT"?MAe(t,OAe(e),e):void 0),UAe=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(o){return o.code==="ENOENT"?UAe(t,OAe(e),e):void 0}};_Ae.exports={findMade:MAe,findMadeSync:UAe}});var U3=_((dUt,GAe)=>{var{dirname:jAe}=ve("path"),O3=(t,e,r)=>{e.recursive=!1;let o=jAe(t);return o===t?e.mkdirAsync(t,e).catch(a=>{if(a.code!=="EISDIR")throw a}):e.mkdirAsync(t,e).then(()=>r||t,a=>{if(a.code==="ENOENT")return O3(o,e).then(n=>O3(t,e,n));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;return e.statAsync(t).then(n=>{if(n.isDirectory())return r;throw a},()=>{throw a})})},M3=(t,e,r)=>{let o=jAe(t);if(e.recursive=!1,o===t)try{return e.mkdirSync(t,e)}catch(a){if(a.code!=="EISDIR")throw a;return}try{return e.mkdirSync(t,e),r||t}catch(a){if(a.code==="ENOENT")return M3(t,e,M3(o,e,r));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;try{if(!e.statSync(t).isDirectory())throw a}catch{throw a}}};GAe.exports={mkdirpManual:O3,mkdirpManualSync:M3}});var WAe=_((mUt,YAe)=>{var{dirname:qAe}=ve("path"),{findMade:$lt,findMadeSync:ect}=HAe(),{mkdirpManual:tct,mkdirpManualSync:rct}=U3(),nct=(t,e)=>(e.recursive=!0,qAe(t)===t?e.mkdirAsync(t,e):$lt(e,t).then(o=>e.mkdirAsync(t,e).then(()=>o).catch(a=>{if(a.code==="ENOENT")return tct(t,e);throw a}))),ict=(t,e)=>{if(e.recursive=!0,qAe(t)===t)return e.mkdirSync(t,e);let o=ect(e,t);try{return e.mkdirSync(t,e),o}catch(a){if(a.code==="ENOENT")return rct(t,e);throw a}};YAe.exports={mkdirpNative:nct,mkdirpNativeSync:ict}});var zAe=_((yUt,JAe)=>{var KAe=ve("fs"),sct=process.version,_3=sct.replace(/^v/,"").split("."),VAe=+_3[0]>10||+_3[0]==10&&+_3[1]>=12,oct=VAe?t=>t.mkdir===KAe.mkdir:()=>!1,act=VAe?t=>t.mkdirSync===KAe.mkdirSync:()=>!1;JAe.exports={useNative:oct,useNativeSync:act}});var rfe=_((EUt,tfe)=>{var rC=TAe(),nC=LAe(),{mkdirpNative:XAe,mkdirpNativeSync:ZAe}=WAe(),{mkdirpManual:$Ae,mkdirpManualSync:efe}=U3(),{useNative:lct,useNativeSync:cct}=zAe(),iC=(t,e)=>(t=nC(t),e=rC(e),lct(e)?XAe(t,e):$Ae(t,e)),uct=(t,e)=>(t=nC(t),e=rC(e),cct(e)?ZAe(t,e):efe(t,e));iC.sync=uct;iC.native=(t,e)=>XAe(nC(t),rC(e));iC.manual=(t,e)=>$Ae(nC(t),rC(e));iC.nativeSync=(t,e)=>ZAe(nC(t),rC(e));iC.manualSync=(t,e)=>efe(nC(t),rC(e));tfe.exports=iC});var cfe=_((CUt,lfe)=>{"use strict";var $l=ve("fs"),jd=ve("path"),Act=$l.lchown?"lchown":"chown",fct=$l.lchownSync?"lchownSync":"chownSync",ife=$l.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),nfe=(t,e,r)=>{try{return $l[fct](t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},pct=(t,e,r)=>{try{return $l.chownSync(t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},hct=ife?(t,e,r,o)=>a=>{!a||a.code!=="EISDIR"?o(a):$l.chown(t,e,r,o)}:(t,e,r,o)=>o,H3=ife?(t,e,r)=>{try{return nfe(t,e,r)}catch(o){if(o.code!=="EISDIR")throw o;pct(t,e,r)}}:(t,e,r)=>nfe(t,e,r),gct=process.version,sfe=(t,e,r)=>$l.readdir(t,e,r),dct=(t,e)=>$l.readdirSync(t,e);/^v4\./.test(gct)&&(sfe=(t,e,r)=>$l.readdir(t,r));var Lx=(t,e,r,o)=>{$l[Act](t,e,r,hct(t,e,r,a=>{o(a&&a.code!=="ENOENT"?a:null)}))},ofe=(t,e,r,o,a)=>{if(typeof e=="string")return $l.lstat(jd.resolve(t,e),(n,u)=>{if(n)return a(n.code!=="ENOENT"?n:null);u.name=e,ofe(t,u,r,o,a)});if(e.isDirectory())j3(jd.resolve(t,e.name),r,o,n=>{if(n)return a(n);let u=jd.resolve(t,e.name);Lx(u,r,o,a)});else{let n=jd.resolve(t,e.name);Lx(n,r,o,a)}},j3=(t,e,r,o)=>{sfe(t,{withFileTypes:!0},(a,n)=>{if(a){if(a.code==="ENOENT")return o();if(a.code!=="ENOTDIR"&&a.code!=="ENOTSUP")return o(a)}if(a||!n.length)return Lx(t,e,r,o);let u=n.length,A=null,p=h=>{if(!A){if(h)return o(A=h);if(--u===0)return Lx(t,e,r,o)}};n.forEach(h=>ofe(t,h,e,r,p))})},mct=(t,e,r,o)=>{if(typeof e=="string")try{let a=$l.lstatSync(jd.resolve(t,e));a.name=e,e=a}catch(a){if(a.code==="ENOENT")return;throw a}e.isDirectory()&&afe(jd.resolve(t,e.name),r,o),H3(jd.resolve(t,e.name),r,o)},afe=(t,e,r)=>{let o;try{o=dct(t,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")return;if(a.code==="ENOTDIR"||a.code==="ENOTSUP")return H3(t,e,r);throw a}return o&&o.length&&o.forEach(a=>mct(t,a,e,r)),H3(t,e,r)};lfe.exports=j3;j3.sync=afe});var pfe=_((wUt,G3)=>{"use strict";var ufe=rfe(),ec=ve("fs"),Ox=ve("path"),Afe=cfe(),Wc=jE(),Mx=class extends Error{constructor(e,r){super("Cannot extract through symbolic link"),this.path=r,this.symlink=e}get name(){return"SylinkError"}},Ux=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'"),this.path=e,this.code=r}get name(){return"CwdError"}},_x=(t,e)=>t.get(Wc(e)),J1=(t,e,r)=>t.set(Wc(e),r),yct=(t,e)=>{ec.stat(t,(r,o)=>{(r||!o.isDirectory())&&(r=new Ux(t,r&&r.code||"ENOTDIR")),e(r)})};G3.exports=(t,e,r)=>{t=Wc(t);let o=e.umask,a=e.mode|448,n=(a&o)!==0,u=e.uid,A=e.gid,p=typeof u=="number"&&typeof A=="number"&&(u!==e.processUid||A!==e.processGid),h=e.preserve,E=e.unlink,I=e.cache,v=Wc(e.cwd),x=(L,U)=>{L?r(L):(J1(I,t,!0),U&&p?Afe(U,u,A,J=>x(J)):n?ec.chmod(t,a,r):r())};if(I&&_x(I,t)===!0)return x();if(t===v)return yct(t,x);if(h)return ufe(t,{mode:a}).then(L=>x(null,L),x);let R=Wc(Ox.relative(v,t)).split("/");Hx(v,R,a,I,E,v,null,x)};var Hx=(t,e,r,o,a,n,u,A)=>{if(!e.length)return A(null,u);let p=e.shift(),h=Wc(Ox.resolve(t+"/"+p));if(_x(o,h))return Hx(h,e,r,o,a,n,u,A);ec.mkdir(h,r,ffe(h,e,r,o,a,n,u,A))},ffe=(t,e,r,o,a,n,u,A)=>p=>{p?ec.lstat(t,(h,E)=>{if(h)h.path=h.path&&Wc(h.path),A(h);else if(E.isDirectory())Hx(t,e,r,o,a,n,u,A);else if(a)ec.unlink(t,I=>{if(I)return A(I);ec.mkdir(t,r,ffe(t,e,r,o,a,n,u,A))});else{if(E.isSymbolicLink())return A(new Mx(t,t+"/"+e.join("/")));A(p)}}):(u=u||t,Hx(t,e,r,o,a,n,u,A))},Ect=t=>{let e=!1,r="ENOTDIR";try{e=ec.statSync(t).isDirectory()}catch(o){r=o.code}finally{if(!e)throw new Ux(t,r)}};G3.exports.sync=(t,e)=>{t=Wc(t);let r=e.umask,o=e.mode|448,a=(o&r)!==0,n=e.uid,u=e.gid,A=typeof n=="number"&&typeof u=="number"&&(n!==e.processUid||u!==e.processGid),p=e.preserve,h=e.unlink,E=e.cache,I=Wc(e.cwd),v=L=>{J1(E,t,!0),L&&A&&Afe.sync(L,n,u),a&&ec.chmodSync(t,o)};if(E&&_x(E,t)===!0)return v();if(t===I)return Ect(I),v();if(p)return v(ufe.sync(t,o));let C=Wc(Ox.relative(I,t)).split("/"),R=null;for(let L=C.shift(),U=I;L&&(U+="/"+L);L=C.shift())if(U=Wc(Ox.resolve(U)),!_x(E,U))try{ec.mkdirSync(U,o),R=R||U,J1(E,U,!0)}catch{let te=ec.lstatSync(U);if(te.isDirectory()){J1(E,U,!0);continue}else if(h){ec.unlinkSync(U),ec.mkdirSync(U,o),R=R||U,J1(E,U,!0);continue}else if(te.isSymbolicLink())return new Mx(U,U+"/"+C.join("/"))}return v(R)}});var Y3=_((IUt,hfe)=>{var q3=Object.create(null),{hasOwnProperty:Cct}=Object.prototype;hfe.exports=t=>(Cct.call(q3,t)||(q3[t]=t.normalize("NFKD")),q3[t])});var yfe=_((BUt,mfe)=>{var gfe=ve("assert"),wct=Y3(),Ict=YE(),{join:dfe}=ve("path"),Bct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,vct=Bct==="win32";mfe.exports=()=>{let t=new Map,e=new Map,r=h=>h.split("/").slice(0,-1).reduce((I,v)=>(I.length&&(v=dfe(I[I.length-1],v)),I.push(v||"/"),I),[]),o=new Set,a=h=>{let E=e.get(h);if(!E)throw new Error("function does not have any path reservations");return{paths:E.paths.map(I=>t.get(I)),dirs:[...E.dirs].map(I=>t.get(I))}},n=h=>{let{paths:E,dirs:I}=a(h);return E.every(v=>v[0]===h)&&I.every(v=>v[0]instanceof Set&&v[0].has(h))},u=h=>o.has(h)||!n(h)?!1:(o.add(h),h(()=>A(h)),!0),A=h=>{if(!o.has(h))return!1;let{paths:E,dirs:I}=e.get(h),v=new Set;return E.forEach(x=>{let C=t.get(x);gfe.equal(C[0],h),C.length===1?t.delete(x):(C.shift(),typeof C[0]=="function"?v.add(C[0]):C[0].forEach(R=>v.add(R)))}),I.forEach(x=>{let C=t.get(x);gfe(C[0]instanceof Set),C[0].size===1&&C.length===1?t.delete(x):C[0].size===1?(C.shift(),v.add(C[0])):C[0].delete(h)}),o.delete(h),v.forEach(x=>u(x)),!0};return{check:n,reserve:(h,E)=>{h=vct?["win32 parallelization disabled"]:h.map(v=>wct(Ict(dfe(v))).toLowerCase());let I=new Set(h.map(v=>r(v)).reduce((v,x)=>v.concat(x)));return e.set(E,{dirs:I,paths:h}),h.forEach(v=>{let x=t.get(v);x?x.push(E):t.set(v,[E])}),I.forEach(v=>{let x=t.get(v);x?x[x.length-1]instanceof Set?x[x.length-1].add(E):x.push(new Set([E])):t.set(v,[new Set([E])])}),u(E)}}}});var wfe=_((vUt,Cfe)=>{var Dct=process.platform,Sct=Dct==="win32",Pct=global.__FAKE_TESTING_FS__||ve("fs"),{O_CREAT:bct,O_TRUNC:xct,O_WRONLY:kct,UV_FS_O_FILEMAP:Efe=0}=Pct.constants,Qct=Sct&&!!Efe,Fct=512*1024,Rct=Efe|xct|bct|kct;Cfe.exports=Qct?t=>t"w"});var e_=_((DUt,Nfe)=>{"use strict";var Tct=ve("assert"),Nct=Rx(),vn=ve("fs"),Lct=eC(),Wf=ve("path"),Ffe=pfe(),Ife=e3(),Oct=yfe(),Mct=t3(),fl=jE(),Uct=YE(),_ct=Y3(),Bfe=Symbol("onEntry"),V3=Symbol("checkFs"),vfe=Symbol("checkFs2"),qx=Symbol("pruneCache"),J3=Symbol("isReusable"),tc=Symbol("makeFs"),z3=Symbol("file"),X3=Symbol("directory"),Yx=Symbol("link"),Dfe=Symbol("symlink"),Sfe=Symbol("hardlink"),Pfe=Symbol("unsupported"),bfe=Symbol("checkPath"),Dh=Symbol("mkdir"),To=Symbol("onError"),jx=Symbol("pending"),xfe=Symbol("pend"),sC=Symbol("unpend"),W3=Symbol("ended"),K3=Symbol("maybeClose"),Z3=Symbol("skip"),z1=Symbol("doChown"),X1=Symbol("uid"),Z1=Symbol("gid"),$1=Symbol("checkedCwd"),Rfe=ve("crypto"),Tfe=wfe(),Hct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,e2=Hct==="win32",jct=(t,e)=>{if(!e2)return vn.unlink(t,e);let r=t+".DELETE."+Rfe.randomBytes(16).toString("hex");vn.rename(t,r,o=>{if(o)return e(o);vn.unlink(r,e)})},Gct=t=>{if(!e2)return vn.unlinkSync(t);let e=t+".DELETE."+Rfe.randomBytes(16).toString("hex");vn.renameSync(t,e),vn.unlinkSync(e)},kfe=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,Qfe=t=>_ct(Uct(fl(t))).toLowerCase(),qct=(t,e)=>{e=Qfe(e);for(let r of t.keys()){let o=Qfe(r);(o===e||o.indexOf(e+"/")===0)&&t.delete(r)}},Yct=t=>{for(let e of t.keys())t.delete(e)},t2=class extends Nct{constructor(e){if(e||(e={}),e.ondone=r=>{this[W3]=!0,this[K3]()},super(e),this[$1]=!1,this.reservations=Oct(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[jx]=0,this[W3]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid=="number"||typeof e.gid=="number"){if(typeof e.uid!="number"||typeof e.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(e.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!="number"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||e2,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=fl(Wf.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask=="number"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on("entry",r=>this[Bfe](r))}warn(e,r,o={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(o.recoverable=!1),super.warn(e,r,o)}[K3](){this[W3]&&this[jx]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[bfe](e){if(this.strip){let r=fl(e.path).split("/");if(r.length=this.strip)e.linkpath=o.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let r=fl(e.path),o=r.split("/");if(o.includes("..")||e2&&/^[a-z]:\.\.$/i.test(o[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;let[a,n]=Mct(r);a&&(e.path=n,this.warn("TAR_ENTRY_INFO",`stripping ${a} from absolute path`,{entry:e,path:r}))}if(Wf.isAbsolute(e.path)?e.absolute=fl(Wf.resolve(e.path)):e.absolute=fl(Wf.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+"/")!==0&&e.absolute!==this.cwd)return this.warn("TAR_ENTRY_ERROR","path escaped extraction target",{entry:e,path:fl(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!=="Directory"&&e.type!=="GNUDumpDir")return!1;if(this.win32){let{root:r}=Wf.win32.parse(e.absolute);e.absolute=r+Ife.encode(e.absolute.substr(r.length));let{root:o}=Wf.win32.parse(e.path);e.path=o+Ife.encode(e.path.substr(o.length))}return!0}[Bfe](e){if(!this[bfe](e))return e.resume();switch(Tct.equal(typeof e.absolute,"string"),e.type){case"Directory":case"GNUDumpDir":e.mode&&(e.mode=e.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[V3](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[Pfe](e)}}[To](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[sC](),r.resume())}[Dh](e,r,o){Ffe(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r,noChmod:this.noChmod},o)}[z1](e){return this.forceChown||this.preserveOwner&&(typeof e.uid=="number"&&e.uid!==this.processUid||typeof e.gid=="number"&&e.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[X1](e){return kfe(this.uid,e.uid,this.processUid)}[Z1](e){return kfe(this.gid,e.gid,this.processGid)}[z3](e,r){let o=e.mode&4095||this.fmode,a=new Lct.WriteStream(e.absolute,{flags:Tfe(e.size),mode:o,autoClose:!1});a.on("error",p=>{a.fd&&vn.close(a.fd,()=>{}),a.write=()=>!0,this[To](p,e),r()});let n=1,u=p=>{if(p){a.fd&&vn.close(a.fd,()=>{}),this[To](p,e),r();return}--n===0&&vn.close(a.fd,h=>{h?this[To](h,e):this[sC](),r()})};a.on("finish",p=>{let h=e.absolute,E=a.fd;if(e.mtime&&!this.noMtime){n++;let I=e.atime||new Date,v=e.mtime;vn.futimes(E,I,v,x=>x?vn.utimes(h,I,v,C=>u(C&&x)):u())}if(this[z1](e)){n++;let I=this[X1](e),v=this[Z1](e);vn.fchown(E,I,v,x=>x?vn.chown(h,I,v,C=>u(C&&x)):u())}u()});let A=this.transform&&this.transform(e)||e;A!==e&&(A.on("error",p=>{this[To](p,e),r()}),e.pipe(A)),A.pipe(a)}[X3](e,r){let o=e.mode&4095||this.dmode;this[Dh](e.absolute,o,a=>{if(a){this[To](a,e),r();return}let n=1,u=A=>{--n===0&&(r(),this[sC](),e.resume())};e.mtime&&!this.noMtime&&(n++,vn.utimes(e.absolute,e.atime||new Date,e.mtime,u)),this[z1](e)&&(n++,vn.chown(e.absolute,this[X1](e),this[Z1](e),u)),u()})}[Pfe](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[Dfe](e,r){this[Yx](e,e.linkpath,"symlink",r)}[Sfe](e,r){let o=fl(Wf.resolve(this.cwd,e.linkpath));this[Yx](e,o,"link",r)}[xfe](){this[jx]++}[sC](){this[jx]--,this[K3]()}[Z3](e){this[sC](),e.resume()}[J3](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&!e2}[V3](e){this[xfe]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,o=>this[vfe](e,o))}[qx](e){e.type==="SymbolicLink"?Yct(this.dirCache):e.type!=="Directory"&&qct(this.dirCache,e.absolute)}[vfe](e,r){this[qx](e);let o=A=>{this[qx](e),r(A)},a=()=>{this[Dh](this.cwd,this.dmode,A=>{if(A){this[To](A,e),o();return}this[$1]=!0,n()})},n=()=>{if(e.absolute!==this.cwd){let A=fl(Wf.dirname(e.absolute));if(A!==this.cwd)return this[Dh](A,this.dmode,p=>{if(p){this[To](p,e),o();return}u()})}u()},u=()=>{vn.lstat(e.absolute,(A,p)=>{if(p&&(this.keep||this.newer&&p.mtime>e.mtime)){this[Z3](e),o();return}if(A||this[J3](e,p))return this[tc](null,e,o);if(p.isDirectory()){if(e.type==="Directory"){let h=!this.noChmod&&e.mode&&(p.mode&4095)!==e.mode,E=I=>this[tc](I,e,o);return h?vn.chmod(e.absolute,e.mode,E):E()}if(e.absolute!==this.cwd)return vn.rmdir(e.absolute,h=>this[tc](h,e,o))}if(e.absolute===this.cwd)return this[tc](null,e,o);jct(e.absolute,h=>this[tc](h,e,o))})};this[$1]?n():a()}[tc](e,r,o){if(e){this[To](e,r),o();return}switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[z3](r,o);case"Link":return this[Sfe](r,o);case"SymbolicLink":return this[Dfe](r,o);case"Directory":case"GNUDumpDir":return this[X3](r,o)}}[Yx](e,r,o,a){vn[o](r,e.absolute,n=>{n?this[To](n,e):(this[sC](),e.resume()),a()})}},Gx=t=>{try{return[null,t()]}catch(e){return[e,null]}},$3=class extends t2{[tc](e,r){return super[tc](e,r,()=>{})}[V3](e){if(this[qx](e),!this[$1]){let n=this[Dh](this.cwd,this.dmode);if(n)return this[To](n,e);this[$1]=!0}if(e.absolute!==this.cwd){let n=fl(Wf.dirname(e.absolute));if(n!==this.cwd){let u=this[Dh](n,this.dmode);if(u)return this[To](u,e)}}let[r,o]=Gx(()=>vn.lstatSync(e.absolute));if(o&&(this.keep||this.newer&&o.mtime>e.mtime))return this[Z3](e);if(r||this[J3](e,o))return this[tc](null,e);if(o.isDirectory()){if(e.type==="Directory"){let u=!this.noChmod&&e.mode&&(o.mode&4095)!==e.mode,[A]=u?Gx(()=>{vn.chmodSync(e.absolute,e.mode)}):[];return this[tc](A,e)}let[n]=Gx(()=>vn.rmdirSync(e.absolute));this[tc](n,e)}let[a]=e.absolute===this.cwd?[]:Gx(()=>Gct(e.absolute));this[tc](a,e)}[z3](e,r){let o=e.mode&4095||this.fmode,a=A=>{let p;try{vn.closeSync(n)}catch(h){p=h}(A||p)&&this[To](A||p,e),r()},n;try{n=vn.openSync(e.absolute,Tfe(e.size),o)}catch(A){return a(A)}let u=this.transform&&this.transform(e)||e;u!==e&&(u.on("error",A=>this[To](A,e)),e.pipe(u)),u.on("data",A=>{try{vn.writeSync(n,A,0,A.length)}catch(p){a(p)}}),u.on("end",A=>{let p=null;if(e.mtime&&!this.noMtime){let h=e.atime||new Date,E=e.mtime;try{vn.futimesSync(n,h,E)}catch(I){try{vn.utimesSync(e.absolute,h,E)}catch{p=I}}}if(this[z1](e)){let h=this[X1](e),E=this[Z1](e);try{vn.fchownSync(n,h,E)}catch(I){try{vn.chownSync(e.absolute,h,E)}catch{p=p||I}}}a(p)})}[X3](e,r){let o=e.mode&4095||this.dmode,a=this[Dh](e.absolute,o);if(a){this[To](a,e),r();return}if(e.mtime&&!this.noMtime)try{vn.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[z1](e))try{vn.chownSync(e.absolute,this[X1](e),this[Z1](e))}catch{}r(),e.resume()}[Dh](e,r){try{return Ffe.sync(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r})}catch(o){return o}}[Yx](e,r,o,a){try{vn[o+"Sync"](r,e.absolute),a(),e.resume()}catch(n){return this[To](n,e)}}};t2.Sync=$3;Nfe.exports=t2});var _fe=_((SUt,Ufe)=>{"use strict";var Wct=OE(),Wx=e_(),Ofe=ve("fs"),Mfe=eC(),Lfe=ve("path"),t_=YE();Ufe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Wct(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Kct(o,e),o.file&&o.sync?Vct(o):o.file?Jct(o,r):o.sync?zct(o):Xct(o)};var Kct=(t,e)=>{let r=new Map(e.map(n=>[t_(n),!0])),o=t.filter,a=(n,u)=>{let A=u||Lfe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(Lfe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(t_(n)):n=>a(t_(n))},Vct=t=>{let e=new Wx.Sync(t),r=t.file,o=Ofe.statSync(r),a=t.maxReadSize||16*1024*1024;new Mfe.ReadStreamSync(r,{readSize:a,size:o.size}).pipe(e)},Jct=(t,e)=>{let r=new Wx(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("close",u),Ofe.stat(a,(p,h)=>{if(p)A(p);else{let E=new Mfe.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},zct=t=>new Wx.Sync(t),Xct=t=>new Wx(t)});var Hfe=_(us=>{"use strict";us.c=us.create=IAe();us.r=us.replace=L3();us.t=us.list=Tx();us.u=us.update=QAe();us.x=us.extract=_fe();us.Pack=Ex();us.Unpack=e_();us.Parse=Rx();us.ReadEntry=rx();us.WriteEntry=A3();us.Header=qE();us.Pax=ix();us.types=KU()});var r_,jfe,Sh,r2,n2,Gfe=Et(()=>{r_=$e(id()),jfe=ve("worker_threads"),Sh=Symbol("kTaskInfo"),r2=class{constructor(e,r){this.fn=e;this.limit=(0,r_.default)(r.poolSize)}run(e){return this.limit(()=>this.fn(e))}},n2=class{constructor(e,r){this.source=e;this.workers=[];this.limit=(0,r_.default)(r.poolSize),this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let o=this.workers.pop();o?o.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new jfe.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return e.on("message",r=>{if(!e[Sh])throw new Error("Assertion failed: Worker sent a result without having a task assigned");e[Sh].resolve(r),e[Sh]=null,e.unref(),this.workers.push(e)}),e.on("error",r=>{e[Sh]?.reject(r),e[Sh]=null}),e.on("exit",r=>{r!==0&&e[Sh]?.reject(new Error(`Worker exited with code ${r}`)),e[Sh]=null}),e}run(e){return this.limit(()=>{let r=this.workers.pop()??this.createWorker();return r.ref(),new Promise((o,a)=>{r[Sh]={resolve:o,reject:a},r.postMessage(e)})})}}});var Yfe=_((kUt,qfe)=>{var n_;qfe.exports.getContent=()=>(typeof n_>"u"&&(n_=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),n_)});var Xi={};Vt(Xi,{convertToZip:()=>tut,convertToZipWorker:()=>o_,extractArchiveTo:()=>zfe,getDefaultTaskPool:()=>Vfe,getTaskPoolForConfiguration:()=>Jfe,makeArchiveFromDirectory:()=>eut});function Zct(t,e){switch(t){case"async":return new r2(o_,{poolSize:e});case"workers":return new n2((0,s_.getContent)(),{poolSize:e});default:throw new Error(`Assertion failed: Unknown value ${t} for taskPoolMode`)}}function Vfe(){return typeof i_>"u"&&(i_=Zct("workers",Ji.availableParallelism())),i_}function Jfe(t){return typeof t>"u"?Vfe():ol($ct,t,()=>{let e=t.get("taskPoolMode"),r=t.get("taskPoolConcurrency");switch(e){case"async":return new r2(o_,{poolSize:r});case"workers":return new n2((0,s_.getContent)(),{poolSize:r});default:throw new Error(`Assertion failed: Unknown value ${e} for taskPoolMode`)}})}async function o_(t){let{tmpFile:e,tgz:r,compressionLevel:o,extractBufferOpts:a}=t,n=new zi(e,{create:!0,level:o,stats:Ea.makeDefaultStats()}),u=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return await zfe(u,n,a),n.saveAndClose(),e}async function eut(t,{baseFs:e=new Tn,prefixPath:r=Bt.root,compressionLevel:o,inMemory:a=!1}={}){let n;if(a)n=new zi(null,{level:o});else{let A=await oe.mktempPromise(),p=V.join(A,"archive.zip");n=new zi(p,{create:!0,level:o})}let u=V.resolve(Bt.root,r);return await n.copyPromise(u,t,{baseFs:e,stableTime:!0,stableSort:!0}),n}async function tut(t,e={}){let r=await oe.mktempPromise(),o=V.join(r,"archive.zip"),a=e.compressionLevel??e.configuration?.get("compressionLevel")??"mixed",n={prefixPath:e.prefixPath,stripComponents:e.stripComponents};return await(e.taskPool??Jfe(e.configuration)).run({tmpFile:o,tgz:t,compressionLevel:a,extractBufferOpts:n}),new zi(o,{level:e.compressionLevel})}async function*rut(t){let e=new Kfe.default.Parse,r=new Wfe.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",o=>{r.write(o)}),e.on("error",o=>{r.destroy(o)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let o of r){let a=o;yield a,a.resume()}}async function zfe(t,e,{stripComponents:r=0,prefixPath:o=Bt.dot}={}){function a(n){if(n.path[0]==="/")return!0;let u=n.path.split(/\//g);return!!(u.some(A=>A==="..")||u.length<=r)}for await(let n of rut(t)){if(a(n))continue;let u=V.normalize(ue.toPortablePath(n.path)).replace(/\/$/,"").split(/\//g);if(u.length<=r)continue;let A=u.slice(r).join("/"),p=V.join(o,A),h=420;switch((n.type==="Directory"||((n.mode??0)&73)!==0)&&(h|=73),n.type){case"Directory":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.mkdirSync(p,{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.writeFileSync(p,await Vy(n),{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.symlinkSync(n.linkpath,p),e.lutimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break}}return e}var Wfe,Kfe,s_,i_,$ct,Xfe=Et(()=>{Ye();St();nA();Wfe=ve("stream"),Kfe=$e(Hfe());Gfe();jl();s_=$e(Yfe());$ct=new WeakMap});var $fe=_((a_,Zfe)=>{(function(t,e){typeof a_=="object"?Zfe.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(a_,function(){function t(a,n){var u=n?"\u2514":"\u251C";return a?u+="\u2500 ":u+="\u2500\u2500\u2510",u}function e(a,n){var u=[];for(var A in a)!a.hasOwnProperty(A)||n&&typeof a[A]=="function"||u.push(A);return u}function r(a,n,u,A,p,h,E){var I="",v=0,x,C,R=A.slice(0);if(R.push([n,u])&&A.length>0&&(A.forEach(function(U,J){J>0&&(I+=(U[1]?" ":"\u2502")+" "),!C&&U[0]===n&&(C=!0)}),I+=t(a,u)+a,p&&(typeof n!="object"||n instanceof Date)&&(I+=": "+n),C&&(I+=" (circular ref.)"),E(I)),!C&&typeof n=="object"){var L=e(n,h);L.forEach(function(U){x=++v===L.length,r(U,n[U],x,R,p,h,E)})}}var o={};return o.asLines=function(a,n,u,A){var p=typeof u!="function"?u:!1;r(".",a,!1,[],n,p,A||u)},o.asTree=function(a,n,u){var A="";return r(".",a,!1,[],n,u,function(p){A+=p+` +`}),A},o})});var $s={};Vt($s,{emitList:()=>nut,emitTree:()=>npe,treeNodeToJson:()=>rpe,treeNodeToTreeify:()=>tpe});function tpe(t,{configuration:e}){let r={},o=0,a=(n,u)=>{let A=Array.isArray(n)?n.entries():Object.entries(n);for(let[p,h]of A){if(!h)continue;let{label:E,value:I,children:v}=h,x=[];typeof E<"u"&&x.push(yd(e,E,2)),typeof I<"u"&&x.push(Mt(e,I[0],I[1])),x.length===0&&x.push(yd(e,`${p}`,2));let C=x.join(": ").trim(),R=`\0${o++}\0`,L=u[`${R}${C}`]={};typeof v<"u"&&a(v,L)}};if(typeof t.children>"u")throw new Error("The root node must only contain children");return a(t.children,r),r}function rpe(t){let e=r=>{if(typeof r.children>"u"){if(typeof r.value>"u")throw new Error("Assertion failed: Expected a value to be set if the children are missing");return Ed(r.value[0],r.value[1])}let o=Array.isArray(r.children)?r.children.entries():Object.entries(r.children??{}),a=Array.isArray(r.children)?[]:{};for(let[n,u]of o)u&&(a[iut(n)]=e(u));return typeof r.value>"u"?a:{value:Ed(r.value[0],r.value[1]),children:a}};return e(t)}function nut(t,{configuration:e,stdout:r,json:o}){let a=t.map(n=>({value:n}));npe({children:a},{configuration:e,stdout:r,json:o})}function npe(t,{configuration:e,stdout:r,json:o,separators:a=0}){if(o){let u=Array.isArray(t.children)?t.children.values():Object.values(t.children??{});for(let A of u)A&&r.write(`${JSON.stringify(rpe(A))} +`);return}let n=(0,epe.asTree)(tpe(t,{configuration:e}),!1,!1);if(n=n.replace(/\0[0-9]+\0/g,""),a>=1&&(n=n.replace(/^([├└]─)/gm,`\u2502 +$1`).replace(/^│\n/,"")),a>=2)for(let u=0;u<2;++u)n=n.replace(/^([│ ].{2}[├│ ].{2}[^\n]+\n)(([│ ]).{2}[├└].{2}[^\n]*\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3 \u2502 +$2`).replace(/^│\n/,"");if(a>=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(n)}function iut(t){return typeof t=="string"?t.replace(/^\0[0-9]+\0/,""):t}var epe,ipe=Et(()=>{epe=$e($fe());Gl()});function i2(t){let e=t.match(sut);if(!e?.groups)throw new Error("Assertion failed: Expected the checksum to match the requested pattern");let r=e.groups.cacheVersion?parseInt(e.groups.cacheVersion):null;return{cacheKey:e.groups.cacheKey??null,cacheVersion:r,cacheSpec:e.groups.cacheSpec??null,hash:e.groups.hash}}var spe,l_,c_,Kx,Lr,sut,u_=Et(()=>{Ye();St();St();nA();spe=ve("crypto"),l_=$e(ve("fs"));Yl();nh();jl();bo();c_=Jy(process.env.YARN_CACHE_CHECKPOINT_OVERRIDE??process.env.YARN_CACHE_VERSION_OVERRIDE??9),Kx=Jy(process.env.YARN_CACHE_VERSION_OVERRIDE??10),Lr=class{constructor(e,{configuration:r,immutable:o=r.get("enableImmutableCache"),check:a=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,spe.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=o,this.check=a;let{cacheSpec:n,cacheKey:u}=Lr.getCacheKey(r);this.cacheSpec=n,this.cacheKey=u}static async find(e,{immutable:r,check:o}={}){let a=new Lr(e.get("cacheFolder"),{configuration:e,immutable:r,check:o});return await a.setup(),a}static getCacheKey(e){let r=e.get("compressionLevel"),o=r!=="mixed"?`c${r}`:"";return{cacheKey:[Kx,o].join(""),cacheSpec:o}}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;let e=`${this.configuration.get("globalFolder")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${lE(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let a=i2(r).hash.slice(0,10);return`${lE(e)}-${a}.zip`}isChecksumCompatible(e){if(e===null)return!1;let{cacheVersion:r,cacheSpec:o}=i2(e);if(r===null||r{let he=new zi,Be=V.join(Bt.root,nM(e));return he.mkdirSync(Be,{recursive:!0}),he.writeJsonSync(V.join(Be,dr.manifest),{name:fn(e),mocked:!0}),he},E=async(he,{isColdHit:Be,controlPath:we=null})=>{if(we===null&&u.unstablePackages?.has(e.locatorHash))return{isValid:!0,hash:null};let g=r&&!Be?i2(r).cacheKey:this.cacheKey,Ee=!u.skipIntegrityCheck||!r?`${g}/${await NP(he)}`:r;if(we!==null){let le=!u.skipIntegrityCheck||!r?`${this.cacheKey}/${await NP(we)}`:r;if(Ee!==le)throw new zt(18,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}let Se=null;switch(r!==null&&Ee!==r&&(this.check?Se="throw":i2(r).cacheKey!==i2(Ee).cacheKey?Se="update":Se=this.configuration.get("checksumBehavior")),Se){case null:case"update":return{isValid:!0,hash:Ee};case"ignore":return{isValid:!0,hash:r};case"reset":return{isValid:!1,hash:r};default:case"throw":throw new zt(18,"The remote archive doesn't match the expected checksum")}},I=async he=>{if(!n)throw new Error(`Cache check required but no loader configured for ${jr(this.configuration,e)}`);let Be=await n(),we=Be.getRealPath();Be.saveAndClose(),await oe.chmodPromise(we,420);let g=await E(he,{controlPath:we,isColdHit:!1});if(!g.isValid)throw new Error("Assertion failed: Expected a valid checksum");return g.hash},v=async()=>{if(A===null||!await oe.existsPromise(A)){let he=await n(),Be=he.getRealPath();return he.saveAndClose(),{source:"loader",path:Be}}return{source:"mirror",path:A}},x=async()=>{if(!n)throw new Error(`Cache entry required but missing for ${jr(this.configuration,e)}`);if(this.immutable)throw new zt(56,`Cache entry required but missing for ${jr(this.configuration,e)}`);let{path:he,source:Be}=await v(),{hash:we}=await E(he,{isColdHit:!0}),g=this.getLocatorPath(e,we),Ee=[];Be!=="mirror"&&A!==null&&Ee.push(async()=>{let le=`${A}${this.cacheId}`;await oe.copyFilePromise(he,le,l_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(le,420),await oe.renamePromise(le,A)}),(!u.mirrorWriteOnly||A===null)&&Ee.push(async()=>{let le=`${g}${this.cacheId}`;await oe.copyFilePromise(he,le,l_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(le,420),await oe.renamePromise(le,g)});let Se=u.mirrorWriteOnly?A??g:g;return await Promise.all(Ee.map(le=>le())),[!1,Se,we]},C=async()=>{let Be=(async()=>{let we=u.unstablePackages?.has(e.locatorHash),g=we||!r||this.isChecksumCompatible(r)?this.getLocatorPath(e,r):null,Ee=g!==null?this.markedFiles.has(g)||await p.existsPromise(g):!1,Se=!!u.mockedPackages?.has(e.locatorHash)&&(!this.check||!Ee),le=Se||Ee,ne=le?o:a;if(ne&&ne(),le){let ee=null,Ie=g;if(!Se)if(this.check)ee=await I(Ie);else{let Fe=await E(Ie,{isColdHit:!1});if(Fe.isValid)ee=Fe.hash;else return x()}return[Se,Ie,ee]}else{if(this.immutable&&we)throw new zt(56,`Cache entry required but missing for ${jr(this.configuration,e)}; consider defining ${de.pretty(this.configuration,"supportedArchitectures",de.Type.CODE)} to cache packages for multiple systems`);return x()}})();this.mutexes.set(e.locatorHash,Be);try{return await Be}finally{this.mutexes.delete(e.locatorHash)}};for(let he;he=this.mutexes.get(e.locatorHash);)await he;let[R,L,U]=await C();R||this.markedFiles.add(L);let J,te=R?()=>h():()=>new zi(L,{baseFs:p,readOnly:!0}),ae=new iy(()=>EL(()=>J=te(),he=>`Failed to open the cache entry for ${jr(this.configuration,e)}: ${he}`),V),fe=new Uu(L,{baseFs:ae,pathUtils:V}),ce=()=>{J?.discardAndClose()},me=u.unstablePackages?.has(e.locatorHash)?null:U;return[fe,ce,me]}},sut=/^(?:(?(?[0-9]+)(?.*))\/)?(?.*)$/});var Vx,ope=Et(()=>{Vx=(r=>(r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE",r))(Vx||{})});var out,oC,A_=Et(()=>{St();Nl();Qf();bo();out=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,o)=>`${r}#commit=${o}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@.+(?:\/|(?:%2f)))?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,t=>`npm:${t}`],[/^https?:\/\/[^/]+\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>_P({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],oC=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:r}){let o=V.join(e.cwd,dr.lockfile);if(!oe.existsSync(o))return;let a=await oe.readFilePromise(o,"utf8"),n=Ki(a);if(Object.hasOwn(n,"__metadata"))return;let u=this.resolutions=new Map;for(let A of Object.keys(n)){let p=s1(A);if(!p){r.reportWarning(14,`Failed to parse the string "${A}" into a proper descriptor`);continue}let h=xa(p.range)?In(p,`npm:${p.range}`):p,{version:E,resolved:I}=n[A];if(!I)continue;let v;for(let[C,R]of out){let L=I.match(C);if(L){v=R(E,...L);break}}if(!v){r.reportWarning(14,`${Gn(e.configuration,h)}: Only some patterns can be imported from legacy lockfiles (not "${I}")`);continue}let x=h;try{let C=Bd(h.range),R=s1(C.selector,!0);R&&(x=R)}catch{}u.set(h.descriptorHash,Qs(x,v))}}supportsDescriptor(e,r){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let a=this.resolutions.get(e.descriptorHash);if(!a)throw new Error("Assertion failed: The resolution should have been registered");let n=$O(a),u=o.project.configuration.normalizeDependency(n);return await this.resolver.getCandidates(u,r,o)}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}});var AA,ape=Et(()=>{Yl();O1();Gl();AA=class extends Xs{constructor({configuration:r,stdout:o,suggestInstall:a=!0}){super();this.errorCount=0;XI(this,{configuration:r}),this.configuration=r,this.stdout=o,this.suggestInstall=a}static async start(r,o){let a=new this(r);try{await o(a)}catch(n){a.reportExceptionOnce(n)}finally{await a.finalize()}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(r){}reportCacheMiss(r){}startSectionSync(r,o){return o()}async startSectionPromise(r,o){return await o()}startTimerSync(r,o,a){return(typeof o=="function"?o:a)()}async startTimerPromise(r,o,a){return await(typeof o=="function"?o:a)()}reportSeparator(){}reportInfo(r,o){}reportWarning(r,o){}reportError(r,o){this.errorCount+=1,this.stdout.write(`${Mt(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(r)}: ${o} +`)}reportProgress(r){return{...Promise.resolve().then(async()=>{for await(let{}of r);}),stop:()=>{}}}reportJson(r){}reportFold(r,o){}async finalize(){this.errorCount>0&&(this.stdout.write(` +`),this.stdout.write(`${Mt(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. +`),this.suggestInstall&&this.stdout.write(`${Mt(this.configuration,"\u27A4","redBright")} This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help. +`))}formatNameWithHyperlink(r){return yU(r,{configuration:this.configuration,json:!1})}}});var aC,f_=Et(()=>{bo();aC=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(OP(e).locatorHash))}supportsLocator(e,r){return!!(r.project.originalPackages.has(e.locatorHash)&&!r.project.lockfileNeedsRefresh)}shouldPersistResolution(e,r){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){let a=o.project.storedResolutions.get(e.descriptorHash);if(a){let u=o.project.originalPackages.get(a);if(u)return[u]}let n=o.project.originalPackages.get(OP(e).locatorHash);if(n)return[n];throw new Error("Resolution expected from the lockfile data")}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.originalPackages.get(e.locatorHash);if(!o)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return o}}});function Kf(){}function aut(t,e,r,o,a){for(var n=0,u=e.length,A=0,p=0;nx.length?R:x}),h.value=t.join(E)}else h.value=t.join(r.slice(A,A+h.count));A+=h.count,h.added||(p+=h.count)}}var v=e[u-1];return u>1&&typeof v.value=="string"&&(v.added||v.removed)&&t.equals("",v.value)&&(e[u-2].value+=v.value,e.pop()),e}function lut(t){return{newPos:t.newPos,components:t.components.slice(0)}}function cut(t,e){if(typeof t=="function")e.callback=t;else if(t)for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}function upe(t,e,r){return r=cut(r,{ignoreWhitespace:!0}),m_.diff(t,e,r)}function uut(t,e,r){return y_.diff(t,e,r)}function Jx(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Jx=function(e){return typeof e}:Jx=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Jx(t)}function p_(t){return put(t)||hut(t)||gut(t)||dut()}function put(t){if(Array.isArray(t))return h_(t)}function hut(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function gut(t,e){if(!!t){if(typeof t=="string")return h_(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return h_(t,e)}}function h_(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r"u"&&(u.context=4);var A=uut(r,o,u);if(!A)return;A.push({value:"",lines:[]});function p(U){return U.map(function(J){return" "+J})}for(var h=[],E=0,I=0,v=[],x=1,C=1,R=function(J){var te=A[J],ae=te.lines||te.value.replace(/\n$/,"").split(` +`);if(te.lines=ae,te.added||te.removed){var fe;if(!E){var ce=A[J-1];E=x,I=C,ce&&(v=u.context>0?p(ce.lines.slice(-u.context)):[],E-=v.length,I-=v.length)}(fe=v).push.apply(fe,p_(ae.map(function(le){return(te.added?"+":"-")+le}))),te.added?C+=ae.length:x+=ae.length}else{if(E)if(ae.length<=u.context*2&&J=A.length-2&&ae.length<=u.context){var g=/\n$/.test(r),Ee=/\n$/.test(o),Se=ae.length==0&&v.length>we.oldLines;!g&&Se&&r.length>0&&v.splice(we.oldLines,0,"\\ No newline at end of file"),(!g&&!Se||!Ee)&&v.push("\\ No newline at end of file")}h.push(we),E=0,I=0,v=[]}x+=ae.length,C+=ae.length}},L=0;L{Kf.prototype={diff:function(e,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=o.callback;typeof o=="function"&&(a=o,o={}),this.options=o;var n=this;function u(R){return a?(setTimeout(function(){a(void 0,R)},0),!0):R}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var A=r.length,p=e.length,h=1,E=A+p;o.maxEditLength&&(E=Math.min(E,o.maxEditLength));var I=[{newPos:-1,components:[]}],v=this.extractCommon(I[0],r,e,0);if(I[0].newPos+1>=A&&v+1>=p)return u([{value:this.join(r),count:r.length}]);function x(){for(var R=-1*h;R<=h;R+=2){var L=void 0,U=I[R-1],J=I[R+1],te=(J?J.newPos:0)-R;U&&(I[R-1]=void 0);var ae=U&&U.newPos+1=A&&te+1>=p)return u(aut(n,L.components,r,e,n.useLongestToken));I[R]=L}h++}if(a)(function R(){setTimeout(function(){if(h>E)return a();x()||R()},0)})();else for(;h<=E;){var C=x();if(C)return C}},pushComponent:function(e,r,o){var a=e[e.length-1];a&&a.added===r&&a.removed===o?e[e.length-1]={count:a.count+1,added:r,removed:o}:e.push({count:1,added:r,removed:o})},extractCommon:function(e,r,o,a){for(var n=r.length,u=o.length,A=e.newPos,p=A-a,h=0;A+1"u"?r:u}:o;return typeof t=="string"?t:JSON.stringify(g_(t,null,null,a),a," ")};s2.equals=function(t,e){return Kf.prototype.equals.call(s2,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};d_=new Kf;d_.tokenize=function(t){return t.slice()};d_.join=d_.removeEmpty=function(t){return t}});var ppe=_((s3t,fpe)=>{var yut=Hl(),Eut=pE(),Cut=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,wut=/^\w*$/;function Iut(t,e){if(yut(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||Eut(t)?!0:wut.test(t)||!Cut.test(t)||e!=null&&t in Object(e)}fpe.exports=Iut});var dpe=_((o3t,gpe)=>{var hpe=_S(),But="Expected a function";function C_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(But);var r=function(){var o=arguments,a=e?e.apply(this,o):o[0],n=r.cache;if(n.has(a))return n.get(a);var u=t.apply(this,o);return r.cache=n.set(a,u)||n,u};return r.cache=new(C_.Cache||hpe),r}C_.Cache=hpe;gpe.exports=C_});var ype=_((a3t,mpe)=>{var vut=dpe(),Dut=500;function Sut(t){var e=vut(t,function(o){return r.size===Dut&&r.clear(),o}),r=e.cache;return e}mpe.exports=Sut});var w_=_((l3t,Epe)=>{var Put=ype(),but=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,xut=/\\(\\)?/g,kut=Put(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(but,function(r,o,a,n){e.push(a?n.replace(xut,"$1"):o||r)}),e});Epe.exports=kut});var Gd=_((c3t,Cpe)=>{var Qut=Hl(),Fut=ppe(),Rut=w_(),Tut=N1();function Nut(t,e){return Qut(t)?t:Fut(t,e)?[t]:Rut(Tut(t))}Cpe.exports=Nut});var lC=_((u3t,wpe)=>{var Lut=pE(),Out=1/0;function Mut(t){if(typeof t=="string"||Lut(t))return t;var e=t+"";return e=="0"&&1/t==-Out?"-0":e}wpe.exports=Mut});var zx=_((A3t,Ipe)=>{var Uut=Gd(),_ut=lC();function Hut(t,e){e=Uut(e,t);for(var r=0,o=e.length;t!=null&&r{var jut=rP(),Gut=Gd(),qut=_I(),Bpe=il(),Yut=lC();function Wut(t,e,r,o){if(!Bpe(t))return t;e=Gut(e,t);for(var a=-1,n=e.length,u=n-1,A=t;A!=null&&++a{var Kut=zx(),Vut=I_(),Jut=Gd();function zut(t,e,r){for(var o=-1,a=e.length,n={};++o{function Xut(t,e){return t!=null&&e in Object(t)}Ppe.exports=Xut});var B_=_((g3t,xpe)=>{var Zut=Gd(),$ut=OI(),eAt=Hl(),tAt=_I(),rAt=YS(),nAt=lC();function iAt(t,e,r){e=Zut(e,t);for(var o=-1,a=e.length,n=!1;++o{var sAt=bpe(),oAt=B_();function aAt(t,e){return t!=null&&oAt(t,e,sAt)}kpe.exports=aAt});var Rpe=_((m3t,Fpe)=>{var lAt=Spe(),cAt=Qpe();function uAt(t,e){return lAt(t,e,function(r,o){return cAt(t,o)})}Fpe.exports=uAt});var Ope=_((y3t,Lpe)=>{var Tpe=pd(),AAt=OI(),fAt=Hl(),Npe=Tpe?Tpe.isConcatSpreadable:void 0;function pAt(t){return fAt(t)||AAt(t)||!!(Npe&&t&&t[Npe])}Lpe.exports=pAt});var _pe=_((E3t,Upe)=>{var hAt=GS(),gAt=Ope();function Mpe(t,e,r,o,a){var n=-1,u=t.length;for(r||(r=gAt),a||(a=[]);++n0&&r(A)?e>1?Mpe(A,e-1,r,o,a):hAt(a,A):o||(a[a.length]=A)}return a}Upe.exports=Mpe});var jpe=_((C3t,Hpe)=>{var dAt=_pe();function mAt(t){var e=t==null?0:t.length;return e?dAt(t,1):[]}Hpe.exports=mAt});var v_=_((w3t,Gpe)=>{var yAt=jpe(),EAt=AL(),CAt=fL();function wAt(t){return CAt(EAt(t,void 0,yAt),t+"")}Gpe.exports=wAt});var D_=_((I3t,qpe)=>{var IAt=Rpe(),BAt=v_(),vAt=BAt(function(t,e){return t==null?{}:IAt(t,e)});qpe.exports=vAt});var Xx,Ype=Et(()=>{Yl();Xx=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return this.resolver.supportsDescriptor(e,r)}supportsLocator(e,r){return this.resolver.supportsLocator(e,r)}shouldPersistResolution(e,r){return this.resolver.shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.resolver.bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,o,a){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}}});var Qi,S_=Et(()=>{Yl();Qi=class extends Xs{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,r){return r()}async startSectionPromise(e,r){return await r()}startTimerSync(e,r,o){return(typeof r=="function"?r:o)()}async startTimerPromise(e,r,o){return await(typeof r=="function"?r:o)()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}reportFold(e,r){}async finalize(){}}});var Wpe,cC,P_=Et(()=>{St();Wpe=$e(RP());fE();vd();Gl();nh();Qf();bo();cC=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.project=r,this.cwd=e}async setup(){this.manifest=await Ot.tryFind(this.cwd)??new Ot,this.relativeCwd=V.relative(this.project.cwd,this.cwd)||Bt.dot;let e=this.manifest.name?this.manifest.name:eA(null,`${this.computeCandidateName()}-${zs(this.relativeCwd).substring(0,6)}`);this.anchoredDescriptor=In(e,`${Xn.protocol}${this.relativeCwd}`),this.anchoredLocator=Qs(e,`${Xn.protocol}${this.relativeCwd}`);let r=this.manifest.workspaceDefinitions.map(({pattern:a})=>a);if(r.length===0)return;let o=await(0,Wpe.default)(r,{cwd:ue.fromPortablePath(this.cwd),onlyDirectories:!0,ignore:["**/node_modules","**/.git","**/.yarn"]});o.sort(),await o.reduce(async(a,n)=>{let u=V.resolve(this.cwd,ue.toPortablePath(n)),A=await oe.existsPromise(V.join(u,"package.json"));await a,A&&this.workspacesCwds.add(u)},Promise.resolve())}get anchoredPackage(){let e=this.project.storedPackages.get(this.anchoredLocator.locatorHash);if(!e)throw new Error(`Assertion failed: Expected workspace ${a1(this.project.configuration,this)} (${Mt(this.project.configuration,V.join(this.cwd,dr.manifest),yt.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);return e}accepts(e){let r=e.indexOf(":"),o=r!==-1?e.slice(0,r+1):null,a=r!==-1?e.slice(r+1):e;if(o===Xn.protocol&&V.normalize(a)===this.relativeCwd||o===Xn.protocol&&(a==="*"||a==="^"||a==="~"))return!0;let n=xa(a);return n?o===Xn.protocol?n.test(this.manifest.version??"0.0.0"):this.project.configuration.get("enableTransparentWorkspaces")&&this.manifest.version!==null?n.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?"root-workspace":`${V.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=Ot.hardDependencies}={}){let r=new Set,o=a=>{for(let n of e)for(let u of a.manifest[n].values()){let A=this.project.tryWorkspaceByDescriptor(u);A===null||r.has(A)||(r.add(A),o(A))}};return o(this),r}getRecursiveWorkspaceDependents({dependencies:e=Ot.hardDependencies}={}){let r=new Set,o=a=>{for(let n of this.project.workspaces)e.some(A=>[...n.manifest[A].values()].some(p=>{let h=this.project.tryWorkspaceByDescriptor(p);return h!==null&&i1(h.anchoredLocator,a.anchoredLocator)}))&&!r.has(n)&&(r.add(n),o(n))};return o(this),r}getRecursiveWorkspaceChildren(){let e=new Set([this]);for(let r of e)for(let o of r.workspacesCwds){let a=this.project.workspacesByCwd.get(o);a&&e.add(a)}return e.delete(this),Array.from(e)}async persistManifest(){let e={};this.manifest.exportTo(e);let r=V.join(this.cwd,Ot.fileName),o=`${JSON.stringify(e,null,this.manifest.indent)} +`;await oe.changeFilePromise(r,o,{automaticNewlines:!0}),this.manifest.raw=e}}});function kAt({project:t,allDescriptors:e,allResolutions:r,allPackages:o,accessibleLocators:a=new Set,optionalBuilds:n=new Set,peerRequirements:u=new Map,peerWarnings:A=[],volatileDescriptors:p=new Set}){let h=new Map,E=[],I=new Map,v=new Map,x=new Map,C=new Map,R=new Map,L=new Map(t.workspaces.map(ce=>{let me=ce.anchoredLocator.locatorHash,he=o.get(me);if(typeof he>"u")throw new Error("Assertion failed: The workspace should have an associated package");return[me,e1(he)]})),U=()=>{let ce=oe.mktempSync(),me=V.join(ce,"stacktrace.log"),he=String(E.length+1).length,Be=E.map((we,g)=>`${`${g+1}.`.padStart(he," ")} ${ba(we)} +`).join("");throw oe.writeFileSync(me,Be),oe.detachTemp(ce),new zt(45,`Encountered a stack overflow when resolving peer dependencies; cf ${ue.fromPortablePath(me)}`)},J=ce=>{let me=r.get(ce.descriptorHash);if(typeof me>"u")throw new Error("Assertion failed: The resolution should have been registered");let he=o.get(me);if(!he)throw new Error("Assertion failed: The package could not be found");return he},te=(ce,me,he,{top:Be,optional:we})=>{E.length>1e3&&U(),E.push(me);let g=ae(ce,me,he,{top:Be,optional:we});return E.pop(),g},ae=(ce,me,he,{top:Be,optional:we})=>{if(we||n.delete(me.locatorHash),a.has(me.locatorHash))return;a.add(me.locatorHash);let g=o.get(me.locatorHash);if(!g)throw new Error(`Assertion failed: The package (${jr(t.configuration,me)}) should have been registered`);let Ee=[],Se=[],le=[],ne=[],ee=[];for(let Fe of Array.from(g.dependencies.values())){if(g.peerDependencies.has(Fe.identHash)&&g.locatorHash!==Be)continue;if(bf(Fe))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");p.delete(Fe.descriptorHash);let At=we;if(!At){let Te=g.dependenciesMeta.get(fn(Fe));if(typeof Te<"u"){let Je=Te.get(null);typeof Je<"u"&&Je.optional&&(At=!0)}}let H=r.get(Fe.descriptorHash);if(!H)throw new Error(`Assertion failed: The resolution (${Gn(t.configuration,Fe)}) should have been registered`);let at=L.get(H)||o.get(H);if(!at)throw new Error(`Assertion failed: The package (${H}, resolved from ${Gn(t.configuration,Fe)}) should have been registered`);if(at.peerDependencies.size===0){te(Fe,at,new Map,{top:Be,optional:At});continue}let Re,ke,xe=new Set,He;Se.push(()=>{Re=tM(Fe,me.locatorHash),ke=rM(at,me.locatorHash),g.dependencies.delete(Fe.identHash),g.dependencies.set(Re.identHash,Re),r.set(Re.descriptorHash,ke.locatorHash),e.set(Re.descriptorHash,Re),o.set(ke.locatorHash,ke),Ee.push([at,Re,ke])}),le.push(()=>{He=new Map;for(let Te of ke.peerDependencies.values()){let Je=g.dependencies.get(Te.identHash);if(!Je&&n1(me,Te)&&(ce.identHash===me.identHash?Je=ce:(Je=In(me,ce.range),e.set(Je.descriptorHash,Je),r.set(Je.descriptorHash,me.locatorHash),p.delete(Je.descriptorHash))),(!Je||Je.range==="missing:")&&ke.dependencies.has(Te.identHash)){ke.peerDependencies.delete(Te.identHash);continue}Je||(Je=In(Te,"missing:")),ke.dependencies.set(Je.identHash,Je),bf(Je)&&md(x,Je.descriptorHash).add(ke.locatorHash),I.set(Je.identHash,Je),Je.range==="missing:"&&xe.add(Je.identHash),He.set(Te.identHash,he.get(Te.identHash)??ke.locatorHash)}ke.dependencies=new Map(ks(ke.dependencies,([Te,Je])=>fn(Je)))}),ne.push(()=>{if(!o.has(ke.locatorHash))return;let Te=h.get(at.locatorHash);typeof Te=="number"&&Te>=2&&U();let Je=h.get(at.locatorHash),je=typeof Je<"u"?Je+1:1;h.set(at.locatorHash,je),te(Re,ke,He,{top:Be,optional:At}),h.set(at.locatorHash,je-1)}),ee.push(()=>{let Te=g.dependencies.get(Fe.identHash);if(typeof Te>"u")throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");let Je=r.get(Te.descriptorHash);if(typeof Je>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");if(md(R,Je).add(me.locatorHash),!!o.has(ke.locatorHash)){for(let je of ke.peerDependencies.values()){let b=He.get(je.identHash);if(typeof b>"u")throw new Error("Assertion failed: Expected the peer dependency ident to be registered");Yy(Wy(C,b),fn(je)).push(ke.locatorHash)}for(let je of xe)ke.dependencies.delete(je)}})}for(let Fe of[...Se,...le])Fe();let Ie;do{Ie=!0;for(let[Fe,At,H]of Ee){let at=Wy(v,Fe.locatorHash),Re=zs(...[...H.dependencies.values()].map(Te=>{let Je=Te.range!=="missing:"?r.get(Te.descriptorHash):"missing:";if(typeof Je>"u")throw new Error(`Assertion failed: Expected the resolution for ${Gn(t.configuration,Te)} to have been registered`);return Je===Be?`${Je} (top)`:Je}),At.identHash),ke=at.get(Re);if(typeof ke>"u"){at.set(Re,At);continue}if(ke===At)continue;o.delete(H.locatorHash),e.delete(At.descriptorHash),r.delete(At.descriptorHash),a.delete(H.locatorHash);let xe=x.get(At.descriptorHash)||[],He=[g.locatorHash,...xe];x.delete(At.descriptorHash);for(let Te of He){let Je=o.get(Te);typeof Je>"u"||(Je.dependencies.get(At.identHash).descriptorHash!==ke.descriptorHash&&(Ie=!1),Je.dependencies.set(At.identHash,ke))}}}while(!Ie);for(let Fe of[...ne,...ee])Fe()};for(let ce of t.workspaces){let me=ce.anchoredLocator;p.delete(ce.anchoredDescriptor.descriptorHash),te(ce.anchoredDescriptor,me,new Map,{top:me.locatorHash,optional:!1})}let fe=new Map;for(let[ce,me]of R){let he=o.get(ce);if(typeof he>"u")throw new Error("Assertion failed: Expected the root to be registered");let Be=C.get(ce);if(!(typeof Be>"u"))for(let we of me){let g=o.get(we);if(!(typeof g>"u")&&!!t.tryWorkspaceByLocator(g))for(let[Ee,Se]of Be){let le=Js(Ee);if(g.peerDependencies.has(le.identHash))continue;let ne=`p${zs(we,Ee,ce).slice(0,5)}`;u.set(ne,{subject:we,requested:le,rootRequester:ce,allRequesters:Se});let ee=he.dependencies.get(le.identHash);if(typeof ee<"u"){let Ie=J(ee),Fe=Ie.version??"0.0.0",At=new Set;for(let at of Se){let Re=o.get(at);if(typeof Re>"u")throw new Error("Assertion failed: Expected the link to be registered");let ke=Re.peerDependencies.get(le.identHash);if(typeof ke>"u")throw new Error("Assertion failed: Expected the ident to be registered");At.add(ke.range)}if(![...At].every(at=>{if(at.startsWith(Xn.protocol)){if(!t.tryWorkspaceByLocator(Ie))return!1;at=at.slice(Xn.protocol.length),(at==="^"||at==="~")&&(at="*")}return kf(Fe,at)})){let at=ol(fe,Ie.locatorHash,()=>({type:2,requested:le,subject:Ie,dependents:new Map,requesters:new Map,links:new Map,version:Fe,hash:`p${Ie.locatorHash.slice(0,5)}`}));at.dependents.set(g.locatorHash,g),at.requesters.set(he.locatorHash,he);for(let Re of Se)at.links.set(Re,o.get(Re));A.push({type:1,subject:g,requested:le,requester:he,version:Fe,hash:ne,requirementCount:Se.length})}}else he.peerDependenciesMeta.get(Ee)?.optional||A.push({type:0,subject:g,requested:le,requester:he,hash:ne})}}}A.push(...fe.values())}function QAt(t,e){let r=wL(t.peerWarnings,"type"),o=r[2]?.map(n=>{let u=Array.from(n.links.values(),E=>{let I=t.storedPackages.get(E.locatorHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the package to be registered");let v=I.peerDependencies.get(n.requested.identHash);if(typeof v>"u")throw new Error("Assertion failed: Expected the ident to be registered");return v.range}),A=n.links.size>1?"and other dependencies request":"requests",p=sM(u),h=p?cE(t.configuration,p):Mt(t.configuration,"but they have non-overlapping ranges!","redBright");return`${cs(t.configuration,n.requested)} is listed by your project with version ${o1(t.configuration,n.version)}, which doesn't satisfy what ${cs(t.configuration,n.requesters.values().next().value)} (${Mt(t.configuration,n.hash,yt.CODE)}) ${A} (${h}).`})??[],a=r[0]?.map(n=>`${jr(t.configuration,n.subject)} doesn't provide ${cs(t.configuration,n.requested)} (${Mt(t.configuration,n.hash,yt.CODE)}), requested by ${cs(t.configuration,n.requester)}.`)??[];e.startSectionSync({reportFooter:()=>{e.reportWarning(86,`Some peer dependencies are incorrectly met; run ${Mt(t.configuration,"yarn explain peer-requirements ",yt.CODE)} for details, where ${Mt(t.configuration,"",yt.CODE)} is the six-letter p-prefixed code.`)},skipIfEmpty:!0},()=>{for(let n of ks(o,u=>Xy.default(u)))e.reportWarning(60,n);for(let n of ks(a,u=>Xy.default(u)))e.reportWarning(2,n)})}var Zx,$x,ek,Jpe,k_,x_,Q_,tk,DAt,SAt,Kpe,PAt,bAt,xAt,pl,b_,rk,Vpe,Pt,zpe=Et(()=>{St();St();Nl();jt();Zx=ve("crypto");E_();$x=$e(D_()),ek=$e(id()),Jpe=$e(zn()),k_=ve("util"),x_=$e(ve("v8")),Q_=$e(ve("zlib"));u_();S1();A_();f_();fE();uM();Yl();Ype();O1();S_();vd();P_();WP();Gl();nh();jl();vb();BU();Qf();bo();tk=Jy(process.env.YARN_LOCKFILE_VERSION_OVERRIDE??8),DAt=3,SAt=/ *, */g,Kpe=/\/$/,PAt=32,bAt=(0,k_.promisify)(Q_.default.gzip),xAt=(0,k_.promisify)(Q_.default.gunzip),pl=(r=>(r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build",r))(pl||{}),b_={restoreLinkersCustomData:["linkersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["skippedBuilds","storedBuildState"]},rk=(o=>(o[o.NotProvided=0]="NotProvided",o[o.NotCompatible=1]="NotCompatible",o[o.NotCompatibleAggregate=2]="NotCompatibleAggregate",o))(rk||{}),Vpe=t=>zs(`${DAt}`,t),Pt=class{constructor(e,{configuration:r}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.skippedBuilds=new Set;this.lockfileLastVersion=null;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.peerWarnings=[];this.linkersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){if(!e.projectCwd)throw new it(`No project found in ${r}`);let o=e.projectCwd,a=r,n=null;for(;n!==e.projectCwd;){if(n=a,oe.existsSync(V.join(n,dr.manifest))){o=n;break}a=V.dirname(n)}let u=new Pt(e.projectCwd,{configuration:e});Ke.telemetry?.reportProject(u.cwd),await u.setupResolutions(),await u.setupWorkspaces(),Ke.telemetry?.reportWorkspaceCount(u.workspaces.length),Ke.telemetry?.reportDependencyCount(u.workspaces.reduce((C,R)=>C+R.manifest.dependencies.size+R.manifest.devDependencies.size,0));let A=u.tryWorkspaceByCwd(o);if(A)return{project:u,workspace:A,locator:A.anchoredLocator};let p=await u.findLocatorForLocation(`${o}/`,{strict:!0});if(p)return{project:u,locator:p,workspace:null};let h=Mt(e,u.cwd,yt.PATH),E=Mt(e,V.relative(u.cwd,o),yt.PATH),I=`- If ${h} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,v=`- If ${h} is intended to be a project, it might be that you forgot to list ${E} in its workspace configuration.`,x=`- Finally, if ${h} is fine and you intend ${E} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new it(`The nearest package directory (${Mt(e,o,yt.PATH)}) doesn't seem to be part of the project declared in ${Mt(e,u.cwd,yt.PATH)}. + +${[I,v,x].join(` +`)}`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=V.join(this.cwd,dr.lockfile),r=this.configuration.get("defaultLanguageName");if(oe.existsSync(e)){let o=await oe.readFilePromise(e,"utf8");this.lockFileChecksum=Vpe(o);let a=Ki(o);if(a.__metadata){let n=a.__metadata.version,u=a.__metadata.cacheKey;this.lockfileLastVersion=n,this.lockfileNeedsRefresh=n"u")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${A})`);let h=xf(p.resolution,!0),E=new Ot;E.load(p,{yamlCompatibilityMode:!0});let I=E.version,v=E.languageName||r,x=p.linkType.toUpperCase(),C=p.conditions??null,R=E.dependencies,L=E.peerDependencies,U=E.dependenciesMeta,J=E.peerDependenciesMeta,te=E.bin;if(p.checksum!=null){let fe=typeof u<"u"&&!p.checksum.includes("/")?`${u}/${p.checksum}`:p.checksum;this.storedChecksums.set(h.locatorHash,fe)}let ae={...h,version:I,languageName:v,linkType:x,conditions:C,dependencies:R,peerDependencies:L,dependenciesMeta:U,peerDependenciesMeta:J,bin:te};this.originalPackages.set(ae.locatorHash,ae);for(let fe of A.split(SAt)){let ce=ih(fe);n<=6&&(ce=this.configuration.normalizeDependency(ce),ce=In(ce,ce.range.replace(/^patch:[^@]+@(?!npm(:|%3A))/,"$1npm%3A"))),this.storedDescriptors.set(ce.descriptorHash,ce),this.storedResolutions.set(ce.descriptorHash,h.locatorHash)}}}else o.includes("yarn lockfile v1")&&(this.lockfileLastVersion=-1)}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,r=(0,ek.default)(4),o=async(a,n)=>{if(e.has(n))return a;e.add(n);let u=new cC(n,{project:this});await r(()=>u.setup());let A=a.then(()=>{this.addWorkspace(u)});return Array.from(u.workspacesCwds).reduce(o,A)};await o(Promise.resolve(),this.cwd)}addWorkspace(e){let r=this.workspacesByIdent.get(e.anchoredLocator.identHash);if(typeof r<"u")throw new Error(`Duplicate workspace name ${cs(this.configuration,e.anchoredLocator)}: ${ue.fromPortablePath(e.cwd)} conflicts with ${ue.fromPortablePath(r.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.anchoredLocator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){V.isAbsolute(e)||(e=V.resolve(this.cwd,e)),e=V.normalize(e).replace(/\/+$/,"");let r=this.workspacesByCwd.get(e);return r||null}getWorkspaceByCwd(e){let r=this.tryWorkspaceByCwd(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByFilePath(e){let r=null;for(let o of this.workspaces)V.relative(o.cwd,e).startsWith("../")||r&&r.cwd.length>=o.cwd.length||(r=o);return r||null}getWorkspaceByFilePath(e){let r=this.tryWorkspaceByFilePath(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByIdent(e){let r=this.workspacesByIdent.get(e.identHash);return typeof r>"u"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${cs(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){if(e.range.startsWith(Xn.protocol)){let o=e.range.slice(Xn.protocol.length);if(o!=="^"&&o!=="~"&&o!=="*"&&!xa(o))return this.tryWorkspaceByCwd(o)}let r=this.tryWorkspaceByIdent(e);return r===null||(bf(e)&&(e=t1(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${Gn(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(Hc(e)&&(e=r1(e)),r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${jr(this.configuration,e)})`);return r}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if("descriptorHash"in e){let r=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let o=new Set(this.storedResolutions.values());typeof r<"u"&&!o.has(r)&&this.deleteLocator(r)}if("locatorHash"in e){this.deleteLocator(e.locatorHash);for(let[r,o]of this.storedResolutions)o===e.locatorHash&&this.deleteDescriptor(r)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),r=new Map;for(let[o,a]of this.storedResolutions.entries()){let n=r.get(a);n||r.set(a,n=new Set),n.add(o)}for(let o of this.originalPackages.values()){let a;try{a=e.shouldPersistResolution(o,{project:this,resolver:e})}catch{a=!1}if(!a){this.deleteLocator(o.locatorHash);let n=r.get(o.locatorHash);if(n){r.delete(o.locatorHash);for(let u of n)this.deleteDescriptor(u)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,o]of e.dependencies)bf(o)&&e.dependencies.set(r,t1(o))}getDependencyMeta(e,r){let o={},n=this.topLevelWorkspace.manifest.dependenciesMeta.get(fn(e));if(!n)return o;let u=n.get(null);if(u&&Object.assign(o,u),r===null||!Jpe.default.valid(r))return o;for(let[A,p]of n)A!==null&&A===r&&Object.assign(o,p);return o}async findLocatorForLocation(e,{strict:r=!1}={}){let o=new Qi,a=this.configuration.getLinkers(),n={project:this,report:o};for(let u of a){let A=await u.findPackageLocator(e,n);if(A){if(r&&(await u.findPackageLocation(A,n)).replace(Kpe,"")!==e.replace(Kpe,""))continue;return A}}return null}async loadUserConfig(){let e=V.join(this.cwd,".pnp.cjs");await oe.existsPromise(e)&&Df(e).setup();let r=V.join(this.cwd,"yarn.config.cjs");return await oe.existsPromise(r)?Df(r):null}async preparePackage(e,{resolver:r,resolveOptions:o}){let a=await this.configuration.getPackageExtensions(),n=this.configuration.normalizePackage(e,{packageExtensions:a});for(let[u,A]of n.dependencies){let p=await this.configuration.reduceHook(E=>E.reduceDependency,A,this,n,A,{resolver:r,resolveOptions:o});if(!n1(A,p))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let h=r.bindDescriptor(p,n,o);n.dependencies.set(u,h)}return n}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions();let r=new Map(this.originalPackages),o=[];e.lockfileOnly||this.forgetTransientResolutions();let a=e.resolver||this.configuration.makeResolver(),n=new oC(a);await n.setup(this,{report:e.report});let u=e.lockfileOnly?[new Xx(a)]:[n,a],A=new Dd([new aC(a),...u]),p=new Dd([...u]),h=this.configuration.makeFetcher(),E=e.lockfileOnly?{project:this,report:e.report,resolver:A}:{project:this,report:e.report,resolver:A,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:h,cacheOptions:{mirrorWriteOnly:!0}}},I=new Map,v=new Map,x=new Map,C=new Map,R=new Map,L=new Map,U=this.topLevelWorkspace.anchoredLocator,J=new Set,te=[],ae=M4(),fe=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(Xs.progressViaTitle(),async le=>{let ne=async H=>{let at=await Ky(async()=>await A.resolve(H,E),He=>`${jr(this.configuration,H)}: ${He}`);if(!i1(H,at))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${jr(this.configuration,H)} to ${jr(this.configuration,at)})`);C.set(at.locatorHash,at),!r.delete(at.locatorHash)&&!this.tryWorkspaceByLocator(at)&&o.push(at);let ke=await this.preparePackage(at,{resolver:A,resolveOptions:E}),xe=Uc([...ke.dependencies.values()].map(He=>At(He)));return te.push(xe),xe.catch(()=>{}),v.set(ke.locatorHash,ke),ke},ee=async H=>{let at=R.get(H.locatorHash);if(typeof at<"u")return at;let Re=Promise.resolve().then(()=>ne(H));return R.set(H.locatorHash,Re),Re},Ie=async(H,at)=>{let Re=await At(at);return I.set(H.descriptorHash,H),x.set(H.descriptorHash,Re.locatorHash),Re},Fe=async H=>{le.setTitle(Gn(this.configuration,H));let at=this.resolutionAliases.get(H.descriptorHash);if(typeof at<"u")return Ie(H,this.storedDescriptors.get(at));let Re=A.getResolutionDependencies(H,E),ke=Object.fromEntries(await Uc(Object.entries(Re).map(async([Te,Je])=>{let je=A.bindDescriptor(Je,U,E),b=await At(je);return J.add(b.locatorHash),[Te,b]}))),He=(await Ky(async()=>await A.getCandidates(H,ke,E),Te=>`${Gn(this.configuration,H)}: ${Te}`))[0];if(typeof He>"u")throw new zt(82,`${Gn(this.configuration,H)}: No candidates found`);if(e.checkResolutions){let{locators:Te}=await p.getSatisfying(H,ke,[He],{...E,resolver:p});if(!Te.find(Je=>Je.locatorHash===He.locatorHash))throw new zt(78,`Invalid resolution ${ZI(this.configuration,H,He)}`)}return I.set(H.descriptorHash,H),x.set(H.descriptorHash,He.locatorHash),ee(He)},At=H=>{let at=L.get(H.descriptorHash);if(typeof at<"u")return at;I.set(H.descriptorHash,H);let Re=Promise.resolve().then(()=>Fe(H));return L.set(H.descriptorHash,Re),Re};for(let H of this.workspaces){let at=H.anchoredDescriptor;te.push(At(at))}for(;te.length>0;){let H=[...te];te.length=0,await Uc(H)}});let ce=sl(r.values(),le=>this.tryWorkspaceByLocator(le)?sl.skip:le);if(o.length>0||ce.length>0){let le=new Set(this.workspaces.flatMap(H=>{let at=v.get(H.anchoredLocator.locatorHash);if(!at)throw new Error("Assertion failed: The workspace should have been resolved");return Array.from(at.dependencies.values(),Re=>{let ke=x.get(Re.descriptorHash);if(!ke)throw new Error("Assertion failed: The resolution should have been registered");return ke})})),ne=H=>le.has(H.locatorHash)?"0":"1",ee=H=>ba(H),Ie=ks(o,[ne,ee]),Fe=ks(ce,[ne,ee]),At=e.report.getRecommendedLength();Ie.length>0&&e.report.reportInfo(85,`${Mt(this.configuration,"+",yt.ADDED)} ${cP(this.configuration,Ie,At)}`),Fe.length>0&&e.report.reportInfo(85,`${Mt(this.configuration,"-",yt.REMOVED)} ${cP(this.configuration,Fe,At)}`)}let me=new Set(this.resolutionAliases.values()),he=new Set(v.keys()),Be=new Set,we=new Map,g=[];kAt({project:this,accessibleLocators:Be,volatileDescriptors:me,optionalBuilds:he,peerRequirements:we,peerWarnings:g,allDescriptors:I,allResolutions:x,allPackages:v});for(let le of J)he.delete(le);for(let le of me)I.delete(le),x.delete(le);let Ee=new Set,Se=new Set;for(let le of v.values())le.conditions!=null&&(!he.has(le.locatorHash)||(jP(le,fe)||(jP(le,ae)&&e.report.reportWarningOnce(77,`${jr(this.configuration,le)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${Mt(this.configuration,"supportedArchitectures",yt.SETTING)} setting`),Se.add(le.locatorHash)),Ee.add(le.locatorHash)));this.storedResolutions=x,this.storedDescriptors=I,this.storedPackages=v,this.accessibleLocators=Be,this.conditionalLocators=Ee,this.disabledLocators=Se,this.originalPackages=C,this.optionalBuilds=he,this.peerRequirements=we,this.peerWarnings=g}async fetchEverything({cache:e,report:r,fetcher:o,mode:a,persistProject:n=!0}){let u={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},A=o||this.configuration.makeFetcher(),p={checksums:this.storedChecksums,project:this,cache:e,fetcher:A,report:r,cacheOptions:u},h=Array.from(new Set(ks(this.storedResolutions.values(),[C=>{let R=this.storedPackages.get(C);if(!R)throw new Error("Assertion failed: The locator should have been registered");return ba(R)}])));a==="update-lockfile"&&(h=h.filter(C=>!this.storedChecksums.has(C)));let E=!1,I=Xs.progressViaCounter(h.length);await r.reportProgress(I);let v=(0,ek.default)(PAt);if(await Uc(h.map(C=>v(async()=>{let R=this.storedPackages.get(C);if(!R)throw new Error("Assertion failed: The locator should have been registered");if(Hc(R))return;let L;try{L=await A.fetch(R,p)}catch(U){U.message=`${jr(this.configuration,R)}: ${U.message}`,r.reportExceptionOnce(U),E=U;return}L.checksum!=null?this.storedChecksums.set(R.locatorHash,L.checksum):this.storedChecksums.delete(R.locatorHash),L.releaseFs&&L.releaseFs()}).finally(()=>{I.tick()}))),E)throw E;let x=n&&a!=="update-lockfile"?await this.cacheCleanup({cache:e,report:r}):null;if(r.cacheMisses.size>0||x){let R=(await Promise.all([...r.cacheMisses].map(async ce=>{let me=this.storedPackages.get(ce),he=this.storedChecksums.get(ce)??null,Be=e.getLocatorPath(me,he);return(await oe.statPromise(Be)).size}))).reduce((ce,me)=>ce+me,0)-(x?.size??0),L=r.cacheMisses.size,U=x?.count??0,J=`${nP(L,{zero:"No new packages",one:"A package was",more:`${Mt(this.configuration,L,yt.NUMBER)} packages were`})} added to the project`,te=`${nP(U,{zero:"none were",one:"one was",more:`${Mt(this.configuration,U,yt.NUMBER)} were`})} removed`,ae=R!==0?` (${Mt(this.configuration,R,yt.SIZE_DIFF)})`:"",fe=U>0?L>0?`${J}, and ${te}${ae}.`:`${J}, but ${te}${ae}.`:`${J}${ae}.`;r.reportInfo(13,fe)}}async linkEverything({cache:e,report:r,fetcher:o,mode:a}){let n={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},u=o||this.configuration.makeFetcher(),A={checksums:this.storedChecksums,project:this,cache:e,fetcher:u,report:r,cacheOptions:n},p=this.configuration.getLinkers(),h={project:this,report:r},E=new Map(p.map(le=>{let ne=le.makeInstaller(h),ee=le.getCustomDataKey(),Ie=this.linkersCustomData.get(ee);return typeof Ie<"u"&&ne.attachCustomData(Ie),[le,ne]})),I=new Map,v=new Map,x=new Map,C=new Map(await Uc([...this.accessibleLocators].map(async le=>{let ne=this.storedPackages.get(le);if(!ne)throw new Error("Assertion failed: The locator should have been registered");return[le,await u.fetch(ne,A)]}))),R=[],L=new Set,U=[];for(let le of this.accessibleLocators){let ne=this.storedPackages.get(le);if(typeof ne>"u")throw new Error("Assertion failed: The locator should have been registered");let ee=C.get(ne.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The fetch result should have been registered");let Ie=[],Fe=H=>{Ie.push(H)},At=this.tryWorkspaceByLocator(ne);if(At!==null){let H=[],{scripts:at}=At.manifest;for(let ke of["preinstall","install","postinstall"])at.has(ke)&&H.push({type:0,script:ke});try{for(let[ke,xe]of E)if(ke.supportsPackage(ne,h)&&(await xe.installPackage(ne,ee,{holdFetchResult:Fe})).buildRequest!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{Ie.length===0?ee.releaseFs?.():R.push(Uc(Ie).catch(()=>{}).then(()=>{ee.releaseFs?.()}))}let Re=V.join(ee.packageFs.getRealPath(),ee.prefixPath);v.set(ne.locatorHash,Re),!Hc(ne)&&H.length>0&&x.set(ne.locatorHash,{buildDirectives:H,buildLocations:[Re]})}else{let H=p.find(ke=>ke.supportsPackage(ne,h));if(!H)throw new zt(12,`${jr(this.configuration,ne)} isn't supported by any available linker`);let at=E.get(H);if(!at)throw new Error("Assertion failed: The installer should have been registered");let Re;try{Re=await at.installPackage(ne,ee,{holdFetchResult:Fe})}finally{Ie.length===0?ee.releaseFs?.():R.push(Uc(Ie).then(()=>{}).then(()=>{ee.releaseFs?.()}))}I.set(ne.locatorHash,H),v.set(ne.locatorHash,Re.packageLocation),Re.buildRequest&&Re.packageLocation&&(Re.buildRequest.skipped?(L.add(ne.locatorHash),this.skippedBuilds.has(ne.locatorHash)||U.push([ne,Re.buildRequest.explain])):x.set(ne.locatorHash,{buildDirectives:Re.buildRequest.directives,buildLocations:[Re.packageLocation]}))}}let J=new Map;for(let le of this.accessibleLocators){let ne=this.storedPackages.get(le);if(!ne)throw new Error("Assertion failed: The locator should have been registered");let ee=this.tryWorkspaceByLocator(ne)!==null,Ie=async(Fe,At)=>{let H=v.get(ne.locatorHash);if(typeof H>"u")throw new Error(`Assertion failed: The package (${jr(this.configuration,ne)}) should have been registered`);let at=[];for(let Re of ne.dependencies.values()){let ke=this.storedResolutions.get(Re.descriptorHash);if(typeof ke>"u")throw new Error(`Assertion failed: The resolution (${Gn(this.configuration,Re)}, from ${jr(this.configuration,ne)})should have been registered`);let xe=this.storedPackages.get(ke);if(typeof xe>"u")throw new Error(`Assertion failed: The package (${ke}, resolved from ${Gn(this.configuration,Re)}) should have been registered`);let He=this.tryWorkspaceByLocator(xe)===null?I.get(ke):null;if(typeof He>"u")throw new Error(`Assertion failed: The package (${ke}, resolved from ${Gn(this.configuration,Re)}) should have been registered`);He===Fe||He===null?v.get(xe.locatorHash)!==null&&at.push([Re,xe]):!ee&&H!==null&&Yy(J,ke).push(H)}H!==null&&await At.attachInternalDependencies(ne,at)};if(ee)for(let[Fe,At]of E)Fe.supportsPackage(ne,h)&&await Ie(Fe,At);else{let Fe=I.get(ne.locatorHash);if(!Fe)throw new Error("Assertion failed: The linker should have been found");let At=E.get(Fe);if(!At)throw new Error("Assertion failed: The installer should have been registered");await Ie(Fe,At)}}for(let[le,ne]of J){let ee=this.storedPackages.get(le);if(!ee)throw new Error("Assertion failed: The package should have been registered");let Ie=I.get(ee.locatorHash);if(!Ie)throw new Error("Assertion failed: The linker should have been found");let Fe=E.get(Ie);if(!Fe)throw new Error("Assertion failed: The installer should have been registered");await Fe.attachExternalDependents(ee,ne)}let te=new Map;for(let[le,ne]of E){let ee=await ne.finalizeInstall();for(let Ie of ee?.records??[])Ie.buildRequest.skipped?(L.add(Ie.locator.locatorHash),this.skippedBuilds.has(Ie.locator.locatorHash)||U.push([Ie.locator,Ie.buildRequest.explain])):x.set(Ie.locator.locatorHash,{buildDirectives:Ie.buildRequest.directives,buildLocations:Ie.buildLocations});typeof ee?.customData<"u"&&te.set(le.getCustomDataKey(),ee.customData)}if(this.linkersCustomData=te,await Uc(R),a==="skip-build")return;for(let[,le]of ks(U,([ne])=>ba(ne)))le(r);let ae=new Set(this.storedPackages.keys()),fe=new Set(x.keys());for(let le of fe)ae.delete(le);let ce=(0,Zx.createHash)("sha512");ce.update(process.versions.node),await this.configuration.triggerHook(le=>le.globalHashGeneration,this,le=>{ce.update("\0"),ce.update(le)});let me=ce.digest("hex"),he=new Map,Be=le=>{let ne=he.get(le.locatorHash);if(typeof ne<"u")return ne;let ee=this.storedPackages.get(le.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The package should have been registered");let Ie=(0,Zx.createHash)("sha512");Ie.update(le.locatorHash),he.set(le.locatorHash,"");for(let Fe of ee.dependencies.values()){let At=this.storedResolutions.get(Fe.descriptorHash);if(typeof At>"u")throw new Error(`Assertion failed: The resolution (${Gn(this.configuration,Fe)}) should have been registered`);let H=this.storedPackages.get(At);if(typeof H>"u")throw new Error("Assertion failed: The package should have been registered");Ie.update(Be(H))}return ne=Ie.digest("hex"),he.set(le.locatorHash,ne),ne},we=(le,ne)=>{let ee=(0,Zx.createHash)("sha512");ee.update(me),ee.update(Be(le));for(let Ie of ne)ee.update(Ie);return ee.digest("hex")},g=new Map,Ee=!1,Se=le=>{let ne=new Set([le.locatorHash]);for(let ee of ne){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");for(let Fe of Ie.dependencies.values()){let At=this.storedResolutions.get(Fe.descriptorHash);if(!At)throw new Error(`Assertion failed: The resolution (${Gn(this.configuration,Fe)}) should have been registered`);if(At!==le.locatorHash&&fe.has(At))return!1;let H=this.storedPackages.get(At);if(!H)throw new Error("Assertion failed: The package should have been registered");let at=this.tryWorkspaceByLocator(H);if(at){if(at.anchoredLocator.locatorHash!==le.locatorHash&&fe.has(at.anchoredLocator.locatorHash))return!1;ne.add(at.anchoredLocator.locatorHash)}ne.add(At)}}return!0};for(;fe.size>0;){let le=fe.size,ne=[];for(let ee of fe){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");if(!Se(Ie))continue;let Fe=x.get(Ie.locatorHash);if(!Fe)throw new Error("Assertion failed: The build directive should have been registered");let At=we(Ie,Fe.buildLocations);if(this.storedBuildState.get(Ie.locatorHash)===At){g.set(Ie.locatorHash,At),fe.delete(ee);continue}Ee||(await this.persistInstallStateFile(),Ee=!0),this.storedBuildState.has(Ie.locatorHash)?r.reportInfo(8,`${jr(this.configuration,Ie)} must be rebuilt because its dependency tree changed`):r.reportInfo(7,`${jr(this.configuration,Ie)} must be built because it never has been before or the last one failed`);let H=Fe.buildLocations.map(async at=>{if(!V.isAbsolute(at))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${at})`);for(let Re of Fe.buildDirectives){let ke=`# This file contains the result of Yarn building a package (${ba(Ie)}) +`;switch(Re.type){case 0:ke+=`# Script name: ${Re.script} +`;break;case 1:ke+=`# Script code: ${Re.script} +`;break}let xe=null;if(!await oe.mktempPromise(async Te=>{let Je=V.join(Te,"build.log"),{stdout:je,stderr:b}=this.configuration.getSubprocessStreams(Je,{header:ke,prefix:jr(this.configuration,Ie),report:r}),w;try{switch(Re.type){case 0:w=await Wb(Ie,Re.script,[],{cwd:at,project:this,stdin:xe,stdout:je,stderr:b});break;case 1:w=await EU(Ie,Re.script,[],{cwd:at,project:this,stdin:xe,stdout:je,stderr:b});break}}catch(F){b.write(F.stack),w=1}if(je.end(),b.end(),w===0)return!0;oe.detachTemp(Te);let P=`${jr(this.configuration,Ie)} couldn't be built successfully (exit code ${Mt(this.configuration,w,yt.NUMBER)}, logs can be found here: ${Mt(this.configuration,Je,yt.PATH)})`,y=this.optionalBuilds.has(Ie.locatorHash);return y?r.reportInfo(9,P):r.reportError(9,P),Kce&&r.reportFold(ue.fromPortablePath(Je),oe.readFileSync(Je,"utf8")),y}))return!1}return!0});ne.push(...H,Promise.allSettled(H).then(at=>{fe.delete(ee),at.every(Re=>Re.status==="fulfilled"&&Re.value===!0)&&g.set(Ie.locatorHash,At)}))}if(await Uc(ne),le===fe.size){let ee=Array.from(fe).map(Ie=>{let Fe=this.storedPackages.get(Ie);if(!Fe)throw new Error("Assertion failed: The package should have been registered");return jr(this.configuration,Fe)}).join(", ");r.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ee})`);break}}this.storedBuildState=g,this.skippedBuilds=L}async installWithNewReport(e,r){return(await Nt.start({configuration:this.configuration,json:e.json,stdout:e.stdout,forceSectionAlignment:!0,includeLogs:!e.json&&!e.quiet,includeVersion:!0},async a=>{await this.install({...r,report:a})})).exitCode()}async install(e){let r=this.configuration.get("nodeLinker");Ke.telemetry?.reportInstall(r);let o=!1;if(await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{this.configuration.get("enableOfflineMode")&&e.report.reportWarning(90,"Offline work is enabled; Yarn won't fetch packages from the remote registry if it can avoid it"),await this.configuration.triggerHook(E=>E.validateProject,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),o=!0}})}),o)return;let a=await this.configuration.getPackageExtensions();for(let E of a.values())for(let[,I]of E)for(let v of I)v.status="inactive";let n=V.join(this.cwd,dr.lockfile),u=null;if(e.immutable)try{u=await oe.readFilePromise(n,"utf8")}catch(E){throw E.code==="ENOENT"?new zt(28,"The lockfile would have been created by this install, which is explicitly forbidden."):E}await e.report.startTimerPromise("Resolution step",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise("Post-resolution validation",{skipIfEmpty:!0},async()=>{QAt(this,e.report);for(let[,E]of a)for(let[,I]of E)for(let v of I)if(v.userProvided){let x=Mt(this.configuration,v,yt.PACKAGE_EXTENSION);switch(v.status){case"inactive":e.report.reportWarning(68,`${x}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case"redundant":e.report.reportWarning(69,`${x}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(u!==null){let E=_g(u,this.generateLockfile());if(E!==u){let I=Ape(n,n,u,E,void 0,void 0,{maxEditLength:100});if(I){e.report.reportSeparator();for(let v of I.hunks){e.report.reportInfo(null,`@@ -${v.oldStart},${v.oldLines} +${v.newStart},${v.newLines} @@`);for(let x of v.lines)x.startsWith("+")?e.report.reportError(28,Mt(this.configuration,x,yt.ADDED)):x.startsWith("-")?e.report.reportError(28,Mt(this.configuration,x,yt.REMOVED)):e.report.reportInfo(null,Mt(this.configuration,x,"grey"))}e.report.reportSeparator()}throw new zt(28,"The lockfile would have been modified by this install, which is explicitly forbidden.")}}});for(let E of a.values())for(let[,I]of E)for(let v of I)v.userProvided&&v.status==="active"&&Ke.telemetry?.reportPackageExtension(Ed(v,yt.PACKAGE_EXTENSION));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e)});let A=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],p=await Promise.all(A.map(async E=>LP(E,{cwd:this.cwd})));(typeof e.persistProject>"u"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode==="update-lockfile"){e.report.reportWarning(73,`Skipped due to ${Mt(this.configuration,"mode=update-lockfile",yt.CODE)}`);return}await this.linkEverything(e);let E=await Promise.all(A.map(async I=>LP(I,{cwd:this.cwd})));for(let I=0;I{await this.configuration.triggerHook(E=>E.validateProjectAfterInstall,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),h=!0}})}),!h&&await this.configuration.triggerHook(E=>E.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,u]of this.storedResolutions.entries()){let A=e.get(u);A||e.set(u,A=new Set),A.add(n)}let r={},{cacheKey:o}=Lr.getCacheKey(this.configuration);r.__metadata={version:tk,cacheKey:o};for(let[n,u]of e.entries()){let A=this.originalPackages.get(n);if(!A)continue;let p=[];for(let I of u){let v=this.storedDescriptors.get(I);if(!v)throw new Error("Assertion failed: The descriptor should have been registered");p.push(v)}let h=p.map(I=>Pa(I)).sort().join(", "),E=new Ot;E.version=A.linkType==="HARD"?A.version:"0.0.0-use.local",E.languageName=A.languageName,E.dependencies=new Map(A.dependencies),E.peerDependencies=new Map(A.peerDependencies),E.dependenciesMeta=new Map(A.dependenciesMeta),E.peerDependenciesMeta=new Map(A.peerDependenciesMeta),E.bin=new Map(A.bin),r[h]={...E.exportTo({},{compatibilityMode:!1}),linkType:A.linkType.toLowerCase(),resolution:ba(A),checksum:this.storedChecksums.get(A.locatorHash),conditions:A.conditions||void 0}}return`${[`# This file is generated by running "yarn install" inside your project. +`,`# Manual changes might be lost - proceed with caution! +`].join("")} +`+Ba(r)}async persistLockfile(){let e=V.join(this.cwd,dr.lockfile),r="";try{r=await oe.readFilePromise(e,"utf8")}catch{}let o=this.generateLockfile(),a=_g(r,o);a!==r&&(await oe.writeFilePromise(e,a),this.lockFileChecksum=Vpe(a),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let u of Object.values(b_))e.push(...u);let r=(0,$x.default)(this,e),o=x_.default.serialize(r),a=zs(o);if(this.installStateChecksum===a)return;let n=this.configuration.get("installStatePath");await oe.mkdirPromise(V.dirname(n),{recursive:!0}),await oe.writeFilePromise(n,await bAt(o)),this.installStateChecksum=a}async restoreInstallState({restoreLinkersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:o=!0}={}){let a=this.configuration.get("installStatePath"),n;try{let u=await xAt(await oe.readFilePromise(a));n=x_.default.deserialize(u),this.installStateChecksum=zs(u)}catch{r&&await this.applyLightResolution();return}e&&typeof n.linkersCustomData<"u"&&(this.linkersCustomData=n.linkersCustomData),o&&Object.assign(this,(0,$x.default)(n,b_.restoreBuildState)),r&&(n.lockFileChecksum===this.lockFileChecksum?Object.assign(this,(0,$x.default)(n,b_.restoreResolutions)):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new Qi}),await this.persistInstallStateFile()}async persist(){let e=(0,ek.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(r=>e(()=>r.persistManifest()))])}async cacheCleanup({cache:e,report:r}){if(this.configuration.get("enableGlobalCache"))return null;let o=new Set([".gitignore"]);if(!CM(e.cwd,this.cwd)||!await oe.existsPromise(e.cwd))return null;let a=[];for(let u of await oe.readdirPromise(e.cwd)){if(o.has(u))continue;let A=V.resolve(e.cwd,u);e.markedFiles.has(A)||(e.immutable?r.reportError(56,`${Mt(this.configuration,V.basename(A),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):a.push(oe.lstatPromise(A).then(async p=>(await oe.removePromise(A),p.size))))}if(a.length===0)return null;let n=await Promise.all(a);return{count:a.length,size:n.reduce((u,A)=>u+A,0)}}}});function FAt(t){let o=Math.floor(t.timeNow/864e5),a=t.updateInterval*864e5,n=t.state.lastUpdate??t.timeNow+a+Math.floor(a*t.randomInitialInterval),u=n+a,A=t.state.lastTips??o*864e5,p=A+864e5+8*36e5-t.timeZone,h=u<=t.timeNow,E=p<=t.timeNow,I=null;return(h||E||!t.state.lastUpdate||!t.state.lastTips)&&(I={},I.lastUpdate=h?t.timeNow:n,I.lastTips=A,I.blocks=h?{}:t.state.blocks,I.displayedTips=t.state.displayedTips),{nextState:I,triggerUpdate:h,triggerTips:E,nextTips:E?o*864e5:A}}var uC,Xpe=Et(()=>{St();L1();nh();Ib();jl();Qf();uC=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.nextTips=0;this.displayedTips=[];this.shouldCommitTips=!1;this.configuration=e;let o=this.getRegistryPath();this.isNew=!oe.existsSync(o),this.shouldShowTips=!1,this.sendReport(r),this.startBuffer()}commitTips(){this.shouldShowTips&&(this.shouldCommitTips=!0)}selectTip(e){let r=new Set(this.displayedTips),o=A=>A&&rn?kf(rn,A):!1,a=e.map((A,p)=>p).filter(A=>e[A]&&o(e[A]?.selector));if(a.length===0)return null;let n=a.filter(A=>!r.has(A));if(n.length===0){let A=Math.floor(a.length*.2);this.displayedTips=A>0?this.displayedTips.slice(-A):[],n=a.filter(p=>!r.has(p))}let u=n[Math.floor(Math.random()*n.length)];return this.displayedTips.push(u),this.commitTips(),e[u]}reportVersion(e){this.reportValue("version",e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue("commandName",e||"")}reportPluginName(e){this.reportValue("pluginName",e)}reportProject(e){this.reportEnumerator("projectCount",e)}reportInstall(e){this.reportHit("installCount",e)}reportPackageExtension(e){this.reportValue("packageExtension",e)}reportWorkspaceCount(e){this.reportValue("workspaceCount",String(e))}reportDependencyCount(e){this.reportValue("dependencyCount",String(e))}reportValue(e,r){md(this.values,e).add(r)}reportEnumerator(e,r){md(this.enumerators,e).add(zs(r))}reportHit(e,r="*"){let o=Wy(this.hits,e),a=ol(o,r,()=>0);o.set(r,a+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return V.join(e,"telemetry.json")}sendReport(e){let r=this.getRegistryPath(),o;try{o=oe.readJsonSync(r)}catch{o={}}let{nextState:a,triggerUpdate:n,triggerTips:u,nextTips:A}=FAt({state:o,timeNow:Date.now(),timeZone:new Date().getTimezoneOffset()*60*1e3,randomInitialInterval:Math.random(),updateInterval:this.configuration.get("telemetryInterval")});if(this.nextTips=A,this.displayedTips=o.displayedTips??[],a!==null)try{oe.mkdirSync(V.dirname(r),{recursive:!0}),oe.writeJsonSync(r,a)}catch{return!1}if(u&&this.configuration.get("enableTips")&&(this.shouldShowTips=!0),n){let p=o.blocks??{};if(Object.keys(p).length===0){let h=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,E=I=>O4(h,I,{configuration:this.configuration}).catch(()=>{});for(let[I,v]of Object.entries(o.blocks??{})){if(Object.keys(v).length===0)continue;let x=v;x.userId=I,x.reportType="primary";for(let L of Object.keys(x.enumerators??{}))x.enumerators[L]=x.enumerators[L].length;E(x);let C=new Map,R=20;for(let[L,U]of Object.entries(x.values))U.length>0&&C.set(L,U.slice(0,R));for(;C.size>0;){let L={};L.userId=I,L.reportType="secondary",L.metrics={};for(let[U,J]of C)L.metrics[U]=J.shift(),J.length===0&&C.delete(U);E(L)}}}}return!0}applyChanges(){let e=this.getRegistryPath(),r;try{r=oe.readJsonSync(e)}catch{r={}}let o=this.configuration.get("telemetryUserId")??"*",a=r.blocks=r.blocks??{},n=a[o]=a[o]??{};for(let u of this.hits.keys()){let A=n.hits=n.hits??{},p=A[u]=A[u]??{};for(let[h,E]of this.hits.get(u))p[h]=(p[h]??0)+E}for(let u of["values","enumerators"])for(let A of this[u].keys()){let p=n[u]=n[u]??{};p[A]=[...new Set([...p[A]??[],...this[u].get(A)??[]])]}this.shouldCommitTips&&(r.lastTips=this.nextTips,r.displayedTips=this.displayedTips),oe.mkdirSync(V.dirname(e),{recursive:!0}),oe.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}}});var o2={};Vt(o2,{BuildDirectiveType:()=>Vx,CACHE_CHECKPOINT:()=>c_,CACHE_VERSION:()=>Kx,Cache:()=>Lr,Configuration:()=>Ke,DEFAULT_RC_FILENAME:()=>q4,FormatType:()=>xle,InstallMode:()=>pl,LEGACY_PLUGINS:()=>v1,LOCKFILE_VERSION:()=>tk,LegacyMigrationResolver:()=>oC,LightReport:()=>AA,LinkType:()=>zy,LockfileResolver:()=>aC,Manifest:()=>Ot,MessageName:()=>wr,MultiFetcher:()=>hE,PackageExtensionStatus:()=>BL,PackageExtensionType:()=>IL,PeerWarningType:()=>rk,Project:()=>Pt,Report:()=>Xs,ReportError:()=>zt,SettingsType:()=>D1,StreamReport:()=>Nt,TAG_REGEXP:()=>FE,TelemetryManager:()=>uC,ThrowReport:()=>Qi,VirtualFetcher:()=>gE,WindowsLinkType:()=>xb,Workspace:()=>cC,WorkspaceFetcher:()=>mE,WorkspaceResolver:()=>Xn,YarnVersion:()=>rn,execUtils:()=>Ur,folderUtils:()=>YP,formatUtils:()=>de,hashUtils:()=>wn,httpUtils:()=>nn,miscUtils:()=>_e,nodeUtils:()=>Ji,parseMessageName:()=>AS,reportOptionDeprecations:()=>LE,scriptUtils:()=>un,semverUtils:()=>kr,stringifyMessageName:()=>Wu,structUtils:()=>W,tgzUtils:()=>Xi,treeUtils:()=>$s});var Ye=Et(()=>{Db();WP();Gl();nh();Ib();jl();vb();BU();Qf();bo();Xfe();ipe();u_();S1();S1();ope();A_();ape();f_();fE();fS();cM();zpe();Yl();O1();Xpe();S_();AM();fM();vd();P_();L1();Cne()});var nhe=_((K_t,l2)=>{"use strict";var TAt=process.env.TERM_PROGRAM==="Hyper",NAt=process.platform==="win32",ehe=process.platform==="linux",F_={ballotDisabled:"\u2612",ballotOff:"\u2610",ballotOn:"\u2611",bullet:"\u2022",bulletWhite:"\u25E6",fullBlock:"\u2588",heart:"\u2764",identicalTo:"\u2261",line:"\u2500",mark:"\u203B",middot:"\xB7",minus:"\uFF0D",multiplication:"\xD7",obelus:"\xF7",pencilDownRight:"\u270E",pencilRight:"\u270F",pencilUpRight:"\u2710",percent:"%",pilcrow2:"\u2761",pilcrow:"\xB6",plusMinus:"\xB1",section:"\xA7",starsOff:"\u2606",starsOn:"\u2605",upDownArrow:"\u2195"},the=Object.assign({},F_,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),rhe=Object.assign({},F_,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:ehe?"\u25B8":"\u276F",pointerSmall:ehe?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});l2.exports=NAt&&!TAt?the:rhe;Reflect.defineProperty(l2.exports,"common",{enumerable:!1,value:F_});Reflect.defineProperty(l2.exports,"windows",{enumerable:!1,value:the});Reflect.defineProperty(l2.exports,"other",{enumerable:!1,value:rhe})});var Kc=_((V_t,R_)=>{"use strict";var LAt=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),OAt=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,ihe=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=n=>{let u=n.open=`\x1B[${n.codes[0]}m`,A=n.close=`\x1B[${n.codes[1]}m`,p=n.regex=new RegExp(`\\u001b\\[${n.codes[1]}m`,"g");return n.wrap=(h,E)=>{h.includes(A)&&(h=h.replace(p,A+u));let I=u+h+A;return E?I.replace(/\r*\n/g,`${A}$&${u}`):I},n},r=(n,u,A)=>typeof n=="function"?n(u):n.wrap(u,A),o=(n,u)=>{if(n===""||n==null)return"";if(t.enabled===!1)return n;if(t.visible===!1)return"";let A=""+n,p=A.includes(` +`),h=u.length;for(h>0&&u.includes("unstyle")&&(u=[...new Set(["unstyle",...u])].reverse());h-- >0;)A=r(t.styles[u[h]],A,p);return A},a=(n,u,A)=>{t.styles[n]=e({name:n,codes:u}),(t.keys[A]||(t.keys[A]=[])).push(n),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(h){t.alias(n,h)},get(){let h=E=>o(E,h.stack);return Reflect.setPrototypeOf(h,t),h.stack=this.stack?this.stack.concat(n):[n],h}})};return a("reset",[0,0],"modifier"),a("bold",[1,22],"modifier"),a("dim",[2,22],"modifier"),a("italic",[3,23],"modifier"),a("underline",[4,24],"modifier"),a("inverse",[7,27],"modifier"),a("hidden",[8,28],"modifier"),a("strikethrough",[9,29],"modifier"),a("black",[30,39],"color"),a("red",[31,39],"color"),a("green",[32,39],"color"),a("yellow",[33,39],"color"),a("blue",[34,39],"color"),a("magenta",[35,39],"color"),a("cyan",[36,39],"color"),a("white",[37,39],"color"),a("gray",[90,39],"color"),a("grey",[90,39],"color"),a("bgBlack",[40,49],"bg"),a("bgRed",[41,49],"bg"),a("bgGreen",[42,49],"bg"),a("bgYellow",[43,49],"bg"),a("bgBlue",[44,49],"bg"),a("bgMagenta",[45,49],"bg"),a("bgCyan",[46,49],"bg"),a("bgWhite",[47,49],"bg"),a("blackBright",[90,39],"bright"),a("redBright",[91,39],"bright"),a("greenBright",[92,39],"bright"),a("yellowBright",[93,39],"bright"),a("blueBright",[94,39],"bright"),a("magentaBright",[95,39],"bright"),a("cyanBright",[96,39],"bright"),a("whiteBright",[97,39],"bright"),a("bgBlackBright",[100,49],"bgBright"),a("bgRedBright",[101,49],"bgBright"),a("bgGreenBright",[102,49],"bgBright"),a("bgYellowBright",[103,49],"bgBright"),a("bgBlueBright",[104,49],"bgBright"),a("bgMagentaBright",[105,49],"bgBright"),a("bgCyanBright",[106,49],"bgBright"),a("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=OAt,t.hasColor=t.hasAnsi=n=>(t.ansiRegex.lastIndex=0,typeof n=="string"&&n!==""&&t.ansiRegex.test(n)),t.alias=(n,u)=>{let A=typeof u=="string"?t[u]:u;if(typeof A!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");A.stack||(Reflect.defineProperty(A,"name",{value:n}),t.styles[n]=A,A.stack=[n]),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(p){t.alias(n,p)},get(){let p=h=>o(h,p.stack);return Reflect.setPrototypeOf(p,t),p.stack=this.stack?this.stack.concat(A.stack):A.stack,p}})},t.theme=n=>{if(!LAt(n))throw new TypeError("Expected theme to be an object");for(let u of Object.keys(n))t.alias(u,n[u]);return t},t.alias("unstyle",n=>typeof n=="string"&&n!==""?(t.ansiRegex.lastIndex=0,n.replace(t.ansiRegex,"")):""),t.alias("noop",n=>n),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=nhe(),t.define=a,t};R_.exports=ihe();R_.exports.create=ihe});var No=_(sn=>{"use strict";var MAt=Object.prototype.toString,rc=Kc(),she=!1,T_=[],ohe={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};sn.longest=(t,e)=>t.reduce((r,o)=>Math.max(r,e?o[e].length:o.length),0);sn.hasColor=t=>!!t&&rc.hasColor(t);var ik=sn.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);sn.nativeType=t=>MAt.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");sn.isAsyncFn=t=>sn.nativeType(t)==="asyncfunction";sn.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";sn.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;sn.scrollDown=(t=[])=>[...t.slice(1),t[0]];sn.scrollUp=(t=[])=>[t.pop(),...t];sn.reorder=(t=[])=>{let e=t.slice();return e.sort((r,o)=>r.index>o.index?1:r.index{let o=t.length,a=r===o?0:r<0?o-1:r,n=t[e];t[e]=t[a],t[a]=n};sn.width=(t,e=80)=>{let r=t&&t.columns?t.columns:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[0]),process.platform==="win32"?r-1:r};sn.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};sn.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:o=` +`+r,width:a=80}=e,n=(o+r).match(/[^\S\n]/g)||[];a-=n.length;let u=`.{1,${a}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,A=t.trim(),p=new RegExp(u,"g"),h=A.match(p)||[];return h=h.map(E=>E.replace(/\n$/,"")),e.padEnd&&(h=h.map(E=>E.padEnd(a," "))),e.padStart&&(h=h.map(E=>E.padStart(a," "))),r+h.join(o)};sn.unmute=t=>{let e=t.stack.find(o=>rc.keys.color.includes(o));return e?rc[e]:t.stack.find(o=>o.slice(2)==="bg")?rc[e.slice(2)]:o=>o};sn.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";sn.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o));if(e){let o=rc["bg"+sn.pascal(e)];return o?o.black:t}let r=t.stack.find(o=>o.slice(0,2)==="bg");return r?rc[r.slice(2).toLowerCase()]||t:rc.none};sn.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o)),r=t.stack.find(o=>o.slice(0,2)==="bg");if(e&&!r)return rc[ohe[e]||e];if(r){let o=r.slice(2).toLowerCase(),a=ohe[o];return a&&rc["bg"+sn.pascal(a)]||t}return rc.none};sn.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),o=e>=12?"pm":"am";e=e%12;let a=e===0?12:e,n=r<10?"0"+r:r;return a+":"+n+" "+o};sn.set=(t={},e="",r)=>e.split(".").reduce((o,a,n,u)=>{let A=u.length-1>n?o[a]||{}:r;return!sn.isObject(A)&&n{let o=t[e]==null?e.split(".").reduce((a,n)=>a&&a[n],t):t[e];return o??r};sn.mixin=(t,e)=>{if(!ik(t))return e;if(!ik(e))return t;for(let r of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,r);if(o.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&ik(o.value)){let a=Object.getOwnPropertyDescriptor(t,r);ik(a.value)?t[r]=sn.merge({},t[r],e[r]):Reflect.defineProperty(t,r,o)}else Reflect.defineProperty(t,r,o);else Reflect.defineProperty(t,r,o)}return t};sn.merge=(...t)=>{let e={};for(let r of t)sn.mixin(e,r);return e};sn.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let o of Object.keys(r)){let a=r[o];typeof a=="function"?sn.define(t,o,a.bind(e)):sn.define(t,o,a)}};sn.onExit=t=>{let e=(r,o)=>{she||(she=!0,T_.forEach(a=>a()),r===!0&&process.exit(128+o))};T_.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),T_.push(t)};sn.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};sn.defineExport=(t,e,r)=>{let o;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(a){o=a},get(){return o?o():r()}})}});var ahe=_(hC=>{"use strict";hC.ctrl={a:"first",b:"backward",c:"cancel",d:"deleteForward",e:"last",f:"forward",g:"reset",i:"tab",k:"cutForward",l:"reset",n:"newItem",m:"cancel",j:"submit",p:"search",r:"remove",s:"save",u:"undo",w:"cutLeft",x:"toggleCursor",v:"paste"};hC.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};hC.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};hC.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};hC.keys={pageup:"pageUp",pagedown:"pageDown",home:"home",end:"end",cancel:"cancel",delete:"deleteForward",backspace:"delete",down:"down",enter:"submit",escape:"cancel",left:"left",space:"space",number:"number",return:"submit",right:"right",tab:"next",up:"up"}});var uhe=_((X_t,che)=>{"use strict";var lhe=ve("readline"),UAt=ahe(),_At=/^(?:\x1b)([a-zA-Z0-9])$/,HAt=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,jAt={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"};function GAt(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function qAt(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var sk=(t="",e={})=>{let r,o={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:t,raw:t,...e};if(Buffer.isBuffer(t)?t[0]>127&&t[1]===void 0?(t[0]-=128,t="\x1B"+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=o.sequence||""),o.sequence=o.sequence||t||o.name,t==="\r")o.raw=void 0,o.name="return";else if(t===` +`)o.name="enter";else if(t===" ")o.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x1B\x7F"||t==="\x1B\b")o.name="backspace",o.meta=t.charAt(0)==="\x1B";else if(t==="\x1B"||t==="\x1B\x1B")o.name="escape",o.meta=t.length===2;else if(t===" "||t==="\x1B ")o.name="space",o.meta=t.length===2;else if(t<="")o.name=String.fromCharCode(t.charCodeAt(0)+"a".charCodeAt(0)-1),o.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")o.name="number";else if(t.length===1&&t>="a"&&t<="z")o.name=t;else if(t.length===1&&t>="A"&&t<="Z")o.name=t.toLowerCase(),o.shift=!0;else if(r=_At.exec(t))o.meta=!0,o.shift=/^[A-Z]$/.test(r[1]);else if(r=HAt.exec(t)){let a=[...t];a[0]==="\x1B"&&a[1]==="\x1B"&&(o.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),u=(r[3]||r[5]||1)-1;o.ctrl=!!(u&4),o.meta=!!(u&10),o.shift=!!(u&1),o.code=n,o.name=jAt[n],o.shift=GAt(n)||o.shift,o.ctrl=qAt(n)||o.ctrl}return o};sk.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let o=lhe.createInterface({terminal:!0,input:r});lhe.emitKeypressEvents(r,o);let a=(A,p)=>e(A,sk(A,p),o),n=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",a),o.resume(),()=>{r.isTTY&&r.setRawMode(n),r.removeListener("keypress",a),o.pause(),o.close()}};sk.action=(t,e,r)=>{let o={...UAt,...r};return e.ctrl?(e.action=o.ctrl[e.name],e):e.option&&o.option?(e.action=o.option[e.name],e):e.shift?(e.action=o.shift[e.name],e):(e.action=o.keys[e.name],e)};che.exports=sk});var fhe=_((Z_t,Ahe)=>{"use strict";Ahe.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(!!e)for(let r of Object.keys(e)){let o=e[r];typeof o=="number"&&(o={interval:o}),YAt(t,r,o)}};function YAt(t,e,r={}){let o=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},a=r.interval||120;o.frames=r.frames||[],o.loading=!0;let n=setInterval(()=>{o.ms=Date.now()-o.start,o.tick++,t.render()},a);return o.stop=()=>{o.loading=!1,clearInterval(n)},Reflect.defineProperty(o,"interval",{value:n}),t.once("close",()=>o.stop()),o.stop}});var hhe=_(($_t,phe)=>{"use strict";var{define:WAt,width:KAt}=No(),N_=class{constructor(e){let r=e.options;WAt(this,"_prompt",e),this.type=e.type,this.name=e.name,this.message="",this.header="",this.footer="",this.error="",this.hint="",this.input="",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt="",this.buffer="",this.width=KAt(r.stdout||process.stdout),Object.assign(this,r),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let r=this._color||e[this.status];return typeof r=="function"?r:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading=="boolean"?this._loading:this.loadingChoices?"choices":!1}get status(){return this.cancelled?"cancelled":this.submitted?"submitted":"pending"}};phe.exports=N_});var dhe=_((e8t,ghe)=>{"use strict";var L_=No(),eo=Kc(),O_={default:eo.noop,noop:eo.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||L_.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||L_.complement(this.primary)},primary:eo.cyan,success:eo.green,danger:eo.magenta,strong:eo.bold,warning:eo.yellow,muted:eo.dim,disabled:eo.gray,dark:eo.dim.gray,underline:eo.underline,set info(t){this._info=t},get info(){return this._info||this.primary},set em(t){this._em=t},get em(){return this._em||this.primary.underline},set heading(t){this._heading=t},get heading(){return this._heading||this.muted.underline},set pending(t){this._pending=t},get pending(){return this._pending||this.primary},set submitted(t){this._submitted=t},get submitted(){return this._submitted||this.success},set cancelled(t){this._cancelled=t},get cancelled(){return this._cancelled||this.danger},set typing(t){this._typing=t},get typing(){return this._typing||this.dim},set placeholder(t){this._placeholder=t},get placeholder(){return this._placeholder||this.primary.dim},set highlight(t){this._highlight=t},get highlight(){return this._highlight||this.inverse}};O_.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(eo.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(eo.visible=t.styles.visible);let e=L_.merge({},O_,t.styles);delete e.merge;for(let r of Object.keys(eo))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});for(let r of Object.keys(eo.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});return e};ghe.exports=O_});var yhe=_((t8t,mhe)=>{"use strict";var M_=process.platform==="win32",Vf=Kc(),VAt=No(),U_={...Vf.symbols,upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:Vf.symbols.check,leftAngle:"\u2039",mark:"\u203B",minus:"\u2212",multiplication:"\xD7",obelus:"\xF7",percent:"%",pilcrow:"\xB6",pilcrow2:"\u2761",pencilUpRight:"\u2710",pencilDownRight:"\u270E",pencilRight:"\u270F",plus:"+",plusMinus:"\xB1",pointRight:"\u261E",rightAngle:"\u203A",section:"\xA7",hexagon:{off:"\u2B21",on:"\u2B22",disabled:"\u2B22"},ballot:{on:"\u2611",off:"\u2610",disabled:"\u2612"},stars:{on:"\u2605",off:"\u2606",disabled:"\u2606"},folder:{on:"\u25BC",off:"\u25B6",disabled:"\u25B6"},prefix:{pending:Vf.symbols.question,submitted:Vf.symbols.check,cancelled:Vf.symbols.cross},separator:{pending:Vf.symbols.pointerSmall,submitted:Vf.symbols.middot,cancelled:Vf.symbols.middot},radio:{off:M_?"( )":"\u25EF",on:M_?"(*)":"\u25C9",disabled:M_?"(|)":"\u24BE"},numbers:["\u24EA","\u2460","\u2461","\u2462","\u2463","\u2464","\u2465","\u2466","\u2467","\u2468","\u2469","\u246A","\u246B","\u246C","\u246D","\u246E","\u246F","\u2470","\u2471","\u2472","\u2473","\u3251","\u3252","\u3253","\u3254","\u3255","\u3256","\u3257","\u3258","\u3259","\u325A","\u325B","\u325C","\u325D","\u325E","\u325F","\u32B1","\u32B2","\u32B3","\u32B4","\u32B5","\u32B6","\u32B7","\u32B8","\u32B9","\u32BA","\u32BB","\u32BC","\u32BD","\u32BE","\u32BF"]};U_.merge=t=>{let e=VAt.merge({},Vf.symbols,U_,t.symbols);return delete e.merge,e};mhe.exports=U_});var Che=_((r8t,Ehe)=>{"use strict";var JAt=dhe(),zAt=yhe(),XAt=No();Ehe.exports=t=>{t.options=XAt.merge({},t.options.theme,t.options),t.symbols=zAt.merge(t.options),t.styles=JAt.merge(t.options)}});var Dhe=_((Bhe,vhe)=>{"use strict";var whe=process.env.TERM_PROGRAM==="Apple_Terminal",ZAt=Kc(),__=No(),Vc=vhe.exports=Bhe,Di="\x1B[",Ihe="\x07",H_=!1,Ph=Vc.code={bell:Ihe,beep:Ihe,beginning:`${Di}G`,down:`${Di}J`,esc:Di,getPosition:`${Di}6n`,hide:`${Di}?25l`,line:`${Di}2K`,lineEnd:`${Di}K`,lineStart:`${Di}1K`,restorePosition:Di+(whe?"8":"u"),savePosition:Di+(whe?"7":"s"),screen:`${Di}2J`,show:`${Di}?25h`,up:`${Di}1J`},qd=Vc.cursor={get hidden(){return H_},hide(){return H_=!0,Ph.hide},show(){return H_=!1,Ph.show},forward:(t=1)=>`${Di}${t}C`,backward:(t=1)=>`${Di}${t}D`,nextLine:(t=1)=>`${Di}E`.repeat(t),prevLine:(t=1)=>`${Di}F`.repeat(t),up:(t=1)=>t?`${Di}${t}A`:"",down:(t=1)=>t?`${Di}${t}B`:"",right:(t=1)=>t?`${Di}${t}C`:"",left:(t=1)=>t?`${Di}${t}D`:"",to(t,e){return e?`${Di}${e+1};${t+1}H`:`${Di}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?qd.left(-t):t>0?qd.right(t):"",r+=e<0?qd.up(-e):e>0?qd.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:o,input:a,prompt:n,size:u,value:A}=t;if(o=__.isPrimitive(o)?String(o):"",a=__.isPrimitive(a)?String(a):"",A=__.isPrimitive(A)?String(A):"",u){let p=Vc.cursor.up(u)+Vc.cursor.to(n.length),h=a.length-r;return h>0&&(p+=Vc.cursor.left(h)),p}if(A||e){let p=!a&&!!o?-o.length:-a.length+r;return e&&(p-=e.length),a===""&&o&&!n.includes(o)&&(p+=o.length),Vc.cursor.move(p)}}},j_=Vc.erase={screen:Ph.screen,up:Ph.up,down:Ph.down,line:Ph.line,lineEnd:Ph.lineEnd,lineStart:Ph.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return j_.line+qd.to(0);let r=n=>[...ZAt.unstyle(n)].length,o=t.split(/\r?\n/),a=0;for(let n of o)a+=1+Math.floor(Math.max(r(n)-1,0)/e);return(j_.line+qd.prevLine()).repeat(a-1)+j_.line+qd.to(0)}});var gC=_((n8t,Phe)=>{"use strict";var $At=ve("events"),She=Kc(),G_=uhe(),eft=fhe(),tft=hhe(),rft=Che(),Ra=No(),Yd=Dhe(),c2=class extends $At{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,rft(this),eft(this),this.state=new tft(this),this.initial=[e.initial,e.default].find(r=>r!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=ift(this.options.margin),this.setMaxListeners(0),nft(this)}async keypress(e,r={}){this.keypressed=!0;let o=G_.action(e,G_(e,r),this.options.actions);this.state.keypress=o,this.emit("keypress",e,o),this.emit("state",this.state.clone());let a=this.options[o.action]||this[o.action]||this.dispatch;if(typeof a=="function")return await a.call(this,e,o);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(Yd.code.beep)}cursorHide(){this.stdout.write(Yd.cursor.hide()),Ra.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(Yd.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let r=this.state.buffer;this.state.buffer="",!(!r&&!e||this.options.show===!1)&&this.stdout.write(Yd.cursor.down(e)+Yd.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:o}=this.sections(),{cursor:a,initial:n="",input:u="",value:A=""}=this,p=this.state.size=o.length,h={after:r,cursor:a,initial:n,input:u,prompt:e,size:p,value:A},E=Yd.cursor.restore(h);E&&this.stdout.write(E)}sections(){let{buffer:e,input:r,prompt:o}=this.state;o=She.unstyle(o);let a=She.unstyle(e),n=a.indexOf(o),u=a.slice(0,n),p=a.slice(n).split(` +`),h=p[0],E=p[p.length-1],v=(o+(r?" "+r:"")).length,x=ve.call(this,this.value),this.result=()=>o.call(this,this.value),typeof r.initial=="function"&&(this.initial=await r.initial.call(this,this)),typeof r.onRun=="function"&&await r.onRun.call(this,this),typeof r.onSubmit=="function"){let a=r.onSubmit.bind(this),n=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await a(this.name,this.value,this),n())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,r)=>{if(this.once("submit",e),this.once("cancel",r),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,r,o){let{options:a,state:n,symbols:u,timers:A}=this,p=A&&A[e];n.timer=p;let h=a[e]||n[e]||u[e],E=r&&r[e]!=null?r[e]:await h;if(E==="")return E;let I=await this.resolve(E,n,r,o);return!I&&r&&r[e]?this.resolve(h,n,r,o):I}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,o=this.state;return o.timer=r,Ra.isObject(e)&&(e=e[o.status]||e.pending),Ra.hasColor(e)?e:(this.styles[o.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return Ra.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,o=this.state;o.timer=r;let a=e[o.status]||e.pending||o.separator,n=await this.resolve(a,o);return Ra.isObject(n)&&(n=n[o.status]||n.pending),Ra.hasColor(n)?n:this.styles.muted(n)}async pointer(e,r){let o=await this.element("pointer",e,r);if(typeof o=="string"&&Ra.hasColor(o))return o;if(o){let a=this.styles,n=this.index===r,u=n?a.primary:h=>h,A=await this.resolve(o[n?"on":"off"]||o,this.state),p=Ra.hasColor(A)?A:u(A);return n?p:" ".repeat(A.length)}}async indicator(e,r){let o=await this.element("indicator",e,r);if(typeof o=="string"&&Ra.hasColor(o))return o;if(o){let a=this.styles,n=e.enabled===!0,u=n?a.success:a.dark,A=o[n?"on":"off"]||o;return Ra.hasColor(A)?A:u(A)}return""}body(){return null}footer(){if(this.state.status==="pending")return this.element("footer")}header(){if(this.state.status==="pending")return this.element("header")}async hint(){if(this.state.status==="pending"&&!this.isValue(this.state.input)){let e=await this.element("hint");return Ra.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?"":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==""}resolve(e,...r){return Ra.resolve(this,e,...r)}get base(){return c2.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||Ra.height(this.stdout,25)}get width(){return this.options.columns||Ra.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:r}=this.state,o=[r,e].find(this.isValue.bind(this));return this.isValue(o)?o:this.initial}static get prompt(){return e=>new this(e).run()}};function nft(t){let e=a=>t[a]===void 0||typeof t[a]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],o=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let a of Object.keys(t.options)){if(r.includes(a)||/^on[A-Z]/.test(a))continue;let n=t.options[a];typeof n=="function"&&e(a)?o.includes(a)||(t[a]=n.bind(t)):typeof t[a]!="function"&&(t[a]=n)}}function ift(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=a=>a%2===0?` +`:" ",o=[];for(let a=0;a<4;a++){let n=r(a);e[a]?o.push(n.repeat(e[a])):o.push("")}return o}Phe.exports=c2});var khe=_((i8t,xhe)=>{"use strict";var sft=No(),bhe={default(t,e){return e},checkbox(t,e){throw new Error("checkbox role is not implemented yet")},editable(t,e){throw new Error("editable role is not implemented yet")},expandable(t,e){throw new Error("expandable role is not implemented yet")},heading(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||"",e},input(t,e){throw new Error("input role is not implemented yet")},option(t,e){return bhe.default(t,e)},radio(t,e){throw new Error("radio role is not implemented yet")},separator(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||t.symbols.line.repeat(5),e},spacer(t,e){return e}};xhe.exports=(t,e={})=>{let r=sft.merge({},bhe,e.roles);return r[t]||r.default}});var u2=_((s8t,Rhe)=>{"use strict";var oft=Kc(),aft=gC(),lft=khe(),ok=No(),{reorder:q_,scrollUp:cft,scrollDown:uft,isObject:Qhe,swap:Aft}=ok,Y_=class extends aft{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){typeof this.options.initial=="function"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:r,autofocus:o,suggest:a}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(n=>n.enabled=!1),typeof a!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");Qhe(r)&&(r=Object.keys(r)),Array.isArray(r)?(o!=null&&(this.index=this.findIndex(o)),r.forEach(n=>this.enable(this.find(n))),await this.render()):(o!=null&&(r=o),typeof r=="string"&&(r=this.findIndex(r)),typeof r=="number"&&r>-1&&(this.index=Math.max(0,Math.min(r,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,r){this.state.loadingChoices=!0;let o=[],a=0,n=async(u,A)=>{typeof u=="function"&&(u=await u.call(this)),u instanceof Promise&&(u=await u);for(let p=0;p(this.state.loadingChoices=!1,u))}async toChoice(e,r,o){if(typeof e=="function"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e=="string"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let a=e.value;if(e=lft(e.role,this.options)(this,e),typeof e.disabled=="string"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint="(disabled)"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||"",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input="",e.index=r,e.cursor=0,ok.define(e,"parent",o),e.level=o?o.level+1:1,e.indent==null&&(e.indent=o?o.indent+" ":e.indent||""),e.path=o?o.path+"."+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,oft.unstyle(e.message).length));let u={...e};return e.reset=(A=u.input,p=u.value)=>{for(let h of Object.keys(u))e[h]=u[h];e.input=A,e.value=p},a==null&&typeof e.initial=="function"&&(e.input=await e.initial.call(this,this.state,e,r)),e}async onChoice(e,r){this.emit("choice",e,r,this),typeof e.onChoice=="function"&&await e.onChoice.call(this,this.state,e,r)}async addChoice(e,r,o){let a=await this.toChoice(e,r,o);return this.choices.push(a),this.index=this.choices.length-1,this.limit=this.choices.length,a}async newItem(e,r,o){let a={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(a,r,o);return n.updateChoice=()=>{delete n.newChoice,n.name=n.message=n.input,n.input="",n.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,r){if(this.multiple&&this[r.name])return this[r.name]();this.alert()}focus(e,r){return typeof r!="boolean"&&(r=e.enabled),r&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=r&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectedr.enabled);return this.choices.forEach(r=>r.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(r=>!!r.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,r){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof r!="boolean"&&(r=!e.enabled),e.enabled=r,e.choices&&e.choices.forEach(a=>this.toggle(a,r));let o=e.parent;for(;o;){let a=o.choices.filter(n=>this.isDisabled(n));o.enabled=a.every(n=>n.enabled===!0),o=o.parent}return Fhe(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let r=o=>{let a=Number(o);if(a>this.choices.length-1)return this.alert();let n=this.focused,u=this.choices.find(A=>a===A.index);if(!u.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(u)===-1){let A=q_(this.choices),p=A.indexOf(u);if(n.index>p){let h=A.slice(p,p+this.limit),E=A.filter(I=>!h.includes(I));this.choices=h.concat(E)}else{let h=p-this.limit+1;this.choices=A.slice(h).concat(A.slice(0,h))}}return this.index=this.choices.indexOf(u),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(o=>{let a=this.choices.length,n=this.num,u=(A=!1,p)=>{clearTimeout(this.numberTimeout),A&&(p=r(n)),this.num="",o(p)};if(n==="0"||n.length===1&&Number(n+"0")>a)return u(!0);if(Number(n)>a)return u(!1,this.alert());this.numberTimeout=setTimeout(()=>u(!0),this.delay)})}home(){return this.choices=q_(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=q_(this.choices);return this.choices=r.slice(e).concat(r.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===0?this.alert():e>r&&o===0?this.scrollUp():(this.index=(o-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===r-1?this.alert():e>r&&o===r-1?this.scrollDown():(this.index=(o+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=cft(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=uft(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){Aft(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(o=>e[o]===!0)?!0:e&&e.role==="heading"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(r=>this.isEnabled(r));if(e.choices){let r=e.choices.filter(o=>!this.isDisabled(o));return e.enabled&&r.every(o=>this.isEnabled(o))}return e.enabled&&!this.isDisabled(e)}isChoice(e,r){return e.name===r||e.index===Number(r)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(r=>this.isChoice(e,r)):this.isChoice(e,this.initial)}map(e=[],r="value"){return[].concat(e||[]).reduce((o,a)=>(o[a]=this.find(a,r),o),{})}filter(e,r){let a=typeof e=="function"?e:(A,p)=>[A.name,p].includes(e),u=(this.options.multiple?this.state._choices:this.choices).filter(a);return r?u.map(A=>A[r]):u}find(e,r){if(Qhe(e))return r?e[r]:e;let a=typeof e=="function"?e:(u,A)=>[u.name,A].includes(e),n=this.choices.find(a);if(n)return r?n[r]:n}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(u=>u.newChoice))return this.alert();let{reorder:r,sort:o}=this.options,a=this.multiple===!0,n=this.selected;return n===void 0?this.alert():(Array.isArray(n)&&r!==!1&&o!==!0&&(n=ok.reorder(n)),this.value=a?n.map(u=>u.name):n.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let r of e)this.state._choices.some(o=>o.name===r.name)||this.state._choices.push(r);if(!this._initial&&this.options.initial){this._initial=!0;let r=this.initial;if(typeof r=="string"||typeof r=="number"){let o=this.find(r);o&&(this.initial=o.index,this.focus(o,!0))}}}get choices(){return Fhe(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:r,choices:o}=this,a=e.limit||this._limit||r.limit||o.length;return Math.min(a,this.height)}set value(e){super.value=e}get value(){return typeof super.value!="string"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function Fhe(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(ok.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let o=r.choices.filter(a=>!t.isDisabled(a));r.enabled=o.every(a=>a.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}Rhe.exports=Y_});var bh=_((o8t,The)=>{"use strict";var fft=u2(),W_=No(),K_=class extends fft{constructor(e){super(e),this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,r){if(this.multiple)return this[r.name]?await this[r.name](e,r):await super.dispatch(e,r);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,r){return!this.multiple||this.options.pointer?super.pointer(e,r):""}indicator(e,r){return this.multiple?super.indicator(e,r):""}choiceMessage(e,r){let o=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!W_.hasColor(o)&&(o=this.styles.strong(o)),this.resolve(o,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await this.indicator(e,r)+(e.pad||""),u=await this.resolve(e.hint,this.state,e,r);u&&!W_.hasColor(u)&&(u=this.styles.muted(u));let A=this.indent(e),p=await this.choiceMessage(e,r),h=()=>[this.margin[3],A+a+n,p,this.margin[1],u].filter(Boolean).join(" ");return e.role==="heading"?h():e.disabled?(W_.hasColor(p)||(p=this.styles.disabled(p)),h()):(o&&(p=this.styles.em(p)),h())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(n,u)=>await this.renderChoice(n,u)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let o=this.margin[0]+r.join(` +`),a;return this.options.choicesHeader&&(a=await this.resolve(this.options.choicesHeader,this.state)),[a,o].filter(Boolean).join(` +`)}format(){return!this.state.submitted||this.state.cancelled?"":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(", "):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:r}=this.state,o="",a=await this.header(),n=await this.prefix(),u=await this.separator(),A=await this.message();this.options.promptLine!==!1&&(o=[n,A,u,""].join(" "),this.state.prompt=o);let p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();p&&(o+=p),h&&!o.includes(h)&&(o+=" "+h),e&&!p&&!E.trim()&&this.multiple&&this.emptyError!=null&&(o+=this.styles.danger(this.emptyError)),this.clear(r),this.write([a,o,E,I].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};The.exports=K_});var Lhe=_((a8t,Nhe)=>{"use strict";var pft=bh(),hft=(t,e)=>{let r=t.toLowerCase();return o=>{let n=o.toLowerCase().indexOf(r),u=e(o.slice(n,n+r.length));return n>=0?o.slice(0,n)+u+o.slice(n+r.length):o}},V_=class extends pft{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:r,input:o}=this.state;return this.input=o.slice(0,r)+e+o.slice(r),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:r}=this.state;return r?(this.input=r.slice(0,e-1)+r.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:r}=this.state;return r[e]===void 0?this.alert():(this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,r=this.state._choices){if(typeof this.options.suggest=="function")return this.options.suggest.call(this,e,r);let o=e.toLowerCase();return r.filter(a=>a.message.toLowerCase().includes(o))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!=="pending")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,r=hft(this.input,e),o=this.choices;this.choices=o.map(a=>({...a,message:r(a.message)})),await super.render(),this.choices=o}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Nhe.exports=V_});var z_=_((l8t,Ohe)=>{"use strict";var J_=No();Ohe.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:o="",pos:a,showCursor:n=!0,color:u}=e,A=u||t.styles.placeholder,p=J_.inverse(t.styles.primary),h=R=>p(t.styles.black(R)),E=r,I=" ",v=h(I);if(t.blink&&t.blink.off===!0&&(h=R=>R,v=""),n&&a===0&&o===""&&r==="")return h(I);if(n&&a===0&&(r===o||r===""))return h(o[0])+A(o.slice(1));o=J_.isPrimitive(o)?`${o}`:"",r=J_.isPrimitive(r)?`${r}`:"";let x=o&&o.startsWith(r)&&o!==r,C=x?h(o[r.length]):v;if(a!==r.length&&n===!0&&(E=r.slice(0,a)+h(r[a])+r.slice(a+1),C=""),n===!1&&(C=""),x){let R=t.styles.unstyle(E+C);return E+C+A(o.slice(R.length))}return E+C}});var ak=_((c8t,Mhe)=>{"use strict";var gft=Kc(),dft=bh(),mft=z_(),X_=class extends dft{constructor(e){super({...e,multiple:!0}),this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(r=>r!=null),this.emptyError="",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(r=>r.reset&&r.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let r=this.focused;if(!r)return this.alert();let{cursor:o,input:a}=r;return r.value=r.input=a.slice(0,o)+e+a.slice(o),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:o}=e;return e.value=e.input=o.slice(0,r-1)+o.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:o}=e;if(o[r]===void 0)return this.alert();let a=`${o}`.slice(0,r)+`${o}`.slice(r+1);return e.value=e.input=a,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,r){return this.dispatch(e,r)}number(e,r){return this.dispatch(e,r)}next(){let e=this.focused;if(!e)return this.alert();let{initial:r,input:o}=e;return r&&r.startsWith(o)&&o!==r?(e.value=e.input=r,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"\u29BF":"\u2299"}async choiceSeparator(e,r){let o=await this.resolve(e.separator,this.state,e,r)||":";return o?" "+this.styles.disabled(o):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:o,styles:a}=this,{cursor:n,initial:u="",name:A,hint:p,input:h=""}=e,{muted:E,submitted:I,primary:v,danger:x}=a,C=p,R=this.index===r,L=e.validate||(()=>!0),U=await this.choiceSeparator(e,r),J=e.message;this.align==="right"&&(J=J.padStart(this.longest+1," ")),this.align==="left"&&(J=J.padEnd(this.longest+1," "));let te=this.values[A]=h||u,ae=h?"success":"dark";await L.call(e,te,this.state)!==!0&&(ae="danger");let fe=a[ae],ce=fe(await this.indicator(e,r))+(e.pad||""),me=this.indent(e),he=()=>[me,ce,J+U,h,C].filter(Boolean).join(" ");if(o.submitted)return J=gft.unstyle(J),h=I(h),C="",he();if(e.format)h=await e.format.call(this,h,e,r);else{let Be=this.styles.muted;h=mft(this,{input:h,initial:u,pos:n,showCursor:R,color:Be})}return this.isValue(h)||(h=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[A]=await e.result.call(this,te,e,r)),R&&(J=v(J)),e.error?h+=(h?" ":"")+x(e.error.trim()):e.hint&&(h+=(h?" ":"")+E(e.hint.trim())),he()}async submit(){return this.value=this.values,super.base.submit.call(this)}};Mhe.exports=X_});var Z_=_((u8t,_he)=>{"use strict";var yft=ak(),Eft=()=>{throw new Error("expected prompt to have a custom authenticate method")},Uhe=(t=Eft)=>{class e extends yft{constructor(o){super(o)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(o){return Uhe(o)}}return e};_he.exports=Uhe()});var Ghe=_((A8t,jhe)=>{"use strict";var Cft=Z_();function wft(t,e){return t.username===this.options.username&&t.password===this.options.password}var Hhe=(t=wft)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(o){return this.options.showPassword?o:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(o.length))}}];class r extends Cft.create(t){constructor(a){super({...a,choices:e})}static create(a){return Hhe(a)}}return r};jhe.exports=Hhe()});var lk=_((f8t,qhe)=>{"use strict";var Ift=gC(),{isPrimitive:Bft,hasColor:vft}=No(),$_=class extends Ift{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:r,state:o}=this;return o.submitted?r.success(e):r.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return Bft(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return vft(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=this.styles.muted(this.default),A=[o,n,u,a].filter(Boolean).join(" ");this.state.prompt=A;let p=await this.header(),h=this.value=this.cast(e),E=await this.format(h),I=await this.error()||await this.hint(),v=await this.footer();I&&!A.includes(I)&&(E+=" "+I),A+=" "+E,this.clear(r),this.write([p,A,v].filter(Boolean).join(` +`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};qhe.exports=$_});var Whe=_((p8t,Yhe)=>{"use strict";var Dft=lk(),e8=class extends Dft{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};Yhe.exports=e8});var Vhe=_((h8t,Khe)=>{"use strict";var Sft=bh(),Pft=ak(),dC=Pft.prototype,t8=class extends Sft{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let o=this.focused,a=o.parent||{};return!o.editable&&!a.editable&&(e==="a"||e==="i")?super[e]():dC.dispatch.call(this,e,r)}append(e,r){return dC.append.call(this,e,r)}delete(e,r){return dC.delete.call(this,e,r)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?dC.next.call(this):super.next()}prev(){return this.focused.editable?dC.prev.call(this):super.prev()}async indicator(e,r){let o=e.indicator||"",a=e.editable?o:super.indicator(e,r);return await this.resolve(a,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?dC.renderChoice.call(this,e,r):super.renderChoice(e,r)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let r of this.choices){if(typeof r.validate!="function"||r.role==="heading")continue;let o=r.parent?this.value[r.parent.name]:this.value;if(r.editable?o=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(o=r.enabled===!0),e=await r.validate(o,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e=="string"?e:"Invalid Input"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let r=e.parent?this.value[e.parent.name]:this.value;if(e.role==="heading"){this.value[e.name]={};continue}e.editable?r[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(r[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Khe.exports=t8});var Wd=_((g8t,Jhe)=>{"use strict";var bft=gC(),xft=z_(),{isPrimitive:kft}=No(),r8=class extends bft{constructor(e){super(e),this.initial=kft(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let o=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!o||o.name!=="return")?this.append(` +`,r):super.keypress(e,r)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,r){if(!e||r.ctrl||r.code)return this.alert();this.append(e)}append(e){let{cursor:r,input:o}=this.state;this.input=`${o}`.slice(0,r)+e+`${o}`.slice(r),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:r}=this.state;if(e<=0)return this.alert();this.input=`${r}`.slice(0,e-1)+`${r}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:r}=this.state;if(r[e]===void 0)return this.alert();this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let r=this.input.slice(0,e),o=this.input.slice(e),a=r.split(" ");this.state.clipboard.push(a.pop()),this.input=a.join(" "),this.cursor=this.input.length,this.input+=o,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let r=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||r):xft(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),o=await this.separator(),a=await this.message(),n=[r,a,o].filter(Boolean).join(" ");this.state.prompt=n;let u=await this.header(),A=await this.format(),p=await this.error()||await this.hint(),h=await this.footer();p&&!A.includes(p)&&(A+=" "+p),n+=" "+A,this.clear(e),this.write([u,n,h].filter(Boolean).join(` +`)),this.restore()}};Jhe.exports=r8});var Xhe=_((d8t,zhe)=>{"use strict";var Qft=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),ck=t=>Qft(t).filter(Boolean);zhe.exports=(t,e={},r="")=>{let{past:o=[],present:a=""}=e,n,u;switch(t){case"prev":case"undo":return n=o.slice(0,o.length-1),u=o[o.length-1]||"",{past:ck([r,...n]),present:u};case"next":case"redo":return n=o.slice(1),u=o[0]||"",{past:ck([...n,r]),present:u};case"save":return{past:ck([...o,r]),present:""};case"remove":return u=ck(o.filter(A=>A!==r)),a="",u.length&&(a=u.pop()),{past:u,present:a};default:throw new Error(`Invalid action: "${t}"`)}}});var i8=_((m8t,$he)=>{"use strict";var Fft=Wd(),Zhe=Xhe(),n8=class extends Fft{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let o=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:o},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=Zhe(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion("prev")}altDown(){return this.completion("next")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=Zhe("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};$he.exports=n8});var t0e=_((y8t,e0e)=>{"use strict";var Rft=Wd(),s8=class extends Rft{format(){return""}};e0e.exports=s8});var n0e=_((E8t,r0e)=>{"use strict";var Tft=Wd(),o8=class extends Tft{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||""}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:r=>r;return this.list.map(e).join(", ")}async submit(e){let r=this.state.error||await this.validate(this.list,this.state);return r!==!0?(this.state.error=r,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};r0e.exports=o8});var s0e=_((C8t,i0e)=>{"use strict";var Nft=bh(),a8=class extends Nft{constructor(e){super({...e,multiple:!0})}};i0e.exports=a8});var c8=_((w8t,o0e)=>{"use strict";var Lft=Wd(),l8=class extends Lft{constructor(e={}){super({style:"number",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e==="."&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let r=e||this.minor,o=this.toNumber(this.input);return o>this.max+r?this.alert():(this.input=`${o+r}`,this.render())}down(e){let r=e||this.minor,o=this.toNumber(this.input);return othis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};o0e.exports=l8});var l0e=_((I8t,a0e)=>{a0e.exports=c8()});var u0e=_((B8t,c0e)=>{"use strict";var Oft=Wd(),u8=class extends Oft{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):""}};c0e.exports=u8});var p0e=_((v8t,f0e)=>{"use strict";var Mft=Kc(),Uft=u2(),A0e=No(),A8=class extends Uft{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||"left"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||` + `;let r=e.startNumber||1;typeof this.scale=="number"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((o,a)=>({name:a+r})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let r of this.choices){e=Math.max(e,r.message.length),r.scaleIndex=r.initial||2,r.scale=[];for(let o=0;o=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return""}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.index)).join(", "):""}pointer(){return""}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?"":["",...this.scale.map(o=>` ${o.name} - ${o.message}`)].map(o=>this.styles.muted(o)).join(` +`)}renderScaleHeading(e){let r=this.scale.map(p=>p.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let o=this.scaleLength-r.join("").length,a=Math.round(o/(r.length-1)),u=r.map(p=>this.styles.strong(p)).join(" ".repeat(a)),A=" ".repeat(this.widths[0]);return this.margin[3]+A+this.margin[1]+u}scaleIndicator(e,r,o){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,o);let a=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):a?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let o=e.scale.map(n=>this.scaleIndicator(e,n,r)),a=this.term==="Hyper"?"":" ";return o.join(a+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await e.hint;n&&!A0e.hasColor(n)&&(n=this.styles.muted(n));let u=C=>this.margin[3]+C.replace(/\s+$/,"").padEnd(this.widths[0]," "),A=this.newline,p=this.indent(e),h=await this.resolve(e.message,this.state,e,r),E=await this.renderScale(e,r),I=this.margin[1]+this.margin[3];this.scaleLength=Mft.unstyle(E).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-I.length);let x=A0e.wordWrap(h,{width:this.widths[0],newline:A}).split(` +`).map(C=>u(C)+this.margin[1]);return o&&(E=this.styles.info(E),x=x.map(C=>this.styles.info(C))),x[0]+=E,this.linebreak&&x.push(""),[p+a,x.join(` +`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return"";this.tableize();let e=this.visible.map(async(a,n)=>await this.renderChoice(a,n)),r=await Promise.all(e),o=await this.renderScaleHeading();return this.margin[0]+[o,...r.map(a=>a.join(" "))].join(` +`)}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u="";this.options.promptLine!==!1&&(u=[o,n,a,""].join(" "),this.state.prompt=u);let A=await this.header(),p=await this.format(),h=await this.renderScaleKey(),E=await this.error()||await this.hint(),I=await this.renderChoices(),v=await this.footer(),x=this.emptyError;p&&(u+=p),E&&!u.includes(E)&&(u+=" "+E),e&&!p&&!I.trim()&&this.multiple&&x!=null&&(u+=this.styles.danger(x)),this.clear(r),this.write([A,u,h,I,v].filter(Boolean).join(` +`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};f0e.exports=A8});var d0e=_((D8t,g0e)=>{"use strict";var h0e=Kc(),_ft=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",p8=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=_ft(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},Hft=async(t={},e={},r=o=>o)=>{let o=new Set,a=t.fields||[],n=t.template,u=[],A=[],p=[],h=1;typeof n=="function"&&(n=await n());let E=-1,I=()=>n[++E],v=()=>n[E+1],x=C=>{C.line=h,u.push(C)};for(x({type:"bos",value:""});Eae.name===U.key);U.field=a.find(ae=>ae.name===U.key),te||(te=new p8(U),A.push(te)),te.lines.push(U.line-1);continue}let R=u[u.length-1];R.type==="text"&&R.line===h?R.value+=C:x({type:"text",value:C})}return x({type:"eos",value:""}),{input:n,tabstops:u,unique:o,keys:p,items:A}};g0e.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),o={...e.values,...e.initial},{tabstops:a,items:n,keys:u}=await Hft(e,o),A=f8("result",t,e),p=f8("format",t,e),h=f8("validate",t,e,!0),E=t.isValue.bind(t);return async(I={},v=!1)=>{let x=0;I.required=r,I.items=n,I.keys=u,I.output="";let C=async(J,te,ae,fe)=>{let ce=await h(J,te,ae,fe);return ce===!1?"Invalid field "+ae.name:ce};for(let J of a){let te=J.value,ae=J.key;if(J.type!=="template"){te&&(I.output+=te);continue}if(J.type==="template"){let fe=n.find(we=>we.name===ae);e.required===!0&&I.required.add(fe.name);let ce=[fe.input,I.values[fe.value],fe.value,te].find(E),he=(fe.field||{}).message||J.inner;if(v){let we=await C(I.values[ae],I,fe,x);if(we&&typeof we=="string"||we===!1){I.invalid.set(ae,we);continue}I.invalid.delete(ae);let g=await A(I.values[ae],I,fe,x);I.output+=h0e.unstyle(g);continue}fe.placeholder=!1;let Be=te;te=await p(te,I,fe,x),ce!==te?(I.values[ae]=ce,te=t.styles.typing(ce),I.missing.delete(he)):(I.values[ae]=void 0,ce=`<${he}>`,te=t.styles.primary(ce),fe.placeholder=!0,I.required.has(ae)&&I.missing.add(he)),I.missing.has(he)&&I.validating&&(te=t.styles.warning(ce)),I.invalid.has(ae)&&I.validating&&(te=t.styles.danger(ce)),x===I.index&&(Be!==te?te=t.styles.underline(te):te=t.styles.heading(h0e.unstyle(te))),x++}te&&(I.output+=te)}let R=I.output.split(` +`).map(J=>" "+J),L=n.length,U=0;for(let J of n)I.invalid.has(J.name)&&J.lines.forEach(te=>{R[te][0]===" "&&(R[te]=I.styles.danger(I.symbols.bullet)+R[te].slice(1))}),t.isValue(I.values[J.name])&&U++;return I.completed=(U/L*100).toFixed(0),I.output=R.join(` +`),I.output}};function f8(t,e,r,o){return(a,n,u,A)=>typeof u.field[t]=="function"?u.field[t].call(e,a,n,u,A):[o,a].find(p=>e.isValue(p))}});var y0e=_((S8t,m0e)=>{"use strict";var jft=Kc(),Gft=d0e(),qft=gC(),h8=class extends qft{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await Gft(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let r=this.getItem();this.cursor+=e,r.cursor+=e}dispatch(e,r){if(!r.code&&!r.ctrl&&e!=null&&this.getItem()){this.append(e,r);return}this.alert()}append(e,r){let o=this.getItem(),a=o.input.slice(0,this.cursor),n=o.input.slice(this.cursor);this.input=o.input=`${a}${e}${n}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let r=e.input.slice(this.cursor),o=e.input.slice(0,this.cursor-1);this.input=e.input=`${o}${r}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let r=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(r=this.styles.danger),r(`${this.state.completed}% completed`)}async render(){let{index:e,keys:r=[],submitted:o,size:a}=this.state,n=[this.options.newline,` +`].find(J=>J!=null),u=await this.prefix(),A=await this.separator(),p=await this.message(),h=[u,p,A].filter(Boolean).join(" ");this.state.prompt=h;let E=await this.header(),I=await this.error()||"",v=await this.hint()||"",x=o?"":await this.interpolate(this.state),C=this.state.key=r[e]||"",R=await this.format(C),L=await this.footer();R&&(h+=" "+R),v&&!R&&this.state.completed===0&&(h+=" "+v),this.clear(a);let U=[E,h,x,L,I.trim()];this.write(U.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:r,keys:o,index:a}=this.state,n=r.find(u=>u.name===o[a]);return n&&n.input!=null&&(this.input=n.input,this.cursor=n.cursor),n}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:o,values:a}=this.state;if(e.size){let A="";for(let[p,h]of e)A+=`Invalid ${p}: ${h} +`;return this.state.error=A,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let u=jft.unstyle(o).split(` +`).map(A=>A.slice(1)).join(` +`);return this.value={values:a,result:u},super.submit()}};m0e.exports=h8});var C0e=_((P8t,E0e)=>{"use strict";var Yft="(Use + to sort)",Wft=bh(),g8=class extends Wft{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,Yft].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let o=await super.renderChoice(e,r),a=this.symbols.identicalTo+" ",n=this.index===r&&this.sorting?this.styles.muted(a):" ";return this.options.drag===!1&&(n=""),this.options.numbered===!0?n+`${r+1} - `+o:n+o}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};E0e.exports=g8});var I0e=_((b8t,w0e)=>{"use strict";var Kft=u2(),d8=class extends Kft{constructor(e={}){if(super(e),this.emptyError=e.emptyError||"No items were selected",this.term=process.env.TERM_PROGRAM,!this.options.header){let r=["","4 - Strongly Agree","3 - Agree","2 - Neutral","1 - Disagree","0 - Strongly Disagree",""];r=r.map(o=>this.styles.muted(o)),this.state.header=r.join(` + `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let o of r)o.scale=Vft(5,this.options),o.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],o=r.selected;return e.scale.forEach(a=>a.selected=!1),r.selected=!o,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=this.term==="Hyper",n=a?9:8,u=a?"":" ",A=this.symbols.line.repeat(n),p=" ".repeat(n+(a?0:1)),h=te=>(te?this.styles.success("\u25C9"):"\u25EF")+u,E=r+1+".",I=o?this.styles.heading:this.styles.noop,v=await this.resolve(e.message,this.state,e,r),x=this.indent(e),C=x+e.scale.map((te,ae)=>h(ae===e.scaleIdx)).join(A),R=te=>te===e.scaleIdx?I(te):te,L=x+e.scale.map((te,ae)=>R(ae)).join(p),U=()=>[E,v].filter(Boolean).join(" "),J=()=>[U(),C,L," "].filter(Boolean).join(` +`);return o&&(C=this.styles.cyan(C),L=this.styles.cyan(L)),J()}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(o,a)=>await this.renderChoice(o,a)),r=await Promise.all(e);return r.length||r.push(this.styles.danger("No matching choices")),r.join(` +`)}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.scaleIdx)).join(", "):""}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=[o,n,a].filter(Boolean).join(" ");this.state.prompt=u;let A=await this.header(),p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();(p||!h)&&(u+=" "+p),h&&!u.includes(h)&&(u+=" "+h),e&&!p&&!E&&this.multiple&&this.type!=="form"&&(u+=this.styles.danger(this.emptyError)),this.clear(r),this.write([u,A,E,I].filter(Boolean).join(` +`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function Vft(t,e={}){if(Array.isArray(e.scale))return e.scale.map(o=>({...o}));let r=[];for(let o=1;o{B0e.exports=i8()});var S0e=_((k8t,D0e)=>{"use strict";var Jft=lk(),m8=class extends Jft{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",r){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=o=>this.styles.primary.underline(o);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,r=await this.header(),o=await this.prefix(),a=await this.separator(),n=await this.message(),u=await this.format(),A=await this.error()||await this.hint(),p=await this.footer(),h=[o,n,a,u].join(" ");this.state.prompt=h,A&&!h.includes(A)&&(h+=" "+A),this.clear(e),this.write([r,h,p].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};D0e.exports=m8});var b0e=_((Q8t,P0e)=>{"use strict";var zft=bh(),y8=class extends zft{constructor(e){if(super(e),typeof this.options.correctChoice!="number"||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,r){let o=await super.toChoices(e,r);if(o.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>o.length)throw new Error("Please specify the index of the correct answer from the list of choices");return o}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};P0e.exports=y8});var k0e=_(E8=>{"use strict";var x0e=No(),As=(t,e)=>{x0e.defineExport(E8,t,e),x0e.defineExport(E8,t.toLowerCase(),e)};As("AutoComplete",()=>Lhe());As("BasicAuth",()=>Ghe());As("Confirm",()=>Whe());As("Editable",()=>Vhe());As("Form",()=>ak());As("Input",()=>i8());As("Invisible",()=>t0e());As("List",()=>n0e());As("MultiSelect",()=>s0e());As("Numeral",()=>l0e());As("Password",()=>u0e());As("Scale",()=>p0e());As("Select",()=>bh());As("Snippet",()=>y0e());As("Sort",()=>C0e());As("Survey",()=>I0e());As("Text",()=>v0e());As("Toggle",()=>S0e());As("Quiz",()=>b0e())});var F0e=_((R8t,Q0e)=>{Q0e.exports={ArrayPrompt:u2(),AuthPrompt:Z_(),BooleanPrompt:lk(),NumberPrompt:c8(),StringPrompt:Wd()}});var f2=_((T8t,T0e)=>{"use strict";var R0e=ve("assert"),w8=ve("events"),xh=No(),Jc=class extends w8{constructor(e,r){super(),this.options=xh.merge({},e),this.answers={...r}}register(e,r){if(xh.isObject(e)){for(let a of Object.keys(e))this.register(a,e[a]);return this}R0e.equal(typeof r,"function","expected a function");let o=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[o]=r:this.prompts[o]=r(this.Prompt,this),this}async prompt(e=[]){for(let r of[].concat(e))try{typeof r=="function"&&(r=await r.call(this)),await this.ask(xh.merge({},this.options,r))}catch(o){return Promise.reject(o)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=xh.merge({},this.options,e),{type:o,name:a}=e,{set:n,get:u}=xh;if(typeof o=="function"&&(o=await o.call(this,e,this.answers)),!o)return this.answers[a];R0e(this.prompts[o],`Prompt "${o}" is not registered`);let A=new this.prompts[o](r),p=u(this.answers,a);A.state.answers=this.answers,A.enquirer=this,a&&A.on("submit",E=>{this.emit("answer",a,E,A),n(this.answers,a,E)});let h=A.emit.bind(A);return A.emit=(...E)=>(this.emit.call(this,...E),h(...E)),this.emit("prompt",A,this),r.autofill&&p!=null?(A.value=A.input=p,r.autofill==="show"&&await A.submit()):p=A.value=await A.run(),p}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||gC()}static get prompts(){return k0e()}static get types(){return F0e()}static get prompt(){let e=(r,...o)=>{let a=new this(...o),n=a.emit.bind(a);return a.emit=(...u)=>(e.emit(...u),n(...u)),a.prompt(r)};return xh.mixinEmitter(e,new w8),e}};xh.mixinEmitter(Jc,new w8);var C8=Jc.prompts;for(let t of Object.keys(C8)){let e=t.toLowerCase(),r=o=>new C8[t](o).run();Jc.prompt[e]=r,Jc[e]=r,Jc[t]||Reflect.defineProperty(Jc,t,{get:()=>C8[t]})}var A2=t=>{xh.defineExport(Jc,t,()=>Jc.types[t])};A2("ArrayPrompt");A2("AuthPrompt");A2("BooleanPrompt");A2("NumberPrompt");A2("StringPrompt");T0e.exports=Jc});var d2=_((dHt,H0e)=>{var rpt=zx();function npt(t,e,r){var o=t==null?void 0:rpt(t,e);return o===void 0?r:o}H0e.exports=npt});var q0e=_((IHt,G0e)=>{function ipt(t,e){for(var r=-1,o=t==null?0:t.length;++r{var spt=dd(),opt=zS();function apt(t,e){return t&&spt(e,opt(e),t)}Y0e.exports=apt});var V0e=_((vHt,K0e)=>{var lpt=dd(),cpt=qy();function upt(t,e){return t&&lpt(e,cpt(e),t)}K0e.exports=upt});var z0e=_((DHt,J0e)=>{var Apt=dd(),fpt=qS();function ppt(t,e){return Apt(t,fpt(t),e)}J0e.exports=ppt});var P8=_((SHt,X0e)=>{var hpt=GS(),gpt=tP(),dpt=qS(),mpt=WN(),ypt=Object.getOwnPropertySymbols,Ept=ypt?function(t){for(var e=[];t;)hpt(e,dpt(t)),t=gpt(t);return e}:mpt;X0e.exports=Ept});var $0e=_((PHt,Z0e)=>{var Cpt=dd(),wpt=P8();function Ipt(t,e){return Cpt(t,wpt(t),e)}Z0e.exports=Ipt});var b8=_((bHt,ege)=>{var Bpt=YN(),vpt=P8(),Dpt=qy();function Spt(t){return Bpt(t,Dpt,vpt)}ege.exports=Spt});var rge=_((xHt,tge)=>{var Ppt=Object.prototype,bpt=Ppt.hasOwnProperty;function xpt(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&bpt.call(t,"index")&&(r.index=t.index,r.input=t.input),r}tge.exports=xpt});var ige=_((kHt,nge)=>{var kpt=$S();function Qpt(t,e){var r=e?kpt(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}nge.exports=Qpt});var oge=_((QHt,sge)=>{var Fpt=/\w*$/;function Rpt(t){var e=new t.constructor(t.source,Fpt.exec(t));return e.lastIndex=t.lastIndex,e}sge.exports=Rpt});var Age=_((FHt,uge)=>{var age=pd(),lge=age?age.prototype:void 0,cge=lge?lge.valueOf:void 0;function Tpt(t){return cge?Object(cge.call(t)):{}}uge.exports=Tpt});var pge=_((RHt,fge)=>{var Npt=$S(),Lpt=ige(),Opt=oge(),Mpt=Age(),Upt=oL(),_pt="[object Boolean]",Hpt="[object Date]",jpt="[object Map]",Gpt="[object Number]",qpt="[object RegExp]",Ypt="[object Set]",Wpt="[object String]",Kpt="[object Symbol]",Vpt="[object ArrayBuffer]",Jpt="[object DataView]",zpt="[object Float32Array]",Xpt="[object Float64Array]",Zpt="[object Int8Array]",$pt="[object Int16Array]",eht="[object Int32Array]",tht="[object Uint8Array]",rht="[object Uint8ClampedArray]",nht="[object Uint16Array]",iht="[object Uint32Array]";function sht(t,e,r){var o=t.constructor;switch(e){case Vpt:return Npt(t);case _pt:case Hpt:return new o(+t);case Jpt:return Lpt(t,r);case zpt:case Xpt:case Zpt:case $pt:case eht:case tht:case rht:case nht:case iht:return Upt(t,r);case jpt:return new o;case Gpt:case Wpt:return new o(t);case qpt:return Opt(t);case Ypt:return new o;case Kpt:return Mpt(t)}}fge.exports=sht});var gge=_((THt,hge)=>{var oht=qI(),aht=Ju(),lht="[object Map]";function cht(t){return aht(t)&&oht(t)==lht}hge.exports=cht});var Ege=_((NHt,yge)=>{var uht=gge(),Aht=WS(),dge=KS(),mge=dge&&dge.isMap,fht=mge?Aht(mge):uht;yge.exports=fht});var wge=_((LHt,Cge)=>{var pht=qI(),hht=Ju(),ght="[object Set]";function dht(t){return hht(t)&&pht(t)==ght}Cge.exports=dht});var Dge=_((OHt,vge)=>{var mht=wge(),yht=WS(),Ige=KS(),Bge=Ige&&Ige.isSet,Eht=Bge?yht(Bge):mht;vge.exports=Eht});var x8=_((MHt,xge)=>{var Cht=HS(),wht=q0e(),Iht=rP(),Bht=W0e(),vht=V0e(),Dht=sL(),Sht=eP(),Pht=z0e(),bht=$0e(),xht=zN(),kht=b8(),Qht=qI(),Fht=rge(),Rht=pge(),Tht=aL(),Nht=Hl(),Lht=UI(),Oht=Ege(),Mht=il(),Uht=Dge(),_ht=zS(),Hht=qy(),jht=1,Ght=2,qht=4,Sge="[object Arguments]",Yht="[object Array]",Wht="[object Boolean]",Kht="[object Date]",Vht="[object Error]",Pge="[object Function]",Jht="[object GeneratorFunction]",zht="[object Map]",Xht="[object Number]",bge="[object Object]",Zht="[object RegExp]",$ht="[object Set]",e0t="[object String]",t0t="[object Symbol]",r0t="[object WeakMap]",n0t="[object ArrayBuffer]",i0t="[object DataView]",s0t="[object Float32Array]",o0t="[object Float64Array]",a0t="[object Int8Array]",l0t="[object Int16Array]",c0t="[object Int32Array]",u0t="[object Uint8Array]",A0t="[object Uint8ClampedArray]",f0t="[object Uint16Array]",p0t="[object Uint32Array]",ri={};ri[Sge]=ri[Yht]=ri[n0t]=ri[i0t]=ri[Wht]=ri[Kht]=ri[s0t]=ri[o0t]=ri[a0t]=ri[l0t]=ri[c0t]=ri[zht]=ri[Xht]=ri[bge]=ri[Zht]=ri[$ht]=ri[e0t]=ri[t0t]=ri[u0t]=ri[A0t]=ri[f0t]=ri[p0t]=!0;ri[Vht]=ri[Pge]=ri[r0t]=!1;function Ak(t,e,r,o,a,n){var u,A=e&jht,p=e&Ght,h=e&qht;if(r&&(u=a?r(t,o,a,n):r(t)),u!==void 0)return u;if(!Mht(t))return t;var E=Nht(t);if(E){if(u=Fht(t),!A)return Sht(t,u)}else{var I=Qht(t),v=I==Pge||I==Jht;if(Lht(t))return Dht(t,A);if(I==bge||I==Sge||v&&!a){if(u=p||v?{}:Tht(t),!A)return p?bht(t,vht(u,t)):Pht(t,Bht(u,t))}else{if(!ri[I])return a?t:{};u=Rht(t,I,A)}}n||(n=new Cht);var x=n.get(t);if(x)return x;n.set(t,u),Uht(t)?t.forEach(function(L){u.add(Ak(L,e,r,L,t,n))}):Oht(t)&&t.forEach(function(L,U){u.set(U,Ak(L,e,r,U,t,n))});var C=h?p?kht:xht:p?Hht:_ht,R=E?void 0:C(t);return wht(R||t,function(L,U){R&&(U=L,L=t[U]),Iht(u,U,Ak(L,e,r,U,t,n))}),u}xge.exports=Ak});var k8=_((UHt,kge)=>{var h0t=x8(),g0t=1,d0t=4;function m0t(t){return h0t(t,g0t|d0t)}kge.exports=m0t});var Q8=_((_Ht,Qge)=>{var y0t=I_();function E0t(t,e,r){return t==null?t:y0t(t,e,r)}Qge.exports=E0t});var Lge=_((WHt,Nge)=>{var C0t=Object.prototype,w0t=C0t.hasOwnProperty;function I0t(t,e){return t!=null&&w0t.call(t,e)}Nge.exports=I0t});var Mge=_((KHt,Oge)=>{var B0t=Lge(),v0t=B_();function D0t(t,e){return t!=null&&v0t(t,e,B0t)}Oge.exports=D0t});var _ge=_((VHt,Uge)=>{function S0t(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}Uge.exports=S0t});var jge=_((JHt,Hge)=>{var P0t=zx(),b0t=pU();function x0t(t,e){return e.length<2?t:P0t(t,b0t(e,0,-1))}Hge.exports=x0t});var R8=_((zHt,Gge)=>{var k0t=Gd(),Q0t=_ge(),F0t=jge(),R0t=lC();function T0t(t,e){return e=k0t(e,t),t=F0t(t,e),t==null||delete t[R0t(Q0t(e))]}Gge.exports=T0t});var T8=_((XHt,qge)=>{var N0t=R8();function L0t(t,e){return t==null?!0:N0t(t,e)}qge.exports=L0t});var Jge=_((S6t,U0t)=>{U0t.exports={name:"@yarnpkg/cli",version:"4.1.0",license:"BSD-2-Clause",main:"./sources/index.ts",exports:{".":"./sources/index.ts","./polyfills":"./sources/polyfills.ts","./package.json":"./package.json"},dependencies:{"@yarnpkg/core":"workspace:^","@yarnpkg/fslib":"workspace:^","@yarnpkg/libzip":"workspace:^","@yarnpkg/parsers":"workspace:^","@yarnpkg/plugin-compat":"workspace:^","@yarnpkg/plugin-constraints":"workspace:^","@yarnpkg/plugin-dlx":"workspace:^","@yarnpkg/plugin-essentials":"workspace:^","@yarnpkg/plugin-exec":"workspace:^","@yarnpkg/plugin-file":"workspace:^","@yarnpkg/plugin-git":"workspace:^","@yarnpkg/plugin-github":"workspace:^","@yarnpkg/plugin-http":"workspace:^","@yarnpkg/plugin-init":"workspace:^","@yarnpkg/plugin-interactive-tools":"workspace:^","@yarnpkg/plugin-link":"workspace:^","@yarnpkg/plugin-nm":"workspace:^","@yarnpkg/plugin-npm":"workspace:^","@yarnpkg/plugin-npm-cli":"workspace:^","@yarnpkg/plugin-pack":"workspace:^","@yarnpkg/plugin-patch":"workspace:^","@yarnpkg/plugin-pnp":"workspace:^","@yarnpkg/plugin-pnpm":"workspace:^","@yarnpkg/plugin-stage":"workspace:^","@yarnpkg/plugin-typescript":"workspace:^","@yarnpkg/plugin-version":"workspace:^","@yarnpkg/plugin-workspace-tools":"workspace:^","@yarnpkg/shell":"workspace:^","ci-info":"^3.2.0",clipanion:"^4.0.0-rc.2",semver:"^7.1.2",tslib:"^2.4.0",typanion:"^3.14.0"},devDependencies:{"@types/semver":"^7.1.0","@yarnpkg/builder":"workspace:^","@yarnpkg/monorepo":"workspace:^","@yarnpkg/pnpify":"workspace:^"},peerDependencies:{"@yarnpkg/core":"workspace:^"},scripts:{postpack:"rm -rf lib",prepack:'run build:compile "$(pwd)"',"build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},publishConfig:{main:"./lib/index.js",bin:null,exports:{".":"./lib/index.js","./package.json":"./package.json"}},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]}},repository:{type:"git",url:"ssh://git@github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=18.12.0"}}});var G8=_((n9t,ade)=>{"use strict";ade.exports=function(e,r){r===!0&&(r=0);var o="";if(typeof e=="string")try{o=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(o=e.protocol);var a=o.split(/\:|\+/).filter(Boolean);return typeof r=="number"?a[r]:a}});var cde=_((i9t,lde)=>{"use strict";var igt=G8();function sgt(t){var e={protocols:[],protocol:null,port:null,resource:"",host:"",user:"",password:"",pathname:"",hash:"",search:"",href:t,query:{},parse_failed:!1};try{var r=new URL(t);e.protocols=igt(r),e.protocol=e.protocols[0],e.port=r.port,e.resource=r.hostname,e.host=r.host,e.user=r.username||"",e.password=r.password||"",e.pathname=r.pathname,e.hash=r.hash.slice(1),e.search=r.search.slice(1),e.href=r.href,e.query=Object.fromEntries(r.searchParams)}catch{e.protocols=["file"],e.protocol=e.protocols[0],e.port="",e.resource="",e.user="",e.pathname="",e.hash="",e.search="",e.href=t,e.query={},e.parse_failed=!0}return e}lde.exports=sgt});var fde=_((s9t,Ade)=>{"use strict";var ogt=cde();function agt(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var lgt=agt(ogt),cgt="text/plain",ugt="us-ascii",ude=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),Agt=(t,{stripHash:e})=>{let r=/^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(t);if(!r)throw new Error(`Invalid URL: ${t}`);let{type:o,data:a,hash:n}=r.groups,u=o.split(";");n=e?"":n;let A=!1;u[u.length-1]==="base64"&&(u.pop(),A=!0);let p=(u.shift()||"").toLowerCase(),E=[...u.map(I=>{let[v,x=""]=I.split("=").map(C=>C.trim());return v==="charset"&&(x=x.toLowerCase(),x===ugt)?"":`${v}${x?`=${x}`:""}`}).filter(Boolean)];return A&&E.push("base64"),(E.length>0||p&&p!==cgt)&&E.unshift(p),`data:${E.join(";")},${A?a.trim():a}${n?`#${n}`:""}`};function fgt(t,e){if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},t=t.trim(),/^data:/i.test(t))return Agt(t,e);if(/^view-source:/i.test(t))throw new Error("`view-source:` is not supported as it is a non-standard protocol");let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new URL(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash?a.hash="":e.stripTextFragment&&(a.hash=a.hash.replace(/#?:~:text.*?$/i,"")),a.pathname){let u=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,A=0,p="";for(;;){let E=u.exec(a.pathname);if(!E)break;let I=E[0],v=E.index,x=a.pathname.slice(A,v);p+=x.replace(/\/{2,}/g,"/"),p+=I,A=v+I.length}let h=a.pathname.slice(A,a.pathname.length);p+=h.replace(/\/{2,}/g,"/"),a.pathname=p}if(a.pathname)try{a.pathname=decodeURI(a.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let u=a.pathname.split("/"),A=u[u.length-1];ude(A,e.removeDirectoryIndex)&&(u=u.slice(0,-1),a.pathname=u.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let u of[...a.searchParams.keys()])ude(u,e.removeQueryParameters)&&a.searchParams.delete(u);if(e.removeQueryParameters===!0&&(a.search=""),e.sortQueryParameters){a.searchParams.sort();try{a.search=decodeURIComponent(a.search)}catch{}}e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,""));let n=t;return t=a.toString(),!e.removeSingleSlash&&a.pathname==="/"&&!n.endsWith("/")&&a.hash===""&&(t=t.replace(/\/$/,"")),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&e.removeSingleSlash&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t}var q8=(t,e=!1)=>{let r=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:]([\~,\.\w,\-,\_,\/]+?(?:\.git|\/)?)$/,o=n=>{let u=new Error(n);throw u.subject_url=t,u};(typeof t!="string"||!t.trim())&&o("Invalid url."),t.length>q8.MAX_INPUT_LENGTH&&o("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH."),e&&(typeof e!="object"&&(e={stripHash:!1}),t=fgt(t,e));let a=lgt.default(t);if(a.parse_failed){let n=a.href.match(r);n?(a.protocols=["ssh"],a.protocol="ssh",a.resource=n[2],a.host=n[2],a.user=n[1],a.pathname=`/${n[3]}`,a.parse_failed=!1):o("URL parsing failed.")}return a};q8.MAX_INPUT_LENGTH=2048;Ade.exports=q8});var gde=_((o9t,hde)=>{"use strict";var pgt=G8();function pde(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=pgt(t);if(t=t.substring(t.indexOf("://")+3),pde(e))return!0;var r=new RegExp(".([a-zA-Z\\d]+):(\\d+)/");return!t.match(r)&&t.indexOf("@"){"use strict";var hgt=fde(),dde=gde();function ggt(t){var e=hgt(t);return e.token="",e.password==="x-oauth-basic"?e.token=e.user:e.user==="x-token-auth"&&(e.token=e.password),dde(e.protocols)||e.protocols.length===0&&dde(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol="file",e.protocols=["file"]),e.href=e.href.replace(/\/$/,""),e}mde.exports=ggt});var Cde=_((l9t,Ede)=>{"use strict";var dgt=yde();function Y8(t){if(typeof t!="string")throw new Error("The url must be a string.");var e=/^([a-z\d-]{1,39})\/([-\.\w]{1,100})$/i;e.test(t)&&(t="https://github.com/"+t);var r=dgt(t),o=r.resource.split("."),a=null;switch(r.toString=function(L){return Y8.stringify(this,L)},r.source=o.length>2?o.slice(1-o.length).join("."):r.source=r.resource,r.git_suffix=/\.git$/.test(r.pathname),r.name=decodeURIComponent((r.pathname||r.href).replace(/(^\/)|(\/$)/g,"").replace(/\.git$/,"")),r.owner=decodeURIComponent(r.user),r.source){case"git.cloudforge.com":r.owner=r.user,r.organization=o[0],r.source="cloudforge.com";break;case"visualstudio.com":if(r.resource==="vs-ssh.visualstudio.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3],r.full_name=a[2]+"/"+a[3]);break}else{a=r.name.split("/"),a.length===2?(r.owner=a[1],r.name=a[1],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name);break}case"dev.azure.com":case"azure.com":if(r.resource==="ssh.dev.azure.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3]);break}else{a=r.name.split("/"),a.length===5?(r.organization=a[0],r.owner=a[1],r.name=a[4],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name),r.query&&r.query.path&&(r.filepath=r.query.path.replace(/^\/+/g,"")),r.query&&r.query.version&&(r.ref=r.query.version.replace(/^GB/,""));break}default:a=r.name.split("/");var n=a.length-1;if(a.length>=2){var u=a.indexOf("-",2),A=a.indexOf("blob",2),p=a.indexOf("tree",2),h=a.indexOf("commit",2),E=a.indexOf("src",2),I=a.indexOf("raw",2),v=a.indexOf("edit",2);n=u>0?u-1:A>0?A-1:p>0?p-1:h>0?h-1:E>0?E-1:I>0?I-1:v>0?v-1:n,r.owner=a.slice(0,n).join("/"),r.name=a[n],h&&(r.commit=a[n+2])}r.ref="",r.filepathtype="",r.filepath="";var x=a.length>n&&a[n+1]==="-"?n+1:n;a.length>x+2&&["raw","src","blob","tree","edit"].indexOf(a[x+1])>=0&&(r.filepathtype=a[x+1],r.ref=a[x+2],a.length>x+3&&(r.filepath=a.slice(x+3).join("/"))),r.organization=r.owner;break}r.full_name||(r.full_name=r.owner,r.name&&(r.full_name&&(r.full_name+="/"),r.full_name+=r.name)),r.owner.startsWith("scm/")&&(r.source="bitbucket-server",r.owner=r.owner.replace("scm/",""),r.organization=r.owner,r.full_name=r.owner+"/"+r.name);var C=/(projects|users)\/(.*?)\/repos\/(.*?)((\/.*$)|$)/,R=C.exec(r.pathname);return R!=null&&(r.source="bitbucket-server",R[1]==="users"?r.owner="~"+R[2]:r.owner=R[2],r.organization=r.owner,r.name=R[3],a=R[4].split("/"),a.length>1&&(["raw","browse"].indexOf(a[1])>=0?(r.filepathtype=a[1],a.length>2&&(r.filepath=a.slice(2).join("/"))):a[1]==="commits"&&a.length>2&&(r.commit=a[2])),r.full_name=r.owner+"/"+r.name,r.query.at?r.ref=r.query.at:r.ref=""),r}Y8.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",o=t.user||"git",a=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+o+"@"+t.resource+r+"/"+t.full_name+a:o+"@"+t.resource+":"+t.full_name+a;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+o+"@"+t.resource+r+"/"+t.full_name+a;case"http":case"https":var n=t.token?mgt(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+n+t.resource+r+"/"+ygt(t)+a;default:return t.href}};function mgt(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}function ygt(t){switch(t.source){case"bitbucket-server":return"scm/"+t.full_name;default:return""+t.full_name}}Ede.exports=Y8});var Lde=_((H5t,Nde)=>{var xgt=Hb(),kgt=eP(),Qgt=Hl(),Fgt=pE(),Rgt=w_(),Tgt=lC(),Ngt=N1();function Lgt(t){return Qgt(t)?xgt(t,Tgt):Fgt(t)?[t]:kgt(Rgt(Ngt(t)))}Nde.exports=Lgt});function _gt(t,e){return e===1&&Ugt.has(t[0])}function B2(t){let e=Array.isArray(t)?t:(0,Ude.default)(t);return e.map((o,a)=>Ogt.test(o)?`[${o}]`:Mgt.test(o)&&!_gt(e,a)?`.${o}`:`[${JSON.stringify(o)}]`).join("").replace(/^\./,"")}function Hgt(t,e){let r=[];if(e.methodName!==null&&r.push(de.pretty(t,e.methodName,de.Type.CODE)),e.file!==null){let o=[];o.push(de.pretty(t,e.file,de.Type.PATH)),e.line!==null&&(o.push(de.pretty(t,e.line,de.Type.NUMBER)),e.column!==null&&o.push(de.pretty(t,e.column,de.Type.NUMBER))),r.push(`(${o.join(de.pretty(t,":","grey"))})`)}return r.join(" ")}function gk(t,{manifestUpdates:e,reportedErrors:r},{fix:o}={}){let a=new Map,n=new Map,u=[...r.keys()].map(A=>[A,new Map]);for(let[A,p]of[...u,...e]){let h=r.get(A)?.map(x=>({text:x,fixable:!1}))??[],E=!1,I=t.getWorkspaceByCwd(A),v=I.manifest.exportTo({});for(let[x,C]of p){if(C.size>1){let R=[...C].map(([L,U])=>{let J=de.pretty(t.configuration,L,de.Type.INSPECT),te=U.size>0?Hgt(t.configuration,U.values().next().value):null;return te!==null?` +${J} at ${te}`:` +${J}`}).join("");h.push({text:`Conflict detected in constraint targeting ${de.pretty(t.configuration,x,de.Type.CODE)}; conflicting values are:${R}`,fixable:!1})}else{let[[R]]=C,L=(0,Ode.default)(v,x);if(JSON.stringify(L)===JSON.stringify(R))continue;if(!o){let U=typeof L>"u"?`Missing field ${de.pretty(t.configuration,x,de.Type.CODE)}; expected ${de.pretty(t.configuration,R,de.Type.INSPECT)}`:typeof R>"u"?`Extraneous field ${de.pretty(t.configuration,x,de.Type.CODE)} currently set to ${de.pretty(t.configuration,L,de.Type.INSPECT)}`:`Invalid field ${de.pretty(t.configuration,x,de.Type.CODE)}; expected ${de.pretty(t.configuration,R,de.Type.INSPECT)}, found ${de.pretty(t.configuration,L,de.Type.INSPECT)}`;h.push({text:U,fixable:!0});continue}typeof R>"u"?(0,_de.default)(v,x):(0,Mde.default)(v,x,R),E=!0}E&&a.set(I,v)}h.length>0&&n.set(I,h)}return{changedWorkspaces:a,remainingErrors:n}}function Hde(t,{configuration:e}){let r={children:[]};for(let[o,a]of t){let n=[];for(let A of a){let p=A.text.split(/\n/);A.fixable&&(p[0]=`${de.pretty(e,"\u2699","gray")} ${p[0]}`),n.push({value:de.tuple(de.Type.NO_HINT,p[0]),children:p.slice(1).map(h=>({value:de.tuple(de.Type.NO_HINT,h)}))})}let u={value:de.tuple(de.Type.LOCATOR,o.anchoredLocator),children:_e.sortMap(n,A=>A.value[1])};r.children.push(u)}return r.children=_e.sortMap(r.children,o=>o.value[1]),r}var Ode,Mde,Ude,_de,wC,Ogt,Mgt,Ugt,v2=Et(()=>{Ye();Ode=$e(d2()),Mde=$e(Q8()),Ude=$e(Lde()),_de=$e(T8()),wC=class{constructor(e){this.indexedFields=e;this.items=[];this.indexes={};this.clear()}clear(){this.items=[];for(let e of this.indexedFields)this.indexes[e]=new Map}insert(e){this.items.push(e);for(let r of this.indexedFields){let o=Object.hasOwn(e,r)?e[r]:void 0;if(typeof o>"u")continue;_e.getArrayWithDefault(this.indexes[r],o).push(e)}return e}find(e){if(typeof e>"u")return this.items;let r=Object.entries(e);if(r.length===0)return this.items;let o=[],a;for(let[u,A]of r){let p=u,h=Object.hasOwn(this.indexes,p)?this.indexes[p]:void 0;if(typeof h>"u"){o.push([p,A]);continue}let E=new Set(h.get(A)??[]);if(E.size===0)return[];if(typeof a>"u")a=E;else for(let I of a)E.has(I)||a.delete(I);if(a.size===0)break}let n=[...a??[]];return o.length>0&&(n=n.filter(u=>{for(let[A,p]of o)if(!(typeof p<"u"?Object.hasOwn(u,A)&&u[A]===p:Object.hasOwn(u,A)===!1))return!1;return!0})),n}},Ogt=/^[0-9]+$/,Mgt=/^[a-zA-Z0-9_]+$/,Ugt=new Set(["scripts",...Ot.allDependencies])});var jde=_(($5t,sH)=>{var jgt;(function(t){var e=function(){return{"append/2":[new t.type.Rule(new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("L")]),new t.type.Term("foldl",[new t.type.Term("append",[]),new t.type.Var("X"),new t.type.Term("[]",[]),new t.type.Var("L")]))],"append/3":[new t.type.Rule(new t.type.Term("append",[new t.type.Term("[]",[]),new t.type.Var("X"),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("append",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("append",[new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("S")]))],"member/2":[new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("_")])]),null),new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")])]),new t.type.Term("member",[new t.type.Var("X"),new t.type.Var("Xs")]))],"permutation/2":[new t.type.Rule(new t.type.Term("permutation",[new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("permutation",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("permutation",[new t.type.Var("T"),new t.type.Var("P")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("P")]),new t.type.Term("append",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("Y")]),new t.type.Var("S")])])]))],"maplist/2":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("X")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("Xs")])]))],"maplist/3":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs")])]))],"maplist/4":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs")])]))],"maplist/5":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds")])]))],"maplist/6":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es")])]))],"maplist/7":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs")])]))],"maplist/8":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")]),new t.type.Term(".",[new t.type.Var("G"),new t.type.Var("Gs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F"),new t.type.Var("G")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs"),new t.type.Var("Gs")])]))],"include/3":[new t.type.Rule(new t.type.Term("include",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("include",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("A")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("A"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("F"),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("F")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("L"),new t.type.Var("S")])]),new t.type.Term("include",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("S")])])])])]))],"exclude/3":[new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("E")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("Q")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("R"),new t.type.Var("Q")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("!",[]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("E")])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("E")])])])])])])]))],"foldl/4":[new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Var("I"),new t.type.Var("I")]),null),new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("I"),new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("I"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])])])]),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P2"),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P2")]),new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("R")])])])])]))],"select/3":[new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Xs")]),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term("select",[new t.type.Var("E"),new t.type.Var("Xs"),new t.type.Var("Ys")]))],"sum_list/2":[new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term("[]",[]),new t.type.Num(0,!1)]),null),new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("sum_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("+",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"max_list/2":[new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("max_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"min_list/2":[new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("min_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("=<",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"prod_list/2":[new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term("[]",[]),new t.type.Num(1,!1)]),null),new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("prod_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("*",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"last/2":[new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")]),new t.type.Var("X")]),new t.type.Term("last",[new t.type.Var("Xs"),new t.type.Var("X")]))],"prefix/2":[new t.type.Rule(new t.type.Term("prefix",[new t.type.Var("Part"),new t.type.Var("Whole")]),new t.type.Term("append",[new t.type.Var("Part"),new t.type.Var("_"),new t.type.Var("Whole")]))],"nth0/3":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth1/3":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth0/4":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth1/4":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth/5":[new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("N"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("X"),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("O"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("Y"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term(",",[new t.type.Term("is",[new t.type.Var("M"),new t.type.Term("+",[new t.type.Var("N"),new t.type.Num(1,!1)])]),new t.type.Term("nth",[new t.type.Var("M"),new t.type.Var("O"),new t.type.Var("Xs"),new t.type.Var("Y"),new t.type.Var("Ys")])]))],"length/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(!t.type.is_variable(A)&&!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(t.type.is_integer(A)&&A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else{var p=new t.type.Term("length",[u,new t.type.Num(0,!1),A]);t.type.is_integer(A)&&(p=new t.type.Term(",",[p,new t.type.Term("!",[])])),o.prepend([new t.type.State(a.goal.replace(p),a.substitution,a)])}},"length/3":[new t.type.Rule(new t.type.Term("length",[new t.type.Term("[]",[]),new t.type.Var("N"),new t.type.Var("N")]),null),new t.type.Rule(new t.type.Term("length",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("X")]),new t.type.Var("A"),new t.type.Var("N")]),new t.type.Term(",",[new t.type.Term("succ",[new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("length",[new t.type.Var("X"),new t.type.Var("B"),new t.type.Var("N")])]))],"replicate/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=new t.type.Term("[]"),E=0;E0;I--)E[I].equals(E[I-1])&&E.splice(I,1);for(var v=new t.type.Term("[]"),I=E.length-1;I>=0;I--)v=new t.type.Term(".",[E[I],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"msort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h=u;h.indicator==="./2";)p.push(h.args[0]),h=h.args[1];if(t.type.is_variable(h))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(h))o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=p.sort(t.compare),I=new t.type.Term("[]"),v=E.length-1;v>=0;v--)I=new t.type.Term(".",[E[v],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,A])),a.substitution,a)])}}},"keysort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h,E=u;E.indicator==="./2";){if(h=E.args[0],t.type.is_variable(h)){o.throw_error(t.error.instantiation(n.indicator));return}else if(!t.type.is_term(h)||h.indicator!=="-/2"){o.throw_error(t.error.type("pair",h,n.indicator));return}h.args[0].pair=h.args[1],p.push(h.args[0]),E=E.args[1]}if(t.type.is_variable(E))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(E))o.throw_error(t.error.type("list",u,n.indicator));else{for(var I=p.sort(t.compare),v=new t.type.Term("[]"),x=I.length-1;x>=0;x--)v=new t.type.Term(".",[new t.type.Term("-",[I[x],I[x].pair]),v]),delete I[x].pair;o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"take/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;if(h===0){for(var v=new t.type.Term("[]"),h=E.length-1;h>=0;h--)v=new t.type.Term(".",[E[h],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,p])),a.substitution,a)])}}},"drop/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;h===0&&o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p])),a.substitution,a)])}},"reverse/2":function(o,a,n){var u=n.args[0],A=n.args[1],p=t.type.is_instantiated_list(u),h=t.type.is_instantiated_list(A);if(t.type.is_variable(u)&&t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(u)&&!t.type.is_fully_list(u))o.throw_error(t.error.type("list",u,n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!p&&!h)o.throw_error(t.error.instantiation(n.indicator));else{for(var E=p?u:A,I=new t.type.Term("[]",[]);E.indicator==="./2";)I=new t.type.Term(".",[E.args[0],I]),E=E.args[1];o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p?A:u])),a.substitution,a)])}},"list_to_set/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else{for(var p=u,h=[];p.indicator==="./2";)h.push(p.args[0]),p=p.args[1];if(t.type.is_variable(p))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_term(p)||p.indicator!=="[]/0")o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=[],I=new t.type.Term("[]",[]),v,x=0;x=0;x--)I=new t.type.Term(".",[E[x],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[A,I])),a.substitution,a)])}}}}},r=["append/2","append/3","member/2","permutation/2","maplist/2","maplist/3","maplist/4","maplist/5","maplist/6","maplist/7","maplist/8","include/3","exclude/3","foldl/4","sum_list/2","max_list/2","min_list/2","prod_list/2","last/2","prefix/2","nth0/3","nth1/3","nth0/4","nth1/4","length/2","replicate/3","select/3","sort/2","msort/2","keysort/2","take/3","drop/3","reverse/2","list_to_set/2"];typeof sH<"u"?sH.exports=function(o){t=o,new t.type.Module("lists",e(),r)}:new t.type.Module("lists",e(),r)})(jgt)});var nme=_(Yr=>{"use strict";var $d=process.platform==="win32",oH="aes-256-cbc",Ggt="sha256",Yde="The current environment doesn't support interactive reading from TTY.",Yn=ve("fs"),Gde=process.binding("tty_wrap").TTY,lH=ve("child_process"),c0=ve("path"),cH={prompt:"> ",hideEchoBack:!1,mask:"*",limit:[],limitMessage:"Input another, please.$<( [)limit(])>",defaultInput:"",trueValue:[],falseValue:[],caseSensitive:!1,keepWhitespace:!1,encoding:"utf8",bufferSize:1024,print:void 0,history:!0,cd:!1,phContent:void 0,preCheck:void 0},zf="none",Xc,BC,qde=!1,l0,mk,aH,qgt=0,hH="",Zd=[],yk,Wde=!1,uH=!1,D2=!1;function Kde(t){function e(r){return r.replace(/[^\w\u0080-\uFFFF]/g,function(o){return"#"+o.charCodeAt(0)+";"})}return mk.concat(function(r){var o=[];return Object.keys(r).forEach(function(a){r[a]==="boolean"?t[a]&&o.push("--"+a):r[a]==="string"&&t[a]&&o.push("--"+a,e(t[a]))}),o}({display:"string",displayOnly:"boolean",keyIn:"boolean",hideEchoBack:"boolean",mask:"string",limit:"string",caseSensitive:"boolean"}))}function Ygt(t,e){function r(U){var J,te="",ae;for(aH=aH||ve("os").tmpdir();;){J=c0.join(aH,U+te);try{ae=Yn.openSync(J,"wx")}catch(fe){if(fe.code==="EEXIST"){te++;continue}else throw fe}Yn.closeSync(ae);break}return J}var o,a,n,u={},A,p,h=r("readline-sync.stdout"),E=r("readline-sync.stderr"),I=r("readline-sync.exit"),v=r("readline-sync.done"),x=ve("crypto"),C,R,L;C=x.createHash(Ggt),C.update(""+process.pid+qgt+++Math.random()),L=C.digest("hex"),R=x.createDecipher(oH,L),o=Kde(t),$d?(a=process.env.ComSpec||"cmd.exe",process.env.Q='"',n=["/V:ON","/S","/C","(%Q%"+a+"%Q% /V:ON /S /C %Q%%Q%"+l0+"%Q%"+o.map(function(U){return" %Q%"+U+"%Q%"}).join("")+" & (echo !ERRORLEVEL!)>%Q%"+I+"%Q%%Q%) 2>%Q%"+E+"%Q% |%Q%"+process.execPath+"%Q% %Q%"+__dirname+"\\encrypt.js%Q% %Q%"+oH+"%Q% %Q%"+L+"%Q% >%Q%"+h+"%Q% & (echo 1)>%Q%"+v+"%Q%"]):(a="/bin/sh",n=["-c",'("'+l0+'"'+o.map(function(U){return" '"+U.replace(/'/g,"'\\''")+"'"}).join("")+'; echo $?>"'+I+'") 2>"'+E+'" |"'+process.execPath+'" "'+__dirname+'/encrypt.js" "'+oH+'" "'+L+'" >"'+h+'"; echo 1 >"'+v+'"']),D2&&D2("_execFileSync",o);try{lH.spawn(a,n,e)}catch(U){u.error=new Error(U.message),u.error.method="_execFileSync - spawn",u.error.program=a,u.error.args=n}for(;Yn.readFileSync(v,{encoding:t.encoding}).trim()!=="1";);return(A=Yn.readFileSync(I,{encoding:t.encoding}).trim())==="0"?u.input=R.update(Yn.readFileSync(h,{encoding:"binary"}),"hex",t.encoding)+R.final(t.encoding):(p=Yn.readFileSync(E,{encoding:t.encoding}).trim(),u.error=new Error(Yde+(p?` +`+p:"")),u.error.method="_execFileSync",u.error.program=a,u.error.args=n,u.error.extMessage=p,u.error.exitCode=+A),Yn.unlinkSync(h),Yn.unlinkSync(E),Yn.unlinkSync(I),Yn.unlinkSync(v),u}function Wgt(t){var e,r={},o,a={env:process.env,encoding:t.encoding};if(l0||($d?process.env.PSModulePath?(l0="powershell.exe",mk=["-ExecutionPolicy","Bypass","-File",__dirname+"\\read.ps1"]):(l0="cscript.exe",mk=["//nologo",__dirname+"\\read.cs.js"]):(l0="/bin/sh",mk=[__dirname+"/read.sh"])),$d&&!process.env.PSModulePath&&(a.stdio=[process.stdin]),lH.execFileSync){e=Kde(t),D2&&D2("execFileSync",e);try{r.input=lH.execFileSync(l0,e,a)}catch(n){o=n.stderr?(n.stderr+"").trim():"",r.error=new Error(Yde+(o?` +`+o:"")),r.error.method="execFileSync",r.error.program=l0,r.error.args=e,r.error.extMessage=o,r.error.exitCode=n.status,r.error.code=n.code,r.error.signal=n.signal}}else r=Ygt(t,a);return r.error||(r.input=r.input.replace(/^\s*'|'\s*$/g,""),t.display=""),r}function AH(t){var e="",r=t.display,o=!t.display&&t.keyIn&&t.hideEchoBack&&!t.mask;function a(){var n=Wgt(t);if(n.error)throw n.error;return n.input}return uH&&uH(t),function(){var n,u,A;function p(){return n||(n=process.binding("fs"),u=process.binding("constants")),n}if(typeof zf=="string")if(zf=null,$d){if(A=function(h){var E=h.replace(/^\D+/,"").split("."),I=0;return(E[0]=+E[0])&&(I+=E[0]*1e4),(E[1]=+E[1])&&(I+=E[1]*100),(E[2]=+E[2])&&(I+=E[2]),I}(process.version),!(A>=20302&&A<40204||A>=5e4&&A<50100||A>=50600&&A<60200)&&process.stdin.isTTY)process.stdin.pause(),zf=process.stdin.fd,BC=process.stdin._handle;else try{zf=p().open("CONIN$",u.O_RDWR,parseInt("0666",8)),BC=new Gde(zf,!0)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else{try{Xc=Yn.openSync("\\\\.\\CON","w")}catch{}if(typeof Xc!="number")try{Xc=p().open("CONOUT$",u.O_RDWR,parseInt("0666",8))}catch{}}}else{if(process.stdin.isTTY){process.stdin.pause();try{zf=Yn.openSync("/dev/tty","r"),BC=process.stdin._handle}catch{}}else try{zf=Yn.openSync("/dev/tty","r"),BC=new Gde(zf,!1)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else try{Xc=Yn.openSync("/dev/tty","w")}catch{}}}(),function(){var n,u,A=!t.hideEchoBack&&!t.keyIn,p,h,E,I,v;yk="";function x(C){return C===qde?!0:BC.setRawMode(C)!==0?!1:(qde=C,!0)}if(Wde||!BC||typeof Xc!="number"&&(t.display||!A)){e=a();return}if(t.display&&(Yn.writeSync(Xc,t.display),t.display=""),!t.displayOnly){if(!x(!A)){e=a();return}for(h=t.keyIn?1:t.bufferSize,p=Buffer.allocUnsafe&&Buffer.alloc?Buffer.alloc(h):new Buffer(h),t.keyIn&&t.limit&&(u=new RegExp("[^"+t.limit+"]","g"+(t.caseSensitive?"":"i")));;){E=0;try{E=Yn.readSync(zf,p,0,h)}catch(C){if(C.code!=="EOF"){x(!1),e+=a();return}}if(E>0?(I=p.toString(t.encoding,0,E),yk+=I):(I=` +`,yk+=String.fromCharCode(0)),I&&typeof(v=(I.match(/^(.*?)[\r\n]/)||[])[1])=="string"&&(I=v,n=!0),I&&(I=I.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")),I&&u&&(I=I.replace(u,"")),I&&(A||(t.hideEchoBack?t.mask&&Yn.writeSync(Xc,new Array(I.length+1).join(t.mask)):Yn.writeSync(Xc,I)),e+=I),!t.keyIn&&n||t.keyIn&&e.length>=h)break}!A&&!o&&Yn.writeSync(Xc,` +`),x(!1)}}(),t.print&&!o&&t.print(r+(t.displayOnly?"":(t.hideEchoBack?new Array(e.length+1).join(t.mask):e)+` +`),t.encoding),t.displayOnly?"":hH=t.keepWhitespace||t.keyIn?e:e.trim()}function Kgt(t,e){var r=[];function o(a){a!=null&&(Array.isArray(a)?a.forEach(o):(!e||e(a))&&r.push(a))}return o(t),r}function gH(t){return t.replace(/[\x00-\x7f]/g,function(e){return"\\x"+("00"+e.charCodeAt().toString(16)).substr(-2)})}function Rs(){var t=Array.prototype.slice.call(arguments),e,r;return t.length&&typeof t[0]=="boolean"&&(r=t.shift(),r&&(e=Object.keys(cH),t.unshift(cH))),t.reduce(function(o,a){return a==null||(a.hasOwnProperty("noEchoBack")&&!a.hasOwnProperty("hideEchoBack")&&(a.hideEchoBack=a.noEchoBack,delete a.noEchoBack),a.hasOwnProperty("noTrim")&&!a.hasOwnProperty("keepWhitespace")&&(a.keepWhitespace=a.noTrim,delete a.noTrim),r||(e=Object.keys(a)),e.forEach(function(n){var u;if(!!a.hasOwnProperty(n))switch(u=a[n],n){case"mask":case"limitMessage":case"defaultInput":case"encoding":u=u!=null?u+"":"",u&&n!=="limitMessage"&&(u=u.replace(/[\r\n]/g,"")),o[n]=u;break;case"bufferSize":!isNaN(u=parseInt(u,10))&&typeof u=="number"&&(o[n]=u);break;case"displayOnly":case"keyIn":case"hideEchoBack":case"caseSensitive":case"keepWhitespace":case"history":case"cd":o[n]=!!u;break;case"limit":case"trueValue":case"falseValue":o[n]=Kgt(u,function(A){var p=typeof A;return p==="string"||p==="number"||p==="function"||A instanceof RegExp}).map(function(A){return typeof A=="string"?A.replace(/[\r\n]/g,""):A});break;case"print":case"phContent":case"preCheck":o[n]=typeof u=="function"?u:void 0;break;case"prompt":case"display":o[n]=u??"";break}})),o},{})}function fH(t,e,r){return e.some(function(o){var a=typeof o;return a==="string"?r?t===o:t.toLowerCase()===o.toLowerCase():a==="number"?parseFloat(t)===o:a==="function"?o(t):o instanceof RegExp?o.test(t):!1})}function dH(t,e){var r=c0.normalize($d?(process.env.HOMEDRIVE||"")+(process.env.HOMEPATH||""):process.env.HOME||"").replace(/[\/\\]+$/,"");return t=c0.normalize(t),e?t.replace(/^~(?=\/|\\|$)/,r):t.replace(new RegExp("^"+gH(r)+"(?=\\/|\\\\|$)",$d?"i":""),"~")}function vC(t,e){var r="(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?",o=new RegExp("(\\$)?(\\$<"+r+">)","g"),a=new RegExp("(\\$)?(\\$\\{"+r+"\\})","g");function n(u,A,p,h,E,I){var v;return A||typeof(v=e(E))!="string"?p:v?(h||"")+v+(I||""):""}return t.replace(o,n).replace(a,n)}function Vde(t,e,r){var o,a=[],n=-1,u=0,A="",p;function h(E,I){return I.length>3?(E.push(I[0]+"..."+I[I.length-1]),p=!0):I.length&&(E=E.concat(I)),E}return o=t.reduce(function(E,I){return E.concat((I+"").split(""))},[]).reduce(function(E,I){var v,x;return e||(I=I.toLowerCase()),v=/^\d$/.test(I)?1:/^[A-Z]$/.test(I)?2:/^[a-z]$/.test(I)?3:0,r&&v===0?A+=I:(x=I.charCodeAt(0),v&&v===n&&x===u+1?a.push(I):(E=h(E,a),a=[I],n=v),u=x),E},[]),o=h(o,a),A&&(o.push(A),p=!0),{values:o,suppressed:p}}function Jde(t,e){return t.join(t.length>2?", ":e?" / ":"/")}function zde(t,e){var r,o,a={},n;if(e.phContent&&(r=e.phContent(t,e)),typeof r!="string")switch(t){case"hideEchoBack":case"mask":case"defaultInput":case"caseSensitive":case"keepWhitespace":case"encoding":case"bufferSize":case"history":case"cd":r=e.hasOwnProperty(t)?typeof e[t]=="boolean"?e[t]?"on":"off":e[t]+"":"";break;case"limit":case"trueValue":case"falseValue":o=e[e.hasOwnProperty(t+"Src")?t+"Src":t],e.keyIn?(a=Vde(o,e.caseSensitive),o=a.values):o=o.filter(function(u){var A=typeof u;return A==="string"||A==="number"}),r=Jde(o,a.suppressed);break;case"limitCount":case"limitCountNotZero":r=e[e.hasOwnProperty("limitSrc")?"limitSrc":"limit"].length,r=r||t!=="limitCountNotZero"?r+"":"";break;case"lastInput":r=hH;break;case"cwd":case"CWD":case"cwdHome":r=process.cwd(),t==="CWD"?r=c0.basename(r):t==="cwdHome"&&(r=dH(r));break;case"date":case"time":case"localeDate":case"localeTime":r=new Date()["to"+t.replace(/^./,function(u){return u.toUpperCase()})+"String"]();break;default:typeof(n=(t.match(/^history_m(\d+)$/)||[])[1])=="string"&&(r=Zd[Zd.length-n]||"")}return r}function Xde(t){var e=/^(.)-(.)$/.exec(t),r="",o,a,n,u;if(!e)return null;for(o=e[1].charCodeAt(0),a=e[2].charCodeAt(0),u=o +And the length must be: $`,trueValue:null,falseValue:null,caseSensitive:!0},e,{history:!1,cd:!1,phContent:function(x){return x==="charlist"?r.text:x==="length"?o+"..."+a:null}}),u,A,p,h,E,I,v;for(e=e||{},u=vC(e.charlist?e.charlist+"":"$",Xde),(isNaN(o=parseInt(e.min,10))||typeof o!="number")&&(o=12),(isNaN(a=parseInt(e.max,10))||typeof a!="number")&&(a=24),h=new RegExp("^["+gH(u)+"]{"+o+","+a+"}$"),r=Vde([u],n.caseSensitive,!0),r.text=Jde(r.values,r.suppressed),A=e.confirmMessage!=null?e.confirmMessage:"Reinput a same one to confirm it: ",p=e.unmatchMessage!=null?e.unmatchMessage:"It differs from first one. Hit only the Enter key if you want to retry from first one.",t==null&&(t="Input new password: "),E=n.limitMessage;!v;)n.limit=h,n.limitMessage=E,I=Yr.question(t,n),n.limit=[I,""],n.limitMessage=p,v=Yr.question(A,n);return I};function eme(t,e,r){var o;function a(n){return o=r(n),!isNaN(o)&&typeof o=="number"}return Yr.question(t,Rs({limitMessage:"Input valid number, please."},e,{limit:a,cd:!1})),o}Yr.questionInt=function(t,e){return eme(t,e,function(r){return parseInt(r,10)})};Yr.questionFloat=function(t,e){return eme(t,e,parseFloat)};Yr.questionPath=function(t,e){var r,o="",a=Rs({hideEchoBack:!1,limitMessage:`$Input valid path, please.$<( Min:)min>$<( Max:)max>`,history:!0,cd:!0},e,{keepWhitespace:!1,limit:function(n){var u,A,p;n=dH(n,!0),o="";function h(E){E.split(/\/|\\/).reduce(function(I,v){var x=c0.resolve(I+=v+c0.sep);if(!Yn.existsSync(x))Yn.mkdirSync(x);else if(!Yn.statSync(x).isDirectory())throw new Error("Non directory already exists: "+x);return I},"")}try{if(u=Yn.existsSync(n),r=u?Yn.realpathSync(n):c0.resolve(n),!e.hasOwnProperty("exists")&&!u||typeof e.exists=="boolean"&&e.exists!==u)return o=(u?"Already exists":"No such file or directory")+": "+r,!1;if(!u&&e.create&&(e.isDirectory?h(r):(h(c0.dirname(r)),Yn.closeSync(Yn.openSync(r,"w"))),r=Yn.realpathSync(r)),u&&(e.min||e.max||e.isFile||e.isDirectory)){if(A=Yn.statSync(r),e.isFile&&!A.isFile())return o="Not file: "+r,!1;if(e.isDirectory&&!A.isDirectory())return o="Not directory: "+r,!1;if(e.min&&A.size<+e.min||e.max&&A.size>+e.max)return o="Size "+A.size+" is out of range: "+r,!1}if(typeof e.validate=="function"&&(p=e.validate(r))!==!0)return typeof p=="string"&&(o=p),!1}catch(E){return o=E+"",!1}return!0},phContent:function(n){return n==="error"?o:n!=="min"&&n!=="max"?null:e.hasOwnProperty(n)?e[n]+"":""}});return e=e||{},t==null&&(t='Input path (you can "cd" and "pwd"): '),Yr.question(t,a),r};function tme(t,e){var r={},o={};return typeof t=="object"?(Object.keys(t).forEach(function(a){typeof t[a]=="function"&&(o[e.caseSensitive?a:a.toLowerCase()]=t[a])}),r.preCheck=function(a){var n;return r.args=pH(a),n=r.args[0]||"",e.caseSensitive||(n=n.toLowerCase()),r.hRes=n!=="_"&&o.hasOwnProperty(n)?o[n].apply(a,r.args.slice(1)):o.hasOwnProperty("_")?o._.apply(a,r.args):null,{res:a,forceNext:!1}},o.hasOwnProperty("_")||(r.limit=function(){var a=r.args[0]||"";return e.caseSensitive||(a=a.toLowerCase()),o.hasOwnProperty(a)})):r.preCheck=function(a){return r.args=pH(a),r.hRes=typeof t=="function"?t.apply(a,r.args):!0,{res:a,forceNext:!1}},r}Yr.promptCL=function(t,e){var r=Rs({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=tme(t,r);return r.limit=o.limit,r.preCheck=o.preCheck,Yr.prompt(r),o.args};Yr.promptLoop=function(t,e){for(var r=Rs({hideEchoBack:!1,trueValue:null,falseValue:null,caseSensitive:!1,history:!0},e);!t(Yr.prompt(r)););};Yr.promptCLLoop=function(t,e){var r=Rs({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=tme(t,r);for(r.limit=o.limit,r.preCheck=o.preCheck;Yr.prompt(r),!o.hRes;);};Yr.promptSimShell=function(t){return Yr.prompt(Rs({hideEchoBack:!1,history:!0},t,{prompt:function(){return $d?"$>":(process.env.USER||"")+(process.env.HOSTNAME?"@"+process.env.HOSTNAME.replace(/\..*$/,""):"")+":$$ "}()}))};function rme(t,e,r){var o;return t==null&&(t="Are you sure? "),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s*:?\s*$/,"")+" [y/n]: "),o=Yr.keyIn(t,Rs(e,{hideEchoBack:!1,limit:r,trueValue:"y",falseValue:"n",caseSensitive:!1})),typeof o=="boolean"?o:""}Yr.keyInYN=function(t,e){return rme(t,e)};Yr.keyInYNStrict=function(t,e){return rme(t,e,"yn")};Yr.keyInPause=function(t,e){t==null&&(t="Continue..."),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s+$/,"")+" (Hit any key)"),Yr.keyIn(t,Rs({limit:null},e,{hideEchoBack:!0,mask:""}))};Yr.keyInSelect=function(t,e,r){var o=Rs({hideEchoBack:!1},r,{trueValue:null,falseValue:null,caseSensitive:!1,phContent:function(p){return p==="itemsCount"?t.length+"":p==="firstItem"?(t[0]+"").trim():p==="lastItem"?(t[t.length-1]+"").trim():null}}),a="",n={},u=49,A=` +`;if(!Array.isArray(t)||!t.length||t.length>35)throw"`items` must be Array (max length: 35).";return t.forEach(function(p,h){var E=String.fromCharCode(u);a+=E,n[E]=h,A+="["+E+"] "+(p+"").trim()+` +`,u=u===57?97:u+1}),(!r||r.cancel!==!1)&&(a+="0",n[0]=-1,A+="[0] "+(r&&r.cancel!=null&&typeof r.cancel!="boolean"?(r.cancel+"").trim():"CANCEL")+` +`),o.limit=a,A+=` +`,e==null&&(e="Choose one from list: "),(e+="")&&((!r||r.guide!==!1)&&(e=e.replace(/\s*:?\s*$/,"")+" [$]: "),A+=e),n[Yr.keyIn(A,o).toLowerCase()]};Yr.getRawInput=function(){return yk};function S2(t,e){var r;return e.length&&(r={},r[t]=e[0]),Yr.setDefaultOptions(r)[t]}Yr.setPrint=function(){return S2("print",arguments)};Yr.setPrompt=function(){return S2("prompt",arguments)};Yr.setEncoding=function(){return S2("encoding",arguments)};Yr.setMask=function(){return S2("mask",arguments)};Yr.setBufferSize=function(){return S2("bufferSize",arguments)}});var mH=_((t7t,hl)=>{(function(){var t={major:0,minor:2,patch:66,status:"beta"};tau_file_system={files:{},open:function(w,P,y){var F=tau_file_system.files[w];if(!F){if(y==="read")return null;F={path:w,text:"",type:P,get:function(z,X){return X===this.text.length||X>this.text.length?"end_of_file":this.text.substring(X,X+z)},put:function(z,X){return X==="end_of_file"?(this.text+=z,!0):X==="past_end_of_file"?null:(this.text=this.text.substring(0,X)+z+this.text.substring(X+z.length),!0)},get_byte:function(z){if(z==="end_of_stream")return-1;var X=Math.floor(z/2);if(this.text.length<=X)return-1;var Z=n(this.text[Math.floor(z/2)],0);return z%2===0?Z&255:Z/256>>>0},put_byte:function(z,X){var Z=X==="end_of_stream"?this.text.length:Math.floor(X/2);if(this.text.length>>0,ie=(ie&255)<<8|z&255):(ie=ie&255,ie=(z&255)<<8|ie&255),this.text.length===Z?this.text+=u(ie):this.text=this.text.substring(0,Z)+u(ie)+this.text.substring(Z+1),!0},flush:function(){return!0},close:function(){var z=tau_file_system.files[this.path];return z?!0:null}},tau_file_system.files[w]=F}return y==="write"&&(F.text=""),F}},tau_user_input={buffer:"",get:function(w,P){for(var y;tau_user_input.buffer.length\?\@\^\~\\]+|'(?:[^']*?(?:\\(?:x?\d+)?\\)*(?:'')*(?:\\')*)*')/,number:/^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abfnrtv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/,string:/^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/,l_brace:/^(?:\[)/,r_brace:/^(?:\])/,l_bracket:/^(?:\{)/,r_bracket:/^(?:\})/,bar:/^(?:\|)/,l_paren:/^(?:\()/,r_paren:/^(?:\))/};function L(w,P){return w.get_flag("char_conversion").id==="on"?P.replace(/./g,function(y){return w.get_char_conversion(y)}):P}function U(w){this.thread=w,this.text="",this.tokens=[]}U.prototype.set_last_tokens=function(w){return this.tokens=w},U.prototype.new_text=function(w){this.text=w,this.tokens=[]},U.prototype.get_tokens=function(w){var P,y=0,F=0,z=0,X=[],Z=!1;if(w){var ie=this.tokens[w-1];y=ie.len,P=L(this.thread,this.text.substr(ie.len)),F=ie.line,z=ie.start}else P=this.text;if(/^\s*$/.test(P))return null;for(;P!=="";){var Pe=[],Ne=!1;if(/^\n/.exec(P)!==null){F++,z=0,y++,P=P.replace(/\n/,""),Z=!0;continue}for(var ot in R)if(R.hasOwnProperty(ot)){var dt=R[ot].exec(P);dt&&Pe.push({value:dt[0],name:ot,matches:dt})}if(!Pe.length)return this.set_last_tokens([{value:P,matches:[],name:"lexical",line:F,start:z}]);var ie=r(Pe,function(Qr,mr){return Qr.value.length>=mr.value.length?Qr:mr});switch(ie.start=z,ie.line=F,P=P.replace(ie.value,""),z+=ie.value.length,y+=ie.value.length,ie.name){case"atom":ie.raw=ie.value,ie.value.charAt(0)==="'"&&(ie.value=v(ie.value.substr(1,ie.value.length-2),"'"),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence"));break;case"number":ie.float=ie.value.substring(0,2)!=="0x"&&ie.value.match(/[.eE]/)!==null&&ie.value!=="0'.",ie.value=C(ie.value),ie.blank=Ne;break;case"string":var Gt=ie.value.charAt(0);ie.value=v(ie.value.substr(1,ie.value.length-2),Gt),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence");break;case"whitespace":var $t=X[X.length-1];$t&&($t.space=!0),Ne=!0;continue;case"r_bracket":X.length>0&&X[X.length-1].name==="l_bracket"&&(ie=X.pop(),ie.name="atom",ie.value="{}",ie.raw="{}",ie.space=!1);break;case"r_brace":X.length>0&&X[X.length-1].name==="l_brace"&&(ie=X.pop(),ie.name="atom",ie.value="[]",ie.raw="[]",ie.space=!1);break}ie.len=y,X.push(ie),Ne=!1}var bt=this.set_last_tokens(X);return bt.length===0?null:bt};function J(w,P,y,F,z){if(!P[y])return{type:A,value:b.error.syntax(P[y-1],"expression expected",!0)};var X;if(F==="0"){var Z=P[y];switch(Z.name){case"number":return{type:p,len:y+1,value:new b.type.Num(Z.value,Z.float)};case"variable":return{type:p,len:y+1,value:new b.type.Var(Z.value)};case"string":var ie;switch(w.get_flag("double_quotes").id){case"atom":ie=new H(Z.value,[]);break;case"codes":ie=new H("[]",[]);for(var Pe=Z.value.length-1;Pe>=0;Pe--)ie=new H(".",[new b.type.Num(n(Z.value,Pe),!1),ie]);break;case"chars":ie=new H("[]",[]);for(var Pe=Z.value.length-1;Pe>=0;Pe--)ie=new H(".",[new b.type.Term(Z.value.charAt(Pe),[]),ie]);break}return{type:p,len:y+1,value:ie};case"l_paren":var bt=J(w,P,y+1,w.__get_max_priority(),!0);return bt.type!==p?bt:P[bt.len]&&P[bt.len].name==="r_paren"?(bt.len++,bt):{type:A,derived:!0,value:b.error.syntax(P[bt.len]?P[bt.len]:P[bt.len-1],") or operator expected",!P[bt.len])};case"l_bracket":var bt=J(w,P,y+1,w.__get_max_priority(),!0);return bt.type!==p?bt:P[bt.len]&&P[bt.len].name==="r_bracket"?(bt.len++,bt.value=new H("{}",[bt.value]),bt):{type:A,derived:!0,value:b.error.syntax(P[bt.len]?P[bt.len]:P[bt.len-1],"} or operator expected",!P[bt.len])}}var Ne=te(w,P,y,z);return Ne.type===p||Ne.derived||(Ne=ae(w,P,y),Ne.type===p||Ne.derived)?Ne:{type:A,derived:!1,value:b.error.syntax(P[y],"unexpected token")}}var ot=w.__get_max_priority(),dt=w.__get_next_priority(F),Gt=y;if(P[y].name==="atom"&&P[y+1]&&(P[y].space||P[y+1].name!=="l_paren")){var Z=P[y++],$t=w.__lookup_operator_classes(F,Z.value);if($t&&$t.indexOf("fy")>-1){var bt=J(w,P,y,F,z);if(bt.type!==A)return Z.value==="-"&&!Z.space&&b.type.is_number(bt.value)?{value:new b.type.Num(-bt.value.value,bt.value.is_float),len:bt.len,type:p}:{value:new b.type.Term(Z.value,[bt.value]),len:bt.len,type:p};X=bt}else if($t&&$t.indexOf("fx")>-1){var bt=J(w,P,y,dt,z);if(bt.type!==A)return{value:new b.type.Term(Z.value,[bt.value]),len:bt.len,type:p};X=bt}}y=Gt;var bt=J(w,P,y,dt,z);if(bt.type===p){y=bt.len;var Z=P[y];if(P[y]&&(P[y].name==="atom"&&w.__lookup_operator_classes(F,Z.value)||P[y].name==="bar"&&w.__lookup_operator_classes(F,"|"))){var an=dt,Qr=F,$t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("xf")>-1)return{value:new b.type.Term(Z.value,[bt.value]),len:++bt.len,type:p};if($t.indexOf("xfx")>-1){var mr=J(w,P,y+1,an,z);return mr.type===p?{value:new b.type.Term(Z.value,[bt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if($t.indexOf("xfy")>-1){var mr=J(w,P,y+1,Qr,z);return mr.type===p?{value:new b.type.Term(Z.value,[bt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if(bt.type!==A)for(;;){y=bt.len;var Z=P[y];if(Z&&Z.name==="atom"&&w.__lookup_operator_classes(F,Z.value)){var $t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("yf")>-1)bt={value:new b.type.Term(Z.value,[bt.value]),len:++y,type:p};else if($t.indexOf("yfx")>-1){var mr=J(w,P,++y,an,z);if(mr.type===A)return mr.derived=!0,mr;y=mr.len,bt={value:new b.type.Term(Z.value,[bt.value,mr.value]),len:y,type:p}}else break}else break}}else X={type:A,value:b.error.syntax(P[bt.len-1],"operator expected")};return bt}return bt}function te(w,P,y,F){if(!P[y]||P[y].name==="atom"&&P[y].raw==="."&&!F&&(P[y].space||!P[y+1]||P[y+1].name!=="l_paren"))return{type:A,derived:!1,value:b.error.syntax(P[y-1],"unfounded token")};var z=P[y],X=[];if(P[y].name==="atom"&&P[y].raw!==","){if(y++,P[y-1].space)return{type:p,len:y,value:new b.type.Term(z.value,X)};if(P[y]&&P[y].name==="l_paren"){if(P[y+1]&&P[y+1].name==="r_paren")return{type:A,derived:!0,value:b.error.syntax(P[y+1],"argument expected")};var Z=J(w,P,++y,"999",!0);if(Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:b.error.syntax(P[y]?P[y]:P[y-1],"argument expected",!P[y])};for(X.push(Z.value),y=Z.len;P[y]&&P[y].name==="atom"&&P[y].value===",";){if(Z=J(w,P,y+1,"999",!0),Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:b.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};X.push(Z.value),y=Z.len}if(P[y]&&P[y].name==="r_paren")y++;else return{type:A,derived:!0,value:b.error.syntax(P[y]?P[y]:P[y-1],", or ) expected",!P[y])}}return{type:p,len:y,value:new b.type.Term(z.value,X)}}return{type:A,derived:!1,value:b.error.syntax(P[y],"term expected")}}function ae(w,P,y){if(!P[y])return{type:A,derived:!1,value:b.error.syntax(P[y-1],"[ expected")};if(P[y]&&P[y].name==="l_brace"){var F=J(w,P,++y,"999",!0),z=[F.value],X=void 0;if(F.type===A)return P[y]&&P[y].name==="r_brace"?{type:p,len:y+1,value:new b.type.Term("[]",[])}:{type:A,derived:!0,value:b.error.syntax(P[y],"] expected")};for(y=F.len;P[y]&&P[y].name==="atom"&&P[y].value===",";){if(F=J(w,P,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:b.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};z.push(F.value),y=F.len}var Z=!1;if(P[y]&&P[y].name==="bar"){if(Z=!0,F=J(w,P,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:b.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};X=F.value,y=F.len}return P[y]&&P[y].name==="r_brace"?{type:p,len:y+1,value:g(z,X)}:{type:A,derived:!0,value:b.error.syntax(P[y]?P[y]:P[y-1],Z?"] expected":", or | or ] expected",!P[y])}}return{type:A,derived:!1,value:b.error.syntax(P[y],"list expected")}}function fe(w,P,y){var F=P[y].line,z=J(w,P,y,w.__get_max_priority(),!1),X=null,Z;if(z.type!==A)if(y=z.len,P[y]&&P[y].name==="atom"&&P[y].raw===".")if(y++,b.type.is_term(z.value)){if(z.value.indicator===":-/2"?(X=new b.type.Rule(z.value.args[0],we(z.value.args[1])),Z={value:X,len:y,type:p}):z.value.indicator==="-->/2"?(X=he(new b.type.Rule(z.value.args[0],z.value.args[1]),w),X.body=we(X.body),Z={value:X,len:y,type:b.type.is_rule(X)?p:A}):(X=new b.type.Rule(z.value,null),Z={value:X,len:y,type:p}),X){var ie=X.singleton_variables();ie.length>0&&w.throw_warning(b.warning.singleton(ie,X.head.indicator,F))}return Z}else return{type:A,value:b.error.syntax(P[y],"callable expected")};else return{type:A,value:b.error.syntax(P[y]?P[y]:P[y-1],". or operator expected")};return z}function ce(w,P,y){y=y||{},y.from=y.from?y.from:"$tau-js",y.reconsult=y.reconsult!==void 0?y.reconsult:!0;var F=new U(w),z={},X;F.new_text(P);var Z=0,ie=F.get_tokens(Z);do{if(ie===null||!ie[Z])break;var Pe=fe(w,ie,Z);if(Pe.type===A)return new H("throw",[Pe.value]);if(Pe.value.body===null&&Pe.value.head.indicator==="?-/1"){var Ne=new Je(w.session);Ne.add_goal(Pe.value.head.args[0]),Ne.answer(function(dt){b.type.is_error(dt)?w.throw_warning(dt.args[0]):(dt===!1||dt===null)&&w.throw_warning(b.warning.failed_goal(Pe.value.head.args[0],Pe.len))}),Z=Pe.len;var ot=!0}else if(Pe.value.body===null&&Pe.value.head.indicator===":-/1"){var ot=w.run_directive(Pe.value.head.args[0]);Z=Pe.len,Pe.value.head.args[0].indicator==="char_conversion/2"&&(ie=F.get_tokens(Z),Z=0)}else{X=Pe.value.head.indicator,y.reconsult!==!1&&z[X]!==!0&&!w.is_multifile_predicate(X)&&(w.session.rules[X]=a(w.session.rules[X]||[],function(Gt){return Gt.dynamic}),z[X]=!0);var ot=w.add_rule(Pe.value,y);Z=Pe.len}if(!ot)return ot}while(!0);return!0}function me(w,P){var y=new U(w);y.new_text(P);var F=0;do{var z=y.get_tokens(F);if(z===null)break;var X=J(w,z,0,w.__get_max_priority(),!1);if(X.type!==A){var Z=X.len,ie=Z;if(z[Z]&&z[Z].name==="atom"&&z[Z].raw===".")w.add_goal(we(X.value));else{var Pe=z[Z];return new H("throw",[b.error.syntax(Pe||z[Z-1],". or operator expected",!Pe)])}F=X.len+1}else return new H("throw",[X.value])}while(!0);return!0}function he(w,P){w=w.rename(P);var y=P.next_free_variable(),F=Be(w.body,y,P);return F.error?F.value:(w.body=F.value,w.head.args=w.head.args.concat([y,F.variable]),w.head=new H(w.head.id,w.head.args),w)}function Be(w,P,y){var F;if(b.type.is_term(w)&&w.indicator==="!/0")return{value:w,variable:P,error:!1};if(b.type.is_term(w)&&w.indicator===",/2"){var z=Be(w.args[0],P,y);if(z.error)return z;var X=Be(w.args[1],z.variable,y);return X.error?X:{value:new H(",",[z.value,X.value]),variable:X.variable,error:!1}}else{if(b.type.is_term(w)&&w.indicator==="{}/1")return{value:w.args[0],variable:P,error:!1};if(b.type.is_empty_list(w))return{value:new H("true",[]),variable:P,error:!1};if(b.type.is_list(w)){F=y.next_free_variable();for(var Z=w,ie;Z.indicator==="./2";)ie=Z,Z=Z.args[1];return b.type.is_variable(Z)?{value:b.error.instantiation("DCG"),variable:P,error:!0}:b.type.is_empty_list(Z)?(ie.args[1]=F,{value:new H("=",[P,w]),variable:F,error:!1}):{value:b.error.type("list",w,"DCG"),variable:P,error:!0}}else return b.type.is_callable(w)?(F=y.next_free_variable(),w.args=w.args.concat([P,F]),w=new H(w.id,w.args),{value:w,variable:F,error:!1}):{value:b.error.type("callable",w,"DCG"),variable:P,error:!0}}}function we(w){return b.type.is_variable(w)?new H("call",[w]):b.type.is_term(w)&&[",/2",";/2","->/2"].indexOf(w.indicator)!==-1?new H(w.id,[we(w.args[0]),we(w.args[1])]):w}function g(w,P){for(var y=P||new b.type.Term("[]",[]),F=w.length-1;F>=0;F--)y=new b.type.Term(".",[w[F],y]);return y}function Ee(w,P){for(var y=w.length-1;y>=0;y--)w[y]===P&&w.splice(y,1)}function Se(w){for(var P={},y=[],F=0;F=0;P--)if(w.charAt(P)==="/")return new H("/",[new H(w.substring(0,P)),new Fe(parseInt(w.substring(P+1)),!1)])}function Ie(w){this.id=w}function Fe(w,P){this.is_float=P!==void 0?P:parseInt(w)!==w,this.value=this.is_float?w:parseInt(w)}var At=0;function H(w,P,y){this.ref=y||++At,this.id=w,this.args=P||[],this.indicator=w+"/"+this.args.length}var at=0;function Re(w,P,y,F,z,X){this.id=at++,this.stream=w,this.mode=P,this.alias=y,this.type=F!==void 0?F:"text",this.reposition=z!==void 0?z:!0,this.eof_action=X!==void 0?X:"eof_code",this.position=this.mode==="append"?"end_of_stream":0,this.output=this.mode==="write"||this.mode==="append",this.input=this.mode==="read"}function ke(w){w=w||{},this.links=w}function xe(w,P,y){P=P||new ke,y=y||null,this.goal=w,this.substitution=P,this.parent=y}function He(w,P,y){this.head=w,this.body=P,this.dynamic=y||!1}function Te(w){w=w===void 0||w<=0?1e3:w,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new Je(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=w,this.streams={user_input:new Re(typeof hl<"u"&&hl.exports?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Re(typeof hl<"u"&&hl.exports?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=typeof hl<"u"&&hl.exports?nodejs_file_system:tau_file_system,this.standard_input=this.streams.user_input,this.standard_output=this.streams.user_output,this.current_input=this.streams.user_input,this.current_output=this.streams.user_output,this.format_success=function(P){return P.substitution},this.format_error=function(P){return P.goal},this.flag={bounded:b.flag.bounded.value,max_integer:b.flag.max_integer.value,min_integer:b.flag.min_integer.value,integer_rounding_function:b.flag.integer_rounding_function.value,char_conversion:b.flag.char_conversion.value,debug:b.flag.debug.value,max_arity:b.flag.max_arity.value,unknown:b.flag.unknown.value,double_quotes:b.flag.double_quotes.value,occurs_check:b.flag.occurs_check.value,dialect:b.flag.dialect.value,version_data:b.flag.version_data.value,nodejs:b.flag.nodejs.value},this.__loaded_modules=[],this.__char_conversion={},this.__operators={1200:{":-":["fx","xfx"],"-->":["xfx"],"?-":["fx"]},1100:{";":["xfy"]},1050:{"->":["xfy"]},1e3:{",":["xfy"]},900:{"\\+":["fy"]},700:{"=":["xfx"],"\\=":["xfx"],"==":["xfx"],"\\==":["xfx"],"@<":["xfx"],"@=<":["xfx"],"@>":["xfx"],"@>=":["xfx"],"=..":["xfx"],is:["xfx"],"=:=":["xfx"],"=\\=":["xfx"],"<":["xfx"],"=<":["xfx"],">":["xfx"],">=":["xfx"]},600:{":":["xfy"]},500:{"+":["yfx"],"-":["yfx"],"/\\":["yfx"],"\\/":["yfx"]},400:{"*":["yfx"],"/":["yfx"],"//":["yfx"],rem:["yfx"],mod:["yfx"],"<<":["yfx"],">>":["yfx"]},200:{"**":["xfx"],"^":["xfy"],"-":["fy"],"+":["fy"],"\\":["fy"]}}}function Je(w){this.epoch=Date.now(),this.session=w,this.session.total_threads++,this.total_steps=0,this.cpu_time=0,this.cpu_time_last=0,this.points=[],this.debugger=!1,this.debugger_states=[],this.level="top_level/0",this.__calls=[],this.current_limit=this.session.limit,this.warnings=[]}function je(w,P,y){this.id=w,this.rules=P,this.exports=y,b.module[w]=this}je.prototype.exports_predicate=function(w){return this.exports.indexOf(w)!==-1},Ie.prototype.unify=function(w,P){if(P&&e(w.variables(),this.id)!==-1&&!b.type.is_variable(w))return null;var y={};return y[this.id]=w,new ke(y)},Fe.prototype.unify=function(w,P){return b.type.is_number(w)&&this.value===w.value&&this.is_float===w.is_float?new ke:null},H.prototype.unify=function(w,P){if(b.type.is_term(w)&&this.indicator===w.indicator){for(var y=new ke,F=0;F=0){var F=this.args[0].value,z=Math.floor(F/26),X=F%26;return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[X]+(z!==0?z:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(w)+"}";case"./2":for(var Z="["+this.args[0].toString(w),ie=this.args[1];ie.indicator==="./2";)Z+=", "+ie.args[0].toString(w),ie=ie.args[1];return ie.indicator!=="[]/0"&&(Z+="|"+ie.toString(w)),Z+="]",Z;case",/2":return"("+this.args[0].toString(w)+", "+this.args[1].toString(w)+")";default:var Pe=this.id,Ne=w.session?w.session.lookup_operator(this.id,this.args.length):null;if(w.session===void 0||w.ignore_ops||Ne===null)return w.quoted&&!/^(!|,|;|[a-z][0-9a-zA-Z_]*)$/.test(Pe)&&Pe!=="{}"&&Pe!=="[]"&&(Pe="'"+x(Pe)+"'"),Pe+(this.args.length?"("+o(this.args,function($t){return $t.toString(w)}).join(", ")+")":"");var ot=Ne.priority>P.priority||Ne.priority===P.priority&&(Ne.class==="xfy"&&this.indicator!==P.indicator||Ne.class==="yfx"&&this.indicator!==P.indicator||this.indicator===P.indicator&&Ne.class==="yfx"&&y==="right"||this.indicator===P.indicator&&Ne.class==="xfy"&&y==="left");Ne.indicator=this.indicator;var dt=ot?"(":"",Gt=ot?")":"";return this.args.length===0?"("+this.id+")":["fy","fx"].indexOf(Ne.class)!==-1?dt+Pe+" "+this.args[0].toString(w,Ne)+Gt:["yf","xf"].indexOf(Ne.class)!==-1?dt+this.args[0].toString(w,Ne)+" "+Pe+Gt:dt+this.args[0].toString(w,Ne,"left")+" "+this.id+" "+this.args[1].toString(w,Ne,"right")+Gt}},Re.prototype.toString=function(w){return"("+this.id+")"},ke.prototype.toString=function(w){var P="{";for(var y in this.links)!this.links.hasOwnProperty(y)||(P!=="{"&&(P+=", "),P+=y+"/"+this.links[y].toString(w));return P+="}",P},xe.prototype.toString=function(w){return this.goal===null?"<"+this.substitution.toString(w)+">":"<"+this.goal.toString(w)+", "+this.substitution.toString(w)+">"},He.prototype.toString=function(w){return this.body?this.head.toString(w)+" :- "+this.body.toString(w)+".":this.head.toString(w)+"."},Te.prototype.toString=function(w){for(var P="",y=0;y=0;z--)F=new H(".",[P[z],F]);return F}return new H(this.id,o(this.args,function(X){return X.apply(w)}),this.ref)},Re.prototype.apply=function(w){return this},He.prototype.apply=function(w){return new He(this.head.apply(w),this.body!==null?this.body.apply(w):null)},ke.prototype.apply=function(w){var P,y={};for(P in this.links)!this.links.hasOwnProperty(P)||(y[P]=this.links[P].apply(w));return new ke(y)},H.prototype.select=function(){for(var w=this;w.indicator===",/2";)w=w.args[0];return w},H.prototype.replace=function(w){return this.indicator===",/2"?this.args[0].indicator===",/2"?new H(",",[this.args[0].replace(w),this.args[1]]):w===null?this.args[1]:new H(",",[w,this.args[1]]):w},H.prototype.search=function(w){if(b.type.is_term(w)&&w.ref!==void 0&&this.ref===w.ref)return!0;for(var P=0;PP&&F0&&(P=this.head_point().substitution.domain());e(P,b.format_variable(this.session.rename))!==-1;)this.session.rename++;if(w.id==="_")return new Ie(b.format_variable(this.session.rename));this.session.renamed_variables[w.id]=b.format_variable(this.session.rename)}return new Ie(this.session.renamed_variables[w.id])},Te.prototype.next_free_variable=function(){return this.thread.next_free_variable()},Je.prototype.next_free_variable=function(){this.session.rename++;var w=[];for(this.points.length>0&&(w=this.head_point().substitution.domain());e(w,b.format_variable(this.session.rename))!==-1;)this.session.rename++;return new Ie(b.format_variable(this.session.rename))},Te.prototype.is_public_predicate=function(w){return!this.public_predicates.hasOwnProperty(w)||this.public_predicates[w]===!0},Je.prototype.is_public_predicate=function(w){return this.session.is_public_predicate(w)},Te.prototype.is_multifile_predicate=function(w){return this.multifile_predicates.hasOwnProperty(w)&&this.multifile_predicates[w]===!0},Je.prototype.is_multifile_predicate=function(w){return this.session.is_multifile_predicate(w)},Te.prototype.prepend=function(w){return this.thread.prepend(w)},Je.prototype.prepend=function(w){for(var P=w.length-1;P>=0;P--)this.points.push(w[P])},Te.prototype.success=function(w,P){return this.thread.success(w,P)},Je.prototype.success=function(w,y){var y=typeof y>"u"?w:y;this.prepend([new xe(w.goal.replace(null),w.substitution,y)])},Te.prototype.throw_error=function(w){return this.thread.throw_error(w)},Je.prototype.throw_error=function(w){this.prepend([new xe(new H("throw",[w]),new ke,null,null)])},Te.prototype.step_rule=function(w,P){return this.thread.step_rule(w,P)},Je.prototype.step_rule=function(w,P){var y=P.indicator;if(w==="user"&&(w=null),w===null&&this.session.rules.hasOwnProperty(y))return this.session.rules[y];for(var F=w===null?this.session.modules:e(this.session.modules,w)===-1?[]:[w],z=0;z1)&&this.again()},Te.prototype.answers=function(w,P,y){return this.thread.answers(w,P,y)},Je.prototype.answers=function(w,P,y){var F=P||1e3,z=this;if(P<=0){y&&y();return}this.answer(function(X){w(X),X!==!1?setTimeout(function(){z.answers(w,P-1,y)},1):y&&y()})},Te.prototype.again=function(w){return this.thread.again(w)},Je.prototype.again=function(w){for(var P,y=Date.now();this.__calls.length>0;){for(this.warnings=[],w!==!1&&(this.current_limit=this.session.limit);this.current_limit>0&&this.points.length>0&&this.head_point().goal!==null&&!b.type.is_error(this.head_point().goal);)if(this.current_limit--,this.step()===!0)return;var F=Date.now();this.cpu_time_last=F-y,this.cpu_time+=this.cpu_time_last;var z=this.__calls.shift();this.current_limit<=0?z(null):this.points.length===0?z(!1):b.type.is_error(this.head_point().goal)?(P=this.session.format_error(this.points.pop()),this.points=[],z(P)):(this.debugger&&this.debugger_states.push(this.head_point()),P=this.session.format_success(this.points.pop()),z(P))}},Te.prototype.unfold=function(w){if(w.body===null)return!1;var P=w.head,y=w.body,F=y.select(),z=new Je(this),X=[];z.add_goal(F),z.step();for(var Z=z.points.length-1;Z>=0;Z--){var ie=z.points[Z],Pe=P.apply(ie.substitution),Ne=y.replace(ie.goal);Ne!==null&&(Ne=Ne.apply(ie.substitution)),X.push(new He(Pe,Ne))}var ot=this.rules[P.indicator],dt=e(ot,w);return X.length>0&&dt!==-1?(ot.splice.apply(ot,[dt,1].concat(X)),!0):!1},Je.prototype.unfold=function(w){return this.session.unfold(w)},Ie.prototype.interpret=function(w){return b.error.instantiation(w.level)},Fe.prototype.interpret=function(w){return this},H.prototype.interpret=function(w){return b.type.is_unitary_list(this)?this.args[0].interpret(w):b.operate(w,this)},Ie.prototype.compare=function(w){return this.idw.id?1:0},Fe.prototype.compare=function(w){if(this.value===w.value&&this.is_float===w.is_float)return 0;if(this.valuew.value)return 1},H.prototype.compare=function(w){if(this.args.lengthw.args.length||this.args.length===w.args.length&&this.id>w.id)return 1;for(var P=0;PF)return 1;if(w.constructor===Fe){if(w.is_float&&P.is_float)return 0;if(w.is_float)return-1;if(P.is_float)return 1}return 0},is_substitution:function(w){return w instanceof ke},is_state:function(w){return w instanceof xe},is_rule:function(w){return w instanceof He},is_variable:function(w){return w instanceof Ie},is_stream:function(w){return w instanceof Re},is_anonymous_var:function(w){return w instanceof Ie&&w.id==="_"},is_callable:function(w){return w instanceof H},is_number:function(w){return w instanceof Fe},is_integer:function(w){return w instanceof Fe&&!w.is_float},is_float:function(w){return w instanceof Fe&&w.is_float},is_term:function(w){return w instanceof H},is_atom:function(w){return w instanceof H&&w.args.length===0},is_ground:function(w){if(w instanceof Ie)return!1;if(w instanceof H){for(var P=0;P0},is_list:function(w){return w instanceof H&&(w.indicator==="[]/0"||w.indicator==="./2")},is_empty_list:function(w){return w instanceof H&&w.indicator==="[]/0"},is_non_empty_list:function(w){return w instanceof H&&w.indicator==="./2"},is_fully_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof Ie||w instanceof H&&w.indicator==="[]/0"},is_instantiated_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof H&&w.indicator==="[]/0"},is_unitary_list:function(w){return w instanceof H&&w.indicator==="./2"&&w.args[1]instanceof H&&w.args[1].indicator==="[]/0"},is_character:function(w){return w instanceof H&&(w.id.length===1||w.id.length>0&&w.id.length<=2&&n(w.id,0)>=65536)},is_character_code:function(w){return w instanceof Fe&&!w.is_float&&w.value>=0&&w.value<=1114111},is_byte:function(w){return w instanceof Fe&&!w.is_float&&w.value>=0&&w.value<=255},is_operator:function(w){return w instanceof H&&b.arithmetic.evaluation[w.indicator]},is_directive:function(w){return w instanceof H&&b.directive[w.indicator]!==void 0},is_builtin:function(w){return w instanceof H&&b.predicate[w.indicator]!==void 0},is_error:function(w){return w instanceof H&&w.indicator==="throw/1"},is_predicate_indicator:function(w){return w instanceof H&&w.indicator==="//2"&&w.args[0]instanceof H&&w.args[0].args.length===0&&w.args[1]instanceof Fe&&w.args[1].is_float===!1},is_flag:function(w){return w instanceof H&&w.args.length===0&&b.flag[w.id]!==void 0},is_value_flag:function(w,P){if(!b.type.is_flag(w))return!1;for(var y in b.flag[w.id].allowed)if(!!b.flag[w.id].allowed.hasOwnProperty(y)&&b.flag[w.id].allowed[y].equals(P))return!0;return!1},is_io_mode:function(w){return b.type.is_atom(w)&&["read","write","append"].indexOf(w.id)!==-1},is_stream_option:function(w){return b.type.is_term(w)&&(w.indicator==="alias/1"&&b.type.is_atom(w.args[0])||w.indicator==="reposition/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="type/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary")||w.indicator==="eof_action/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))},is_stream_position:function(w){return b.type.is_integer(w)&&w.value>=0||b.type.is_atom(w)&&(w.id==="end_of_stream"||w.id==="past_end_of_stream")},is_stream_property:function(w){return b.type.is_term(w)&&(w.indicator==="input/0"||w.indicator==="output/0"||w.indicator==="alias/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0]))||w.indicator==="file_name/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0]))||w.indicator==="position/1"&&(b.type.is_variable(w.args[0])||b.type.is_stream_position(w.args[0]))||w.indicator==="reposition/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))||w.indicator==="type/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary"))||w.indicator==="mode/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="read"||w.args[0].id==="write"||w.args[0].id==="append"))||w.indicator==="eof_action/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))||w.indicator==="end_of_stream/1"&&(b.type.is_variable(w.args[0])||b.type.is_atom(w.args[0])&&(w.args[0].id==="at"||w.args[0].id==="past"||w.args[0].id==="not")))},is_streamable:function(w){return w.__proto__.stream!==void 0},is_read_option:function(w){return b.type.is_term(w)&&["variables/1","variable_names/1","singletons/1"].indexOf(w.indicator)!==-1},is_write_option:function(w){return b.type.is_term(w)&&(w.indicator==="quoted/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="ignore_ops/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="numbervars/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))},is_close_option:function(w){return b.type.is_term(w)&&w.indicator==="force/1"&&b.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")},is_modifiable_flag:function(w){return b.type.is_flag(w)&&b.flag[w.id].changeable},is_module:function(w){return w instanceof H&&w.indicator==="library/1"&&w.args[0]instanceof H&&w.args[0].args.length===0&&b.module[w.args[0].id]!==void 0}},arithmetic:{evaluation:{"e/0":{type_args:null,type_result:!0,fn:function(w){return Math.E}},"pi/0":{type_args:null,type_result:!0,fn:function(w){return Math.PI}},"tau/0":{type_args:null,type_result:!0,fn:function(w){return 2*Math.PI}},"epsilon/0":{type_args:null,type_result:!0,fn:function(w){return Number.EPSILON}},"+/1":{type_args:null,type_result:null,fn:function(w,P){return w}},"-/1":{type_args:null,type_result:null,fn:function(w,P){return-w}},"\\/1":{type_args:!1,type_result:!1,fn:function(w,P){return~w}},"abs/1":{type_args:null,type_result:null,fn:function(w,P){return Math.abs(w)}},"sign/1":{type_args:null,type_result:null,fn:function(w,P){return Math.sign(w)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(w,P){return parseInt(w)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(w,P){return w-parseInt(w)}},"float/1":{type_args:null,type_result:!0,fn:function(w,P){return parseFloat(w)}},"floor/1":{type_args:!0,type_result:!1,fn:function(w,P){return Math.floor(w)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(w,P){return parseInt(w)}},"round/1":{type_args:!0,type_result:!1,fn:function(w,P){return Math.round(w)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(w,P){return Math.ceil(w)}},"sin/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.sin(w)}},"cos/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.cos(w)}},"tan/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.tan(w)}},"asin/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.asin(w)}},"acos/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.acos(w)}},"atan/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.atan(w)}},"atan2/2":{type_args:null,type_result:!0,fn:function(w,P,y){return Math.atan2(w,P)}},"exp/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.exp(w)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(w,P){return Math.sqrt(w)}},"log/1":{type_args:null,type_result:!0,fn:function(w,P){return w>0?Math.log(w):b.error.evaluation("undefined",P.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(w,P,y){return w+P}},"-/2":{type_args:null,type_result:null,fn:function(w,P,y){return w-P}},"*/2":{type_args:null,type_result:null,fn:function(w,P,y){return w*P}},"//2":{type_args:null,type_result:!0,fn:function(w,P,y){return P?w/P:b.error.evaluation("zero_division",y.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(w,P,y){return P?parseInt(w/P):b.error.evaluation("zero_division",y.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(w,P,y){return Math.pow(w,P)}},"^/2":{type_args:null,type_result:null,fn:function(w,P,y){return Math.pow(w,P)}},"<>/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w>>P}},"/\\/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w&P}},"\\//2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w|P}},"xor/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return w^P}},"rem/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return P?w%P:b.error.evaluation("zero_division",y.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(w,P,y){return P?w-parseInt(w/P)*P:b.error.evaluation("zero_division",y.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(w,P,y){return Math.max(w,P)}},"min/2":{type_args:null,type_result:null,fn:function(w,P,y){return Math.min(w,P)}}}},directive:{"dynamic/1":function(w,P){var y=P.args[0];if(b.type.is_variable(y))w.throw_error(b.error.instantiation(P.indicator));else if(!b.type.is_compound(y)||y.indicator!=="//2")w.throw_error(b.error.type("predicate_indicator",y,P.indicator));else if(b.type.is_variable(y.args[0])||b.type.is_variable(y.args[1]))w.throw_error(b.error.instantiation(P.indicator));else if(!b.type.is_atom(y.args[0]))w.throw_error(b.error.type("atom",y.args[0],P.indicator));else if(!b.type.is_integer(y.args[1]))w.throw_error(b.error.type("integer",y.args[1],P.indicator));else{var F=P.args[0].args[0].id+"/"+P.args[0].args[1].value;w.session.public_predicates[F]=!0,w.session.rules[F]||(w.session.rules[F]=[])}},"multifile/1":function(w,P){var y=P.args[0];b.type.is_variable(y)?w.throw_error(b.error.instantiation(P.indicator)):!b.type.is_compound(y)||y.indicator!=="//2"?w.throw_error(b.error.type("predicate_indicator",y,P.indicator)):b.type.is_variable(y.args[0])||b.type.is_variable(y.args[1])?w.throw_error(b.error.instantiation(P.indicator)):b.type.is_atom(y.args[0])?b.type.is_integer(y.args[1])?w.session.multifile_predicates[P.args[0].args[0].id+"/"+P.args[0].args[1].value]=!0:w.throw_error(b.error.type("integer",y.args[1],P.indicator)):w.throw_error(b.error.type("atom",y.args[0],P.indicator))},"set_prolog_flag/2":function(w,P){var y=P.args[0],F=P.args[1];b.type.is_variable(y)||b.type.is_variable(F)?w.throw_error(b.error.instantiation(P.indicator)):b.type.is_atom(y)?b.type.is_flag(y)?b.type.is_value_flag(y,F)?b.type.is_modifiable_flag(y)?w.session.flag[y.id]=F:w.throw_error(b.error.permission("modify","flag",y)):w.throw_error(b.error.domain("flag_value",new H("+",[y,F]),P.indicator)):w.throw_error(b.error.domain("prolog_flag",y,P.indicator)):w.throw_error(b.error.type("atom",y,P.indicator))},"use_module/1":function(w,P){var y=P.args[0];if(b.type.is_variable(y))w.throw_error(b.error.instantiation(P.indicator));else if(!b.type.is_term(y))w.throw_error(b.error.type("term",y,P.indicator));else if(b.type.is_module(y)){var F=y.args[0].id;e(w.session.modules,F)===-1&&w.session.modules.push(F)}},"char_conversion/2":function(w,P){var y=P.args[0],F=P.args[1];b.type.is_variable(y)||b.type.is_variable(F)?w.throw_error(b.error.instantiation(P.indicator)):b.type.is_character(y)?b.type.is_character(F)?y.id===F.id?delete w.session.__char_conversion[y.id]:w.session.__char_conversion[y.id]=F.id:w.throw_error(b.error.type("character",F,P.indicator)):w.throw_error(b.error.type("character",y,P.indicator))},"op/3":function(w,P){var y=P.args[0],F=P.args[1],z=P.args[2];if(b.type.is_variable(y)||b.type.is_variable(F)||b.type.is_variable(z))w.throw_error(b.error.instantiation(P.indicator));else if(!b.type.is_integer(y))w.throw_error(b.error.type("integer",y,P.indicator));else if(!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,P.indicator));else if(!b.type.is_atom(z))w.throw_error(b.error.type("atom",z,P.indicator));else if(y.value<0||y.value>1200)w.throw_error(b.error.domain("operator_priority",y,P.indicator));else if(z.id===",")w.throw_error(b.error.permission("modify","operator",z,P.indicator));else if(z.id==="|"&&(y.value<1001||F.id.length!==3))w.throw_error(b.error.permission("modify","operator",z,P.indicator));else if(["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(F.id)===-1)w.throw_error(b.error.domain("operator_specifier",F,P.indicator));else{var X={prefix:null,infix:null,postfix:null};for(var Z in w.session.__operators)if(!!w.session.__operators.hasOwnProperty(Z)){var ie=w.session.__operators[Z][z.id];ie&&(e(ie,"fx")!==-1&&(X.prefix={priority:Z,type:"fx"}),e(ie,"fy")!==-1&&(X.prefix={priority:Z,type:"fy"}),e(ie,"xf")!==-1&&(X.postfix={priority:Z,type:"xf"}),e(ie,"yf")!==-1&&(X.postfix={priority:Z,type:"yf"}),e(ie,"xfx")!==-1&&(X.infix={priority:Z,type:"xfx"}),e(ie,"xfy")!==-1&&(X.infix={priority:Z,type:"xfy"}),e(ie,"yfx")!==-1&&(X.infix={priority:Z,type:"yfx"}))}var Pe;switch(F.id){case"fy":case"fx":Pe="prefix";break;case"yf":case"xf":Pe="postfix";break;default:Pe="infix";break}if(((X.prefix&&Pe==="prefix"||X.postfix&&Pe==="postfix"||X.infix&&Pe==="infix")&&X[Pe].type!==F.id||X.infix&&Pe==="postfix"||X.postfix&&Pe==="infix")&&y.value!==0)w.throw_error(b.error.permission("create","operator",z,P.indicator));else return X[Pe]&&(Ee(w.session.__operators[X[Pe].priority][z.id],F.id),w.session.__operators[X[Pe].priority][z.id].length===0&&delete w.session.__operators[X[Pe].priority][z.id]),y.value>0&&(w.session.__operators[y.value]||(w.session.__operators[y.value.toString()]={}),w.session.__operators[y.value][z.id]||(w.session.__operators[y.value][z.id]=[]),w.session.__operators[y.value][z.id].push(F.id)),!0}}},predicate:{"op/3":function(w,P,y){b.directive["op/3"](w,y)&&w.success(P)},"current_op/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=[];for(var ie in w.session.__operators)for(var Pe in w.session.__operators[ie])for(var Ne=0;Ne/2"){var F=w.points,z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(Ne){return Ne.substitution},w.session.format_error=function(Ne){return Ne.goal},w.points=[new xe(y.args[0].args[0],P.substitution,P)];var Z=function(Ne){w.points=F,w.session.format_success=z,w.session.format_error=X,Ne===!1?w.prepend([new xe(P.goal.replace(y.args[1]),P.substitution,P)]):b.type.is_error(Ne)?w.throw_error(Ne.args[0]):Ne===null?(w.prepend([P]),w.__calls.shift()(null)):w.prepend([new xe(P.goal.replace(y.args[0].args[1]).apply(Ne),P.substitution.apply(Ne),P)])};w.__calls.unshift(Z)}else{var ie=new xe(P.goal.replace(y.args[0]),P.substitution,P),Pe=new xe(P.goal.replace(y.args[1]),P.substitution,P);w.prepend([ie,Pe])}},"!/0":function(w,P,y){var F,z,X=[];for(F=P,z=null;F.parent!==null&&F.parent.goal.search(y);)if(z=F,F=F.parent,F.goal!==null){var Z=F.goal.select();if(Z&&Z.id==="call"&&Z.search(y)){F=z;break}}for(var ie=w.points.length-1;ie>=0;ie--){for(var Pe=w.points[ie],Ne=Pe.parent;Ne!==null&&Ne!==F.parent;)Ne=Ne.parent;Ne===null&&Ne!==F.parent&&X.push(Pe)}w.points=X.reverse(),w.success(P)},"\\+/1":function(w,P,y){var F=y.args[0];b.type.is_variable(F)?w.throw_error(b.error.instantiation(w.level)):b.type.is_callable(F)?w.prepend([new xe(P.goal.replace(new H(",",[new H(",",[new H("call",[F]),new H("!",[])]),new H("fail",[])])),P.substitution,P),new xe(P.goal.replace(null),P.substitution,P)]):w.throw_error(b.error.type("callable",F,w.level))},"->/2":function(w,P,y){var F=P.goal.replace(new H(",",[y.args[0],new H(",",[new H("!"),y.args[1]])]));w.prepend([new xe(F,P.substitution,P)])},"fail/0":function(w,P,y){},"false/0":function(w,P,y){},"true/0":function(w,P,y){w.success(P)},"call/1":ne(1),"call/2":ne(2),"call/3":ne(3),"call/4":ne(4),"call/5":ne(5),"call/6":ne(6),"call/7":ne(7),"call/8":ne(8),"once/1":function(w,P,y){var F=y.args[0];w.prepend([new xe(P.goal.replace(new H(",",[new H("call",[F]),new H("!",[])])),P.substitution,P)])},"forall/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("\\+",[new H(",",[new H("call",[F]),new H("\\+",[new H("call",[z])])])])),P.substitution,P)])},"repeat/0":function(w,P,y){w.prepend([new xe(P.goal.replace(null),P.substitution,P),P])},"throw/1":function(w,P,y){b.type.is_variable(y.args[0])?w.throw_error(b.error.instantiation(w.level)):w.throw_error(y.args[0])},"catch/3":function(w,P,y){var F=w.points;w.points=[],w.prepend([new xe(y.args[0],P.substitution,P)]);var z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(ie){return ie.substitution},w.session.format_error=function(ie){return ie.goal};var Z=function(ie){var Pe=w.points;if(w.points=F,w.session.format_success=z,w.session.format_error=X,b.type.is_error(ie)){for(var Ne=[],ot=w.points.length-1;ot>=0;ot--){for(var $t=w.points[ot],dt=$t.parent;dt!==null&&dt!==P.parent;)dt=dt.parent;dt===null&&dt!==P.parent&&Ne.push($t)}w.points=Ne;var Gt=w.get_flag("occurs_check").indicator==="true/0",$t=new xe,bt=b.unify(ie.args[0],y.args[1],Gt);bt!==null?($t.substitution=P.substitution.apply(bt),$t.goal=P.goal.replace(y.args[2]).apply(bt),$t.parent=P,w.prepend([$t])):w.throw_error(ie.args[0])}else if(ie!==!1){for(var an=ie===null?[]:[new xe(P.goal.apply(ie).replace(null),P.substitution.apply(ie),P)],Qr=[],ot=Pe.length-1;ot>=0;ot--){Qr.push(Pe[ot]);var mr=Pe[ot].goal!==null?Pe[ot].goal.select():null;if(b.type.is_term(mr)&&mr.indicator==="!/0")break}var br=o(Qr,function(Wr){return Wr.goal===null&&(Wr.goal=new H("true",[])),Wr=new xe(P.goal.replace(new H("catch",[Wr.goal,y.args[1],y.args[2]])),P.substitution.apply(Wr.substitution),Wr.parent),Wr.exclude=y.args[0].variables(),Wr}).reverse();w.prepend(br),w.prepend(an),ie===null&&(this.current_limit=0,w.__calls.shift()(null))}};w.__calls.unshift(Z)},"=/2":function(w,P,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=new xe,X=b.unify(y.args[0],y.args[1],F);X!==null&&(z.goal=P.goal.apply(X).replace(null),z.substitution=P.substitution.apply(X),z.parent=P,w.prepend([z]))},"unify_with_occurs_check/2":function(w,P,y){var F=new xe,z=b.unify(y.args[0],y.args[1],!0);z!==null&&(F.goal=P.goal.apply(z).replace(null),F.substitution=P.substitution.apply(z),F.parent=P,w.prepend([F]))},"\\=/2":function(w,P,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=b.unify(y.args[0],y.args[1],F);z===null&&w.success(P)},"subsumes_term/2":function(w,P,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=b.unify(y.args[1],y.args[0],F);z!==null&&y.args[1].apply(z).equals(y.args[1])&&w.success(P)},"findall/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(z))w.throw_error(b.error.type("callable",z,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=w.next_free_variable(),ie=new H(",",[z,new H("=",[Z,F])]),Pe=w.points,Ne=w.session.limit,ot=w.session.format_success;w.session.format_success=function($t){return $t.substitution},w.add_goal(ie,!0,P);var dt=[],Gt=function($t){if($t!==!1&&$t!==null&&!b.type.is_error($t))w.__calls.unshift(Gt),dt.push($t.links[Z.id]),w.session.limit=w.current_limit;else if(w.points=Pe,w.session.limit=Ne,w.session.format_success=ot,b.type.is_error($t))w.throw_error($t.args[0]);else if(w.current_limit>0){for(var bt=new H("[]"),an=dt.length-1;an>=0;an--)bt=new H(".",[dt[an],bt]);w.prepend([new xe(P.goal.replace(new H("=",[X,bt])),P.substitution,P)])}};w.__calls.unshift(Gt)}},"bagof/3":function(w,P,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(X))w.throw_error(b.error.type("callable",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_list(Z))w.throw_error(b.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Pe;X.indicator==="^/2"?(Pe=X.args[0].variables(),X=X.args[1]):Pe=[],Pe=Pe.concat(z.variables());for(var Ne=X.variables().filter(function(br){return e(Pe,br)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var Gt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,bt=w.session.limit,an=w.session.format_success;w.session.format_success=function(br){return br.substitution},w.add_goal(Gt,!0,P);var Qr=[],mr=function(br){if(br!==!1&&br!==null&&!b.type.is_error(br)){w.__calls.unshift(mr);var Wr=!1,Kn=br.links[ie.id].args[0],Ns=br.links[ie.id].args[1];for(var Ti in Qr)if(!!Qr.hasOwnProperty(Ti)){var ps=Qr[Ti];if(ps.variables.equals(Kn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Kn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=bt,w.session.format_success=an,b.type.is_error(br))w.throw_error(br.args[0]);else if(w.current_limit>0){for(var io=[],Pi=0;Pi=0;so--)Ls=new H(".",[br[so],Ls]);io.push(new xe(P.goal.replace(new H(",",[new H("=",[ot,Qr[Pi].variables]),new H("=",[Z,Ls])])),P.substitution,P))}w.prepend(io)}};w.__calls.unshift(mr)}},"setof/3":function(w,P,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(X))w.throw_error(b.error.type("callable",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_list(Z))w.throw_error(b.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Pe;X.indicator==="^/2"?(Pe=X.args[0].variables(),X=X.args[1]):Pe=[],Pe=Pe.concat(z.variables());for(var Ne=X.variables().filter(function(br){return e(Pe,br)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var Gt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,bt=w.session.limit,an=w.session.format_success;w.session.format_success=function(br){return br.substitution},w.add_goal(Gt,!0,P);var Qr=[],mr=function(br){if(br!==!1&&br!==null&&!b.type.is_error(br)){w.__calls.unshift(mr);var Wr=!1,Kn=br.links[ie.id].args[0],Ns=br.links[ie.id].args[1];for(var Ti in Qr)if(!!Qr.hasOwnProperty(Ti)){var ps=Qr[Ti];if(ps.variables.equals(Kn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Kn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=bt,w.session.format_success=an,b.type.is_error(br))w.throw_error(br.args[0]);else if(w.current_limit>0){for(var io=[],Pi=0;Pi=0;so--)Ls=new H(".",[br[so],Ls]);io.push(new xe(P.goal.replace(new H(",",[new H("=",[ot,Qr[Pi].variables]),new H("=",[Z,Ls])])),P.substitution,P))}w.prepend(io)}};w.__calls.unshift(mr)}},"functor/3":function(w,P,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(b.type.is_variable(z)&&(b.type.is_variable(X)||b.type.is_variable(Z)))w.throw_error(b.error.instantiation("functor/3"));else if(!b.type.is_variable(Z)&&!b.type.is_integer(Z))w.throw_error(b.error.type("integer",y.args[2],"functor/3"));else if(!b.type.is_variable(X)&&!b.type.is_atomic(X))w.throw_error(b.error.type("atomic",y.args[1],"functor/3"));else if(b.type.is_integer(X)&&b.type.is_integer(Z)&&Z.value!==0)w.throw_error(b.error.type("atom",y.args[1],"functor/3"));else if(b.type.is_variable(z)){if(y.args[2].value>=0){for(var ie=[],Pe=0;Pe0&&F<=y.args[1].args.length){var z=new H("=",[y.args[1].args[F-1],y.args[2]]);w.prepend([new xe(P.goal.replace(z),P.substitution,P)])}}},"=../2":function(w,P,y){var F;if(b.type.is_variable(y.args[0])&&(b.type.is_variable(y.args[1])||b.type.is_non_empty_list(y.args[1])&&b.type.is_variable(y.args[1].args[0])))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_fully_list(y.args[1]))w.throw_error(b.error.type("list",y.args[1],y.indicator));else if(b.type.is_variable(y.args[0])){if(!b.type.is_variable(y.args[1])){var X=[];for(F=y.args[1].args[1];F.indicator==="./2";)X.push(F.args[0]),F=F.args[1];b.type.is_variable(y.args[0])&&b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):X.length===0&&b.type.is_compound(y.args[1].args[0])?w.throw_error(b.error.type("atomic",y.args[1].args[0],y.indicator)):X.length>0&&(b.type.is_compound(y.args[1].args[0])||b.type.is_number(y.args[1].args[0]))?w.throw_error(b.error.type("atom",y.args[1].args[0],y.indicator)):X.length===0?w.prepend([new xe(P.goal.replace(new H("=",[y.args[1].args[0],y.args[0]],P)),P.substitution,P)]):w.prepend([new xe(P.goal.replace(new H("=",[new H(y.args[1].args[0].id,X),y.args[0]])),P.substitution,P)])}}else{if(b.type.is_atomic(y.args[0]))F=new H(".",[y.args[0],new H("[]")]);else{F=new H("[]");for(var z=y.args[0].args.length-1;z>=0;z--)F=new H(".",[y.args[0].args[z],F]);F=new H(".",[new H(y.args[0].id),F])}w.prepend([new xe(P.goal.replace(new H("=",[F,y.args[1]])),P.substitution,P)])}},"copy_term/2":function(w,P,y){var F=y.args[0].rename(w);w.prepend([new xe(P.goal.replace(new H("=",[F,y.args[1]])),P.substitution,P.parent)])},"term_variables/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(!b.type.is_fully_list(z))w.throw_error(b.error.type("list",z,y.indicator));else{var X=g(o(Se(F.variables()),function(Z){return new Ie(Z)}));w.prepend([new xe(P.goal.replace(new H("=",[z,X])),P.substitution,P)])}},"clause/2":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else if(!b.type.is_variable(y.args[1])&&!b.type.is_callable(y.args[1]))w.throw_error(b.error.type("callable",y.args[1],y.indicator));else if(w.session.rules[y.args[0].indicator]!==void 0)if(w.is_public_predicate(y.args[0].indicator)){var F=[];for(var z in w.session.rules[y.args[0].indicator])if(!!w.session.rules[y.args[0].indicator].hasOwnProperty(z)){var X=w.session.rules[y.args[0].indicator][z];w.session.renamed_variables={},X=X.rename(w),X.body===null&&(X.body=new H("true"));var Z=new H(",",[new H("=",[X.head,y.args[0]]),new H("=",[X.body,y.args[1]])]);F.push(new xe(P.goal.replace(Z),P.substitution,P))}w.prepend(F)}else w.throw_error(b.error.permission("access","private_procedure",y.args[0].indicator,y.indicator))},"current_predicate/1":function(w,P,y){var F=y.args[0];if(!b.type.is_variable(F)&&(!b.type.is_compound(F)||F.indicator!=="//2"))w.throw_error(b.error.type("predicate_indicator",F,y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_variable(F.args[0])&&!b.type.is_atom(F.args[0]))w.throw_error(b.error.type("atom",F.args[0],y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_variable(F.args[1])&&!b.type.is_integer(F.args[1]))w.throw_error(b.error.type("integer",F.args[1],y.indicator));else{var z=[];for(var X in w.session.rules)if(!!w.session.rules.hasOwnProperty(X)){var Z=X.lastIndexOf("/"),ie=X.substr(0,Z),Pe=parseInt(X.substr(Z+1,X.length-(Z+1))),Ne=new H("/",[new H(ie),new Fe(Pe,!1)]),ot=new H("=",[Ne,F]);z.push(new xe(P.goal.replace(ot),P.substitution,P))}w.prepend(z)}},"asserta/1":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=we(y.args[0].args[1])):(F=y.args[0],z=null),b.type.is_callable(F)?z!==null&&!b.type.is_callable(z)?w.throw_error(b.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator]=[new He(F,z,!0)].concat(w.session.rules[F.indicator]),w.success(P)):w.throw_error(b.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(b.error.type("callable",F,y.indicator))}},"assertz/1":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=we(y.args[0].args[1])):(F=y.args[0],z=null),b.type.is_callable(F)?z!==null&&!b.type.is_callable(z)?w.throw_error(b.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator].push(new He(F,z,!0)),w.success(P)):w.throw_error(b.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(b.error.type("callable",F,y.indicator))}},"retract/1":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_callable(y.args[0]))w.throw_error(b.error.type("callable",y.args[0],y.indicator));else{var F,z;if(y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=y.args[0].args[1]):(F=y.args[0],z=new H("true")),typeof P.retract>"u")if(w.is_public_predicate(F.indicator)){if(w.session.rules[F.indicator]!==void 0){for(var X=[],Z=0;Zw.get_flag("max_arity").value)w.throw_error(b.error.representation("max_arity",y.indicator));else{var F=y.args[0].args[0].id+"/"+y.args[0].args[1].value;w.is_public_predicate(F)?(delete w.session.rules[F],w.success(P)):w.throw_error(b.error.permission("modify","static_procedure",F,y.indicator))}},"atom_length/2":function(w,P,y){if(b.type.is_variable(y.args[0]))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_atom(y.args[0]))w.throw_error(b.error.type("atom",y.args[0],y.indicator));else if(!b.type.is_variable(y.args[1])&&!b.type.is_integer(y.args[1]))w.throw_error(b.error.type("integer",y.args[1],y.indicator));else if(b.type.is_integer(y.args[1])&&y.args[1].value<0)w.throw_error(b.error.domain("not_less_than_zero",y.args[1],y.indicator));else{var F=new Fe(y.args[0].id.length,!1);w.prepend([new xe(P.goal.replace(new H("=",[F,y.args[1]])),P.substitution,P)])}},"atom_concat/3":function(w,P,y){var F,z,X=y.args[0],Z=y.args[1],ie=y.args[2];if(b.type.is_variable(ie)&&(b.type.is_variable(X)||b.type.is_variable(Z)))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_atom(X))w.throw_error(b.error.type("atom",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_atom(Z))w.throw_error(b.error.type("atom",Z,y.indicator));else if(!b.type.is_variable(ie)&&!b.type.is_atom(ie))w.throw_error(b.error.type("atom",ie,y.indicator));else{var Pe=b.type.is_variable(X),Ne=b.type.is_variable(Z);if(!Pe&&!Ne)z=new H("=",[ie,new H(X.id+Z.id)]),w.prepend([new xe(P.goal.replace(z),P.substitution,P)]);else if(Pe&&!Ne)F=ie.id.substr(0,ie.id.length-Z.id.length),F+Z.id===ie.id&&(z=new H("=",[X,new H(F)]),w.prepend([new xe(P.goal.replace(z),P.substitution,P)]));else if(Ne&&!Pe)F=ie.id.substr(X.id.length),X.id+F===ie.id&&(z=new H("=",[Z,new H(F)]),w.prepend([new xe(P.goal.replace(z),P.substitution,P)]));else{for(var ot=[],dt=0;dt<=ie.id.length;dt++){var Gt=new H(ie.id.substr(0,dt)),$t=new H(ie.id.substr(dt));z=new H(",",[new H("=",[Gt,X]),new H("=",[$t,Z])]),ot.push(new xe(P.goal.replace(z),P.substitution,P))}w.prepend(ot)}}},"sub_atom/5":function(w,P,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2],ie=y.args[3],Pe=y.args[4];if(b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_integer(X))w.throw_error(b.error.type("integer",X,y.indicator));else if(!b.type.is_variable(Z)&&!b.type.is_integer(Z))w.throw_error(b.error.type("integer",Z,y.indicator));else if(!b.type.is_variable(ie)&&!b.type.is_integer(ie))w.throw_error(b.error.type("integer",ie,y.indicator));else if(b.type.is_integer(X)&&X.value<0)w.throw_error(b.error.domain("not_less_than_zero",X,y.indicator));else if(b.type.is_integer(Z)&&Z.value<0)w.throw_error(b.error.domain("not_less_than_zero",Z,y.indicator));else if(b.type.is_integer(ie)&&ie.value<0)w.throw_error(b.error.domain("not_less_than_zero",ie,y.indicator));else{var Ne=[],ot=[],dt=[];if(b.type.is_variable(X))for(F=0;F<=z.id.length;F++)Ne.push(F);else Ne.push(X.value);if(b.type.is_variable(Z))for(F=0;F<=z.id.length;F++)ot.push(F);else ot.push(Z.value);if(b.type.is_variable(ie))for(F=0;F<=z.id.length;F++)dt.push(F);else dt.push(ie.value);var Gt=[];for(var $t in Ne)if(!!Ne.hasOwnProperty($t)){F=Ne[$t];for(var bt in ot)if(!!ot.hasOwnProperty(bt)){var an=ot[bt],Qr=z.id.length-F-an;if(e(dt,Qr)!==-1&&F+an+Qr===z.id.length){var mr=z.id.substr(F,an);if(z.id===z.id.substr(0,F)+mr+z.id.substr(F+an,Qr)){var br=new H("=",[new H(mr),Pe]),Wr=new H("=",[X,new Fe(F)]),Kn=new H("=",[Z,new Fe(an)]),Ns=new H("=",[ie,new Fe(Qr)]),Ti=new H(",",[new H(",",[new H(",",[Wr,Kn]),Ns]),br]);Gt.push(new xe(P.goal.replace(Ti),P.substitution,P))}}}}w.prepend(Gt)}},"atom_chars/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(b.type.is_variable(F)&&b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(b.type.is_variable(F)){for(var ie=z,Pe=b.type.is_variable(F),Ne="";ie.indicator==="./2";){if(b.type.is_character(ie.args[0]))Ne+=ie.args[0].id;else if(b.type.is_variable(ie.args[0])&&Pe){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}b.type.is_variable(ie)&&Pe?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)?w.throw_error(b.error.type("list",z,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[new H(Ne),F])),P.substitution,P)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new H(F.id.charAt(Z)),X]);w.prepend([new xe(P.goal.replace(new H("=",[z,X])),P.substitution,P)])}},"atom_codes/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(b.type.is_variable(F)&&b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(b.type.is_variable(F)){for(var ie=z,Pe=b.type.is_variable(F),Ne="";ie.indicator==="./2";){if(b.type.is_character_code(ie.args[0]))Ne+=u(ie.args[0].value);else if(b.type.is_variable(ie.args[0])&&Pe){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.representation("character_code",y.indicator));return}ie=ie.args[1]}b.type.is_variable(ie)&&Pe?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)?w.throw_error(b.error.type("list",z,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[new H(Ne),F])),P.substitution,P)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new Fe(n(F.id,Z),!1),X]);w.prepend([new xe(P.goal.replace(new H("=",[z,X])),P.substitution,P)])}},"char_code/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(b.type.is_variable(F)&&b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_character(F))w.throw_error(b.error.type("character",F,y.indicator));else if(!b.type.is_variable(z)&&!b.type.is_integer(z))w.throw_error(b.error.type("integer",z,y.indicator));else if(!b.type.is_variable(z)&&!b.type.is_character_code(z))w.throw_error(b.error.representation("character_code",y.indicator));else if(b.type.is_variable(z)){var X=new Fe(n(F.id,0),!1);w.prepend([new xe(P.goal.replace(new H("=",[X,z])),P.substitution,P)])}else{var Z=new H(u(z.value));w.prepend([new xe(P.goal.replace(new H("=",[Z,F])),P.substitution,P)])}},"number_chars/2":function(w,P,y){var F,z=y.args[0],X=y.args[1];if(b.type.is_variable(z)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(z)&&!b.type.is_number(z))w.throw_error(b.error.type("number",z,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=b.type.is_variable(z);if(!b.type.is_variable(X)){var ie=X,Pe=!0;for(F="";ie.indicator==="./2";){if(b.type.is_character(ie.args[0]))F+=ie.args[0].id;else if(b.type.is_variable(ie.args[0]))Pe=!1;else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Pe=Pe&&b.type.is_empty_list(ie),!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)){w.throw_error(b.error.type("list",X,y.indicator));return}if(!Pe&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else if(Pe)if(b.type.is_variable(ie)&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!b.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(b.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[z,ot])),P.substitution,P)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),Gt=F.length-1;Gt>=0;Gt--)dt=new H(".",[new H(F.charAt(Gt)),dt]);w.prepend([new xe(P.goal.replace(new H("=",[X,dt])),P.substitution,P)])}}},"number_codes/2":function(w,P,y){var F,z=y.args[0],X=y.args[1];if(b.type.is_variable(z)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(z)&&!b.type.is_number(z))w.throw_error(b.error.type("number",z,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else{var Z=b.type.is_variable(z);if(!b.type.is_variable(X)){var ie=X,Pe=!0;for(F="";ie.indicator==="./2";){if(b.type.is_character_code(ie.args[0]))F+=u(ie.args[0].value);else if(b.type.is_variable(ie.args[0]))Pe=!1;else if(!b.type.is_variable(ie.args[0])){w.throw_error(b.error.type("character_code",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Pe=Pe&&b.type.is_empty_list(ie),!b.type.is_empty_list(ie)&&!b.type.is_variable(ie)){w.throw_error(b.error.type("list",X,y.indicator));return}if(!Pe&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else if(Pe)if(b.type.is_variable(ie)&&Z){w.throw_error(b.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!b.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(b.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[z,ot])),P.substitution,P)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),Gt=F.length-1;Gt>=0;Gt--)dt=new H(".",[new Fe(n(F,Gt),!1),dt]);w.prepend([new xe(P.goal.replace(new H("=",[X,dt])),P.substitution,P)])}}},"upcase_atom/2":function(w,P,y){var F=y.args[0],z=y.args[1];b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(F)?!b.type.is_variable(z)&&!b.type.is_atom(z)?w.throw_error(b.error.type("atom",z,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[z,new H(F.id.toUpperCase(),[])])),P.substitution,P)]):w.throw_error(b.error.type("atom",F,y.indicator))},"downcase_atom/2":function(w,P,y){var F=y.args[0],z=y.args[1];b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(F)?!b.type.is_variable(z)&&!b.type.is_atom(z)?w.throw_error(b.error.type("atom",z,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[z,new H(F.id.toLowerCase(),[])])),P.substitution,P)]):w.throw_error(b.error.type("atom",F,y.indicator))},"atomic_list_concat/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("atomic_list_concat",[F,new H("",[]),z])),P.substitution,P)])},"atomic_list_concat/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(b.type.is_variable(z)||b.type.is_variable(F)&&b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_list(F))w.throw_error(b.error.type("list",F,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_atom(X))w.throw_error(b.error.type("atom",X,y.indicator));else if(b.type.is_variable(X)){for(var ie="",Pe=F;b.type.is_term(Pe)&&Pe.indicator==="./2";){if(!b.type.is_atom(Pe.args[0])&&!b.type.is_number(Pe.args[0])){w.throw_error(b.error.type("atomic",Pe.args[0],y.indicator));return}ie!==""&&(ie+=z.id),b.type.is_atom(Pe.args[0])?ie+=Pe.args[0].id:ie+=""+Pe.args[0].value,Pe=Pe.args[1]}ie=new H(ie,[]),b.type.is_variable(Pe)?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_term(Pe)||Pe.indicator!=="[]/0"?w.throw_error(b.error.type("list",F,y.indicator)):w.prepend([new xe(P.goal.replace(new H("=",[ie,X])),P.substitution,P)])}else{var Z=g(o(X.id.split(z.id),function(Ne){return new H(Ne,[])}));w.prepend([new xe(P.goal.replace(new H("=",[Z,F])),P.substitution,P)])}},"@=/2":function(w,P,y){b.compare(y.args[0],y.args[1])>0&&w.success(P)},"@>=/2":function(w,P,y){b.compare(y.args[0],y.args[1])>=0&&w.success(P)},"compare/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(b.type.is_atom(F)&&["<",">","="].indexOf(F.id)===-1)w.throw_error(b.type.domain("order",F,y.indicator));else{var Z=b.compare(z,X);Z=Z===0?"=":Z===-1?"<":">",w.prepend([new xe(P.goal.replace(new H("=",[F,new H(Z,[])])),P.substitution,P)])}},"is/2":function(w,P,y){var F=y.args[1].interpret(w);b.type.is_number(F)?w.prepend([new xe(P.goal.replace(new H("=",[y.args[0],F],w.level)),P.substitution,P)]):w.throw_error(F)},"between/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(b.type.is_variable(F)||b.type.is_variable(z))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_integer(F))w.throw_error(b.error.type("integer",F,y.indicator));else if(!b.type.is_integer(z))w.throw_error(b.error.type("integer",z,y.indicator));else if(!b.type.is_variable(X)&&!b.type.is_integer(X))w.throw_error(b.error.type("integer",X,y.indicator));else if(b.type.is_variable(X)){var Z=[new xe(P.goal.replace(new H("=",[X,F])),P.substitution,P)];F.value=X.value&&w.success(P)},"succ/2":function(w,P,y){var F=y.args[0],z=y.args[1];b.type.is_variable(F)&&b.type.is_variable(z)?w.throw_error(b.error.instantiation(y.indicator)):!b.type.is_variable(F)&&!b.type.is_integer(F)?w.throw_error(b.error.type("integer",F,y.indicator)):!b.type.is_variable(z)&&!b.type.is_integer(z)?w.throw_error(b.error.type("integer",z,y.indicator)):!b.type.is_variable(F)&&F.value<0?w.throw_error(b.error.domain("not_less_than_zero",F,y.indicator)):!b.type.is_variable(z)&&z.value<0?w.throw_error(b.error.domain("not_less_than_zero",z,y.indicator)):(b.type.is_variable(z)||z.value>0)&&(b.type.is_variable(F)?w.prepend([new xe(P.goal.replace(new H("=",[F,new Fe(z.value-1,!1)])),P.substitution,P)]):w.prepend([new xe(P.goal.replace(new H("=",[z,new Fe(F.value+1,!1)])),P.substitution,P)]))},"=:=/2":function(w,P,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F===0&&w.success(P)},"=\\=/2":function(w,P,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F!==0&&w.success(P)},"/2":function(w,P,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F>0&&w.success(P)},">=/2":function(w,P,y){var F=b.arithmetic_compare(w,y.args[0],y.args[1]);b.type.is_term(F)?w.throw_error(F):F>=0&&w.success(P)},"var/1":function(w,P,y){b.type.is_variable(y.args[0])&&w.success(P)},"atom/1":function(w,P,y){b.type.is_atom(y.args[0])&&w.success(P)},"atomic/1":function(w,P,y){b.type.is_atomic(y.args[0])&&w.success(P)},"compound/1":function(w,P,y){b.type.is_compound(y.args[0])&&w.success(P)},"integer/1":function(w,P,y){b.type.is_integer(y.args[0])&&w.success(P)},"float/1":function(w,P,y){b.type.is_float(y.args[0])&&w.success(P)},"number/1":function(w,P,y){b.type.is_number(y.args[0])&&w.success(P)},"nonvar/1":function(w,P,y){b.type.is_variable(y.args[0])||w.success(P)},"ground/1":function(w,P,y){y.variables().length===0&&w.success(P)},"acyclic_term/1":function(w,P,y){for(var F=P.substitution.apply(P.substitution),z=y.args[0].variables(),X=0;X0?bt[bt.length-1]:null,bt!==null&&(Gt=J(w,bt,0,w.__get_max_priority(),!1))}if(Gt.type===p&&Gt.len===bt.length-1&&an.value==="."){Gt=Gt.value.rename(w);var Qr=new H("=",[z,Gt]);if(ie.variables){var mr=g(o(Se(Gt.variables()),function(br){return new Ie(br)}));Qr=new H(",",[Qr,new H("=",[ie.variables,mr])])}if(ie.variable_names){var mr=g(o(Se(Gt.variables()),function(Wr){var Kn;for(Kn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Kn)&&w.session.renamed_variables[Kn]===Wr)break;return new H("=",[new H(Kn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.variable_names,mr])])}if(ie.singletons){var mr=g(o(new He(Gt,null).singleton_variables(),function(Wr){var Kn;for(Kn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Kn)&&w.session.renamed_variables[Kn]===Wr)break;return new H("=",[new H(Kn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.singletons,mr])])}w.prepend([new xe(P.goal.replace(Qr),P.substitution,P)])}else Gt.type===p?w.throw_error(b.error.syntax(bt[Gt.len],"unexpected token",!1)):w.throw_error(Gt.value)}}},"write/1":function(w,P,y){var F=y.args[0];w.prepend([new xe(P.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write",[new Ie("S"),F])])),P.substitution,P)])},"write/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("false",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),P.substitution,P)])},"writeq/1":function(w,P,y){var F=y.args[0];w.prepend([new xe(P.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("writeq",[new Ie("S"),F])])),P.substitution,P)])},"writeq/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),P.substitution,P)])},"write_canonical/1":function(w,P,y){var F=y.args[0];w.prepend([new xe(P.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_canonical",[new Ie("S"),F])])),P.substitution,P)])},"write_canonical/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("true")]),new H(".",[new H("numbervars",[new H("false")]),new H("[]",[])])])])])),P.substitution,P)])},"write_term/2":function(w,P,y){var F=y.args[0],z=y.args[1];w.prepend([new xe(P.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_term",[new Ie("S"),F,z])])),P.substitution,P)])},"write_term/3":function(w,P,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=b.type.is_stream(F)?F:w.get_stream_by_alias(F.id);if(b.type.is_variable(F)||b.type.is_variable(X))w.throw_error(b.error.instantiation(y.indicator));else if(!b.type.is_list(X))w.throw_error(b.error.type("list",X,y.indicator));else if(!b.type.is_stream(F)&&!b.type.is_atom(F))w.throw_error(b.error.domain("stream_or_alias",F,y.indicator));else if(!b.type.is_stream(Z)||Z.stream===null)w.throw_error(b.error.existence("stream",F,y.indicator));else if(Z.input)w.throw_error(b.error.permission("output","stream",F,y.indicator));else if(Z.type==="binary")w.throw_error(b.error.permission("output","binary_stream",F,y.indicator));else if(Z.position==="past_end_of_stream"&&Z.eof_action==="error")w.throw_error(b.error.permission("output","past_end_of_stream",F,y.indicator));else{for(var ie={},Pe=X,Ne;b.type.is_term(Pe)&&Pe.indicator==="./2";){if(Ne=Pe.args[0],b.type.is_variable(Ne)){w.throw_error(b.error.instantiation(y.indicator));return}else if(!b.type.is_write_option(Ne)){w.throw_error(b.error.domain("write_option",Ne,y.indicator));return}ie[Ne.id]=Ne.args[0].id==="true",Pe=Pe.args[1]}if(Pe.indicator!=="[]/0"){b.type.is_variable(Pe)?w.throw_error(b.error.instantiation(y.indicator)):w.throw_error(b.error.type("list",X,y.indicator));return}else{ie.session=w.session;var ot=z.toString(ie);Z.stream.put(ot,Z.position),typeof Z.position=="number"&&(Z.position+=ot.length),w.success(P)}}},"halt/0":function(w,P,y){w.points=[]},"halt/1":function(w,P,y){var F=y.args[0];b.type.is_variable(F)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_integer(F)?w.points=[]:w.throw_error(b.error.type("integer",F,y.indicator))},"current_prolog_flag/2":function(w,P,y){var F=y.args[0],z=y.args[1];if(!b.type.is_variable(F)&&!b.type.is_atom(F))w.throw_error(b.error.type("atom",F,y.indicator));else if(!b.type.is_variable(F)&&!b.type.is_flag(F))w.throw_error(b.error.domain("prolog_flag",F,y.indicator));else{var X=[];for(var Z in b.flag)if(!!b.flag.hasOwnProperty(Z)){var ie=new H(",",[new H("=",[new H(Z),F]),new H("=",[w.get_flag(Z),z])]);X.push(new xe(P.goal.replace(ie),P.substitution,P))}w.prepend(X)}},"set_prolog_flag/2":function(w,P,y){var F=y.args[0],z=y.args[1];b.type.is_variable(F)||b.type.is_variable(z)?w.throw_error(b.error.instantiation(y.indicator)):b.type.is_atom(F)?b.type.is_flag(F)?b.type.is_value_flag(F,z)?b.type.is_modifiable_flag(F)?(w.session.flag[F.id]=z,w.success(P)):w.throw_error(b.error.permission("modify","flag",F)):w.throw_error(b.error.domain("flag_value",new H("+",[F,z]),y.indicator)):w.throw_error(b.error.domain("prolog_flag",F,y.indicator)):w.throw_error(b.error.type("atom",F,y.indicator))}},flag:{bounded:{allowed:[new H("true"),new H("false")],value:new H("true"),changeable:!1},max_integer:{allowed:[new Fe(Number.MAX_SAFE_INTEGER)],value:new Fe(Number.MAX_SAFE_INTEGER),changeable:!1},min_integer:{allowed:[new Fe(Number.MIN_SAFE_INTEGER)],value:new Fe(Number.MIN_SAFE_INTEGER),changeable:!1},integer_rounding_function:{allowed:[new H("down"),new H("toward_zero")],value:new H("toward_zero"),changeable:!1},char_conversion:{allowed:[new H("on"),new H("off")],value:new H("on"),changeable:!0},debug:{allowed:[new H("on"),new H("off")],value:new H("off"),changeable:!0},max_arity:{allowed:[new H("unbounded")],value:new H("unbounded"),changeable:!1},unknown:{allowed:[new H("error"),new H("fail"),new H("warning")],value:new H("error"),changeable:!0},double_quotes:{allowed:[new H("chars"),new H("codes"),new H("atom")],value:new H("codes"),changeable:!0},occurs_check:{allowed:[new H("false"),new H("true")],value:new H("false"),changeable:!0},dialect:{allowed:[new H("tau")],value:new H("tau"),changeable:!1},version_data:{allowed:[new H("tau",[new Fe(t.major,!1),new Fe(t.minor,!1),new Fe(t.patch,!1),new H(t.status)])],value:new H("tau",[new Fe(t.major,!1),new Fe(t.minor,!1),new Fe(t.patch,!1),new H(t.status)]),changeable:!1},nodejs:{allowed:[new H("yes"),new H("no")],value:new H(typeof hl<"u"&&hl.exports?"yes":"no"),changeable:!1}},unify:function(w,P,y){y=y===void 0?!1:y;for(var F=[{left:w,right:P}],z={};F.length!==0;){var X=F.pop();if(w=X.left,P=X.right,b.type.is_term(w)&&b.type.is_term(P)){if(w.indicator!==P.indicator)return null;for(var Z=0;Zz.value?1:0:z}else return F},operate:function(w,P){if(b.type.is_operator(P)){for(var y=b.type.is_operator(P),F=[],z,X=!1,Z=0;Zw.get_flag("max_integer").value||z0?w.start+w.matches[0].length:w.start,z=y?new H("token_not_found"):new H("found",[new H(w.value.toString())]),X=new H(".",[new H("line",[new Fe(w.line+1)]),new H(".",[new H("column",[new Fe(F+1)]),new H(".",[z,new H("[]",[])])])]);return new H("error",[new H("syntax_error",[new H(P)]),X])},syntax_by_predicate:function(w,P){return new H("error",[new H("syntax_error",[new H(w)]),ee(P)])}},warning:{singleton:function(w,P,y){for(var F=new H("[]"),z=w.length-1;z>=0;z--)F=new H(".",[new Ie(w[z]),F]);return new H("warning",[new H("singleton_variables",[F,ee(P)]),new H(".",[new H("line",[new Fe(y,!1)]),new H("[]")])])},failed_goal:function(w,P){return new H("warning",[new H("failed_goal",[w]),new H(".",[new H("line",[new Fe(P,!1)]),new H("[]")])])}},format_variable:function(w){return"_"+w},format_answer:function(w,P,F){P instanceof Te&&(P=P.thread);var F=F||{};if(F.session=P?P.session:void 0,b.type.is_error(w))return"uncaught exception: "+w.args[0].toString();if(w===!1)return"false.";if(w===null)return"limit exceeded ;";var z=0,X="";if(b.type.is_substitution(w)){var Z=w.domain(!0);w=w.filter(function(Ne,ot){return!b.type.is_variable(ot)||Z.indexOf(ot.id)!==-1&&Ne!==ot.id})}for(var ie in w.links)!w.links.hasOwnProperty(ie)||(z++,X!==""&&(X+=", "),X+=ie.toString(F)+" = "+w.links[ie].toString(F));var Pe=typeof P>"u"||P.points.length>0?" ;":".";return z===0?"true"+Pe:X+Pe},flatten_error:function(w){if(!b.type.is_error(w))return null;w=w.args[0];var P={};return P.type=w.args[0].id,P.thrown=P.type==="syntax_error"?null:w.args[1].id,P.expected=null,P.found=null,P.representation=null,P.existence=null,P.existence_type=null,P.line=null,P.column=null,P.permission_operation=null,P.permission_type=null,P.evaluation_type=null,P.type==="type_error"||P.type==="domain_error"?(P.expected=w.args[0].args[0].id,P.found=w.args[0].args[1].toString()):P.type==="syntax_error"?w.args[1].indicator==="./2"?(P.expected=w.args[0].args[0].id,P.found=w.args[1].args[1].args[1].args[0],P.found=P.found.id==="token_not_found"?P.found.id:P.found.args[0].id,P.line=w.args[1].args[0].args[0].value,P.column=w.args[1].args[1].args[0].args[0].value):P.thrown=w.args[1].id:P.type==="permission_error"?(P.found=w.args[0].args[2].toString(),P.permission_operation=w.args[0].args[0].id,P.permission_type=w.args[0].args[1].id):P.type==="evaluation_error"?P.evaluation_type=w.args[0].args[0].id:P.type==="representation_error"?P.representation=w.args[0].args[0].id:P.type==="existence_error"&&(P.existence=w.args[0].args[1].toString(),P.existence_type=w.args[0].args[0].id),P},create:function(w){return new b.type.Session(w)}};typeof hl<"u"?hl.exports=b:window.pl=b})()});function ime(t,e,r){t.prepend(r.map(o=>new Ta.default.type.State(e.goal.replace(o),e.substitution,e)))}function yH(t){let e=ome.get(t.session);if(e==null)throw new Error("Assertion failed: A project should have been registered for the active session");return e}function ame(t,e){ome.set(t,e),t.consult(`:- use_module(library(${zgt.id})).`)}var EH,Ta,sme,u0,Vgt,Jgt,ome,zgt,lme=Et(()=>{Ye();EH=$e(d2()),Ta=$e(mH()),sme=$e(ve("vm")),{is_atom:u0,is_variable:Vgt,is_instantiated_list:Jgt}=Ta.default.type;ome=new WeakMap;zgt=new Ta.default.type.Module("constraints",{["project_workspaces_by_descriptor/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!u0(o)||!u0(a)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let u=W.parseIdent(o.id),A=W.makeDescriptor(u,a.id),h=yH(t).tryWorkspaceByDescriptor(A);Vgt(n)&&h!==null&&ime(t,e,[new Ta.default.type.Term("=",[n,new Ta.default.type.Term(String(h.relativeCwd))])]),u0(n)&&h!==null&&h.relativeCwd===n.id&&t.success(e)},["workspace_field/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!u0(o)||!u0(a)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let A=yH(t).tryWorkspaceByCwd(o.id);if(A==null)return;let p=(0,EH.default)(A.manifest.raw,a.id);typeof p>"u"||ime(t,e,[new Ta.default.type.Term("=",[n,new Ta.default.type.Term(typeof p=="object"?JSON.stringify(p):p)])])},["workspace_field_test/3"]:(t,e,r)=>{let[o,a,n]=r.args;t.prepend([new Ta.default.type.State(e.goal.replace(new Ta.default.type.Term("workspace_field_test",[o,a,n,new Ta.default.type.Term("[]",[])])),e.substitution,e)])},["workspace_field_test/4"]:(t,e,r)=>{let[o,a,n,u]=r.args;if(!u0(o)||!u0(a)||!u0(n)||!Jgt(u)){t.throw_error(Ta.default.error.instantiation(r.indicator));return}let p=yH(t).tryWorkspaceByCwd(o.id);if(p==null)return;let h=(0,EH.default)(p.manifest.raw,a.id);if(typeof h>"u")return;let E={$$:h};for(let[v,x]of u.toJavaScript().entries())E[`$${v}`]=x;sme.default.runInNewContext(n.id,E)&&t.success(e)}},["project_workspaces_by_descriptor/3","workspace_field/3","workspace_field_test/3","workspace_field_test/4"])});var b2={};Vt(b2,{Constraints:()=>P2,DependencyType:()=>fme});function to(t){if(t instanceof DC.default.type.Num)return t.value;if(t instanceof DC.default.type.Term)switch(t.indicator){case"throw/1":return to(t.args[0]);case"error/1":return to(t.args[0]);case"error/2":if(t.args[0]instanceof DC.default.type.Term&&t.args[0].indicator==="syntax_error/1")return Object.assign(to(t.args[0]),...to(t.args[1]));{let e=to(t.args[0]);return e.message+=` (in ${to(t.args[1])})`,e}case"syntax_error/1":return new zt(43,`Syntax error: ${to(t.args[0])}`);case"existence_error/2":return new zt(44,`Existence error: ${to(t.args[0])} ${to(t.args[1])} not found`);case"instantiation_error/0":return new zt(75,"Instantiation error: an argument is variable when an instantiated argument was expected");case"line/1":return{line:to(t.args[0])};case"column/1":return{column:to(t.args[0])};case"found/1":return{found:to(t.args[0])};case"./2":return[to(t.args[0])].concat(to(t.args[1]));case"//2":return`${to(t.args[0])}/${to(t.args[1])}`;default:return t.id}throw`couldn't pretty print because of unsupported node ${t}`}function ume(t){let e;try{e=to(t)}catch(r){throw typeof r=="string"?new zt(42,`Unknown error: ${t} (note: ${r})`):r}return typeof e.line<"u"&&typeof e.column<"u"&&(e.message+=` at line ${e.line}, column ${e.column}`),e}function em(t){return t.id==="null"?null:`${t.toJavaScript()}`}function Xgt(t){if(t.id==="null")return null;{let e=t.toJavaScript();if(typeof e!="string")return JSON.stringify(e);try{return JSON.stringify(JSON.parse(e))}catch{return JSON.stringify(e)}}}function A0(t){return typeof t=="string"?`'${t}'`:"[]"}var Ame,DC,fme,cme,CH,P2,x2=Et(()=>{Ye();Ye();St();Ame=$e(jde()),DC=$e(mH());v2();lme();(0,Ame.default)(DC.default);fme=(o=>(o.Dependencies="dependencies",o.DevDependencies="devDependencies",o.PeerDependencies="peerDependencies",o))(fme||{}),cme=["dependencies","devDependencies","peerDependencies"];CH=class{constructor(e,r){let o=1e3*e.workspaces.length;this.session=DC.default.create(o),ame(this.session,e),this.session.consult(":- use_module(library(lists))."),this.session.consult(r)}fetchNextAnswer(){return new Promise(e=>{this.session.answer(r=>{e(r)})})}async*makeQuery(e){let r=this.session.query(e);if(r!==!0)throw ume(r);for(;;){let o=await this.fetchNextAnswer();if(o===null)throw new zt(79,"Resolution limit exceeded");if(!o)break;if(o.id==="throw")throw ume(o);yield o}}};P2=class{constructor(e){this.source="";this.project=e;let r=e.configuration.get("constraintsPath");oe.existsSync(r)&&(this.source=oe.readFileSync(r,"utf8"))}static async find(e){return new P2(e)}getProjectDatabase(){let e="";for(let r of cme)e+=`dependency_type(${r}). +`;for(let r of this.project.workspacesByCwd.values()){let o=r.relativeCwd;e+=`workspace(${A0(o)}). +`,e+=`workspace_ident(${A0(o)}, ${A0(W.stringifyIdent(r.anchoredLocator))}). +`,e+=`workspace_version(${A0(o)}, ${A0(r.manifest.version)}). +`;for(let a of cme)for(let n of r.manifest[a].values())e+=`workspace_has_dependency(${A0(o)}, ${A0(W.stringifyIdent(n))}, ${A0(n.range)}, ${a}). +`}return e+=`workspace(_) :- false. +`,e+=`workspace_ident(_, _) :- false. +`,e+=`workspace_version(_, _) :- false. +`,e+=`workspace_has_dependency(_, _, _, _) :- false. +`,e}getDeclarations(){let e="";return e+=`gen_enforced_dependency(_, _, _, _) :- false. +`,e+=`gen_enforced_field(_, _, _) :- false. +`,e}get fullSource(){return`${this.getProjectDatabase()} +${this.source} +${this.getDeclarations()}`}createSession(){return new CH(this.project,this.fullSource)}async processClassic(){let e=this.createSession();return{enforcedDependencies:await this.genEnforcedDependencies(e),enforcedFields:await this.genEnforcedFields(e)}}async process(){let{enforcedDependencies:e,enforcedFields:r}=await this.processClassic(),o=new Map;for(let{workspace:a,dependencyIdent:n,dependencyRange:u,dependencyType:A}of e){let p=B2([A,W.stringifyIdent(n)]),h=_e.getMapWithDefault(o,a.cwd);_e.getMapWithDefault(h,p).set(u??void 0,new Set)}for(let{workspace:a,fieldPath:n,fieldValue:u}of r){let A=B2(n),p=_e.getMapWithDefault(o,a.cwd);_e.getMapWithDefault(p,A).set(JSON.parse(u)??void 0,new Set)}return{manifestUpdates:o,reportedErrors:new Map}}async genEnforcedDependencies(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), dependency_type(DependencyType), gen_enforced_dependency(WorkspaceCwd, DependencyIdent, DependencyRange, DependencyType).")){let a=V.resolve(this.project.cwd,em(o.links.WorkspaceCwd)),n=em(o.links.DependencyIdent),u=em(o.links.DependencyRange),A=em(o.links.DependencyType);if(a===null||n===null)throw new Error("Invalid rule");let p=this.project.getWorkspaceByCwd(a),h=W.parseIdent(n);r.push({workspace:p,dependencyIdent:h,dependencyRange:u,dependencyType:A})}return _e.sortMap(r,[({dependencyRange:o})=>o!==null?"0":"1",({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({dependencyIdent:o})=>W.stringifyIdent(o)])}async genEnforcedFields(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), gen_enforced_field(WorkspaceCwd, FieldPath, FieldValue).")){let a=V.resolve(this.project.cwd,em(o.links.WorkspaceCwd)),n=em(o.links.FieldPath),u=Xgt(o.links.FieldValue);if(a===null||n===null)throw new Error("Invalid rule");let A=this.project.getWorkspaceByCwd(a);r.push({workspace:A,fieldPath:n,fieldValue:u})}return _e.sortMap(r,[({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({fieldPath:o})=>o])}async*query(e){let r=this.createSession();for await(let o of r.makeQuery(e)){let a={};for(let[n,u]of Object.entries(o.links))n!=="_"&&(a[n]=em(u));yield a}}}});var wme=_(Ik=>{"use strict";Object.defineProperty(Ik,"__esModule",{value:!0});function q2(t){let e=[...t.caches],r=e.shift();return r===void 0?Cme():{get(o,a,n={miss:()=>Promise.resolve()}){return r.get(o,a,n).catch(()=>q2({caches:e}).get(o,a,n))},set(o,a){return r.set(o,a).catch(()=>q2({caches:e}).set(o,a))},delete(o){return r.delete(o).catch(()=>q2({caches:e}).delete(o))},clear(){return r.clear().catch(()=>q2({caches:e}).clear())}}}function Cme(){return{get(t,e,r={miss:()=>Promise.resolve()}){return e().then(a=>Promise.all([a,r.miss(a)])).then(([a])=>a)},set(t,e){return Promise.resolve(e)},delete(t){return Promise.resolve()},clear(){return Promise.resolve()}}}Ik.createFallbackableCache=q2;Ik.createNullCache=Cme});var Bme=_((QWt,Ime)=>{Ime.exports=wme()});var vme=_(TH=>{"use strict";Object.defineProperty(TH,"__esModule",{value:!0});function ddt(t={serializable:!0}){let e={};return{get(r,o,a={miss:()=>Promise.resolve()}){let n=JSON.stringify(r);if(n in e)return Promise.resolve(t.serializable?JSON.parse(e[n]):e[n]);let u=o(),A=a&&a.miss||(()=>Promise.resolve());return u.then(p=>A(p)).then(()=>u)},set(r,o){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete(r){return delete e[JSON.stringify(r)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}TH.createInMemoryCache=ddt});var Sme=_((RWt,Dme)=>{Dme.exports=vme()});var bme=_(Zc=>{"use strict";Object.defineProperty(Zc,"__esModule",{value:!0});function mdt(t,e,r){let o={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t===NH.WithinHeaders?o:{}},queryParameters(){return t===NH.WithinQueryParameters?o:{}}}}function ydt(t){let e=0,r=()=>(e++,new Promise(o=>{setTimeout(()=>{o(t(r))},Math.min(100*e,1e3))}));return t(r)}function Pme(t,e=(r,o)=>Promise.resolve()){return Object.assign(t,{wait(r){return Pme(t.then(o=>Promise.all([e(o,r),o])).then(o=>o[1]))}})}function Edt(t){let e=t.length-1;for(e;e>0;e--){let r=Math.floor(Math.random()*(e+1)),o=t[e];t[e]=t[r],t[r]=o}return t}function Cdt(t,e){return e&&Object.keys(e).forEach(r=>{t[r]=e[r](t)}),t}function wdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}var Idt="4.14.2",Bdt=t=>()=>t.transporter.requester.destroy(),NH={WithinQueryParameters:0,WithinHeaders:1};Zc.AuthMode=NH;Zc.addMethods=Cdt;Zc.createAuth=mdt;Zc.createRetryablePromise=ydt;Zc.createWaitablePromise=Pme;Zc.destroy=Bdt;Zc.encode=wdt;Zc.shuffle=Edt;Zc.version=Idt});var Y2=_((NWt,xme)=>{xme.exports=bme()});var kme=_(LH=>{"use strict";Object.defineProperty(LH,"__esModule",{value:!0});var vdt={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};LH.MethodEnum=vdt});var W2=_((OWt,Qme)=>{Qme.exports=kme()});var Wme=_(Fi=>{"use strict";Object.defineProperty(Fi,"__esModule",{value:!0});var Rme=W2();function OH(t,e){let r=t||{},o=r.data||{};return Object.keys(r).forEach(a=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(a)===-1&&(o[a]=r[a])}),{data:Object.entries(o).length>0?o:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var K2={Read:1,Write:2,Any:3},xC={Up:1,Down:2,Timeouted:3},Tme=2*60*1e3;function UH(t,e=xC.Up){return{...t,status:e,lastUpdate:Date.now()}}function Nme(t){return t.status===xC.Up||Date.now()-t.lastUpdate>Tme}function Lme(t){return t.status===xC.Timeouted&&Date.now()-t.lastUpdate<=Tme}function _H(t){return typeof t=="string"?{protocol:"https",url:t,accept:K2.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||K2.Any}}function Ddt(t,e){return Promise.all(e.map(r=>t.get(r,()=>Promise.resolve(UH(r))))).then(r=>{let o=r.filter(A=>Nme(A)),a=r.filter(A=>Lme(A)),n=[...o,...a],u=n.length>0?n.map(A=>_H(A)):e;return{getTimeout(A,p){return(a.length===0&&A===0?1:a.length+3+A)*p},statelessHosts:u}})}var Sdt=({isTimedOut:t,status:e})=>!t&&~~e===0,Pdt=t=>{let e=t.status;return t.isTimedOut||Sdt(t)||~~(e/100)!==2&&~~(e/100)!==4},bdt=({status:t})=>~~(t/100)===2,xdt=(t,e)=>Pdt(t)?e.onRetry(t):bdt(t)?e.onSuccess(t):e.onFail(t);function Fme(t,e,r,o){let a=[],n=Hme(r,o),u=jme(t,o),A=r.method,p=r.method!==Rme.MethodEnum.Get?{}:{...r.data,...o.data},h={"x-algolia-agent":t.userAgent.value,...t.queryParameters,...p,...o.queryParameters},E=0,I=(v,x)=>{let C=v.pop();if(C===void 0)throw Yme(MH(a));let R={data:n,headers:u,method:A,url:Ume(C,r.path,h),connectTimeout:x(E,t.timeouts.connect),responseTimeout:x(E,o.timeout)},L=J=>{let te={request:R,response:J,host:C,triesLeft:v.length};return a.push(te),te},U={onSuccess:J=>Ome(J),onRetry(J){let te=L(J);return J.isTimedOut&&E++,Promise.all([t.logger.info("Retryable failure",HH(te)),t.hostsCache.set(C,UH(C,J.isTimedOut?xC.Timeouted:xC.Down))]).then(()=>I(v,x))},onFail(J){throw L(J),Mme(J,MH(a))}};return t.requester.send(R).then(J=>xdt(J,U))};return Ddt(t.hostsCache,e).then(v=>I([...v.statelessHosts].reverse(),v.getTimeout))}function kdt(t){let{hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,hosts:p,queryParameters:h,headers:E}=t,I={hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,headers:E,queryParameters:h,hosts:p.map(v=>_H(v)),read(v,x){let C=OH(x,I.timeouts.read),R=()=>Fme(I,I.hosts.filter(J=>(J.accept&K2.Read)!==0),v,C);if((C.cacheable!==void 0?C.cacheable:v.cacheable)!==!0)return R();let U={request:v,mappedRequestOptions:C,transporter:{queryParameters:I.queryParameters,headers:I.headers}};return I.responsesCache.get(U,()=>I.requestsCache.get(U,()=>I.requestsCache.set(U,R()).then(J=>Promise.all([I.requestsCache.delete(U),J]),J=>Promise.all([I.requestsCache.delete(U),Promise.reject(J)])).then(([J,te])=>te)),{miss:J=>I.responsesCache.set(U,J)})},write(v,x){return Fme(I,I.hosts.filter(C=>(C.accept&K2.Write)!==0),v,OH(x,I.timeouts.write))}};return I}function Qdt(t){let e={value:`Algolia for JavaScript (${t})`,add(r){let o=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return e.value.indexOf(o)===-1&&(e.value=`${e.value}${o}`),e}};return e}function Ome(t){try{return JSON.parse(t.content)}catch(e){throw qme(e.message,t)}}function Mme({content:t,status:e},r){let o=t;try{o=JSON.parse(t).message}catch{}return Gme(o,e,r)}function Fdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}function Ume(t,e,r){let o=_me(r),a=`${t.protocol}://${t.url}/${e.charAt(0)==="/"?e.substr(1):e}`;return o.length&&(a+=`?${o}`),a}function _me(t){let e=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(t).map(r=>Fdt("%s=%s",r,e(t[r])?JSON.stringify(t[r]):t[r])).join("&")}function Hme(t,e){if(t.method===Rme.MethodEnum.Get||t.data===void 0&&e.data===void 0)return;let r=Array.isArray(t.data)?t.data:{...t.data,...e.data};return JSON.stringify(r)}function jme(t,e){let r={...t.headers,...e.headers},o={};return Object.keys(r).forEach(a=>{let n=r[a];o[a.toLowerCase()]=n}),o}function MH(t){return t.map(e=>HH(e))}function HH(t){let e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...t,request:{...t.request,headers:{...t.request.headers,...e}}}}function Gme(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}function qme(t,e){return{name:"DeserializationError",message:t,response:e}}function Yme(t){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:t}}Fi.CallEnum=K2;Fi.HostStatusEnum=xC;Fi.createApiError=Gme;Fi.createDeserializationError=qme;Fi.createMappedRequestOptions=OH;Fi.createRetryError=Yme;Fi.createStatefulHost=UH;Fi.createStatelessHost=_H;Fi.createTransporter=kdt;Fi.createUserAgent=Qdt;Fi.deserializeFailure=Mme;Fi.deserializeSuccess=Ome;Fi.isStatefulHostTimeouted=Lme;Fi.isStatefulHostUp=Nme;Fi.serializeData=Hme;Fi.serializeHeaders=jme;Fi.serializeQueryParameters=_me;Fi.serializeUrl=Ume;Fi.stackFrameWithoutCredentials=HH;Fi.stackTraceWithoutCredentials=MH});var V2=_((UWt,Kme)=>{Kme.exports=Wme()});var Vme=_(m0=>{"use strict";Object.defineProperty(m0,"__esModule",{value:!0});var kC=Y2(),Rdt=V2(),J2=W2(),Tdt=t=>{let e=t.region||"us",r=kC.createAuth(kC.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Rdt.createTransporter({hosts:[{url:`analytics.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a=t.appId;return kC.addMethods({appId:a,transporter:o},t.methods)},Ndt=t=>(e,r)=>t.transporter.write({method:J2.MethodEnum.Post,path:"2/abtests",data:e},r),Ldt=t=>(e,r)=>t.transporter.write({method:J2.MethodEnum.Delete,path:kC.encode("2/abtests/%s",e)},r),Odt=t=>(e,r)=>t.transporter.read({method:J2.MethodEnum.Get,path:kC.encode("2/abtests/%s",e)},r),Mdt=t=>e=>t.transporter.read({method:J2.MethodEnum.Get,path:"2/abtests"},e),Udt=t=>(e,r)=>t.transporter.write({method:J2.MethodEnum.Post,path:kC.encode("2/abtests/%s/stop",e)},r);m0.addABTest=Ndt;m0.createAnalyticsClient=Tdt;m0.deleteABTest=Ldt;m0.getABTest=Odt;m0.getABTests=Mdt;m0.stopABTest=Udt});var zme=_((HWt,Jme)=>{Jme.exports=Vme()});var Zme=_(z2=>{"use strict";Object.defineProperty(z2,"__esModule",{value:!0});var jH=Y2(),_dt=V2(),Xme=W2(),Hdt=t=>{let e=t.region||"us",r=jH.createAuth(jH.AuthMode.WithinHeaders,t.appId,t.apiKey),o=_dt.createTransporter({hosts:[{url:`personalization.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}});return jH.addMethods({appId:t.appId,transporter:o},t.methods)},jdt=t=>e=>t.transporter.read({method:Xme.MethodEnum.Get,path:"1/strategies/personalization"},e),Gdt=t=>(e,r)=>t.transporter.write({method:Xme.MethodEnum.Post,path:"1/strategies/personalization",data:e},r);z2.createPersonalizationClient=Hdt;z2.getPersonalizationStrategy=jdt;z2.setPersonalizationStrategy=Gdt});var eye=_((GWt,$me)=>{$me.exports=Zme()});var hye=_(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});var qt=Y2(),Na=V2(),Ir=W2(),qdt=ve("crypto");function Bk(t){let e=r=>t.request(r).then(o=>{if(t.batch!==void 0&&t.batch(o.hits),!t.shouldStop(o))return o.cursor?e({cursor:o.cursor}):e({page:(r.page||0)+1})});return e({})}var Ydt=t=>{let e=t.appId,r=qt.createAuth(t.authMode!==void 0?t.authMode:qt.AuthMode.WithinHeaders,e,t.apiKey),o=Na.createTransporter({hosts:[{url:`${e}-dsn.algolia.net`,accept:Na.CallEnum.Read},{url:`${e}.algolia.net`,accept:Na.CallEnum.Write}].concat(qt.shuffle([{url:`${e}-1.algolianet.com`},{url:`${e}-2.algolianet.com`},{url:`${e}-3.algolianet.com`}])),...t,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a={transporter:o,appId:e,addAlgoliaAgent(n,u){o.userAgent.add({segment:n,version:u})},clearCache(){return Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(()=>{})}};return qt.addMethods(a,t.methods)};function tye(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function rye(){return{name:"ObjectNotFoundError",message:"Object not found."}}function nye(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Wdt=t=>(e,r)=>{let{queryParameters:o,...a}=r||{},n={acl:e,...o!==void 0?{queryParameters:o}:{}},u=(A,p)=>qt.createRetryablePromise(h=>X2(t)(A.key,p).catch(E=>{if(E.status!==404)throw E;return h()}));return qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/keys",data:n},a),u)},Kdt=t=>(e,r,o)=>{let a=Na.createMappedRequestOptions(o);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},a)},Vdt=t=>(e,r,o)=>t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},o),Jdt=t=>(e,r)=>qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(o,a)=>QC(t)(o.taskID,a)),vk=t=>(e,r,o)=>{let a=(n,u)=>Z2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},o),a)},zdt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Sk.Rules]}),Xdt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Sk.Settings]}),Zdt=t=>(e,r,o)=>vk(t)(e,r,{...o,scope:[Sk.Synonyms]}),$dt=t=>(e,r)=>e.method===Ir.MethodEnum.Get?t.transporter.read(e,r):t.transporter.write(e,r),emt=t=>(e,r)=>{let o=(a,n)=>qt.createRetryablePromise(u=>X2(t)(e,n).then(u).catch(A=>{if(A.status!==404)throw A}));return qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:qt.encode("1/keys/%s",e)},r),o)},tmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"deleteEntry",body:{objectID:n}}));return qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>QC(t)(n.taskID,u))},rmt=()=>(t,e)=>{let r=Na.serializeQueryParameters(e),o=qdt.createHmac("sha256",t).update(r).digest("hex");return Buffer.from(o+r).toString("base64")},X2=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:qt.encode("1/keys/%s",e)},r),iye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:qt.encode("1/task/%s",e.toString())},r),nmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"/1/dictionaries/*/settings"},e),imt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/logs"},e),smt=()=>t=>{let e=Buffer.from(t,"base64").toString("ascii"),r=/validUntil=(\d+)/,o=e.match(r);if(o===null)throw nye();return parseInt(o[1],10)-Math.round(new Date().getTime()/1e3)},omt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/top"},e),amt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:qt.encode("1/clusters/mapping/%s",e)},r),lmt=t=>e=>{let{retrieveMappings:r,...o}=e||{};return r===!0&&(o.getClusters=!0),t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/pending"},o)},Z2=t=>(e,r={})=>{let o={transporter:t.transporter,appId:t.appId,indexName:e};return qt.addMethods(o,r.methods)},cmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/keys"},e),umt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters"},e),Amt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/indexes"},e),fmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping"},e),pmt=t=>(e,r,o)=>{let a=(n,u)=>Z2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},o),a)},hmt=t=>(e,r)=>{let o=(a,n)=>Promise.all(Object.keys(a.taskID).map(u=>Z2(t)(u,{methods:{waitTask:Zi}}).waitTask(a.taskID[u],n)));return qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:e}},r),o)},gmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:e}},r),dmt=t=>(e,r)=>{let o=e.map(a=>({...a,params:Na.serializeQueryParameters(a.params||{})}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},r)},mmt=t=>(e,r)=>Promise.all(e.map(o=>{let{facetName:a,facetQuery:n,...u}=o.params;return Z2(t)(o.indexName,{methods:{searchForFacetValues:Aye}}).searchForFacetValues(a,n,{...r,...u})})),ymt=t=>(e,r)=>{let o=Na.createMappedRequestOptions(r);return o.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Delete,path:"1/clusters/mapping"},o)},Emt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},o),(n,u)=>QC(t)(n.taskID,u))},Cmt=t=>(e,r)=>{let o=(a,n)=>qt.createRetryablePromise(u=>X2(t)(e,n).catch(A=>{if(A.status!==404)throw A;return u()}));return qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("1/keys/%s/restore",e)},r),o)},wmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>QC(t)(n.taskID,u))},Imt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:qt.encode("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},o),Bmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:e}},r),vmt=t=>(e,r)=>qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:"/1/dictionaries/*/settings",data:e},r),(o,a)=>QC(t)(o.taskID,a)),Dmt=t=>(e,r)=>{let o=Object.assign({},r),{queryParameters:a,...n}=r||{},u=a?{queryParameters:a}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],p=E=>Object.keys(o).filter(I=>A.indexOf(I)!==-1).every(I=>E[I]===o[I]),h=(E,I)=>qt.createRetryablePromise(v=>X2(t)(e,I).then(x=>p(x)?Promise.resolve():v()));return qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:qt.encode("1/keys/%s",e),data:u},n),h)},QC=t=>(e,r)=>qt.createRetryablePromise(o=>iye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),sye=t=>(e,r)=>{let o=(a,n)=>Zi(t)(a.taskID,n);return qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),o)},Smt=t=>e=>Bk({shouldStop:r=>r.cursor===void 0,...e,request:r=>t.transporter.read({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/browse",t.indexName),data:r},e)}),Pmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Bk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},bmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Bk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Dk=t=>(e,r,o)=>{let{batchSize:a,...n}=o||{},u={taskIDs:[],objectIDs:[]},A=(p=0)=>{let h=[],E;for(E=p;E({action:r,body:I})),n).then(I=>(u.objectIDs=u.objectIDs.concat(I.objectIDs),u.taskIDs.push(I.taskID),E++,A(E)))};return qt.createWaitablePromise(A(),(p,h)=>Promise.all(p.taskIDs.map(E=>Zi(t)(E,h))))},xmt=t=>e=>qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/clear",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),kmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/rules/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Qmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/synonyms/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Fmt=t=>(e,r)=>qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/deleteByQuery",t.indexName),data:e},r),(o,a)=>Zi(t)(o.taskID,a)),Rmt=t=>e=>qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:qt.encode("1/indexes/%s",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Tmt=t=>(e,r)=>qt.createWaitablePromise(oye(t)([e],r).then(o=>({taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),oye=t=>(e,r)=>{let o=e.map(a=>({objectID:a}));return Dk(t)(o,nm.DeleteObject,r)},Nmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:qt.encode("1/indexes/%s/rules/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Lmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:qt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Omt=t=>e=>aye(t)(e).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),Mmt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:qt.encode("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},o),Umt=t=>(e,r)=>{let{query:o,paginate:a,...n}=r||{},u=0,A=()=>uye(t)(o||"",{...n,page:u}).then(p=>{for(let[h,E]of Object.entries(p.hits))if(e(E))return{object:E,position:parseInt(h,10),page:u};if(u++,a===!1||u>=p.nbPages)throw rye();return A()});return A()},_mt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:qt.encode("1/indexes/%s/%s",t.indexName,e)},r),Hmt=()=>(t,e)=>{for(let[r,o]of Object.entries(t.hits))if(o.objectID===e)return parseInt(r,10);return-1},jmt=t=>(e,r)=>{let{attributesToRetrieve:o,...a}=r||{},n=e.map(u=>({indexName:t.indexName,objectID:u,...o?{attributesToRetrieve:o}:{}}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:n}},a)},Gmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:qt.encode("1/indexes/%s/rules/%s",t.indexName,e)},r),aye=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:qt.encode("1/indexes/%s/settings",t.indexName),data:{getVersion:2}},e),qmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:qt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},r),lye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:qt.encode("1/indexes/%s/task/%s",t.indexName,e.toString())},r),Ymt=t=>(e,r)=>qt.createWaitablePromise(cye(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),cye=t=>(e,r)=>{let{createIfNotExists:o,...a}=r||{},n=o?nm.PartialUpdateObject:nm.PartialUpdateObjectNoCreate;return Dk(t)(e,n,a)},Wmt=t=>(e,r)=>{let{safe:o,autoGenerateObjectIDIfNotExist:a,batchSize:n,...u}=r||{},A=(C,R,L,U)=>qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/operation",C),data:{operation:L,destination:R}},U),(J,te)=>Zi(t)(J.taskID,te)),p=Math.random().toString(36).substring(7),h=`${t.indexName}_tmp_${p}`,E=GH({appId:t.appId,transporter:t.transporter,indexName:h}),I=[],v=A(t.indexName,h,"copy",{...u,scope:["settings","synonyms","rules"]});I.push(v);let x=(o?v.wait(u):v).then(()=>{let C=E(e,{...u,autoGenerateObjectIDIfNotExist:a,batchSize:n});return I.push(C),o?C.wait(u):C}).then(()=>{let C=A(h,t.indexName,"move",u);return I.push(C),o?C.wait(u):C}).then(()=>Promise.all(I)).then(([C,R,L])=>({objectIDs:R.objectIDs,taskIDs:[C.taskID,...R.taskIDs,L.taskID]}));return qt.createWaitablePromise(x,(C,R)=>Promise.all(I.map(L=>L.wait(R))))},Kmt=t=>(e,r)=>qH(t)(e,{...r,clearExistingRules:!0}),Vmt=t=>(e,r)=>YH(t)(e,{...r,clearExistingSynonyms:!0}),Jmt=t=>(e,r)=>qt.createWaitablePromise(GH(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),GH=t=>(e,r)=>{let{autoGenerateObjectIDIfNotExist:o,...a}=r||{},n=o?nm.AddObject:nm.UpdateObject;if(n===nm.UpdateObject){for(let u of e)if(u.objectID===void 0)return qt.createWaitablePromise(Promise.reject(tye()))}return Dk(t)(e,n,a)},zmt=t=>(e,r)=>qH(t)([e],r),qH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingRules:a,...n}=r||{},u=Na.createMappedRequestOptions(n);return o&&(u.queryParameters.forwardToReplicas=1),a&&(u.queryParameters.clearExistingRules=1),qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/rules/batch",t.indexName),data:e},u),(A,p)=>Zi(t)(A.taskID,p))},Xmt=t=>(e,r)=>YH(t)([e],r),YH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingSynonyms:a,replaceExistingSynonyms:n,...u}=r||{},A=Na.createMappedRequestOptions(u);return o&&(A.queryParameters.forwardToReplicas=1),(n||a)&&(A.queryParameters.replaceExistingSynonyms=1),qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/synonyms/batch",t.indexName),data:e},A),(p,h)=>Zi(t)(p.taskID,h))},uye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},r),Aye=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:r},cacheable:!0},o),fye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/rules/search",t.indexName),data:{query:e}},r),pye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:qt.encode("1/indexes/%s/synonyms/search",t.indexName),data:{query:e}},r),Zmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),qt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:qt.encode("1/indexes/%s/settings",t.indexName),data:e},n),(u,A)=>Zi(t)(u.taskID,A))},Zi=t=>(e,r)=>qt.createRetryablePromise(o=>lye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),$mt={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Personalization:"personalization",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},nm={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject",DeleteIndex:"delete",ClearIndex:"clear"},Sk={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},eyt={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},tyt={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};Ft.ApiKeyACLEnum=$mt;Ft.BatchActionEnum=nm;Ft.ScopeEnum=Sk;Ft.StrategyEnum=eyt;Ft.SynonymEnum=tyt;Ft.addApiKey=Wdt;Ft.assignUserID=Kdt;Ft.assignUserIDs=Vdt;Ft.batch=sye;Ft.browseObjects=Smt;Ft.browseRules=Pmt;Ft.browseSynonyms=bmt;Ft.chunkedBatch=Dk;Ft.clearDictionaryEntries=Jdt;Ft.clearObjects=xmt;Ft.clearRules=kmt;Ft.clearSynonyms=Qmt;Ft.copyIndex=vk;Ft.copyRules=zdt;Ft.copySettings=Xdt;Ft.copySynonyms=Zdt;Ft.createBrowsablePromise=Bk;Ft.createMissingObjectIDError=tye;Ft.createObjectNotFoundError=rye;Ft.createSearchClient=Ydt;Ft.createValidUntilNotFoundError=nye;Ft.customRequest=$dt;Ft.deleteApiKey=emt;Ft.deleteBy=Fmt;Ft.deleteDictionaryEntries=tmt;Ft.deleteIndex=Rmt;Ft.deleteObject=Tmt;Ft.deleteObjects=oye;Ft.deleteRule=Nmt;Ft.deleteSynonym=Lmt;Ft.exists=Omt;Ft.findAnswers=Mmt;Ft.findObject=Umt;Ft.generateSecuredApiKey=rmt;Ft.getApiKey=X2;Ft.getAppTask=iye;Ft.getDictionarySettings=nmt;Ft.getLogs=imt;Ft.getObject=_mt;Ft.getObjectPosition=Hmt;Ft.getObjects=jmt;Ft.getRule=Gmt;Ft.getSecuredApiKeyRemainingValidity=smt;Ft.getSettings=aye;Ft.getSynonym=qmt;Ft.getTask=lye;Ft.getTopUserIDs=omt;Ft.getUserID=amt;Ft.hasPendingMappings=lmt;Ft.initIndex=Z2;Ft.listApiKeys=cmt;Ft.listClusters=umt;Ft.listIndices=Amt;Ft.listUserIDs=fmt;Ft.moveIndex=pmt;Ft.multipleBatch=hmt;Ft.multipleGetObjects=gmt;Ft.multipleQueries=dmt;Ft.multipleSearchForFacetValues=mmt;Ft.partialUpdateObject=Ymt;Ft.partialUpdateObjects=cye;Ft.removeUserID=ymt;Ft.replaceAllObjects=Wmt;Ft.replaceAllRules=Kmt;Ft.replaceAllSynonyms=Vmt;Ft.replaceDictionaryEntries=Emt;Ft.restoreApiKey=Cmt;Ft.saveDictionaryEntries=wmt;Ft.saveObject=Jmt;Ft.saveObjects=GH;Ft.saveRule=zmt;Ft.saveRules=qH;Ft.saveSynonym=Xmt;Ft.saveSynonyms=YH;Ft.search=uye;Ft.searchDictionaryEntries=Imt;Ft.searchForFacetValues=Aye;Ft.searchRules=fye;Ft.searchSynonyms=pye;Ft.searchUserIDs=Bmt;Ft.setDictionarySettings=vmt;Ft.setSettings=Zmt;Ft.updateApiKey=Dmt;Ft.waitAppTask=QC;Ft.waitTask=Zi});var dye=_((YWt,gye)=>{gye.exports=hye()});var mye=_(Pk=>{"use strict";Object.defineProperty(Pk,"__esModule",{value:!0});function ryt(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var nyt={Debug:1,Info:2,Error:3};Pk.LogLevelEnum=nyt;Pk.createNullLogger=ryt});var Eye=_((KWt,yye)=>{yye.exports=mye()});var Bye=_(WH=>{"use strict";Object.defineProperty(WH,"__esModule",{value:!0});var Cye=ve("http"),wye=ve("https"),iyt=ve("url"),Iye={keepAlive:!0},syt=new Cye.Agent(Iye),oyt=new wye.Agent(Iye);function ayt({agent:t,httpAgent:e,httpsAgent:r,requesterOptions:o={}}={}){let a=e||t||syt,n=r||t||oyt;return{send(u){return new Promise(A=>{let p=iyt.parse(u.url),h=p.query===null?p.pathname:`${p.pathname}?${p.query}`,E={...o,agent:p.protocol==="https:"?n:a,hostname:p.hostname,path:h,method:u.method,headers:{...o&&o.headers?o.headers:{},...u.headers},...p.port!==void 0?{port:p.port||""}:{}},I=(p.protocol==="https:"?wye:Cye).request(E,R=>{let L=[];R.on("data",U=>{L=L.concat(U)}),R.on("end",()=>{clearTimeout(x),clearTimeout(C),A({status:R.statusCode||0,content:Buffer.concat(L).toString(),isTimedOut:!1})})}),v=(R,L)=>setTimeout(()=>{I.abort(),A({status:0,content:L,isTimedOut:!0})},R*1e3),x=v(u.connectTimeout,"Connection timeout"),C;I.on("error",R=>{clearTimeout(x),clearTimeout(C),A({status:0,content:R.message,isTimedOut:!1})}),I.once("response",()=>{clearTimeout(x),C=v(u.responseTimeout,"Socket timeout")}),u.data!==void 0&&I.write(u.data),I.end()})},destroy(){return a.destroy(),n.destroy(),Promise.resolve()}}}WH.createNodeHttpRequester=ayt});var Dye=_((JWt,vye)=>{vye.exports=Bye()});var xye=_((zWt,bye)=>{"use strict";var Sye=Bme(),lyt=Sme(),FC=zme(),VH=Y2(),KH=eye(),Ut=dye(),cyt=Eye(),uyt=Dye(),Ayt=V2();function Pye(t,e,r){let o={appId:t,apiKey:e,timeouts:{connect:2,read:5,write:30},requester:uyt.createNodeHttpRequester(),logger:cyt.createNullLogger(),responsesCache:Sye.createNullCache(),requestsCache:Sye.createNullCache(),hostsCache:lyt.createInMemoryCache(),userAgent:Ayt.createUserAgent(VH.version).add({segment:"Node.js",version:process.versions.node})},a={...o,...r},n=()=>u=>KH.createPersonalizationClient({...o,...u,methods:{getPersonalizationStrategy:KH.getPersonalizationStrategy,setPersonalizationStrategy:KH.setPersonalizationStrategy}});return Ut.createSearchClient({...a,methods:{search:Ut.multipleQueries,searchForFacetValues:Ut.multipleSearchForFacetValues,multipleBatch:Ut.multipleBatch,multipleGetObjects:Ut.multipleGetObjects,multipleQueries:Ut.multipleQueries,copyIndex:Ut.copyIndex,copySettings:Ut.copySettings,copyRules:Ut.copyRules,copySynonyms:Ut.copySynonyms,moveIndex:Ut.moveIndex,listIndices:Ut.listIndices,getLogs:Ut.getLogs,listClusters:Ut.listClusters,multipleSearchForFacetValues:Ut.multipleSearchForFacetValues,getApiKey:Ut.getApiKey,addApiKey:Ut.addApiKey,listApiKeys:Ut.listApiKeys,updateApiKey:Ut.updateApiKey,deleteApiKey:Ut.deleteApiKey,restoreApiKey:Ut.restoreApiKey,assignUserID:Ut.assignUserID,assignUserIDs:Ut.assignUserIDs,getUserID:Ut.getUserID,searchUserIDs:Ut.searchUserIDs,listUserIDs:Ut.listUserIDs,getTopUserIDs:Ut.getTopUserIDs,removeUserID:Ut.removeUserID,hasPendingMappings:Ut.hasPendingMappings,generateSecuredApiKey:Ut.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:Ut.getSecuredApiKeyRemainingValidity,destroy:VH.destroy,clearDictionaryEntries:Ut.clearDictionaryEntries,deleteDictionaryEntries:Ut.deleteDictionaryEntries,getDictionarySettings:Ut.getDictionarySettings,getAppTask:Ut.getAppTask,replaceDictionaryEntries:Ut.replaceDictionaryEntries,saveDictionaryEntries:Ut.saveDictionaryEntries,searchDictionaryEntries:Ut.searchDictionaryEntries,setDictionarySettings:Ut.setDictionarySettings,waitAppTask:Ut.waitAppTask,customRequest:Ut.customRequest,initIndex:u=>A=>Ut.initIndex(u)(A,{methods:{batch:Ut.batch,delete:Ut.deleteIndex,findAnswers:Ut.findAnswers,getObject:Ut.getObject,getObjects:Ut.getObjects,saveObject:Ut.saveObject,saveObjects:Ut.saveObjects,search:Ut.search,searchForFacetValues:Ut.searchForFacetValues,waitTask:Ut.waitTask,setSettings:Ut.setSettings,getSettings:Ut.getSettings,partialUpdateObject:Ut.partialUpdateObject,partialUpdateObjects:Ut.partialUpdateObjects,deleteObject:Ut.deleteObject,deleteObjects:Ut.deleteObjects,deleteBy:Ut.deleteBy,clearObjects:Ut.clearObjects,browseObjects:Ut.browseObjects,getObjectPosition:Ut.getObjectPosition,findObject:Ut.findObject,exists:Ut.exists,saveSynonym:Ut.saveSynonym,saveSynonyms:Ut.saveSynonyms,getSynonym:Ut.getSynonym,searchSynonyms:Ut.searchSynonyms,browseSynonyms:Ut.browseSynonyms,deleteSynonym:Ut.deleteSynonym,clearSynonyms:Ut.clearSynonyms,replaceAllObjects:Ut.replaceAllObjects,replaceAllSynonyms:Ut.replaceAllSynonyms,searchRules:Ut.searchRules,getRule:Ut.getRule,deleteRule:Ut.deleteRule,saveRule:Ut.saveRule,saveRules:Ut.saveRules,replaceAllRules:Ut.replaceAllRules,browseRules:Ut.browseRules,clearRules:Ut.clearRules}}),initAnalytics:()=>u=>FC.createAnalyticsClient({...o,...u,methods:{addABTest:FC.addABTest,getABTest:FC.getABTest,getABTests:FC.getABTests,stopABTest:FC.stopABTest,deleteABTest:FC.deleteABTest}}),initPersonalization:n,initRecommendation:()=>u=>(a.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),n()(u))}})}Pye.version=VH.version;bye.exports=Pye});var zH=_((XWt,JH)=>{var kye=xye();JH.exports=kye;JH.exports.default=kye});var $H=_(($Wt,Rye)=>{"use strict";var Fye=Object.getOwnPropertySymbols,pyt=Object.prototype.hasOwnProperty,hyt=Object.prototype.propertyIsEnumerable;function gyt(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function dyt(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de",Object.getOwnPropertyNames(t)[0]==="5")return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;var o=Object.getOwnPropertyNames(e).map(function(n){return e[n]});if(o.join("")!=="0123456789")return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(n){a[n]=n}),Object.keys(Object.assign({},a)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Rye.exports=dyt()?Object.assign:function(t,e){for(var r,o=gyt(t),a,n=1;n{"use strict";var i6=$H(),$c=typeof Symbol=="function"&&Symbol.for,$2=$c?Symbol.for("react.element"):60103,myt=$c?Symbol.for("react.portal"):60106,yyt=$c?Symbol.for("react.fragment"):60107,Eyt=$c?Symbol.for("react.strict_mode"):60108,Cyt=$c?Symbol.for("react.profiler"):60114,wyt=$c?Symbol.for("react.provider"):60109,Iyt=$c?Symbol.for("react.context"):60110,Byt=$c?Symbol.for("react.forward_ref"):60112,vyt=$c?Symbol.for("react.suspense"):60113,Dyt=$c?Symbol.for("react.memo"):60115,Syt=$c?Symbol.for("react.lazy"):60116,Tye=typeof Symbol=="function"&&Symbol.iterator;function eB(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;rbk.length&&bk.push(t)}function t6(t,e,r,o){var a=typeof t;(a==="undefined"||a==="boolean")&&(t=null);var n=!1;if(t===null)n=!0;else switch(a){case"string":case"number":n=!0;break;case"object":switch(t.$$typeof){case $2:case myt:n=!0}}if(n)return r(o,t,e===""?"."+e6(t,0):e),1;if(n=0,e=e===""?".":e+":",Array.isArray(t))for(var u=0;u{"use strict";Wye.exports=Yye()});var u6=_((rKt,c6)=>{"use strict";var An=c6.exports;c6.exports.default=An;var Ln="\x1B[",tB="\x1B]",TC="\x07",xk=";",Kye=process.env.TERM_PROGRAM==="Apple_Terminal";An.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?Ln+(t+1)+"G":Ln+(e+1)+";"+(t+1)+"H"};An.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=Ln+-t+"D":t>0&&(r+=Ln+t+"C"),e<0?r+=Ln+-e+"A":e>0&&(r+=Ln+e+"B"),r};An.cursorUp=(t=1)=>Ln+t+"A";An.cursorDown=(t=1)=>Ln+t+"B";An.cursorForward=(t=1)=>Ln+t+"C";An.cursorBackward=(t=1)=>Ln+t+"D";An.cursorLeft=Ln+"G";An.cursorSavePosition=Kye?"\x1B7":Ln+"s";An.cursorRestorePosition=Kye?"\x1B8":Ln+"u";An.cursorGetPosition=Ln+"6n";An.cursorNextLine=Ln+"E";An.cursorPrevLine=Ln+"F";An.cursorHide=Ln+"?25l";An.cursorShow=Ln+"?25h";An.eraseLines=t=>{let e="";for(let r=0;r[tB,"8",xk,xk,e,TC,t,tB,"8",xk,xk,TC].join("");An.image=(t,e={})=>{let r=`${tB}1337;File=inline=1`;return e.width&&(r+=`;width=${e.width}`),e.height&&(r+=`;height=${e.height}`),e.preserveAspectRatio===!1&&(r+=";preserveAspectRatio=0"),r+":"+t.toString("base64")+TC};An.iTerm={setCwd:(t=process.cwd())=>`${tB}50;CurrentDir=${t}${TC}`,annotation:(t,e={})=>{let r=`${tB}1337;`,o=typeof e.x<"u",a=typeof e.y<"u";if((o||a)&&!(o&&a&&typeof e.length<"u"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return t=t.replace(/\|/g,""),r+=e.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",e.length>0?r+=(o?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+TC}}});var Jye=_((nKt,A6)=>{"use strict";var Vye=(t,e)=>{for(let r of Reflect.ownKeys(e))Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t};A6.exports=Vye;A6.exports.default=Vye});var Xye=_((iKt,Qk)=>{"use strict";var Fyt=Jye(),kk=new WeakMap,zye=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,o=0,a=t.displayName||t.name||"",n=function(...u){if(kk.set(n,++o),o===1)r=t.apply(this,u),t=null;else if(e.throw===!0)throw new Error(`Function \`${a}\` can only be called once`);return r};return Fyt(n,t),kk.set(n,o),n};Qk.exports=zye;Qk.exports.default=zye;Qk.exports.callCount=t=>{if(!kk.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return kk.get(t)}});var Zye=_((sKt,Fk)=>{Fk.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&Fk.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Fk.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var h6=_((oKt,OC)=>{var Ei=global.process,im=function(t){return t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function"};im(Ei)?($ye=ve("assert"),NC=Zye(),eEe=/^win/i.test(Ei.platform),rB=ve("events"),typeof rB!="function"&&(rB=rB.EventEmitter),Ei.__signal_exit_emitter__?Ts=Ei.__signal_exit_emitter__:(Ts=Ei.__signal_exit_emitter__=new rB,Ts.count=0,Ts.emitted={}),Ts.infinite||(Ts.setMaxListeners(1/0),Ts.infinite=!0),OC.exports=function(t,e){if(!im(global.process))return function(){};$ye.equal(typeof t,"function","a callback must be provided for exit handler"),LC===!1&&f6();var r="exit";e&&e.alwaysLast&&(r="afterexit");var o=function(){Ts.removeListener(r,t),Ts.listeners("exit").length===0&&Ts.listeners("afterexit").length===0&&Rk()};return Ts.on(r,t),o},Rk=function(){!LC||!im(global.process)||(LC=!1,NC.forEach(function(e){try{Ei.removeListener(e,Tk[e])}catch{}}),Ei.emit=Nk,Ei.reallyExit=p6,Ts.count-=1)},OC.exports.unload=Rk,sm=function(e,r,o){Ts.emitted[e]||(Ts.emitted[e]=!0,Ts.emit(e,r,o))},Tk={},NC.forEach(function(t){Tk[t]=function(){if(!!im(global.process)){var r=Ei.listeners(t);r.length===Ts.count&&(Rk(),sm("exit",null,t),sm("afterexit",null,t),eEe&&t==="SIGHUP"&&(t="SIGINT"),Ei.kill(Ei.pid,t))}}}),OC.exports.signals=function(){return NC},LC=!1,f6=function(){LC||!im(global.process)||(LC=!0,Ts.count+=1,NC=NC.filter(function(e){try{return Ei.on(e,Tk[e]),!0}catch{return!1}}),Ei.emit=rEe,Ei.reallyExit=tEe)},OC.exports.load=f6,p6=Ei.reallyExit,tEe=function(e){!im(global.process)||(Ei.exitCode=e||0,sm("exit",Ei.exitCode,null),sm("afterexit",Ei.exitCode,null),p6.call(Ei,Ei.exitCode))},Nk=Ei.emit,rEe=function(e,r){if(e==="exit"&&im(global.process)){r!==void 0&&(Ei.exitCode=r);var o=Nk.apply(this,arguments);return sm("exit",Ei.exitCode,null),sm("afterexit",Ei.exitCode,null),o}else return Nk.apply(this,arguments)}):OC.exports=function(){return function(){}};var $ye,NC,eEe,rB,Ts,Rk,sm,Tk,LC,f6,p6,tEe,Nk,rEe});var iEe=_((aKt,nEe)=>{"use strict";var Ryt=Xye(),Tyt=h6();nEe.exports=Ryt(()=>{Tyt(()=>{process.stderr.write("\x1B[?25h")},{alwaysLast:!0})})});var g6=_(MC=>{"use strict";var Nyt=iEe(),Lk=!1;MC.show=(t=process.stderr)=>{!t.isTTY||(Lk=!1,t.write("\x1B[?25h"))};MC.hide=(t=process.stderr)=>{!t.isTTY||(Nyt(),Lk=!0,t.write("\x1B[?25l"))};MC.toggle=(t,e)=>{t!==void 0&&(Lk=t),Lk?MC.show(e):MC.hide(e)}});var lEe=_(nB=>{"use strict";var aEe=nB&&nB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nB,"__esModule",{value:!0});var sEe=aEe(u6()),oEe=aEe(g6()),Lyt=(t,{showCursor:e=!1}={})=>{let r=0,o="",a=!1,n=u=>{!e&&!a&&(oEe.default.hide(),a=!0);let A=u+` +`;A!==o&&(o=A,t.write(sEe.default.eraseLines(r)+A),r=A.split(` +`).length)};return n.clear=()=>{t.write(sEe.default.eraseLines(r)),o="",r=0},n.done=()=>{o="",r=0,e||(oEe.default.show(),a=!1)},n};nB.default={create:Lyt}});var cEe=_((uKt,Oyt)=>{Oyt.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var fEe=_(gl=>{"use strict";var AEe=cEe(),pA=process.env;Object.defineProperty(gl,"_vendors",{value:AEe.map(function(t){return t.constant})});gl.name=null;gl.isPR=null;AEe.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(o){return uEe(o)});if(gl[t.constant]=r,r)switch(gl.name=t.name,typeof t.pr){case"string":gl.isPR=!!pA[t.pr];break;case"object":"env"in t.pr?gl.isPR=t.pr.env in pA&&pA[t.pr.env]!==t.pr.ne:"any"in t.pr?gl.isPR=t.pr.any.some(function(o){return!!pA[o]}):gl.isPR=uEe(t.pr);break;default:gl.isPR=null}});gl.isCI=!!(pA.CI||pA.CONTINUOUS_INTEGRATION||pA.BUILD_NUMBER||pA.RUN_ID||gl.name);function uEe(t){return typeof t=="string"?!!pA[t]:Object.keys(t).every(function(e){return pA[e]===t[e]})}});var hEe=_((fKt,pEe)=>{"use strict";pEe.exports=fEe().isCI});var dEe=_((pKt,gEe)=>{"use strict";var Myt=t=>{let e=new Set;do for(let r of Reflect.ownKeys(t))e.add([t,r]);while((t=Reflect.getPrototypeOf(t))&&t!==Object.prototype);return e};gEe.exports=(t,{include:e,exclude:r}={})=>{let o=a=>{let n=u=>typeof u=="string"?a===u:u.test(a);return e?e.some(n):r?!r.some(n):!0};for(let[a,n]of Myt(t.constructor.prototype)){if(n==="constructor"||!o(n))continue;let u=Reflect.getOwnPropertyDescriptor(a,n);u&&typeof u.value=="function"&&(t[n]=t[n].bind(t))}return t}});var BEe=_(kn=>{"use strict";Object.defineProperty(kn,"__esModule",{value:!0});var _C,oB,Hk,jk,I6;typeof window>"u"||typeof MessageChannel!="function"?(UC=null,d6=null,m6=function(){if(UC!==null)try{var t=kn.unstable_now();UC(!0,t),UC=null}catch(e){throw setTimeout(m6,0),e}},mEe=Date.now(),kn.unstable_now=function(){return Date.now()-mEe},_C=function(t){UC!==null?setTimeout(_C,0,t):(UC=t,setTimeout(m6,0))},oB=function(t,e){d6=setTimeout(t,e)},Hk=function(){clearTimeout(d6)},jk=function(){return!1},I6=kn.unstable_forceFrameRate=function(){}):(Ok=window.performance,y6=window.Date,yEe=window.setTimeout,EEe=window.clearTimeout,typeof console<"u"&&(CEe=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof CEe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Ok=="object"&&typeof Ok.now=="function"?kn.unstable_now=function(){return Ok.now()}:(wEe=y6.now(),kn.unstable_now=function(){return y6.now()-wEe}),iB=!1,sB=null,Mk=-1,E6=5,C6=0,jk=function(){return kn.unstable_now()>=C6},I6=function(){},kn.unstable_forceFrameRate=function(t){0>t||125_k(u,r))p!==void 0&&0>_k(p,u)?(t[o]=p,t[A]=r,o=A):(t[o]=u,t[n]=r,o=n);else if(p!==void 0&&0>_k(p,r))t[o]=p,t[A]=r,o=A;else break e}}return e}return null}function _k(t,e){var r=t.sortIndex-e.sortIndex;return r!==0?r:t.id-e.id}var eu=[],y0=[],Uyt=1,na=null,Lo=3,qk=!1,om=!1,aB=!1;function Yk(t){for(var e=nc(y0);e!==null;){if(e.callback===null)Gk(y0);else if(e.startTime<=t)Gk(y0),e.sortIndex=e.expirationTime,B6(eu,e);else break;e=nc(y0)}}function v6(t){if(aB=!1,Yk(t),!om)if(nc(eu)!==null)om=!0,_C(D6);else{var e=nc(y0);e!==null&&oB(v6,e.startTime-t)}}function D6(t,e){om=!1,aB&&(aB=!1,Hk()),qk=!0;var r=Lo;try{for(Yk(e),na=nc(eu);na!==null&&(!(na.expirationTime>e)||t&&!jk());){var o=na.callback;if(o!==null){na.callback=null,Lo=na.priorityLevel;var a=o(na.expirationTime<=e);e=kn.unstable_now(),typeof a=="function"?na.callback=a:na===nc(eu)&&Gk(eu),Yk(e)}else Gk(eu);na=nc(eu)}if(na!==null)var n=!0;else{var u=nc(y0);u!==null&&oB(v6,u.startTime-e),n=!1}return n}finally{na=null,Lo=r,qk=!1}}function IEe(t){switch(t){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var _yt=I6;kn.unstable_ImmediatePriority=1;kn.unstable_UserBlockingPriority=2;kn.unstable_NormalPriority=3;kn.unstable_IdlePriority=5;kn.unstable_LowPriority=4;kn.unstable_runWithPriority=function(t,e){switch(t){case 1:case 2:case 3:case 4:case 5:break;default:t=3}var r=Lo;Lo=t;try{return e()}finally{Lo=r}};kn.unstable_next=function(t){switch(Lo){case 1:case 2:case 3:var e=3;break;default:e=Lo}var r=Lo;Lo=e;try{return t()}finally{Lo=r}};kn.unstable_scheduleCallback=function(t,e,r){var o=kn.unstable_now();if(typeof r=="object"&&r!==null){var a=r.delay;a=typeof a=="number"&&0o?(t.sortIndex=a,B6(y0,t),nc(eu)===null&&t===nc(y0)&&(aB?Hk():aB=!0,oB(v6,a-o))):(t.sortIndex=r,B6(eu,t),om||qk||(om=!0,_C(D6))),t};kn.unstable_cancelCallback=function(t){t.callback=null};kn.unstable_wrapCallback=function(t){var e=Lo;return function(){var r=Lo;Lo=e;try{return t.apply(this,arguments)}finally{Lo=r}}};kn.unstable_getCurrentPriorityLevel=function(){return Lo};kn.unstable_shouldYield=function(){var t=kn.unstable_now();Yk(t);var e=nc(eu);return e!==na&&na!==null&&e!==null&&e.callback!==null&&e.startTime<=t&&e.expirationTime{"use strict";vEe.exports=BEe()});var DEe=_((dKt,lB)=>{lB.exports=function t(e){"use strict";var r=$H(),o=on(),a=S6();function n(S){for(var D="https://reactjs.org/docs/error-decoder.html?invariant="+S,T=1;Tao||(S.current=yl[ao],yl[ao]=null,ao--)}function On(S,D){ao++,yl[ao]=S.current,S.current=D}var Ni={},Mn={current:Ni},_i={current:!1},tr=Ni;function Oe(S,D){var T=S.type.contextTypes;if(!T)return Ni;var j=S.stateNode;if(j&&j.__reactInternalMemoizedUnmaskedChildContext===D)return j.__reactInternalMemoizedMaskedChildContext;var Y={},Ae;for(Ae in T)Y[Ae]=D[Ae];return j&&(S=S.stateNode,S.__reactInternalMemoizedUnmaskedChildContext=D,S.__reactInternalMemoizedMaskedChildContext=Y),Y}function ii(S){return S=S.childContextTypes,S!=null}function Ma(S){Vn(_i,S),Vn(Mn,S)}function hr(S){Vn(_i,S),Vn(Mn,S)}function uc(S,D,T){if(Mn.current!==Ni)throw Error(n(168));On(Mn,D,S),On(_i,T,S)}function uu(S,D,T){var j=S.stateNode;if(S=D.childContextTypes,typeof j.getChildContext!="function")return T;j=j.getChildContext();for(var Y in j)if(!(Y in S))throw Error(n(108,he(D)||"Unknown",Y));return r({},T,{},j)}function Ac(S){var D=S.stateNode;return D=D&&D.__reactInternalMemoizedMergedChildContext||Ni,tr=Mn.current,On(Mn,D,S),On(_i,_i.current,S),!0}function El(S,D,T){var j=S.stateNode;if(!j)throw Error(n(169));T?(D=uu(S,D,tr),j.__reactInternalMemoizedMergedChildContext=D,Vn(_i,S),Vn(Mn,S),On(Mn,D,S)):Vn(_i,S),On(_i,T,S)}var DA=a.unstable_runWithPriority,Au=a.unstable_scheduleCallback,Ce=a.unstable_cancelCallback,Rt=a.unstable_shouldYield,fc=a.unstable_requestPaint,Hi=a.unstable_now,fu=a.unstable_getCurrentPriorityLevel,Yt=a.unstable_ImmediatePriority,Cl=a.unstable_UserBlockingPriority,SA=a.unstable_NormalPriority,up=a.unstable_LowPriority,pc=a.unstable_IdlePriority,PA={},Qn=fc!==void 0?fc:function(){},hi=null,hc=null,bA=!1,sa=Hi(),Li=1e4>sa?Hi:function(){return Hi()-sa};function _o(){switch(fu()){case Yt:return 99;case Cl:return 98;case SA:return 97;case up:return 96;case pc:return 95;default:throw Error(n(332))}}function Ze(S){switch(S){case 99:return Yt;case 98:return Cl;case 97:return SA;case 96:return up;case 95:return pc;default:throw Error(n(332))}}function lo(S,D){return S=Ze(S),DA(S,D)}function gc(S,D,T){return S=Ze(S),Au(S,D,T)}function pu(S){return hi===null?(hi=[S],hc=Au(Yt,hu)):hi.push(S),PA}function ji(){if(hc!==null){var S=hc;hc=null,Ce(S)}hu()}function hu(){if(!bA&&hi!==null){bA=!0;var S=0;try{var D=hi;lo(99,function(){for(;S=D&&(Go=!0),S.firstContext=null)}function ms(S,D){if(aa!==S&&D!==!1&&D!==0)if((typeof D!="number"||D===1073741823)&&(aa=S,D=1073741823),D={context:S,observedBits:D,next:null},Us===null){if(co===null)throw Error(n(308));Us=D,co.dependencies={expirationTime:0,firstContext:D,responders:null}}else Us=Us.next=D;return b?S._currentValue:S._currentValue2}var _s=!1;function Un(S){return{baseState:S,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Sn(S){return{baseState:S.baseState,firstUpdate:S.firstUpdate,lastUpdate:S.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function ys(S,D){return{expirationTime:S,suspenseConfig:D,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function We(S,D){S.lastUpdate===null?S.firstUpdate=S.lastUpdate=D:(S.lastUpdate.next=D,S.lastUpdate=D)}function tt(S,D){var T=S.alternate;if(T===null){var j=S.updateQueue,Y=null;j===null&&(j=S.updateQueue=Un(S.memoizedState))}else j=S.updateQueue,Y=T.updateQueue,j===null?Y===null?(j=S.updateQueue=Un(S.memoizedState),Y=T.updateQueue=Un(T.memoizedState)):j=S.updateQueue=Sn(Y):Y===null&&(Y=T.updateQueue=Sn(j));Y===null||j===Y?We(j,D):j.lastUpdate===null||Y.lastUpdate===null?(We(j,D),We(Y,D)):(We(j,D),Y.lastUpdate=D)}function It(S,D){var T=S.updateQueue;T=T===null?S.updateQueue=Un(S.memoizedState):nr(S,T),T.lastCapturedUpdate===null?T.firstCapturedUpdate=T.lastCapturedUpdate=D:(T.lastCapturedUpdate.next=D,T.lastCapturedUpdate=D)}function nr(S,D){var T=S.alternate;return T!==null&&D===T.updateQueue&&(D=S.updateQueue=Sn(D)),D}function $(S,D,T,j,Y,Ae){switch(T.tag){case 1:return S=T.payload,typeof S=="function"?S.call(Ae,j,Y):S;case 3:S.effectTag=S.effectTag&-4097|64;case 0:if(S=T.payload,Y=typeof S=="function"?S.call(Ae,j,Y):S,Y==null)break;return r({},j,Y);case 2:_s=!0}return j}function ye(S,D,T,j,Y){_s=!1,D=nr(S,D);for(var Ae=D.baseState,De=null,vt=0,wt=D.firstUpdate,xt=Ae;wt!==null;){var _r=wt.expirationTime;_rbn?(ai=Fr,Fr=null):ai=Fr.sibling;var tn=di(rt,Fr,ft[bn],Wt);if(tn===null){Fr===null&&(Fr=ai);break}S&&Fr&&tn.alternate===null&&D(rt,Fr),Ve=Ae(tn,Ve,bn),Pn===null?vr=tn:Pn.sibling=tn,Pn=tn,Fr=ai}if(bn===ft.length)return T(rt,Fr),vr;if(Fr===null){for(;bnbn?(ai=Fr,Fr=null):ai=Fr.sibling;var ho=di(rt,Fr,tn.value,Wt);if(ho===null){Fr===null&&(Fr=ai);break}S&&Fr&&ho.alternate===null&&D(rt,Fr),Ve=Ae(ho,Ve,bn),Pn===null?vr=ho:Pn.sibling=ho,Pn=ho,Fr=ai}if(tn.done)return T(rt,Fr),vr;if(Fr===null){for(;!tn.done;bn++,tn=ft.next())tn=is(rt,tn.value,Wt),tn!==null&&(Ve=Ae(tn,Ve,bn),Pn===null?vr=tn:Pn.sibling=tn,Pn=tn);return vr}for(Fr=j(rt,Fr);!tn.done;bn++,tn=ft.next())tn=po(Fr,rt,bn,tn.value,Wt),tn!==null&&(S&&tn.alternate!==null&&Fr.delete(tn.key===null?bn:tn.key),Ve=Ae(tn,Ve,bn),Pn===null?vr=tn:Pn.sibling=tn,Pn=tn);return S&&Fr.forEach(function(vF){return D(rt,vF)}),vr}return function(rt,Ve,ft,Wt){var vr=typeof ft=="object"&&ft!==null&&ft.type===E&&ft.key===null;vr&&(ft=ft.props.children);var Pn=typeof ft=="object"&&ft!==null;if(Pn)switch(ft.$$typeof){case p:e:{for(Pn=ft.key,vr=Ve;vr!==null;){if(vr.key===Pn)if(vr.tag===7?ft.type===E:vr.elementType===ft.type){T(rt,vr.sibling),Ve=Y(vr,ft.type===E?ft.props.children:ft.props,Wt),Ve.ref=QA(rt,vr,ft),Ve.return=rt,rt=Ve;break e}else{T(rt,vr);break}else D(rt,vr);vr=vr.sibling}ft.type===E?(Ve=bu(ft.props.children,rt.mode,Wt,ft.key),Ve.return=rt,rt=Ve):(Wt=jm(ft.type,ft.key,ft.props,null,rt.mode,Wt),Wt.ref=QA(rt,Ve,ft),Wt.return=rt,rt=Wt)}return De(rt);case h:e:{for(vr=ft.key;Ve!==null;){if(Ve.key===vr)if(Ve.tag===4&&Ve.stateNode.containerInfo===ft.containerInfo&&Ve.stateNode.implementation===ft.implementation){T(rt,Ve.sibling),Ve=Y(Ve,ft.children||[],Wt),Ve.return=rt,rt=Ve;break e}else{T(rt,Ve);break}else D(rt,Ve);Ve=Ve.sibling}Ve=Rw(ft,rt.mode,Wt),Ve.return=rt,rt=Ve}return De(rt)}if(typeof ft=="string"||typeof ft=="number")return ft=""+ft,Ve!==null&&Ve.tag===6?(T(rt,Ve.sibling),Ve=Y(Ve,ft,Wt),Ve.return=rt,rt=Ve):(T(rt,Ve),Ve=Fw(ft,rt.mode,Wt),Ve.return=rt,rt=Ve),De(rt);if(kA(ft))return VA(rt,Ve,ft,Wt);if(ce(ft))return Yo(rt,Ve,ft,Wt);if(Pn&&Ap(rt,ft),typeof ft>"u"&&!vr)switch(rt.tag){case 1:case 0:throw rt=rt.type,Error(n(152,rt.displayName||rt.name||"Component"))}return T(rt,Ve)}}var gu=ig(!0),sg=ig(!1),du={},uo={current:du},FA={current:du},mc={current:du};function ca(S){if(S===du)throw Error(n(174));return S}function og(S,D){On(mc,D,S),On(FA,S,S),On(uo,du,S),D=ne(D),Vn(uo,S),On(uo,D,S)}function yc(S){Vn(uo,S),Vn(FA,S),Vn(mc,S)}function Pm(S){var D=ca(mc.current),T=ca(uo.current);D=ee(T,S.type,D),T!==D&&(On(FA,S,S),On(uo,D,S))}function ag(S){FA.current===S&&(Vn(uo,S),Vn(FA,S))}var $n={current:0};function fp(S){for(var D=S;D!==null;){if(D.tag===13){var T=D.memoizedState;if(T!==null&&(T=T.dehydrated,T===null||Ls(T)||so(T)))return D}else if(D.tag===19&&D.memoizedProps.revealOrder!==void 0){if((D.effectTag&64)!==0)return D}else if(D.child!==null){D.child.return=D,D=D.child;continue}if(D===S)break;for(;D.sibling===null;){if(D.return===null||D.return===S)return null;D=D.return}D.sibling.return=D.return,D=D.sibling}return null}function lg(S,D){return{responder:S,props:D}}var RA=u.ReactCurrentDispatcher,Hs=u.ReactCurrentBatchConfig,mu=0,Ha=null,qi=null,ua=null,yu=null,Es=null,Ec=null,Cc=0,q=null,Dt=0,wl=!1,xi=null,wc=0;function ct(){throw Error(n(321))}function Eu(S,D){if(D===null)return!1;for(var T=0;TCc&&(Cc=_r,Hm(Cc))):(Pw(_r,wt.suspenseConfig),Ae=wt.eagerReducer===S?wt.eagerState:S(Ae,wt.action)),De=wt,wt=wt.next}while(wt!==null&&wt!==j);xt||(vt=De,Y=Ae),hs(Ae,D.memoizedState)||(Go=!0),D.memoizedState=Ae,D.baseUpdate=vt,D.baseState=Y,T.lastRenderedState=Ae}return[D.memoizedState,T.dispatch]}function ug(S){var D=TA();return typeof S=="function"&&(S=S()),D.memoizedState=D.baseState=S,S=D.queue={last:null,dispatch:null,lastRenderedReducer:Br,lastRenderedState:S},S=S.dispatch=gg.bind(null,Ha,S),[D.memoizedState,S]}function Ag(S){return Cs(Br,S)}function fg(S,D,T,j){return S={tag:S,create:D,destroy:T,deps:j,next:null},q===null?(q={lastEffect:null},q.lastEffect=S.next=S):(D=q.lastEffect,D===null?q.lastEffect=S.next=S:(T=D.next,D.next=S,S.next=T,q.lastEffect=S)),S}function hp(S,D,T,j){var Y=TA();Dt|=S,Y.memoizedState=fg(D,T,void 0,j===void 0?null:j)}function Ic(S,D,T,j){var Y=pp();j=j===void 0?null:j;var Ae=void 0;if(qi!==null){var De=qi.memoizedState;if(Ae=De.destroy,j!==null&&Eu(j,De.deps)){fg(0,T,Ae,j);return}}Dt|=S,Y.memoizedState=fg(D,T,Ae,j)}function Ct(S,D){return hp(516,192,S,D)}function bm(S,D){return Ic(516,192,S,D)}function pg(S,D){if(typeof D=="function")return S=S(),D(S),function(){D(null)};if(D!=null)return S=S(),D.current=S,function(){D.current=null}}function hg(){}function Cu(S,D){return TA().memoizedState=[S,D===void 0?null:D],S}function xm(S,D){var T=pp();D=D===void 0?null:D;var j=T.memoizedState;return j!==null&&D!==null&&Eu(D,j[1])?j[0]:(T.memoizedState=[S,D],S)}function gg(S,D,T){if(!(25>wc))throw Error(n(301));var j=S.alternate;if(S===Ha||j!==null&&j===Ha)if(wl=!0,S={expirationTime:mu,suspenseConfig:null,action:T,eagerReducer:null,eagerState:null,next:null},xi===null&&(xi=new Map),T=xi.get(D),T===void 0)xi.set(D,S);else{for(D=T;D.next!==null;)D=D.next;D.next=S}else{var Y=ga(),Ae=ht.suspense;Y=jA(Y,S,Ae),Ae={expirationTime:Y,suspenseConfig:Ae,action:T,eagerReducer:null,eagerState:null,next:null};var De=D.last;if(De===null)Ae.next=Ae;else{var vt=De.next;vt!==null&&(Ae.next=vt),De.next=Ae}if(D.last=Ae,S.expirationTime===0&&(j===null||j.expirationTime===0)&&(j=D.lastRenderedReducer,j!==null))try{var wt=D.lastRenderedState,xt=j(wt,T);if(Ae.eagerReducer=j,Ae.eagerState=xt,hs(xt,wt))return}catch{}finally{}Pc(S,Y)}}var wu={readContext:ms,useCallback:ct,useContext:ct,useEffect:ct,useImperativeHandle:ct,useLayoutEffect:ct,useMemo:ct,useReducer:ct,useRef:ct,useState:ct,useDebugValue:ct,useResponder:ct,useDeferredValue:ct,useTransition:ct},Ew={readContext:ms,useCallback:Cu,useContext:ms,useEffect:Ct,useImperativeHandle:function(S,D,T){return T=T!=null?T.concat([S]):null,hp(4,36,pg.bind(null,D,S),T)},useLayoutEffect:function(S,D){return hp(4,36,S,D)},useMemo:function(S,D){var T=TA();return D=D===void 0?null:D,S=S(),T.memoizedState=[S,D],S},useReducer:function(S,D,T){var j=TA();return D=T!==void 0?T(D):D,j.memoizedState=j.baseState=D,S=j.queue={last:null,dispatch:null,lastRenderedReducer:S,lastRenderedState:D},S=S.dispatch=gg.bind(null,Ha,S),[j.memoizedState,S]},useRef:function(S){var D=TA();return S={current:S},D.memoizedState=S},useState:ug,useDebugValue:hg,useResponder:lg,useDeferredValue:function(S,D){var T=ug(S),j=T[0],Y=T[1];return Ct(function(){a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(S)}finally{Hs.suspense=Ae}})},[S,D]),j},useTransition:function(S){var D=ug(!1),T=D[0],j=D[1];return[Cu(function(Y){j(!0),a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=S===void 0?null:S;try{j(!1),Y()}finally{Hs.suspense=Ae}})},[S,T]),T]}},km={readContext:ms,useCallback:xm,useContext:ms,useEffect:bm,useImperativeHandle:function(S,D,T){return T=T!=null?T.concat([S]):null,Ic(4,36,pg.bind(null,D,S),T)},useLayoutEffect:function(S,D){return Ic(4,36,S,D)},useMemo:function(S,D){var T=pp();D=D===void 0?null:D;var j=T.memoizedState;return j!==null&&D!==null&&Eu(D,j[1])?j[0]:(S=S(),T.memoizedState=[S,D],S)},useReducer:Cs,useRef:function(){return pp().memoizedState},useState:Ag,useDebugValue:hg,useResponder:lg,useDeferredValue:function(S,D){var T=Ag(S),j=T[0],Y=T[1];return bm(function(){a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(S)}finally{Hs.suspense=Ae}})},[S,D]),j},useTransition:function(S){var D=Ag(!1),T=D[0],j=D[1];return[xm(function(Y){j(!0),a.unstable_next(function(){var Ae=Hs.suspense;Hs.suspense=S===void 0?null:S;try{j(!1),Y()}finally{Hs.suspense=Ae}})},[S,T]),T]}},Aa=null,Bc=null,Il=!1;function Iu(S,D){var T=Dl(5,null,null,0);T.elementType="DELETED",T.type="DELETED",T.stateNode=D,T.return=S,T.effectTag=8,S.lastEffect!==null?(S.lastEffect.nextEffect=T,S.lastEffect=T):S.firstEffect=S.lastEffect=T}function dg(S,D){switch(S.tag){case 5:return D=io(D,S.type,S.pendingProps),D!==null?(S.stateNode=D,!0):!1;case 6:return D=Pi(D,S.pendingProps),D!==null?(S.stateNode=D,!0):!1;case 13:return!1;default:return!1}}function NA(S){if(Il){var D=Bc;if(D){var T=D;if(!dg(S,D)){if(D=cc(T),!D||!dg(S,D)){S.effectTag=S.effectTag&-1025|2,Il=!1,Aa=S;return}Iu(Aa,T)}Aa=S,Bc=cu(D)}else S.effectTag=S.effectTag&-1025|2,Il=!1,Aa=S}}function gp(S){for(S=S.return;S!==null&&S.tag!==5&&S.tag!==3&&S.tag!==13;)S=S.return;Aa=S}function ja(S){if(!y||S!==Aa)return!1;if(!Il)return gp(S),Il=!0,!1;var D=S.type;if(S.tag!==5||D!=="head"&&D!=="body"&&!ke(D,S.memoizedProps))for(D=Bc;D;)Iu(S,D),D=cc(D);if(gp(S),S.tag===13){if(!y)throw Error(n(316));if(S=S.memoizedState,S=S!==null?S.dehydrated:null,!S)throw Error(n(317));Bc=Os(S)}else Bc=Aa?cc(S.stateNode):null;return!0}function mg(){y&&(Bc=Aa=null,Il=!1)}var dp=u.ReactCurrentOwner,Go=!1;function ws(S,D,T,j){D.child=S===null?sg(D,null,T,j):gu(D,S.child,T,j)}function Ii(S,D,T,j,Y){T=T.render;var Ae=D.ref;return ds(D,Y),j=cg(S,D,T,j,Ae,Y),S!==null&&!Go?(D.updateQueue=S.updateQueue,D.effectTag&=-517,S.expirationTime<=Y&&(S.expirationTime=0),si(S,D,Y)):(D.effectTag|=1,ws(S,D,j,Y),D.child)}function Qm(S,D,T,j,Y,Ae){if(S===null){var De=T.type;return typeof De=="function"&&!Qw(De)&&De.defaultProps===void 0&&T.compare===null&&T.defaultProps===void 0?(D.tag=15,D.type=De,Fm(S,D,De,j,Y,Ae)):(S=jm(T.type,null,j,null,D.mode,Ae),S.ref=D.ref,S.return=D,D.child=S)}return De=S.child,YD)&&HA.set(S,D)))}}function Dg(S,D){S.expirationTimeS?D:S)}function fo(S){if(S.lastExpiredTime!==0)S.callbackExpirationTime=1073741823,S.callbackPriority=99,S.callbackNode=pu(Sw.bind(null,S));else{var D=_m(S),T=S.callbackNode;if(D===0)T!==null&&(S.callbackNode=null,S.callbackExpirationTime=0,S.callbackPriority=90);else{var j=ga();if(D===1073741823?j=99:D===1||D===2?j=95:(j=10*(1073741821-D)-10*(1073741821-j),j=0>=j?99:250>=j?98:5250>=j?97:95),T!==null){var Y=S.callbackPriority;if(S.callbackExpirationTime===D&&Y>=j)return;T!==PA&&Ce(T)}S.callbackExpirationTime=D,S.callbackPriority=j,D=D===1073741823?pu(Sw.bind(null,S)):gc(j,Wv.bind(null,S),{timeout:10*(1073741821-D)-Li()}),S.callbackNode=D}}}function Wv(S,D){if(Um=0,D)return D=ga(),Gm(S,D),fo(S),null;var T=_m(S);if(T!==0){if(D=S.callbackNode,(yr&(rs|js))!==En)throw Error(n(327));if(Bp(),S===gi&&T===ns||Su(S,T),Or!==null){var j=yr;yr|=rs;var Y=qA(S);do try{pF();break}catch(vt){GA(S,vt)}while(1);if(la(),yr=j,Cp.current=Y,Yi===Nm)throw D=Lm,Su(S,T),KA(S,T),fo(S),D;if(Or===null)switch(Y=S.finishedWork=S.current.alternate,S.finishedExpirationTime=T,j=Yi,gi=null,j){case Bu:case Nm:throw Error(n(345));case Bi:Gm(S,2=T){S.lastPingedTime=T,Su(S,T);break}}if(Ae=_m(S),Ae!==0&&Ae!==T)break;if(j!==0&&j!==T){S.lastPingedTime=j;break}S.timeoutHandle=Te(Pu.bind(null,S),Y);break}Pu(S);break;case vl:if(KA(S,T),j=S.lastSuspendedTime,T===j&&(S.nextKnownPendingLevel=bw(Y)),UA&&(Y=S.lastPingedTime,Y===0||Y>=T)){S.lastPingedTime=T,Su(S,T);break}if(Y=_m(S),Y!==0&&Y!==T)break;if(j!==0&&j!==T){S.lastPingedTime=j;break}if(MA!==1073741823?j=10*(1073741821-MA)-Li():Ya===1073741823?j=0:(j=10*(1073741821-Ya)-5e3,Y=Li(),T=10*(1073741821-T)-Y,j=Y-j,0>j&&(j=0),j=(120>j?120:480>j?480:1080>j?1080:1920>j?1920:3e3>j?3e3:4320>j?4320:1960*ww(j/1960))-j,T=j?j=0:(Y=De.busyDelayMs|0,Ae=Li()-(10*(1073741821-Ae)-(De.timeoutMs|0||5e3)),j=Ae<=Y?0:Y+j-Ae),10 component higher in the tree to provide a loading indicator or placeholder to display.`+ml(Y))}Yi!==Sc&&(Yi=Bi),Ae=Eg(Ae,Y),wt=j;do{switch(wt.tag){case 3:De=Ae,wt.effectTag|=4096,wt.expirationTime=D;var Ve=qv(wt,De,D);It(wt,Ve);break e;case 1:De=Ae;var ft=wt.type,Wt=wt.stateNode;if((wt.effectTag&64)===0&&(typeof ft.getDerivedStateFromError=="function"||Wt!==null&&typeof Wt.componentDidCatch=="function"&&(Du===null||!Du.has(Wt)))){wt.effectTag|=4096,wt.expirationTime=D;var vr=Yv(wt,De,D);It(wt,vr);break e}}wt=wt.return}while(wt!==null)}Or=zv(Or)}catch(Pn){D=Pn;continue}break}while(1)}function qA(){var S=Cp.current;return Cp.current=wu,S===null?wu:S}function Pw(S,D){Swp&&(wp=S)}function fF(){for(;Or!==null;)Or=Jv(Or)}function pF(){for(;Or!==null&&!Rt();)Or=Jv(Or)}function Jv(S){var D=Zv(S.alternate,S,ns);return S.memoizedProps=S.pendingProps,D===null&&(D=zv(S)),Iw.current=null,D}function zv(S){Or=S;do{var D=Or.alternate;if(S=Or.return,(Or.effectTag&2048)===0){e:{var T=D;D=Or;var j=ns,Y=D.pendingProps;switch(D.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:ii(D.type)&&Ma(D);break;case 3:yc(D),hr(D),Y=D.stateNode,Y.pendingContext&&(Y.context=Y.pendingContext,Y.pendingContext=null),(T===null||T.child===null)&&ja(D)&&pa(D),Bl(D);break;case 5:ag(D);var Ae=ca(mc.current);if(j=D.type,T!==null&&D.stateNode!=null)ts(T,D,j,Y,Ae),T.ref!==D.ref&&(D.effectTag|=128);else if(Y){if(T=ca(uo.current),ja(D)){if(Y=D,!y)throw Error(n(175));T=lp(Y.stateNode,Y.type,Y.memoizedProps,Ae,T,Y),Y.updateQueue=T,T=T!==null,T&&pa(D)}else{var De=At(j,Y,Ae,T,D);vc(De,D,!1,!1),D.stateNode=De,at(De,j,Y,Ae,T)&&pa(D)}D.ref!==null&&(D.effectTag|=128)}else if(D.stateNode===null)throw Error(n(166));break;case 6:if(T&&D.stateNode!=null)qr(T,D,T.memoizedProps,Y);else{if(typeof Y!="string"&&D.stateNode===null)throw Error(n(166));if(T=ca(mc.current),Ae=ca(uo.current),ja(D)){if(T=D,!y)throw Error(n(176));(T=cp(T.stateNode,T.memoizedProps,T))&&pa(D)}else D.stateNode=He(Y,T,Ae,D)}break;case 11:break;case 13:if(Vn($n,D),Y=D.memoizedState,(D.effectTag&64)!==0){D.expirationTime=j;break e}Y=Y!==null,Ae=!1,T===null?D.memoizedProps.fallback!==void 0&&ja(D):(j=T.memoizedState,Ae=j!==null,Y||j===null||(j=T.child.sibling,j!==null&&(De=D.firstEffect,De!==null?(D.firstEffect=j,j.nextEffect=De):(D.firstEffect=D.lastEffect=j,j.nextEffect=null),j.effectTag=8))),Y&&!Ae&&(D.mode&2)!==0&&(T===null&&D.memoizedProps.unstable_avoidThisFallback!==!0||($n.current&1)!==0?Yi===Bu&&(Yi=ha):((Yi===Bu||Yi===ha)&&(Yi=vl),wp!==0&&gi!==null&&(KA(gi,ns),eD(gi,wp)))),P&&Y&&(D.effectTag|=4),w&&(Y||Ae)&&(D.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:yc(D),Bl(D);break;case 10:wi(D);break;case 9:break;case 14:break;case 17:ii(D.type)&&Ma(D);break;case 19:if(Vn($n,D),Y=D.memoizedState,Y===null)break;if(Ae=(D.effectTag&64)!==0,De=Y.rendering,De===null){if(Ae)Dc(Y,!1);else if(Yi!==Bu||T!==null&&(T.effectTag&64)!==0)for(T=D.child;T!==null;){if(De=fp(T),De!==null){for(D.effectTag|=64,Dc(Y,!1),T=De.updateQueue,T!==null&&(D.updateQueue=T,D.effectTag|=4),Y.lastEffect===null&&(D.firstEffect=null),D.lastEffect=Y.lastEffect,T=j,Y=D.child;Y!==null;)Ae=Y,j=T,Ae.effectTag&=2,Ae.nextEffect=null,Ae.firstEffect=null,Ae.lastEffect=null,De=Ae.alternate,De===null?(Ae.childExpirationTime=0,Ae.expirationTime=j,Ae.child=null,Ae.memoizedProps=null,Ae.memoizedState=null,Ae.updateQueue=null,Ae.dependencies=null):(Ae.childExpirationTime=De.childExpirationTime,Ae.expirationTime=De.expirationTime,Ae.child=De.child,Ae.memoizedProps=De.memoizedProps,Ae.memoizedState=De.memoizedState,Ae.updateQueue=De.updateQueue,j=De.dependencies,Ae.dependencies=j===null?null:{expirationTime:j.expirationTime,firstContext:j.firstContext,responders:j.responders}),Y=Y.sibling;On($n,$n.current&1|2,D),D=D.child;break e}T=T.sibling}}else{if(!Ae)if(T=fp(De),T!==null){if(D.effectTag|=64,Ae=!0,T=T.updateQueue,T!==null&&(D.updateQueue=T,D.effectTag|=4),Dc(Y,!0),Y.tail===null&&Y.tailMode==="hidden"&&!De.alternate){D=D.lastEffect=Y.lastEffect,D!==null&&(D.nextEffect=null);break}}else Li()>Y.tailExpiration&&1Y&&(Y=j),De>Y&&(Y=De),Ae=Ae.sibling;T.childExpirationTime=Y}if(D!==null)return D;S!==null&&(S.effectTag&2048)===0&&(S.firstEffect===null&&(S.firstEffect=Or.firstEffect),Or.lastEffect!==null&&(S.lastEffect!==null&&(S.lastEffect.nextEffect=Or.firstEffect),S.lastEffect=Or.lastEffect),1S?D:S}function Pu(S){var D=_o();return lo(99,hF.bind(null,S,D)),null}function hF(S,D){do Bp();while(Bg!==null);if((yr&(rs|js))!==En)throw Error(n(327));var T=S.finishedWork,j=S.finishedExpirationTime;if(T===null)return null;if(S.finishedWork=null,S.finishedExpirationTime=0,T===S.current)throw Error(n(177));S.callbackNode=null,S.callbackExpirationTime=0,S.callbackPriority=90,S.nextKnownPendingLevel=0;var Y=bw(T);if(S.firstPendingTime=Y,j<=S.lastSuspendedTime?S.firstSuspendedTime=S.lastSuspendedTime=S.nextKnownPendingLevel=0:j<=S.firstSuspendedTime&&(S.firstSuspendedTime=j-1),j<=S.lastPingedTime&&(S.lastPingedTime=0),j<=S.lastExpiredTime&&(S.lastExpiredTime=0),S===gi&&(Or=gi=null,ns=0),1=T?ln(S,D,T):(On($n,$n.current&1,D),D=si(S,D,T),D!==null?D.sibling:null);On($n,$n.current&1,D);break;case 19:if(j=D.childExpirationTime>=T,(S.effectTag&64)!==0){if(j)return Ga(S,D,T);D.effectTag|=64}if(Y=D.memoizedState,Y!==null&&(Y.rendering=null,Y.tail=null),On($n,$n.current,D),!j)return null}return si(S,D,T)}Go=!1}}else Go=!1;switch(D.expirationTime=0,D.tag){case 2:if(j=D.type,S!==null&&(S.alternate=null,D.alternate=null,D.effectTag|=2),S=D.pendingProps,Y=Oe(D,Mn.current),ds(D,T),Y=cg(null,D,j,S,Y,T),D.effectTag|=1,typeof Y=="object"&&Y!==null&&typeof Y.render=="function"&&Y.$$typeof===void 0){if(D.tag=1,yw(),ii(j)){var Ae=!0;Ac(D)}else Ae=!1;D.memoizedState=Y.state!==null&&Y.state!==void 0?Y.state:null;var De=j.getDerivedStateFromProps;typeof De=="function"&&er(D,j,De,S),Y.updater=$r,D.stateNode=Y,Y._reactInternalFiber=D,jo(D,j,S,T),D=yp(null,D,j,!0,Ae,T)}else D.tag=0,ws(null,D,Y,T),D=D.child;return D;case 16:if(Y=D.elementType,S!==null&&(S.alternate=null,D.alternate=null,D.effectTag|=2),S=D.pendingProps,me(Y),Y._status!==1)throw Y._result;switch(Y=Y._result,D.type=Y,Ae=D.tag=wF(Y),S=Ci(Y,S),Ae){case 0:D=LA(null,D,Y,S,T);break;case 1:D=mp(null,D,Y,S,T);break;case 11:D=Ii(null,D,Y,S,T);break;case 14:D=Qm(null,D,Y,Ci(Y.type,S),j,T);break;default:throw Error(n(306,Y,""))}return D;case 0:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),LA(S,D,j,Y,T);case 1:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),mp(S,D,j,Y,T);case 3:if(yg(D),j=D.updateQueue,j===null)throw Error(n(282));if(Y=D.memoizedState,Y=Y!==null?Y.element:null,ye(D,j,D.pendingProps,null,T),j=D.memoizedState.element,j===Y)mg(),D=si(S,D,T);else{if((Y=D.stateNode.hydrate)&&(y?(Bc=cu(D.stateNode.containerInfo),Aa=D,Y=Il=!0):Y=!1),Y)for(T=sg(D,null,j,T),D.child=T;T;)T.effectTag=T.effectTag&-3|1024,T=T.sibling;else ws(S,D,j,T),mg();D=D.child}return D;case 5:return Pm(D),S===null&&NA(D),j=D.type,Y=D.pendingProps,Ae=S!==null?S.memoizedProps:null,De=Y.children,ke(j,Y)?De=null:Ae!==null&&ke(j,Ae)&&(D.effectTag|=16),qo(S,D),D.mode&4&&T!==1&&xe(j,Y)?(D.expirationTime=D.childExpirationTime=1,D=null):(ws(S,D,De,T),D=D.child),D;case 6:return S===null&&NA(D),null;case 13:return ln(S,D,T);case 4:return og(D,D.stateNode.containerInfo),j=D.pendingProps,S===null?D.child=gu(D,null,j,T):ws(S,D,j,T),D.child;case 11:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),Ii(S,D,j,Y,T);case 7:return ws(S,D,D.pendingProps,T),D.child;case 8:return ws(S,D,D.pendingProps.children,T),D.child;case 12:return ws(S,D,D.pendingProps.children,T),D.child;case 10:e:{if(j=D.type._context,Y=D.pendingProps,De=D.memoizedProps,Ae=Y.value,Ho(D,Ae),De!==null){var vt=De.value;if(Ae=hs(vt,Ae)?0:(typeof j._calculateChangedBits=="function"?j._calculateChangedBits(vt,Ae):1073741823)|0,Ae===0){if(De.children===Y.children&&!_i.current){D=si(S,D,T);break e}}else for(vt=D.child,vt!==null&&(vt.return=D);vt!==null;){var wt=vt.dependencies;if(wt!==null){De=vt.child;for(var xt=wt.firstContext;xt!==null;){if(xt.context===j&&(xt.observedBits&Ae)!==0){vt.tag===1&&(xt=ys(T,null),xt.tag=2,tt(vt,xt)),vt.expirationTime"u")return!1;var D=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(D.isDisabled||!D.supportsFiber)return!0;try{var T=D.inject(S);xw=function(j){try{D.onCommitFiberRoot(T,j,void 0,(j.current.effectTag&64)===64)}catch{}},kw=function(j){try{D.onCommitFiberUnmount(T,j)}catch{}}}catch{}return!0}function CF(S,D,T,j){this.tag=S,this.key=T,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=D,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=j,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Dl(S,D,T,j){return new CF(S,D,T,j)}function Qw(S){return S=S.prototype,!(!S||!S.isReactComponent)}function wF(S){if(typeof S=="function")return Qw(S)?1:0;if(S!=null){if(S=S.$$typeof,S===L)return 11;if(S===te)return 14}return 2}function WA(S,D){var T=S.alternate;return T===null?(T=Dl(S.tag,D,S.key,S.mode),T.elementType=S.elementType,T.type=S.type,T.stateNode=S.stateNode,T.alternate=S,S.alternate=T):(T.pendingProps=D,T.effectTag=0,T.nextEffect=null,T.firstEffect=null,T.lastEffect=null),T.childExpirationTime=S.childExpirationTime,T.expirationTime=S.expirationTime,T.child=S.child,T.memoizedProps=S.memoizedProps,T.memoizedState=S.memoizedState,T.updateQueue=S.updateQueue,D=S.dependencies,T.dependencies=D===null?null:{expirationTime:D.expirationTime,firstContext:D.firstContext,responders:D.responders},T.sibling=S.sibling,T.index=S.index,T.ref=S.ref,T}function jm(S,D,T,j,Y,Ae){var De=2;if(j=S,typeof S=="function")Qw(S)&&(De=1);else if(typeof S=="string")De=5;else e:switch(S){case E:return bu(T.children,Y,Ae,D);case R:De=8,Y|=7;break;case I:De=8,Y|=1;break;case v:return S=Dl(12,T,D,Y|8),S.elementType=v,S.type=v,S.expirationTime=Ae,S;case U:return S=Dl(13,T,D,Y),S.type=U,S.elementType=U,S.expirationTime=Ae,S;case J:return S=Dl(19,T,D,Y),S.elementType=J,S.expirationTime=Ae,S;default:if(typeof S=="object"&&S!==null)switch(S.$$typeof){case x:De=10;break e;case C:De=9;break e;case L:De=11;break e;case te:De=14;break e;case ae:De=16,j=null;break e}throw Error(n(130,S==null?S:typeof S,""))}return D=Dl(De,T,D,Y),D.elementType=S,D.type=j,D.expirationTime=Ae,D}function bu(S,D,T,j){return S=Dl(7,S,j,D),S.expirationTime=T,S}function Fw(S,D,T){return S=Dl(6,S,null,D),S.expirationTime=T,S}function Rw(S,D,T){return D=Dl(4,S.children!==null?S.children:[],S.key,D),D.expirationTime=T,D.stateNode={containerInfo:S.containerInfo,pendingChildren:null,implementation:S.implementation},D}function IF(S,D,T){this.tag=D,this.current=null,this.containerInfo=S,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=je,this.pendingContext=this.context=null,this.hydrate=T,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function $v(S,D){var T=S.firstSuspendedTime;return S=S.lastSuspendedTime,T!==0&&T>=D&&S<=D}function KA(S,D){var T=S.firstSuspendedTime,j=S.lastSuspendedTime;TD||T===0)&&(S.lastSuspendedTime=D),D<=S.lastPingedTime&&(S.lastPingedTime=0),D<=S.lastExpiredTime&&(S.lastExpiredTime=0)}function eD(S,D){D>S.firstPendingTime&&(S.firstPendingTime=D);var T=S.firstSuspendedTime;T!==0&&(D>=T?S.firstSuspendedTime=S.lastSuspendedTime=S.nextKnownPendingLevel=0:D>=S.lastSuspendedTime&&(S.lastSuspendedTime=D+1),D>S.nextKnownPendingLevel&&(S.nextKnownPendingLevel=D))}function Gm(S,D){var T=S.lastExpiredTime;(T===0||T>D)&&(S.lastExpiredTime=D)}function tD(S){var D=S._reactInternalFiber;if(D===void 0)throw typeof S.render=="function"?Error(n(188)):Error(n(268,Object.keys(S)));return S=Ee(D),S===null?null:S.stateNode}function rD(S,D){S=S.memoizedState,S!==null&&S.dehydrated!==null&&S.retryTime{"use strict";SEe.exports=DEe()});var xEe=_((yKt,bEe)=>{"use strict";var Hyt={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};bEe.exports=Hyt});var REe=_((EKt,FEe)=>{"use strict";var jyt=Object.assign||function(t){for(var e=1;e"}}]),t}(),kEe=function(){Wk(t,null,[{key:"fromJS",value:function(r){var o=r.width,a=r.height;return new t(o,a)}}]);function t(e,r){b6(this,t),this.width=e,this.height=r}return Wk(t,[{key:"fromJS",value:function(r){r(this.width,this.height)}},{key:"toString",value:function(){return""}}]),t}(),QEe=function(){function t(e,r){b6(this,t),this.unit=e,this.value=r}return Wk(t,[{key:"fromJS",value:function(r){r(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case tu.UNIT_POINT:return String(this.value);case tu.UNIT_PERCENT:return this.value+"%";case tu.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),t}();FEe.exports=function(t,e){function r(u,A,p){var h=u[A];u[A]=function(){for(var E=arguments.length,I=Array(E),v=0;v1?I-1:0),x=1;x1&&arguments[1]!==void 0?arguments[1]:NaN,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,h=arguments.length>3&&arguments[3]!==void 0?arguments[3]:tu.DIRECTION_LTR;return u.call(this,A,p,h)}),jyt({Config:e.Config,Node:e.Node,Layout:t("Layout",Gyt),Size:t("Size",kEe),Value:t("Value",QEe),getInstanceCount:function(){return e.getInstanceCount.apply(e,arguments)}},tu)}});var TEe=_((exports,module)=>{(function(t,e){typeof define=="function"&&define.amd?define([],function(){return e}):typeof module=="object"&&module.exports?module.exports=e:(t.nbind=t.nbind||{}).init=e})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(t,e){return function(){t&&t.apply(this,arguments);try{Module.ccall("nbind_init")}catch(r){e(r);return}e(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module<"u"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof ve=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(e,r){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),e=nodePath.normalize(e);var o=nodeFS.readFileSync(e);return r?o:o.toString()},Module.readBinary=function(e){var r=Module.read(e,!0);return r.buffer||(r=new Uint8Array(r)),assert(r.buffer),r},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module<"u"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr<"u"&&(Module.printErr=printErr),typeof read<"u"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(e));var r=read(e,"binary");return assert(typeof r=="object"),r},typeof scriptArgs<"u"?Module.arguments=scriptArgs:typeof arguments<"u"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(t,e){quit(t)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),Module.readAsync=function(e,r,o){var a=new XMLHttpRequest;a.open("GET",e,!0),a.responseType="arraybuffer",a.onload=function(){a.status==200||a.status==0&&a.response?r(a.response):o()},a.onerror=o,a.send(null)},typeof arguments<"u"&&(Module.arguments=arguments),typeof console<"u")Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump<"u"?function(t){dump(t)}:function(t){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle>"u"&&(Module.setWindowTitle=function(t){document.title=t})}else throw"Unknown runtime environment. Where are we?";function globalEval(t){eval.call(null,t)}!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(t,e){throw e}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(t){return tempRet0=t,t},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(t){STACKTOP=t},getNativeTypeSize:function(t){switch(t){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(t[t.length-1]==="*")return Runtime.QUANTUM_SIZE;if(t[0]==="i"){var e=parseInt(t.substr(1));return assert(e%8===0),e/8}else return 0}}},getNativeFieldSize:function(t){return Math.max(Runtime.getNativeTypeSize(t),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(t,e){return e==="double"||e==="i64"?t&7&&(assert((t&7)===4),t+=4):assert((t&3)===0),t},getAlignSize:function(t,e,r){return!r&&(t=="i64"||t=="double")?8:t?Math.min(e||(t?Runtime.getNativeFieldSize(t):0),Runtime.QUANTUM_SIZE):Math.min(e,8)},dynCall:function(t,e,r){return r&&r.length?Module["dynCall_"+t].apply(null,[e].concat(r)):Module["dynCall_"+t].call(null,e)},functionPointers:[],addFunction:function(t){for(var e=0;e>2],r=(e+t+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=r,r>=TOTAL_MEMORY){var o=enlargeMemory();if(!o)return HEAP32[DYNAMICTOP_PTR>>2]=e,0}return e},alignMemory:function(t,e){var r=t=Math.ceil(t/(e||16))*(e||16);return r},makeBigInt:function(t,e,r){var o=r?+(t>>>0)+ +(e>>>0)*4294967296:+(t>>>0)+ +(e|0)*4294967296;return o},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(t,e){t||abort("Assertion failed: "+e)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(t){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(t){var e=Runtime.stackAlloc(t.length);return writeArrayToMemory(t,e),e},stringToC:function(t){var e=0;if(t!=null&&t!==0){var r=(t.length<<2)+1;e=Runtime.stackAlloc(r),stringToUTF8(t,e,r)}return e}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,o,a,n){var u=getCFunc(e),A=[],p=0;if(a)for(var h=0;h>0]=e;break;case"i8":HEAP8[t>>0]=e;break;case"i16":HEAP16[t>>1]=e;break;case"i32":HEAP32[t>>2]=e;break;case"i64":tempI64=[e>>>0,(tempDouble=e,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[t>>2]=tempI64[0],HEAP32[t+4>>2]=tempI64[1];break;case"float":HEAPF32[t>>2]=e;break;case"double":HEAPF64[t>>3]=e;break;default:abort("invalid type for setValue: "+r)}}Module.setValue=setValue;function getValue(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return HEAP8[t>>0];case"i8":return HEAP8[t>>0];case"i16":return HEAP16[t>>1];case"i32":return HEAP32[t>>2];case"i64":return HEAP32[t>>2];case"float":return HEAPF32[t>>2];case"double":return HEAPF64[t>>3];default:abort("invalid type for setValue: "+e)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(t,e,r,o){var a,n;typeof t=="number"?(a=!0,n=t):(a=!1,n=t.length);var u=typeof e=="string"?e:null,A;if(r==ALLOC_NONE?A=o:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][r===void 0?ALLOC_STATIC:r](Math.max(n,u?1:e.length)),a){var o=A,p;for(assert((A&3)==0),p=A+(n&-4);o>2]=0;for(p=A+n;o>0]=0;return A}if(u==="i8")return t.subarray||t.slice?HEAPU8.set(t,A):HEAPU8.set(new Uint8Array(t),A),A;for(var h=0,E,I,v;h>0],r|=o,!(o==0&&!e||(a++,e&&a==e)););e||(e=a);var n="";if(r<128){for(var u=1024,A;e>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(t,t+Math.min(e,u))),n=n?n+A:A,t+=u,e-=u;return n}return Module.UTF8ToString(t)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(t){for(var e="";;){var r=HEAP8[t++>>0];if(!r)return e;e+=String.fromCharCode(r)}}Module.AsciiToString=AsciiToString;function stringToAscii(t,e){return writeAsciiToMemory(t,e,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(t,e){for(var r=e;t[r];)++r;if(r-e>16&&t.subarray&&UTF8Decoder)return UTF8Decoder.decode(t.subarray(e,r));for(var o,a,n,u,A,p,h="";;){if(o=t[e++],!o)return h;if(!(o&128)){h+=String.fromCharCode(o);continue}if(a=t[e++]&63,(o&224)==192){h+=String.fromCharCode((o&31)<<6|a);continue}if(n=t[e++]&63,(o&240)==224?o=(o&15)<<12|a<<6|n:(u=t[e++]&63,(o&248)==240?o=(o&7)<<18|a<<12|n<<6|u:(A=t[e++]&63,(o&252)==248?o=(o&3)<<24|a<<18|n<<12|u<<6|A:(p=t[e++]&63,o=(o&1)<<30|a<<24|n<<18|u<<12|A<<6|p))),o<65536)h+=String.fromCharCode(o);else{var E=o-65536;h+=String.fromCharCode(55296|E>>10,56320|E&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(t){return UTF8ArrayToString(HEAPU8,t)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(t,e,r,o){if(!(o>0))return 0;for(var a=r,n=r+o-1,u=0;u=55296&&A<=57343&&(A=65536+((A&1023)<<10)|t.charCodeAt(++u)&1023),A<=127){if(r>=n)break;e[r++]=A}else if(A<=2047){if(r+1>=n)break;e[r++]=192|A>>6,e[r++]=128|A&63}else if(A<=65535){if(r+2>=n)break;e[r++]=224|A>>12,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=2097151){if(r+3>=n)break;e[r++]=240|A>>18,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=67108863){if(r+4>=n)break;e[r++]=248|A>>24,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else{if(r+5>=n)break;e[r++]=252|A>>30,e[r++]=128|A>>24&63,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}}return e[r]=0,r-a}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(t,e,r){return stringToUTF8Array(t,HEAPU8,e,r)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(t){for(var e=0,r=0;r=55296&&o<=57343&&(o=65536+((o&1023)<<10)|t.charCodeAt(++r)&1023),o<=127?++e:o<=2047?e+=2:o<=65535?e+=3:o<=2097151?e+=4:o<=67108863?e+=5:e+=6}return e}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function demangle(t){var e=Module.___cxa_demangle||Module.__cxa_demangle;if(e){try{var r=t.substr(1),o=lengthBytesUTF8(r)+1,a=_malloc(o);stringToUTF8(r,a,o);var n=_malloc(4),u=e(a,0,0,n);if(getValue(n,"i32")===0&&u)return Pointer_stringify(u)}catch{}finally{a&&_free(a),n&&_free(n),u&&_free(u)}return t}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),t}function demangleAll(t){var e=/__Z[\w\d_]+/g;return t.replace(e,function(r){var o=demangle(r);return r===o?r:r+" ["+o+"]"})}function jsStackTrace(){var t=new Error;if(!t.stack){try{throw new Error(0)}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function stackTrace(){var t=jsStackTrace();return Module.extraStackTrace&&(t+=` +`+Module.extraStackTrace()),demangleAll(t)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var e=t.shift();if(typeof e=="function"){e();continue}var r=e.func;typeof r=="number"?e.arg===void 0?Module.dynCall_v(r):Module.dynCall_vi(r,e.arg):r(e.arg===void 0?null:e.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(t){__ATPRERUN__.unshift(t)}Module.addOnPreRun=addOnPreRun;function addOnInit(t){__ATINIT__.unshift(t)}Module.addOnInit=addOnInit;function addOnPreMain(t){__ATMAIN__.unshift(t)}Module.addOnPreMain=addOnPreMain;function addOnExit(t){__ATEXIT__.unshift(t)}Module.addOnExit=addOnExit;function addOnPostRun(t){__ATPOSTRUN__.unshift(t)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(t,e,r){var o=r>0?r:lengthBytesUTF8(t)+1,a=new Array(o),n=stringToUTF8Array(t,a,0,a.length);return e&&(a.length=n),a}Module.intArrayFromString=intArrayFromString;function intArrayToString(t){for(var e=[],r=0;r255&&(o&=255),e.push(String.fromCharCode(o))}return e.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(t,e,r){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var o,a;r&&(a=e+lengthBytesUTF8(t),o=HEAP8[a]),stringToUTF8(t,e,1/0),r&&(HEAP8[a]=o)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(t,e){HEAP8.set(t,e)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(t,e,r){for(var o=0;o>0]=t.charCodeAt(o);r||(HEAP8[e>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function t(e,r){var o=e>>>16,a=e&65535,n=r>>>16,u=r&65535;return a*u+(o*u+a*n<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(t){return froundBuffer[0]=t,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(t){t=t>>>0;for(var e=0;e<32;e++)if(t&1<<31-e)return e;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(t){return t<0?Math.ceil(t):Math.floor(t)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(t){return t}function addRunDependency(t){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(t){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var e=dependenciesFulfilled;dependenciesFulfilled=null,e()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(t,e,r,o,a,n,u,A){return _nbind.callbackSignatureList[t].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(t,e,r,o,a,n,u,A){return ASM_CONSTS[t](e,r,o,a,n,u,A)}function _emscripten_asm_const_iiiii(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiidddddd(t,e,r,o,a,n,u,A,p){return ASM_CONSTS[t](e,r,o,a,n,u,A,p)}function _emscripten_asm_const_iiididi(t,e,r,o,a,n,u){return ASM_CONSTS[t](e,r,o,a,n,u)}function _emscripten_asm_const_iiii(t,e,r,o){return ASM_CONSTS[t](e,r,o)}function _emscripten_asm_const_iiiid(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiiiii(t,e,r,o,a,n){return ASM_CONSTS[t](e,r,o,a,n)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(t,e){__ATEXIT__.unshift({func:t,arg:e})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(t,e,r,o){var a=arguments.length,n=a<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,r):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(t,e,r,o);else for(var A=t.length-1;A>=0;A--)(u=t[A])&&(n=(a<3?u(n):a>3?u(e,r,n):u(e,r))||n);return a>3&&n&&Object.defineProperty(e,r,n),n}function _defineHidden(t){return function(e,r){Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:t,writable:!0})}}var _nbind={};function __nbind_free_external(t){_nbind.externalList[t].dereference(t)}function __nbind_reference_external(t){_nbind.externalList[t].reference()}function _llvm_stackrestore(t){var e=_llvm_stacksave,r=e.LLVM_SAVEDSTACKS[t];e.LLVM_SAVEDSTACKS.splice(t,1),Runtime.stackRestore(r)}function __nbind_register_pool(t,e,r,o){_nbind.Pool.pageSize=t,_nbind.Pool.usedPtr=e/4,_nbind.Pool.rootPtr=r,_nbind.Pool.pagePtr=o/4,HEAP32[e/4]=16909060,HEAP8[e]==1&&(_nbind.bigEndian=!0),HEAP32[e/4]=0,_nbind.makeTypeKindTbl=(n={},n[1024]=_nbind.PrimitiveType,n[64]=_nbind.Int64Type,n[2048]=_nbind.BindClass,n[3072]=_nbind.BindClassPtr,n[4096]=_nbind.SharedClassPtr,n[5120]=_nbind.ArrayType,n[6144]=_nbind.ArrayType,n[7168]=_nbind.CStringType,n[9216]=_nbind.CallbackType,n[10240]=_nbind.BindType,n),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var a=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});a.proto=Module,_nbind.BindClass.list.push(a);var n}function _emscripten_set_main_loop_timing(t,e){if(Browser.mainLoop.timingMode=t,Browser.mainLoop.timingValue=e,!Browser.mainLoop.func)return 1;if(t==0)Browser.mainLoop.scheduler=function(){var u=Math.max(0,Browser.mainLoop.tickStartTime+e-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,u)},Browser.mainLoop.method="timeout";else if(t==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(t==2){if(!window.setImmediate){let n=function(u){u.source===window&&u.data===o&&(u.stopPropagation(),r.shift()())};var a=n,r=[],o="setimmediate";window.addEventListener("message",n,!0),window.setImmediate=function(A){r.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:o})):window.postMessage(o,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(t,e,r,o,a){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=t,Browser.mainLoop.arg=o;var n;typeof o<"u"?n=function(){Module.dynCall_vi(t,o)}:n=function(){Module.dynCall_v(t)};var u=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var p=Date.now(),h=Browser.mainLoop.queue.shift();if(h.func(h.arg),Browser.mainLoop.remainingBlockers){var E=Browser.mainLoop.remainingBlockers,I=E%1==0?E-1:Math.floor(E);h.counted?Browser.mainLoop.remainingBlockers=I:(I=I+.5,Browser.mainLoop.remainingBlockers=(8*E+I)/9)}if(console.log('main loop blocker "'+h.name+'" took '+(Date.now()-p)+" ms"),Browser.mainLoop.updateStatus(),u1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(n),!(u0?_emscripten_set_main_loop_timing(0,1e3/e):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),r)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var t=Browser.mainLoop.timingMode,e=Browser.mainLoop.timingValue,r=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(r,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(t,e),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var t=Module.statusMessage||"Please wait...",e=Browser.mainLoop.remainingBlockers,r=Browser.mainLoop.expectedBlockers;e?e"u"&&(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var t={};t.canHandle=function(n){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(n)},t.handle=function(n,u,A,p){var h=null;if(Browser.hasBlobConstructor)try{h=new Blob([n],{type:Browser.getMimetype(u)}),h.size!==n.length&&(h=new Blob([new Uint8Array(n).buffer],{type:Browser.getMimetype(u)}))}catch(x){Runtime.warnOnce("Blob constructor present but fails: "+x+"; falling back to blob builder")}if(!h){var E=new Browser.BlobBuilder;E.append(new Uint8Array(n).buffer),h=E.getBlob()}var I=Browser.URLObject.createObjectURL(h),v=new Image;v.onload=function(){assert(v.complete,"Image "+u+" could not be decoded");var C=document.createElement("canvas");C.width=v.width,C.height=v.height;var R=C.getContext("2d");R.drawImage(v,0,0),Module.preloadedImages[u]=C,Browser.URLObject.revokeObjectURL(I),A&&A(n)},v.onerror=function(C){console.log("Image "+I+" could not be decoded"),p&&p()},v.src=I},Module.preloadPlugins.push(t);var e={};e.canHandle=function(n){return!Module.noAudioDecoding&&n.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},e.handle=function(n,u,A,p){var h=!1;function E(R){h||(h=!0,Module.preloadedAudios[u]=R,A&&A(n))}function I(){h||(h=!0,Module.preloadedAudios[u]=new Audio,p&&p())}if(Browser.hasBlobConstructor){try{var v=new Blob([n],{type:Browser.getMimetype(u)})}catch{return I()}var x=Browser.URLObject.createObjectURL(v),C=new Audio;C.addEventListener("canplaythrough",function(){E(C)},!1),C.onerror=function(L){if(h)return;console.log("warning: browser could not fully decode audio "+u+", trying slower base64 approach");function U(J){for(var te="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ae="=",fe="",ce=0,me=0,he=0;he=6;){var Be=ce>>me-6&63;me-=6,fe+=te[Be]}return me==2?(fe+=te[(ce&3)<<4],fe+=ae+ae):me==4&&(fe+=te[(ce&15)<<2],fe+=ae),fe}C.src="data:audio/x-"+u.substr(-3)+";base64,"+U(n),E(C)},C.src=x,Browser.safeSetTimeout(function(){E(C)},1e4)}else return I()},Module.preloadPlugins.push(e);function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var o=Module.canvas;o&&(o.requestPointerLock=o.requestPointerLock||o.mozRequestPointerLock||o.webkitRequestPointerLock||o.msRequestPointerLock||function(){},o.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},o.exitPointerLock=o.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&o.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))},createContext:function(t,e,r,o){if(e&&Module.ctx&&t==Module.canvas)return Module.ctx;var a,n;if(e){var u={antialias:!1,alpha:!1};if(o)for(var A in o)u[A]=o[A];n=GL.createContext(t,u),n&&(a=GL.getContext(n).GLctx)}else a=t.getContext("2d");return a?(r&&(e||assert(typeof GLctx>"u","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=a,e&&GL.makeContextCurrent(n),Module.useWebGL=e,Browser.moduleContextCreatedCallbacks.forEach(function(p){p()}),Browser.init()),a):null},destroyContext:function(t,e,r){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(t,e,r){Browser.lockPointer=t,Browser.resizeCanvas=e,Browser.vrDevice=r,typeof Browser.lockPointer>"u"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas>"u"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice>"u"&&(Browser.vrDevice=null);var o=Module.canvas;function a(){Browser.isFullscreen=!1;var u=o.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===u?(o.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},o.exitFullscreen=o.exitFullscreen.bind(document),Browser.lockPointer&&o.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(u.parentNode.insertBefore(o,u),u.parentNode.removeChild(u),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(o)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",a,!1),document.addEventListener("mozfullscreenchange",a,!1),document.addEventListener("webkitfullscreenchange",a,!1),document.addEventListener("MSFullscreenChange",a,!1));var n=document.createElement("div");o.parentNode.insertBefore(n,o),n.appendChild(o),n.requestFullscreen=n.requestFullscreen||n.mozRequestFullScreen||n.msRequestFullscreen||(n.webkitRequestFullscreen?function(){n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(n.webkitRequestFullScreen?function(){n.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),r?n.requestFullscreen({vrDisplay:r}):n.requestFullscreen()},requestFullScreen:function(t,e,r){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(o,a,n){return Browser.requestFullscreen(o,a,n)},Browser.requestFullscreen(t,e,r)},nextRAF:0,fakeRequestAnimationFrame:function(t){var e=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=e+1e3/60;else for(;e+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var r=Math.max(Browser.nextRAF-e,0);setTimeout(t,r)},requestAnimationFrame:function t(e){typeof window>"u"?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(t){return function(){if(!ABORT)return t.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var t=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],t.forEach(function(e){e()})}},safeRequestAnimationFrame:function(t){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))})},safeSetTimeout:function(t,e){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))},e)},safeSetInterval:function(t,e){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&t()},e)},getMimetype:function(t){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[t.substr(t.lastIndexOf(".")+1)]},getUserMedia:function(t){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(t)},getMovementX:function(t){return t.movementX||t.mozMovementX||t.webkitMovementX||0},getMovementY:function(t){return t.movementY||t.mozMovementY||t.webkitMovementY||0},getMouseWheelDelta:function(t){var e=0;switch(t.type){case"DOMMouseScroll":e=t.detail;break;case"mousewheel":e=t.wheelDelta;break;case"wheel":e=t.deltaY;break;default:throw"unrecognized mouse wheel event: "+t.type}return e},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(t){if(Browser.pointerLock)t.type!="mousemove"&&"mozMovementX"in t?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(t),Browser.mouseMovementY=Browser.getMovementY(t)),typeof SDL<"u"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var e=Module.canvas.getBoundingClientRect(),r=Module.canvas.width,o=Module.canvas.height,a=typeof window.scrollX<"u"?window.scrollX:window.pageXOffset,n=typeof window.scrollY<"u"?window.scrollY:window.pageYOffset;if(t.type==="touchstart"||t.type==="touchend"||t.type==="touchmove"){var u=t.touch;if(u===void 0)return;var A=u.pageX-(a+e.left),p=u.pageY-(n+e.top);A=A*(r/e.width),p=p*(o/e.height);var h={x:A,y:p};if(t.type==="touchstart")Browser.lastTouches[u.identifier]=h,Browser.touches[u.identifier]=h;else if(t.type==="touchend"||t.type==="touchmove"){var E=Browser.touches[u.identifier];E||(E=h),Browser.lastTouches[u.identifier]=E,Browser.touches[u.identifier]=h}return}var I=t.pageX-(a+e.left),v=t.pageY-(n+e.top);I=I*(r/e.width),v=v*(o/e.height),Browser.mouseMovementX=I-Browser.mouseX,Browser.mouseMovementY=v-Browser.mouseY,Browser.mouseX=I,Browser.mouseY=v}},asyncLoad:function(t,e,r,o){var a=o?"":"al "+t;Module.readAsync(t,function(n){assert(n,'Loading data file "'+t+'" failed (no arrayBuffer).'),e(new Uint8Array(n)),a&&removeRunDependency(a)},function(n){if(r)r();else throw'Loading data file "'+t+'" failed.'}),a&&addRunDependency(a)},resizeListeners:[],updateResizeListeners:function(){var t=Module.canvas;Browser.resizeListeners.forEach(function(e){e(t.width,t.height)})},setCanvasSize:function(t,e,r){var o=Module.canvas;Browser.updateCanvasDimensions(o,t,e),r||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t&-8388609,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},updateCanvasDimensions:function(t,e,r){e&&r?(t.widthNative=e,t.heightNative=r):(e=t.widthNative,r=t.heightNative);var o=e,a=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(o/a>2];return e},getStr:function(){var t=Pointer_stringify(SYSCALLS.get());return t},get64:function(){var t=SYSCALLS.get(),e=SYSCALLS.get();return t>=0?assert(e===0):assert(e===-1),t},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD();return FS.close(r),0}catch(o){return(typeof FS>"u"||!(o instanceof FS.ErrnoError))&&abort(o),-o.errno}}function ___syscall54(t,e){SYSCALLS.varargs=e;try{return 0}catch(r){return(typeof FS>"u"||!(r instanceof FS.ErrnoError))&&abort(r),-r.errno}}function _typeModule(t){var e=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function r(p,h,E,I,v,x){if(h==1){var C=I&896;(C==128||C==256||C==384)&&(p="X const")}var R;return x?R=E.replace("X",p).replace("Y",v):R=p.replace("X",E).replace("Y",v),R.replace(/([*&]) (?=[*&])/g,"$1")}function o(p,h,E,I,v){throw new Error(p+" type "+E.replace("X",h+"?")+(I?" with flag "+I:"")+" in "+v)}function a(p,h,E,I,v,x,C,R){x===void 0&&(x="X"),R===void 0&&(R=1);var L=E(p);if(L)return L;var U=I(p),J=U.placeholderFlag,te=e[J];C&&te&&(x=r(C[2],C[0],x,te[0],"?",!0));var ae;J==0&&(ae="Unbound"),J>=10&&(ae="Corrupt"),R>20&&(ae="Deeply nested"),ae&&o(ae,p,x,J,v||"?");var fe=U.paramList[0],ce=a(fe,h,E,I,v,x,te,R+1),me,he={flags:te[0],id:p,name:"",paramList:[ce]},Be=[],we="?";switch(U.placeholderFlag){case 1:me=ce.spec;break;case 2:if((ce.flags&15360)==1024&&ce.spec.ptrSize==1){he.flags=7168;break}case 3:case 6:case 5:me=ce.spec,ce.flags&15360;break;case 8:we=""+U.paramList[1],he.paramList.push(U.paramList[1]);break;case 9:for(var g=0,Ee=U.paramList[1];g>2]=t),t}function _llvm_stacksave(){var t=_llvm_stacksave;return t.LLVM_SAVEDSTACKS||(t.LLVM_SAVEDSTACKS=[]),t.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),t.LLVM_SAVEDSTACKS.length-1}function ___syscall140(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=SYSCALLS.get(),u=SYSCALLS.get(),A=a;return FS.llseek(r,A,u),HEAP32[n>>2]=r.position,r.getdents&&A===0&&u===0&&(r.getdents=null),0}catch(p){return(typeof FS>"u"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall146(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.get(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(E,I){var v=___syscall146.buffers[E];assert(v),I===0||I===10?((E===1?Module.print:Module.printErr)(UTF8ArrayToString(v,0)),v.length=0):v.push(I)});for(var u=0;u>2],p=HEAP32[o+(u*8+4)>>2],h=0;h"u"||!(E instanceof FS.ErrnoError))&&abort(E),-E.errno}}function __nbind_finish(){for(var t=0,e=_nbind.BindClass.list;tt.pageSize/2||e>t.pageSize-r){var o=_nbind.typeNameTbl.NBind.proto;return o.lalloc(e)}else return HEAPU32[t.usedPtr]=r+e,t.rootPtr+r},t.lreset=function(e,r){var o=HEAPU32[t.pagePtr];if(o){var a=_nbind.typeNameTbl.NBind.proto;a.lreset(e,r)}else HEAPU32[t.usedPtr]=e},t}();_nbind.Pool=Pool;function constructType(t,e){var r=t==10240?_nbind.makeTypeNameTbl[e.name]||_nbind.BindType:_nbind.makeTypeKindTbl[t],o=new r(e);return typeIdTbl[e.id]=o,_nbind.typeNameTbl[e.name]=o,o}_nbind.constructType=constructType;function getType(t){return typeIdTbl[t]}_nbind.getType=getType;function queryType(t){var e=HEAPU8[t],r=_nbind.structureList[e][1];t/=4,r<0&&(++t,r=HEAPU32[t]+1);var o=Array.prototype.slice.call(HEAPU32.subarray(t+1,t+1+r));return e==9&&(o=[o[0],o.slice(1)]),{paramList:o,placeholderFlag:e}}_nbind.queryType=queryType;function getTypes(t,e){return t.map(function(r){return typeof r=="number"?_nbind.getComplexType(r,constructType,getType,queryType,e):_nbind.typeNameTbl[r]})}_nbind.getTypes=getTypes;function readTypeIdList(t,e){return Array.prototype.slice.call(HEAPU32,t/4,t/4+e)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(t){for(var e=t;HEAPU8[e++];);return String.fromCharCode.apply("",HEAPU8.subarray(t,e-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(t){var e={};if(t)for(;;){var r=HEAPU32[t/4];if(!r)break;e[readAsciiString(r)]=!0,t+=4}return e}_nbind.readPolicyList=readPolicyList;function getDynCall(t,e){var r={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},o=t.map(function(n){return r[n.name]||"i"}).join(""),a=Module["dynCall_"+o];if(!a)throw new Error("dynCall_"+o+" not found for "+e+"("+t.map(function(n){return n.name}).join(", ")+")");return a}_nbind.getDynCall=getDynCall;function addMethod(t,e,r,o){var a=t[e];t.hasOwnProperty(e)&&a?((a.arity||a.arity===0)&&(a=_nbind.makeOverloader(a,a.arity),t[e]=a),a.addMethod(r,o)):(r.arity=o,t[e]=r)}_nbind.addMethod=addMethod;function throwError(t){throw new Error(t)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.heap=HEAPU32,r.ptrSize=4,r}return e.prototype.needsWireRead=function(r){return!!this.wireRead||!!this.makeWireRead},e.prototype.needsWireWrite=function(r){return!!this.wireWrite||!!this.makeWireWrite},e}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(t){__extends(e,t);function e(r){var o=t.call(this,r)||this,a=r.flags&32?{32:HEAPF32,64:HEAPF64}:r.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return o.heap=a[r.ptrSize*8],o.ptrSize=r.ptrSize,o}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="number")return a;throw new Error("Type mismatch")}},e}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(t,e){if(t==null){if(e&&e.Nullable)return 0;throw new Error("Type mismatch")}if(e&&e.Strict){if(typeof t!="string")throw new Error("Type mismatch")}else t=t.toString();var r=Module.lengthBytesUTF8(t)+1,o=_nbind.Pool.lalloc(r);return Module.stringToUTF8Array(t,HEAPU8,o,r),o}_nbind.pushCString=pushCString;function popCString(t){return t===0?null:Module.Pointer_stringify(t)}_nbind.popCString=popCString;var CStringType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=popCString,r.wireWrite=pushCString,r.readResources=[_nbind.resources.pool],r.writeResources=[_nbind.resources.pool],r}return e.prototype.makeWireWrite=function(r,o){return function(a){return pushCString(a,o)}},e}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=function(o){return!!o},r}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireRead=function(r){return"!!("+r+")"},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="boolean")return a;throw new Error("Type mismatch")}||r},e}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function t(){}return t.prototype.persist=function(){this.__nbindState|=1},t}();_nbind.Wrapper=Wrapper;function makeBound(t,e){var r=function(o){__extends(a,o);function a(n,u,A,p){var h=o.call(this)||this;if(!(h instanceof a))return new(Function.prototype.bind.apply(a,Array.prototype.concat.apply([null],arguments)));var E=u,I=A,v=p;if(n!==_nbind.ptrMarker){var x=h.__nbindConstructor.apply(h,arguments);E=4608,v=HEAPU32[x/4],I=HEAPU32[x/4+1]}var C={configurable:!0,enumerable:!1,value:null,writable:!1},R={__nbindFlags:E,__nbindPtr:I};v&&(R.__nbindShared=v,_nbind.mark(h));for(var L=0,U=Object.keys(R);L>=1;var r=_nbind.valueList[t];return _nbind.valueList[t]=firstFreeValue,firstFreeValue=t,r}else{if(e)return _nbind.popShared(t,e);throw new Error("Invalid value slot "+t)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(t){return typeof t=="number"?t:pushValue(t)*4096+valueBase}function pop64(t){return t=3?u=Buffer.from(n):u=new Buffer(n),u.copy(o)}else getBuffer(o).set(n)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var t=0,e=dirtyList;t>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(t,e,r,o,a,n){try{Module.dynCall_viiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_vif(t,e,r){try{Module.dynCall_vif(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_vid(t,e,r){try{Module.dynCall_vid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_fiff(t,e,r,o){try{return Module.dynCall_fiff(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vi(t,e){try{Module.dynCall_vi(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_vii(t,e,r){try{Module.dynCall_vii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_ii(t,e){try{return Module.dynCall_ii(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_viddi(t,e,r,o,a){try{Module.dynCall_viddi(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_vidd(t,e,r,o){try{Module.dynCall_vidd(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iiii(t,e,r,o){try{return Module.dynCall_iiii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_diii(t,e,r,o){try{return Module.dynCall_diii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_di(t,e){try{return Module.dynCall_di(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_iid(t,e,r){try{return Module.dynCall_iid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iii(t,e,r){try{return Module.dynCall_iii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiddi(t,e,r,o,a,n){try{Module.dynCall_viiddi(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiiiii(t,e,r,o,a,n,u){try{Module.dynCall_viiiiii(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(t,e,r){try{return Module.dynCall_dii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_i(t){try{return Module.dynCall_i(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_iiiiii(t,e,r,o,a,n){try{return Module.dynCall_iiiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiid(t,e,r,o,a){try{Module.dynCall_viiid(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_viififi(t,e,r,o,a,n,u){try{Module.dynCall_viififi(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(t,e,r,o){try{Module.dynCall_viii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_v(t){try{Module.dynCall_v(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_viid(t,e,r,o){try{Module.dynCall_viid(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_idd(t,e,r){try{return Module.dynCall_idd(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiii(t,e,r,o,a){try{Module.dynCall_viiii(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(t,e,r){var o=new t.Int8Array(r),a=new t.Int16Array(r),n=new t.Int32Array(r),u=new t.Uint8Array(r),A=new t.Uint16Array(r),p=new t.Uint32Array(r),h=new t.Float32Array(r),E=new t.Float64Array(r),I=e.DYNAMICTOP_PTR|0,v=e.tempDoublePtr|0,x=e.ABORT|0,C=e.STACKTOP|0,R=e.STACK_MAX|0,L=e.cttz_i8|0,U=e.___dso_handle|0,J=0,te=0,ae=0,fe=0,ce=t.NaN,me=t.Infinity,he=0,Be=0,we=0,g=0,Ee=0,Se=0,le=t.Math.floor,ne=t.Math.abs,ee=t.Math.sqrt,Ie=t.Math.pow,Fe=t.Math.cos,At=t.Math.sin,H=t.Math.tan,at=t.Math.acos,Re=t.Math.asin,ke=t.Math.atan,xe=t.Math.atan2,He=t.Math.exp,Te=t.Math.log,Je=t.Math.ceil,je=t.Math.imul,b=t.Math.min,w=t.Math.max,P=t.Math.clz32,y=t.Math.fround,F=e.abort,z=e.assert,X=e.enlargeMemory,Z=e.getTotalMemory,ie=e.abortOnCannotGrowMemory,Pe=e.invoke_viiiii,Ne=e.invoke_vif,ot=e.invoke_vid,dt=e.invoke_fiff,Gt=e.invoke_vi,$t=e.invoke_vii,bt=e.invoke_ii,an=e.invoke_viddi,Qr=e.invoke_vidd,mr=e.invoke_iiii,br=e.invoke_diii,Wr=e.invoke_di,Kn=e.invoke_iid,Ns=e.invoke_iii,Ti=e.invoke_viiddi,ps=e.invoke_viiiiii,io=e.invoke_dii,Pi=e.invoke_i,Ls=e.invoke_iiiiii,so=e.invoke_viiid,cc=e.invoke_viififi,cu=e.invoke_viii,lp=e.invoke_v,cp=e.invoke_viid,Os=e.invoke_idd,Dn=e.invoke_viiii,oo=e._emscripten_asm_const_iiiii,Ms=e._emscripten_asm_const_iiidddddd,ml=e._emscripten_asm_const_iiiid,yl=e.__nbind_reference_external,ao=e._emscripten_asm_const_iiiiiiii,Vn=e._removeAccessorPrefix,On=e._typeModule,Ni=e.__nbind_register_pool,Mn=e.__decorate,_i=e._llvm_stackrestore,tr=e.___cxa_atexit,Oe=e.__extends,ii=e.__nbind_get_value_object,Ma=e.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,hr=e._emscripten_set_main_loop_timing,uc=e.__nbind_register_primitive,uu=e.__nbind_register_type,Ac=e._emscripten_memcpy_big,El=e.__nbind_register_function,DA=e.___setErrNo,Au=e.__nbind_register_class,Ce=e.__nbind_finish,Rt=e._abort,fc=e._nbind_value,Hi=e._llvm_stacksave,fu=e.___syscall54,Yt=e._defineHidden,Cl=e._emscripten_set_main_loop,SA=e._emscripten_get_now,up=e.__nbind_register_callback_signature,pc=e._emscripten_asm_const_iiiiii,PA=e.__nbind_free_external,Qn=e._emscripten_asm_const_iiii,hi=e._emscripten_asm_const_iiididi,hc=e.___syscall6,bA=e._atexit,sa=e.___syscall140,Li=e.___syscall146,_o=y(0);let Ze=y(0);function lo(s){s=s|0;var l=0;return l=C,C=C+s|0,C=C+15&-16,l|0}function gc(){return C|0}function pu(s){s=s|0,C=s}function ji(s,l){s=s|0,l=l|0,C=s,R=l}function hu(s,l){s=s|0,l=l|0,J||(J=s,te=l)}function xA(s){s=s|0,Se=s}function Ua(){return Se|0}function dc(){var s=0,l=0;Dr(8104,8,400)|0,Dr(8504,408,540)|0,s=9044,l=s+44|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o[9088]=0,o[9089]=1,n[2273]=0,n[2274]=948,n[2275]=948,tr(17,8104,U|0)|0}function hs(s){s=s|0,pt(s+948|0)}function _t(s){return s=y(s),((Du(s)|0)&2147483647)>>>0>2139095040|0}function Fn(s,l,c){s=s|0,l=l|0,c=c|0;e:do if(n[s+(l<<3)+4>>2]|0)s=s+(l<<3)|0;else{if((l|2|0)==3&&n[s+60>>2]|0){s=s+56|0;break}switch(l|0){case 0:case 2:case 4:case 5:{if(n[s+52>>2]|0){s=s+48|0;break e}break}default:}if(n[s+68>>2]|0){s=s+64|0;break}else{s=(l|1|0)==5?948:c;break}}while(0);return s|0}function Ci(s){s=s|0;var l=0;return l=pD(1e3)|0,oa(s,(l|0)!=0,2456),n[2276]=(n[2276]|0)+1,Dr(l|0,8104,1e3)|0,o[s+2>>0]|0&&(n[l+4>>2]=2,n[l+12>>2]=4),n[l+976>>2]=s,l|0}function oa(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,Eg(s,5,3197,f)),C=d}function co(){return Ci(956)|0}function Us(s){s=s|0;var l=0;return l=Kt(1e3)|0,aa(l,s),oa(n[s+976>>2]|0,1,2456),n[2276]=(n[2276]|0)+1,n[l+944>>2]=0,l|0}function aa(s,l){s=s|0,l=l|0;var c=0;Dr(s|0,l|0,948)|0,Rm(s+948|0,l+948|0),c=s+960|0,s=l+960|0,l=c+40|0;do n[c>>2]=n[s>>2],c=c+4|0,s=s+4|0;while((c|0)<(l|0))}function la(s){s=s|0;var l=0,c=0,f=0,d=0;if(l=s+944|0,c=n[l>>2]|0,c|0&&(Ho(c+948|0,s)|0,n[l>>2]=0),c=wi(s)|0,c|0){l=0;do n[(gs(s,l)|0)+944>>2]=0,l=l+1|0;while((l|0)!=(c|0))}c=s+948|0,f=n[c>>2]|0,d=s+952|0,l=n[d>>2]|0,(l|0)!=(f|0)&&(n[d>>2]=l+(~((l+-4-f|0)>>>2)<<2)),ds(c),hD(s),n[2276]=(n[2276]|0)+-1}function Ho(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0;f=n[s>>2]|0,k=s+4|0,c=n[k>>2]|0,m=c;e:do if((f|0)==(c|0))d=f,B=4;else for(s=f;;){if((n[s>>2]|0)==(l|0)){d=s,B=4;break e}if(s=s+4|0,(s|0)==(c|0)){s=0;break}}while(0);return(B|0)==4&&((d|0)!=(c|0)?(f=d+4|0,s=m-f|0,l=s>>2,l&&(Mw(d|0,f|0,s|0)|0,c=n[k>>2]|0),s=d+(l<<2)|0,(c|0)==(s|0)||(n[k>>2]=c+(~((c+-4-s|0)>>>2)<<2)),s=1):s=0),s|0}function wi(s){return s=s|0,(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2|0}function gs(s,l){s=s|0,l=l|0;var c=0;return c=n[s+948>>2]|0,(n[s+952>>2]|0)-c>>2>>>0>l>>>0?s=n[c+(l<<2)>>2]|0:s=0,s|0}function ds(s){s=s|0;var l=0,c=0,f=0,d=0;f=C,C=C+32|0,l=f,d=n[s>>2]|0,c=(n[s+4>>2]|0)-d|0,((n[s+8>>2]|0)-d|0)>>>0>c>>>0&&(d=c>>2,Ip(l,d,d,s+8|0),Bg(s,l),_A(l)),C=f}function ms(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;M=wi(s)|0;do if(M|0){if((n[(gs(s,0)|0)+944>>2]|0)==(s|0)){if(!(Ho(s+948|0,l)|0))break;Dr(l+400|0,8504,540)|0,n[l+944>>2]=0,Le(s);break}B=n[(n[s+976>>2]|0)+12>>2]|0,k=s+948|0,Q=(B|0)==0,c=0,m=0;do f=n[(n[k>>2]|0)+(m<<2)>>2]|0,(f|0)==(l|0)?Le(s):(d=Us(f)|0,n[(n[k>>2]|0)+(c<<2)>>2]=d,n[d+944>>2]=s,Q||TR[B&15](f,d,s,c),c=c+1|0),m=m+1|0;while((m|0)!=(M|0));if(c>>>0>>0){Q=s+948|0,k=s+952|0,B=c,c=n[k>>2]|0;do m=(n[Q>>2]|0)+(B<<2)|0,f=m+4|0,d=c-f|0,l=d>>2,l&&(Mw(m|0,f|0,d|0)|0,c=n[k>>2]|0),d=c,f=m+(l<<2)|0,(d|0)!=(f|0)&&(c=d+(~((d+-4-f|0)>>>2)<<2)|0,n[k>>2]=c),B=B+1|0;while((B|0)!=(M|0))}}while(0)}function _s(s){s=s|0;var l=0,c=0,f=0,d=0;Un(s,(wi(s)|0)==0,2491),Un(s,(n[s+944>>2]|0)==0,2545),l=s+948|0,c=n[l>>2]|0,f=s+952|0,d=n[f>>2]|0,(d|0)!=(c|0)&&(n[f>>2]=d+(~((d+-4-c|0)>>>2)<<2)),ds(l),l=s+976|0,c=n[l>>2]|0,Dr(s|0,8104,1e3)|0,o[c+2>>0]|0&&(n[s+4>>2]=2,n[s+12>>2]=4),n[l>>2]=c}function Un(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,Ao(s,5,3197,f)),C=d}function Sn(){return n[2276]|0}function ys(){var s=0;return s=pD(20)|0,We((s|0)!=0,2592),n[2277]=(n[2277]|0)+1,n[s>>2]=n[239],n[s+4>>2]=n[240],n[s+8>>2]=n[241],n[s+12>>2]=n[242],n[s+16>>2]=n[243],s|0}function We(s,l){s=s|0,l=l|0;var c=0,f=0;f=C,C=C+16|0,c=f,s||(n[c>>2]=l,Ao(0,5,3197,c)),C=f}function tt(s){s=s|0,hD(s),n[2277]=(n[2277]|0)+-1}function It(s,l){s=s|0,l=l|0;var c=0;l?(Un(s,(wi(s)|0)==0,2629),c=1):(c=0,l=0),n[s+964>>2]=l,n[s+988>>2]=c}function nr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+8|0,d=f+4|0,B=f,n[d>>2]=l,Un(s,(n[l+944>>2]|0)==0,2709),Un(s,(n[s+964>>2]|0)==0,2763),$(s),l=s+948|0,n[B>>2]=(n[l>>2]|0)+(c<<2),n[m>>2]=n[B>>2],ye(l,m,d)|0,n[(n[d>>2]|0)+944>>2]=s,Le(s),C=f}function $(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;if(c=wi(s)|0,c|0&&(n[(gs(s,0)|0)+944>>2]|0)!=(s|0)){f=n[(n[s+976>>2]|0)+12>>2]|0,d=s+948|0,m=(f|0)==0,l=0;do B=n[(n[d>>2]|0)+(l<<2)>>2]|0,k=Us(B)|0,n[(n[d>>2]|0)+(l<<2)>>2]=k,n[k+944>>2]=s,m||TR[f&15](B,k,s,l),l=l+1|0;while((l|0)!=(c|0))}}function ye(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,qe=0,Me=0,Qe=0,et=0,Xe=0;et=C,C=C+64|0,G=et+52|0,k=et+48|0,se=et+28|0,qe=et+24|0,Me=et+20|0,Qe=et,f=n[s>>2]|0,m=f,l=f+((n[l>>2]|0)-m>>2<<2)|0,f=s+4|0,d=n[f>>2]|0,B=s+8|0;do if(d>>>0<(n[B>>2]|0)>>>0){if((l|0)==(d|0)){n[l>>2]=n[c>>2],n[f>>2]=(n[f>>2]|0)+4;break}HA(s,l,d,l+4|0),l>>>0<=c>>>0&&(c=(n[f>>2]|0)>>>0>c>>>0?c+4|0:c),n[l>>2]=n[c>>2]}else{f=(d-m>>2)+1|0,d=N(s)|0,d>>>0>>0&&zr(s),O=n[s>>2]|0,M=(n[B>>2]|0)-O|0,m=M>>1,Ip(Qe,M>>2>>>0>>1>>>0?m>>>0>>0?f:m:d,l-O>>2,s+8|0),O=Qe+8|0,f=n[O>>2]|0,m=Qe+12|0,M=n[m>>2]|0,B=M,Q=f;do if((f|0)==(M|0)){if(M=Qe+4|0,f=n[M>>2]|0,Xe=n[Qe>>2]|0,d=Xe,f>>>0<=Xe>>>0){f=B-d>>1,f=(f|0)==0?1:f,Ip(se,f,f>>>2,n[Qe+16>>2]|0),n[qe>>2]=n[M>>2],n[Me>>2]=n[O>>2],n[k>>2]=n[qe>>2],n[G>>2]=n[Me>>2],Dw(se,k,G),f=n[Qe>>2]|0,n[Qe>>2]=n[se>>2],n[se>>2]=f,f=se+4|0,Xe=n[M>>2]|0,n[M>>2]=n[f>>2],n[f>>2]=Xe,f=se+8|0,Xe=n[O>>2]|0,n[O>>2]=n[f>>2],n[f>>2]=Xe,f=se+12|0,Xe=n[m>>2]|0,n[m>>2]=n[f>>2],n[f>>2]=Xe,_A(se),f=n[O>>2]|0;break}m=f,B=((m-d>>2)+1|0)/-2|0,k=f+(B<<2)|0,d=Q-m|0,m=d>>2,m&&(Mw(k|0,f|0,d|0)|0,f=n[M>>2]|0),Xe=k+(m<<2)|0,n[O>>2]=Xe,n[M>>2]=f+(B<<2),f=Xe}while(0);n[f>>2]=n[c>>2],n[O>>2]=(n[O>>2]|0)+4,l=vg(s,Qe,l)|0,_A(Qe)}while(0);return C=et,l|0}function Le(s){s=s|0;var l=0;do{if(l=s+984|0,o[l>>0]|0)break;o[l>>0]=1,h[s+504>>2]=y(ce),s=n[s+944>>2]|0}while((s|0)!=0)}function pt(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function ht(s){return s=s|0,n[s+944>>2]|0}function Tt(s){s=s|0,Un(s,(n[s+964>>2]|0)!=0,2832),Le(s)}function er(s){return s=s|0,(o[s+984>>0]|0)!=0|0}function $r(s,l){s=s|0,l=l|0,QUe(s,l,400)|0&&(Dr(s|0,l|0,400)|0,Le(s))}function Gi(s){s=s|0;var l=Ze;return l=y(h[s+44>>2]),s=_t(l)|0,y(s?y(0):l)}function es(s){s=s|0;var l=Ze;return l=y(h[s+48>>2]),_t(l)|0&&(l=o[(n[s+976>>2]|0)+2>>0]|0?y(1):y(0)),y(l)}function bi(s,l){s=s|0,l=l|0,n[s+980>>2]=l}function jo(s){return s=s|0,n[s+980>>2]|0}function kA(s,l){s=s|0,l=l|0;var c=0;c=s+4|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function QA(s){return s=s|0,n[s+4>>2]|0}function Ap(s,l){s=s|0,l=l|0;var c=0;c=s+8|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ig(s){return s=s|0,n[s+8>>2]|0}function gu(s,l){s=s|0,l=l|0;var c=0;c=s+12|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function sg(s){return s=s|0,n[s+12>>2]|0}function du(s,l){s=s|0,l=l|0;var c=0;c=s+16|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function uo(s){return s=s|0,n[s+16>>2]|0}function FA(s,l){s=s|0,l=l|0;var c=0;c=s+20|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function mc(s){return s=s|0,n[s+20>>2]|0}function ca(s,l){s=s|0,l=l|0;var c=0;c=s+24|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function og(s){return s=s|0,n[s+24>>2]|0}function yc(s,l){s=s|0,l=l|0;var c=0;c=s+28|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function Pm(s){return s=s|0,n[s+28>>2]|0}function ag(s,l){s=s|0,l=l|0;var c=0;c=s+32|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function $n(s){return s=s|0,n[s+32>>2]|0}function fp(s,l){s=s|0,l=l|0;var c=0;c=s+36|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function lg(s){return s=s|0,n[s+36>>2]|0}function RA(s,l){s=s|0,l=y(l);var c=0;c=s+40|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Hs(s,l){s=s|0,l=y(l);var c=0;c=s+44|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function mu(s,l){s=s|0,l=y(l);var c=0;c=s+48|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Ha(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+52|0,d=s+56|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function qi(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+52|0,c=s+56|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function ua(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+52|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function yu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Es(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Ec(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+132+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Cc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function q(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Dt(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+60+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function wl(s,l){s=s|0,l=l|0;var c=0;c=s+60+(l<<3)+4|0,(n[c>>2]|0)!=3&&(h[s+60+(l<<3)>>2]=y(ce),n[c>>2]=3,Le(s))}function xi(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function wc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function ct(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+204+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Eu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+276+(l<<3)|0,l=s+276+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function cg(s,l){return s=s|0,l=l|0,y(h[s+276+(l<<3)>>2])}function yw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+348|0,d=s+352|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function TA(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+348|0,c=s+352|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function pp(s){s=s|0;var l=0;l=s+352|0,(n[l>>2]|0)!=3&&(h[s+348>>2]=y(ce),n[l>>2]=3,Le(s))}function Br(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+348|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cs(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+356|0,d=s+360|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function ug(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+356|0,c=s+360|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function Ag(s){s=s|0;var l=0;l=s+360|0,(n[l>>2]|0)!=3&&(h[s+356>>2]=y(ce),n[l>>2]=3,Le(s))}function fg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+356|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function hp(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ic(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ct(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+364|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function bm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function pg(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function hg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+372|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function xm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function gg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+380|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function wu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ew(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function km(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+388|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Aa(s,l){s=s|0,l=y(l);var c=0;c=s+396|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Bc(s){return s=s|0,y(h[s+396>>2])}function Il(s){return s=s|0,y(h[s+400>>2])}function Iu(s){return s=s|0,y(h[s+404>>2])}function dg(s){return s=s|0,y(h[s+408>>2])}function NA(s){return s=s|0,y(h[s+412>>2])}function gp(s){return s=s|0,y(h[s+416>>2])}function ja(s){return s=s|0,y(h[s+420>>2])}function mg(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+424+(l<<2)>>2])}function dp(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+448+(l<<2)>>2])}function Go(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+472+(l<<2)>>2])}function ws(s,l){s=s|0,l=l|0;var c=0,f=Ze;return c=n[s+4>>2]|0,(c|0)==(n[l+4>>2]|0)?c?(f=y(h[s>>2]),s=y(ne(y(f-y(h[l>>2]))))>2]=0,n[f+4>>2]=0,n[f+8>>2]=0,Ma(f|0,s|0,l|0,0),Ao(s,3,(o[f+11>>0]|0)<0?n[f>>2]|0:f,c),e3e(f),C=c}function qo(s,l,c,f){s=y(s),l=y(l),c=c|0,f=f|0;var d=Ze;s=y(s*l),d=y(bR(s,y(1)));do if(Ii(d,y(0))|0)s=y(s-d);else{if(s=y(s-d),Ii(d,y(1))|0){s=y(s+y(1));break}if(c){s=y(s+y(1));break}f||(d>y(.5)?d=y(1):(f=Ii(d,y(.5))|0,d=y(f?1:0)),s=y(s+d))}while(0);return y(s/l)}function LA(s,l,c,f,d,m,B,k,Q,M,O,G,se){s=s|0,l=y(l),c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,k=y(k),Q=y(Q),M=y(M),O=y(O),G=y(G),se=se|0;var qe=0,Me=Ze,Qe=Ze,et=Ze,Xe=Ze,lt=Ze,Ue=Ze;return Q>2]),Me!=y(0))?(et=y(qo(l,Me,0,0)),Xe=y(qo(f,Me,0,0)),Qe=y(qo(m,Me,0,0)),Me=y(qo(k,Me,0,0))):(Qe=m,et=l,Me=k,Xe=f),(d|0)==(s|0)?qe=Ii(Qe,et)|0:qe=0,(B|0)==(c|0)?se=Ii(Me,Xe)|0:se=0,!qe&&(lt=y(l-O),!(mp(s,lt,Q)|0))&&!(yp(s,lt,d,Q)|0)?qe=yg(s,lt,d,m,Q)|0:qe=1,!se&&(Ue=y(f-G),!(mp(c,Ue,M)|0))&&!(yp(c,Ue,B,M)|0)?se=yg(c,Ue,B,k,M)|0:se=1,se=qe&se),se|0}function mp(s,l,c){return s=s|0,l=y(l),c=y(c),(s|0)==1?s=Ii(l,c)|0:s=0,s|0}function yp(s,l,c,f){return s=s|0,l=y(l),c=c|0,f=y(f),(s|0)==2&(c|0)==0?l>=f?s=1:s=Ii(l,f)|0:s=0,s|0}function yg(s,l,c,f,d){return s=s|0,l=y(l),c=c|0,f=y(f),d=y(d),(s|0)==2&(c|0)==2&f>l?d<=l?s=1:s=Ii(l,d)|0:s=0,s|0}function fa(s,l,c,f,d,m,B,k,Q,M,O){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,M=M|0,O=O|0;var G=0,se=0,qe=0,Me=0,Qe=Ze,et=Ze,Xe=0,lt=0,Ue=0,Ge=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0,xn=Ze,go=Ze,mo=Ze,yo=0,ya=0;ir=C,C=C+160|0,Xt=ir+152|0,or=ir+120|0,Mr=ir+104|0,Ue=ir+72|0,Me=ir+56|0,Lt=ir+8|0,lt=ir,Ge=(n[2279]|0)+1|0,n[2279]=Ge,Sr=s+984|0,(o[Sr>>0]|0)!=0&&(n[s+512>>2]|0)!=(n[2278]|0)?Xe=4:(n[s+516>>2]|0)==(f|0)?Nr=0:Xe=4,(Xe|0)==4&&(n[s+520>>2]=0,n[s+924>>2]=-1,n[s+928>>2]=-1,h[s+932>>2]=y(-1),h[s+936>>2]=y(-1),Nr=1);e:do if(n[s+964>>2]|0)if(Qe=y(ln(s,2,B)),et=y(ln(s,0,B)),G=s+916|0,mo=y(h[G>>2]),go=y(h[s+920>>2]),xn=y(h[s+932>>2]),LA(d,l,m,c,n[s+924>>2]|0,mo,n[s+928>>2]|0,go,xn,y(h[s+936>>2]),Qe,et,O)|0)Xe=22;else if(qe=n[s+520>>2]|0,!qe)Xe=21;else for(se=0;;){if(G=s+524+(se*24|0)|0,xn=y(h[G>>2]),go=y(h[s+524+(se*24|0)+4>>2]),mo=y(h[s+524+(se*24|0)+16>>2]),LA(d,l,m,c,n[s+524+(se*24|0)+8>>2]|0,xn,n[s+524+(se*24|0)+12>>2]|0,go,mo,y(h[s+524+(se*24|0)+20>>2]),Qe,et,O)|0){Xe=22;break e}if(se=se+1|0,se>>>0>=qe>>>0){Xe=21;break}}else{if(Q){if(G=s+916|0,!(Ii(y(h[G>>2]),l)|0)){Xe=21;break}if(!(Ii(y(h[s+920>>2]),c)|0)){Xe=21;break}if((n[s+924>>2]|0)!=(d|0)){Xe=21;break}G=(n[s+928>>2]|0)==(m|0)?G:0,Xe=22;break}if(qe=n[s+520>>2]|0,!qe)Xe=21;else for(se=0;;){if(G=s+524+(se*24|0)|0,Ii(y(h[G>>2]),l)|0&&Ii(y(h[s+524+(se*24|0)+4>>2]),c)|0&&(n[s+524+(se*24|0)+8>>2]|0)==(d|0)&&(n[s+524+(se*24|0)+12>>2]|0)==(m|0)){Xe=22;break e}if(se=se+1|0,se>>>0>=qe>>>0){Xe=21;break}}}while(0);do if((Xe|0)==21)o[11697]|0?(G=0,Xe=28):(G=0,Xe=31);else if((Xe|0)==22){if(se=(o[11697]|0)!=0,!((G|0)!=0&(Nr^1)))if(se){Xe=28;break}else{Xe=31;break}Me=G+16|0,n[s+908>>2]=n[Me>>2],qe=G+20|0,n[s+912>>2]=n[qe>>2],(o[11698]|0)==0|se^1||(n[lt>>2]=OA(Ge)|0,n[lt+4>>2]=Ge,Ao(s,4,2972,lt),se=n[s+972>>2]|0,se|0&&tf[se&127](s),d=Ga(d,Q)|0,m=Ga(m,Q)|0,ya=+y(h[Me>>2]),yo=+y(h[qe>>2]),n[Lt>>2]=d,n[Lt+4>>2]=m,E[Lt+8>>3]=+l,E[Lt+16>>3]=+c,E[Lt+24>>3]=ya,E[Lt+32>>3]=yo,n[Lt+40>>2]=M,Ao(s,4,2989,Lt))}while(0);return(Xe|0)==28&&(se=OA(Ge)|0,n[Me>>2]=se,n[Me+4>>2]=Ge,n[Me+8>>2]=Nr?3047:11699,Ao(s,4,3038,Me),se=n[s+972>>2]|0,se|0&&tf[se&127](s),Lt=Ga(d,Q)|0,Xe=Ga(m,Q)|0,n[Ue>>2]=Lt,n[Ue+4>>2]=Xe,E[Ue+8>>3]=+l,E[Ue+16>>3]=+c,n[Ue+24>>2]=M,Ao(s,4,3049,Ue),Xe=31),(Xe|0)==31&&(si(s,l,c,f,d,m,B,k,Q,O),o[11697]|0&&(se=n[2279]|0,Lt=OA(se)|0,n[Mr>>2]=Lt,n[Mr+4>>2]=se,n[Mr+8>>2]=Nr?3047:11699,Ao(s,4,3083,Mr),se=n[s+972>>2]|0,se|0&&tf[se&127](s),Lt=Ga(d,Q)|0,Mr=Ga(m,Q)|0,yo=+y(h[s+908>>2]),ya=+y(h[s+912>>2]),n[or>>2]=Lt,n[or+4>>2]=Mr,E[or+8>>3]=yo,E[or+16>>3]=ya,n[or+24>>2]=M,Ao(s,4,3092,or)),n[s+516>>2]=f,G||(se=s+520|0,G=n[se>>2]|0,(G|0)==16&&(o[11697]|0&&Ao(s,4,3124,Xt),n[se>>2]=0,G=0),Q?G=s+916|0:(n[se>>2]=G+1,G=s+524+(G*24|0)|0),h[G>>2]=l,h[G+4>>2]=c,n[G+8>>2]=d,n[G+12>>2]=m,n[G+16>>2]=n[s+908>>2],n[G+20>>2]=n[s+912>>2],G=0)),Q&&(n[s+416>>2]=n[s+908>>2],n[s+420>>2]=n[s+912>>2],o[s+985>>0]=1,o[Sr>>0]=0),n[2279]=(n[2279]|0)+-1,n[s+512>>2]=n[2278],C=ir,Nr|(G|0)==0|0}function ln(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(K(s,l,c)),y(f+y(re(s,l,c)))}function Ao(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=C,C=C+16|0,d=m,n[d>>2]=f,s?f=n[s+976>>2]|0:f=0,Cg(f,s,l,c,d),C=m}function OA(s){return s=s|0,(s>>>0>60?3201:3201+(60-s)|0)|0}function Ga(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+32|0,c=d+12|0,f=d,n[c>>2]=n[254],n[c+4>>2]=n[255],n[c+8>>2]=n[256],n[f>>2]=n[257],n[f+4>>2]=n[258],n[f+8>>2]=n[259],(s|0)>2?s=11699:s=n[(l?f:c)+(s<<2)>>2]|0,C=d,s|0}function si(s,l,c,f,d,m,B,k,Q,M){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,M=M|0;var O=0,G=0,se=0,qe=0,Me=Ze,Qe=Ze,et=Ze,Xe=Ze,lt=Ze,Ue=Ze,Ge=Ze,Lt=0,Mr=0,or=0,Xt=Ze,Sr=Ze,Nr=0,ir=Ze,xn=0,go=0,mo=0,yo=0,ya=0,Fp=0,Rp=0,bl=0,Tp=0,Fu=0,Ru=0,Np=0,Lp=0,Op=0,Xr=0,xl=0,Mp=0,xc=0,Up=Ze,_p=Ze,Tu=Ze,Nu=Ze,kc=Ze,Gs=0,za=0,Wo=0,kl=0,nf=0,sf=Ze,Lu=Ze,of=Ze,af=Ze,qs=Ze,vs=Ze,Ql=0,Rn=Ze,lf=Ze,Eo=Ze,Qc=Ze,Co=Ze,Fc=Ze,cf=0,uf=0,Rc=Ze,Ys=Ze,Fl=0,Af=0,ff=0,pf=0,xr=Ze,Jn=0,Ds=0,wo=0,Ws=0,Rr=0,ur=0,Rl=0,Jt=Ze,hf=0,li=0;Rl=C,C=C+16|0,Gs=Rl+12|0,za=Rl+8|0,Wo=Rl+4|0,kl=Rl,Un(s,(d|0)==0|(_t(l)|0)^1,3326),Un(s,(m|0)==0|(_t(c)|0)^1,3406),Ds=mt(s,f)|0,n[s+496>>2]=Ds,Rr=fr(2,Ds)|0,ur=fr(0,Ds)|0,h[s+440>>2]=y(K(s,Rr,B)),h[s+444>>2]=y(re(s,Rr,B)),h[s+428>>2]=y(K(s,ur,B)),h[s+436>>2]=y(re(s,ur,B)),h[s+464>>2]=y(Cr(s,Rr)),h[s+468>>2]=y(yn(s,Rr)),h[s+452>>2]=y(Cr(s,ur)),h[s+460>>2]=y(yn(s,ur)),h[s+488>>2]=y(oi(s,Rr,B)),h[s+492>>2]=y(Oi(s,Rr,B)),h[s+476>>2]=y(oi(s,ur,B)),h[s+484>>2]=y(Oi(s,ur,B));do if(n[s+964>>2]|0)Ig(s,l,c,d,m,B,k);else{if(wo=s+948|0,Ws=(n[s+952>>2]|0)-(n[wo>>2]|0)>>2,!Ws){qv(s,l,c,d,m,B,k);break}if(!Q&&Yv(s,l,c,d,m,B,k)|0)break;$(s),xl=s+508|0,o[xl>>0]=0,Rr=fr(n[s+4>>2]|0,Ds)|0,ur=ww(Rr,Ds)|0,Jn=pe(Rr)|0,Mp=n[s+8>>2]|0,Af=s+28|0,xc=(n[Af>>2]|0)!=0,Co=Jn?B:k,Rc=Jn?k:B,Up=y(Cp(s,Rr,B)),_p=y(Iw(s,Rr,B)),Me=y(Cp(s,ur,B)),Fc=y(En(s,Rr,B)),Ys=y(En(s,ur,B)),or=Jn?d:m,Fl=Jn?m:d,xr=Jn?Fc:Ys,lt=Jn?Ys:Fc,Qc=y(ln(s,2,B)),Xe=y(ln(s,0,B)),Qe=y(y(qr(s+364|0,B))-xr),et=y(y(qr(s+380|0,B))-xr),Ue=y(y(qr(s+372|0,k))-lt),Ge=y(y(qr(s+388|0,k))-lt),Tu=Jn?Qe:Ue,Nu=Jn?et:Ge,Qc=y(l-Qc),l=y(Qc-xr),_t(l)|0?xr=l:xr=y(_n(y(Tg(l,et)),Qe)),lf=y(c-Xe),l=y(lf-lt),_t(l)|0?Eo=l:Eo=y(_n(y(Tg(l,Ge)),Ue)),Qe=Jn?xr:Eo,Rn=Jn?Eo:xr;e:do if((or|0)==1)for(f=0,G=0;;){if(O=gs(s,G)|0,!f)y(rs(O))>y(0)&&y(js(O))>y(0)?f=O:f=0;else if(Tm(O)|0){qe=0;break e}if(G=G+1|0,G>>>0>=Ws>>>0){qe=f;break}}else qe=0;while(0);Lt=qe+500|0,Mr=qe+504|0,f=0,O=0,l=y(0),se=0;do{if(G=n[(n[wo>>2]|0)+(se<<2)>>2]|0,(n[G+36>>2]|0)==1)Bu(G),o[G+985>>0]=1,o[G+984>>0]=0;else{Bl(G),Q&&Ep(G,mt(G,Ds)|0,Qe,Rn,xr);do if((n[G+24>>2]|0)!=1)if((G|0)==(qe|0)){n[Lt>>2]=n[2278],h[Mr>>2]=y(0);break}else{Nm(s,G,xr,d,Eo,xr,Eo,m,Ds,M);break}else O|0&&(n[O+960>>2]=G),n[G+960>>2]=0,O=G,f=(f|0)==0?G:f;while(0);vs=y(h[G+504>>2]),l=y(l+y(vs+y(ln(G,Rr,xr))))}se=se+1|0}while((se|0)!=(Ws|0));for(mo=l>Qe,Ql=xc&((or|0)==2&mo)?1:or,xn=(Fl|0)==1,ya=xn&(Q^1),Fp=(Ql|0)==1,Rp=(Ql|0)==2,bl=976+(Rr<<2)|0,Tp=(Fl|2|0)==2,Op=xn&(xc^1),Fu=1040+(ur<<2)|0,Ru=1040+(Rr<<2)|0,Np=976+(ur<<2)|0,Lp=(Fl|0)!=1,mo=xc&((or|0)!=0&mo),go=s+976|0,xn=xn^1,l=Qe,Nr=0,yo=0,vs=y(0),kc=y(0);;){e:do if(Nr>>>0>>0)for(Mr=n[wo>>2]|0,se=0,Ge=y(0),Ue=y(0),et=y(0),Qe=y(0),G=0,O=0,qe=Nr;;){if(Lt=n[Mr+(qe<<2)>>2]|0,(n[Lt+36>>2]|0)!=1&&(n[Lt+940>>2]=yo,(n[Lt+24>>2]|0)!=1)){if(Xe=y(ln(Lt,Rr,xr)),Xr=n[bl>>2]|0,c=y(qr(Lt+380+(Xr<<3)|0,Co)),lt=y(h[Lt+504>>2]),c=y(Tg(c,lt)),c=y(_n(y(qr(Lt+364+(Xr<<3)|0,Co)),c)),xc&(se|0)!=0&y(Xe+y(Ue+c))>l){m=se,Xe=Ge,or=qe;break e}Xe=y(Xe+c),c=y(Ue+Xe),Xe=y(Ge+Xe),Tm(Lt)|0&&(et=y(et+y(rs(Lt))),Qe=y(Qe-y(lt*y(js(Lt))))),O|0&&(n[O+960>>2]=Lt),n[Lt+960>>2]=0,se=se+1|0,O=Lt,G=(G|0)==0?Lt:G}else Xe=Ge,c=Ue;if(qe=qe+1|0,qe>>>0>>0)Ge=Xe,Ue=c;else{m=se,or=qe;break}}else m=0,Xe=y(0),et=y(0),Qe=y(0),G=0,or=Nr;while(0);Xr=et>y(0)&ety(0)&QeNu&((_t(Nu)|0)^1))l=Nu,Xr=51;else if(o[(n[go>>2]|0)+3>>0]|0)Xr=51;else{if(Xt!=y(0)&&y(rs(s))!=y(0)){Xr=53;break}l=Xe,Xr=53}while(0);if((Xr|0)==51&&(Xr=0,_t(l)|0?Xr=53:(Sr=y(l-Xe),ir=l)),(Xr|0)==53&&(Xr=0,Xe>2]|0,qe=Sry(0),Ue=y(Sr/Xt),et=y(0),Xe=y(0),l=y(0),O=G;do c=y(qr(O+380+(se<<3)|0,Co)),Qe=y(qr(O+364+(se<<3)|0,Co)),Qe=y(Tg(c,y(_n(Qe,y(h[O+504>>2]))))),qe?(c=y(Qe*y(js(O))),c!=y(-0)&&(Jt=y(Qe-y(lt*c)),sf=y(Bi(O,Rr,Jt,ir,xr)),Jt!=sf)&&(et=y(et-y(sf-Qe)),l=y(l+c))):Lt&&(Lu=y(rs(O)),Lu!=y(0))&&(Jt=y(Qe+y(Ue*Lu)),of=y(Bi(O,Rr,Jt,ir,xr)),Jt!=of)&&(et=y(et-y(of-Qe)),Xe=y(Xe-Lu)),O=n[O+960>>2]|0;while((O|0)!=0);if(l=y(Ge+l),Qe=y(Sr+et),nf)l=y(0);else{lt=y(Xt+Xe),qe=n[bl>>2]|0,Lt=Qey(0),lt=y(Qe/lt),l=y(0);do{Jt=y(qr(G+380+(qe<<3)|0,Co)),et=y(qr(G+364+(qe<<3)|0,Co)),et=y(Tg(Jt,y(_n(et,y(h[G+504>>2]))))),Lt?(Jt=y(et*y(js(G))),Qe=y(-Jt),Jt!=y(-0)?(Jt=y(Ue*Qe),Qe=y(Bi(G,Rr,y(et+(Mr?Qe:Jt)),ir,xr))):Qe=et):se&&(af=y(rs(G)),af!=y(0))?Qe=y(Bi(G,Rr,y(et+y(lt*af)),ir,xr)):Qe=et,l=y(l-y(Qe-et)),Xe=y(ln(G,Rr,xr)),c=y(ln(G,ur,xr)),Qe=y(Qe+Xe),h[za>>2]=Qe,n[kl>>2]=1,et=y(h[G+396>>2]);e:do if(_t(et)|0){O=_t(Rn)|0;do if(!O){if(mo|(ts(G,ur,Rn)|0|xn)||(ha(s,G)|0)!=4||(n[(vl(G,ur)|0)+4>>2]|0)==3||(n[(Sc(G,ur)|0)+4>>2]|0)==3)break;h[Gs>>2]=Rn,n[Wo>>2]=1;break e}while(0);if(ts(G,ur,Rn)|0){O=n[G+992+(n[Np>>2]<<2)>>2]|0,Jt=y(c+y(qr(O,Rn))),h[Gs>>2]=Jt,O=Lp&(n[O+4>>2]|0)==2,n[Wo>>2]=((_t(Jt)|0|O)^1)&1;break}else{h[Gs>>2]=Rn,n[Wo>>2]=O?0:2;break}}else Jt=y(Qe-Xe),Xt=y(Jt/et),Jt=y(et*Jt),n[Wo>>2]=1,h[Gs>>2]=y(c+(Jn?Xt:Jt));while(0);yr(G,Rr,ir,xr,kl,za),yr(G,ur,Rn,xr,Wo,Gs);do if(!(ts(G,ur,Rn)|0)&&(ha(s,G)|0)==4){if((n[(vl(G,ur)|0)+4>>2]|0)==3){O=0;break}O=(n[(Sc(G,ur)|0)+4>>2]|0)!=3}else O=0;while(0);Jt=y(h[za>>2]),Xt=y(h[Gs>>2]),hf=n[kl>>2]|0,li=n[Wo>>2]|0,fa(G,Jn?Jt:Xt,Jn?Xt:Jt,Ds,Jn?hf:li,Jn?li:hf,xr,Eo,Q&(O^1),3488,M)|0,o[xl>>0]=o[xl>>0]|o[G+508>>0],G=n[G+960>>2]|0}while((G|0)!=0)}}else l=y(0);if(l=y(Sr+l),li=l>0]=li|u[xl>>0],Rp&l>y(0)?(O=n[bl>>2]|0,(n[s+364+(O<<3)+4>>2]|0)!=0&&(qs=y(qr(s+364+(O<<3)|0,Co)),qs>=y(0))?Qe=y(_n(y(0),y(qs-y(ir-l)))):Qe=y(0)):Qe=l,Lt=Nr>>>0>>0,Lt){qe=n[wo>>2]|0,se=Nr,O=0;do G=n[qe+(se<<2)>>2]|0,n[G+24>>2]|0||(O=((n[(vl(G,Rr)|0)+4>>2]|0)==3&1)+O|0,O=O+((n[(Sc(G,Rr)|0)+4>>2]|0)==3&1)|0),se=se+1|0;while((se|0)!=(or|0));O?(Xe=y(0),c=y(0)):Xr=101}else Xr=101;e:do if((Xr|0)==101)switch(Xr=0,Mp|0){case 1:{O=0,Xe=y(Qe*y(.5)),c=y(0);break e}case 2:{O=0,Xe=Qe,c=y(0);break e}case 3:{if(m>>>0<=1){O=0,Xe=y(0),c=y(0);break e}c=y((m+-1|0)>>>0),O=0,Xe=y(0),c=y(y(_n(Qe,y(0)))/c);break e}case 5:{c=y(Qe/y((m+1|0)>>>0)),O=0,Xe=c;break e}case 4:{c=y(Qe/y(m>>>0)),O=0,Xe=y(c*y(.5));break e}default:{O=0,Xe=y(0),c=y(0);break e}}while(0);if(l=y(Up+Xe),Lt){et=y(Qe/y(O|0)),se=n[wo>>2]|0,G=Nr,Qe=y(0);do{O=n[se+(G<<2)>>2]|0;e:do if((n[O+36>>2]|0)!=1){switch(n[O+24>>2]|0){case 1:{if(gi(O,Rr)|0){if(!Q)break e;Jt=y(Or(O,Rr,ir)),Jt=y(Jt+y(Cr(s,Rr))),Jt=y(Jt+y(K(O,Rr,xr))),h[O+400+(n[Ru>>2]<<2)>>2]=Jt;break e}break}case 0:if(li=(n[(vl(O,Rr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,Q&&(li=O+400+(n[Ru>>2]<<2)|0,h[li>>2]=y(l+y(h[li>>2]))),li=(n[(Sc(O,Rr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,ya){Jt=y(c+y(ln(O,Rr,xr))),Qe=Rn,l=y(l+y(Jt+y(h[O+504>>2])));break e}else{l=y(l+y(c+y(ns(O,Rr,xr)))),Qe=y(_n(Qe,y(ns(O,ur,xr))));break e}default:}Q&&(Jt=y(Xe+y(Cr(s,Rr))),li=O+400+(n[Ru>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2])))}while(0);G=G+1|0}while((G|0)!=(or|0))}else Qe=y(0);if(c=y(_p+l),Tp?Xe=y(y(Bi(s,ur,y(Ys+Qe),Rc,B))-Ys):Xe=Rn,et=y(y(Bi(s,ur,y(Ys+(Op?Rn:Qe)),Rc,B))-Ys),Lt&Q){G=Nr;do{se=n[(n[wo>>2]|0)+(G<<2)>>2]|0;do if((n[se+36>>2]|0)!=1){if((n[se+24>>2]|0)==1){if(gi(se,ur)|0){if(Jt=y(Or(se,ur,Rn)),Jt=y(Jt+y(Cr(s,ur))),Jt=y(Jt+y(K(se,ur,xr))),O=n[Fu>>2]|0,h[se+400+(O<<2)>>2]=Jt,!(_t(Jt)|0))break}else O=n[Fu>>2]|0;Jt=y(Cr(s,ur)),h[se+400+(O<<2)>>2]=y(Jt+y(K(se,ur,xr)));break}O=ha(s,se)|0;do if((O|0)==4){if((n[(vl(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if((n[(Sc(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if(ts(se,ur,Rn)|0){l=Me;break}hf=n[se+908+(n[bl>>2]<<2)>>2]|0,n[Gs>>2]=hf,l=y(h[se+396>>2]),li=_t(l)|0,Qe=(n[v>>2]=hf,y(h[v>>2])),li?l=et:(Sr=y(ln(se,ur,xr)),Jt=y(Qe/l),l=y(l*Qe),l=y(Sr+(Jn?Jt:l))),h[za>>2]=l,h[Gs>>2]=y(y(ln(se,Rr,xr))+Qe),n[Wo>>2]=1,n[kl>>2]=1,yr(se,Rr,ir,xr,Wo,Gs),yr(se,ur,Rn,xr,kl,za),l=y(h[Gs>>2]),Sr=y(h[za>>2]),Jt=Jn?l:Sr,l=Jn?Sr:l,li=((_t(Jt)|0)^1)&1,fa(se,Jt,l,Ds,li,((_t(l)|0)^1)&1,xr,Eo,1,3493,M)|0,l=Me}else Xr=139;while(0);e:do if((Xr|0)==139){Xr=0,l=y(Xe-y(ns(se,ur,xr)));do if((n[(vl(se,ur)|0)+4>>2]|0)==3){if((n[(Sc(se,ur)|0)+4>>2]|0)!=3)break;l=y(Me+y(_n(y(0),y(l*y(.5)))));break e}while(0);if((n[(Sc(se,ur)|0)+4>>2]|0)==3){l=Me;break}if((n[(vl(se,ur)|0)+4>>2]|0)==3){l=y(Me+y(_n(y(0),l)));break}switch(O|0){case 1:{l=Me;break e}case 2:{l=y(Me+y(l*y(.5)));break e}default:{l=y(Me+l);break e}}}while(0);Jt=y(vs+l),li=se+400+(n[Fu>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2]))}while(0);G=G+1|0}while((G|0)!=(or|0))}if(vs=y(vs+et),kc=y(_n(kc,c)),m=yo+1|0,or>>>0>=Ws>>>0)break;l=ir,Nr=or,yo=m}do if(Q){if(O=m>>>0>1,!O&&!(Yi(s)|0))break;if(!(_t(Rn)|0)){l=y(Rn-vs);e:do switch(n[s+12>>2]|0){case 3:{Me=y(Me+l),Ue=y(0);break}case 2:{Me=y(Me+y(l*y(.5))),Ue=y(0);break}case 4:{Rn>vs?Ue=y(l/y(m>>>0)):Ue=y(0);break}case 7:if(Rn>vs){Me=y(Me+y(l/y(m<<1>>>0))),Ue=y(l/y(m>>>0)),Ue=O?Ue:y(0);break e}else{Me=y(Me+y(l*y(.5))),Ue=y(0);break e}case 6:{Ue=y(l/y(yo>>>0)),Ue=Rn>vs&O?Ue:y(0);break}default:Ue=y(0)}while(0);if(m|0)for(Lt=1040+(ur<<2)|0,Mr=976+(ur<<2)|0,qe=0,G=0;;){e:do if(G>>>0>>0)for(Qe=y(0),et=y(0),l=y(0),se=G;;){O=n[(n[wo>>2]|0)+(se<<2)>>2]|0;do if((n[O+36>>2]|0)!=1&&(n[O+24>>2]|0)==0){if((n[O+940>>2]|0)!=(qe|0))break e;if(Lm(O,ur)|0&&(Jt=y(h[O+908+(n[Mr>>2]<<2)>>2]),l=y(_n(l,y(Jt+y(ln(O,ur,xr)))))),(ha(s,O)|0)!=5)break;qs=y(Ya(O)),qs=y(qs+y(K(O,0,xr))),Jt=y(h[O+912>>2]),Jt=y(y(Jt+y(ln(O,0,xr)))-qs),qs=y(_n(et,qs)),Jt=y(_n(Qe,Jt)),Qe=Jt,et=qs,l=y(_n(l,y(qs+Jt)))}while(0);if(O=se+1|0,O>>>0>>0)se=O;else{se=O;break}}else et=y(0),l=y(0),se=G;while(0);if(lt=y(Ue+l),c=Me,Me=y(Me+lt),G>>>0>>0){Xe=y(c+et),O=G;do{G=n[(n[wo>>2]|0)+(O<<2)>>2]|0;e:do if((n[G+36>>2]|0)!=1&&(n[G+24>>2]|0)==0)switch(ha(s,G)|0){case 1:{Jt=y(c+y(K(G,ur,xr))),h[G+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 3:{Jt=y(y(Me-y(re(G,ur,xr)))-y(h[G+908+(n[Mr>>2]<<2)>>2])),h[G+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 2:{Jt=y(c+y(y(lt-y(h[G+908+(n[Mr>>2]<<2)>>2]))*y(.5))),h[G+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 4:{if(Jt=y(c+y(K(G,ur,xr))),h[G+400+(n[Lt>>2]<<2)>>2]=Jt,ts(G,ur,Rn)|0||(Jn?(Qe=y(h[G+908>>2]),l=y(Qe+y(ln(G,Rr,xr))),et=lt):(et=y(h[G+912>>2]),et=y(et+y(ln(G,ur,xr))),l=lt,Qe=y(h[G+908>>2])),Ii(l,Qe)|0&&Ii(et,y(h[G+912>>2]))|0))break e;fa(G,l,et,Ds,1,1,xr,Eo,1,3501,M)|0;break e}case 5:{h[G+404>>2]=y(y(Xe-y(Ya(G)))+y(Or(G,0,Rn)));break e}default:break e}while(0);O=O+1|0}while((O|0)!=(se|0))}if(qe=qe+1|0,(qe|0)==(m|0))break;G=se}}}while(0);if(h[s+908>>2]=y(Bi(s,2,Qc,B,B)),h[s+912>>2]=y(Bi(s,0,lf,k,B)),(Ql|0)!=0&&(cf=n[s+32>>2]|0,uf=(Ql|0)==2,!(uf&(cf|0)!=2))?uf&(cf|0)==2&&(l=y(Fc+ir),l=y(_n(y(Tg(l,y(MA(s,Rr,kc,Co)))),Fc)),Xr=198):(l=y(Bi(s,Rr,kc,Co,B)),Xr=198),(Xr|0)==198&&(h[s+908+(n[976+(Rr<<2)>>2]<<2)>>2]=l),(Fl|0)!=0&&(ff=n[s+32>>2]|0,pf=(Fl|0)==2,!(pf&(ff|0)!=2))?pf&(ff|0)==2&&(l=y(Ys+Rn),l=y(_n(y(Tg(l,y(MA(s,ur,y(Ys+vs),Rc)))),Ys)),Xr=204):(l=y(Bi(s,ur,y(Ys+vs),Rc,B)),Xr=204),(Xr|0)==204&&(h[s+908+(n[976+(ur<<2)>>2]<<2)>>2]=l),Q){if((n[Af>>2]|0)==2){G=976+(ur<<2)|0,se=1040+(ur<<2)|0,O=0;do qe=gs(s,O)|0,n[qe+24>>2]|0||(hf=n[G>>2]|0,Jt=y(h[s+908+(hf<<2)>>2]),li=qe+400+(n[se>>2]<<2)|0,Jt=y(Jt-y(h[li>>2])),h[li>>2]=y(Jt-y(h[qe+908+(hf<<2)>>2]))),O=O+1|0;while((O|0)!=(Ws|0))}if(f|0){O=Jn?Ql:d;do Om(s,f,xr,O,Eo,Ds,M),f=n[f+960>>2]|0;while((f|0)!=0)}if(O=(Rr|2|0)==3,G=(ur|2|0)==3,O|G){f=0;do se=n[(n[wo>>2]|0)+(f<<2)>>2]|0,(n[se+36>>2]|0)!=1&&(O&&wp(s,se,Rr),G&&wp(s,se,ur)),f=f+1|0;while((f|0)!=(Ws|0))}}}while(0);C=Rl}function pa(s,l){s=s|0,l=y(l);var c=0;oa(s,l>=y(0),3147),c=l==y(0),h[s+4>>2]=c?y(0):l}function vc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=f|0;var d=Ze,m=Ze,B=0,k=0,Q=0;n[2278]=(n[2278]|0)+1,Bl(s),ts(s,2,l)|0?(d=y(qr(n[s+992>>2]|0,l)),Q=1,d=y(d+y(ln(s,2,l)))):(d=y(qr(s+380|0,l)),d>=y(0)?Q=2:(Q=((_t(l)|0)^1)&1,d=l)),ts(s,0,c)|0?(m=y(qr(n[s+996>>2]|0,c)),k=1,m=y(m+y(ln(s,0,l)))):(m=y(qr(s+388|0,c)),m>=y(0)?k=2:(k=((_t(c)|0)^1)&1,m=c)),B=s+976|0,fa(s,d,m,f,Q,k,l,c,1,3189,n[B>>2]|0)|0&&(Ep(s,n[s+496>>2]|0,l,c,l),Dc(s,y(h[(n[B>>2]|0)+4>>2]),y(0),y(0)),o[11696]|0)&&Qm(s,7)}function Bl(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;k=C,C=C+32|0,B=k+24|0,m=k+16|0,f=k+8|0,d=k,c=0;do l=s+380+(c<<3)|0,(n[s+380+(c<<3)+4>>2]|0)!=0&&(Q=l,M=n[Q+4>>2]|0,O=f,n[O>>2]=n[Q>>2],n[O+4>>2]=M,O=s+364+(c<<3)|0,M=n[O+4>>2]|0,Q=d,n[Q>>2]=n[O>>2],n[Q+4>>2]=M,n[m>>2]=n[f>>2],n[m+4>>2]=n[f+4>>2],n[B>>2]=n[d>>2],n[B+4>>2]=n[d+4>>2],ws(m,B)|0)||(l=s+348+(c<<3)|0),n[s+992+(c<<2)>>2]=l,c=c+1|0;while((c|0)!=2);C=k}function ts(s,l,c){s=s|0,l=l|0,c=y(c);var f=0;switch(s=n[s+992+(n[976+(l<<2)>>2]<<2)>>2]|0,n[s+4>>2]|0){case 0:case 3:{s=0;break}case 1:{y(h[s>>2])>2])>2]|0){case 2:{l=y(y(y(h[s>>2])*l)/y(100));break}case 1:{l=y(h[s>>2]);break}default:l=y(ce)}return y(l)}function Ep(s,l,c,f,d){s=s|0,l=l|0,c=y(c),f=y(f),d=y(d);var m=0,B=Ze;l=n[s+944>>2]|0?l:1,m=fr(n[s+4>>2]|0,l)|0,l=ww(m,l)|0,c=y(Mm(s,m,c)),f=y(Mm(s,l,f)),B=y(c+y(K(s,m,d))),h[s+400+(n[1040+(m<<2)>>2]<<2)>>2]=B,c=y(c+y(re(s,m,d))),h[s+400+(n[1e3+(m<<2)>>2]<<2)>>2]=c,c=y(f+y(K(s,l,d))),h[s+400+(n[1040+(l<<2)>>2]<<2)>>2]=c,d=y(f+y(re(s,l,d))),h[s+400+(n[1e3+(l<<2)>>2]<<2)>>2]=d}function Dc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=y(f);var d=0,m=0,B=Ze,k=Ze,Q=0,M=0,O=Ze,G=0,se=Ze,qe=Ze,Me=Ze,Qe=Ze;if(l!=y(0)&&(d=s+400|0,Qe=y(h[d>>2]),m=s+404|0,Me=y(h[m>>2]),G=s+416|0,qe=y(h[G>>2]),M=s+420|0,B=y(h[M>>2]),se=y(Qe+c),O=y(Me+f),f=y(se+qe),k=y(O+B),Q=(n[s+988>>2]|0)==1,h[d>>2]=y(qo(Qe,l,0,Q)),h[m>>2]=y(qo(Me,l,0,Q)),c=y(bR(y(qe*l),y(1))),Ii(c,y(0))|0?m=0:m=(Ii(c,y(1))|0)^1,c=y(bR(y(B*l),y(1))),Ii(c,y(0))|0?d=0:d=(Ii(c,y(1))|0)^1,Qe=y(qo(f,l,Q&m,Q&(m^1))),h[G>>2]=y(Qe-y(qo(se,l,0,Q))),Qe=y(qo(k,l,Q&d,Q&(d^1))),h[M>>2]=y(Qe-y(qo(O,l,0,Q))),m=(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2,m|0)){d=0;do Dc(gs(s,d)|0,l,se,O),d=d+1|0;while((d|0)!=(m|0))}}function Cw(s,l,c,f,d){switch(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,c|0){case 5:case 0:{s=i7(n[489]|0,f,d)|0;break}default:s=zUe(f,d)|0}return s|0}function Eg(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;d=C,C=C+16|0,m=d,n[m>>2]=f,Cg(s,0,l,c,m),C=d}function Cg(s,l,c,f,d){if(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,s=s|0?s:956,D7[n[s+8>>2]&1](s,l,c,f,d)|0,(c|0)==5)Rt();else return}function qa(s,l,c){s=s|0,l=l|0,c=c|0,o[s+l>>0]=c&1}function Rm(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(wg(s,f),Qt(s,n[l>>2]|0,n[c>>2]|0,f))}function wg(s,l){s=s|0,l=l|0;var c=0;if((N(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function Qt(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function N(s){return s=s|0,1073741823}function K(s,l,c){return s=s|0,l=l|0,c=y(c),pe(l)|0&&(n[s+96>>2]|0)!=0?s=s+92|0:s=Fn(s+60|0,n[1040+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function re(s,l,c){return s=s|0,l=l|0,c=y(c),pe(l)|0&&(n[s+104>>2]|0)!=0?s=s+100|0:s=Fn(s+60|0,n[1e3+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function pe(s){return s=s|0,(s|1|0)==3|0}function ze(s,l){return s=s|0,l=y(l),(n[s+4>>2]|0)==3?l=y(0):l=y(qr(s,l)),y(l)}function mt(s,l){return s=s|0,l=l|0,s=n[s>>2]|0,((s|0)==0?(l|0)>1?l:1:s)|0}function fr(s,l){s=s|0,l=l|0;var c=0;e:do if((l|0)==2){switch(s|0){case 2:{s=3;break e}case 3:break;default:{c=4;break e}}s=2}else c=4;while(0);return s|0}function Cr(s,l){s=s|0,l=l|0;var c=Ze;return pe(l)|0&&(n[s+312>>2]|0)!=0&&(c=y(h[s+308>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1040+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function yn(s,l){s=s|0,l=l|0;var c=Ze;return pe(l)|0&&(n[s+320>>2]|0)!=0&&(c=y(h[s+316>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1e3+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return pe(l)|0&&(n[s+240>>2]|0)!=0&&(f=y(qr(s+236|0,c)),f>=y(0))||(f=y(_n(y(qr(Fn(s+204|0,n[1040+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return pe(l)|0&&(n[s+248>>2]|0)!=0&&(f=y(qr(s+244|0,c)),f>=y(0))||(f=y(_n(y(qr(Fn(s+204|0,n[1e3+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Ig(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,M=Ze,O=Ze,G=Ze,se=Ze,qe=0,Me=0,Qe=0;Qe=C,C=C+16|0,qe=Qe,Me=s+964|0,Un(s,(n[Me>>2]|0)!=0,3519),k=y(En(s,2,l)),Q=y(En(s,0,l)),M=y(ln(s,2,l)),O=y(ln(s,0,l)),_t(l)|0?G=l:G=y(_n(y(0),y(y(l-M)-k))),_t(c)|0?se=c:se=y(_n(y(0),y(y(c-O)-Q))),(f|0)==1&(d|0)==1?(h[s+908>>2]=y(Bi(s,2,y(l-M),m,m)),l=y(Bi(s,0,y(c-O),B,m))):(S7[n[Me>>2]&1](qe,s,G,f,se,d),G=y(k+y(h[qe>>2])),se=y(l-M),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?G:se,m,m)),se=y(Q+y(h[qe+4>>2])),l=y(c-O),l=y(Bi(s,0,(d|2|0)==2?se:l,B,m))),h[s+912>>2]=l,C=Qe}function qv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,M=Ze,O=Ze;M=y(En(s,2,m)),k=y(En(s,0,m)),O=y(ln(s,2,m)),Q=y(ln(s,0,m)),l=y(l-O),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?M:l,m,m)),c=y(c-Q),h[s+912>>2]=y(Bi(s,0,(d|2|0)==2?k:c,B,m))}function Yv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=0,Q=Ze,M=Ze;return k=(f|0)==2,!(l<=y(0)&k)&&!(c<=y(0)&(d|0)==2)&&!((f|0)==1&(d|0)==1)?s=0:(Q=y(ln(s,0,m)),M=y(ln(s,2,m)),k=l>2]=y(Bi(s,2,k?y(0):l,m,m)),l=y(c-Q),k=c>2]=y(Bi(s,0,k?y(0):l,B,m)),s=1),s|0}function ww(s,l){return s=s|0,l=l|0,UA(s)|0?s=fr(2,l)|0:s=0,s|0}function Cp(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(oi(s,l,c)),y(c+y(Cr(s,l)))}function Iw(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(Oi(s,l,c)),y(c+y(yn(s,l)))}function En(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(Cp(s,l,c)),y(f+y(Iw(s,l,c)))}function Tm(s){return s=s|0,n[s+24>>2]|0?s=0:y(rs(s))!=y(0)?s=1:s=y(js(s))!=y(0),s|0}function rs(s){s=s|0;var l=Ze;if(n[s+944>>2]|0){if(l=y(h[s+44>>2]),_t(l)|0)return l=y(h[s+40>>2]),s=l>y(0)&((_t(l)|0)^1),y(s?l:y(0))}else l=y(0);return y(l)}function js(s){s=s|0;var l=Ze,c=0,f=Ze;do if(n[s+944>>2]|0){if(l=y(h[s+48>>2]),_t(l)|0){if(c=o[(n[s+976>>2]|0)+2>>0]|0,c<<24>>24==0&&(f=y(h[s+40>>2]),f>24?y(1):y(0)}}else l=y(0);while(0);return y(l)}function Bu(s){s=s|0;var l=0,c=0;if(Xm(s+400|0,0,540)|0,o[s+985>>0]=1,$(s),c=wi(s)|0,c|0){l=s+948|0,s=0;do Bu(n[(n[l>>2]|0)+(s<<2)>>2]|0),s=s+1|0;while((s|0)!=(c|0))}}function Nm(s,l,c,f,d,m,B,k,Q,M){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=y(m),B=y(B),k=k|0,Q=Q|0,M=M|0;var O=0,G=Ze,se=0,qe=0,Me=Ze,Qe=Ze,et=0,Xe=Ze,lt=0,Ue=Ze,Ge=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0,xn=0,go=0;xn=C,C=C+16|0,Mr=xn+12|0,or=xn+8|0,Xt=xn+4|0,Sr=xn,ir=fr(n[s+4>>2]|0,Q)|0,Ge=pe(ir)|0,G=y(qr(Bw(l)|0,Ge?m:B)),Lt=ts(l,2,m)|0,Nr=ts(l,0,B)|0;do if(!(_t(G)|0)&&!(_t(Ge?c:d)|0)){if(O=l+504|0,!(_t(y(h[O>>2]))|0)&&(!(vw(n[l+976>>2]|0,0)|0)||(n[l+500>>2]|0)==(n[2278]|0)))break;h[O>>2]=y(_n(G,y(En(l,ir,m))))}else se=7;while(0);do if((se|0)==7){if(lt=Ge^1,!(lt|Lt^1)){B=y(qr(n[l+992>>2]|0,m)),h[l+504>>2]=y(_n(B,y(En(l,2,m))));break}if(!(Ge|Nr^1)){B=y(qr(n[l+996>>2]|0,B)),h[l+504>>2]=y(_n(B,y(En(l,0,m))));break}h[Mr>>2]=y(ce),h[or>>2]=y(ce),n[Xt>>2]=0,n[Sr>>2]=0,Xe=y(ln(l,2,m)),Ue=y(ln(l,0,m)),Lt?(Me=y(Xe+y(qr(n[l+992>>2]|0,m))),h[Mr>>2]=Me,n[Xt>>2]=1,qe=1):(qe=0,Me=y(ce)),Nr?(G=y(Ue+y(qr(n[l+996>>2]|0,B))),h[or>>2]=G,n[Sr>>2]=1,O=1):(O=0,G=y(ce)),se=n[s+32>>2]|0,Ge&(se|0)==2?se=2:_t(Me)|0&&!(_t(c)|0)&&(h[Mr>>2]=c,n[Xt>>2]=2,qe=2,Me=c),!((se|0)==2<)&&_t(G)|0&&!(_t(d)|0)&&(h[or>>2]=d,n[Sr>>2]=2,O=2,G=d),Qe=y(h[l+396>>2]),et=_t(Qe)|0;do if(et)se=qe;else{if((qe|0)==1<){h[or>>2]=y(y(Me-Xe)/Qe),n[Sr>>2]=1,O=1,se=1;break}Ge&(O|0)==1?(h[Mr>>2]=y(Qe*y(G-Ue)),n[Xt>>2]=1,O=1,se=1):se=qe}while(0);go=_t(c)|0,qe=(ha(s,l)|0)!=4,!(Ge|Lt|((f|0)!=1|go)|(qe|(se|0)==1))&&(h[Mr>>2]=c,n[Xt>>2]=1,!et)&&(h[or>>2]=y(y(c-Xe)/Qe),n[Sr>>2]=1,O=1),!(Nr|lt|((k|0)!=1|(_t(d)|0))|(qe|(O|0)==1))&&(h[or>>2]=d,n[Sr>>2]=1,!et)&&(h[Mr>>2]=y(Qe*y(d-Ue)),n[Xt>>2]=1),yr(l,2,m,m,Xt,Mr),yr(l,0,B,m,Sr,or),c=y(h[Mr>>2]),d=y(h[or>>2]),fa(l,c,d,Q,n[Xt>>2]|0,n[Sr>>2]|0,m,B,0,3565,M)|0,B=y(h[l+908+(n[976+(ir<<2)>>2]<<2)>>2]),h[l+504>>2]=y(_n(B,y(En(l,ir,m))))}while(0);n[l+500>>2]=n[2278],C=xn}function Bi(s,l,c,f,d){return s=s|0,l=l|0,c=y(c),f=y(f),d=y(d),f=y(MA(s,l,c,f)),y(_n(f,y(En(s,l,d))))}function ha(s,l){return s=s|0,l=l|0,l=l+20|0,l=n[((n[l>>2]|0)==0?s+16|0:l)>>2]|0,(l|0)==5&&UA(n[s+4>>2]|0)|0&&(l=1),l|0}function vl(s,l){return s=s|0,l=l|0,pe(l)|0&&(n[s+96>>2]|0)!=0?l=4:l=n[1040+(l<<2)>>2]|0,s+60+(l<<3)|0}function Sc(s,l){return s=s|0,l=l|0,pe(l)|0&&(n[s+104>>2]|0)!=0?l=5:l=n[1e3+(l<<2)>>2]|0,s+60+(l<<3)|0}function yr(s,l,c,f,d,m){switch(s=s|0,l=l|0,c=y(c),f=y(f),d=d|0,m=m|0,c=y(qr(s+380+(n[976+(l<<2)>>2]<<3)|0,c)),c=y(c+y(ln(s,l,f))),n[d>>2]|0){case 2:case 1:{d=_t(c)|0,f=y(h[m>>2]),h[m>>2]=d|f>2]=2,h[m>>2]=c);break}default:}}function gi(s,l){return s=s|0,l=l|0,s=s+132|0,pe(l)|0&&(n[(Fn(s,4,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1040+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function Or(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,pe(l)|0&&(f=Fn(s,4,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1040+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(qr(f,c))),y(c)}function ns(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),f=y(f+y(K(s,l,c))),y(f+y(re(s,l,c)))}function Yi(s){s=s|0;var l=0,c=0,f=0;e:do if(UA(n[s+4>>2]|0)|0)l=0;else if((n[s+16>>2]|0)!=5)if(c=wi(s)|0,!c)l=0;else for(l=0;;){if(f=gs(s,l)|0,(n[f+24>>2]|0)==0&&(n[f+20>>2]|0)==5){l=1;break e}if(l=l+1|0,l>>>0>=c>>>0){l=0;break}}else l=1;while(0);return l|0}function Lm(s,l){s=s|0,l=l|0;var c=Ze;return c=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),c>=y(0)&((_t(c)|0)^1)|0}function Ya(s){s=s|0;var l=Ze,c=0,f=0,d=0,m=0,B=0,k=0,Q=Ze;if(c=n[s+968>>2]|0,c)Q=y(h[s+908>>2]),l=y(h[s+912>>2]),l=y(w7[c&0](s,Q,l)),Un(s,(_t(l)|0)^1,3573);else{m=wi(s)|0;do if(m|0){for(c=0,d=0;;){if(f=gs(s,d)|0,n[f+940>>2]|0){B=8;break}if((n[f+24>>2]|0)!=1)if(k=(ha(s,f)|0)==5,k){c=f;break}else c=(c|0)==0?f:c;if(d=d+1|0,d>>>0>=m>>>0){B=8;break}}if((B|0)==8&&!c)break;return l=y(Ya(c)),y(l+y(h[c+404>>2]))}while(0);l=y(h[s+912>>2])}return y(l)}function MA(s,l,c,f){s=s|0,l=l|0,c=y(c),f=y(f);var d=Ze,m=0;return UA(l)|0?(l=1,m=3):pe(l)|0?(l=0,m=3):(f=y(ce),d=y(ce)),(m|0)==3&&(d=y(qr(s+364+(l<<3)|0,f)),f=y(qr(s+380+(l<<3)|0,f))),m=f=y(0)&((_t(f)|0)^1)),c=m?f:c,m=d>=y(0)&((_t(d)|0)^1)&c>2]|0,m)|0,Me=ww(et,m)|0,Qe=pe(et)|0,G=y(ln(l,2,c)),se=y(ln(l,0,c)),ts(l,2,c)|0?k=y(G+y(qr(n[l+992>>2]|0,c))):gi(l,2)|0&&sr(l,2)|0?(k=y(h[s+908>>2]),Q=y(Cr(s,2)),Q=y(k-y(Q+y(yn(s,2)))),k=y(Or(l,2,c)),k=y(Bi(l,2,y(Q-y(k+y(vu(l,2,c)))),c,c))):k=y(ce),ts(l,0,d)|0?Q=y(se+y(qr(n[l+996>>2]|0,d))):gi(l,0)|0&&sr(l,0)|0?(Q=y(h[s+912>>2]),lt=y(Cr(s,0)),lt=y(Q-y(lt+y(yn(s,0)))),Q=y(Or(l,0,d)),Q=y(Bi(l,0,y(lt-y(Q+y(vu(l,0,d)))),d,c))):Q=y(ce),M=_t(k)|0,O=_t(Q)|0;do if(M^O&&(qe=y(h[l+396>>2]),!(_t(qe)|0)))if(M){k=y(G+y(y(Q-se)*qe));break}else{lt=y(se+y(y(k-G)/qe)),Q=O?lt:Q;break}while(0);O=_t(k)|0,M=_t(Q)|0,O|M&&(Ue=(O^1)&1,f=c>y(0)&((f|0)!=0&O),k=Qe?k:f?c:k,fa(l,k,Q,m,Qe?Ue:f?2:Ue,O&(M^1)&1,k,Q,0,3623,B)|0,k=y(h[l+908>>2]),k=y(k+y(ln(l,2,c))),Q=y(h[l+912>>2]),Q=y(Q+y(ln(l,0,c)))),fa(l,k,Q,m,1,1,k,Q,1,3635,B)|0,sr(l,et)|0&&!(gi(l,et)|0)?(Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),lt=y(lt-y(yn(s,et))),lt=y(lt-y(re(l,et,c))),lt=y(lt-y(vu(l,et,Qe?c:d))),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt):Xe=21;do if((Xe|0)==21){if(!(gi(l,et)|0)&&(n[s+8>>2]|0)==1){Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(y(lt-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt;break}!(gi(l,et)|0)&&(n[s+8>>2]|0)==2&&(Ue=n[976+(et<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=lt)}while(0);sr(l,Me)|0&&!(gi(l,Me)|0)?(Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),lt=y(lt-y(yn(s,Me))),lt=y(lt-y(re(l,Me,c))),lt=y(lt-y(vu(l,Me,Qe?d:c))),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt):Xe=30;do if((Xe|0)==30&&!(gi(l,Me)|0)){if((ha(s,l)|0)==2){Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(y(lt-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt;break}Ue=(ha(s,l)|0)==3,Ue^(n[s+28>>2]|0)==2&&(Ue=n[976+(Me<<2)>>2]|0,lt=y(h[s+908+(Ue<<2)>>2]),lt=y(lt-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(Me<<2)>>2]<<2)>>2]=lt)}while(0)}function wp(s,l,c){s=s|0,l=l|0,c=c|0;var f=Ze,d=0;d=n[976+(c<<2)>>2]|0,f=y(h[l+908+(d<<2)>>2]),f=y(y(h[s+908+(d<<2)>>2])-f),f=y(f-y(h[l+400+(n[1040+(c<<2)>>2]<<2)>>2])),h[l+400+(n[1e3+(c<<2)>>2]<<2)>>2]=f}function UA(s){return s=s|0,(s|1|0)==1|0}function Bw(s){s=s|0;var l=Ze;switch(n[s+56>>2]|0){case 0:case 3:{l=y(h[s+40>>2]),l>y(0)&((_t(l)|0)^1)?s=o[(n[s+976>>2]|0)+2>>0]|0?1056:992:s=1056;break}default:s=s+52|0}return s|0}function vw(s,l){return s=s|0,l=l|0,(o[s+l>>0]|0)!=0|0}function sr(s,l){return s=s|0,l=l|0,s=s+132|0,pe(l)|0&&(n[(Fn(s,5,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1e3+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function vu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,pe(l)|0&&(f=Fn(s,5,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1e3+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(qr(f,c))),y(c)}function Mm(s,l,c){return s=s|0,l=l|0,c=y(c),gi(s,l)|0?c=y(Or(s,l,c)):c=y(-y(vu(s,l,c))),y(c)}function Du(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function Ip(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function Bg(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function _A(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function HA(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;if(B=s+4|0,k=n[B>>2]|0,d=k-f|0,m=d>>2,s=l+(m<<2)|0,s>>>0>>0){f=k;do n[f>>2]=n[s>>2],s=s+4|0,f=(n[B>>2]|0)+4|0,n[B>>2]=f;while(s>>>0>>0)}m|0&&Mw(k+(0-m<<2)|0,l|0,d|0)|0}function vg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return k=l+4|0,Q=n[k>>2]|0,d=n[s>>2]|0,B=c,m=B-d|0,f=Q+(0-(m>>2)<<2)|0,n[k>>2]=f,(m|0)>0&&Dr(f|0,d|0,m|0)|0,d=s+4|0,m=l+8|0,f=(n[d>>2]|0)-B|0,(f|0)>0&&(Dr(n[m>>2]|0,c|0,f|0)|0,n[m>>2]=(n[m>>2]|0)+(f>>>2<<2)),B=n[s>>2]|0,n[s>>2]=n[k>>2],n[k>>2]=B,B=n[d>>2]|0,n[d>>2]=n[m>>2],n[m>>2]=B,B=s+8|0,c=l+12|0,s=n[B>>2]|0,n[B>>2]=n[c>>2],n[c>>2]=s,n[l>>2]=n[k>>2],Q|0}function Dw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(B=n[l>>2]|0,m=n[c>>2]|0,(B|0)!=(m|0)){d=s+8|0,c=((m+-4-B|0)>>>2)+1|0,s=B,f=n[d>>2]|0;do n[f>>2]=n[s>>2],f=(n[d>>2]|0)+4|0,n[d>>2]=f,s=s+4|0;while((s|0)!=(m|0));n[l>>2]=B+(c<<2)}}function Um(){dc()}function ga(){var s=0;return s=Kt(4)|0,jA(s),s|0}function jA(s){s=s|0,n[s>>2]=ys()|0}function Pc(s){s=s|0,s|0&&(Dg(s),gt(s))}function Dg(s){s=s|0,tt(n[s>>2]|0)}function _m(s,l,c){s=s|0,l=l|0,c=c|0,qa(n[s>>2]|0,l,c)}function fo(s,l){s=s|0,l=y(l),pa(n[s>>2]|0,l)}function Wv(s,l){return s=s|0,l=l|0,vw(n[s>>2]|0,l)|0}function Sw(){var s=0;return s=Kt(8)|0,Kv(s,0),s|0}function Kv(s,l){s=s|0,l=l|0,l?l=Ci(n[l>>2]|0)|0:l=co()|0,n[s>>2]=l,n[s+4>>2]=0,bi(l,s)}function AF(s){s=s|0;var l=0;return l=Kt(8)|0,Kv(l,s),l|0}function Vv(s){s=s|0,s|0&&(Su(s),gt(s))}function Su(s){s=s|0;var l=0;la(n[s>>2]|0),l=s+4|0,s=n[l>>2]|0,n[l>>2]=0,s|0&&(GA(s),gt(s))}function GA(s){s=s|0,qA(s)}function qA(s){s=s|0,s=n[s>>2]|0,s|0&&PA(s|0)}function Pw(s){return s=s|0,jo(s)|0}function Hm(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(GA(l),gt(l)),_s(n[s>>2]|0)}function fF(s,l){s=s|0,l=l|0,$r(n[s>>2]|0,n[l>>2]|0)}function pF(s,l){s=s|0,l=l|0,ca(n[s>>2]|0,l)}function Jv(s,l,c){s=s|0,l=l|0,c=+c,yu(n[s>>2]|0,l,y(c))}function zv(s,l,c){s=s|0,l=l|0,c=+c,Es(n[s>>2]|0,l,y(c))}function bw(s,l){s=s|0,l=l|0,gu(n[s>>2]|0,l)}function Pu(s,l){s=s|0,l=l|0,du(n[s>>2]|0,l)}function hF(s,l){s=s|0,l=l|0,FA(n[s>>2]|0,l)}function gF(s,l){s=s|0,l=l|0,kA(n[s>>2]|0,l)}function Bp(s,l){s=s|0,l=l|0,yc(n[s>>2]|0,l)}function dF(s,l){s=s|0,l=l|0,Ap(n[s>>2]|0,l)}function Xv(s,l,c){s=s|0,l=l|0,c=+c,Cc(n[s>>2]|0,l,y(c))}function YA(s,l,c){s=s|0,l=l|0,c=+c,q(n[s>>2]|0,l,y(c))}function mF(s,l){s=s|0,l=l|0,wl(n[s>>2]|0,l)}function yF(s,l){s=s|0,l=l|0,ag(n[s>>2]|0,l)}function Zv(s,l){s=s|0,l=l|0,fp(n[s>>2]|0,l)}function xw(s,l){s=s|0,l=+l,RA(n[s>>2]|0,y(l))}function kw(s,l){s=s|0,l=+l,Ha(n[s>>2]|0,y(l))}function EF(s,l){s=s|0,l=+l,qi(n[s>>2]|0,y(l))}function CF(s,l){s=s|0,l=+l,Hs(n[s>>2]|0,y(l))}function Dl(s,l){s=s|0,l=+l,mu(n[s>>2]|0,y(l))}function Qw(s,l){s=s|0,l=+l,yw(n[s>>2]|0,y(l))}function wF(s,l){s=s|0,l=+l,TA(n[s>>2]|0,y(l))}function WA(s){s=s|0,pp(n[s>>2]|0)}function jm(s,l){s=s|0,l=+l,Cs(n[s>>2]|0,y(l))}function bu(s,l){s=s|0,l=+l,ug(n[s>>2]|0,y(l))}function Fw(s){s=s|0,Ag(n[s>>2]|0)}function Rw(s,l){s=s|0,l=+l,hp(n[s>>2]|0,y(l))}function IF(s,l){s=s|0,l=+l,Ic(n[s>>2]|0,y(l))}function $v(s,l){s=s|0,l=+l,bm(n[s>>2]|0,y(l))}function KA(s,l){s=s|0,l=+l,pg(n[s>>2]|0,y(l))}function eD(s,l){s=s|0,l=+l,Cu(n[s>>2]|0,y(l))}function Gm(s,l){s=s|0,l=+l,xm(n[s>>2]|0,y(l))}function tD(s,l){s=s|0,l=+l,wu(n[s>>2]|0,y(l))}function rD(s,l){s=s|0,l=+l,Ew(n[s>>2]|0,y(l))}function qm(s,l){s=s|0,l=+l,Aa(n[s>>2]|0,y(l))}function nD(s,l,c){s=s|0,l=l|0,c=+c,Eu(n[s>>2]|0,l,y(c))}function BF(s,l,c){s=s|0,l=l|0,c=+c,xi(n[s>>2]|0,l,y(c))}function S(s,l,c){s=s|0,l=l|0,c=+c,wc(n[s>>2]|0,l,y(c))}function D(s){return s=s|0,og(n[s>>2]|0)|0}function T(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Ec(d,n[l>>2]|0,c),j(s,d),C=f}function j(s,l){s=s|0,l=l|0,Y(s,n[l+4>>2]|0,+y(h[l>>2]))}function Y(s,l,c){s=s|0,l=l|0,c=+c,n[s>>2]=l,E[s+8>>3]=c}function Ae(s){return s=s|0,sg(n[s>>2]|0)|0}function De(s){return s=s|0,uo(n[s>>2]|0)|0}function vt(s){return s=s|0,mc(n[s>>2]|0)|0}function wt(s){return s=s|0,QA(n[s>>2]|0)|0}function xt(s){return s=s|0,Pm(n[s>>2]|0)|0}function _r(s){return s=s|0,ig(n[s>>2]|0)|0}function is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Dt(d,n[l>>2]|0,c),j(s,d),C=f}function di(s){return s=s|0,$n(n[s>>2]|0)|0}function po(s){return s=s|0,lg(n[s>>2]|0)|0}function VA(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,ua(f,n[l>>2]|0),j(s,f),C=c}function Yo(s){return s=s|0,+ +y(Gi(n[s>>2]|0))}function rt(s){return s=s|0,+ +y(es(n[s>>2]|0))}function Ve(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Br(f,n[l>>2]|0),j(s,f),C=c}function ft(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,fg(f,n[l>>2]|0),j(s,f),C=c}function Wt(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ct(f,n[l>>2]|0),j(s,f),C=c}function vr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,hg(f,n[l>>2]|0),j(s,f),C=c}function Pn(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,gg(f,n[l>>2]|0),j(s,f),C=c}function Fr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,km(f,n[l>>2]|0),j(s,f),C=c}function bn(s){return s=s|0,+ +y(Bc(n[s>>2]|0))}function ai(s,l){return s=s|0,l=l|0,+ +y(cg(n[s>>2]|0,l))}function tn(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,ct(d,n[l>>2]|0,c),j(s,d),C=f}function ho(s,l,c){s=s|0,l=l|0,c=c|0,nr(n[s>>2]|0,n[l>>2]|0,c)}function vF(s,l){s=s|0,l=l|0,ms(n[s>>2]|0,n[l>>2]|0)}function eve(s){return s=s|0,wi(n[s>>2]|0)|0}function tve(s){return s=s|0,s=ht(n[s>>2]|0)|0,s?s=Pw(s)|0:s=0,s|0}function rve(s,l){return s=s|0,l=l|0,s=gs(n[s>>2]|0,l)|0,s?s=Pw(s)|0:s=0,s|0}function nve(s,l){s=s|0,l=l|0;var c=0,f=0;f=Kt(4)|0,zq(f,l),c=s+4|0,l=n[c>>2]|0,n[c>>2]=f,l|0&&(GA(l),gt(l)),It(n[s>>2]|0,1)}function zq(s,l){s=s|0,l=l|0,gve(s,l)}function ive(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,sve(k,jo(l)|0,+c,f,+d,m),h[s>>2]=y(+E[k>>3]),h[s+4>>2]=y(+E[k+8>>3]),C=B}function sve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0,k=0,Q=0,M=0,O=0;B=C,C=C+32|0,O=B+8|0,M=B+20|0,Q=B,k=B+16|0,E[O>>3]=c,n[M>>2]=f,E[Q>>3]=d,n[k>>2]=m,ove(s,n[l+4>>2]|0,O,M,Q,k),C=B}function ove(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,Ka(k),l=da(l)|0,ave(s,l,+E[c>>3],n[f>>2]|0,+E[d>>3],n[m>>2]|0),Va(k),C=B}function da(s){return s=s|0,n[s>>2]|0}function ave(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0;B=Sl(lve()|0)|0,c=+JA(c),f=DF(f)|0,d=+JA(d),cve(s,hi(0,B|0,l|0,+c,f|0,+d,DF(m)|0)|0)}function lve(){var s=0;return o[7608]|0||(pve(9120),s=7608,n[s>>2]=1,n[s+4>>2]=0),9120}function Sl(s){return s=s|0,n[s+8>>2]|0}function JA(s){return s=+s,+ +SF(s)}function DF(s){return s=s|0,Zq(s)|0}function cve(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=l,f&1?(uve(c,0),ii(f|0,c|0)|0,Ave(s,c),fve(c)):(n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]),C=d}function uve(s,l){s=s|0,l=l|0,Xq(s,l),n[s+8>>2]=0,o[s+24>>0]=0}function Ave(s,l){s=s|0,l=l|0,l=l+8|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]}function fve(s){s=s|0,o[s+24>>0]=0}function Xq(s,l){s=s|0,l=l|0,n[s>>2]=l}function Zq(s){return s=s|0,s|0}function SF(s){return s=+s,+s}function pve(s){s=s|0,Pl(s,hve()|0,4)}function hve(){return 1064}function Pl(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=up(l|0,c+1|0)|0}function gve(s,l){s=s|0,l=l|0,l=n[l>>2]|0,n[s>>2]=l,yl(l|0)}function dve(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(GA(l),gt(l)),It(n[s>>2]|0,0)}function mve(s){s=s|0,Tt(n[s>>2]|0)}function yve(s){return s=s|0,er(n[s>>2]|0)|0}function Eve(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,vc(n[s>>2]|0,y(l),y(c),f)}function Cve(s){return s=s|0,+ +y(Il(n[s>>2]|0))}function wve(s){return s=s|0,+ +y(dg(n[s>>2]|0))}function Ive(s){return s=s|0,+ +y(Iu(n[s>>2]|0))}function Bve(s){return s=s|0,+ +y(NA(n[s>>2]|0))}function vve(s){return s=s|0,+ +y(gp(n[s>>2]|0))}function Dve(s){return s=s|0,+ +y(ja(n[s>>2]|0))}function Sve(s,l){s=s|0,l=l|0,E[s>>3]=+y(Il(n[l>>2]|0)),E[s+8>>3]=+y(dg(n[l>>2]|0)),E[s+16>>3]=+y(Iu(n[l>>2]|0)),E[s+24>>3]=+y(NA(n[l>>2]|0)),E[s+32>>3]=+y(gp(n[l>>2]|0)),E[s+40>>3]=+y(ja(n[l>>2]|0))}function Pve(s,l){return s=s|0,l=l|0,+ +y(mg(n[s>>2]|0,l))}function bve(s,l){return s=s|0,l=l|0,+ +y(dp(n[s>>2]|0,l))}function xve(s,l){return s=s|0,l=l|0,+ +y(Go(n[s>>2]|0,l))}function kve(){return Sn()|0}function Qve(){Fve(),Rve(),Tve(),Nve(),Lve(),Ove()}function Fve(){LNe(11713,4938,1)}function Rve(){tNe(10448)}function Tve(){LTe(10408)}function Nve(){sTe(10324)}function Lve(){pFe(10096)}function Ove(){Mve(9132)}function Mve(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,qe=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,Ge=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0,xn=0,go=0,mo=0,yo=0,ya=0,Fp=0,Rp=0,bl=0,Tp=0,Fu=0,Ru=0,Np=0,Lp=0,Op=0,Xr=0,xl=0,Mp=0,xc=0,Up=0,_p=0,Tu=0,Nu=0,kc=0,Gs=0,za=0,Wo=0,kl=0,nf=0,sf=0,Lu=0,of=0,af=0,qs=0,vs=0,Ql=0,Rn=0,lf=0,Eo=0,Qc=0,Co=0,Fc=0,cf=0,uf=0,Rc=0,Ys=0,Fl=0,Af=0,ff=0,pf=0,xr=0,Jn=0,Ds=0,wo=0,Ws=0,Rr=0,ur=0,Rl=0;l=C,C=C+672|0,c=l+656|0,Rl=l+648|0,ur=l+640|0,Rr=l+632|0,Ws=l+624|0,wo=l+616|0,Ds=l+608|0,Jn=l+600|0,xr=l+592|0,pf=l+584|0,ff=l+576|0,Af=l+568|0,Fl=l+560|0,Ys=l+552|0,Rc=l+544|0,uf=l+536|0,cf=l+528|0,Fc=l+520|0,Co=l+512|0,Qc=l+504|0,Eo=l+496|0,lf=l+488|0,Rn=l+480|0,Ql=l+472|0,vs=l+464|0,qs=l+456|0,af=l+448|0,of=l+440|0,Lu=l+432|0,sf=l+424|0,nf=l+416|0,kl=l+408|0,Wo=l+400|0,za=l+392|0,Gs=l+384|0,kc=l+376|0,Nu=l+368|0,Tu=l+360|0,_p=l+352|0,Up=l+344|0,xc=l+336|0,Mp=l+328|0,xl=l+320|0,Xr=l+312|0,Op=l+304|0,Lp=l+296|0,Np=l+288|0,Ru=l+280|0,Fu=l+272|0,Tp=l+264|0,bl=l+256|0,Rp=l+248|0,Fp=l+240|0,ya=l+232|0,yo=l+224|0,mo=l+216|0,go=l+208|0,xn=l+200|0,ir=l+192|0,Nr=l+184|0,Sr=l+176|0,Xt=l+168|0,or=l+160|0,Mr=l+152|0,Lt=l+144|0,Ge=l+136|0,Ue=l+128|0,lt=l+120|0,Xe=l+112|0,et=l+104|0,Qe=l+96|0,Me=l+88|0,qe=l+80|0,se=l+72|0,G=l+64|0,O=l+56|0,M=l+48|0,Q=l+40|0,k=l+32|0,B=l+24|0,m=l+16|0,d=l+8|0,f=l,Uve(s,3646),_ve(s,3651,2)|0,Hve(s,3665,2)|0,jve(s,3682,18)|0,n[Rl>>2]=19,n[Rl+4>>2]=0,n[c>>2]=n[Rl>>2],n[c+4>>2]=n[Rl+4>>2],Tw(s,3690,c)|0,n[ur>>2]=1,n[ur+4>>2]=0,n[c>>2]=n[ur>>2],n[c+4>>2]=n[ur+4>>2],Gve(s,3696,c)|0,n[Rr>>2]=2,n[Rr+4>>2]=0,n[c>>2]=n[Rr>>2],n[c+4>>2]=n[Rr+4>>2],xu(s,3706,c)|0,n[Ws>>2]=1,n[Ws+4>>2]=0,n[c>>2]=n[Ws>>2],n[c+4>>2]=n[Ws+4>>2],Sg(s,3722,c)|0,n[wo>>2]=2,n[wo+4>>2]=0,n[c>>2]=n[wo>>2],n[c+4>>2]=n[wo+4>>2],Sg(s,3734,c)|0,n[Ds>>2]=3,n[Ds+4>>2]=0,n[c>>2]=n[Ds>>2],n[c+4>>2]=n[Ds+4>>2],xu(s,3753,c)|0,n[Jn>>2]=4,n[Jn+4>>2]=0,n[c>>2]=n[Jn>>2],n[c+4>>2]=n[Jn+4>>2],xu(s,3769,c)|0,n[xr>>2]=5,n[xr+4>>2]=0,n[c>>2]=n[xr>>2],n[c+4>>2]=n[xr+4>>2],xu(s,3783,c)|0,n[pf>>2]=6,n[pf+4>>2]=0,n[c>>2]=n[pf>>2],n[c+4>>2]=n[pf+4>>2],xu(s,3796,c)|0,n[ff>>2]=7,n[ff+4>>2]=0,n[c>>2]=n[ff>>2],n[c+4>>2]=n[ff+4>>2],xu(s,3813,c)|0,n[Af>>2]=8,n[Af+4>>2]=0,n[c>>2]=n[Af>>2],n[c+4>>2]=n[Af+4>>2],xu(s,3825,c)|0,n[Fl>>2]=3,n[Fl+4>>2]=0,n[c>>2]=n[Fl>>2],n[c+4>>2]=n[Fl+4>>2],Sg(s,3843,c)|0,n[Ys>>2]=4,n[Ys+4>>2]=0,n[c>>2]=n[Ys>>2],n[c+4>>2]=n[Ys+4>>2],Sg(s,3853,c)|0,n[Rc>>2]=9,n[Rc+4>>2]=0,n[c>>2]=n[Rc>>2],n[c+4>>2]=n[Rc+4>>2],xu(s,3870,c)|0,n[uf>>2]=10,n[uf+4>>2]=0,n[c>>2]=n[uf>>2],n[c+4>>2]=n[uf+4>>2],xu(s,3884,c)|0,n[cf>>2]=11,n[cf+4>>2]=0,n[c>>2]=n[cf>>2],n[c+4>>2]=n[cf+4>>2],xu(s,3896,c)|0,n[Fc>>2]=1,n[Fc+4>>2]=0,n[c>>2]=n[Fc>>2],n[c+4>>2]=n[Fc+4>>2],Is(s,3907,c)|0,n[Co>>2]=2,n[Co+4>>2]=0,n[c>>2]=n[Co>>2],n[c+4>>2]=n[Co+4>>2],Is(s,3915,c)|0,n[Qc>>2]=3,n[Qc+4>>2]=0,n[c>>2]=n[Qc>>2],n[c+4>>2]=n[Qc+4>>2],Is(s,3928,c)|0,n[Eo>>2]=4,n[Eo+4>>2]=0,n[c>>2]=n[Eo>>2],n[c+4>>2]=n[Eo+4>>2],Is(s,3948,c)|0,n[lf>>2]=5,n[lf+4>>2]=0,n[c>>2]=n[lf>>2],n[c+4>>2]=n[lf+4>>2],Is(s,3960,c)|0,n[Rn>>2]=6,n[Rn+4>>2]=0,n[c>>2]=n[Rn>>2],n[c+4>>2]=n[Rn+4>>2],Is(s,3974,c)|0,n[Ql>>2]=7,n[Ql+4>>2]=0,n[c>>2]=n[Ql>>2],n[c+4>>2]=n[Ql+4>>2],Is(s,3983,c)|0,n[vs>>2]=20,n[vs+4>>2]=0,n[c>>2]=n[vs>>2],n[c+4>>2]=n[vs+4>>2],Tw(s,3999,c)|0,n[qs>>2]=8,n[qs+4>>2]=0,n[c>>2]=n[qs>>2],n[c+4>>2]=n[qs+4>>2],Is(s,4012,c)|0,n[af>>2]=9,n[af+4>>2]=0,n[c>>2]=n[af>>2],n[c+4>>2]=n[af+4>>2],Is(s,4022,c)|0,n[of>>2]=21,n[of+4>>2]=0,n[c>>2]=n[of>>2],n[c+4>>2]=n[of+4>>2],Tw(s,4039,c)|0,n[Lu>>2]=10,n[Lu+4>>2]=0,n[c>>2]=n[Lu>>2],n[c+4>>2]=n[Lu+4>>2],Is(s,4053,c)|0,n[sf>>2]=11,n[sf+4>>2]=0,n[c>>2]=n[sf>>2],n[c+4>>2]=n[sf+4>>2],Is(s,4065,c)|0,n[nf>>2]=12,n[nf+4>>2]=0,n[c>>2]=n[nf>>2],n[c+4>>2]=n[nf+4>>2],Is(s,4084,c)|0,n[kl>>2]=13,n[kl+4>>2]=0,n[c>>2]=n[kl>>2],n[c+4>>2]=n[kl+4>>2],Is(s,4097,c)|0,n[Wo>>2]=14,n[Wo+4>>2]=0,n[c>>2]=n[Wo>>2],n[c+4>>2]=n[Wo+4>>2],Is(s,4117,c)|0,n[za>>2]=15,n[za+4>>2]=0,n[c>>2]=n[za>>2],n[c+4>>2]=n[za+4>>2],Is(s,4129,c)|0,n[Gs>>2]=16,n[Gs+4>>2]=0,n[c>>2]=n[Gs>>2],n[c+4>>2]=n[Gs+4>>2],Is(s,4148,c)|0,n[kc>>2]=17,n[kc+4>>2]=0,n[c>>2]=n[kc>>2],n[c+4>>2]=n[kc+4>>2],Is(s,4161,c)|0,n[Nu>>2]=18,n[Nu+4>>2]=0,n[c>>2]=n[Nu>>2],n[c+4>>2]=n[Nu+4>>2],Is(s,4181,c)|0,n[Tu>>2]=5,n[Tu+4>>2]=0,n[c>>2]=n[Tu>>2],n[c+4>>2]=n[Tu+4>>2],Sg(s,4196,c)|0,n[_p>>2]=6,n[_p+4>>2]=0,n[c>>2]=n[_p>>2],n[c+4>>2]=n[_p+4>>2],Sg(s,4206,c)|0,n[Up>>2]=7,n[Up+4>>2]=0,n[c>>2]=n[Up>>2],n[c+4>>2]=n[Up+4>>2],Sg(s,4217,c)|0,n[xc>>2]=3,n[xc+4>>2]=0,n[c>>2]=n[xc>>2],n[c+4>>2]=n[xc+4>>2],zA(s,4235,c)|0,n[Mp>>2]=1,n[Mp+4>>2]=0,n[c>>2]=n[Mp>>2],n[c+4>>2]=n[Mp+4>>2],PF(s,4251,c)|0,n[xl>>2]=4,n[xl+4>>2]=0,n[c>>2]=n[xl>>2],n[c+4>>2]=n[xl+4>>2],zA(s,4263,c)|0,n[Xr>>2]=5,n[Xr+4>>2]=0,n[c>>2]=n[Xr>>2],n[c+4>>2]=n[Xr+4>>2],zA(s,4279,c)|0,n[Op>>2]=6,n[Op+4>>2]=0,n[c>>2]=n[Op>>2],n[c+4>>2]=n[Op+4>>2],zA(s,4293,c)|0,n[Lp>>2]=7,n[Lp+4>>2]=0,n[c>>2]=n[Lp>>2],n[c+4>>2]=n[Lp+4>>2],zA(s,4306,c)|0,n[Np>>2]=8,n[Np+4>>2]=0,n[c>>2]=n[Np>>2],n[c+4>>2]=n[Np+4>>2],zA(s,4323,c)|0,n[Ru>>2]=9,n[Ru+4>>2]=0,n[c>>2]=n[Ru>>2],n[c+4>>2]=n[Ru+4>>2],zA(s,4335,c)|0,n[Fu>>2]=2,n[Fu+4>>2]=0,n[c>>2]=n[Fu>>2],n[c+4>>2]=n[Fu+4>>2],PF(s,4353,c)|0,n[Tp>>2]=12,n[Tp+4>>2]=0,n[c>>2]=n[Tp>>2],n[c+4>>2]=n[Tp+4>>2],Pg(s,4363,c)|0,n[bl>>2]=1,n[bl+4>>2]=0,n[c>>2]=n[bl>>2],n[c+4>>2]=n[bl+4>>2],XA(s,4376,c)|0,n[Rp>>2]=2,n[Rp+4>>2]=0,n[c>>2]=n[Rp>>2],n[c+4>>2]=n[Rp+4>>2],XA(s,4388,c)|0,n[Fp>>2]=13,n[Fp+4>>2]=0,n[c>>2]=n[Fp>>2],n[c+4>>2]=n[Fp+4>>2],Pg(s,4402,c)|0,n[ya>>2]=14,n[ya+4>>2]=0,n[c>>2]=n[ya>>2],n[c+4>>2]=n[ya+4>>2],Pg(s,4411,c)|0,n[yo>>2]=15,n[yo+4>>2]=0,n[c>>2]=n[yo>>2],n[c+4>>2]=n[yo+4>>2],Pg(s,4421,c)|0,n[mo>>2]=16,n[mo+4>>2]=0,n[c>>2]=n[mo>>2],n[c+4>>2]=n[mo+4>>2],Pg(s,4433,c)|0,n[go>>2]=17,n[go+4>>2]=0,n[c>>2]=n[go>>2],n[c+4>>2]=n[go+4>>2],Pg(s,4446,c)|0,n[xn>>2]=18,n[xn+4>>2]=0,n[c>>2]=n[xn>>2],n[c+4>>2]=n[xn+4>>2],Pg(s,4458,c)|0,n[ir>>2]=3,n[ir+4>>2]=0,n[c>>2]=n[ir>>2],n[c+4>>2]=n[ir+4>>2],XA(s,4471,c)|0,n[Nr>>2]=1,n[Nr+4>>2]=0,n[c>>2]=n[Nr>>2],n[c+4>>2]=n[Nr+4>>2],iD(s,4486,c)|0,n[Sr>>2]=10,n[Sr+4>>2]=0,n[c>>2]=n[Sr>>2],n[c+4>>2]=n[Sr+4>>2],zA(s,4496,c)|0,n[Xt>>2]=11,n[Xt+4>>2]=0,n[c>>2]=n[Xt>>2],n[c+4>>2]=n[Xt+4>>2],zA(s,4508,c)|0,n[or>>2]=3,n[or+4>>2]=0,n[c>>2]=n[or>>2],n[c+4>>2]=n[or+4>>2],PF(s,4519,c)|0,n[Mr>>2]=4,n[Mr+4>>2]=0,n[c>>2]=n[Mr>>2],n[c+4>>2]=n[Mr+4>>2],qve(s,4530,c)|0,n[Lt>>2]=19,n[Lt+4>>2]=0,n[c>>2]=n[Lt>>2],n[c+4>>2]=n[Lt+4>>2],Yve(s,4542,c)|0,n[Ge>>2]=12,n[Ge+4>>2]=0,n[c>>2]=n[Ge>>2],n[c+4>>2]=n[Ge+4>>2],Wve(s,4554,c)|0,n[Ue>>2]=13,n[Ue+4>>2]=0,n[c>>2]=n[Ue>>2],n[c+4>>2]=n[Ue+4>>2],Kve(s,4568,c)|0,n[lt>>2]=2,n[lt+4>>2]=0,n[c>>2]=n[lt>>2],n[c+4>>2]=n[lt+4>>2],Vve(s,4578,c)|0,n[Xe>>2]=20,n[Xe+4>>2]=0,n[c>>2]=n[Xe>>2],n[c+4>>2]=n[Xe+4>>2],Jve(s,4587,c)|0,n[et>>2]=22,n[et+4>>2]=0,n[c>>2]=n[et>>2],n[c+4>>2]=n[et+4>>2],Tw(s,4602,c)|0,n[Qe>>2]=23,n[Qe+4>>2]=0,n[c>>2]=n[Qe>>2],n[c+4>>2]=n[Qe+4>>2],Tw(s,4619,c)|0,n[Me>>2]=14,n[Me+4>>2]=0,n[c>>2]=n[Me>>2],n[c+4>>2]=n[Me+4>>2],zve(s,4629,c)|0,n[qe>>2]=1,n[qe+4>>2]=0,n[c>>2]=n[qe>>2],n[c+4>>2]=n[qe+4>>2],Xve(s,4637,c)|0,n[se>>2]=4,n[se+4>>2]=0,n[c>>2]=n[se>>2],n[c+4>>2]=n[se+4>>2],XA(s,4653,c)|0,n[G>>2]=5,n[G+4>>2]=0,n[c>>2]=n[G>>2],n[c+4>>2]=n[G+4>>2],XA(s,4669,c)|0,n[O>>2]=6,n[O+4>>2]=0,n[c>>2]=n[O>>2],n[c+4>>2]=n[O+4>>2],XA(s,4686,c)|0,n[M>>2]=7,n[M+4>>2]=0,n[c>>2]=n[M>>2],n[c+4>>2]=n[M+4>>2],XA(s,4701,c)|0,n[Q>>2]=8,n[Q+4>>2]=0,n[c>>2]=n[Q>>2],n[c+4>>2]=n[Q+4>>2],XA(s,4719,c)|0,n[k>>2]=9,n[k+4>>2]=0,n[c>>2]=n[k>>2],n[c+4>>2]=n[k+4>>2],XA(s,4736,c)|0,n[B>>2]=21,n[B+4>>2]=0,n[c>>2]=n[B>>2],n[c+4>>2]=n[B+4>>2],Zve(s,4754,c)|0,n[m>>2]=2,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],iD(s,4772,c)|0,n[d>>2]=3,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],iD(s,4790,c)|0,n[f>>2]=4,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],iD(s,4808,c)|0,C=l}function Uve(s,l){s=s|0,l=l|0;var c=0;c=iFe()|0,n[s>>2]=c,sFe(c,l),xp(n[s>>2]|0)}function _ve(s,l,c){return s=s|0,l=l|0,c=c|0,qQe(s,pn(l)|0,c,0),s|0}function Hve(s,l,c){return s=s|0,l=l|0,c=c|0,bQe(s,pn(l)|0,c,0),s|0}function jve(s,l,c){return s=s|0,l=l|0,c=c|0,hQe(s,pn(l)|0,c,0),s|0}function Tw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Zke(s,l,d),C=f,s|0}function Gve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Rke(s,l,d),C=f,s|0}function xu(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],mke(s,l,d),C=f,s|0}function Sg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],tke(s,l,d),C=f,s|0}function Is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Uxe(s,l,d),C=f,s|0}function zA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Bxe(s,l,d),C=f,s|0}function PF(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],axe(s,l,d),C=f,s|0}function Pg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Rbe(s,l,d),C=f,s|0}function XA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],mbe(s,l,d),C=f,s|0}function iD(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],tbe(s,l,d),C=f,s|0}function qve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],UPe(s,l,d),C=f,s|0}function Yve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],BPe(s,l,d),C=f,s|0}function Wve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],lPe(s,l,d),C=f,s|0}function Kve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],KSe(s,l,d),C=f,s|0}function Vve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],kSe(s,l,d),C=f,s|0}function Jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pSe(s,l,d),C=f,s|0}function zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],XDe(s,l,d),C=f,s|0}function Xve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],RDe(s,l,d),C=f,s|0}function Zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$ve(s,l,d),C=f,s|0}function $ve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],eDe(s,c,d,1),C=f}function pn(s){return s=s|0,s|0}function eDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=bF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=tDe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,rDe(m,f)|0,f),C=d}function bF(){var s=0,l=0;if(o[7616]|0||(t9(9136),tr(24,9136,U|0)|0,l=7616,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9136)|0)){s=9136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t9(9136)}return 9136}function tDe(s){return s=s|0,0}function rDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=bF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],e9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(sDe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function hn(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0,se=0,qe=0;B=C,C=C+32|0,se=B+24|0,G=B+20|0,Q=B+16|0,O=B+12|0,M=B+8|0,k=B+4|0,qe=B,n[G>>2]=l,n[Q>>2]=c,n[O>>2]=f,n[M>>2]=d,n[k>>2]=m,m=s+28|0,n[qe>>2]=n[m>>2],n[se>>2]=n[qe>>2],nDe(s+24|0,se,G,O,M,Q,k)|0,n[m>>2]=n[n[m>>2]>>2],C=B}function nDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,s=iDe(l)|0,l=Kt(24)|0,$q(l+4|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0,n[B>>2]|0),n[l>>2]=n[s>>2],n[s>>2]=l,l|0}function iDe(s){return s=s|0,n[s>>2]|0}function $q(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function gr(s,l){return s=s|0,l=l|0,l|s|0}function e9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function sDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=oDe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,aDe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],e9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,lDe(s,k),cDe(k),C=M;return}}function oDe(s){return s=s|0,357913941}function aDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function lDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function cDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function t9(s){s=s|0,fDe(s)}function uDe(s){s=s|0,ADe(s+24|0)}function Tr(s){return s=s|0,n[s>>2]|0}function ADe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function fDe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,3,l,pDe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Kr(){return 9228}function pDe(){return 1140}function hDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=gDe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=dDe(l,f)|0,C=c,l|0}function Vr(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function gDe(s){return s=s|0,(n[(bF()|0)+24>>2]|0)+(s*12|0)|0}function dDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+48|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),rf[c&31](f,s),f=mDe(f)|0,C=d,f|0}function mDe(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=xF(r9()|0)|0,f?(kF(l,f),QF(c,l),yDe(s,c),s=FF(l)|0):s=EDe(s)|0,C=d,s|0}function r9(){var s=0;return o[7632]|0||(xDe(9184),tr(25,9184,U|0)|0,s=7632,n[s>>2]=1,n[s+4>>2]=0),9184}function xF(s){return s=s|0,n[s+36>>2]|0}function kF(s,l){s=s|0,l=l|0,n[s>>2]=l,n[s+4>>2]=s,n[s+8>>2]=0}function QF(s,l){s=s|0,l=l|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=0}function yDe(s,l){s=s|0,l=l|0,BDe(l,s,s+8|0,s+16|0,s+24|0,s+32|0,s+40|0)|0}function FF(s){return s=s|0,n[(n[s+4>>2]|0)+8>>2]|0}function EDe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;Q=C,C=C+16|0,c=Q+4|0,f=Q,d=Wa(8)|0,m=d,B=Kt(48)|0,k=B,l=k+48|0;do n[k>>2]=n[s>>2],k=k+4|0,s=s+4|0;while((k|0)<(l|0));return l=m+4|0,n[l>>2]=B,k=Kt(8)|0,B=n[l>>2]|0,n[f>>2]=0,n[c>>2]=n[f>>2],n9(k,B,c),n[d>>2]=k,C=Q,m|0}function n9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1092,n[c+12>>2]=l,n[s+4>>2]=c}function CDe(s){s=s|0,zm(s),gt(s)}function wDe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function IDe(s){s=s|0,gt(s)}function BDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,m=vDe(n[s>>2]|0,l,c,f,d,m,B)|0,B=s+4|0,n[(n[B>>2]|0)+8>>2]=m,n[(n[B>>2]|0)+8>>2]|0}function vDe(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0;var k=0,Q=0;return k=C,C=C+16|0,Q=k,Ka(Q),s=da(s)|0,B=DDe(s,+E[l>>3],+E[c>>3],+E[f>>3],+E[d>>3],+E[m>>3],+E[B>>3])|0,Va(Q),C=k,B|0}function DDe(s,l,c,f,d,m,B){s=s|0,l=+l,c=+c,f=+f,d=+d,m=+m,B=+B;var k=0;return k=Sl(SDe()|0)|0,l=+JA(l),c=+JA(c),f=+JA(f),d=+JA(d),m=+JA(m),Ms(0,k|0,s|0,+l,+c,+f,+d,+m,+ +JA(B))|0}function SDe(){var s=0;return o[7624]|0||(PDe(9172),s=7624,n[s>>2]=1,n[s+4>>2]=0),9172}function PDe(s){s=s|0,Pl(s,bDe()|0,6)}function bDe(){return 1112}function xDe(s){s=s|0,vp(s)}function kDe(s){s=s|0,i9(s+24|0),s9(s+16|0)}function i9(s){s=s|0,FDe(s)}function s9(s){s=s|0,QDe(s)}function QDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function FDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function vp(s){s=s|0;var l=0;n[s+16>>2]=0,n[s+20>>2]=0,l=s+24|0,n[l>>2]=0,n[s+28>>2]=l,n[s+36>>2]=0,o[s+40>>0]=0,o[s+41>>0]=0}function RDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],TDe(s,c,d,0),C=f}function TDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=RF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=NDe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,LDe(m,f)|0,f),C=d}function RF(){var s=0,l=0;if(o[7640]|0||(a9(9232),tr(26,9232,U|0)|0,l=7640,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9232)|0)){s=9232,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));a9(9232)}return 9232}function NDe(s){return s=s|0,0}function LDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=RF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],o9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(ODe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function o9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function ODe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=MDe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,UDe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],o9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,_De(s,k),HDe(k),C=M;return}}function MDe(s){return s=s|0,357913941}function UDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function _De(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function HDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function a9(s){s=s|0,qDe(s)}function jDe(s){s=s|0,GDe(s+24|0)}function GDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function qDe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,YDe()|0,3),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function YDe(){return 1144}function WDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,B=m+8|0,k=m,Q=KDe(s)|0,s=n[Q+4>>2]|0,n[k>>2]=n[Q>>2],n[k+4>>2]=s,n[B>>2]=n[k>>2],n[B+4>>2]=n[k+4>>2],VDe(l,B,c,f,d),C=m}function KDe(s){return s=s|0,(n[(RF()|0)+24>>2]|0)+(s*12|0)|0}function VDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0,M=0;M=C,C=C+16|0,B=M+2|0,k=M+1|0,Q=M,m=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(m=n[(n[s>>2]|0)+m>>2]|0),ku(B,c),c=+Qu(B,c),ku(k,f),f=+Qu(k,f),ZA(Q,d),Q=$A(Q,d)|0,I7[m&1](s,c,f,Q),C=M}function ku(s,l){s=s|0,l=+l}function Qu(s,l){return s=s|0,l=+l,+ +zDe(l)}function ZA(s,l){s=s|0,l=l|0}function $A(s,l){return s=s|0,l=l|0,JDe(l)|0}function JDe(s){return s=s|0,s|0}function zDe(s){return s=+s,+s}function XDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZDe(s,c,d,1),C=f}function ZDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=TF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=$De(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,eSe(m,f)|0,f),C=d}function TF(){var s=0,l=0;if(o[7648]|0||(c9(9268),tr(27,9268,U|0)|0,l=7648,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9268)|0)){s=9268,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));c9(9268)}return 9268}function $De(s){return s=s|0,0}function eSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=TF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],l9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(tSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function l9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function tSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=rSe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,nSe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],l9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,iSe(s,k),sSe(k),C=M;return}}function rSe(s){return s=s|0,357913941}function nSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function iSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function sSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function c9(s){s=s|0,lSe(s)}function oSe(s){s=s|0,aSe(s+24|0)}function aSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function lSe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,4,l,cSe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function cSe(){return 1160}function uSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=ASe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=fSe(l,f)|0,C=c,l|0}function ASe(s){return s=s|0,(n[(TF()|0)+24>>2]|0)+(s*12|0)|0}function fSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),u9(Lg[c&31](s)|0)|0}function u9(s){return s=s|0,s&1|0}function pSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],hSe(s,c,d,0),C=f}function hSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=NF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=gSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,dSe(m,f)|0,f),C=d}function NF(){var s=0,l=0;if(o[7656]|0||(f9(9304),tr(28,9304,U|0)|0,l=7656,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9304)|0)){s=9304,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f9(9304)}return 9304}function gSe(s){return s=s|0,0}function dSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=NF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],A9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(mSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function A9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function mSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ySe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,ESe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],A9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,CSe(s,k),wSe(k),C=M;return}}function ySe(s){return s=s|0,357913941}function ESe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function CSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function wSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function f9(s){s=s|0,vSe(s)}function ISe(s){s=s|0,BSe(s+24|0)}function BSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function vSe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,DSe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function DSe(){return 1164}function SSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=PSe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],bSe(l,d,c),C=f}function PSe(s){return s=s|0,(n[(NF()|0)+24>>2]|0)+(s*12|0)|0}function bSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Dp(d,c),c=Sp(d,c)|0,rf[f&31](s,c),Pp(d),C=m}function Dp(s,l){s=s|0,l=l|0,xSe(s,l)}function Sp(s,l){return s=s|0,l=l|0,s|0}function Pp(s){s=s|0,GA(s)}function xSe(s,l){s=s|0,l=l|0,LF(s,l)}function LF(s,l){s=s|0,l=l|0,n[s>>2]=l}function kSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],QSe(s,c,d,0),C=f}function QSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=OF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=FSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,RSe(m,f)|0,f),C=d}function OF(){var s=0,l=0;if(o[7664]|0||(h9(9340),tr(29,9340,U|0)|0,l=7664,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9340)|0)){s=9340,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));h9(9340)}return 9340}function FSe(s){return s=s|0,0}function RSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=OF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],p9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(TSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function p9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function TSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=NSe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,LSe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],p9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,OSe(s,k),MSe(k),C=M;return}}function NSe(s){return s=s|0,357913941}function LSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function OSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function MSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function h9(s){s=s|0,HSe(s)}function USe(s){s=s|0,_Se(s+24|0)}function _Se(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function HSe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,4,l,jSe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function jSe(){return 1180}function GSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=qSe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=YSe(l,d,c)|0,C=f,c|0}function qSe(s){return s=s|0,(n[(OF()|0)+24>>2]|0)+(s*12|0)|0}function YSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),bg(d,c),d=xg(d,c)|0,d=sD(RR[f&15](s,d)|0)|0,C=m,d|0}function bg(s,l){s=s|0,l=l|0}function xg(s,l){return s=s|0,l=l|0,WSe(l)|0}function sD(s){return s=s|0,s|0}function WSe(s){return s=s|0,s|0}function KSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],VSe(s,c,d,0),C=f}function VSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=MF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=JSe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,zSe(m,f)|0,f),C=d}function MF(){var s=0,l=0;if(o[7672]|0||(d9(9376),tr(30,9376,U|0)|0,l=7672,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9376)|0)){s=9376,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));d9(9376)}return 9376}function JSe(s){return s=s|0,0}function zSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=MF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],g9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(XSe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function g9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function XSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ZSe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,$Se(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],g9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,ePe(s,k),tPe(k),C=M;return}}function ZSe(s){return s=s|0,357913941}function $Se(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function ePe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function tPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function d9(s){s=s|0,iPe(s)}function rPe(s){s=s|0,nPe(s+24|0)}function nPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function iPe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,m9()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function m9(){return 1196}function sPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=oPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=aPe(l,f)|0,C=c,l|0}function oPe(s){return s=s|0,(n[(MF()|0)+24>>2]|0)+(s*12|0)|0}function aPe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),sD(Lg[c&31](s)|0)|0}function lPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],cPe(s,c,d,1),C=f}function cPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=UF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=uPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,APe(m,f)|0,f),C=d}function UF(){var s=0,l=0;if(o[7680]|0||(E9(9412),tr(31,9412,U|0)|0,l=7680,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9412)|0)){s=9412,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));E9(9412)}return 9412}function uPe(s){return s=s|0,0}function APe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=UF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],y9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(fPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function y9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function fPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=pPe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,hPe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],y9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,gPe(s,k),dPe(k),C=M;return}}function pPe(s){return s=s|0,357913941}function hPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function gPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function dPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function E9(s){s=s|0,EPe(s)}function mPe(s){s=s|0,yPe(s+24|0)}function yPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function EPe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,6,l,C9()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function C9(){return 1200}function CPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=wPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=IPe(l,f)|0,C=c,l|0}function wPe(s){return s=s|0,(n[(UF()|0)+24>>2]|0)+(s*12|0)|0}function IPe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),oD(Lg[c&31](s)|0)|0}function oD(s){return s=s|0,s|0}function BPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vPe(s,c,d,0),C=f}function vPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=_F()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=DPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,SPe(m,f)|0,f),C=d}function _F(){var s=0,l=0;if(o[7688]|0||(I9(9448),tr(32,9448,U|0)|0,l=7688,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9448)|0)){s=9448,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));I9(9448)}return 9448}function DPe(s){return s=s|0,0}function SPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=_F()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],w9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(PPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function w9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function PPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=bPe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,xPe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],w9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,kPe(s,k),QPe(k),C=M;return}}function bPe(s){return s=s|0,357913941}function xPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function kPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function QPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function I9(s){s=s|0,TPe(s)}function FPe(s){s=s|0,RPe(s+24|0)}function RPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function TPe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,6,l,B9()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function B9(){return 1204}function NPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=LPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],OPe(l,d,c),C=f}function LPe(s){return s=s|0,(n[(_F()|0)+24>>2]|0)+(s*12|0)|0}function OPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),HF(d,c),d=jF(d,c)|0,rf[f&31](s,d),C=m}function HF(s,l){s=s|0,l=l|0}function jF(s,l){return s=s|0,l=l|0,MPe(l)|0}function MPe(s){return s=s|0,s|0}function UPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],_Pe(s,c,d,0),C=f}function _Pe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=GF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=HPe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,jPe(m,f)|0,f),C=d}function GF(){var s=0,l=0;if(o[7696]|0||(D9(9484),tr(33,9484,U|0)|0,l=7696,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9484)|0)){s=9484,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));D9(9484)}return 9484}function HPe(s){return s=s|0,0}function jPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=GF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],v9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(GPe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function v9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function GPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qPe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,YPe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],v9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,WPe(s,k),KPe(k),C=M;return}}function qPe(s){return s=s|0,357913941}function YPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function WPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function KPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function D9(s){s=s|0,zPe(s)}function VPe(s){s=s|0,JPe(s+24|0)}function JPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function zPe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,XPe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function XPe(){return 1212}function ZPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=$Pe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],ebe(l,m,c,f),C=d}function $Pe(s){return s=s|0,(n[(GF()|0)+24>>2]|0)+(s*12|0)|0}function ebe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),HF(m,c),m=jF(m,c)|0,bg(B,f),B=xg(B,f)|0,Hw[d&15](s,m,B),C=k}function tbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rbe(s,c,d,1),C=f}function rbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=qF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=nbe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,ibe(m,f)|0,f),C=d}function qF(){var s=0,l=0;if(o[7704]|0||(P9(9520),tr(34,9520,U|0)|0,l=7704,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9520)|0)){s=9520,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));P9(9520)}return 9520}function nbe(s){return s=s|0,0}function ibe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=qF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],S9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(sbe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function S9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function sbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=obe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,abe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],S9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,lbe(s,k),cbe(k),C=M;return}}function obe(s){return s=s|0,357913941}function abe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function lbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function cbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function P9(s){s=s|0,fbe(s)}function ube(s){s=s|0,Abe(s+24|0)}function Abe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function fbe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,pbe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function pbe(){return 1224}function hbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;return d=C,C=C+16|0,m=d+8|0,B=d,k=gbe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],f=+dbe(l,m,c),C=d,+f}function gbe(s){return s=s|0,(n[(qF()|0)+24>>2]|0)+(s*12|0)|0}function dbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,B=+SF(+v7[f&7](s,d)),C=m,+B}function mbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ybe(s,c,d,1),C=f}function ybe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=YF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Ebe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Cbe(m,f)|0,f),C=d}function YF(){var s=0,l=0;if(o[7712]|0||(x9(9556),tr(35,9556,U|0)|0,l=7712,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9556)|0)){s=9556,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));x9(9556)}return 9556}function Ebe(s){return s=s|0,0}function Cbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=YF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],b9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(wbe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function b9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function wbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ibe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,Bbe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],b9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,vbe(s,k),Dbe(k),C=M;return}}function Ibe(s){return s=s|0,357913941}function Bbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function vbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Dbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function x9(s){s=s|0,bbe(s)}function Sbe(s){s=s|0,Pbe(s+24|0)}function Pbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function bbe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,xbe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function xbe(){return 1232}function kbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Qbe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=+Fbe(l,d),C=f,+c}function Qbe(s){return s=s|0,(n[(YF()|0)+24>>2]|0)+(s*12|0)|0}function Fbe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),+ +SF(+B7[c&15](s))}function Rbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Tbe(s,c,d,1),C=f}function Tbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=WF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Nbe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Lbe(m,f)|0,f),C=d}function WF(){var s=0,l=0;if(o[7720]|0||(Q9(9592),tr(36,9592,U|0)|0,l=7720,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9592)|0)){s=9592,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Q9(9592)}return 9592}function Nbe(s){return s=s|0,0}function Lbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=WF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],k9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Obe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function k9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Obe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Mbe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,Ube(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],k9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,_be(s,k),Hbe(k),C=M;return}}function Mbe(s){return s=s|0,357913941}function Ube(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function _be(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Hbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function Q9(s){s=s|0,qbe(s)}function jbe(s){s=s|0,Gbe(s+24|0)}function Gbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function qbe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,7,l,Ybe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Ybe(){return 1276}function Wbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=Kbe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=Vbe(l,f)|0,C=c,l|0}function Kbe(s){return s=s|0,(n[(WF()|0)+24>>2]|0)+(s*12|0)|0}function Vbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+16|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),rf[c&31](f,s),f=F9(f)|0,C=d,f|0}function F9(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=xF(R9()|0)|0,f?(kF(l,f),QF(c,l),Jbe(s,c),s=FF(l)|0):s=zbe(s)|0,C=d,s|0}function R9(){var s=0;return o[7736]|0||(oxe(9640),tr(25,9640,U|0)|0,s=7736,n[s>>2]=1,n[s+4>>2]=0),9640}function Jbe(s,l){s=s|0,l=l|0,exe(l,s,s+8|0)|0}function zbe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Kt(16)|0,n[k>>2]=n[s>>2],n[k+4>>2]=n[s+4>>2],n[k+8>>2]=n[s+8>>2],n[k+12>>2]=n[s+12>>2],m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],KF(s,m,d),n[f>>2]=s,C=c,l|0}function KF(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1244,n[c+12>>2]=l,n[s+4>>2]=c}function Xbe(s){s=s|0,zm(s),gt(s)}function Zbe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function $be(s){s=s|0,gt(s)}function exe(s,l,c){return s=s|0,l=l|0,c=c|0,l=txe(n[s>>2]|0,l,c)|0,c=s+4|0,n[(n[c>>2]|0)+8>>2]=l,n[(n[c>>2]|0)+8>>2]|0}function txe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return f=C,C=C+16|0,d=f,Ka(d),s=da(s)|0,c=rxe(s,n[l>>2]|0,+E[c>>3])|0,Va(d),C=f,c|0}function rxe(s,l,c){s=s|0,l=l|0,c=+c;var f=0;return f=Sl(nxe()|0)|0,l=DF(l)|0,ml(0,f|0,s|0,l|0,+ +JA(c))|0}function nxe(){var s=0;return o[7728]|0||(ixe(9628),s=7728,n[s>>2]=1,n[s+4>>2]=0),9628}function ixe(s){s=s|0,Pl(s,sxe()|0,2)}function sxe(){return 1264}function oxe(s){s=s|0,vp(s)}function axe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],lxe(s,c,d,1),C=f}function lxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=VF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=cxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,uxe(m,f)|0,f),C=d}function VF(){var s=0,l=0;if(o[7744]|0||(N9(9684),tr(37,9684,U|0)|0,l=7744,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9684)|0)){s=9684,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));N9(9684)}return 9684}function cxe(s){return s=s|0,0}function uxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=VF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],T9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Axe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function T9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Axe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=fxe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,pxe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],T9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,hxe(s,k),gxe(k),C=M;return}}function fxe(s){return s=s|0,357913941}function pxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function hxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function gxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function N9(s){s=s|0,yxe(s)}function dxe(s){s=s|0,mxe(s+24|0)}function mxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function yxe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,5,l,Exe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Exe(){return 1280}function Cxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=wxe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=Ixe(l,d,c)|0,C=f,c|0}function wxe(s){return s=s|0,(n[(VF()|0)+24>>2]|0)+(s*12|0)|0}function Ixe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return B=C,C=C+32|0,d=B,m=B+16|0,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(m,c),m=$A(m,c)|0,Hw[f&15](d,s,m),m=F9(d)|0,C=B,m|0}function Bxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vxe(s,c,d,1),C=f}function vxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=JF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Dxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Sxe(m,f)|0,f),C=d}function JF(){var s=0,l=0;if(o[7752]|0||(O9(9720),tr(38,9720,U|0)|0,l=7752,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9720)|0)){s=9720,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));O9(9720)}return 9720}function Dxe(s){return s=s|0,0}function Sxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=JF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],L9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Pxe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function L9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Pxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=bxe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,xxe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],L9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,kxe(s,k),Qxe(k),C=M;return}}function bxe(s){return s=s|0,357913941}function xxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function kxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Qxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function O9(s){s=s|0,Txe(s)}function Fxe(s){s=s|0,Rxe(s+24|0)}function Rxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Txe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,8,l,Nxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Nxe(){return 1288}function Lxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=Oxe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=Mxe(l,f)|0,C=c,l|0}function Oxe(s){return s=s|0,(n[(JF()|0)+24>>2]|0)+(s*12|0)|0}function Mxe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),Zq(Lg[c&31](s)|0)|0}function Uxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],_xe(s,c,d,0),C=f}function _xe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=zF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Hxe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,jxe(m,f)|0,f),C=d}function zF(){var s=0,l=0;if(o[7760]|0||(U9(9756),tr(39,9756,U|0)|0,l=7760,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9756)|0)){s=9756,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));U9(9756)}return 9756}function Hxe(s){return s=s|0,0}function jxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=zF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],M9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Gxe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function M9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Gxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qxe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,Yxe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],M9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Wxe(s,k),Kxe(k),C=M;return}}function qxe(s){return s=s|0,357913941}function Yxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Wxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Kxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function U9(s){s=s|0,zxe(s)}function Vxe(s){s=s|0,Jxe(s+24|0)}function Jxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function zxe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,8,l,Xxe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Xxe(){return 1292}function Zxe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=$xe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],eke(l,d,c),C=f}function $xe(s){return s=s|0,(n[(zF()|0)+24>>2]|0)+(s*12|0)|0}function eke(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ku(d,c),c=+Qu(d,c),C7[f&31](s,c),C=m}function tke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rke(s,c,d,0),C=f}function rke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=XF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=nke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,ike(m,f)|0,f),C=d}function XF(){var s=0,l=0;if(o[7768]|0||(H9(9792),tr(40,9792,U|0)|0,l=7768,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9792)|0)){s=9792,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));H9(9792)}return 9792}function nke(s){return s=s|0,0}function ike(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=XF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],_9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(ske(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function _9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function ske(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=oke(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,ake(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],_9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,lke(s,k),cke(k),C=M;return}}function oke(s){return s=s|0,357913941}function ake(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function lke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function cke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function H9(s){s=s|0,fke(s)}function uke(s){s=s|0,Ake(s+24|0)}function Ake(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function fke(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,1,l,pke()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function pke(){return 1300}function hke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=gke(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],dke(l,m,c,f),C=d}function gke(s){return s=s|0,(n[(XF()|0)+24>>2]|0)+(s*12|0)|0}function dke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),ZA(m,c),m=$A(m,c)|0,ku(B,f),f=+Qu(B,f),b7[d&15](s,m,f),C=k}function mke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],yke(s,c,d,0),C=f}function yke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=ZF()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Eke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Cke(m,f)|0,f),C=d}function ZF(){var s=0,l=0;if(o[7776]|0||(G9(9828),tr(41,9828,U|0)|0,l=7776,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9828)|0)){s=9828,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));G9(9828)}return 9828}function Eke(s){return s=s|0,0}function Cke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=ZF()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],j9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(wke(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function j9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function wke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ike(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,Bke(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],j9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,vke(s,k),Dke(k),C=M;return}}function Ike(s){return s=s|0,357913941}function Bke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function vke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Dke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function G9(s){s=s|0,bke(s)}function Ske(s){s=s|0,Pke(s+24|0)}function Pke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function bke(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,7,l,xke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function xke(){return 1312}function kke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Qke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Fke(l,d,c),C=f}function Qke(s){return s=s|0,(n[(ZF()|0)+24>>2]|0)+(s*12|0)|0}function Fke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,rf[f&31](s,d),C=m}function Rke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Tke(s,c,d,0),C=f}function Tke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=$F()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Nke(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Lke(m,f)|0,f),C=d}function $F(){var s=0,l=0;if(o[7784]|0||(Y9(9864),tr(42,9864,U|0)|0,l=7784,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9864)|0)){s=9864,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Y9(9864)}return 9864}function Nke(s){return s=s|0,0}function Lke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=$F()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],q9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Oke(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function q9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Mke(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,Uke(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],q9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,_ke(s,k),Hke(k),C=M;return}}function Mke(s){return s=s|0,357913941}function Uke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function _ke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Hke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function Y9(s){s=s|0,qke(s)}function jke(s){s=s|0,Gke(s+24|0)}function Gke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function qke(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,8,l,Yke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Yke(){return 1320}function Wke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Kke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Vke(l,d,c),C=f}function Kke(s){return s=s|0,(n[($F()|0)+24>>2]|0)+(s*12|0)|0}function Vke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Jke(d,c),d=zke(d,c)|0,rf[f&31](s,d),C=m}function Jke(s,l){s=s|0,l=l|0}function zke(s,l){return s=s|0,l=l|0,Xke(l)|0}function Xke(s){return s=s|0,s|0}function Zke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$ke(s,c,d,0),C=f}function $ke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=eR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=eQe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,tQe(m,f)|0,f),C=d}function eR(){var s=0,l=0;if(o[7792]|0||(K9(9900),tr(43,9900,U|0)|0,l=7792,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9900)|0)){s=9900,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));K9(9900)}return 9900}function eQe(s){return s=s|0,0}function tQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=eR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],W9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(rQe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function W9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function rQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=nQe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,iQe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],W9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,sQe(s,k),oQe(k),C=M;return}}function nQe(s){return s=s|0,357913941}function iQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function sQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function oQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function K9(s){s=s|0,cQe(s)}function aQe(s){s=s|0,lQe(s+24|0)}function lQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function cQe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,22,l,uQe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function uQe(){return 1344}function AQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;c=C,C=C+16|0,f=c+8|0,d=c,m=fQe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],pQe(l,f),C=c}function fQe(s){return s=s|0,(n[(eR()|0)+24>>2]|0)+(s*12|0)|0}function pQe(s,l){s=s|0,l=l|0;var c=0;c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&127](s)}function hQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=tR()|0,s=gQe(c)|0,hn(m,l,d,s,dQe(c,f)|0,f)}function tR(){var s=0,l=0;if(o[7800]|0||(J9(9936),tr(44,9936,U|0)|0,l=7800,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9936)|0)){s=9936,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));J9(9936)}return 9936}function gQe(s){return s=s|0,s|0}function dQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=tR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(V9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(mQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function V9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function mQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=yQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,EQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,V9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,CQe(s,d),wQe(d),C=k;return}}function yQe(s){return s=s|0,536870911}function EQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function CQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function wQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function J9(s){s=s|0,vQe(s)}function IQe(s){s=s|0,BQe(s+24|0)}function BQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function vQe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,23,l,B9()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function DQe(s,l){s=s|0,l=l|0,PQe(n[(SQe(s)|0)>>2]|0,l)}function SQe(s){return s=s|0,(n[(tR()|0)+24>>2]|0)+(s<<3)|0}function PQe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,HF(f,l),l=jF(f,l)|0,tf[s&127](l),C=c}function bQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=rR()|0,s=xQe(c)|0,hn(m,l,d,s,kQe(c,f)|0,f)}function rR(){var s=0,l=0;if(o[7808]|0||(X9(9972),tr(45,9972,U|0)|0,l=7808,n[l>>2]=1,n[l+4>>2]=0),!(Tr(9972)|0)){s=9972,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));X9(9972)}return 9972}function xQe(s){return s=s|0,s|0}function kQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=rR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(z9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(QQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function QQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=FQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,RQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,z9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,TQe(s,d),NQe(d),C=k;return}}function FQe(s){return s=s|0,536870911}function RQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function TQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function NQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function X9(s){s=s|0,MQe(s)}function LQe(s){s=s|0,OQe(s+24|0)}function OQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function MQe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,9,l,UQe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function UQe(){return 1348}function _Qe(s,l){return s=s|0,l=l|0,jQe(n[(HQe(s)|0)>>2]|0,l)|0}function HQe(s){return s=s|0,(n[(rR()|0)+24>>2]|0)+(s<<3)|0}function jQe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Z9(f,l),l=$9(f,l)|0,l=sD(Lg[s&31](l)|0)|0,C=c,l|0}function Z9(s,l){s=s|0,l=l|0}function $9(s,l){return s=s|0,l=l|0,GQe(l)|0}function GQe(s){return s=s|0,s|0}function qQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=nR()|0,s=YQe(c)|0,hn(m,l,d,s,WQe(c,f)|0,f)}function nR(){var s=0,l=0;if(o[7816]|0||(t5(10008),tr(46,10008,U|0)|0,l=7816,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10008)|0)){s=10008,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t5(10008)}return 10008}function YQe(s){return s=s|0,s|0}function WQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=nR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(e5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(KQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function e5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function KQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=VQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,JQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,e5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,zQe(s,d),XQe(d),C=k;return}}function VQe(s){return s=s|0,536870911}function JQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function zQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function XQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function t5(s){s=s|0,eFe(s)}function ZQe(s){s=s|0,$Qe(s+24|0)}function $Qe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function eFe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,15,l,m9()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function tFe(s){return s=s|0,nFe(n[(rFe(s)|0)>>2]|0)|0}function rFe(s){return s=s|0,(n[(nR()|0)+24>>2]|0)+(s<<3)|0}function nFe(s){return s=s|0,sD(CD[s&7]()|0)|0}function iFe(){var s=0;return o[7832]|0||(fFe(10052),tr(25,10052,U|0)|0,s=7832,n[s>>2]=1,n[s+4>>2]=0),10052}function sFe(s,l){s=s|0,l=l|0,n[s>>2]=oFe()|0,n[s+4>>2]=aFe()|0,n[s+12>>2]=l,n[s+8>>2]=lFe()|0,n[s+32>>2]=2}function oFe(){return 11709}function aFe(){return 1188}function lFe(){return aD()|0}function cFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(uFe(c),gt(c)):l|0&&(Su(l),gt(l))}function bp(s,l){return s=s|0,l=l|0,l&s|0}function uFe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function aD(){var s=0;return o[7824]|0||(n[2511]=AFe()|0,n[2512]=0,s=7824,n[s>>2]=1,n[s+4>>2]=0),10044}function AFe(){return 0}function fFe(s){s=s|0,vp(s)}function pFe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0;l=C,C=C+32|0,c=l+24|0,m=l+16|0,d=l+8|0,f=l,hFe(s,4827),gFe(s,4834,3)|0,dFe(s,3682,47)|0,n[m>>2]=9,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],mFe(s,4841,c)|0,n[d>>2]=1,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],yFe(s,4871,c)|0,n[f>>2]=10,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],EFe(s,4891,c)|0,C=l}function hFe(s,l){s=s|0,l=l|0;var c=0;c=XRe()|0,n[s>>2]=c,ZRe(c,l),xp(n[s>>2]|0)}function gFe(s,l,c){return s=s|0,l=l|0,c=c|0,NRe(s,pn(l)|0,c,0),s|0}function dFe(s,l,c){return s=s|0,l=l|0,c=c|0,CRe(s,pn(l)|0,c,0),s|0}function mFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],tRe(s,l,d),C=f,s|0}function yFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],LFe(s,l,d),C=f,s|0}function EFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],CFe(s,l,d),C=f,s|0}function CFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],wFe(s,c,d,1),C=f}function wFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=iR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=IFe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,BFe(m,f)|0,f),C=d}function iR(){var s=0,l=0;if(o[7840]|0||(n5(10100),tr(48,10100,U|0)|0,l=7840,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10100)|0)){s=10100,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));n5(10100)}return 10100}function IFe(s){return s=s|0,0}function BFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=iR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],r5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(vFe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function r5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function vFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=DFe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,SFe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],r5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,PFe(s,k),bFe(k),C=M;return}}function DFe(s){return s=s|0,357913941}function SFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function PFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function bFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function n5(s){s=s|0,QFe(s)}function xFe(s){s=s|0,kFe(s+24|0)}function kFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function QFe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,6,l,FFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function FFe(){return 1364}function RFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=TFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=NFe(l,d,c)|0,C=f,c|0}function TFe(s){return s=s|0,(n[(iR()|0)+24>>2]|0)+(s*12|0)|0}function NFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZA(d,c),d=$A(d,c)|0,d=u9(RR[f&15](s,d)|0)|0,C=m,d|0}function LFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],OFe(s,c,d,0),C=f}function OFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=sR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=MFe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,UFe(m,f)|0,f),C=d}function sR(){var s=0,l=0;if(o[7848]|0||(s5(10136),tr(49,10136,U|0)|0,l=7848,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10136)|0)){s=10136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));s5(10136)}return 10136}function MFe(s){return s=s|0,0}function UFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=sR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],i5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(_Fe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function i5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function _Fe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=HFe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,jFe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],i5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,GFe(s,k),qFe(k),C=M;return}}function HFe(s){return s=s|0,357913941}function jFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function GFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function s5(s){s=s|0,KFe(s)}function YFe(s){s=s|0,WFe(s+24|0)}function WFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function KFe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,9,l,VFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VFe(){return 1372}function JFe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=zFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],XFe(l,d,c),C=f}function zFe(s){return s=s|0,(n[(sR()|0)+24>>2]|0)+(s*12|0)|0}function XFe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=Ze;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ZFe(d,c),B=y($Fe(d,c)),E7[f&1](s,B),C=m}function ZFe(s,l){s=s|0,l=+l}function $Fe(s,l){return s=s|0,l=+l,y(eRe(l))}function eRe(s){return s=+s,y(s)}function tRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rRe(s,c,d,0),C=f}function rRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=oR()|0,n[O>>2]=M,n[O+4>>2]=Q,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=nRe(m)|0,n[k>>2]=M,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,iRe(m,f)|0,f),C=d}function oR(){var s=0,l=0;if(o[7856]|0||(a5(10172),tr(50,10172,U|0)|0,l=7856,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10172)|0)){s=10172,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));a5(10172)}return 10172}function nRe(s){return s=s|0,0}function iRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,Q=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,G=oR()|0,M=G+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=G+28|0,c=n[l>>2]|0,c>>>0<(n[G+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],o5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(sRe(M,k,Q),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function o5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function sRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=oRe(s)|0,m>>>0>>0)zr(s);else{O=n[s>>2]|0,se=((n[s+8>>2]|0)-O|0)/12|0,G=se<<1,aRe(k,se>>>0>>1>>>0?G>>>0>>0?d:G:m,((n[Q>>2]|0)-O|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],o5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,lRe(s,k),cRe(k),C=M;return}}function oRe(s){return s=s|0,357913941}function aRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Rt();else{d=Kt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function lRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function cRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function a5(s){s=s|0,fRe(s)}function uRe(s){s=s|0,ARe(s+24|0)}function ARe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function fRe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,2,3,l,pRe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function pRe(){return 1380}function hRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=gRe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],dRe(l,m,c,f),C=d}function gRe(s){return s=s|0,(n[(oR()|0)+24>>2]|0)+(s*12|0)|0}function dRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),ZA(m,c),m=$A(m,c)|0,mRe(B,f),B=yRe(B,f)|0,Hw[d&15](s,m,B),C=k}function mRe(s,l){s=s|0,l=l|0}function yRe(s,l){return s=s|0,l=l|0,ERe(l)|0}function ERe(s){return s=s|0,(s|0)!=0|0}function CRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=aR()|0,s=wRe(c)|0,hn(m,l,d,s,IRe(c,f)|0,f)}function aR(){var s=0,l=0;if(o[7864]|0||(c5(10208),tr(51,10208,U|0)|0,l=7864,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10208)|0)){s=10208,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));c5(10208)}return 10208}function wRe(s){return s=s|0,s|0}function IRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=aR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(l5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(BRe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function l5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function BRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=vRe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,DRe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,l5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,SRe(s,d),PRe(d),C=k;return}}function vRe(s){return s=s|0,536870911}function DRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function SRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function PRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function c5(s){s=s|0,kRe(s)}function bRe(s){s=s|0,xRe(s+24|0)}function xRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function kRe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,24,l,QRe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function QRe(){return 1392}function FRe(s,l){s=s|0,l=l|0,TRe(n[(RRe(s)|0)>>2]|0,l)}function RRe(s){return s=s|0,(n[(aR()|0)+24>>2]|0)+(s<<3)|0}function TRe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Z9(f,l),l=$9(f,l)|0,tf[s&127](l),C=c}function NRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=lR()|0,s=LRe(c)|0,hn(m,l,d,s,ORe(c,f)|0,f)}function lR(){var s=0,l=0;if(o[7872]|0||(A5(10244),tr(52,10244,U|0)|0,l=7872,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10244)|0)){s=10244,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));A5(10244)}return 10244}function LRe(s){return s=s|0,s|0}function ORe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=lR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(u5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(MRe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function u5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function MRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=URe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,_Re(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,u5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,HRe(s,d),jRe(d),C=k;return}}function URe(s){return s=s|0,536870911}function _Re(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function HRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function jRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function A5(s){s=s|0,YRe(s)}function GRe(s){s=s|0,qRe(s+24|0)}function qRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function YRe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,16,l,WRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function WRe(){return 1400}function KRe(s){return s=s|0,JRe(n[(VRe(s)|0)>>2]|0)|0}function VRe(s){return s=s|0,(n[(lR()|0)+24>>2]|0)+(s<<3)|0}function JRe(s){return s=s|0,zRe(CD[s&7]()|0)|0}function zRe(s){return s=s|0,s|0}function XRe(){var s=0;return o[7880]|0||(iTe(10280),tr(25,10280,U|0)|0,s=7880,n[s>>2]=1,n[s+4>>2]=0),10280}function ZRe(s,l){s=s|0,l=l|0,n[s>>2]=$Re()|0,n[s+4>>2]=eTe()|0,n[s+12>>2]=l,n[s+8>>2]=tTe()|0,n[s+32>>2]=4}function $Re(){return 11711}function eTe(){return 1356}function tTe(){return aD()|0}function rTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(nTe(c),gt(c)):l|0&&(Dg(l),gt(l))}function nTe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function iTe(s){s=s|0,vp(s)}function sTe(s){s=s|0,oTe(s,4920),aTe(s)|0,lTe(s)|0}function oTe(s,l){s=s|0,l=l|0;var c=0;c=R9()|0,n[s>>2]=c,xTe(c,l),xp(n[s>>2]|0)}function aTe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,ETe()|0),s|0}function lTe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,cTe()|0),s|0}function cTe(){var s=0;return o[7888]|0||(f5(10328),tr(53,10328,U|0)|0,s=7888,n[s>>2]=1,n[s+4>>2]=0),Tr(10328)|0||f5(10328),10328}function kg(s,l){s=s|0,l=l|0,hn(s,0,l,0,0,0)}function f5(s){s=s|0,fTe(s),Qg(s,10)}function uTe(s){s=s|0,ATe(s+24|0)}function ATe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function fTe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,1,l,dTe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function pTe(s,l,c){s=s|0,l=l|0,c=+c,hTe(s,l,c)}function Qg(s,l){s=s|0,l=l|0,n[s+20>>2]=l}function hTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,m=f+8|0,k=f+13|0,d=f,B=f+12|0,ZA(k,l),n[m>>2]=$A(k,l)|0,ku(B,c),E[d>>3]=+Qu(B,c),gTe(s,m,d),C=f}function gTe(s,l,c){s=s|0,l=l|0,c=c|0,Y(s+8|0,n[l>>2]|0,+E[c>>3]),o[s+24>>0]=1}function dTe(){return 1404}function mTe(s,l){return s=s|0,l=+l,yTe(s,l)|0}function yTe(s,l){s=s|0,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,m=f+4|0,B=f+8|0,k=f,d=Wa(8)|0,c=d,Q=Kt(16)|0,ZA(m,s),s=$A(m,s)|0,ku(B,l),Y(Q,s,+Qu(B,l)),B=c+4|0,n[B>>2]=Q,s=Kt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],KF(s,B,m),n[d>>2]=s,C=f,c|0}function ETe(){var s=0;return o[7896]|0||(p5(10364),tr(54,10364,U|0)|0,s=7896,n[s>>2]=1,n[s+4>>2]=0),Tr(10364)|0||p5(10364),10364}function p5(s){s=s|0,ITe(s),Qg(s,55)}function CTe(s){s=s|0,wTe(s+24|0)}function wTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function ITe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,4,l,STe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function BTe(s){s=s|0,vTe(s)}function vTe(s){s=s|0,DTe(s)}function DTe(s){s=s|0,h5(s+8|0),o[s+24>>0]=1}function h5(s){s=s|0,n[s>>2]=0,E[s+8>>3]=0}function STe(){return 1424}function PTe(){return bTe()|0}function bTe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Kt(16)|0,h5(f),m=s+4|0,n[m>>2]=f,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],KF(f,m,d),n[c>>2]=f,C=l,s|0}function xTe(s,l){s=s|0,l=l|0,n[s>>2]=kTe()|0,n[s+4>>2]=QTe()|0,n[s+12>>2]=l,n[s+8>>2]=FTe()|0,n[s+32>>2]=5}function kTe(){return 11710}function QTe(){return 1416}function FTe(){return lD()|0}function RTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(TTe(c),gt(c)):l|0&>(l)}function TTe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function lD(){var s=0;return o[7904]|0||(n[2600]=NTe()|0,n[2601]=0,s=7904,n[s>>2]=1,n[s+4>>2]=0),10400}function NTe(){return n[357]|0}function LTe(s){s=s|0,OTe(s,4926),MTe(s)|0}function OTe(s,l){s=s|0,l=l|0;var c=0;c=r9()|0,n[s>>2]=c,JTe(c,l),xp(n[s>>2]|0)}function MTe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,UTe()|0),s|0}function UTe(){var s=0;return o[7912]|0||(g5(10412),tr(56,10412,U|0)|0,s=7912,n[s>>2]=1,n[s+4>>2]=0),Tr(10412)|0||g5(10412),10412}function g5(s){s=s|0,jTe(s),Qg(s,57)}function _Te(s){s=s|0,HTe(s+24|0)}function HTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function jTe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,5,l,WTe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function GTe(s){s=s|0,qTe(s)}function qTe(s){s=s|0,YTe(s)}function YTe(s){s=s|0;var l=0,c=0;l=s+8|0,c=l+48|0;do n[l>>2]=0,l=l+4|0;while((l|0)<(c|0));o[s+56>>0]=1}function WTe(){return 1432}function KTe(){return VTe()|0}function VTe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0;B=C,C=C+16|0,s=B+4|0,l=B,c=Wa(8)|0,f=c,d=Kt(48)|0,m=d,k=m+48|0;do n[m>>2]=0,m=m+4|0;while((m|0)<(k|0));return m=f+4|0,n[m>>2]=d,k=Kt(8)|0,m=n[m>>2]|0,n[l>>2]=0,n[s>>2]=n[l>>2],n9(k,m,s),n[c>>2]=k,C=B,f|0}function JTe(s,l){s=s|0,l=l|0,n[s>>2]=zTe()|0,n[s+4>>2]=XTe()|0,n[s+12>>2]=l,n[s+8>>2]=ZTe()|0,n[s+32>>2]=6}function zTe(){return 11704}function XTe(){return 1436}function ZTe(){return lD()|0}function $Te(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(eNe(c),gt(c)):l|0&>(l)}function eNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function tNe(s){s=s|0,rNe(s,4933),nNe(s)|0,iNe(s)|0}function rNe(s,l){s=s|0,l=l|0;var c=0;c=bNe()|0,n[s>>2]=c,xNe(c,l),xp(n[s>>2]|0)}function nNe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,yNe()|0),s|0}function iNe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,sNe()|0),s|0}function sNe(){var s=0;return o[7920]|0||(d5(10452),tr(58,10452,U|0)|0,s=7920,n[s>>2]=1,n[s+4>>2]=0),Tr(10452)|0||d5(10452),10452}function d5(s){s=s|0,lNe(s),Qg(s,1)}function oNe(s){s=s|0,aNe(s+24|0)}function aNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function lNe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,1,l,fNe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function cNe(s,l,c){s=s|0,l=+l,c=+c,uNe(s,l,c)}function uNe(s,l,c){s=s|0,l=+l,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,m=f+8|0,k=f+17|0,d=f,B=f+16|0,ku(k,l),E[m>>3]=+Qu(k,l),ku(B,c),E[d>>3]=+Qu(B,c),ANe(s,m,d),C=f}function ANe(s,l,c){s=s|0,l=l|0,c=c|0,m5(s+8|0,+E[l>>3],+E[c>>3]),o[s+24>>0]=1}function m5(s,l,c){s=s|0,l=+l,c=+c,E[s>>3]=l,E[s+8>>3]=c}function fNe(){return 1472}function pNe(s,l){return s=+s,l=+l,hNe(s,l)|0}function hNe(s,l){s=+s,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,B=f+4|0,k=f+8|0,Q=f,d=Wa(8)|0,c=d,m=Kt(16)|0,ku(B,s),s=+Qu(B,s),ku(k,l),m5(m,s,+Qu(k,l)),k=c+4|0,n[k>>2]=m,m=Kt(8)|0,k=n[k>>2]|0,n[Q>>2]=0,n[B>>2]=n[Q>>2],y5(m,k,B),n[d>>2]=m,C=f,c|0}function y5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1452,n[c+12>>2]=l,n[s+4>>2]=c}function gNe(s){s=s|0,zm(s),gt(s)}function dNe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function mNe(s){s=s|0,gt(s)}function yNe(){var s=0;return o[7928]|0||(E5(10488),tr(59,10488,U|0)|0,s=7928,n[s>>2]=1,n[s+4>>2]=0),Tr(10488)|0||E5(10488),10488}function E5(s){s=s|0,wNe(s),Qg(s,60)}function ENe(s){s=s|0,CNe(s+24|0)}function CNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function wNe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,6,l,DNe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function INe(s){s=s|0,BNe(s)}function BNe(s){s=s|0,vNe(s)}function vNe(s){s=s|0,C5(s+8|0),o[s+24>>0]=1}function C5(s){s=s|0,n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,n[s+12>>2]=0}function DNe(){return 1492}function SNe(){return PNe()|0}function PNe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Kt(16)|0,C5(f),m=s+4|0,n[m>>2]=f,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],y5(f,m,d),n[c>>2]=f,C=l,s|0}function bNe(){var s=0;return o[7936]|0||(NNe(10524),tr(25,10524,U|0)|0,s=7936,n[s>>2]=1,n[s+4>>2]=0),10524}function xNe(s,l){s=s|0,l=l|0,n[s>>2]=kNe()|0,n[s+4>>2]=QNe()|0,n[s+12>>2]=l,n[s+8>>2]=FNe()|0,n[s+32>>2]=7}function kNe(){return 11700}function QNe(){return 1484}function FNe(){return lD()|0}function RNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(TNe(c),gt(c)):l|0&>(l)}function TNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function NNe(s){s=s|0,vp(s)}function LNe(s,l,c){s=s|0,l=l|0,c=c|0,s=pn(l)|0,l=ONe(c)|0,c=MNe(c,0)|0,hLe(s,l,c,cR()|0,0)}function ONe(s){return s=s|0,s|0}function MNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=cR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(I5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(YNe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function cR(){var s=0,l=0;if(o[7944]|0||(w5(10568),tr(61,10568,U|0)|0,l=7944,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10568)|0)){s=10568,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));w5(10568)}return 10568}function w5(s){s=s|0,HNe(s)}function UNe(s){s=s|0,_Ne(s+24|0)}function _Ne(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function HNe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,17,l,C9()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function jNe(s){return s=s|0,qNe(n[(GNe(s)|0)>>2]|0)|0}function GNe(s){return s=s|0,(n[(cR()|0)+24>>2]|0)+(s<<3)|0}function qNe(s){return s=s|0,oD(CD[s&7]()|0)|0}function I5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function YNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=WNe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,KNe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,I5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,VNe(s,d),JNe(d),C=k;return}}function WNe(s){return s=s|0,536870911}function KNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function VNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JNe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function zNe(){XNe()}function XNe(){ZNe(10604)}function ZNe(s){s=s|0,$Ne(s,4955)}function $Ne(s,l){s=s|0,l=l|0;var c=0;c=eLe()|0,n[s>>2]=c,tLe(c,l),xp(n[s>>2]|0)}function eLe(){var s=0;return o[7952]|0||(uLe(10612),tr(25,10612,U|0)|0,s=7952,n[s>>2]=1,n[s+4>>2]=0),10612}function tLe(s,l){s=s|0,l=l|0,n[s>>2]=sLe()|0,n[s+4>>2]=oLe()|0,n[s+12>>2]=l,n[s+8>>2]=aLe()|0,n[s+32>>2]=8}function xp(s){s=s|0;var l=0,c=0;l=C,C=C+16|0,c=l,Ym()|0,n[c>>2]=s,rLe(10608,c),C=l}function Ym(){return o[11714]|0||(n[2652]=0,tr(62,10608,U|0)|0,o[11714]=1),10608}function rLe(s,l){s=s|0,l=l|0;var c=0;c=Kt(8)|0,n[c+4>>2]=n[l>>2],n[c>>2]=n[s>>2],n[s>>2]=c}function nLe(s){s=s|0,iLe(s)}function iLe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function sLe(){return 11715}function oLe(){return 1496}function aLe(){return aD()|0}function lLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(cLe(c),gt(c)):l|0&>(l)}function cLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function uLe(s){s=s|0,vp(s)}function ALe(s,l){s=s|0,l=l|0;var c=0,f=0;Ym()|0,c=n[2652]|0;e:do if(c|0){for(;f=n[c+4>>2]|0,!(f|0&&(n7(uR(f)|0,s)|0)==0);)if(c=n[c>>2]|0,!c)break e;fLe(f,l)}while(0)}function uR(s){return s=s|0,n[s+12>>2]|0}function fLe(s,l){s=s|0,l=l|0;var c=0;s=s+36|0,c=n[s>>2]|0,c|0&&(GA(c),gt(c)),c=Kt(4)|0,zq(c,l),n[s>>2]=c}function AR(){return o[11716]|0||(n[2664]=0,tr(63,10656,U|0)|0,o[11716]=1),10656}function B5(){var s=0;return o[11717]|0?s=n[2665]|0:(pLe(),n[2665]=1504,o[11717]=1,s=1504),s|0}function pLe(){o[11740]|0||(o[11718]=gr(gr(8,0)|0,0)|0,o[11719]=gr(gr(0,0)|0,0)|0,o[11720]=gr(gr(0,16)|0,0)|0,o[11721]=gr(gr(8,0)|0,0)|0,o[11722]=gr(gr(0,0)|0,0)|0,o[11723]=gr(gr(8,0)|0,0)|0,o[11724]=gr(gr(0,0)|0,0)|0,o[11725]=gr(gr(8,0)|0,0)|0,o[11726]=gr(gr(0,0)|0,0)|0,o[11727]=gr(gr(8,0)|0,0)|0,o[11728]=gr(gr(0,0)|0,0)|0,o[11729]=gr(gr(0,0)|0,32)|0,o[11730]=gr(gr(0,0)|0,32)|0,o[11740]=1)}function v5(){return 1572}function hLe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0;m=C,C=C+32|0,O=m+16|0,M=m+12|0,Q=m+8|0,k=m+4|0,B=m,n[O>>2]=s,n[M>>2]=l,n[Q>>2]=c,n[k>>2]=f,n[B>>2]=d,AR()|0,gLe(10656,O,M,Q,k,B),C=m}function gLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0;B=Kt(24)|0,$q(B+4|0,n[l>>2]|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0),n[B>>2]=n[s>>2],n[s>>2]=B}function D5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,qe=0,Me=0,Qe=0,et=0,Xe=0,lt=0;if(lt=C,C=C+32|0,Me=lt+20|0,Qe=lt+8|0,et=lt+4|0,Xe=lt,l=n[l>>2]|0,l|0){qe=Me+4|0,Q=Me+8|0,M=Qe+4|0,O=Qe+8|0,G=Qe+8|0,se=Me+8|0;do{if(B=l+4|0,k=fR(B)|0,k|0){if(d=Nw(k)|0,n[Me>>2]=0,n[qe>>2]=0,n[Q>>2]=0,f=(Lw(k)|0)+1|0,dLe(Me,f),f|0)for(;f=f+-1|0,bc(Qe,n[d>>2]|0),m=n[qe>>2]|0,m>>>0<(n[se>>2]|0)>>>0?(n[m>>2]=n[Qe>>2],n[qe>>2]=(n[qe>>2]|0)+4):pR(Me,Qe),f;)d=d+4|0;f=Ow(k)|0,n[Qe>>2]=0,n[M>>2]=0,n[O>>2]=0;e:do if(n[f>>2]|0)for(d=0,m=0;;){if((d|0)==(m|0)?mLe(Qe,f):(n[d>>2]=n[f>>2],n[M>>2]=(n[M>>2]|0)+4),f=f+4|0,!(n[f>>2]|0))break e;d=n[M>>2]|0,m=n[G>>2]|0}while(0);n[et>>2]=cD(B)|0,n[Xe>>2]=Tr(k)|0,yLe(c,s,et,Xe,Me,Qe),hR(Qe),ef(Me)}l=n[l>>2]|0}while((l|0)!=0)}C=lt}function fR(s){return s=s|0,n[s+12>>2]|0}function Nw(s){return s=s|0,n[s+12>>2]|0}function Lw(s){return s=s|0,n[s+16>>2]|0}function dLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=n[s>>2]|0,(n[s+8>>2]|0)-f>>2>>>0>>0&&(R5(c,l,(n[s+4>>2]|0)-f>>2,s+8|0),T5(s,c),N5(c)),C=d}function pR(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=F5(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,M=(n[s+8>>2]|0)-k|0,Q=M>>1,R5(c,M>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,T5(s,c),N5(c),C=B;return}}function Ow(s){return s=s|0,n[s+8>>2]|0}function mLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=Q5(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,M=(n[s+8>>2]|0)-k|0,Q=M>>1,OLe(c,M>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,MLe(s,c),ULe(c),C=B;return}}function cD(s){return s=s|0,n[s>>2]|0}function yLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,ELe(s,l,c,f,d,m)}function hR(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function ef(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function ELe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0;B=C,C=C+48|0,O=B+40|0,k=B+32|0,G=B+24|0,Q=B+12|0,M=B,Ka(k),s=da(s)|0,n[G>>2]=n[l>>2],c=n[c>>2]|0,f=n[f>>2]|0,gR(Q,d),CLe(M,m),n[O>>2]=n[G>>2],wLe(s,O,c,f,Q,M),hR(M),ef(Q),Va(k),C=B}function gR(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(NLe(s,f),LLe(s,n[l>>2]|0,n[c>>2]|0,f))}function CLe(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(RLe(s,f),TLe(s,n[l>>2]|0,n[c>>2]|0,f))}function wLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0;B=C,C=C+32|0,O=B+28|0,G=B+24|0,k=B+12|0,Q=B,M=Sl(ILe()|0)|0,n[G>>2]=n[l>>2],n[O>>2]=n[G>>2],l=Fg(O)|0,c=S5(c)|0,f=dR(f)|0,n[k>>2]=n[d>>2],O=d+4|0,n[k+4>>2]=n[O>>2],G=d+8|0,n[k+8>>2]=n[G>>2],n[G>>2]=0,n[O>>2]=0,n[d>>2]=0,d=mR(k)|0,n[Q>>2]=n[m>>2],O=m+4|0,n[Q+4>>2]=n[O>>2],G=m+8|0,n[Q+8>>2]=n[G>>2],n[G>>2]=0,n[O>>2]=0,n[m>>2]=0,ao(0,M|0,s|0,l|0,c|0,f|0,d|0,BLe(Q)|0)|0,hR(Q),ef(k),C=B}function ILe(){var s=0;return o[7968]|0||(QLe(10708),s=7968,n[s>>2]=1,n[s+4>>2]=0),10708}function Fg(s){return s=s|0,b5(s)|0}function S5(s){return s=s|0,P5(s)|0}function dR(s){return s=s|0,oD(s)|0}function mR(s){return s=s|0,DLe(s)|0}function BLe(s){return s=s|0,vLe(s)|0}function vLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=P5(n[(n[s>>2]|0)+(l<<2)>>2]|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function P5(s){return s=s|0,s|0}function DLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=b5((n[s>>2]|0)+(l<<2)|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function b5(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=xF(x5()|0)|0,f?(kF(l,f),QF(c,l),aUe(s,c),s=FF(l)|0):s=SLe(s)|0,C=d,s|0}function x5(){var s=0;return o[7960]|0||(kLe(10664),tr(25,10664,U|0)|0,s=7960,n[s>>2]=1,n[s+4>>2]=0),10664}function SLe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Kt(4)|0,n[k>>2]=n[s>>2],m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],k5(s,m,d),n[f>>2]=s,C=c,l|0}function k5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1656,n[c+12>>2]=l,n[s+4>>2]=c}function PLe(s){s=s|0,zm(s),gt(s)}function bLe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function xLe(s){s=s|0,gt(s)}function kLe(s){s=s|0,vp(s)}function QLe(s){s=s|0,Pl(s,FLe()|0,5)}function FLe(){return 1676}function RLe(s,l){s=s|0,l=l|0;var c=0;if((Q5(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function TLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function Q5(s){return s=s|0,1073741823}function NLe(s,l){s=s|0,l=l|0;var c=0;if((F5(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Rt();else{c=Kt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function LLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function F5(s){return s=s|0,1073741823}function OLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function MLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ULe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function R5(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Rt();else{d=Kt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function T5(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function N5(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function _Le(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,qe=0,Me=0,Qe=0;if(Qe=C,C=C+32|0,O=Qe+20|0,G=Qe+12|0,M=Qe+16|0,se=Qe+4|0,qe=Qe,Me=Qe+8|0,k=B5()|0,m=n[k>>2]|0,B=n[m>>2]|0,B|0)for(Q=n[k+8>>2]|0,k=n[k+4>>2]|0;bc(O,B),HLe(s,O,k,Q),m=m+4|0,B=n[m>>2]|0,B;)Q=Q+1|0,k=k+1|0;if(m=v5()|0,B=n[m>>2]|0,B|0)do bc(O,B),n[G>>2]=n[m+4>>2],jLe(l,O,G),m=m+8|0,B=n[m>>2]|0;while((B|0)!=0);if(m=n[(Ym()|0)>>2]|0,m|0)do l=n[m+4>>2]|0,bc(O,n[(Wm(l)|0)>>2]|0),n[G>>2]=uR(l)|0,GLe(c,O,G),m=n[m>>2]|0;while((m|0)!=0);if(bc(M,0),m=AR()|0,n[O>>2]=n[M>>2],D5(O,m,d),m=n[(Ym()|0)>>2]|0,m|0){s=O+4|0,l=O+8|0,c=O+8|0;do{if(Q=n[m+4>>2]|0,bc(G,n[(Wm(Q)|0)>>2]|0),qLe(se,L5(Q)|0),B=n[se>>2]|0,B|0){n[O>>2]=0,n[s>>2]=0,n[l>>2]=0;do bc(qe,n[(Wm(n[B+4>>2]|0)|0)>>2]|0),k=n[s>>2]|0,k>>>0<(n[c>>2]|0)>>>0?(n[k>>2]=n[qe>>2],n[s>>2]=(n[s>>2]|0)+4):pR(O,qe),B=n[B>>2]|0;while((B|0)!=0);YLe(f,G,O),ef(O)}n[Me>>2]=n[G>>2],M=O5(Q)|0,n[O>>2]=n[Me>>2],D5(O,M,d),s9(se),m=n[m>>2]|0}while((m|0)!=0)}C=Qe}function HLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,nOe(s,l,c,f)}function jLe(s,l,c){s=s|0,l=l|0,c=c|0,rOe(s,l,c)}function Wm(s){return s=s|0,s|0}function GLe(s,l,c){s=s|0,l=l|0,c=c|0,ZLe(s,l,c)}function L5(s){return s=s|0,s+16|0}function qLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(m=C,C=C+16|0,d=m+8|0,c=m,n[s>>2]=0,f=n[l>>2]|0,n[d>>2]=f,n[c>>2]=s,c=XLe(c)|0,f|0){if(f=Kt(12)|0,B=(M5(d)|0)+4|0,s=n[B+4>>2]|0,l=f+4|0,n[l>>2]=n[B>>2],n[l+4>>2]=s,l=n[n[d>>2]>>2]|0,n[d>>2]=l,!l)s=f;else for(l=f;s=Kt(12)|0,Q=(M5(d)|0)+4|0,k=n[Q+4>>2]|0,B=s+4|0,n[B>>2]=n[Q>>2],n[B+4>>2]=k,n[l>>2]=s,B=n[n[d>>2]>>2]|0,n[d>>2]=B,B;)l=s;n[s>>2]=n[c>>2],n[c>>2]=f}C=m}function YLe(s,l,c){s=s|0,l=l|0,c=c|0,WLe(s,l,c)}function O5(s){return s=s|0,s+24|0}function WLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+24|0,d=f+16|0,k=f+12|0,m=f,Ka(d),s=da(s)|0,n[k>>2]=n[l>>2],gR(m,c),n[B>>2]=n[k>>2],KLe(s,B,m),ef(m),Va(d),C=f}function KLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+16|0,k=f+12|0,d=f,m=Sl(VLe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Fg(B)|0,n[d>>2]=n[c>>2],B=c+4|0,n[d+4>>2]=n[B>>2],k=c+8|0,n[d+8>>2]=n[k>>2],n[k>>2]=0,n[B>>2]=0,n[c>>2]=0,oo(0,m|0,s|0,l|0,mR(d)|0)|0,ef(d),C=f}function VLe(){var s=0;return o[7976]|0||(JLe(10720),s=7976,n[s>>2]=1,n[s+4>>2]=0),10720}function JLe(s){s=s|0,Pl(s,zLe()|0,2)}function zLe(){return 1732}function XLe(s){return s=s|0,n[s>>2]|0}function M5(s){return s=s|0,n[s>>2]|0}function ZLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Ka(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],U5(s,m,c),Va(d),C=f}function U5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+4|0,B=f,d=Sl($Le()|0)|0,n[B>>2]=n[l>>2],n[m>>2]=n[B>>2],l=Fg(m)|0,oo(0,d|0,s|0,l|0,S5(c)|0)|0,C=f}function $Le(){var s=0;return o[7984]|0||(eOe(10732),s=7984,n[s>>2]=1,n[s+4>>2]=0),10732}function eOe(s){s=s|0,Pl(s,tOe()|0,2)}function tOe(){return 1744}function rOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Ka(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],U5(s,m,c),Va(d),C=f}function nOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Ka(m),s=da(s)|0,n[k>>2]=n[l>>2],c=o[c>>0]|0,f=o[f>>0]|0,n[B>>2]=n[k>>2],iOe(s,B,c,f),Va(m),C=d}function iOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,B=d+4|0,k=d,m=Sl(sOe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Fg(B)|0,c=Km(c)|0,pc(0,m|0,s|0,l|0,c|0,Km(f)|0)|0,C=d}function sOe(){var s=0;return o[7992]|0||(aOe(10744),s=7992,n[s>>2]=1,n[s+4>>2]=0),10744}function Km(s){return s=s|0,oOe(s)|0}function oOe(s){return s=s|0,s&255|0}function aOe(s){s=s|0,Pl(s,lOe()|0,3)}function lOe(){return 1756}function cOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;switch(se=C,C=C+32|0,k=se+8|0,Q=se+4|0,M=se+20|0,O=se,LF(s,0),f=oUe(l)|0,n[k>>2]=0,G=k+4|0,n[G>>2]=0,n[k+8>>2]=0,f<<24>>24){case 0:{o[M>>0]=0,uOe(Q,c,M),uD(s,Q)|0,qA(Q);break}case 8:{G=BR(l)|0,o[M>>0]=8,bc(O,n[G+4>>2]|0),AOe(Q,c,M,O,G+8|0),uD(s,Q)|0,qA(Q);break}case 9:{if(m=BR(l)|0,l=n[m+4>>2]|0,l|0)for(B=k+8|0,d=m+12|0;l=l+-1|0,bc(Q,n[d>>2]|0),f=n[G>>2]|0,f>>>0<(n[B>>2]|0)>>>0?(n[f>>2]=n[Q>>2],n[G>>2]=(n[G>>2]|0)+4):pR(k,Q),l;)d=d+4|0;o[M>>0]=9,bc(O,n[m+8>>2]|0),fOe(Q,c,M,O,k),uD(s,Q)|0,qA(Q);break}default:G=BR(l)|0,o[M>>0]=f,bc(O,n[G+4>>2]|0),pOe(Q,c,M,O),uD(s,Q)|0,qA(Q)}ef(k),C=se}function uOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Ka(d),l=da(l)|0,SOe(s,l,o[c>>0]|0),Va(d),C=f}function uD(s,l){s=s|0,l=l|0;var c=0;return c=n[s>>2]|0,c|0&&PA(c|0),n[s>>2]=n[l>>2],n[l>>2]=0,s|0}function AOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+32|0,k=m+16|0,B=m+8|0,Q=m,Ka(B),l=da(l)|0,c=o[c>>0]|0,n[Q>>2]=n[f>>2],d=n[d>>2]|0,n[k>>2]=n[Q>>2],IOe(s,l,c,k,d),Va(B),C=m}function fOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0;m=C,C=C+32|0,Q=m+24|0,B=m+16|0,M=m+12|0,k=m,Ka(B),l=da(l)|0,c=o[c>>0]|0,n[M>>2]=n[f>>2],gR(k,d),n[Q>>2]=n[M>>2],yOe(s,l,c,Q,k),ef(k),Va(B),C=m}function pOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Ka(m),l=da(l)|0,c=o[c>>0]|0,n[k>>2]=n[f>>2],n[B>>2]=n[k>>2],hOe(s,l,c,B),Va(m),C=d}function hOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+4|0,k=d,B=Sl(gOe()|0)|0,c=Km(c)|0,n[k>>2]=n[f>>2],n[m>>2]=n[k>>2],AD(s,oo(0,B|0,l|0,c|0,Fg(m)|0)|0),C=d}function gOe(){var s=0;return o[8e3]|0||(dOe(10756),s=8e3,n[s>>2]=1,n[s+4>>2]=0),10756}function AD(s,l){s=s|0,l=l|0,LF(s,l)}function dOe(s){s=s|0,Pl(s,mOe()|0,2)}function mOe(){return 1772}function yOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0;m=C,C=C+32|0,Q=m+16|0,M=m+12|0,B=m,k=Sl(EOe()|0)|0,c=Km(c)|0,n[M>>2]=n[f>>2],n[Q>>2]=n[M>>2],f=Fg(Q)|0,n[B>>2]=n[d>>2],Q=d+4|0,n[B+4>>2]=n[Q>>2],M=d+8|0,n[B+8>>2]=n[M>>2],n[M>>2]=0,n[Q>>2]=0,n[d>>2]=0,AD(s,pc(0,k|0,l|0,c|0,f|0,mR(B)|0)|0),ef(B),C=m}function EOe(){var s=0;return o[8008]|0||(COe(10768),s=8008,n[s>>2]=1,n[s+4>>2]=0),10768}function COe(s){s=s|0,Pl(s,wOe()|0,3)}function wOe(){return 1784}function IOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,k=m+4|0,Q=m,B=Sl(BOe()|0)|0,c=Km(c)|0,n[Q>>2]=n[f>>2],n[k>>2]=n[Q>>2],f=Fg(k)|0,AD(s,pc(0,B|0,l|0,c|0,f|0,dR(d)|0)|0),C=m}function BOe(){var s=0;return o[8016]|0||(vOe(10780),s=8016,n[s>>2]=1,n[s+4>>2]=0),10780}function vOe(s){s=s|0,Pl(s,DOe()|0,3)}function DOe(){return 1800}function SOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=Sl(POe()|0)|0,AD(s,Qn(0,f|0,l|0,Km(c)|0)|0)}function POe(){var s=0;return o[8024]|0||(bOe(10792),s=8024,n[s>>2]=1,n[s+4>>2]=0),10792}function bOe(s){s=s|0,Pl(s,xOe()|0,1)}function xOe(){return 1816}function kOe(){QOe(),FOe(),ROe()}function QOe(){n[2702]=p7(65536)|0}function FOe(){$Oe(10856)}function ROe(){TOe(10816)}function TOe(s){s=s|0,NOe(s,5044),LOe(s)|0}function NOe(s,l){s=s|0,l=l|0;var c=0;c=x5()|0,n[s>>2]=c,KOe(c,l),xp(n[s>>2]|0)}function LOe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,OOe()|0),s|0}function OOe(){var s=0;return o[8032]|0||(_5(10820),tr(64,10820,U|0)|0,s=8032,n[s>>2]=1,n[s+4>>2]=0),Tr(10820)|0||_5(10820),10820}function _5(s){s=s|0,_Oe(s),Qg(s,25)}function MOe(s){s=s|0,UOe(s+24|0)}function UOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function _Oe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,18,l,qOe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function HOe(s,l){s=s|0,l=l|0,jOe(s,l)}function jOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;c=C,C=C+16|0,f=c,d=c+4|0,bg(d,l),n[f>>2]=xg(d,l)|0,GOe(s,f),C=c}function GOe(s,l){s=s|0,l=l|0,H5(s+4|0,n[l>>2]|0),o[s+8>>0]=1}function H5(s,l){s=s|0,l=l|0,n[s>>2]=l}function qOe(){return 1824}function YOe(s){return s=s|0,WOe(s)|0}function WOe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Kt(4)|0,bg(d,s),H5(k,xg(d,s)|0),m=l+4|0,n[m>>2]=k,s=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],k5(s,m,d),n[f>>2]=s,C=c,l|0}function Wa(s){s=s|0;var l=0,c=0;return s=s+7&-8,s>>>0<=32768&&(l=n[2701]|0,s>>>0<=(65536-l|0)>>>0)?(c=(n[2702]|0)+l|0,n[2701]=l+s,s=c):(s=p7(s+8|0)|0,n[s>>2]=n[2703],n[2703]=s,s=s+8|0),s|0}function KOe(s,l){s=s|0,l=l|0,n[s>>2]=VOe()|0,n[s+4>>2]=JOe()|0,n[s+12>>2]=l,n[s+8>>2]=zOe()|0,n[s+32>>2]=9}function VOe(){return 11744}function JOe(){return 1832}function zOe(){return lD()|0}function XOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(ZOe(c),gt(c)):l|0&>(l)}function ZOe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function $Oe(s){s=s|0,eMe(s,5052),tMe(s)|0,rMe(s,5058,26)|0,nMe(s,5069,1)|0,iMe(s,5077,10)|0,sMe(s,5087,19)|0,oMe(s,5094,27)|0}function eMe(s,l){s=s|0,l=l|0;var c=0;c=Z4e()|0,n[s>>2]=c,$4e(c,l),xp(n[s>>2]|0)}function tMe(s){s=s|0;var l=0;return l=n[s>>2]|0,kg(l,M4e()|0),s|0}function rMe(s,l,c){return s=s|0,l=l|0,c=c|0,C4e(s,pn(l)|0,c,0),s|0}function nMe(s,l,c){return s=s|0,l=l|0,c=c|0,s4e(s,pn(l)|0,c,0),s|0}function iMe(s,l,c){return s=s|0,l=l|0,c=c|0,OMe(s,pn(l)|0,c,0),s|0}function sMe(s,l,c){return s=s|0,l=l|0,c=c|0,IMe(s,pn(l)|0,c,0),s|0}function j5(s,l){s=s|0,l=l|0;var c=0,f=0;e:for(;;){for(c=n[2703]|0;;){if((c|0)==(l|0))break e;if(f=n[c>>2]|0,n[2703]=f,!c)c=f;else break}gt(c)}n[2701]=s}function oMe(s,l,c){return s=s|0,l=l|0,c=c|0,aMe(s,pn(l)|0,c,0),s|0}function aMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=yR()|0,s=lMe(c)|0,hn(m,l,d,s,cMe(c,f)|0,f)}function yR(){var s=0,l=0;if(o[8040]|0||(q5(10860),tr(65,10860,U|0)|0,l=8040,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10860)|0)){s=10860,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));q5(10860)}return 10860}function lMe(s){return s=s|0,s|0}function cMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=yR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(G5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(uMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function G5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function uMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=AMe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,fMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,G5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,pMe(s,d),hMe(d),C=k;return}}function AMe(s){return s=s|0,536870911}function fMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function pMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function q5(s){s=s|0,mMe(s)}function gMe(s){s=s|0,dMe(s+24|0)}function dMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function mMe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,11,l,yMe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yMe(){return 1840}function EMe(s,l,c){s=s|0,l=l|0,c=c|0,wMe(n[(CMe(s)|0)>>2]|0,l,c)}function CMe(s){return s=s|0,(n[(yR()|0)+24>>2]|0)+(s<<3)|0}function wMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+1|0,d=f,bg(m,l),l=xg(m,l)|0,bg(d,c),c=xg(d,c)|0,rf[s&31](l,c),C=f}function IMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=ER()|0,s=BMe(c)|0,hn(m,l,d,s,vMe(c,f)|0,f)}function ER(){var s=0,l=0;if(o[8048]|0||(W5(10896),tr(66,10896,U|0)|0,l=8048,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10896)|0)){s=10896,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));W5(10896)}return 10896}function BMe(s){return s=s|0,s|0}function vMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=ER()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(Y5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(DMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function Y5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function DMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=SMe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,PMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,Y5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,bMe(s,d),xMe(d),C=k;return}}function SMe(s){return s=s|0,536870911}function PMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function bMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function xMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function W5(s){s=s|0,FMe(s)}function kMe(s){s=s|0,QMe(s+24|0)}function QMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function FMe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,11,l,RMe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function RMe(){return 1852}function TMe(s,l){return s=s|0,l=l|0,LMe(n[(NMe(s)|0)>>2]|0,l)|0}function NMe(s){return s=s|0,(n[(ER()|0)+24>>2]|0)+(s<<3)|0}function LMe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,bg(f,l),l=xg(f,l)|0,l=oD(Lg[s&31](l)|0)|0,C=c,l|0}function OMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=CR()|0,s=MMe(c)|0,hn(m,l,d,s,UMe(c,f)|0,f)}function CR(){var s=0,l=0;if(o[8056]|0||(V5(10932),tr(67,10932,U|0)|0,l=8056,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10932)|0)){s=10932,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));V5(10932)}return 10932}function MMe(s){return s=s|0,s|0}function UMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=CR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(K5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(_Me(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function K5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function _Me(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=HMe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,jMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,K5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,GMe(s,d),qMe(d),C=k;return}}function HMe(s){return s=s|0,536870911}function jMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function GMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function V5(s){s=s|0,KMe(s)}function YMe(s){s=s|0,WMe(s+24|0)}function WMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function KMe(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,7,l,VMe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VMe(){return 1860}function JMe(s,l,c){return s=s|0,l=l|0,c=c|0,XMe(n[(zMe(s)|0)>>2]|0,l,c)|0}function zMe(s){return s=s|0,(n[(CR()|0)+24>>2]|0)+(s<<3)|0}function XMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+32|0,B=f+12|0,m=f+8|0,k=f,Q=f+16|0,d=f+4|0,ZMe(Q,l),$Me(k,Q,l),Dp(d,c),c=Sp(d,c)|0,n[B>>2]=n[k>>2],Hw[s&15](m,B,c),c=e4e(m)|0,qA(m),Pp(d),C=f,c|0}function ZMe(s,l){s=s|0,l=l|0}function $Me(s,l,c){s=s|0,l=l|0,c=c|0,t4e(s,c)}function e4e(s){return s=s|0,da(s)|0}function t4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+16|0,c=d,f=l,f&1?(r4e(c,0),ii(f|0,c|0)|0,n4e(s,c),i4e(c)):n[s>>2]=n[l>>2],C=d}function r4e(s,l){s=s|0,l=l|0,Xq(s,l),n[s+4>>2]=0,o[s+8>>0]=0}function n4e(s,l){s=s|0,l=l|0,n[s>>2]=n[l+4>>2]}function i4e(s){s=s|0,o[s+8>>0]=0}function s4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=wR()|0,s=o4e(c)|0,hn(m,l,d,s,a4e(c,f)|0,f)}function wR(){var s=0,l=0;if(o[8064]|0||(z5(10968),tr(68,10968,U|0)|0,l=8064,n[l>>2]=1,n[l+4>>2]=0),!(Tr(10968)|0)){s=10968,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));z5(10968)}return 10968}function o4e(s){return s=s|0,s|0}function a4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=wR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(J5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(l4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function J5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function l4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=c4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,u4e(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,J5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,A4e(s,d),f4e(d),C=k;return}}function c4e(s){return s=s|0,536870911}function u4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function A4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function f4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function z5(s){s=s|0,g4e(s)}function p4e(s){s=s|0,h4e(s+24|0)}function h4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function g4e(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,1,l,d4e()|0,5),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function d4e(){return 1872}function m4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,E4e(n[(y4e(s)|0)>>2]|0,l,c,f,d,m)}function y4e(s){return s=s|0,(n[(wR()|0)+24>>2]|0)+(s<<3)|0}function E4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0;B=C,C=C+32|0,k=B+16|0,Q=B+12|0,M=B+8|0,O=B+4|0,G=B,Dp(k,l),l=Sp(k,l)|0,Dp(Q,c),c=Sp(Q,c)|0,Dp(M,f),f=Sp(M,f)|0,Dp(O,d),d=Sp(O,d)|0,Dp(G,m),m=Sp(G,m)|0,y7[s&1](l,c,f,d,m),Pp(G),Pp(O),Pp(M),Pp(Q),Pp(k),C=B}function C4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=IR()|0,s=w4e(c)|0,hn(m,l,d,s,I4e(c,f)|0,f)}function IR(){var s=0,l=0;if(o[8072]|0||(Z5(11004),tr(69,11004,U|0)|0,l=8072,n[l>>2]=1,n[l+4>>2]=0),!(Tr(11004)|0)){s=11004,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Z5(11004)}return 11004}function w4e(s){return s=s|0,s|0}function I4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=IR()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(X5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(B4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function X5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function B4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=v4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,O=(n[s+8>>2]|0)-Q|0,M=O>>2,D4e(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,X5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,S4e(s,d),P4e(d),C=k;return}}function v4e(s){return s=s|0,536870911}function D4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Rt();else{d=Kt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function S4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function P4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function Z5(s){s=s|0,k4e(s)}function b4e(s){s=s|0,x4e(s+24|0)}function x4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function k4e(s){s=s|0;var l=0;l=Kr()|0,Vr(s,1,12,l,Q4e()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Q4e(){return 1896}function F4e(s,l,c){s=s|0,l=l|0,c=c|0,T4e(n[(R4e(s)|0)>>2]|0,l,c)}function R4e(s){return s=s|0,(n[(IR()|0)+24>>2]|0)+(s<<3)|0}function T4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+4|0,d=f,N4e(m,l),l=L4e(m,l)|0,Dp(d,c),c=Sp(d,c)|0,rf[s&31](l,c),Pp(d),C=f}function N4e(s,l){s=s|0,l=l|0}function L4e(s,l){return s=s|0,l=l|0,O4e(l)|0}function O4e(s){return s=s|0,s|0}function M4e(){var s=0;return o[8080]|0||($5(11040),tr(70,11040,U|0)|0,s=8080,n[s>>2]=1,n[s+4>>2]=0),Tr(11040)|0||$5(11040),11040}function $5(s){s=s|0,H4e(s),Qg(s,71)}function U4e(s){s=s|0,_4e(s+24|0)}function _4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function H4e(s){s=s|0;var l=0;l=Kr()|0,Vr(s,5,7,l,Y4e()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function j4e(s){s=s|0,G4e(s)}function G4e(s){s=s|0,q4e(s)}function q4e(s){s=s|0,o[s+8>>0]=1}function Y4e(){return 1936}function W4e(){return K4e()|0}function K4e(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,m=s+4|0,n[m>>2]=Kt(1)|0,f=Kt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],V4e(f,m,d),n[c>>2]=f,C=l,s|0}function V4e(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Kt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1916,n[c+12>>2]=l,n[s+4>>2]=c}function J4e(s){s=s|0,zm(s),gt(s)}function z4e(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function X4e(s){s=s|0,gt(s)}function Z4e(){var s=0;return o[8088]|0||(sUe(11076),tr(25,11076,U|0)|0,s=8088,n[s>>2]=1,n[s+4>>2]=0),11076}function $4e(s,l){s=s|0,l=l|0,n[s>>2]=eUe()|0,n[s+4>>2]=tUe()|0,n[s+12>>2]=l,n[s+8>>2]=rUe()|0,n[s+32>>2]=10}function eUe(){return 11745}function tUe(){return 1940}function rUe(){return aD()|0}function nUe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(bp(f,896)|0)==512?c|0&&(iUe(c),gt(c)):l|0&>(l)}function iUe(s){s=s|0,s=n[s+4>>2]|0,s|0&&kp(s)}function sUe(s){s=s|0,vp(s)}function bc(s,l){s=s|0,l=l|0,n[s>>2]=l}function BR(s){return s=s|0,n[s>>2]|0}function oUe(s){return s=s|0,o[n[s>>2]>>0]|0}function aUe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,n[f>>2]=n[s>>2],lUe(l,f)|0,C=c}function lUe(s,l){s=s|0,l=l|0;var c=0;return c=cUe(n[s>>2]|0,l)|0,l=s+4|0,n[(n[l>>2]|0)+8>>2]=c,n[(n[l>>2]|0)+8>>2]|0}function cUe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Ka(f),s=da(s)|0,l=uUe(s,n[l>>2]|0)|0,Va(f),C=c,l|0}function Ka(s){s=s|0,n[s>>2]=n[2701],n[s+4>>2]=n[2703]}function uUe(s,l){s=s|0,l=l|0;var c=0;return c=Sl(AUe()|0)|0,Qn(0,c|0,s|0,dR(l)|0)|0}function Va(s){s=s|0,j5(n[s>>2]|0,n[s+4>>2]|0)}function AUe(){var s=0;return o[8096]|0||(fUe(11120),s=8096,n[s>>2]=1,n[s+4>>2]=0),11120}function fUe(s){s=s|0,Pl(s,pUe()|0,1)}function pUe(){return 1948}function hUe(){gUe()}function gUe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,qe=0,Me=0,Qe=0;if(Me=C,C=C+16|0,O=Me+4|0,G=Me,Ni(65536,10804,n[2702]|0,10812),c=B5()|0,l=n[c>>2]|0,s=n[l>>2]|0,s|0)for(f=n[c+8>>2]|0,c=n[c+4>>2]|0;uc(s|0,u[c>>0]|0|0,o[f>>0]|0),l=l+4|0,s=n[l>>2]|0,s;)f=f+1|0,c=c+1|0;if(s=v5()|0,l=n[s>>2]|0,l|0)do uu(l|0,n[s+4>>2]|0),s=s+8|0,l=n[s>>2]|0;while((l|0)!=0);uu(dUe()|0,5167),M=Ym()|0,s=n[M>>2]|0;e:do if(s|0){do mUe(n[s+4>>2]|0),s=n[s>>2]|0;while((s|0)!=0);if(s=n[M>>2]|0,s|0){Q=M;do{for(;d=s,s=n[s>>2]|0,d=n[d+4>>2]|0,!!(yUe(d)|0);)if(n[G>>2]=Q,n[O>>2]=n[G>>2],EUe(M,O)|0,!s)break e;if(CUe(d),Q=n[Q>>2]|0,l=e7(d)|0,m=Hi()|0,B=C,C=C+((1*(l<<2)|0)+15&-16)|0,k=C,C=C+((1*(l<<2)|0)+15&-16)|0,l=n[(L5(d)|0)>>2]|0,l|0)for(c=B,f=k;n[c>>2]=n[(Wm(n[l+4>>2]|0)|0)>>2],n[f>>2]=n[l+8>>2],l=n[l>>2]|0,l;)c=c+4|0,f=f+4|0;Qe=Wm(d)|0,l=wUe(d)|0,c=e7(d)|0,f=IUe(d)|0,Au(Qe|0,l|0,B|0,k|0,c|0,f|0,uR(d)|0),_i(m|0)}while((s|0)!=0)}}while(0);if(s=n[(AR()|0)>>2]|0,s|0)do Qe=s+4|0,M=fR(Qe)|0,d=Ow(M)|0,m=Nw(M)|0,B=(Lw(M)|0)+1|0,k=fD(M)|0,Q=t7(Qe)|0,M=Tr(M)|0,O=cD(Qe)|0,G=vR(Qe)|0,El(0,d|0,m|0,B|0,k|0,Q|0,M|0,O|0,G|0,DR(Qe)|0),s=n[s>>2]|0;while((s|0)!=0);s=n[(Ym()|0)>>2]|0;e:do if(s|0){t:for(;;){if(l=n[s+4>>2]|0,l|0&&(se=n[(Wm(l)|0)>>2]|0,qe=n[(O5(l)|0)>>2]|0,qe|0)){c=qe;do{l=c+4|0,f=fR(l)|0;r:do if(f|0)switch(Tr(f)|0){case 0:break t;case 4:case 3:case 2:{k=Ow(f)|0,Q=Nw(f)|0,M=(Lw(f)|0)+1|0,O=fD(f)|0,G=Tr(f)|0,Qe=cD(l)|0,El(se|0,k|0,Q|0,M|0,O|0,0,G|0,Qe|0,vR(l)|0,DR(l)|0);break r}case 1:{B=Ow(f)|0,k=Nw(f)|0,Q=(Lw(f)|0)+1|0,M=fD(f)|0,O=t7(l)|0,G=Tr(f)|0,Qe=cD(l)|0,El(se|0,B|0,k|0,Q|0,M|0,O|0,G|0,Qe|0,vR(l)|0,DR(l)|0);break r}case 5:{M=Ow(f)|0,O=Nw(f)|0,G=(Lw(f)|0)+1|0,Qe=fD(f)|0,El(se|0,M|0,O|0,G|0,Qe|0,BUe(f)|0,Tr(f)|0,0,0,0);break r}default:break r}while(0);c=n[c>>2]|0}while((c|0)!=0)}if(s=n[s>>2]|0,!s)break e}Rt()}while(0);Ce(),C=Me}function dUe(){return 11703}function mUe(s){s=s|0,o[s+40>>0]=0}function yUe(s){return s=s|0,(o[s+40>>0]|0)!=0|0}function EUe(s,l){return s=s|0,l=l|0,l=vUe(l)|0,s=n[l>>2]|0,n[l>>2]=n[s>>2],gt(s),n[l>>2]|0}function CUe(s){s=s|0,o[s+40>>0]=1}function e7(s){return s=s|0,n[s+20>>2]|0}function wUe(s){return s=s|0,n[s+8>>2]|0}function IUe(s){return s=s|0,n[s+32>>2]|0}function fD(s){return s=s|0,n[s+4>>2]|0}function t7(s){return s=s|0,n[s+4>>2]|0}function vR(s){return s=s|0,n[s+8>>2]|0}function DR(s){return s=s|0,n[s+16>>2]|0}function BUe(s){return s=s|0,n[s+20>>2]|0}function vUe(s){return s=s|0,n[s>>2]|0}function pD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,qe=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,Ge=0,Lt=0;Lt=C,C=C+16|0,se=Lt;do if(s>>>0<245){if(M=s>>>0<11?16:s+11&-8,s=M>>>3,G=n[2783]|0,c=G>>>s,c&3|0)return l=(c&1^1)+s|0,s=11172+(l<<1<<2)|0,c=s+8|0,f=n[c>>2]|0,d=f+8|0,m=n[d>>2]|0,(s|0)==(m|0)?n[2783]=G&~(1<>2]=s,n[c>>2]=m),Ge=l<<3,n[f+4>>2]=Ge|3,Ge=f+Ge+4|0,n[Ge>>2]=n[Ge>>2]|1,Ge=d,C=Lt,Ge|0;if(O=n[2785]|0,M>>>0>O>>>0){if(c|0)return l=2<>>12&16,l=l>>>B,c=l>>>5&8,l=l>>>c,d=l>>>2&4,l=l>>>d,s=l>>>1&2,l=l>>>s,f=l>>>1&1,f=(c|B|d|s|f)+(l>>>f)|0,l=11172+(f<<1<<2)|0,s=l+8|0,d=n[s>>2]|0,B=d+8|0,c=n[B>>2]|0,(l|0)==(c|0)?(s=G&~(1<>2]=l,n[s>>2]=c,s=G),m=(f<<3)-M|0,n[d+4>>2]=M|3,f=d+M|0,n[f+4>>2]=m|1,n[f+m>>2]=m,O|0&&(d=n[2788]|0,l=O>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=d,n[l+12>>2]=d,n[d+8>>2]=l,n[d+12>>2]=c),n[2785]=m,n[2788]=f,Ge=B,C=Lt,Ge|0;if(k=n[2784]|0,k){if(c=(k&0-k)+-1|0,B=c>>>12&16,c=c>>>B,m=c>>>5&8,c=c>>>m,Q=c>>>2&4,c=c>>>Q,f=c>>>1&2,c=c>>>f,s=c>>>1&1,s=n[11436+((m|B|Q|f|s)+(c>>>s)<<2)>>2]|0,c=(n[s+4>>2]&-8)-M|0,f=n[s+16+(((n[s+16>>2]|0)==0&1)<<2)>>2]|0,!f)Q=s,m=c;else{do B=(n[f+4>>2]&-8)-M|0,Q=B>>>0>>0,c=Q?B:c,s=Q?f:s,f=n[f+16+(((n[f+16>>2]|0)==0&1)<<2)>>2]|0;while((f|0)!=0);Q=s,m=c}if(B=Q+M|0,Q>>>0>>0){d=n[Q+24>>2]|0,l=n[Q+12>>2]|0;do if((l|0)==(Q|0)){if(s=Q+20|0,l=n[s>>2]|0,!l&&(s=Q+16|0,l=n[s>>2]|0,!l)){c=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0,c=l}else c=n[Q+8>>2]|0,n[c+12>>2]=l,n[l+8>>2]=c,c=l;while(0);do if(d|0){if(l=n[Q+28>>2]|0,s=11436+(l<<2)|0,(Q|0)==(n[s>>2]|0)){if(n[s>>2]=c,!c){n[2784]=k&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=d,l=n[Q+16>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),l=n[Q+20>>2]|0,l|0&&(n[c+20>>2]=l,n[l+24>>2]=c)}while(0);return m>>>0<16?(Ge=m+M|0,n[Q+4>>2]=Ge|3,Ge=Q+Ge+4|0,n[Ge>>2]=n[Ge>>2]|1):(n[Q+4>>2]=M|3,n[B+4>>2]=m|1,n[B+m>>2]=m,O|0&&(f=n[2788]|0,l=O>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=G|l,l=c,s=c+8|0),n[s>>2]=f,n[l+12>>2]=f,n[f+8>>2]=l,n[f+12>>2]=c),n[2785]=m,n[2788]=B),Ge=Q+8|0,C=Lt,Ge|0}else G=M}else G=M}else G=M}else if(s>>>0<=4294967231)if(s=s+11|0,M=s&-8,Q=n[2784]|0,Q){f=0-M|0,s=s>>>8,s?M>>>0>16777215?k=31:(G=(s+1048320|0)>>>16&8,Ue=s<>>16&4,Ue=Ue<>>16&2,k=14-(O|G|k)+(Ue<>>15)|0,k=M>>>(k+7|0)&1|k<<1):k=0,c=n[11436+(k<<2)>>2]|0;e:do if(!c)c=0,s=0,Ue=57;else for(s=0,B=M<<((k|0)==31?0:25-(k>>>1)|0),m=0;;){if(d=(n[c+4>>2]&-8)-M|0,d>>>0>>0)if(d)s=c,f=d;else{s=c,f=0,d=c,Ue=61;break e}if(d=n[c+20>>2]|0,c=n[c+16+(B>>>31<<2)>>2]|0,m=(d|0)==0|(d|0)==(c|0)?m:d,d=(c|0)==0,d){c=m,Ue=57;break}else B=B<<((d^1)&1)}while(0);if((Ue|0)==57){if((c|0)==0&(s|0)==0){if(s=2<>>12&16,G=G>>>B,m=G>>>5&8,G=G>>>m,k=G>>>2&4,G=G>>>k,O=G>>>1&2,G=G>>>O,c=G>>>1&1,s=0,c=n[11436+((m|B|k|O|c)+(G>>>c)<<2)>>2]|0}c?(d=c,Ue=61):(k=s,B=f)}if((Ue|0)==61)for(;;)if(Ue=0,c=(n[d+4>>2]&-8)-M|0,G=c>>>0>>0,c=G?c:f,s=G?d:s,d=n[d+16+(((n[d+16>>2]|0)==0&1)<<2)>>2]|0,d)f=c,Ue=61;else{k=s,B=c;break}if((k|0)!=0&&B>>>0<((n[2785]|0)-M|0)>>>0){if(m=k+M|0,k>>>0>=m>>>0)return Ge=0,C=Lt,Ge|0;d=n[k+24>>2]|0,l=n[k+12>>2]|0;do if((l|0)==(k|0)){if(s=k+20|0,l=n[s>>2]|0,!l&&(s=k+16|0,l=n[s>>2]|0,!l)){l=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0}else Ge=n[k+8>>2]|0,n[Ge+12>>2]=l,n[l+8>>2]=Ge;while(0);do if(d){if(s=n[k+28>>2]|0,c=11436+(s<<2)|0,(k|0)==(n[c>>2]|0)){if(n[c>>2]=l,!l){f=Q&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=l,!l){f=Q;break}n[l+24>>2]=d,s=n[k+16>>2]|0,s|0&&(n[l+16>>2]=s,n[s+24>>2]=l),s=n[k+20>>2]|0,s&&(n[l+20>>2]=s,n[s+24>>2]=l),f=Q}else f=Q;while(0);do if(B>>>0>=16){if(n[k+4>>2]=M|3,n[m+4>>2]=B|1,n[m+B>>2]=B,l=B>>>3,B>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=m,n[l+12>>2]=m,n[m+8>>2]=l,n[m+12>>2]=c;break}if(l=B>>>8,l?B>>>0>16777215?l=31:(Ue=(l+1048320|0)>>>16&8,Ge=l<>>16&4,Ge=Ge<>>16&2,l=14-(lt|Ue|l)+(Ge<>>15)|0,l=B>>>(l+7|0)&1|l<<1):l=0,c=11436+(l<<2)|0,n[m+28>>2]=l,s=m+16|0,n[s+4>>2]=0,n[s>>2]=0,s=1<>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}for(s=B<<((l|0)==31?0:25-(l>>>1)|0),c=n[c>>2]|0;;){if((n[c+4>>2]&-8|0)==(B|0)){Ue=97;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=96;break}}if((Ue|0)==96){n[f>>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}else if((Ue|0)==97){Ue=c+8|0,Ge=n[Ue>>2]|0,n[Ge+12>>2]=m,n[Ue>>2]=m,n[m+8>>2]=Ge,n[m+12>>2]=c,n[m+24>>2]=0;break}}else Ge=B+M|0,n[k+4>>2]=Ge|3,Ge=k+Ge+4|0,n[Ge>>2]=n[Ge>>2]|1;while(0);return Ge=k+8|0,C=Lt,Ge|0}else G=M}else G=M;else G=-1;while(0);if(c=n[2785]|0,c>>>0>=G>>>0)return l=c-G|0,s=n[2788]|0,l>>>0>15?(Ge=s+G|0,n[2788]=Ge,n[2785]=l,n[Ge+4>>2]=l|1,n[Ge+l>>2]=l,n[s+4>>2]=G|3):(n[2785]=0,n[2788]=0,n[s+4>>2]=c|3,Ge=s+c+4|0,n[Ge>>2]=n[Ge>>2]|1),Ge=s+8|0,C=Lt,Ge|0;if(B=n[2786]|0,B>>>0>G>>>0)return lt=B-G|0,n[2786]=lt,Ge=n[2789]|0,Ue=Ge+G|0,n[2789]=Ue,n[Ue+4>>2]=lt|1,n[Ge+4>>2]=G|3,Ge=Ge+8|0,C=Lt,Ge|0;if(n[2901]|0?s=n[2903]|0:(n[2903]=4096,n[2902]=4096,n[2904]=-1,n[2905]=-1,n[2906]=0,n[2894]=0,s=se&-16^1431655768,n[se>>2]=s,n[2901]=s,s=4096),k=G+48|0,Q=G+47|0,m=s+Q|0,d=0-s|0,M=m&d,M>>>0<=G>>>0||(s=n[2893]|0,s|0&&(O=n[2891]|0,se=O+M|0,se>>>0<=O>>>0|se>>>0>s>>>0)))return Ge=0,C=Lt,Ge|0;e:do if(n[2894]&4)l=0,Ue=133;else{c=n[2789]|0;t:do if(c){for(f=11580;s=n[f>>2]|0,!(s>>>0<=c>>>0&&(Qe=f+4|0,(s+(n[Qe>>2]|0)|0)>>>0>c>>>0));)if(s=n[f+8>>2]|0,s)f=s;else{Ue=118;break t}if(l=m-B&d,l>>>0<2147483647)if(s=Qp(l|0)|0,(s|0)==((n[f>>2]|0)+(n[Qe>>2]|0)|0)){if((s|0)!=-1){B=l,m=s,Ue=135;break e}}else f=s,Ue=126;else l=0}else Ue=118;while(0);do if((Ue|0)==118)if(c=Qp(0)|0,(c|0)!=-1&&(l=c,qe=n[2902]|0,Me=qe+-1|0,l=((Me&l|0)==0?0:(Me+l&0-qe)-l|0)+M|0,qe=n[2891]|0,Me=l+qe|0,l>>>0>G>>>0&l>>>0<2147483647)){if(Qe=n[2893]|0,Qe|0&&Me>>>0<=qe>>>0|Me>>>0>Qe>>>0){l=0;break}if(s=Qp(l|0)|0,(s|0)==(c|0)){B=l,m=c,Ue=135;break e}else f=s,Ue=126}else l=0;while(0);do if((Ue|0)==126){if(c=0-l|0,!(k>>>0>l>>>0&(l>>>0<2147483647&(f|0)!=-1)))if((f|0)==-1){l=0;break}else{B=l,m=f,Ue=135;break e}if(s=n[2903]|0,s=Q-l+s&0-s,s>>>0>=2147483647){B=l,m=f,Ue=135;break e}if((Qp(s|0)|0)==-1){Qp(c|0)|0,l=0;break}else{B=s+l|0,m=f,Ue=135;break e}}while(0);n[2894]=n[2894]|4,Ue=133}while(0);if((Ue|0)==133&&M>>>0<2147483647&&(lt=Qp(M|0)|0,Qe=Qp(0)|0,et=Qe-lt|0,Xe=et>>>0>(G+40|0)>>>0,!((lt|0)==-1|Xe^1|lt>>>0>>0&((lt|0)!=-1&(Qe|0)!=-1)^1))&&(B=Xe?et:l,m=lt,Ue=135),(Ue|0)==135){l=(n[2891]|0)+B|0,n[2891]=l,l>>>0>(n[2892]|0)>>>0&&(n[2892]=l),Q=n[2789]|0;do if(Q){for(l=11580;;){if(s=n[l>>2]|0,c=l+4|0,f=n[c>>2]|0,(m|0)==(s+f|0)){Ue=145;break}if(d=n[l+8>>2]|0,d)l=d;else break}if((Ue|0)==145&&(n[l+12>>2]&8|0)==0&&Q>>>0>>0&Q>>>0>=s>>>0){n[c>>2]=f+B,Ge=Q+8|0,Ge=(Ge&7|0)==0?0:0-Ge&7,Ue=Q+Ge|0,Ge=(n[2786]|0)+(B-Ge)|0,n[2789]=Ue,n[2786]=Ge,n[Ue+4>>2]=Ge|1,n[Ue+Ge+4>>2]=40,n[2790]=n[2905];break}for(m>>>0<(n[2787]|0)>>>0&&(n[2787]=m),c=m+B|0,l=11580;;){if((n[l>>2]|0)==(c|0)){Ue=153;break}if(s=n[l+8>>2]|0,s)l=s;else break}if((Ue|0)==153&&(n[l+12>>2]&8|0)==0){n[l>>2]=m,O=l+4|0,n[O>>2]=(n[O>>2]|0)+B,O=m+8|0,O=m+((O&7|0)==0?0:0-O&7)|0,l=c+8|0,l=c+((l&7|0)==0?0:0-l&7)|0,M=O+G|0,k=l-O-G|0,n[O+4>>2]=G|3;do if((l|0)!=(Q|0)){if((l|0)==(n[2788]|0)){Ge=(n[2785]|0)+k|0,n[2785]=Ge,n[2788]=M,n[M+4>>2]=Ge|1,n[M+Ge>>2]=Ge;break}if(s=n[l+4>>2]|0,(s&3|0)==1){B=s&-8,f=s>>>3;e:do if(s>>>0<256)if(s=n[l+8>>2]|0,c=n[l+12>>2]|0,(c|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=c,n[c+8>>2]=s;break}else{m=n[l+24>>2]|0,s=n[l+12>>2]|0;do if((s|0)==(l|0)){if(f=l+16|0,c=f+4|0,s=n[c>>2]|0,!s)if(s=n[f>>2]|0,s)c=f;else{s=0;break}for(;;){if(f=s+20|0,d=n[f>>2]|0,d|0){s=d,c=f;continue}if(f=s+16|0,d=n[f>>2]|0,d)s=d,c=f;else break}n[c>>2]=0}else Ge=n[l+8>>2]|0,n[Ge+12>>2]=s,n[s+8>>2]=Ge;while(0);if(!m)break;c=n[l+28>>2]|0,f=11436+(c<<2)|0;do if((l|0)!=(n[f>>2]|0)){if(n[m+16+(((n[m+16>>2]|0)!=(l|0)&1)<<2)>>2]=s,!s)break e}else{if(n[f>>2]=s,s|0)break;n[2784]=n[2784]&~(1<>2]=m,c=l+16|0,f=n[c>>2]|0,f|0&&(n[s+16>>2]=f,n[f+24>>2]=s),c=n[c+4>>2]|0,!c)break;n[s+20>>2]=c,n[c+24>>2]=s}while(0);l=l+B|0,d=B+k|0}else d=k;if(l=l+4|0,n[l>>2]=n[l>>2]&-2,n[M+4>>2]=d|1,n[M+d>>2]=d,l=d>>>3,d>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=M,n[l+12>>2]=M,n[M+8>>2]=l,n[M+12>>2]=c;break}l=d>>>8;do if(!l)l=0;else{if(d>>>0>16777215){l=31;break}Ue=(l+1048320|0)>>>16&8,Ge=l<>>16&4,Ge=Ge<>>16&2,l=14-(lt|Ue|l)+(Ge<>>15)|0,l=d>>>(l+7|0)&1|l<<1}while(0);if(f=11436+(l<<2)|0,n[M+28>>2]=l,s=M+16|0,n[s+4>>2]=0,n[s>>2]=0,s=n[2784]|0,c=1<>2]=M,n[M+24>>2]=f,n[M+12>>2]=M,n[M+8>>2]=M;break}for(s=d<<((l|0)==31?0:25-(l>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){Ue=194;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=193;break}}if((Ue|0)==193){n[f>>2]=M,n[M+24>>2]=c,n[M+12>>2]=M,n[M+8>>2]=M;break}else if((Ue|0)==194){Ue=c+8|0,Ge=n[Ue>>2]|0,n[Ge+12>>2]=M,n[Ue>>2]=M,n[M+8>>2]=Ge,n[M+12>>2]=c,n[M+24>>2]=0;break}}else Ge=(n[2786]|0)+k|0,n[2786]=Ge,n[2789]=M,n[M+4>>2]=Ge|1;while(0);return Ge=O+8|0,C=Lt,Ge|0}for(l=11580;s=n[l>>2]|0,!(s>>>0<=Q>>>0&&(Ge=s+(n[l+4>>2]|0)|0,Ge>>>0>Q>>>0));)l=n[l+8>>2]|0;d=Ge+-47|0,s=d+8|0,s=d+((s&7|0)==0?0:0-s&7)|0,d=Q+16|0,s=s>>>0>>0?Q:s,l=s+8|0,c=m+8|0,c=(c&7|0)==0?0:0-c&7,Ue=m+c|0,c=B+-40-c|0,n[2789]=Ue,n[2786]=c,n[Ue+4>>2]=c|1,n[Ue+c+4>>2]=40,n[2790]=n[2905],c=s+4|0,n[c>>2]=27,n[l>>2]=n[2895],n[l+4>>2]=n[2896],n[l+8>>2]=n[2897],n[l+12>>2]=n[2898],n[2895]=m,n[2896]=B,n[2898]=0,n[2897]=l,l=s+24|0;do Ue=l,l=l+4|0,n[l>>2]=7;while((Ue+8|0)>>>0>>0);if((s|0)!=(Q|0)){if(m=s-Q|0,n[c>>2]=n[c>>2]&-2,n[Q+4>>2]=m|1,n[s>>2]=m,l=m>>>3,m>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=Q,n[l+12>>2]=Q,n[Q+8>>2]=l,n[Q+12>>2]=c;break}if(l=m>>>8,l?m>>>0>16777215?c=31:(Ue=(l+1048320|0)>>>16&8,Ge=l<>>16&4,Ge=Ge<>>16&2,c=14-(lt|Ue|c)+(Ge<>>15)|0,c=m>>>(c+7|0)&1|c<<1):c=0,f=11436+(c<<2)|0,n[Q+28>>2]=c,n[Q+20>>2]=0,n[d>>2]=0,l=n[2784]|0,s=1<>2]=Q,n[Q+24>>2]=f,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}for(s=m<<((c|0)==31?0:25-(c>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(m|0)){Ue=216;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=215;break}}if((Ue|0)==215){n[f>>2]=Q,n[Q+24>>2]=c,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}else if((Ue|0)==216){Ue=c+8|0,Ge=n[Ue>>2]|0,n[Ge+12>>2]=Q,n[Ue>>2]=Q,n[Q+8>>2]=Ge,n[Q+12>>2]=c,n[Q+24>>2]=0;break}}}else{Ge=n[2787]|0,(Ge|0)==0|m>>>0>>0&&(n[2787]=m),n[2895]=m,n[2896]=B,n[2898]=0,n[2792]=n[2901],n[2791]=-1,l=0;do Ge=11172+(l<<1<<2)|0,n[Ge+12>>2]=Ge,n[Ge+8>>2]=Ge,l=l+1|0;while((l|0)!=32);Ge=m+8|0,Ge=(Ge&7|0)==0?0:0-Ge&7,Ue=m+Ge|0,Ge=B+-40-Ge|0,n[2789]=Ue,n[2786]=Ge,n[Ue+4>>2]=Ge|1,n[Ue+Ge+4>>2]=40,n[2790]=n[2905]}while(0);if(l=n[2786]|0,l>>>0>G>>>0)return lt=l-G|0,n[2786]=lt,Ge=n[2789]|0,Ue=Ge+G|0,n[2789]=Ue,n[Ue+4>>2]=lt|1,n[Ge+4>>2]=G|3,Ge=Ge+8|0,C=Lt,Ge|0}return n[(Vm()|0)>>2]=12,Ge=0,C=Lt,Ge|0}function hD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(!!s){c=s+-8|0,d=n[2787]|0,s=n[s+-4>>2]|0,l=s&-8,Q=c+l|0;do if(s&1)k=c,B=c;else{if(f=n[c>>2]|0,!(s&3)||(B=c+(0-f)|0,m=f+l|0,B>>>0>>0))return;if((B|0)==(n[2788]|0)){if(s=Q+4|0,l=n[s>>2]|0,(l&3|0)!=3){k=B,l=m;break}n[2785]=m,n[s>>2]=l&-2,n[B+4>>2]=m|1,n[B+m>>2]=m;return}if(c=f>>>3,f>>>0<256)if(s=n[B+8>>2]|0,l=n[B+12>>2]|0,(l|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=l,n[l+8>>2]=s,k=B,l=m;break}d=n[B+24>>2]|0,s=n[B+12>>2]|0;do if((s|0)==(B|0)){if(c=B+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{s=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0}else k=n[B+8>>2]|0,n[k+12>>2]=s,n[s+8>>2]=k;while(0);if(d){if(l=n[B+28>>2]|0,c=11436+(l<<2)|0,(B|0)==(n[c>>2]|0)){if(n[c>>2]=s,!s){n[2784]=n[2784]&~(1<>2]|0)!=(B|0)&1)<<2)>>2]=s,!s){k=B,l=m;break}n[s+24>>2]=d,l=B+16|0,c=n[l>>2]|0,c|0&&(n[s+16>>2]=c,n[c+24>>2]=s),l=n[l+4>>2]|0,l?(n[s+20>>2]=l,n[l+24>>2]=s,k=B,l=m):(k=B,l=m)}else k=B,l=m}while(0);if(!(B>>>0>=Q>>>0)&&(s=Q+4|0,f=n[s>>2]|0,!!(f&1))){if(f&2)n[s>>2]=f&-2,n[k+4>>2]=l|1,n[B+l>>2]=l,d=l;else{if(s=n[2788]|0,(Q|0)==(n[2789]|0)){if(Q=(n[2786]|0)+l|0,n[2786]=Q,n[2789]=k,n[k+4>>2]=Q|1,(k|0)!=(s|0))return;n[2788]=0,n[2785]=0;return}if((Q|0)==(s|0)){Q=(n[2785]|0)+l|0,n[2785]=Q,n[2788]=B,n[k+4>>2]=Q|1,n[B+Q>>2]=Q;return}d=(f&-8)+l|0,c=f>>>3;do if(f>>>0<256)if(l=n[Q+8>>2]|0,s=n[Q+12>>2]|0,(s|0)==(l|0)){n[2783]=n[2783]&~(1<>2]=s,n[s+8>>2]=l;break}else{m=n[Q+24>>2]|0,s=n[Q+12>>2]|0;do if((s|0)==(Q|0)){if(c=Q+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{c=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0,c=s}else c=n[Q+8>>2]|0,n[c+12>>2]=s,n[s+8>>2]=c,c=s;while(0);if(m|0){if(s=n[Q+28>>2]|0,l=11436+(s<<2)|0,(Q|0)==(n[l>>2]|0)){if(n[l>>2]=c,!c){n[2784]=n[2784]&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=m,s=Q+16|0,l=n[s>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),s=n[s+4>>2]|0,s|0&&(n[c+20>>2]=s,n[s+24>>2]=c)}}while(0);if(n[k+4>>2]=d|1,n[B+d>>2]=d,(k|0)==(n[2788]|0)){n[2785]=d;return}}if(s=d>>>3,d>>>0<256){c=11172+(s<<1<<2)|0,l=n[2783]|0,s=1<>2]|0):(n[2783]=l|s,s=c,l=c+8|0),n[l>>2]=k,n[s+12>>2]=k,n[k+8>>2]=s,n[k+12>>2]=c;return}s=d>>>8,s?d>>>0>16777215?s=31:(B=(s+1048320|0)>>>16&8,Q=s<>>16&4,Q=Q<>>16&2,s=14-(m|B|s)+(Q<>>15)|0,s=d>>>(s+7|0)&1|s<<1):s=0,f=11436+(s<<2)|0,n[k+28>>2]=s,n[k+20>>2]=0,n[k+16>>2]=0,l=n[2784]|0,c=1<>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){s=73;break}if(f=c+16+(l>>>31<<2)|0,s=n[f>>2]|0,s)l=l<<1,c=s;else{s=72;break}}if((s|0)==72){n[f>>2]=k,n[k+24>>2]=c,n[k+12>>2]=k,n[k+8>>2]=k;break}else if((s|0)==73){B=c+8|0,Q=n[B>>2]|0,n[Q+12>>2]=k,n[B>>2]=k,n[k+8>>2]=Q,n[k+12>>2]=c,n[k+24>>2]=0;break}}else n[2784]=l|c,n[f>>2]=k,n[k+24>>2]=f,n[k+12>>2]=k,n[k+8>>2]=k;while(0);if(Q=(n[2791]|0)+-1|0,n[2791]=Q,!Q)s=11588;else return;for(;s=n[s>>2]|0,s;)s=s+8|0;n[2791]=-1}}}function DUe(){return 11628}function SUe(s){s=s|0;var l=0,c=0;return l=C,C=C+16|0,c=l,n[c>>2]=xUe(n[s+60>>2]|0)|0,s=gD(hc(6,c|0)|0)|0,C=l,s|0}function r7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,qe=0;G=C,C=C+48|0,M=G+16|0,m=G,d=G+32|0,k=s+28|0,f=n[k>>2]|0,n[d>>2]=f,Q=s+20|0,f=(n[Q>>2]|0)-f|0,n[d+4>>2]=f,n[d+8>>2]=l,n[d+12>>2]=c,f=f+c|0,B=s+60|0,n[m>>2]=n[B>>2],n[m+4>>2]=d,n[m+8>>2]=2,m=gD(Li(146,m|0)|0)|0;e:do if((f|0)!=(m|0)){for(l=2;!((m|0)<0);)if(f=f-m|0,qe=n[d+4>>2]|0,se=m>>>0>qe>>>0,d=se?d+8|0:d,l=(se<<31>>31)+l|0,qe=m-(se?qe:0)|0,n[d>>2]=(n[d>>2]|0)+qe,se=d+4|0,n[se>>2]=(n[se>>2]|0)-qe,n[M>>2]=n[B>>2],n[M+4>>2]=d,n[M+8>>2]=l,m=gD(Li(146,M|0)|0)|0,(f|0)==(m|0)){O=3;break e}n[s+16>>2]=0,n[k>>2]=0,n[Q>>2]=0,n[s>>2]=n[s>>2]|32,(l|0)==2?c=0:c=c-(n[d+4>>2]|0)|0}else O=3;while(0);return(O|0)==3&&(qe=n[s+44>>2]|0,n[s+16>>2]=qe+(n[s+48>>2]|0),n[k>>2]=qe,n[Q>>2]=qe),C=G,c|0}function PUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return d=C,C=C+32|0,m=d,f=d+20|0,n[m>>2]=n[s+60>>2],n[m+4>>2]=0,n[m+8>>2]=l,n[m+12>>2]=f,n[m+16>>2]=c,(gD(sa(140,m|0)|0)|0)<0?(n[f>>2]=-1,s=-1):s=n[f>>2]|0,C=d,s|0}function gD(s){return s=s|0,s>>>0>4294963200&&(n[(Vm()|0)>>2]=0-s,s=-1),s|0}function Vm(){return(bUe()|0)+64|0}function bUe(){return SR()|0}function SR(){return 2084}function xUe(s){return s=s|0,s|0}function kUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return d=C,C=C+32|0,f=d,n[s+36>>2]=1,(n[s>>2]&64|0)==0&&(n[f>>2]=n[s+60>>2],n[f+4>>2]=21523,n[f+8>>2]=d+16,fu(54,f|0)|0)&&(o[s+75>>0]=-1),f=r7(s,l,c)|0,C=d,f|0}function n7(s,l){s=s|0,l=l|0;var c=0,f=0;if(c=o[s>>0]|0,f=o[l>>0]|0,c<<24>>24==0||c<<24>>24!=f<<24>>24)s=f;else{do s=s+1|0,l=l+1|0,c=o[s>>0]|0,f=o[l>>0]|0;while(!(c<<24>>24==0||c<<24>>24!=f<<24>>24));s=f}return(c&255)-(s&255)|0}function QUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;e:do if(!c)s=0;else{for(;f=o[s>>0]|0,d=o[l>>0]|0,f<<24>>24==d<<24>>24;)if(c=c+-1|0,c)s=s+1|0,l=l+1|0;else{s=0;break e}s=(f&255)-(d&255)|0}while(0);return s|0}function i7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,qe=0,Me=0,Qe=0;Qe=C,C=C+224|0,O=Qe+120|0,G=Qe+80|0,qe=Qe,Me=Qe+136|0,f=G,d=f+40|0;do n[f>>2]=0,f=f+4|0;while((f|0)<(d|0));return n[O>>2]=n[c>>2],(PR(0,l,O,qe,G)|0)<0?c=-1:((n[s+76>>2]|0)>-1?se=FUe(s)|0:se=0,c=n[s>>2]|0,M=c&32,(o[s+74>>0]|0)<1&&(n[s>>2]=c&-33),f=s+48|0,n[f>>2]|0?c=PR(s,l,O,qe,G)|0:(d=s+44|0,m=n[d>>2]|0,n[d>>2]=Me,B=s+28|0,n[B>>2]=Me,k=s+20|0,n[k>>2]=Me,n[f>>2]=80,Q=s+16|0,n[Q>>2]=Me+80,c=PR(s,l,O,qe,G)|0,m&&(ED[n[s+36>>2]&7](s,0,0)|0,c=(n[k>>2]|0)==0?-1:c,n[d>>2]=m,n[f>>2]=0,n[Q>>2]=0,n[B>>2]=0,n[k>>2]=0)),f=n[s>>2]|0,n[s>>2]=f|M,se|0&&RUe(s),c=(f&32|0)==0?c:-1),C=Qe,c|0}function PR(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,qe=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,Ge=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0;ir=C,C=C+64|0,or=ir+16|0,Xt=ir,Lt=ir+24|0,Sr=ir+8|0,Nr=ir+20|0,n[or>>2]=l,lt=(s|0)!=0,Ue=Lt+40|0,Ge=Ue,Lt=Lt+39|0,Mr=Sr+4|0,B=0,m=0,O=0;e:for(;;){do if((m|0)>-1)if((B|0)>(2147483647-m|0)){n[(Vm()|0)>>2]=75,m=-1;break}else{m=B+m|0;break}while(0);if(B=o[l>>0]|0,B<<24>>24)k=l;else{Xe=87;break}t:for(;;){switch(B<<24>>24){case 37:{B=k,Xe=9;break t}case 0:{B=k;break t}default:}et=k+1|0,n[or>>2]=et,B=o[et>>0]|0,k=et}t:do if((Xe|0)==9)for(;;){if(Xe=0,(o[k+1>>0]|0)!=37)break t;if(B=B+1|0,k=k+2|0,n[or>>2]=k,(o[k>>0]|0)==37)Xe=9;else break}while(0);if(B=B-l|0,lt&&ss(s,l,B),B|0){l=k;continue}Q=k+1|0,B=(o[Q>>0]|0)+-48|0,B>>>0<10?(et=(o[k+2>>0]|0)==36,Qe=et?B:-1,O=et?1:O,Q=et?k+3|0:Q):Qe=-1,n[or>>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0;t:do if(k>>>0<32)for(M=0,G=B;;){if(B=1<>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0,k>>>0>=32)break;G=B}else M=0;while(0);if(B<<24>>24==42){if(k=Q+1|0,B=(o[k>>0]|0)+-48|0,B>>>0<10&&(o[Q+2>>0]|0)==36)n[d+(B<<2)>>2]=10,B=n[f+((o[k>>0]|0)+-48<<3)>>2]|0,O=1,Q=Q+3|0;else{if(O|0){m=-1;break}lt?(O=(n[c>>2]|0)+(4-1)&~(4-1),B=n[O>>2]|0,n[c>>2]=O+4,O=0,Q=k):(B=0,O=0,Q=k)}n[or>>2]=Q,et=(B|0)<0,B=et?0-B|0:B,M=et?M|8192:M}else{if(B=s7(or)|0,(B|0)<0){m=-1;break}Q=n[or>>2]|0}do if((o[Q>>0]|0)==46){if((o[Q+1>>0]|0)!=42){n[or>>2]=Q+1,k=s7(or)|0,Q=n[or>>2]|0;break}if(G=Q+2|0,k=(o[G>>0]|0)+-48|0,k>>>0<10&&(o[Q+3>>0]|0)==36){n[d+(k<<2)>>2]=10,k=n[f+((o[G>>0]|0)+-48<<3)>>2]|0,Q=Q+4|0,n[or>>2]=Q;break}if(O|0){m=-1;break e}lt?(et=(n[c>>2]|0)+(4-1)&~(4-1),k=n[et>>2]|0,n[c>>2]=et+4):k=0,n[or>>2]=G,Q=G}else k=-1;while(0);for(Me=0;;){if(((o[Q>>0]|0)+-65|0)>>>0>57){m=-1;break e}if(et=Q+1|0,n[or>>2]=et,G=o[(o[Q>>0]|0)+-65+(5178+(Me*58|0))>>0]|0,se=G&255,(se+-1|0)>>>0<8)Me=se,Q=et;else break}if(!(G<<24>>24)){m=-1;break}qe=(Qe|0)>-1;do if(G<<24>>24==19)if(qe){m=-1;break e}else Xe=49;else{if(qe){n[d+(Qe<<2)>>2]=se,qe=f+(Qe<<3)|0,Qe=n[qe+4>>2]|0,Xe=Xt,n[Xe>>2]=n[qe>>2],n[Xe+4>>2]=Qe,Xe=49;break}if(!lt){m=0;break e}o7(Xt,se,c)}while(0);if((Xe|0)==49&&(Xe=0,!lt)){B=0,l=et;continue}Q=o[Q>>0]|0,Q=(Me|0)!=0&(Q&15|0)==3?Q&-33:Q,qe=M&-65537,Qe=(M&8192|0)==0?M:qe;t:do switch(Q|0){case 110:switch((Me&255)<<24>>24){case 0:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 1:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 2:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}case 3:{a[n[Xt>>2]>>1]=m,B=0,l=et;continue e}case 4:{o[n[Xt>>2]>>0]=m,B=0,l=et;continue e}case 6:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 7:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}default:{B=0,l=et;continue e}}case 112:{Q=120,k=k>>>0>8?k:8,l=Qe|8,Xe=61;break}case 88:case 120:{l=Qe,Xe=61;break}case 111:{Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,se=NUe(l,Q,Ue)|0,qe=Ge-se|0,M=0,G=5642,k=(Qe&8|0)==0|(k|0)>(qe|0)?k:qe+1|0,qe=Qe,Xe=67;break}case 105:case 100:if(Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,(Q|0)<0){l=dD(0,0,l|0,Q|0)|0,Q=Se,M=Xt,n[M>>2]=l,n[M+4>>2]=Q,M=1,G=5642,Xe=66;break t}else{M=(Qe&2049|0)!=0&1,G=(Qe&2048|0)==0?(Qe&1|0)==0?5642:5644:5643,Xe=66;break t}case 117:{Q=Xt,M=0,G=5642,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,Xe=66;break}case 99:{o[Lt>>0]=n[Xt>>2],l=Lt,M=0,G=5642,se=Ue,Q=1,k=qe;break}case 109:{Q=LUe(n[(Vm()|0)>>2]|0)|0,Xe=71;break}case 115:{Q=n[Xt>>2]|0,Q=Q|0?Q:5652,Xe=71;break}case 67:{n[Sr>>2]=n[Xt>>2],n[Mr>>2]=0,n[Xt>>2]=Sr,se=-1,Q=Sr,Xe=75;break}case 83:{l=n[Xt>>2]|0,k?(se=k,Q=l,Xe=75):(Bs(s,32,B,0,Qe),l=0,Xe=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{B=MUe(s,+E[Xt>>3],B,k,Qe,Q)|0,l=et;continue e}default:M=0,G=5642,se=Ue,Q=k,k=Qe}while(0);t:do if((Xe|0)==61)Qe=Xt,Me=n[Qe>>2]|0,Qe=n[Qe+4>>2]|0,se=TUe(Me,Qe,Ue,Q&32)|0,G=(l&8|0)==0|(Me|0)==0&(Qe|0)==0,M=G?0:2,G=G?5642:5642+(Q>>4)|0,qe=l,l=Me,Q=Qe,Xe=67;else if((Xe|0)==66)se=Jm(l,Q,Ue)|0,qe=Qe,Xe=67;else if((Xe|0)==71)Xe=0,Qe=OUe(Q,0,k)|0,Me=(Qe|0)==0,l=Q,M=0,G=5642,se=Me?Q+k|0:Qe,Q=Me?k:Qe-Q|0,k=qe;else if((Xe|0)==75){for(Xe=0,G=Q,l=0,k=0;M=n[G>>2]|0,!(!M||(k=a7(Nr,M)|0,(k|0)<0|k>>>0>(se-l|0)>>>0));)if(l=k+l|0,se>>>0>l>>>0)G=G+4|0;else break;if((k|0)<0){m=-1;break e}if(Bs(s,32,B,l,Qe),!l)l=0,Xe=84;else for(M=0;;){if(k=n[Q>>2]|0,!k){Xe=84;break t}if(k=a7(Nr,k)|0,M=k+M|0,(M|0)>(l|0)){Xe=84;break t}if(ss(s,Nr,k),M>>>0>=l>>>0){Xe=84;break}else Q=Q+4|0}}while(0);if((Xe|0)==67)Xe=0,Q=(l|0)!=0|(Q|0)!=0,Qe=(k|0)!=0|Q,Q=((Q^1)&1)+(Ge-se)|0,l=Qe?se:Ue,se=Ue,Q=Qe?(k|0)>(Q|0)?k:Q:k,k=(k|0)>-1?qe&-65537:qe;else if((Xe|0)==84){Xe=0,Bs(s,32,B,l,Qe^8192),B=(B|0)>(l|0)?B:l,l=et;continue}Me=se-l|0,qe=(Q|0)<(Me|0)?Me:Q,Qe=qe+M|0,B=(B|0)<(Qe|0)?Qe:B,Bs(s,32,B,Qe,k),ss(s,G,M),Bs(s,48,B,Qe,k^65536),Bs(s,48,qe,Me,0),ss(s,l,Me),Bs(s,32,B,Qe,k^8192),l=et}e:do if((Xe|0)==87&&!s)if(!O)m=0;else{for(m=1;l=n[d+(m<<2)>>2]|0,!!l;)if(o7(f+(m<<3)|0,l,c),m=m+1|0,(m|0)>=10){m=1;break e}for(;;){if(n[d+(m<<2)>>2]|0){m=-1;break e}if(m=m+1|0,(m|0)>=10){m=1;break}}}while(0);return C=ir,m|0}function FUe(s){return s=s|0,0}function RUe(s){s=s|0}function ss(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]&32||KUe(l,c,s)|0}function s7(s){s=s|0;var l=0,c=0,f=0;if(c=n[s>>2]|0,f=(o[c>>0]|0)+-48|0,f>>>0<10){l=0;do l=f+(l*10|0)|0,c=c+1|0,n[s>>2]=c,f=(o[c>>0]|0)+-48|0;while(f>>>0<10)}else l=0;return l|0}function o7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;e:do if(l>>>0<=20)do switch(l|0){case 9:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,n[s>>2]=l;break e}case 10:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=((l|0)<0)<<31>>31;break e}case 11:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=0;break e}case 12:{f=(n[c>>2]|0)+(8-1)&~(8-1),l=f,d=n[l>>2]|0,l=n[l+4>>2]|0,n[c>>2]=f+8,f=s,n[f>>2]=d,n[f+4>>2]=l;break e}case 13:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&65535)<<16>>16,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 14:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&65535,n[d+4>>2]=0;break e}case 15:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&255)<<24>>24,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 16:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&255,n[d+4>>2]=0;break e}case 17:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}case 18:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}default:break e}while(0);while(0)}function TUe(s,l,c,f){if(s=s|0,l=l|0,c=c|0,f=f|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=u[5694+(s&15)>>0]|0|f,s=mD(s|0,l|0,4)|0,l=Se;while(!((s|0)==0&(l|0)==0));return c|0}function NUe(s,l,c){if(s=s|0,l=l|0,c=c|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=s&7|48,s=mD(s|0,l|0,3)|0,l=Se;while(!((s|0)==0&(l|0)==0));return c|0}function Jm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if(l>>>0>0|(l|0)==0&s>>>0>4294967295){for(;f=QR(s|0,l|0,10,0)|0,c=c+-1|0,o[c>>0]=f&255|48,f=s,s=kR(s|0,l|0,10,0)|0,l>>>0>9|(l|0)==9&f>>>0>4294967295;)l=Se;l=s}else l=s;if(l)for(;c=c+-1|0,o[c>>0]=(l>>>0)%10|0|48,!(l>>>0<10);)l=(l>>>0)/10|0;return c|0}function LUe(s){return s=s|0,GUe(s,n[(jUe()|0)+188>>2]|0)|0}function OUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;m=l&255,f=(c|0)!=0;e:do if(f&(s&3|0)!=0)for(d=l&255;;){if((o[s>>0]|0)==d<<24>>24){B=6;break e}if(s=s+1|0,c=c+-1|0,f=(c|0)!=0,!(f&(s&3|0)!=0)){B=5;break}}else B=5;while(0);(B|0)==5&&(f?B=6:c=0);e:do if((B|0)==6&&(d=l&255,(o[s>>0]|0)!=d<<24>>24)){f=je(m,16843009)|0;t:do if(c>>>0>3){for(;m=n[s>>2]^f,!((m&-2139062144^-2139062144)&m+-16843009|0);)if(s=s+4|0,c=c+-4|0,c>>>0<=3){B=11;break t}}else B=11;while(0);if((B|0)==11&&!c){c=0;break}for(;;){if((o[s>>0]|0)==d<<24>>24)break e;if(s=s+1|0,c=c+-1|0,!c){c=0;break}}}while(0);return(c|0?s:0)|0}function Bs(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0;if(B=C,C=C+256|0,m=B,(c|0)>(f|0)&(d&73728|0)==0){if(d=c-f|0,Xm(m|0,l|0,(d>>>0<256?d:256)|0)|0,d>>>0>255){l=c-f|0;do ss(s,m,256),d=d+-256|0;while(d>>>0>255);d=l&255}ss(s,m,d)}C=B}function a7(s,l){return s=s|0,l=l|0,s?s=_Ue(s,l,0)|0:s=0,s|0}function MUe(s,l,c,f,d,m){s=s|0,l=+l,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,M=0,O=0,G=0,se=0,qe=0,Me=0,Qe=0,et=0,Xe=0,lt=0,Ue=0,Ge=0,Lt=0,Mr=0,or=0,Xt=0,Sr=0,Nr=0,ir=0,xn=0;xn=C,C=C+560|0,Q=xn+8|0,et=xn,ir=xn+524|0,Nr=ir,M=xn+512|0,n[et>>2]=0,Sr=M+12|0,l7(l)|0,(Se|0)<0?(l=-l,or=1,Mr=5659):(or=(d&2049|0)!=0&1,Mr=(d&2048|0)==0?(d&1|0)==0?5660:5665:5662),l7(l)|0,Xt=Se&2146435072;do if(Xt>>>0<2146435072|(Xt|0)==2146435072&0<0){if(qe=+UUe(l,et)*2,B=qe!=0,B&&(n[et>>2]=(n[et>>2]|0)+-1),lt=m|32,(lt|0)==97){Me=m&32,se=(Me|0)==0?Mr:Mr+9|0,G=or|2,B=12-f|0;do if(f>>>0>11|(B|0)==0)l=qe;else{l=8;do B=B+-1|0,l=l*16;while((B|0)!=0);if((o[se>>0]|0)==45){l=-(l+(-qe-l));break}else{l=qe+l-l;break}}while(0);k=n[et>>2]|0,B=(k|0)<0?0-k|0:k,B=Jm(B,((B|0)<0)<<31>>31,Sr)|0,(B|0)==(Sr|0)&&(B=M+11|0,o[B>>0]=48),o[B+-1>>0]=(k>>31&2)+43,O=B+-2|0,o[O>>0]=m+15,M=(f|0)<1,Q=(d&8|0)==0,B=ir;do Xt=~~l,k=B+1|0,o[B>>0]=u[5694+Xt>>0]|Me,l=(l-+(Xt|0))*16,(k-Nr|0)==1&&!(Q&(M&l==0))?(o[k>>0]=46,B=B+2|0):B=k;while(l!=0);Xt=B-Nr|0,Nr=Sr-O|0,Sr=(f|0)!=0&(Xt+-2|0)<(f|0)?f+2|0:Xt,B=Nr+G+Sr|0,Bs(s,32,c,B,d),ss(s,se,G),Bs(s,48,c,B,d^65536),ss(s,ir,Xt),Bs(s,48,Sr-Xt|0,0,0),ss(s,O,Nr),Bs(s,32,c,B,d^8192);break}k=(f|0)<0?6:f,B?(B=(n[et>>2]|0)+-28|0,n[et>>2]=B,l=qe*268435456):(l=qe,B=n[et>>2]|0),Xt=(B|0)<0?Q:Q+288|0,Q=Xt;do Ge=~~l>>>0,n[Q>>2]=Ge,Q=Q+4|0,l=(l-+(Ge>>>0))*1e9;while(l!=0);if((B|0)>0)for(M=Xt,G=Q;;){if(O=(B|0)<29?B:29,B=G+-4|0,B>>>0>=M>>>0){Q=0;do Ue=h7(n[B>>2]|0,0,O|0)|0,Ue=xR(Ue|0,Se|0,Q|0,0)|0,Ge=Se,Xe=QR(Ue|0,Ge|0,1e9,0)|0,n[B>>2]=Xe,Q=kR(Ue|0,Ge|0,1e9,0)|0,B=B+-4|0;while(B>>>0>=M>>>0);Q&&(M=M+-4|0,n[M>>2]=Q)}for(Q=G;!(Q>>>0<=M>>>0);)if(B=Q+-4|0,!(n[B>>2]|0))Q=B;else break;if(B=(n[et>>2]|0)-O|0,n[et>>2]=B,(B|0)>0)G=Q;else break}else M=Xt;if((B|0)<0){f=((k+25|0)/9|0)+1|0,Qe=(lt|0)==102;do{if(Me=0-B|0,Me=(Me|0)<9?Me:9,M>>>0>>0){O=(1<>>Me,se=0,B=M;do Ge=n[B>>2]|0,n[B>>2]=(Ge>>>Me)+se,se=je(Ge&O,G)|0,B=B+4|0;while(B>>>0>>0);B=(n[M>>2]|0)==0?M+4|0:M,se?(n[Q>>2]=se,M=B,B=Q+4|0):(M=B,B=Q)}else M=(n[M>>2]|0)==0?M+4|0:M,B=Q;Q=Qe?Xt:M,Q=(B-Q>>2|0)>(f|0)?Q+(f<<2)|0:B,B=(n[et>>2]|0)+Me|0,n[et>>2]=B}while((B|0)<0);B=M,f=Q}else B=M,f=Q;if(Ge=Xt,B>>>0>>0){if(Q=(Ge-B>>2)*9|0,O=n[B>>2]|0,O>>>0>=10){M=10;do M=M*10|0,Q=Q+1|0;while(O>>>0>=M>>>0)}}else Q=0;if(Qe=(lt|0)==103,Xe=(k|0)!=0,M=k-((lt|0)!=102?Q:0)+((Xe&Qe)<<31>>31)|0,(M|0)<(((f-Ge>>2)*9|0)+-9|0)){if(M=M+9216|0,Me=Xt+4+(((M|0)/9|0)+-1024<<2)|0,M=((M|0)%9|0)+1|0,(M|0)<9){O=10;do O=O*10|0,M=M+1|0;while((M|0)!=9)}else O=10;if(G=n[Me>>2]|0,se=(G>>>0)%(O>>>0)|0,M=(Me+4|0)==(f|0),M&(se|0)==0)M=Me;else if(qe=(((G>>>0)/(O>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,Ue=(O|0)/2|0,l=se>>>0>>0?.5:M&(se|0)==(Ue|0)?1:1.5,or&&(Ue=(o[Mr>>0]|0)==45,l=Ue?-l:l,qe=Ue?-qe:qe),M=G-se|0,n[Me>>2]=M,qe+l!=qe){if(Ue=M+O|0,n[Me>>2]=Ue,Ue>>>0>999999999)for(Q=Me;M=Q+-4|0,n[Q>>2]=0,M>>>0>>0&&(B=B+-4|0,n[B>>2]=0),Ue=(n[M>>2]|0)+1|0,n[M>>2]=Ue,Ue>>>0>999999999;)Q=M;else M=Me;if(Q=(Ge-B>>2)*9|0,G=n[B>>2]|0,G>>>0>=10){O=10;do O=O*10|0,Q=Q+1|0;while(G>>>0>=O>>>0)}}else M=Me;M=M+4|0,M=f>>>0>M>>>0?M:f,Ue=B}else M=f,Ue=B;for(lt=M;;){if(lt>>>0<=Ue>>>0){et=0;break}if(B=lt+-4|0,!(n[B>>2]|0))lt=B;else{et=1;break}}f=0-Q|0;do if(Qe)if(B=((Xe^1)&1)+k|0,(B|0)>(Q|0)&(Q|0)>-5?(O=m+-1|0,k=B+-1-Q|0):(O=m+-2|0,k=B+-1|0),B=d&8,B)Me=B;else{if(et&&(Lt=n[lt+-4>>2]|0,(Lt|0)!=0))if((Lt>>>0)%10|0)M=0;else{M=0,B=10;do B=B*10|0,M=M+1|0;while(!((Lt>>>0)%(B>>>0)|0|0))}else M=9;if(B=((lt-Ge>>2)*9|0)+-9|0,(O|32|0)==102){Me=B-M|0,Me=(Me|0)>0?Me:0,k=(k|0)<(Me|0)?k:Me,Me=0;break}else{Me=B+Q-M|0,Me=(Me|0)>0?Me:0,k=(k|0)<(Me|0)?k:Me,Me=0;break}}else O=m,Me=d&8;while(0);if(Qe=k|Me,G=(Qe|0)!=0&1,se=(O|32|0)==102,se)Xe=0,B=(Q|0)>0?Q:0;else{if(B=(Q|0)<0?f:Q,B=Jm(B,((B|0)<0)<<31>>31,Sr)|0,M=Sr,(M-B|0)<2)do B=B+-1|0,o[B>>0]=48;while((M-B|0)<2);o[B+-1>>0]=(Q>>31&2)+43,B=B+-2|0,o[B>>0]=O,Xe=B,B=M-B|0}if(B=or+1+k+G+B|0,Bs(s,32,c,B,d),ss(s,Mr,or),Bs(s,48,c,B,d^65536),se){O=Ue>>>0>Xt>>>0?Xt:Ue,Me=ir+9|0,G=Me,se=ir+8|0,M=O;do{if(Q=Jm(n[M>>2]|0,0,Me)|0,(M|0)==(O|0))(Q|0)==(Me|0)&&(o[se>>0]=48,Q=se);else if(Q>>>0>ir>>>0){Xm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}ss(s,Q,G-Q|0),M=M+4|0}while(M>>>0<=Xt>>>0);if(Qe|0&&ss(s,5710,1),M>>>0>>0&(k|0)>0)for(;;){if(Q=Jm(n[M>>2]|0,0,Me)|0,Q>>>0>ir>>>0){Xm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}if(ss(s,Q,(k|0)<9?k:9),M=M+4|0,Q=k+-9|0,M>>>0>>0&(k|0)>9)k=Q;else{k=Q;break}}Bs(s,48,k+9|0,9,0)}else{if(Qe=et?lt:Ue+4|0,(k|0)>-1){et=ir+9|0,Me=(Me|0)==0,f=et,G=0-Nr|0,se=ir+8|0,O=Ue;do{Q=Jm(n[O>>2]|0,0,et)|0,(Q|0)==(et|0)&&(o[se>>0]=48,Q=se);do if((O|0)==(Ue|0)){if(M=Q+1|0,ss(s,Q,1),Me&(k|0)<1){Q=M;break}ss(s,5710,1),Q=M}else{if(Q>>>0<=ir>>>0)break;Xm(ir|0,48,Q+G|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}while(0);Nr=f-Q|0,ss(s,Q,(k|0)>(Nr|0)?Nr:k),k=k-Nr|0,O=O+4|0}while(O>>>0>>0&(k|0)>-1)}Bs(s,48,k+18|0,18,0),ss(s,Xe,Sr-Xe|0)}Bs(s,32,c,B,d^8192)}else ir=(m&32|0)!=0,B=or+3|0,Bs(s,32,c,B,d&-65537),ss(s,Mr,or),ss(s,l!=l|!1?ir?5686:5690:ir?5678:5682,3),Bs(s,32,c,B,d^8192);while(0);return C=xn,((B|0)<(c|0)?c:B)|0}function l7(s){s=+s;var l=0;return E[v>>3]=s,l=n[v>>2]|0,Se=n[v+4>>2]|0,l|0}function UUe(s,l){return s=+s,l=l|0,+ +c7(s,l)}function c7(s,l){s=+s,l=l|0;var c=0,f=0,d=0;switch(E[v>>3]=s,c=n[v>>2]|0,f=n[v+4>>2]|0,d=mD(c|0,f|0,52)|0,d&2047){case 0:{s!=0?(s=+c7(s*18446744073709552e3,l),c=(n[l>>2]|0)+-64|0):c=0,n[l>>2]=c;break}case 2047:break;default:n[l>>2]=(d&2047)+-1022,n[v>>2]=c,n[v+4>>2]=f&-2146435073|1071644672,s=+E[v>>3]}return+s}function _Ue(s,l,c){s=s|0,l=l|0,c=c|0;do if(s){if(l>>>0<128){o[s>>0]=l,s=1;break}if(!(n[n[(HUe()|0)+188>>2]>>2]|0))if((l&-128|0)==57216){o[s>>0]=l,s=1;break}else{n[(Vm()|0)>>2]=84,s=-1;break}if(l>>>0<2048){o[s>>0]=l>>>6|192,o[s+1>>0]=l&63|128,s=2;break}if(l>>>0<55296|(l&-8192|0)==57344){o[s>>0]=l>>>12|224,o[s+1>>0]=l>>>6&63|128,o[s+2>>0]=l&63|128,s=3;break}if((l+-65536|0)>>>0<1048576){o[s>>0]=l>>>18|240,o[s+1>>0]=l>>>12&63|128,o[s+2>>0]=l>>>6&63|128,o[s+3>>0]=l&63|128,s=4;break}else{n[(Vm()|0)>>2]=84,s=-1;break}}else s=1;while(0);return s|0}function HUe(){return SR()|0}function jUe(){return SR()|0}function GUe(s,l){s=s|0,l=l|0;var c=0,f=0;for(f=0;;){if((u[5712+f>>0]|0)==(s|0)){s=2;break}if(c=f+1|0,(c|0)==87){c=5800,f=87,s=5;break}else f=c}if((s|0)==2&&(f?(c=5800,s=5):c=5800),(s|0)==5)for(;;){do s=c,c=c+1|0;while((o[s>>0]|0)!=0);if(f=f+-1|0,f)s=5;else break}return qUe(c,n[l+20>>2]|0)|0}function qUe(s,l){return s=s|0,l=l|0,YUe(s,l)|0}function YUe(s,l){return s=s|0,l=l|0,l?l=WUe(n[l>>2]|0,n[l+4>>2]|0,s)|0:l=0,(l|0?l:s)|0}function WUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0;se=(n[s>>2]|0)+1794895138|0,m=Rg(n[s+8>>2]|0,se)|0,f=Rg(n[s+12>>2]|0,se)|0,d=Rg(n[s+16>>2]|0,se)|0;e:do if(m>>>0>>2>>>0&&(G=l-(m<<2)|0,f>>>0>>0&d>>>0>>0)&&((d|f)&3|0)==0){for(G=f>>>2,O=d>>>2,M=0;;){if(k=m>>>1,Q=M+k|0,B=Q<<1,d=B+G|0,f=Rg(n[s+(d<<2)>>2]|0,se)|0,d=Rg(n[s+(d+1<<2)>>2]|0,se)|0,!(d>>>0>>0&f>>>0<(l-d|0)>>>0)){f=0;break e}if(o[s+(d+f)>>0]|0){f=0;break e}if(f=n7(c,s+d|0)|0,!f)break;if(f=(f|0)<0,(m|0)==1){f=0;break e}else M=f?M:Q,m=f?k:m-k|0}f=B+O|0,d=Rg(n[s+(f<<2)>>2]|0,se)|0,f=Rg(n[s+(f+1<<2)>>2]|0,se)|0,f>>>0>>0&d>>>0<(l-f|0)>>>0?f=(o[s+(f+d)>>0]|0)==0?s+f|0:0:f=0}else f=0;while(0);return f|0}function Rg(s,l){s=s|0,l=l|0;var c=0;return c=m7(s|0)|0,((l|0)==0?s:c)|0}function KUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=c+16|0,d=n[f>>2]|0,d?m=5:VUe(c)|0?f=0:(d=n[f>>2]|0,m=5);e:do if((m|0)==5){if(k=c+20|0,B=n[k>>2]|0,f=B,(d-B|0)>>>0>>0){f=ED[n[c+36>>2]&7](c,s,l)|0;break}t:do if((o[c+75>>0]|0)>-1){for(B=l;;){if(!B){m=0,d=s;break t}if(d=B+-1|0,(o[s+d>>0]|0)==10)break;B=d}if(f=ED[n[c+36>>2]&7](c,s,B)|0,f>>>0>>0)break e;m=B,d=s+B|0,l=l-B|0,f=n[k>>2]|0}else m=0,d=s;while(0);Dr(f|0,d|0,l|0)|0,n[k>>2]=(n[k>>2]|0)+l,f=m+l|0}while(0);return f|0}function VUe(s){s=s|0;var l=0,c=0;return l=s+74|0,c=o[l>>0]|0,o[l>>0]=c+255|c,l=n[s>>2]|0,l&8?(n[s>>2]=l|32,s=-1):(n[s+8>>2]=0,n[s+4>>2]=0,c=n[s+44>>2]|0,n[s+28>>2]=c,n[s+20>>2]=c,n[s+16>>2]=c+(n[s+48>>2]|0),s=0),s|0}function _n(s,l){s=y(s),l=y(l);var c=0,f=0;c=u7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=u7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?l:s;break}else{s=s>2]=s,n[v>>2]|0|0}function Tg(s,l){s=y(s),l=y(l);var c=0,f=0;c=A7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=A7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?s:l;break}else{s=s>2]=s,n[v>>2]|0|0}function bR(s,l){s=y(s),l=y(l);var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,M=0;m=(h[v>>2]=s,n[v>>2]|0),k=(h[v>>2]=l,n[v>>2]|0),c=m>>>23&255,B=k>>>23&255,Q=m&-2147483648,d=k<<1;e:do if((d|0)!=0&&!((c|0)==255|((JUe(l)|0)&2147483647)>>>0>2139095040)){if(f=m<<1,f>>>0<=d>>>0)return l=y(s*y(0)),y((f|0)==(d|0)?l:s);if(c)f=m&8388607|8388608;else{if(c=m<<9,(c|0)>-1){f=c,c=0;do c=c+-1|0,f=f<<1;while((f|0)>-1)}else c=0;f=m<<1-c}if(B)k=k&8388607|8388608;else{if(m=k<<9,(m|0)>-1){d=0;do d=d+-1|0,m=m<<1;while((m|0)>-1)}else d=0;B=d,k=k<<1-d}d=f-k|0,m=(d|0)>-1;t:do if((c|0)>(B|0)){for(;;){if(m)if(d)f=d;else break;if(f=f<<1,c=c+-1|0,d=f-k|0,m=(d|0)>-1,(c|0)<=(B|0))break t}l=y(s*y(0));break e}while(0);if(m)if(d)f=d;else{l=y(s*y(0));break}if(f>>>0<8388608)do f=f<<1,c=c+-1|0;while(f>>>0<8388608);(c|0)>0?c=f+-8388608|c<<23:c=f>>>(1-c|0),l=(n[v>>2]=c|Q,y(h[v>>2]))}else M=3;while(0);return(M|0)==3&&(l=y(s*l),l=y(l/l)),y(l)}function JUe(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function zUe(s,l){return s=s|0,l=l|0,i7(n[582]|0,s,l)|0}function zr(s){s=s|0,Rt()}function zm(s){s=s|0}function XUe(s,l){return s=s|0,l=l|0,0}function ZUe(s){return s=s|0,(f7(s+4|0)|0)==-1?(tf[n[(n[s>>2]|0)+8>>2]&127](s),s=1):s=0,s|0}function f7(s){s=s|0;var l=0;return l=n[s>>2]|0,n[s>>2]=l+-1,l+-1|0}function kp(s){s=s|0,ZUe(s)|0&&$Ue(s)}function $Ue(s){s=s|0;var l=0;l=s+8|0,(n[l>>2]|0)!=0&&(f7(l)|0)!=-1||tf[n[(n[s>>2]|0)+16>>2]&127](s)}function Kt(s){s=s|0;var l=0;for(l=(s|0)==0?1:s;s=pD(l)|0,!(s|0);){if(s=t3e()|0,!s){s=0;break}P7[s&0]()}return s|0}function p7(s){return s=s|0,Kt(s)|0}function gt(s){s=s|0,hD(s)}function e3e(s){s=s|0,(o[s+11>>0]|0)<0&>(n[s>>2]|0)}function t3e(){var s=0;return s=n[2923]|0,n[2923]=s+0,s|0}function r3e(){}function dD(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,f=l-f-(c>>>0>s>>>0|0)>>>0,Se=f,s-c>>>0|0|0}function xR(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,c=s+c>>>0,Se=l+f+(c>>>0>>0|0)>>>0,c|0|0}function Xm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(m=s+c|0,l=l&255,(c|0)>=67){for(;s&3;)o[s>>0]=l,s=s+1|0;for(f=m&-4|0,d=f-64|0,B=l|l<<8|l<<16|l<<24;(s|0)<=(d|0);)n[s>>2]=B,n[s+4>>2]=B,n[s+8>>2]=B,n[s+12>>2]=B,n[s+16>>2]=B,n[s+20>>2]=B,n[s+24>>2]=B,n[s+28>>2]=B,n[s+32>>2]=B,n[s+36>>2]=B,n[s+40>>2]=B,n[s+44>>2]=B,n[s+48>>2]=B,n[s+52>>2]=B,n[s+56>>2]=B,n[s+60>>2]=B,s=s+64|0;for(;(s|0)<(f|0);)n[s>>2]=B,s=s+4|0}for(;(s|0)<(m|0);)o[s>>0]=l,s=s+1|0;return m-c|0}function h7(s,l,c){return s=s|0,l=l|0,c=c|0,(c|0)<32?(Se=l<>>32-c,s<>>c,s>>>c|(l&(1<>>c-32|0)}function Dr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;if((c|0)>=8192)return Ac(s|0,l|0,c|0)|0;if(m=s|0,d=s+c|0,(s&3)==(l&3)){for(;s&3;){if(!c)return m|0;o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0,c=c-1|0}for(c=d&-4|0,f=c-64|0;(s|0)<=(f|0);)n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2],n[s+16>>2]=n[l+16>>2],n[s+20>>2]=n[l+20>>2],n[s+24>>2]=n[l+24>>2],n[s+28>>2]=n[l+28>>2],n[s+32>>2]=n[l+32>>2],n[s+36>>2]=n[l+36>>2],n[s+40>>2]=n[l+40>>2],n[s+44>>2]=n[l+44>>2],n[s+48>>2]=n[l+48>>2],n[s+52>>2]=n[l+52>>2],n[s+56>>2]=n[l+56>>2],n[s+60>>2]=n[l+60>>2],s=s+64|0,l=l+64|0;for(;(s|0)<(c|0);)n[s>>2]=n[l>>2],s=s+4|0,l=l+4|0}else for(c=d-4|0;(s|0)<(c|0);)o[s>>0]=o[l>>0]|0,o[s+1>>0]=o[l+1>>0]|0,o[s+2>>0]=o[l+2>>0]|0,o[s+3>>0]=o[l+3>>0]|0,s=s+4|0,l=l+4|0;for(;(s|0)<(d|0);)o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0;return m|0}function g7(s){s=s|0;var l=0;return l=o[L+(s&255)>>0]|0,(l|0)<8?l|0:(l=o[L+(s>>8&255)>>0]|0,(l|0)<8?l+8|0:(l=o[L+(s>>16&255)>>0]|0,(l|0)<8?l+16|0:(o[L+(s>>>24)>>0]|0)+24|0))}function d7(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,M=0,O=0,G=0,se=0,qe=0,Me=0;if(O=s,Q=l,M=Q,B=c,se=f,k=se,!M)return m=(d|0)!=0,k?m?(n[d>>2]=s|0,n[d+4>>2]=l&0,se=0,d=0,Se=se,d|0):(se=0,d=0,Se=se,d|0):(m&&(n[d>>2]=(O>>>0)%(B>>>0),n[d+4>>2]=0),se=0,d=(O>>>0)/(B>>>0)>>>0,Se=se,d|0);m=(k|0)==0;do if(B){if(!m){if(m=(P(k|0)|0)-(P(M|0)|0)|0,m>>>0<=31){G=m+1|0,k=31-m|0,l=m-31>>31,B=G,s=O>>>(G>>>0)&l|M<>>(G>>>0)&l,m=0,k=O<>2]=s|0,n[d+4>>2]=Q|l&0,se=0,d=0,Se=se,d|0):(se=0,d=0,Se=se,d|0)}if(m=B-1|0,m&B|0){k=(P(B|0)|0)+33-(P(M|0)|0)|0,Me=64-k|0,G=32-k|0,Q=G>>31,qe=k-32|0,l=qe>>31,B=k,s=G-1>>31&M>>>(qe>>>0)|(M<>>(k>>>0))&l,l=l&M>>>(k>>>0),m=O<>>(qe>>>0))&Q|O<>31;break}return d|0&&(n[d>>2]=m&O,n[d+4>>2]=0),(B|0)==1?(qe=Q|l&0,Me=s|0|0,Se=qe,Me|0):(Me=g7(B|0)|0,qe=M>>>(Me>>>0)|0,Me=M<<32-Me|O>>>(Me>>>0)|0,Se=qe,Me|0)}else{if(m)return d|0&&(n[d>>2]=(M>>>0)%(B>>>0),n[d+4>>2]=0),qe=0,Me=(M>>>0)/(B>>>0)>>>0,Se=qe,Me|0;if(!O)return d|0&&(n[d>>2]=0,n[d+4>>2]=(M>>>0)%(k>>>0)),qe=0,Me=(M>>>0)/(k>>>0)>>>0,Se=qe,Me|0;if(m=k-1|0,!(m&k))return d|0&&(n[d>>2]=s|0,n[d+4>>2]=m&M|l&0),qe=0,Me=M>>>((g7(k|0)|0)>>>0),Se=qe,Me|0;if(m=(P(k|0)|0)-(P(M|0)|0)|0,m>>>0<=30){l=m+1|0,k=31-m|0,B=l,s=M<>>(l>>>0),l=M>>>(l>>>0),m=0,k=O<>2]=s|0,n[d+4>>2]=Q|l&0,qe=0,Me=0,Se=qe,Me|0):(qe=0,Me=0,Se=qe,Me|0)}while(0);if(!B)M=k,Q=0,k=0;else{G=c|0|0,O=se|f&0,M=xR(G|0,O|0,-1,-1)|0,c=Se,Q=k,k=0;do f=Q,Q=m>>>31|Q<<1,m=k|m<<1,f=s<<1|f>>>31|0,se=s>>>31|l<<1|0,dD(M|0,c|0,f|0,se|0)|0,Me=Se,qe=Me>>31|((Me|0)<0?-1:0)<<1,k=qe&1,s=dD(f|0,se|0,qe&G|0,(((Me|0)<0?-1:0)>>31|((Me|0)<0?-1:0)<<1)&O|0)|0,l=Se,B=B-1|0;while((B|0)!=0);M=Q,Q=0}return B=0,d|0&&(n[d>>2]=s,n[d+4>>2]=l),qe=(m|0)>>>31|(M|B)<<1|(B<<1|m>>>31)&0|Q,Me=(m<<1|0>>>31)&-2|k,Se=qe,Me|0}function kR(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,d7(s,l,c,f,0)|0}function Qp(s){s=s|0;var l=0,c=0;return c=s+15&-16|0,l=n[I>>2]|0,s=l+c|0,(c|0)>0&(s|0)<(l|0)|(s|0)<0?(ie()|0,DA(12),-1):(n[I>>2]=s,(s|0)>(Z()|0)&&(X()|0)==0?(n[I>>2]=l,DA(12),-1):l|0)}function Mw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if((l|0)<(s|0)&(s|0)<(l+c|0)){for(f=s,l=l+c|0,s=s+c|0;(c|0)>0;)s=s-1|0,l=l-1|0,c=c-1|0,o[s>>0]=o[l>>0]|0;s=f}else Dr(s,l,c)|0;return s|0}function QR(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;return m=C,C=C+16|0,d=m|0,d7(s,l,c,f,d)|0,C=m,Se=n[d+4>>2]|0,n[d>>2]|0|0}function m7(s){return s=s|0,(s&255)<<24|(s>>8&255)<<16|(s>>16&255)<<8|s>>>24|0}function n3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,y7[s&1](l|0,c|0,f|0,d|0,m|0)}function i3e(s,l,c){s=s|0,l=l|0,c=y(c),E7[s&1](l|0,y(c))}function s3e(s,l,c){s=s|0,l=l|0,c=+c,C7[s&31](l|0,+c)}function o3e(s,l,c,f){return s=s|0,l=l|0,c=y(c),f=y(f),y(w7[s&0](l|0,y(c),y(f)))}function a3e(s,l){s=s|0,l=l|0,tf[s&127](l|0)}function l3e(s,l,c){s=s|0,l=l|0,c=c|0,rf[s&31](l|0,c|0)}function c3e(s,l){return s=s|0,l=l|0,Lg[s&31](l|0)|0}function u3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,I7[s&1](l|0,+c,+f,d|0)}function A3e(s,l,c,f){s=s|0,l=l|0,c=+c,f=+f,Y3e[s&1](l|0,+c,+f)}function f3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,ED[s&7](l|0,c|0,f|0)|0}function p3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,+W3e[s&1](l|0,c|0,f|0)}function h3e(s,l){return s=s|0,l=l|0,+B7[s&15](l|0)}function g3e(s,l,c){return s=s|0,l=l|0,c=+c,K3e[s&1](l|0,+c)|0}function d3e(s,l,c){return s=s|0,l=l|0,c=c|0,RR[s&15](l|0,c|0)|0}function m3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=+f,d=+d,m=m|0,V3e[s&1](l|0,c|0,+f,+d,m|0)}function y3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,J3e[s&1](l|0,c|0,f|0,d|0,m|0,B|0)}function E3e(s,l,c){return s=s|0,l=l|0,c=c|0,+v7[s&7](l|0,c|0)}function C3e(s){return s=s|0,CD[s&7]()|0}function w3e(s,l,c,f,d,m){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,D7[s&1](l|0,c|0,f|0,d|0,m|0)|0}function I3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=+d,z3e[s&1](l|0,c|0,f|0,+d)}function B3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,S7[s&1](l|0,c|0,y(f),d|0,y(m),B|0)}function v3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,Hw[s&15](l|0,c|0,f|0)}function D3e(s){s=s|0,P7[s&0]()}function S3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,b7[s&15](l|0,c|0,+f)}function P3e(s,l,c){return s=s|0,l=+l,c=+c,X3e[s&1](+l,+c)|0}function b3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,TR[s&15](l|0,c|0,f|0,d|0)}function x3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(0)}function k3e(s,l){s=s|0,l=y(l),F(1)}function ma(s,l){s=s|0,l=+l,F(2)}function Q3e(s,l,c){return s=s|0,l=y(l),c=y(c),F(3),Ze}function Er(s){s=s|0,F(4)}function Uw(s,l){s=s|0,l=l|0,F(5)}function Ja(s){return s=s|0,F(6),0}function F3e(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,F(7)}function R3e(s,l,c){s=s|0,l=+l,c=+c,F(8)}function T3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(9),0}function N3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(10),0}function Ng(s){return s=s|0,F(11),0}function L3e(s,l){return s=s|0,l=+l,F(12),0}function _w(s,l){return s=s|0,l=l|0,F(13),0}function O3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,F(14)}function M3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,F(15)}function FR(s,l){return s=s|0,l=l|0,F(16),0}function U3e(){return F(17),0}function _3e(s,l,c,f,d){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(18),0}function H3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,F(19)}function j3e(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0,F(20)}function yD(s,l,c){s=s|0,l=l|0,c=c|0,F(21)}function G3e(){F(22)}function Zm(s,l,c){s=s|0,l=l|0,c=+c,F(23)}function q3e(s,l){return s=+s,l=+l,F(24),0}function $m(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,F(25)}var y7=[x3e,_Le],E7=[k3e,fo],C7=[ma,xw,kw,EF,CF,Dl,Qw,wF,jm,bu,Rw,IF,$v,KA,eD,Gm,tD,rD,qm,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma],w7=[Q3e],tf=[Er,zm,CDe,wDe,IDe,Xbe,Zbe,$be,gNe,dNe,mNe,PLe,bLe,xLe,J4e,z4e,X4e,hs,Vv,Hm,WA,Fw,dve,mve,uDe,kDe,jDe,oSe,ISe,USe,rPe,mPe,FPe,VPe,ube,Sbe,jbe,dxe,Fxe,Vxe,uke,Ske,jke,aQe,IQe,LQe,ZQe,Pc,xFe,YFe,uRe,bRe,GRe,uTe,CTe,BTe,_Te,GTe,oNe,ENe,INe,UNe,nLe,i9,MOe,gMe,kMe,YMe,p4e,b4e,U4e,j4e,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er],rf=[Uw,fF,pF,bw,Pu,hF,gF,Bp,dF,mF,yF,Zv,VA,Ve,ft,Wt,vr,Pn,Fr,vF,nve,Sve,AQe,DQe,FRe,HOe,ALe,j5,Uw,Uw,Uw,Uw],Lg=[Ja,SUe,AF,D,Ae,De,vt,wt,xt,_r,di,po,eve,tve,yve,tFe,KRe,jNe,YOe,Wa,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja],I7=[F3e,Eve],Y3e=[R3e,cNe],ED=[T3e,r7,PUe,kUe,GSe,Cxe,RFe,JMe],W3e=[N3e,hbe],B7=[Ng,Yo,rt,bn,Cve,wve,Ive,Bve,vve,Dve,Ng,Ng,Ng,Ng,Ng,Ng],K3e=[L3e,mTe],RR=[_w,XUe,rve,hDe,uSe,sPe,CPe,Wbe,Lxe,_Qe,Wv,TMe,_w,_w,_w,_w],V3e=[O3e,WDe],J3e=[M3e,m4e],v7=[FR,ai,Pve,bve,xve,kbe,FR,FR],CD=[U3e,kve,Sw,ga,PTe,KTe,SNe,W4e],D7=[_3e,Cw],z3e=[H3e,hke],S7=[j3e,ive],Hw=[yD,T,is,tn,ho,SSe,NPe,kke,Wke,_m,cOe,EMe,F4e,yD,yD,yD],P7=[G3e],b7=[Zm,Jv,zv,Xv,YA,nD,BF,S,Zxe,JFe,pTe,Zm,Zm,Zm,Zm,Zm],X3e=[q3e,pNe],TR=[$m,ZPe,cFe,hRe,rTe,RTe,$Te,RNe,lLe,XOe,nUe,$m,$m,$m,$m,$m];return{_llvm_bswap_i32:m7,dynCall_idd:P3e,dynCall_i:C3e,_i64Subtract:dD,___udivdi3:kR,dynCall_vif:i3e,setThrew:hu,dynCall_viii:v3e,_bitshift64Lshr:mD,_bitshift64Shl:h7,dynCall_vi:a3e,dynCall_viiddi:m3e,dynCall_diii:p3e,dynCall_iii:d3e,_memset:Xm,_sbrk:Qp,_memcpy:Dr,__GLOBAL__sub_I_Yoga_cpp:Um,dynCall_vii:l3e,___uremdi3:QR,dynCall_vid:s3e,stackAlloc:lo,_nbind_init:hUe,getTempRet0:Ua,dynCall_di:h3e,dynCall_iid:g3e,setTempRet0:xA,_i64Add:xR,dynCall_fiff:o3e,dynCall_iiii:f3e,_emscripten_get_global_libc:DUe,dynCall_viid:S3e,dynCall_viiid:I3e,dynCall_viififi:B3e,dynCall_ii:c3e,__GLOBAL__sub_I_Binding_cc:kOe,dynCall_viiii:b3e,dynCall_iiiiii:w3e,stackSave:gc,dynCall_viiiii:n3e,__GLOBAL__sub_I_nbind_cc:Qve,dynCall_vidd:A3e,_free:hD,runPostSets:r3e,dynCall_viiiiii:y3e,establishStackSpace:ji,_memmove:Mw,stackRestore:pu,_malloc:pD,__GLOBAL__sub_I_common_cc:zNe,dynCall_viddi:u3e,dynCall_dii:E3e,dynCall_v:D3e}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function t(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=t)},Module.callMain=Module.callMain=function t(e){e=e||[],ensureInitRuntime();var r=e.length+1;function o(){for(var p=0;p<4-1;p++)a.push(0)}var a=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];o();for(var n=0;n0||(preRun(),runDependencies>0)||Module.calledRun)return;function e(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(t),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),e()},1)):e()}Module.run=Module.run=run;function exit(t,e){e&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=t,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(t)),ENVIRONMENT_IS_NODE&&process.exit(t),Module.quit(t,new ExitStatus(t)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(t){Module.onAbort&&Module.onAbort(t),t!==void 0?(Module.print(t),Module.printErr(t),t=JSON.stringify(t)):t="",ABORT=!0,EXITSTATUS=1;var e=` +If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,r="abort("+t+") at "+stackTrace()+e;throw abortDecorators&&abortDecorators.forEach(function(o){r=o(r,t)}),r}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var am=_((wKt,NEe)=>{"use strict";var qyt=REe(),Yyt=TEe(),x6=!1,k6=null;Yyt({},function(t,e){if(!x6){if(x6=!0,t)throw t;k6=e}});if(!x6)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");NEe.exports=qyt(k6.bind,k6.lib)});var F6=_((IKt,Q6)=>{"use strict";var LEe=t=>Number.isNaN(t)?!1:t>=4352&&(t<=4447||t===9001||t===9002||11904<=t&&t<=12871&&t!==12351||12880<=t&&t<=19903||19968<=t&&t<=42182||43360<=t&&t<=43388||44032<=t&&t<=55203||63744<=t&&t<=64255||65040<=t&&t<=65049||65072<=t&&t<=65131||65281<=t&&t<=65376||65504<=t&&t<=65510||110592<=t&&t<=110593||127488<=t&&t<=127569||131072<=t&&t<=262141);Q6.exports=LEe;Q6.exports.default=LEe});var MEe=_((BKt,OEe)=>{"use strict";OEe.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var Kk=_((vKt,R6)=>{"use strict";var Wyt=OS(),Kyt=F6(),Vyt=MEe(),UEe=t=>{if(typeof t!="string"||t.length===0||(t=Wyt(t),t.length===0))return 0;t=t.replace(Vyt()," ");let e=0;for(let r=0;r=127&&o<=159||o>=768&&o<=879||(o>65535&&r++,e+=Kyt(o)?2:1)}return e};R6.exports=UEe;R6.exports.default=UEe});var N6=_((DKt,T6)=>{"use strict";var Jyt=Kk(),_Ee=t=>{let e=0;for(let r of t.split(` +`))e=Math.max(e,Jyt(r));return e};T6.exports=_Ee;T6.exports.default=_Ee});var HEe=_(cB=>{"use strict";var zyt=cB&&cB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(cB,"__esModule",{value:!0});var Xyt=zyt(N6()),L6={};cB.default=t=>{if(t.length===0)return{width:0,height:0};if(L6[t])return L6[t];let e=Xyt.default(t),r=t.split(` +`).length;return L6[t]={width:e,height:r},{width:e,height:r}}});var jEe=_(uB=>{"use strict";var Zyt=uB&&uB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(uB,"__esModule",{value:!0});var dn=Zyt(am()),$yt=(t,e)=>{"position"in e&&t.setPositionType(e.position==="absolute"?dn.default.POSITION_TYPE_ABSOLUTE:dn.default.POSITION_TYPE_RELATIVE)},eEt=(t,e)=>{"marginLeft"in e&&t.setMargin(dn.default.EDGE_START,e.marginLeft||0),"marginRight"in e&&t.setMargin(dn.default.EDGE_END,e.marginRight||0),"marginTop"in e&&t.setMargin(dn.default.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&t.setMargin(dn.default.EDGE_BOTTOM,e.marginBottom||0)},tEt=(t,e)=>{"paddingLeft"in e&&t.setPadding(dn.default.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&t.setPadding(dn.default.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&t.setPadding(dn.default.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&t.setPadding(dn.default.EDGE_BOTTOM,e.paddingBottom||0)},rEt=(t,e)=>{var r;"flexGrow"in e&&t.setFlexGrow((r=e.flexGrow)!==null&&r!==void 0?r:0),"flexShrink"in e&&t.setFlexShrink(typeof e.flexShrink=="number"?e.flexShrink:1),"flexDirection"in e&&(e.flexDirection==="row"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in e&&(typeof e.flexBasis=="number"?t.setFlexBasis(e.flexBasis):typeof e.flexBasis=="string"?t.setFlexBasisPercent(Number.parseInt(e.flexBasis,10)):t.setFlexBasis(NaN)),"alignItems"in e&&((e.alignItems==="stretch"||!e.alignItems)&&t.setAlignItems(dn.default.ALIGN_STRETCH),e.alignItems==="flex-start"&&t.setAlignItems(dn.default.ALIGN_FLEX_START),e.alignItems==="center"&&t.setAlignItems(dn.default.ALIGN_CENTER),e.alignItems==="flex-end"&&t.setAlignItems(dn.default.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&t.setAlignSelf(dn.default.ALIGN_AUTO),e.alignSelf==="flex-start"&&t.setAlignSelf(dn.default.ALIGN_FLEX_START),e.alignSelf==="center"&&t.setAlignSelf(dn.default.ALIGN_CENTER),e.alignSelf==="flex-end"&&t.setAlignSelf(dn.default.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_START),e.justifyContent==="center"&&t.setJustifyContent(dn.default.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_AROUND))},nEt=(t,e)=>{var r,o;"width"in e&&(typeof e.width=="number"?t.setWidth(e.width):typeof e.width=="string"?t.setWidthPercent(Number.parseInt(e.width,10)):t.setWidthAuto()),"height"in e&&(typeof e.height=="number"?t.setHeight(e.height):typeof e.height=="string"?t.setHeightPercent(Number.parseInt(e.height,10)):t.setHeightAuto()),"minWidth"in e&&(typeof e.minWidth=="string"?t.setMinWidthPercent(Number.parseInt(e.minWidth,10)):t.setMinWidth((r=e.minWidth)!==null&&r!==void 0?r:0)),"minHeight"in e&&(typeof e.minHeight=="string"?t.setMinHeightPercent(Number.parseInt(e.minHeight,10)):t.setMinHeight((o=e.minHeight)!==null&&o!==void 0?o:0))},iEt=(t,e)=>{"display"in e&&t.setDisplay(e.display==="flex"?dn.default.DISPLAY_FLEX:dn.default.DISPLAY_NONE)},sEt=(t,e)=>{if("borderStyle"in e){let r=typeof e.borderStyle=="string"?1:0;t.setBorder(dn.default.EDGE_TOP,r),t.setBorder(dn.default.EDGE_BOTTOM,r),t.setBorder(dn.default.EDGE_LEFT,r),t.setBorder(dn.default.EDGE_RIGHT,r)}};uB.default=(t,e={})=>{$yt(t,e),eEt(t,e),tEt(t,e),rEt(t,e),nEt(t,e),iEt(t,e),sEt(t,e)}});var YEe=_((bKt,qEe)=>{"use strict";var AB=Kk(),oEt=OS(),aEt=DI(),M6=new Set(["\x1B","\x9B"]),lEt=39,GEe=t=>`${M6.values().next().value}[${t}m`,cEt=t=>t.split(" ").map(e=>AB(e)),O6=(t,e,r)=>{let o=[...e],a=!1,n=AB(oEt(t[t.length-1]));for(let[u,A]of o.entries()){let p=AB(A);if(n+p<=r?t[t.length-1]+=A:(t.push(A),n=0),M6.has(A))a=!0;else if(a&&A==="m"){a=!1;continue}a||(n+=p,n===r&&u0&&t.length>1&&(t[t.length-2]+=t.pop())},uEt=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(AB(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},AEt=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",a="",n,u=cEt(t),A=[""];for(let[p,h]of t.split(" ").entries()){r.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let E=AB(A[A.length-1]);if(p!==0&&(E>=e&&(r.wordWrap===!1||r.trim===!1)&&(A.push(""),E=0),(E>0||r.trim===!1)&&(A[A.length-1]+=" ",E++)),r.hard&&u[p]>e){let I=e-E,v=1+Math.floor((u[p]-I-1)/e);Math.floor((u[p]-1)/e)e&&E>0&&u[p]>0){if(r.wordWrap===!1&&Ee&&r.wordWrap===!1){O6(A,h,e);continue}A[A.length-1]+=h}r.trim!==!1&&(A=A.map(uEt)),o=A.join(` +`);for(let[p,h]of[...o].entries()){if(a+=h,M6.has(h)){let I=parseFloat(/\d[^m]*/.exec(o.slice(p,p+4)));n=I===lEt?null:I}let E=aEt.codes.get(Number(n));n&&E&&(o[p+1]===` +`?a+=GEe(E):h===` +`&&(a+=GEe(n)))}return a};qEe.exports=(t,e,r)=>String(t).normalize().replace(/\r\n/g,` +`).split(` +`).map(o=>AEt(o,e,r)).join(` +`)});var VEe=_((xKt,KEe)=>{"use strict";var WEe="[\uD800-\uDBFF][\uDC00-\uDFFF]",fEt=t=>t&&t.exact?new RegExp(`^${WEe}$`):new RegExp(WEe,"g");KEe.exports=fEt});var U6=_((kKt,ZEe)=>{"use strict";var pEt=F6(),hEt=VEe(),JEe=DI(),XEe=["\x1B","\x9B"],Vk=t=>`${XEe[0]}[${t}m`,zEe=(t,e,r)=>{let o=[];t=[...t];for(let a of t){let n=a;a.match(";")&&(a=a.split(";")[0][0]+"0");let u=JEe.codes.get(parseInt(a,10));if(u){let A=t.indexOf(u.toString());A>=0?t.splice(A,1):o.push(Vk(e?u:n))}else if(e){o.push(Vk(0));break}else o.push(Vk(n))}if(e&&(o=o.filter((a,n)=>o.indexOf(a)===n),r!==void 0)){let a=Vk(JEe.codes.get(parseInt(r,10)));o=o.reduce((n,u)=>u===a?[u,...n]:[...n,u],[])}return o.join("")};ZEe.exports=(t,e,r)=>{let o=[...t.normalize()],a=[];r=typeof r=="number"?r:o.length;let n=!1,u,A=0,p="";for(let[h,E]of o.entries()){let I=!1;if(XEe.includes(E)){let v=/\d[^m]*/.exec(t.slice(h,h+18));u=v&&v.length>0?v[0]:void 0,Ae&&A<=r)p+=E;else if(A===e&&!n&&u!==void 0)p=zEe(a);else if(A>=r){p+=zEe(a,!0,u);break}}return p}});var eCe=_((QKt,$Ee)=>{"use strict";var E0=U6(),gEt=Kk();function Jk(t,e,r){if(t.charAt(e)===" ")return e;for(let o=1;o<=3;o++)if(r){if(t.charAt(e+o)===" ")return e+o}else if(t.charAt(e-o)===" ")return e-o;return e}$Ee.exports=(t,e,r)=>{r={position:"end",preferTruncationOnSpace:!1,...r};let{position:o,space:a,preferTruncationOnSpace:n}=r,u="\u2026",A=1;if(typeof t!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof t}`);if(typeof e!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof e}`);if(e<1)return"";if(e===1)return u;let p=gEt(t);if(p<=e)return t;if(o==="start"){if(n){let h=Jk(t,p-e+1,!0);return u+E0(t,h,p).trim()}return a===!0&&(u+=" ",A=2),u+E0(t,p-e+A,p)}if(o==="middle"){a===!0&&(u=" "+u+" ",A=3);let h=Math.floor(e/2);if(n){let E=Jk(t,h),I=Jk(t,p-(e-h)+1,!0);return E0(t,0,E)+u+E0(t,I,p).trim()}return E0(t,0,h)+u+E0(t,p-(e-h)+A,p)}if(o==="end"){if(n){let h=Jk(t,e-1);return E0(t,0,h)+u}return a===!0&&(u=" "+u,A=2),E0(t,0,e-A)+u}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${o}`)}});var H6=_(fB=>{"use strict";var tCe=fB&&fB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(fB,"__esModule",{value:!0});var dEt=tCe(YEe()),mEt=tCe(eCe()),_6={};fB.default=(t,e,r)=>{let o=t+String(e)+String(r);if(_6[o])return _6[o];let a=t;if(r==="wrap"&&(a=dEt.default(t,e,{trim:!1,hard:!0})),r.startsWith("truncate")){let n="end";r==="truncate-middle"&&(n="middle"),r==="truncate-start"&&(n="start"),a=mEt.default(t,e,{position:n})}return _6[o]=a,a}});var G6=_(j6=>{"use strict";Object.defineProperty(j6,"__esModule",{value:!0});var rCe=t=>{let e="";if(t.childNodes.length>0)for(let r of t.childNodes){let o="";r.nodeName==="#text"?o=r.nodeValue:((r.nodeName==="ink-text"||r.nodeName==="ink-virtual-text")&&(o=rCe(r)),o.length>0&&typeof r.internal_transform=="function"&&(o=r.internal_transform(o))),e+=o}return e};j6.default=rCe});var q6=_(pi=>{"use strict";var pB=pi&&pi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pi,"__esModule",{value:!0});pi.setTextNodeValue=pi.createTextNode=pi.setStyle=pi.setAttribute=pi.removeChildNode=pi.insertBeforeNode=pi.appendChildNode=pi.createNode=pi.TEXT_NAME=void 0;var yEt=pB(am()),nCe=pB(HEe()),EEt=pB(jEe()),CEt=pB(H6()),wEt=pB(G6());pi.TEXT_NAME="#text";pi.createNode=t=>{var e;let r={nodeName:t,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:t==="ink-virtual-text"?void 0:yEt.default.Node.create()};return t==="ink-text"&&((e=r.yogaNode)===null||e===void 0||e.setMeasureFunc(IEt.bind(null,r))),r};pi.appendChildNode=(t,e)=>{var r;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t,t.childNodes.push(e),e.yogaNode&&((r=t.yogaNode)===null||r===void 0||r.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&zk(t)};pi.insertBeforeNode=(t,e,r)=>{var o,a;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t;let n=t.childNodes.indexOf(r);if(n>=0){t.childNodes.splice(n,0,e),e.yogaNode&&((o=t.yogaNode)===null||o===void 0||o.insertChild(e.yogaNode,n));return}t.childNodes.push(e),e.yogaNode&&((a=t.yogaNode)===null||a===void 0||a.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&zk(t)};pi.removeChildNode=(t,e)=>{var r,o;e.yogaNode&&((o=(r=e.parentNode)===null||r===void 0?void 0:r.yogaNode)===null||o===void 0||o.removeChild(e.yogaNode)),e.parentNode=null;let a=t.childNodes.indexOf(e);a>=0&&t.childNodes.splice(a,1),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&zk(t)};pi.setAttribute=(t,e,r)=>{t.attributes[e]=r};pi.setStyle=(t,e)=>{t.style=e,t.yogaNode&&EEt.default(t.yogaNode,e)};pi.createTextNode=t=>{let e={nodeName:"#text",nodeValue:t,yogaNode:void 0,parentNode:null,style:{}};return pi.setTextNodeValue(e,t),e};var IEt=function(t,e){var r,o;let a=t.nodeName==="#text"?t.nodeValue:wEt.default(t),n=nCe.default(a);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let u=(o=(r=t.style)===null||r===void 0?void 0:r.textWrap)!==null&&o!==void 0?o:"wrap",A=CEt.default(a,e,u);return nCe.default(A)},iCe=t=>{var e;if(!(!t||!t.parentNode))return(e=t.yogaNode)!==null&&e!==void 0?e:iCe(t.parentNode)},zk=t=>{let e=iCe(t);e?.markDirty()};pi.setTextNodeValue=(t,e)=>{typeof e!="string"&&(e=String(e)),t.nodeValue=e,zk(t)}});var cCe=_(hB=>{"use strict";var lCe=hB&&hB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(hB,"__esModule",{value:!0});var sCe=S6(),BEt=lCe(PEe()),oCe=lCe(am()),Oo=q6(),aCe=t=>{t?.unsetMeasureFunc(),t?.freeRecursive()};hB.default=BEt.default({schedulePassiveEffects:sCe.unstable_scheduleCallback,cancelPassiveEffects:sCe.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:t=>{if(t.isStaticDirty){t.isStaticDirty=!1,typeof t.onImmediateRender=="function"&&t.onImmediateRender();return}typeof t.onRender=="function"&&t.onRender()},getChildHostContext:(t,e)=>{let r=t.isInsideText,o=e==="ink-text"||e==="ink-virtual-text";return r===o?t:{isInsideText:o}},shouldSetTextContent:()=>!1,createInstance:(t,e,r,o)=>{if(o.isInsideText&&t==="ink-box")throw new Error(" can\u2019t be nested inside component");let a=t==="ink-text"&&o.isInsideText?"ink-virtual-text":t,n=Oo.createNode(a);for(let[u,A]of Object.entries(e))u!=="children"&&(u==="style"?Oo.setStyle(n,A):u==="internal_transform"?n.internal_transform=A:u==="internal_static"?n.internal_static=!0:Oo.setAttribute(n,u,A));return n},createTextInstance:(t,e,r)=>{if(!r.isInsideText)throw new Error(`Text string "${t}" must be rendered inside component`);return Oo.createTextNode(t)},resetTextContent:()=>{},hideTextInstance:t=>{Oo.setTextNodeValue(t,"")},unhideTextInstance:(t,e)=>{Oo.setTextNodeValue(t,e)},getPublicInstance:t=>t,hideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(oCe.default.DISPLAY_NONE)},unhideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(oCe.default.DISPLAY_FLEX)},appendInitialChild:Oo.appendChildNode,appendChild:Oo.appendChildNode,insertBefore:Oo.insertBeforeNode,finalizeInitialChildren:(t,e,r,o)=>(t.internal_static&&(o.isStaticDirty=!0,o.staticNode=t),!1),supportsMutation:!0,appendChildToContainer:Oo.appendChildNode,insertInContainerBefore:Oo.insertBeforeNode,removeChildFromContainer:(t,e)=>{Oo.removeChildNode(t,e),aCe(e.yogaNode)},prepareUpdate:(t,e,r,o,a)=>{t.internal_static&&(a.isStaticDirty=!0);let n={},u=Object.keys(o);for(let A of u)if(o[A]!==r[A]){if(A==="style"&&typeof o.style=="object"&&typeof r.style=="object"){let h=o.style,E=r.style,I=Object.keys(h);for(let v of I){if(v==="borderStyle"||v==="borderColor"){if(typeof n.style!="object"){let x={};n.style=x}n.style.borderStyle=h.borderStyle,n.style.borderColor=h.borderColor}if(h[v]!==E[v]){if(typeof n.style!="object"){let x={};n.style=x}n.style[v]=h[v]}}continue}n[A]=o[A]}return n},commitUpdate:(t,e)=>{for(let[r,o]of Object.entries(e))r!=="children"&&(r==="style"?Oo.setStyle(t,o):r==="internal_transform"?t.internal_transform=o:r==="internal_static"?t.internal_static=!0:Oo.setAttribute(t,r,o))},commitTextUpdate:(t,e,r)=>{Oo.setTextNodeValue(t,r)},removeChild:(t,e)=>{Oo.removeChildNode(t,e),aCe(e.yogaNode)}})});var ACe=_((LKt,uCe)=>{"use strict";uCe.exports=(t,e=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(e===0)return t;let o=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(o,r.indent.repeat(e))}});var fCe=_(gB=>{"use strict";var vEt=gB&&gB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(gB,"__esModule",{value:!0});var Xk=vEt(am());gB.default=t=>t.getComputedWidth()-t.getComputedPadding(Xk.default.EDGE_LEFT)-t.getComputedPadding(Xk.default.EDGE_RIGHT)-t.getComputedBorder(Xk.default.EDGE_LEFT)-t.getComputedBorder(Xk.default.EDGE_RIGHT)});var pCe=_((MKt,DEt)=>{DEt.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var gCe=_((UKt,Y6)=>{"use strict";var hCe=pCe();Y6.exports=hCe;Y6.exports.default=hCe});var mCe=_((_Kt,dCe)=>{"use strict";var SEt=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},PEt=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`:` +`)+r,a=o+1,o=t.indexOf(` +`,a)}while(o!==-1);return n+=t.substr(a),n};dCe.exports={stringReplaceAll:SEt,stringEncaseCRLFWithFirstIndex:PEt}});var ICe=_((HKt,wCe)=>{"use strict";var bEt=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,yCe=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,xEt=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,kEt=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,QEt=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function CCe(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):QEt.get(t)||t}function FEt(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(xEt))r.push(a[2].replace(kEt,(A,p,h)=>p?CCe(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function REt(t){yCe.lastIndex=0;let e=[],r;for(;(r=yCe.exec(t))!==null;){let o=r[1];if(r[2]){let a=FEt(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function ECe(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}wCe.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(bEt,(n,u,A,p,h,E)=>{if(u)a.push(CCe(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:ECe(t,r)(I)),r.push({inverse:A,styles:REt(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(ECe(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var rQ=_((jKt,bCe)=>{"use strict";var dB=DI(),{stdout:K6,stderr:V6}=dN(),{stringReplaceAll:TEt,stringEncaseCRLFWithFirstIndex:NEt}=mCe(),{isArray:Zk}=Array,vCe=["ansi","ansi","ansi256","ansi16m"],HC=Object.create(null),LEt=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=K6?K6.level:0;t.level=e.level===void 0?r:e.level},J6=class{constructor(e){return DCe(e)}},DCe=t=>{let e={};return LEt(e,t),e.template=(...r)=>PCe(e.template,...r),Object.setPrototypeOf(e,$k.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=J6,e.template};function $k(t){return DCe(t)}for(let[t,e]of Object.entries(dB))HC[t]={get(){let r=eQ(this,z6(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};HC.visible={get(){let t=eQ(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var SCe=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of SCe)HC[t]={get(){let{level:e}=this;return function(...r){let o=z6(dB.color[vCe[e]][t](...r),dB.color.close,this._styler);return eQ(this,o,this._isEmpty)}}};for(let t of SCe){let e="bg"+t[0].toUpperCase()+t.slice(1);HC[e]={get(){let{level:r}=this;return function(...o){let a=z6(dB.bgColor[vCe[r]][t](...o),dB.bgColor.close,this._styler);return eQ(this,a,this._isEmpty)}}}}var OEt=Object.defineProperties(()=>{},{...HC,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),z6=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},eQ=(t,e,r)=>{let o=(...a)=>Zk(a[0])&&Zk(a[0].raw)?BCe(o,PCe(o,...a)):BCe(o,a.length===1?""+a[0]:a.join(" "));return Object.setPrototypeOf(o,OEt),o._generator=t,o._styler=e,o._isEmpty=r,o},BCe=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=TEt(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=NEt(e,a,o,n)),o+e+a},W6,PCe=(t,...e)=>{let[r]=e;if(!Zk(r)||!Zk(r.raw))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";var MEt=yB&&yB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(yB,"__esModule",{value:!0});var mB=MEt(rQ()),UEt=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,_Et=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,nQ=(t,e)=>e==="foreground"?t:"bg"+t[0].toUpperCase()+t.slice(1);yB.default=(t,e,r)=>{if(!e)return t;if(e in mB.default){let a=nQ(e,r);return mB.default[a](t)}if(e.startsWith("#")){let a=nQ("hex",r);return mB.default[a](e)(t)}if(e.startsWith("ansi")){let a=_Et.exec(e);if(!a)return t;let n=nQ(a[1],r),u=Number(a[2]);return mB.default[n](u)(t)}if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("hsv")||e.startsWith("hwb")){let a=UEt.exec(e);if(!a)return t;let n=nQ(a[1],r),u=Number(a[2]),A=Number(a[3]),p=Number(a[4]);return mB.default[n](u,A,p)(t)}return t}});var kCe=_(EB=>{"use strict";var xCe=EB&&EB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(EB,"__esModule",{value:!0});var HEt=xCe(gCe()),Z6=xCe(X6());EB.default=(t,e,r,o)=>{if(typeof r.style.borderStyle=="string"){let a=r.yogaNode.getComputedWidth(),n=r.yogaNode.getComputedHeight(),u=r.style.borderColor,A=HEt.default[r.style.borderStyle],p=Z6.default(A.topLeft+A.horizontal.repeat(a-2)+A.topRight,u,"foreground"),h=(Z6.default(A.vertical,u,"foreground")+` +`).repeat(n-2),E=Z6.default(A.bottomLeft+A.horizontal.repeat(a-2)+A.bottomRight,u,"foreground");o.write(t,e,p,{transformers:[]}),o.write(t,e+1,h,{transformers:[]}),o.write(t+a-1,e+1,h,{transformers:[]}),o.write(t,e+n-1,E,{transformers:[]})}}});var FCe=_(CB=>{"use strict";var lm=CB&&CB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(CB,"__esModule",{value:!0});var jEt=lm(am()),GEt=lm(N6()),qEt=lm(ACe()),YEt=lm(H6()),WEt=lm(fCe()),KEt=lm(G6()),VEt=lm(kCe()),JEt=(t,e)=>{var r;let o=(r=t.childNodes[0])===null||r===void 0?void 0:r.yogaNode;if(o){let a=o.getComputedLeft(),n=o.getComputedTop();e=` +`.repeat(n)+qEt.default(e,a)}return e},QCe=(t,e,r)=>{var o;let{offsetX:a=0,offsetY:n=0,transformers:u=[],skipStaticElements:A}=r;if(A&&t.internal_static)return;let{yogaNode:p}=t;if(p){if(p.getDisplay()===jEt.default.DISPLAY_NONE)return;let h=a+p.getComputedLeft(),E=n+p.getComputedTop(),I=u;if(typeof t.internal_transform=="function"&&(I=[t.internal_transform,...u]),t.nodeName==="ink-text"){let v=KEt.default(t);if(v.length>0){let x=GEt.default(v),C=WEt.default(p);if(x>C){let R=(o=t.style.textWrap)!==null&&o!==void 0?o:"wrap";v=YEt.default(v,C,R)}v=JEt(t,v),e.write(h,E,v,{transformers:I})}return}if(t.nodeName==="ink-box"&&VEt.default(h,E,t,e),t.nodeName==="ink-root"||t.nodeName==="ink-box")for(let v of t.childNodes)QCe(v,e,{offsetX:h,offsetY:E,transformers:I,skipStaticElements:A})}};CB.default=QCe});var TCe=_((WKt,RCe)=>{"use strict";RCe.exports=t=>{t=Object.assign({onlyFirst:!1},t);let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t.onlyFirst?void 0:"g")}});var LCe=_((KKt,$6)=>{"use strict";var zEt=TCe(),NCe=t=>typeof t=="string"?t.replace(zEt(),""):t;$6.exports=NCe;$6.exports.default=NCe});var UCe=_((VKt,MCe)=>{"use strict";var OCe="[\uD800-\uDBFF][\uDC00-\uDFFF]";MCe.exports=t=>t&&t.exact?new RegExp(`^${OCe}$`):new RegExp(OCe,"g")});var HCe=_((JKt,ej)=>{"use strict";var XEt=LCe(),ZEt=UCe(),_Ce=t=>XEt(t).replace(ZEt()," ").length;ej.exports=_Ce;ej.exports.default=_Ce});var qCe=_(wB=>{"use strict";var GCe=wB&&wB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(wB,"__esModule",{value:!0});var jCe=GCe(U6()),$Et=GCe(HCe()),tj=class{constructor(e){this.writes=[];let{width:r,height:o}=e;this.width=r,this.height=o}write(e,r,o,a){let{transformers:n}=a;!o||this.writes.push({x:e,y:r,text:o,transformers:n})}get(){let e=[];for(let o=0;oo.trimRight()).join(` +`),height:e.length}}};wB.default=tj});var KCe=_(IB=>{"use strict";var rj=IB&&IB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(IB,"__esModule",{value:!0});var eCt=rj(am()),YCe=rj(FCe()),WCe=rj(qCe());IB.default=(t,e)=>{var r;if(t.yogaNode.setWidth(e),t.yogaNode){t.yogaNode.calculateLayout(void 0,void 0,eCt.default.DIRECTION_LTR);let o=new WCe.default({width:t.yogaNode.getComputedWidth(),height:t.yogaNode.getComputedHeight()});YCe.default(t,o,{skipStaticElements:!0});let a;!((r=t.staticNode)===null||r===void 0)&&r.yogaNode&&(a=new WCe.default({width:t.staticNode.yogaNode.getComputedWidth(),height:t.staticNode.yogaNode.getComputedHeight()}),YCe.default(t.staticNode,a,{skipStaticElements:!1}));let{output:n,height:u}=o.get();return{output:n,outputHeight:u,staticOutput:a?`${a.get().output} +`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var XCe=_((ZKt,zCe)=>{"use strict";var VCe=ve("stream"),JCe=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],nj={},tCt=t=>{let e=new VCe.PassThrough,r=new VCe.PassThrough;e.write=a=>t("stdout",a),r.write=a=>t("stderr",a);let o=new console.Console(e,r);for(let a of JCe)nj[a]=console[a],console[a]=o[a];return()=>{for(let a of JCe)console[a]=nj[a];nj={}}};zCe.exports=tCt});var sj=_(ij=>{"use strict";Object.defineProperty(ij,"__esModule",{value:!0});ij.default=new WeakMap});var aj=_(oj=>{"use strict";Object.defineProperty(oj,"__esModule",{value:!0});var rCt=on(),ZCe=rCt.createContext({exit:()=>{}});ZCe.displayName="InternalAppContext";oj.default=ZCe});var cj=_(lj=>{"use strict";Object.defineProperty(lj,"__esModule",{value:!0});var nCt=on(),$Ce=nCt.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});$Ce.displayName="InternalStdinContext";lj.default=$Ce});var Aj=_(uj=>{"use strict";Object.defineProperty(uj,"__esModule",{value:!0});var iCt=on(),ewe=iCt.createContext({stdout:void 0,write:()=>{}});ewe.displayName="InternalStdoutContext";uj.default=ewe});var pj=_(fj=>{"use strict";Object.defineProperty(fj,"__esModule",{value:!0});var sCt=on(),twe=sCt.createContext({stderr:void 0,write:()=>{}});twe.displayName="InternalStderrContext";fj.default=twe});var iQ=_(hj=>{"use strict";Object.defineProperty(hj,"__esModule",{value:!0});var oCt=on(),rwe=oCt.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});rwe.displayName="InternalFocusContext";hj.default=rwe});var iwe=_((sVt,nwe)=>{"use strict";var aCt=/[|\\{}()[\]^$+*?.-]/g;nwe.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(aCt,"\\$&")}});var lwe=_((oVt,awe)=>{"use strict";var lCt=iwe(),cCt=typeof process=="object"&&process&&typeof process.cwd=="function"?process.cwd():".",owe=[].concat(ve("module").builtinModules,"bootstrap_node","node").map(t=>new RegExp(`(?:\\((?:node:)?${t}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${t}(?:\\.js)?:\\d+:\\d+$)`));owe.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var BB=class{constructor(e){e={ignoredPackages:[],...e},"internals"in e||(e.internals=BB.nodeInternals()),"cwd"in e||(e.cwd=cCt),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,uCt(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...owe]}clean(e,r=0){r=" ".repeat(r),Array.isArray(e)||(e=e.split(` +`)),!/^\s*at /.test(e[0])&&/^\s*at /.test(e[1])&&(e=e.slice(1));let o=!1,a=null,n=[];return e.forEach(u=>{if(u=u.replace(/\\/g,"/"),this._internals.some(p=>p.test(u)))return;let A=/^\s*at /.test(u);o?u=u.trimEnd().replace(/^(\s+)at /,"$1"):(u=u.trim(),A&&(u=u.slice(3))),u=u.replace(`${this._cwd}/`,""),u&&(A?(a&&(n.push(a),a=null),n.push(u)):(o=!0,a=u))}),n.map(u=>`${r}${u} +`).join("")}captureString(e,r=this.captureString){typeof e=="function"&&(r=e,e=1/0);let{stackTraceLimit:o}=Error;e&&(Error.stackTraceLimit=e);let a={};Error.captureStackTrace(a,r);let{stack:n}=a;return Error.stackTraceLimit=o,this.clean(n)}capture(e,r=this.capture){typeof e=="function"&&(r=e,e=1/0);let{prepareStackTrace:o,stackTraceLimit:a}=Error;Error.prepareStackTrace=(A,p)=>this._wrapCallSite?p.map(this._wrapCallSite):p,e&&(Error.stackTraceLimit=e);let n={};Error.captureStackTrace(n,r);let{stack:u}=n;return Object.assign(Error,{prepareStackTrace:o,stackTraceLimit:a}),u}at(e=this.at){let[r]=this.capture(1,e);if(!r)return{};let o={line:r.getLineNumber(),column:r.getColumnNumber()};swe(o,r.getFileName(),this._cwd),r.isConstructor()&&(o.constructor=!0),r.isEval()&&(o.evalOrigin=r.getEvalOrigin()),r.isNative()&&(o.native=!0);let a;try{a=r.getTypeName()}catch{}a&&a!=="Object"&&a!=="[object Object]"&&(o.type=a);let n=r.getFunctionName();n&&(o.function=n);let u=r.getMethodName();return u&&n!==u&&(o.method=u),o}parseLine(e){let r=e&&e.match(ACt);if(!r)return null;let o=r[1]==="new",a=r[2],n=r[3],u=r[4],A=Number(r[5]),p=Number(r[6]),h=r[7],E=r[8],I=r[9],v=r[10]==="native",x=r[11]===")",C,R={};if(E&&(R.line=Number(E)),I&&(R.column=Number(I)),x&&h){let L=0;for(let U=h.length-1;U>0;U--)if(h.charAt(U)===")")L++;else if(h.charAt(U)==="("&&h.charAt(U-1)===" "&&(L--,L===-1&&h.charAt(U-1)===" ")){let J=h.slice(0,U-1);h=h.slice(U+1),a+=` (${J}`;break}}if(a){let L=a.match(fCt);L&&(a=L[1],C=L[2])}return swe(R,h,this._cwd),o&&(R.constructor=!0),n&&(R.evalOrigin=n,R.evalLine=A,R.evalColumn=p,R.evalFile=u&&u.replace(/\\/g,"/")),v&&(R.native=!0),a&&(R.function=a),C&&a!==C&&(R.method=C),R}};function swe(t,e,r){e&&(e=e.replace(/\\/g,"/"),e.startsWith(`${r}/`)&&(e=e.slice(r.length+1)),t.file=e)}function uCt(t){if(t.length===0)return[];let e=t.map(r=>lCt(r));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${e.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var ACt=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),fCt=/^(.*?) \[as (.*?)\]$/;awe.exports=BB});var uwe=_((aVt,cwe)=>{"use strict";cwe.exports=(t,e)=>t.replace(/^\t+/gm,r=>" ".repeat(r.length*(e||2)))});var fwe=_((lVt,Awe)=>{"use strict";var pCt=uwe(),hCt=(t,e)=>{let r=[],o=t-e,a=t+e;for(let n=o;n<=a;n++)r.push(n);return r};Awe.exports=(t,e,r)=>{if(typeof t!="string")throw new TypeError("Source code is missing.");if(!e||e<1)throw new TypeError("Line number must start from `1`.");if(t=pCt(t).split(/\r?\n/),!(e>t.length))return r={around:3,...r},hCt(e,r.around).filter(o=>t[o-1]!==void 0).map(o=>({line:o,value:t[o-1]}))}});var sQ=_(ru=>{"use strict";var gCt=ru&&ru.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),dCt=ru&&ru.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),mCt=ru&&ru.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&gCt(e,t,r);return dCt(e,t),e},yCt=ru&&ru.__rest||function(t,e){var r={};for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.indexOf(o)<0&&(r[o]=t[o]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(t);a{var{children:r}=t,o=yCt(t,["children"]);let a=Object.assign(Object.assign({},o),{marginLeft:o.marginLeft||o.marginX||o.margin||0,marginRight:o.marginRight||o.marginX||o.margin||0,marginTop:o.marginTop||o.marginY||o.margin||0,marginBottom:o.marginBottom||o.marginY||o.margin||0,paddingLeft:o.paddingLeft||o.paddingX||o.padding||0,paddingRight:o.paddingRight||o.paddingX||o.padding||0,paddingTop:o.paddingTop||o.paddingY||o.padding||0,paddingBottom:o.paddingBottom||o.paddingY||o.padding||0});return pwe.default.createElement("ink-box",{ref:e,style:a},r)});gj.displayName="Box";gj.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};ru.default=gj});var yj=_(vB=>{"use strict";var dj=vB&&vB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(vB,"__esModule",{value:!0});var ECt=dj(on()),jC=dj(rQ()),hwe=dj(X6()),mj=({color:t,backgroundColor:e,dimColor:r,bold:o,italic:a,underline:n,strikethrough:u,inverse:A,wrap:p,children:h})=>{if(h==null)return null;let E=I=>(r&&(I=jC.default.dim(I)),t&&(I=hwe.default(I,t,"foreground")),e&&(I=hwe.default(I,e,"background")),o&&(I=jC.default.bold(I)),a&&(I=jC.default.italic(I)),n&&(I=jC.default.underline(I)),u&&(I=jC.default.strikethrough(I)),A&&(I=jC.default.inverse(I)),I);return ECt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:p},internal_transform:E},h)};mj.displayName="Text";mj.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};vB.default=mj});var ywe=_(nu=>{"use strict";var CCt=nu&&nu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),wCt=nu&&nu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),ICt=nu&&nu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&CCt(e,t,r);return wCt(e,t),e},DB=nu&&nu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nu,"__esModule",{value:!0});var gwe=ICt(ve("fs")),fs=DB(on()),dwe=DB(lwe()),BCt=DB(fwe()),Zf=DB(sQ()),hA=DB(yj()),mwe=new dwe.default({cwd:process.cwd(),internals:dwe.default.nodeInternals()}),vCt=({error:t})=>{let e=t.stack?t.stack.split(` +`).slice(1):void 0,r=e?mwe.parseLine(e[0]):void 0,o,a=0;if(r?.file&&r?.line&&gwe.existsSync(r.file)){let n=gwe.readFileSync(r.file,"utf8");if(o=BCt.default(n,r.line),o)for(let{line:u}of o)a=Math.max(a,String(u).length)}return fs.default.createElement(Zf.default,{flexDirection:"column",padding:1},fs.default.createElement(Zf.default,null,fs.default.createElement(hA.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),fs.default.createElement(hA.default,null," ",t.message)),r&&fs.default.createElement(Zf.default,{marginTop:1},fs.default.createElement(hA.default,{dimColor:!0},r.file,":",r.line,":",r.column)),r&&o&&fs.default.createElement(Zf.default,{marginTop:1,flexDirection:"column"},o.map(({line:n,value:u})=>fs.default.createElement(Zf.default,{key:n},fs.default.createElement(Zf.default,{width:a+1},fs.default.createElement(hA.default,{dimColor:n!==r.line,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0},String(n).padStart(a," "),":")),fs.default.createElement(hA.default,{key:n,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0}," "+u)))),t.stack&&fs.default.createElement(Zf.default,{marginTop:1,flexDirection:"column"},t.stack.split(` +`).slice(1).map(n=>{let u=mwe.parseLine(n);return u?fs.default.createElement(Zf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},u.function),fs.default.createElement(hA.default,{dimColor:!0,color:"gray"}," ","(",u.file,":",u.line,":",u.column,")")):fs.default.createElement(Zf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},n))})))};nu.default=vCt});var Cwe=_(iu=>{"use strict";var DCt=iu&&iu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),SCt=iu&&iu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),PCt=iu&&iu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&DCt(e,t,r);return SCt(e,t),e},um=iu&&iu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(iu,"__esModule",{value:!0});var cm=PCt(on()),Ewe=um(g6()),bCt=um(aj()),xCt=um(cj()),kCt=um(Aj()),QCt=um(pj()),FCt=um(iQ()),RCt=um(ywe()),TCt=" ",NCt="\x1B[Z",LCt="\x1B",oQ=class extends cm.PureComponent{constructor(){super(...arguments),this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=e=>{let{stdin:r}=this.props;if(!this.isRawModeSupported())throw r===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(r.setEncoding("utf8"),e){this.rawModeEnabledCount===0&&(r.addListener("data",this.handleInput),r.resume(),r.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount===0&&(r.setRawMode(!1),r.removeListener("data",this.handleInput),r.pause())},this.handleInput=e=>{e===""&&this.props.exitOnCtrlC&&this.handleExit(),e===LCt&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===TCt&&this.focusNext(),e===NCt&&this.focusPrevious())},this.handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(e)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(e=>{let r=e.focusables[0].id;return{activeFocusId:this.findNextFocusable(e)||r}})},this.focusPrevious=()=>{this.setState(e=>{let r=e.focusables[e.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(e)||r}})},this.addFocusable=(e,{autoFocus:r})=>{this.setState(o=>{let a=o.activeFocusId;return!a&&r&&(a=e),{activeFocusId:a,focusables:[...o.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.filter(o=>o.id!==e)}))},this.activateFocusable=e=>{this.setState(r=>({focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r+1;o{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r-1;o>=0;o--)if(e.focusables[o].isActive)return e.focusables[o].id}}static getDerivedStateFromError(e){return{error:e}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return cm.default.createElement(bCt.default.Provider,{value:{exit:this.handleExit}},cm.default.createElement(xCt.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},cm.default.createElement(kCt.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},cm.default.createElement(QCt.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},cm.default.createElement(FCt.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?cm.default.createElement(RCt.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){Ewe.default.hide(this.props.stdout)}componentWillUnmount(){Ewe.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}};iu.default=oQ;oQ.displayName="InternalApp"});var Bwe=_(su=>{"use strict";var OCt=su&&su.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),MCt=su&&su.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),UCt=su&&su.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&OCt(e,t,r);return MCt(e,t),e},ou=su&&su.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(su,"__esModule",{value:!0});var _Ct=ou(on()),wwe=lM(),HCt=ou(lEe()),jCt=ou(u6()),GCt=ou(hEe()),qCt=ou(dEe()),Ej=ou(cCe()),YCt=ou(KCe()),WCt=ou(h6()),KCt=ou(XCe()),VCt=UCt(q6()),JCt=ou(sj()),zCt=ou(Cwe()),GC=process.env.CI==="false"?!1:GCt.default,Iwe=()=>{},Cj=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:r,outputHeight:o,staticOutput:a}=YCt.default(this.rootNode,this.options.stdout.columns||80),n=a&&a!==` +`;if(this.options.debug){n&&(this.fullStaticOutput+=a),this.options.stdout.write(this.fullStaticOutput+r);return}if(GC){n&&this.options.stdout.write(a),this.lastOutput=r;return}if(n&&(this.fullStaticOutput+=a),o>=this.options.stdout.rows){this.options.stdout.write(jCt.default.clearTerminal+this.fullStaticOutput+r),this.lastOutput=r;return}n&&(this.log.clear(),this.options.stdout.write(a),this.log(r)),!n&&r!==this.lastOutput&&this.throttledLog(r),this.lastOutput=r},qCt.default(this),this.options=e,this.rootNode=VCt.createNode("ink-root"),this.rootNode.onRender=e.debug?this.onRender:wwe(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=HCt.default.create(e.stdout),this.throttledLog=e.debug?this.log:wwe(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=Ej.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=WCt.default(this.unmount,{alwaysLast:!1}),e.patchConsole&&this.patchConsole(),GC||(e.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{e.stdout.off("resize",this.onRender)})}render(e){let r=_Ct.default.createElement(zCt.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},e);Ej.default.updateContainer(r,this.container,null,Iwe)}writeToStdout(e){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput);return}if(GC){this.options.stdout.write(e);return}this.log.clear(),this.options.stdout.write(e),this.log(this.lastOutput)}}writeToStderr(e){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(e),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(GC){this.options.stderr.write(e);return}this.log.clear(),this.options.stderr.write(e),this.log(this.lastOutput)}}unmount(e){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),GC?this.options.stdout.write(this.lastOutput+` +`):this.options.debug||this.log.done(),this.isUnmounted=!0,Ej.default.updateContainer(null,this.container,null,Iwe),JCt.default.delete(this.options.stdout),e instanceof Error?this.rejectExitPromise(e):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((e,r)=>{this.resolveExitPromise=e,this.rejectExitPromise=r})),this.exitPromise}clear(){!GC&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=KCt.default((e,r)=>{e==="stdout"&&this.writeToStdout(r),e==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};su.default=Cj});var Dwe=_(SB=>{"use strict";var vwe=SB&&SB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(SB,"__esModule",{value:!0});var XCt=vwe(Bwe()),aQ=vwe(sj()),ZCt=ve("stream"),$Ct=(t,e)=>{let r=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},ewt(e)),o=twt(r.stdout,()=>new XCt.default(r));return o.render(t),{rerender:o.render,unmount:()=>o.unmount(),waitUntilExit:o.waitUntilExit,cleanup:()=>aQ.default.delete(r.stdout),clear:o.clear}};SB.default=$Ct;var ewt=(t={})=>t instanceof ZCt.Stream?{stdout:t,stdin:process.stdin}:t,twt=(t,e)=>{let r;return aQ.default.has(t)?r=aQ.default.get(t):(r=e(),aQ.default.set(t,r)),r}});var Pwe=_($f=>{"use strict";var rwt=$f&&$f.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),nwt=$f&&$f.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),iwt=$f&&$f.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&rwt(e,t,r);return nwt(e,t),e};Object.defineProperty($f,"__esModule",{value:!0});var PB=iwt(on()),Swe=t=>{let{items:e,children:r,style:o}=t,[a,n]=PB.useState(0),u=PB.useMemo(()=>e.slice(a),[e,a]);PB.useLayoutEffect(()=>{n(e.length)},[e.length]);let A=u.map((h,E)=>r(h,a+E)),p=PB.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},o),[o]);return PB.default.createElement("ink-box",{internal_static:!0,style:p},A)};Swe.displayName="Static";$f.default=Swe});var xwe=_(bB=>{"use strict";var swt=bB&&bB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(bB,"__esModule",{value:!0});var owt=swt(on()),bwe=({children:t,transform:e})=>t==null?null:owt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:e},t);bwe.displayName="Transform";bB.default=bwe});var Qwe=_(xB=>{"use strict";var awt=xB&&xB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xB,"__esModule",{value:!0});var lwt=awt(on()),kwe=({count:t=1})=>lwt.default.createElement("ink-text",null,` +`.repeat(t));kwe.displayName="Newline";xB.default=kwe});var Twe=_(kB=>{"use strict";var Fwe=kB&&kB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kB,"__esModule",{value:!0});var cwt=Fwe(on()),uwt=Fwe(sQ()),Rwe=()=>cwt.default.createElement(uwt.default,{flexGrow:1});Rwe.displayName="Spacer";kB.default=Rwe});var lQ=_(QB=>{"use strict";var Awt=QB&&QB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(QB,"__esModule",{value:!0});var fwt=on(),pwt=Awt(cj()),hwt=()=>fwt.useContext(pwt.default);QB.default=hwt});var Lwe=_(FB=>{"use strict";var gwt=FB&&FB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(FB,"__esModule",{value:!0});var Nwe=on(),dwt=gwt(lQ()),mwt=(t,e={})=>{let{stdin:r,setRawMode:o,internal_exitOnCtrlC:a}=dwt.default();Nwe.useEffect(()=>{if(e.isActive!==!1)return o(!0),()=>{o(!1)}},[e.isActive,o]),Nwe.useEffect(()=>{if(e.isActive===!1)return;let n=u=>{let A=String(u),p={upArrow:A==="\x1B[A",downArrow:A==="\x1B[B",leftArrow:A==="\x1B[D",rightArrow:A==="\x1B[C",pageDown:A==="\x1B[6~",pageUp:A==="\x1B[5~",return:A==="\r",escape:A==="\x1B",ctrl:!1,shift:!1,tab:A===" "||A==="\x1B[Z",backspace:A==="\b",delete:A==="\x7F"||A==="\x1B[3~",meta:!1};A<=""&&!p.return&&(A=String.fromCharCode(A.charCodeAt(0)+"a".charCodeAt(0)-1),p.ctrl=!0),A.startsWith("\x1B")&&(A=A.slice(1),p.meta=!0);let h=A>="A"&&A<="Z",E=A>="\u0410"&&A<="\u042F";A.length===1&&(h||E)&&(p.shift=!0),p.tab&&A==="[Z"&&(p.shift=!0),(p.tab||p.backspace||p.delete)&&(A=""),(!(A==="c"&&p.ctrl)||!a)&&t(A,p)};return r?.on("data",n),()=>{r?.off("data",n)}},[e.isActive,r,a,t])};FB.default=mwt});var Owe=_(RB=>{"use strict";var ywt=RB&&RB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(RB,"__esModule",{value:!0});var Ewt=on(),Cwt=ywt(aj()),wwt=()=>Ewt.useContext(Cwt.default);RB.default=wwt});var Mwe=_(TB=>{"use strict";var Iwt=TB&&TB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(TB,"__esModule",{value:!0});var Bwt=on(),vwt=Iwt(Aj()),Dwt=()=>Bwt.useContext(vwt.default);TB.default=Dwt});var Uwe=_(NB=>{"use strict";var Swt=NB&&NB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(NB,"__esModule",{value:!0});var Pwt=on(),bwt=Swt(pj()),xwt=()=>Pwt.useContext(bwt.default);NB.default=xwt});var Hwe=_(OB=>{"use strict";var _we=OB&&OB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(OB,"__esModule",{value:!0});var LB=on(),kwt=_we(iQ()),Qwt=_we(lQ()),Fwt=({isActive:t=!0,autoFocus:e=!1}={})=>{let{isRawModeSupported:r,setRawMode:o}=Qwt.default(),{activeId:a,add:n,remove:u,activate:A,deactivate:p}=LB.useContext(kwt.default),h=LB.useMemo(()=>Math.random().toString().slice(2,7),[]);return LB.useEffect(()=>(n(h,{autoFocus:e}),()=>{u(h)}),[h,e]),LB.useEffect(()=>{t?A(h):p(h)},[t,h]),LB.useEffect(()=>{if(!(!r||!t))return o(!0),()=>{o(!1)}},[t]),{isFocused:Boolean(h)&&a===h}};OB.default=Fwt});var jwe=_(MB=>{"use strict";var Rwt=MB&&MB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(MB,"__esModule",{value:!0});var Twt=on(),Nwt=Rwt(iQ()),Lwt=()=>{let t=Twt.useContext(Nwt.default);return{enableFocus:t.enableFocus,disableFocus:t.disableFocus,focusNext:t.focusNext,focusPrevious:t.focusPrevious}};MB.default=Lwt});var Gwe=_(wj=>{"use strict";Object.defineProperty(wj,"__esModule",{value:!0});wj.default=t=>{var e,r,o,a;return{width:(r=(e=t.yogaNode)===null||e===void 0?void 0:e.getComputedWidth())!==null&&r!==void 0?r:0,height:(a=(o=t.yogaNode)===null||o===void 0?void 0:o.getComputedHeight())!==null&&a!==void 0?a:0}}});var ic=_(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});var Owt=Dwe();Object.defineProperty(ro,"render",{enumerable:!0,get:function(){return Owt.default}});var Mwt=sQ();Object.defineProperty(ro,"Box",{enumerable:!0,get:function(){return Mwt.default}});var Uwt=yj();Object.defineProperty(ro,"Text",{enumerable:!0,get:function(){return Uwt.default}});var _wt=Pwe();Object.defineProperty(ro,"Static",{enumerable:!0,get:function(){return _wt.default}});var Hwt=xwe();Object.defineProperty(ro,"Transform",{enumerable:!0,get:function(){return Hwt.default}});var jwt=Qwe();Object.defineProperty(ro,"Newline",{enumerable:!0,get:function(){return jwt.default}});var Gwt=Twe();Object.defineProperty(ro,"Spacer",{enumerable:!0,get:function(){return Gwt.default}});var qwt=Lwe();Object.defineProperty(ro,"useInput",{enumerable:!0,get:function(){return qwt.default}});var Ywt=Owe();Object.defineProperty(ro,"useApp",{enumerable:!0,get:function(){return Ywt.default}});var Wwt=lQ();Object.defineProperty(ro,"useStdin",{enumerable:!0,get:function(){return Wwt.default}});var Kwt=Mwe();Object.defineProperty(ro,"useStdout",{enumerable:!0,get:function(){return Kwt.default}});var Vwt=Uwe();Object.defineProperty(ro,"useStderr",{enumerable:!0,get:function(){return Vwt.default}});var Jwt=Hwe();Object.defineProperty(ro,"useFocus",{enumerable:!0,get:function(){return Jwt.default}});var zwt=jwe();Object.defineProperty(ro,"useFocusManager",{enumerable:!0,get:function(){return zwt.default}});var Xwt=Gwe();Object.defineProperty(ro,"measureElement",{enumerable:!0,get:function(){return Xwt.default}})});var Bj={};Vt(Bj,{Gem:()=>Ij});var qwe,Am,Ij,cQ=Et(()=>{qwe=$e(ic()),Am=$e(on()),Ij=(0,Am.memo)(({active:t})=>{let e=(0,Am.useMemo)(()=>t?"\u25C9":"\u25EF",[t]),r=(0,Am.useMemo)(()=>t?"green":"yellow",[t]);return Am.default.createElement(qwe.Text,{color:r},e)})});var Wwe={};Vt(Wwe,{useKeypress:()=>fm});function fm({active:t},e,r){let{stdin:o}=(0,Ywe.useStdin)(),a=(0,uQ.useCallback)((n,u)=>e(n,u),r);(0,uQ.useEffect)(()=>{if(!(!t||!o))return o.on("keypress",a),()=>{o.off("keypress",a)}},[t,a,o])}var Ywe,uQ,UB=Et(()=>{Ywe=$e(ic()),uQ=$e(on())});var Vwe={};Vt(Vwe,{FocusRequest:()=>Kwe,useFocusRequest:()=>vj});var Kwe,vj,Dj=Et(()=>{UB();Kwe=(r=>(r.BEFORE="before",r.AFTER="after",r))(Kwe||{}),vj=function({active:t},e,r){fm({active:t},(o,a)=>{a.name==="tab"&&(a.shift?e("before"):e("after"))},r)}});var Jwe={};Vt(Jwe,{useListInput:()=>_B});var _B,AQ=Et(()=>{UB();_B=function(t,e,{active:r,minus:o,plus:a,set:n,loop:u=!0}){fm({active:r},(A,p)=>{let h=e.indexOf(t);switch(p.name){case o:{let E=h-1;if(u){n(e[(e.length+E)%e.length]);return}if(E<0)return;n(e[E])}break;case a:{let E=h+1;if(u){n(e[E%e.length]);return}if(E>=e.length)return;n(e[E])}break}},[e,t,a,n,u])}});var fQ={};Vt(fQ,{ScrollableItems:()=>Zwt});var C0,La,Zwt,pQ=Et(()=>{C0=$e(ic()),La=$e(on());Dj();AQ();Zwt=({active:t=!0,children:e=[],radius:r=10,size:o=1,loop:a=!0,onFocusRequest:n,willReachEnd:u})=>{let A=L=>{if(L.key===null)throw new Error("Expected all children to have a key");return L.key},p=La.default.Children.map(e,L=>A(L)),h=p[0],[E,I]=(0,La.useState)(h),v=p.indexOf(E);(0,La.useEffect)(()=>{p.includes(E)||I(h)},[e]),(0,La.useEffect)(()=>{u&&v>=p.length-2&&u()},[v]),vj({active:t&&!!n},L=>{n?.(L)},[n]),_B(E,p,{active:t,minus:"up",plus:"down",set:I,loop:a});let x=v-r,C=v+r;C>p.length&&(x-=C-p.length,C=p.length),x<0&&(C+=-x,x=0),C>=p.length&&(C=p.length-1);let R=[];for(let L=x;L<=C;++L){let U=p[L],J=t&&U===E;R.push(La.default.createElement(C0.Box,{key:U,height:o},La.default.createElement(C0.Box,{marginLeft:1,marginRight:1},La.default.createElement(C0.Text,null,J?La.default.createElement(C0.Text,{color:"cyan",bold:!0},">"):" ")),La.default.createElement(C0.Box,null,La.default.cloneElement(e[L],{active:J}))))}return La.default.createElement(C0.Box,{flexDirection:"column",width:"100%"},R)}});var zwe,ep,Xwe,Sj,Zwe,Pj=Et(()=>{zwe=$e(ic()),ep=$e(on()),Xwe=ve("readline"),Sj=ep.default.createContext(null),Zwe=({children:t})=>{let{stdin:e,setRawMode:r}=(0,zwe.useStdin)();(0,ep.useEffect)(()=>{r&&r(!0),e&&(0,Xwe.emitKeypressEvents)(e)},[e,r]);let[o,a]=(0,ep.useState)(new Map),n=(0,ep.useMemo)(()=>({getAll:()=>o,get:u=>o.get(u),set:(u,A)=>a(new Map([...o,[u,A]]))}),[o,a]);return ep.default.createElement(Sj.Provider,{value:n,children:t})}});var bj={};Vt(bj,{useMinistore:()=>$wt});function $wt(t,e){let r=(0,hQ.useContext)(Sj);if(r===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof t>"u")return r.getAll();let o=(0,hQ.useCallback)(n=>{r.set(t,n)},[t,r.set]),a=r.get(t);return typeof a>"u"&&(a=e),[a,o]}var hQ,xj=Et(()=>{hQ=$e(on());Pj()});var dQ={};Vt(dQ,{renderForm:()=>eIt});async function eIt(t,e,{stdin:r,stdout:o,stderr:a}){let n,u=p=>{let{exit:h}=(0,gQ.useApp)();fm({active:!0},(E,I)=>{I.name==="return"&&(n=p,h())},[h,p])},{waitUntilExit:A}=(0,gQ.render)(kj.default.createElement(Zwe,null,kj.default.createElement(t,{...e,useSubmit:u})),{stdin:r,stdout:o,stderr:a});return await A(),n}var gQ,kj,mQ=Et(()=>{gQ=$e(ic()),kj=$e(on());Pj();UB()});var rIe=_(HB=>{"use strict";Object.defineProperty(HB,"__esModule",{value:!0});HB.UncontrolledTextInput=void 0;var eIe=on(),Qj=on(),$we=ic(),pm=rQ(),tIe=({value:t,placeholder:e="",focus:r=!0,mask:o,highlightPastedText:a=!1,showCursor:n=!0,onChange:u,onSubmit:A})=>{let[{cursorOffset:p,cursorWidth:h},E]=Qj.useState({cursorOffset:(t||"").length,cursorWidth:0});Qj.useEffect(()=>{E(R=>{if(!r||!n)return R;let L=t||"";return R.cursorOffset>L.length-1?{cursorOffset:L.length,cursorWidth:0}:R})},[t,r,n]);let I=a?h:0,v=o?o.repeat(t.length):t,x=v,C=e?pm.grey(e):void 0;if(n&&r){C=e.length>0?pm.inverse(e[0])+pm.grey(e.slice(1)):pm.inverse(" "),x=v.length>0?"":pm.inverse(" ");let R=0;for(let L of v)R>=p-I&&R<=p?x+=pm.inverse(L):x+=L,R++;v.length>0&&p===v.length&&(x+=pm.inverse(" "))}return $we.useInput((R,L)=>{if(L.upArrow||L.downArrow||L.ctrl&&R==="c"||L.tab||L.shift&&L.tab)return;if(L.return){A&&A(t);return}let U=p,J=t,te=0;L.leftArrow?n&&U--:L.rightArrow?n&&U++:L.backspace||L.delete?p>0&&(J=t.slice(0,p-1)+t.slice(p,t.length),U--):(J=t.slice(0,p)+R+t.slice(p,t.length),U+=R.length,R.length>1&&(te=R.length)),p<0&&(U=0),p>t.length&&(U=t.length),E({cursorOffset:U,cursorWidth:te}),J!==t&&u(J)},{isActive:r}),eIe.createElement($we.Text,null,e?v.length>0?x:C:x)};HB.default=tIe;HB.UncontrolledTextInput=t=>{let[e,r]=Qj.useState("");return eIe.createElement(tIe,Object.assign({},t,{value:e,onChange:r}))}});var sIe={};Vt(sIe,{Pad:()=>Fj});var nIe,iIe,Fj,Rj=Et(()=>{nIe=$e(ic()),iIe=$e(on()),Fj=({length:t,active:e})=>{if(t===0)return null;let r=t>1?` ${"-".repeat(t-1)}`:" ";return iIe.default.createElement(nIe.Text,{dimColor:!e},r)}});var oIe={};Vt(oIe,{ItemOptions:()=>tIt});var GB,I0,tIt,aIe=Et(()=>{GB=$e(ic()),I0=$e(on());AQ();cQ();Rj();tIt=function({active:t,skewer:e,options:r,value:o,onChange:a,sizes:n=[]}){let u=r.filter(({label:p})=>!!p).map(({value:p})=>p),A=r.findIndex(p=>p.value===o&&p.label!="");return _B(o,u,{active:t,minus:"left",plus:"right",set:a}),I0.default.createElement(I0.default.Fragment,null,r.map(({label:p},h)=>{let E=h===A,I=n[h]-1||0,v=p.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),x=Math.max(0,I-v.length-2);return p?I0.default.createElement(GB.Box,{key:p,width:I,marginLeft:1},I0.default.createElement(GB.Text,{wrap:"truncate"},I0.default.createElement(Ij,{active:E})," ",p),e?I0.default.createElement(Fj,{active:t,length:x}):null):I0.default.createElement(GB.Box,{key:`spacer-${h}`,width:I,marginLeft:1})}))}});var BIe=_((zJt,IIe)=>{var jj;IIe.exports=()=>(typeof jj>"u"&&(jj=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),jj)});var qIe=_((wzt,GIe)=>{var Xj=Symbol("arg flag"),Oa=class extends Error{constructor(e,r){super(e),this.name="ArgError",this.code=r,Object.setPrototypeOf(this,Oa.prototype)}};function sv(t,{argv:e=process.argv.slice(2),permissive:r=!1,stopAtPositional:o=!1}={}){if(!t)throw new Oa("argument specification object is required","ARG_CONFIG_NO_SPEC");let a={_:[]},n={},u={};for(let A of Object.keys(t)){if(!A)throw new Oa("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(A[0]!=="-")throw new Oa(`argument key must start with '-' but found: '${A}'`,"ARG_CONFIG_NONOPT_KEY");if(A.length===1)throw new Oa(`argument key must have a name; singular '-' keys are not allowed: ${A}`,"ARG_CONFIG_NONAME_KEY");if(typeof t[A]=="string"){n[A]=t[A];continue}let p=t[A],h=!1;if(Array.isArray(p)&&p.length===1&&typeof p[0]=="function"){let[E]=p;p=(I,v,x=[])=>(x.push(E(I,v,x[x.length-1])),x),h=E===Boolean||E[Xj]===!0}else if(typeof p=="function")h=p===Boolean||p[Xj]===!0;else throw new Oa(`type missing or not a function or valid array type: ${A}`,"ARG_CONFIG_VAD_TYPE");if(A[1]!=="-"&&A.length>2)throw new Oa(`short argument keys (with a single hyphen) must have only one character: ${A}`,"ARG_CONFIG_SHORTOPT_TOOLONG");u[A]=[p,h]}for(let A=0,p=e.length;A0){a._=a._.concat(e.slice(A));break}if(h==="--"){a._=a._.concat(e.slice(A+1));break}if(h.length>1&&h[0]==="-"){let E=h[1]==="-"||h.length===2?[h]:h.slice(1).split("").map(I=>`-${I}`);for(let I=0;I1&&e[A+1][0]==="-"&&!(e[A+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(L===Number||typeof BigInt<"u"&&L===BigInt))){let J=x===R?"":` (alias for ${R})`;throw new Oa(`option requires argument: ${x}${J}`,"ARG_MISSING_REQUIRED_LONGARG")}a[R]=L(e[A+1],R,a[R]),++A}else a[R]=L(C,R,a[R])}}else a._.push(h)}return a}sv.flag=t=>(t[Xj]=!0,t);sv.COUNT=sv.flag((t,e,r)=>(r||0)+1);sv.ArgError=Oa;GIe.exports=sv});var ZIe=_((Jzt,XIe)=>{var tG;XIe.exports=()=>(typeof tG>"u"&&(tG=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),tG)});var n1e=_((aG,lG)=>{(function(t){aG&&typeof aG=="object"&&typeof lG<"u"?lG.exports=t():typeof define=="function"&&define.amd?define([],t):typeof window<"u"?window.isWindows=t():typeof global<"u"?global.isWindows=t():typeof self<"u"?self.isWindows=t():this.isWindows=t()})(function(){"use strict";return function(){return process&&(process.platform==="win32"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var a1e=_((KXt,o1e)=>{"use strict";cG.ifExists=ZIt;var YC=ve("util"),sc=ve("path"),i1e=n1e(),JIt=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,zIt={createPwshFile:!0,createCmdFile:i1e(),fs:ve("fs")},XIt=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function s1e(t){let e={...zIt,...t},r=e.fs;return e.fs_={chmod:r.chmod?YC.promisify(r.chmod):async()=>{},mkdir:YC.promisify(r.mkdir),readFile:YC.promisify(r.readFile),stat:YC.promisify(r.stat),unlink:YC.promisify(r.unlink),writeFile:YC.promisify(r.writeFile)},e}async function cG(t,e,r){let o=s1e(r);await o.fs_.stat(t),await e1t(t,e,o)}function ZIt(t,e,r){return cG(t,e,r).catch(()=>{})}function $It(t,e){return e.fs_.unlink(t).catch(()=>{})}async function e1t(t,e,r){let o=await s1t(t,r);return await t1t(e,r),r1t(t,e,o,r)}function t1t(t,e){return e.fs_.mkdir(sc.dirname(t),{recursive:!0})}function r1t(t,e,r,o){let a=s1e(o),n=[{generator:l1t,extension:""}];return a.createCmdFile&&n.push({generator:a1t,extension:".cmd"}),a.createPwshFile&&n.push({generator:c1t,extension:".ps1"}),Promise.all(n.map(u=>o1t(t,e+u.extension,r,u.generator,a)))}function n1t(t,e){return $It(t,e)}function i1t(t,e){return u1t(t,e)}async function s1t(t,e){let a=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(JIt);if(!a){let n=sc.extname(t).toLowerCase();return{program:XIt.get(n)||null,additionalArgs:""}}return{program:a[1],additionalArgs:a[2]}}async function o1t(t,e,r,o,a){let n=a.preserveSymlinks?"--preserve-symlinks":"",u=[r.additionalArgs,n].filter(A=>A).join(" ");return a=Object.assign({},a,{prog:r.program,args:u}),await n1t(e,a),await a.fs_.writeFile(e,o(t,e,a),"utf8"),i1t(e,a)}function a1t(t,e,r){let a=sc.relative(sc.dirname(e),t).split("/").join("\\"),n=sc.isAbsolute(a)?`"${a}"`:`"%~dp0\\${a}"`,u,A=r.prog,p=r.args||"",h=uG(r.nodePath).win32;A?(u=`"%~dp0\\${A}.exe"`,a=n):(A=n,p="",a="");let E=r.progArgs?`${r.progArgs.join(" ")} `:"",I=h?`@SET NODE_PATH=${h}\r +`:"";return u?I+=`@IF EXIST ${u} (\r + ${u} ${p} ${a} ${E}%*\r +) ELSE (\r + @SETLOCAL\r + @SET PATHEXT=%PATHEXT:;.JS;=;%\r + ${A} ${p} ${a} ${E}%*\r +)\r +`:I+=`@${A} ${p} ${a} ${E}%*\r +`,I}function l1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n;o=o.split("\\").join("/");let u=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,A=r.args||"",p=uG(r.nodePath).posix;a?(n=`"$basedir/${r.prog}"`,o=u):(a=u,A="",o="");let h=r.progArgs?`${r.progArgs.join(" ")} `:"",E=`#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')") + +case \`uname\` in + *CYGWIN*) basedir=\`cygpath -w "$basedir"\`;; +esac + +`,I=r.nodePath?`export NODE_PATH="${p}" +`:"";return n?E+=`${I}if [ -x ${n} ]; then + exec ${n} ${A} ${o} ${h}"$@" +else + exec ${a} ${A} ${o} ${h}"$@" +fi +`:E+=`${I}${a} ${A} ${o} ${h}"$@" +exit $? +`,E}function c1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n=a&&`"${a}$exe"`,u;o=o.split("\\").join("/");let A=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,p=r.args||"",h=uG(r.nodePath),E=h.win32,I=h.posix;n?(u=`"$basedir/${r.prog}$exe"`,o=A):(n=A,p="",o="");let v=r.progArgs?`${r.progArgs.join(" ")} `:"",x=`#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +${r.nodePath?`$env_node_path=$env:NODE_PATH +$env:NODE_PATH="${E}" +`:""}if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +}`;return r.nodePath&&(x+=` else { + $env:NODE_PATH="${I}" +}`),u?x+=` +$ret=0 +if (Test-Path ${u}) { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${u} ${p} ${o} ${v}$args + } else { + & ${u} ${p} ${o} ${v}$args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${n} ${p} ${o} ${v}$args + } else { + & ${n} ${p} ${o} ${v}$args + } + $ret=$LASTEXITCODE +} +${r.nodePath?`$env:NODE_PATH=$env_node_path +`:""}exit $ret +`:x+=` +# Support pipeline input +if ($MyInvocation.ExpectingInput) { + $input | & ${n} ${p} ${o} ${v}$args +} else { + & ${n} ${p} ${o} ${v}$args +} +${r.nodePath?`$env:NODE_PATH=$env_node_path +`:""}exit $LASTEXITCODE +`,x}function u1t(t,e){return e.fs_.chmod(t,493)}function uG(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(sc.delimiter):Array.from(t),r={};for(let o=0;o`/mnt/${A.toLowerCase()}`):e[o];r.win32=r.win32?`${r.win32};${a}`:a,r.posix=r.posix?`${r.posix}:${n}`:n,r[o]={win32:a,posix:n}}return r}o1e.exports=cG});var vG=_((h$t,b1e)=>{b1e.exports=ve("stream")});var F1e=_((g$t,Q1e)=>{"use strict";function x1e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function O1t(t){for(var e=1;e0?this.tail.next=o:this.head=o,this.tail=o,++this.length}},{key:"unshift",value:function(r){var o={data:r,next:this.head};this.length===0&&(this.tail=o),this.head=o,++this.length}},{key:"shift",value:function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(r){if(this.length===0)return"";for(var o=this.head,a=""+o.data;o=o.next;)a+=r+o.data;return a}},{key:"concat",value:function(r){if(this.length===0)return xQ.alloc(0);for(var o=xQ.allocUnsafe(r>>>0),a=this.head,n=0;a;)q1t(a.data,o,n),n+=a.data.length,a=a.next;return o}},{key:"consume",value:function(r,o){var a;return ru.length?u.length:r;if(A===u.length?n+=u:n+=u.slice(0,r),r-=A,r===0){A===u.length?(++a,o.next?this.head=o.next:this.head=this.tail=null):(this.head=o,o.data=u.slice(A));break}++a}return this.length-=a,n}},{key:"_getBuffer",value:function(r){var o=xQ.allocUnsafe(r),a=this.head,n=1;for(a.data.copy(o),r-=a.data.length;a=a.next;){var u=a.data,A=r>u.length?u.length:r;if(u.copy(o,o.length-r,0,A),r-=A,r===0){A===u.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=u.slice(A));break}++n}return this.length-=n,o}},{key:G1t,value:function(r,o){return DG(this,O1t({},o,{depth:0,customInspect:!1}))}}]),t}()});var PG=_((d$t,T1e)=>{"use strict";function Y1t(t,e){var r=this,o=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return o||a?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(SG,this,t)):process.nextTick(SG,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(n){!e&&n?r._writableState?r._writableState.errorEmitted?process.nextTick(kQ,r):(r._writableState.errorEmitted=!0,process.nextTick(R1e,r,n)):process.nextTick(R1e,r,n):e?(process.nextTick(kQ,r),e(n)):process.nextTick(kQ,r)}),this)}function R1e(t,e){SG(t,e),kQ(t)}function kQ(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function W1t(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function SG(t,e){t.emit("error",e)}function K1t(t,e){var r=t._readableState,o=t._writableState;r&&r.autoDestroy||o&&o.autoDestroy?t.destroy(e):t.emit("error",e)}T1e.exports={destroy:Y1t,undestroy:W1t,errorOrDestroy:K1t}});var Q0=_((m$t,O1e)=>{"use strict";var L1e={};function ac(t,e,r){r||(r=Error);function o(n,u,A){return typeof e=="string"?e:e(n,u,A)}class a extends r{constructor(u,A,p){super(o(u,A,p))}}a.prototype.name=r.name,a.prototype.code=t,L1e[t]=a}function N1e(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(o=>String(o)),r>2?`one of ${e} ${t.slice(0,r-1).join(", ")}, or `+t[r-1]:r===2?`one of ${e} ${t[0]} or ${t[1]}`:`of ${e} ${t[0]}`}else return`of ${e} ${String(t)}`}function V1t(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function J1t(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function z1t(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}ac("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);ac("ERR_INVALID_ARG_TYPE",function(t,e,r){let o;typeof e=="string"&&V1t(e,"not ")?(o="must not be",e=e.replace(/^not /,"")):o="must be";let a;if(J1t(t," argument"))a=`The ${t} ${o} ${N1e(e,"type")}`;else{let n=z1t(t,".")?"property":"argument";a=`The "${t}" ${n} ${o} ${N1e(e,"type")}`}return a+=`. Received type ${typeof r}`,a},TypeError);ac("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");ac("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});ac("ERR_STREAM_PREMATURE_CLOSE","Premature close");ac("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});ac("ERR_MULTIPLE_CALLBACK","Callback called multiple times");ac("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");ac("ERR_STREAM_WRITE_AFTER_END","write after end");ac("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);ac("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);ac("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");O1e.exports.codes=L1e});var bG=_((y$t,M1e)=>{"use strict";var X1t=Q0().codes.ERR_INVALID_OPT_VALUE;function Z1t(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function $1t(t,e,r,o){var a=Z1t(e,o,r);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var n=o?r:"highWaterMark";throw new X1t(n,a)}return Math.floor(a)}return t.objectMode?16:16*1024}M1e.exports={getHighWaterMark:$1t}});var U1e=_((E$t,xG)=>{typeof Object.create=="function"?xG.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:xG.exports=function(e,r){if(r){e.super_=r;var o=function(){};o.prototype=r.prototype,e.prototype=new o,e.prototype.constructor=e}}});var F0=_((C$t,QG)=>{try{if(kG=ve("util"),typeof kG.inherits!="function")throw"";QG.exports=kG.inherits}catch{QG.exports=U1e()}var kG});var H1e=_((w$t,_1e)=>{_1e.exports=ve("util").deprecate});var TG=_((I$t,K1e)=>{"use strict";K1e.exports=Ri;function G1e(t){var e=this;this.next=null,this.entry=null,this.finish=function(){S2t(e,t)}}var zC;Ri.WritableState=mv;var e2t={deprecate:H1e()},q1e=vG(),FQ=ve("buffer").Buffer,t2t=global.Uint8Array||function(){};function r2t(t){return FQ.from(t)}function n2t(t){return FQ.isBuffer(t)||t instanceof t2t}var RG=PG(),i2t=bG(),s2t=i2t.getHighWaterMark,R0=Q0().codes,o2t=R0.ERR_INVALID_ARG_TYPE,a2t=R0.ERR_METHOD_NOT_IMPLEMENTED,l2t=R0.ERR_MULTIPLE_CALLBACK,c2t=R0.ERR_STREAM_CANNOT_PIPE,u2t=R0.ERR_STREAM_DESTROYED,A2t=R0.ERR_STREAM_NULL_VALUES,f2t=R0.ERR_STREAM_WRITE_AFTER_END,p2t=R0.ERR_UNKNOWN_ENCODING,XC=RG.errorOrDestroy;F0()(Ri,q1e);function h2t(){}function mv(t,e,r){zC=zC||Cm(),t=t||{},typeof r!="boolean"&&(r=e instanceof zC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=s2t(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var o=t.decodeStrings===!1;this.decodeStrings=!o,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){w2t(e,a)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new G1e(this)}mv.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(mv.prototype,"buffer",{get:e2t.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var QQ;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(QQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Ri,Symbol.hasInstance,{value:function(e){return QQ.call(this,e)?!0:this!==Ri?!1:e&&e._writableState instanceof mv}})):QQ=function(e){return e instanceof this};function Ri(t){zC=zC||Cm();var e=this instanceof zC;if(!e&&!QQ.call(Ri,this))return new Ri(t);this._writableState=new mv(t,this,e),this.writable=!0,t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.final=="function"&&(this._final=t.final)),q1e.call(this)}Ri.prototype.pipe=function(){XC(this,new c2t)};function g2t(t,e){var r=new f2t;XC(t,r),process.nextTick(e,r)}function d2t(t,e,r,o){var a;return r===null?a=new A2t:typeof r!="string"&&!e.objectMode&&(a=new o2t("chunk",["string","Buffer"],r)),a?(XC(t,a),process.nextTick(o,a),!1):!0}Ri.prototype.write=function(t,e,r){var o=this._writableState,a=!1,n=!o.objectMode&&n2t(t);return n&&!FQ.isBuffer(t)&&(t=r2t(t)),typeof e=="function"&&(r=e,e=null),n?e="buffer":e||(e=o.defaultEncoding),typeof r!="function"&&(r=h2t),o.ending?g2t(this,r):(n||d2t(this,o,t,r))&&(o.pendingcb++,a=y2t(this,o,n,t,e,r)),a};Ri.prototype.cork=function(){this._writableState.corked++};Ri.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&Y1e(this,t))};Ri.prototype.setDefaultEncoding=function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new p2t(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Ri.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function m2t(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=FQ.from(e,r)),e}Object.defineProperty(Ri.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function y2t(t,e,r,o,a,n){if(!r){var u=m2t(e,o,a);o!==u&&(r=!0,a="buffer",o=u)}var A=e.objectMode?1:o.length;e.length+=A;var p=e.length{"use strict";var P2t=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};J1e.exports=EA;var V1e=OG(),LG=TG();F0()(EA,V1e);for(NG=P2t(LG.prototype),RQ=0;RQ{var NQ=ve("buffer"),ip=NQ.Buffer;function z1e(t,e){for(var r in t)e[r]=t[r]}ip.from&&ip.alloc&&ip.allocUnsafe&&ip.allocUnsafeSlow?X1e.exports=NQ:(z1e(NQ,MG),MG.Buffer=ZC);function ZC(t,e,r){return ip(t,e,r)}z1e(ip,ZC);ZC.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return ip(t,e,r)};ZC.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var o=ip(t);return e!==void 0?typeof r=="string"?o.fill(e,r):o.fill(e):o.fill(0),o};ZC.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return ip(t)};ZC.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return NQ.SlowBuffer(t)}});var HG=_(e2e=>{"use strict";var _G=Z1e().Buffer,$1e=_G.isEncoding||function(t){switch(t=""+t,t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function k2t(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}function Q2t(t){var e=k2t(t);if(typeof e!="string"&&(_G.isEncoding===$1e||!$1e(t)))throw new Error("Unknown encoding: "+t);return e||t}e2e.StringDecoder=yv;function yv(t){this.encoding=Q2t(t);var e;switch(this.encoding){case"utf16le":this.text=O2t,this.end=M2t,e=4;break;case"utf8":this.fillLast=T2t,e=4;break;case"base64":this.text=U2t,this.end=_2t,e=3;break;default:this.write=H2t,this.end=j2t;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=_G.allocUnsafe(e)}yv.prototype.write=function(t){if(t.length===0)return"";var e,r;if(this.lastNeed){if(e=this.fillLast(t),e===void 0)return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r>5===6?2:t>>4===14?3:t>>3===30?4:t>>6===2?-1:-2}function F2t(t,e,r){var o=e.length-1;if(o=0?(a>0&&(t.lastNeed=a-1),a):--o=0?(a>0&&(t.lastNeed=a-2),a):--o=0?(a>0&&(a===2?a=0:t.lastNeed=a-3),a):0))}function R2t(t,e,r){if((e[0]&192)!==128)return t.lastNeed=0,"\uFFFD";if(t.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return t.lastNeed=1,"\uFFFD";if(t.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return t.lastNeed=2,"\uFFFD"}}function T2t(t){var e=this.lastTotal-this.lastNeed,r=R2t(this,t,e);if(r!==void 0)return r;if(this.lastNeed<=t.length)return t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length}function N2t(t,e){var r=F2t(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var o=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,o),t.toString("utf8",e,o)}function L2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function O2t(t,e){if((t.length-e)%2===0){var r=t.toString("utf16le",e);if(r){var o=r.charCodeAt(r.length-1);if(o>=55296&&o<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function M2t(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function U2t(t,e){var r=(t.length-e)%3;return r===0?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function _2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function H2t(t){return t.toString(this.encoding)}function j2t(t){return t&&t.length?this.write(t):""}});var LQ=_((D$t,n2e)=>{"use strict";var t2e=Q0().codes.ERR_STREAM_PREMATURE_CLOSE;function G2t(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,o=new Array(r),a=0;a{"use strict";var OQ;function T0(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var W2t=LQ(),N0=Symbol("lastResolve"),wm=Symbol("lastReject"),Ev=Symbol("error"),MQ=Symbol("ended"),Im=Symbol("lastPromise"),jG=Symbol("handlePromise"),Bm=Symbol("stream");function L0(t,e){return{value:t,done:e}}function K2t(t){var e=t[N0];if(e!==null){var r=t[Bm].read();r!==null&&(t[Im]=null,t[N0]=null,t[wm]=null,e(L0(r,!1)))}}function V2t(t){process.nextTick(K2t,t)}function J2t(t,e){return function(r,o){t.then(function(){if(e[MQ]){r(L0(void 0,!0));return}e[jG](r,o)},o)}}var z2t=Object.getPrototypeOf(function(){}),X2t=Object.setPrototypeOf((OQ={get stream(){return this[Bm]},next:function(){var e=this,r=this[Ev];if(r!==null)return Promise.reject(r);if(this[MQ])return Promise.resolve(L0(void 0,!0));if(this[Bm].destroyed)return new Promise(function(u,A){process.nextTick(function(){e[Ev]?A(e[Ev]):u(L0(void 0,!0))})});var o=this[Im],a;if(o)a=new Promise(J2t(o,this));else{var n=this[Bm].read();if(n!==null)return Promise.resolve(L0(n,!1));a=new Promise(this[jG])}return this[Im]=a,a}},T0(OQ,Symbol.asyncIterator,function(){return this}),T0(OQ,"return",function(){var e=this;return new Promise(function(r,o){e[Bm].destroy(null,function(a){if(a){o(a);return}r(L0(void 0,!0))})})}),OQ),z2t),Z2t=function(e){var r,o=Object.create(X2t,(r={},T0(r,Bm,{value:e,writable:!0}),T0(r,N0,{value:null,writable:!0}),T0(r,wm,{value:null,writable:!0}),T0(r,Ev,{value:null,writable:!0}),T0(r,MQ,{value:e._readableState.endEmitted,writable:!0}),T0(r,jG,{value:function(n,u){var A=o[Bm].read();A?(o[Im]=null,o[N0]=null,o[wm]=null,n(L0(A,!1))):(o[N0]=n,o[wm]=u)},writable:!0}),r));return o[Im]=null,W2t(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var n=o[wm];n!==null&&(o[Im]=null,o[N0]=null,o[wm]=null,n(a)),o[Ev]=a;return}var u=o[N0];u!==null&&(o[Im]=null,o[N0]=null,o[wm]=null,u(L0(void 0,!0))),o[MQ]=!0}),e.on("readable",V2t.bind(null,o)),o};i2e.exports=Z2t});var c2e=_((P$t,l2e)=>{"use strict";function o2e(t,e,r,o,a,n,u){try{var A=t[n](u),p=A.value}catch(h){r(h);return}A.done?e(p):Promise.resolve(p).then(o,a)}function $2t(t){return function(){var e=this,r=arguments;return new Promise(function(o,a){var n=t.apply(e,r);function u(p){o2e(n,o,a,u,A,"next",p)}function A(p){o2e(n,o,a,u,A,"throw",p)}u(void 0)})}}function a2e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function eBt(t){for(var e=1;e{"use strict";E2e.exports=mn;var $C;mn.ReadableState=p2e;var b$t=ve("events").EventEmitter,f2e=function(e,r){return e.listeners(r).length},wv=vG(),UQ=ve("buffer").Buffer,iBt=global.Uint8Array||function(){};function sBt(t){return UQ.from(t)}function oBt(t){return UQ.isBuffer(t)||t instanceof iBt}var GG=ve("util"),en;GG&&GG.debuglog?en=GG.debuglog("stream"):en=function(){};var aBt=F1e(),zG=PG(),lBt=bG(),cBt=lBt.getHighWaterMark,_Q=Q0().codes,uBt=_Q.ERR_INVALID_ARG_TYPE,ABt=_Q.ERR_STREAM_PUSH_AFTER_EOF,fBt=_Q.ERR_METHOD_NOT_IMPLEMENTED,pBt=_Q.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,ew,qG,YG;F0()(mn,wv);var Cv=zG.errorOrDestroy,WG=["error","close","destroy","pause","resume"];function hBt(t,e,r){if(typeof t.prependListener=="function")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]}function p2e(t,e,r){$C=$C||Cm(),t=t||{},typeof r!="boolean"&&(r=e instanceof $C),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=cBt(this,t,"readableHighWaterMark",r),this.buffer=new aBt,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(ew||(ew=HG().StringDecoder),this.decoder=new ew(t.encoding),this.encoding=t.encoding)}function mn(t){if($C=$C||Cm(),!(this instanceof mn))return new mn(t);var e=this instanceof $C;this._readableState=new p2e(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),wv.call(this)}Object.defineProperty(mn.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});mn.prototype.destroy=zG.destroy;mn.prototype._undestroy=zG.undestroy;mn.prototype._destroy=function(t,e){e(t)};mn.prototype.push=function(t,e){var r=this._readableState,o;return r.objectMode?o=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=UQ.from(t,e),e=""),o=!0),h2e(this,t,e,!1,o)};mn.prototype.unshift=function(t){return h2e(this,t,null,!0,!1)};function h2e(t,e,r,o,a){en("readableAddChunk",e);var n=t._readableState;if(e===null)n.reading=!1,mBt(t,n);else{var u;if(a||(u=gBt(n,e)),u)Cv(t,u);else if(n.objectMode||e&&e.length>0)if(typeof e!="string"&&!n.objectMode&&Object.getPrototypeOf(e)!==UQ.prototype&&(e=sBt(e)),o)n.endEmitted?Cv(t,new pBt):KG(t,n,e,!0);else if(n.ended)Cv(t,new ABt);else{if(n.destroyed)return!1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?KG(t,n,e,!1):JG(t,n)):KG(t,n,e,!1)}else o||(n.reading=!1,JG(t,n))}return!n.ended&&(n.length=u2e?t=u2e:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function A2e(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=dBt(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}mn.prototype.read=function(t){en("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return en("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?VG(this):HQ(this),null;if(t=A2e(t,e),t===0&&e.ended)return e.length===0&&VG(this),null;var o=e.needReadable;en("need readable",o),(e.length===0||e.length-t0?a=m2e(t,e):a=null,a===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&VG(this)),a!==null&&this.emit("data",a),a};function mBt(t,e){if(en("onEofChunk"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?HQ(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,g2e(t)))}}function HQ(t){var e=t._readableState;en("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(en("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(g2e,t))}function g2e(t){var e=t._readableState;en("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,XG(t)}function JG(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(yBt,t,e))}function yBt(t,e){for(;!e.reading&&!e.ended&&(e.length1&&y2e(o.pipes,t)!==-1)&&!h&&(en("false write response, pause",o.awaitDrain),o.awaitDrain++),r.pause())}function v(L){en("onerror",L),R(),t.removeListener("error",v),f2e(t,"error")===0&&Cv(t,L)}hBt(t,"error",v);function x(){t.removeListener("finish",C),R()}t.once("close",x);function C(){en("onfinish"),t.removeListener("close",x),R()}t.once("finish",C);function R(){en("unpipe"),r.unpipe(t)}return t.emit("pipe",r),o.flowing||(en("pipe resume"),r.resume()),t};function EBt(t){return function(){var r=t._readableState;en("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&f2e(t,"data")&&(r.flowing=!0,XG(t))}}mn.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var o=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var n=0;n0,o.flowing!==!1&&this.resume()):t==="readable"&&!o.endEmitted&&!o.readableListening&&(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,en("on readable",o.length,o.reading),o.length?HQ(this):o.reading||process.nextTick(CBt,this)),r};mn.prototype.addListener=mn.prototype.on;mn.prototype.removeListener=function(t,e){var r=wv.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(d2e,this),r};mn.prototype.removeAllListeners=function(t){var e=wv.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(d2e,this),e};function d2e(t){var e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function CBt(t){en("readable nexttick read 0"),t.read(0)}mn.prototype.resume=function(){var t=this._readableState;return t.flowing||(en("resume"),t.flowing=!t.readableListening,wBt(this,t)),t.paused=!1,this};function wBt(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(IBt,t,e))}function IBt(t,e){en("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),XG(t),e.flowing&&!e.reading&&t.read(0)}mn.prototype.pause=function(){return en("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(en("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function XG(t){var e=t._readableState;for(en("flow",e.flowing);e.flowing&&t.read()!==null;);}mn.prototype.wrap=function(t){var e=this,r=this._readableState,o=!1;t.on("end",function(){if(en("wrapped end"),r.decoder&&!r.ended){var u=r.decoder.end();u&&u.length&&e.push(u)}e.push(null)}),t.on("data",function(u){if(en("wrapped data"),r.decoder&&(u=r.decoder.write(u)),!(r.objectMode&&u==null)&&!(!r.objectMode&&(!u||!u.length))){var A=e.push(u);A||(o=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(A){return function(){return t[A].apply(t,arguments)}}(a));for(var n=0;n=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function VG(t){var e=t._readableState;en("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(BBt,e,t))}function BBt(t,e){if(en("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&t.length===0&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}typeof Symbol=="function"&&(mn.from=function(t,e){return YG===void 0&&(YG=c2e()),YG(mn,t,e)});function y2e(t,e){for(var r=0,o=t.length;r{"use strict";w2e.exports=sp;var jQ=Q0().codes,vBt=jQ.ERR_METHOD_NOT_IMPLEMENTED,DBt=jQ.ERR_MULTIPLE_CALLBACK,SBt=jQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,PBt=jQ.ERR_TRANSFORM_WITH_LENGTH_0,GQ=Cm();F0()(sp,GQ);function bBt(t,e){var r=this._transformState;r.transforming=!1;var o=r.writecb;if(o===null)return this.emit("error",new DBt);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),o(t);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";B2e.exports=Iv;var I2e=ZG();F0()(Iv,I2e);function Iv(t){if(!(this instanceof Iv))return new Iv(t);I2e.call(this,t)}Iv.prototype._transform=function(t,e,r){r(null,t)}});var x2e=_((F$t,b2e)=>{"use strict";var $G;function kBt(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var P2e=Q0().codes,QBt=P2e.ERR_MISSING_ARGS,FBt=P2e.ERR_STREAM_DESTROYED;function D2e(t){if(t)throw t}function RBt(t){return t.setHeader&&typeof t.abort=="function"}function TBt(t,e,r,o){o=kBt(o);var a=!1;t.on("close",function(){a=!0}),$G===void 0&&($G=LQ()),$G(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,RBt(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();o(u||new FBt("pipe"))}}}function S2e(t){t()}function NBt(t,e){return t.pipe(e)}function LBt(t){return!t.length||typeof t[t.length-1]!="function"?D2e:t.pop()}function OBt(){for(var t=arguments.length,e=new Array(t),r=0;r0;return TBt(u,p,h,function(E){a||(a=E),E&&n.forEach(S2e),!p&&(n.forEach(S2e),o(a))})});return e.reduce(NBt)}b2e.exports=OBt});var tw=_((lc,vv)=>{var Bv=ve("stream");process.env.READABLE_STREAM==="disable"&&Bv?(vv.exports=Bv.Readable,Object.assign(vv.exports,Bv),vv.exports.Stream=Bv):(lc=vv.exports=OG(),lc.Stream=Bv||lc,lc.Readable=lc,lc.Writable=TG(),lc.Duplex=Cm(),lc.Transform=ZG(),lc.PassThrough=v2e(),lc.finished=LQ(),lc.pipeline=x2e())});var F2e=_((R$t,Q2e)=>{"use strict";var{Buffer:lu}=ve("buffer"),k2e=Symbol.for("BufferList");function ni(t){if(!(this instanceof ni))return new ni(t);ni._init.call(this,t)}ni._init=function(e){Object.defineProperty(this,k2e,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};ni.prototype._new=function(e){return new ni(e)};ni.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let o=0;othis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ni.prototype.slice=function(e,r){return typeof e=="number"&&e<0&&(e+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};ni.prototype.copy=function(e,r,o,a){if((typeof o!="number"||o<0)&&(o=0),(typeof a!="number"||a>this.length)&&(a=this.length),o>=this.length||a<=0)return e||lu.alloc(0);let n=!!e,u=this._offset(o),A=a-o,p=A,h=n&&r||0,E=u[1];if(o===0&&a===this.length){if(!n)return this._bufs.length===1?this._bufs[0]:lu.concat(this._bufs,this.length);for(let I=0;Iv)this._bufs[I].copy(e,h,E),h+=v;else{this._bufs[I].copy(e,h,E,E+p),h+=v;break}p-=v,E&&(E=0)}return e.length>h?e.slice(0,h):e};ni.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let o=this._offset(e),a=this._offset(r),n=this._bufs.slice(o[0],a[0]+1);return a[1]===0?n.pop():n[n.length-1]=n[n.length-1].slice(0,a[1]),o[1]!==0&&(n[0]=n[0].slice(o[1])),this._new(n)};ni.prototype.toString=function(e,r,o){return this.slice(r,o).toString(e)};ni.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};ni.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let o=this._offset(e),a=o[0],n=o[1];for(;a=t.length){let p=u.indexOf(t,n);if(p!==-1)return this._reverseOffset([a,p]);n=u.length-t.length+1}else{let p=this._reverseOffset([a,n]);if(this._match(p,t))return p;n++}n=0}return-1};ni.prototype._match=function(t,e){if(this.length-t{"use strict";var eq=tw().Duplex,MBt=F0(),Dv=F2e();function Uo(t){if(!(this instanceof Uo))return new Uo(t);if(typeof t=="function"){this._callback=t;let e=function(o){this._callback&&(this._callback(o),this._callback=null)}.bind(this);this.on("pipe",function(o){o.on("error",e)}),this.on("unpipe",function(o){o.removeListener("error",e)}),t=null}Dv._init.call(this,t),eq.call(this)}MBt(Uo,eq);Object.assign(Uo.prototype,Dv.prototype);Uo.prototype._new=function(e){return new Uo(e)};Uo.prototype._write=function(e,r,o){this._appendBuffer(e),typeof o=="function"&&o()};Uo.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Uo.prototype.end=function(e){eq.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Uo.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};Uo.prototype._isBufferList=function(e){return e instanceof Uo||e instanceof Dv||Uo.isBufferList(e)};Uo.isBufferList=Dv.isBufferList;qQ.exports=Uo;qQ.exports.BufferListStream=Uo;qQ.exports.BufferList=Dv});var nq=_(nw=>{var UBt=Buffer.alloc,_Bt="0000000000000000000",HBt="7777777777777777777",T2e="0".charCodeAt(0),N2e=Buffer.from("ustar\0","binary"),jBt=Buffer.from("00","binary"),GBt=Buffer.from("ustar ","binary"),qBt=Buffer.from(" \0","binary"),YBt=parseInt("7777",8),Sv=257,rq=263,WBt=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},KBt=function(t){switch(t){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null},VBt=function(t){switch(t){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0},L2e=function(t,e,r,o){for(;re?HBt.slice(0,e)+" ":_Bt.slice(0,e-t.length)+t+" "};function JBt(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],o=t.length-1;o>0;o--){var a=t[o];e?r.push(a):r.push(255-a)}var n=0,u=r.length;for(o=0;o=Math.pow(10,r)&&r++,e+r+t};nw.decodeLongPath=function(t,e){return rw(t,0,t.length,e)};nw.encodePax=function(t){var e="";t.name&&(e+=tq(" path="+t.name+` +`)),t.linkname&&(e+=tq(" linkpath="+t.linkname+` +`));var r=t.pax;if(r)for(var o in r)e+=tq(" "+o+"="+r[o]+` +`);return Buffer.from(e)};nw.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var a=r.indexOf("/");if(a===-1)return null;o+=o?"/"+r.slice(0,a):r.slice(0,a),r=r.slice(a+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(o)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(O0(t.mode&YBt,6),100),e.write(O0(t.uid,6),108),e.write(O0(t.gid,6),116),e.write(O0(t.size,11),124),e.write(O0(t.mtime.getTime()/1e3|0,11),136),e[156]=T2e+VBt(t.type),t.linkname&&e.write(t.linkname,157),N2e.copy(e,Sv),jBt.copy(e,rq),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(O0(t.devmajor||0,6),329),e.write(O0(t.devminor||0,6),337),o&&e.write(o,345),e.write(O0(O2e(e),6),148),e)};nw.decode=function(t,e,r){var o=t[156]===0?0:t[156]-T2e,a=rw(t,0,100,e),n=M0(t,100,8),u=M0(t,108,8),A=M0(t,116,8),p=M0(t,124,12),h=M0(t,136,12),E=KBt(o),I=t[157]===0?null:rw(t,157,100,e),v=rw(t,265,32),x=rw(t,297,32),C=M0(t,329,8),R=M0(t,337,8),L=O2e(t);if(L===8*32)return null;if(L!==M0(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(N2e.compare(t,Sv,Sv+6)===0)t[345]&&(a=rw(t,345,155,e)+"/"+a);else if(!(GBt.compare(t,Sv,Sv+6)===0&&qBt.compare(t,rq,rq+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return o===0&&a&&a[a.length-1]==="/"&&(o=5),{name:a,mode:n,uid:u,gid:A,size:p,mtime:new Date(1e3*h),type:E,linkname:I,uname:v,gname:x,devmajor:C,devminor:R}}});var q2e=_((L$t,G2e)=>{var U2e=ve("util"),zBt=R2e(),Pv=nq(),_2e=tw().Writable,H2e=tw().PassThrough,j2e=function(){},M2e=function(t){return t&=511,t&&512-t},XBt=function(t,e){var r=new YQ(t,e);return r.end(),r},ZBt=function(t,e){return e.path&&(t.name=e.path),e.linkpath&&(t.linkname=e.linkpath),e.size&&(t.size=parseInt(e.size,10)),t.pax=e,t},YQ=function(t,e){this._parent=t,this.offset=e,H2e.call(this,{autoDestroy:!1})};U2e.inherits(YQ,H2e);YQ.prototype.destroy=function(t){this._parent.destroy(t)};var op=function(t){if(!(this instanceof op))return new op(t);_2e.call(this,t),t=t||{},this._offset=0,this._buffer=zBt(),this._missing=0,this._partial=!1,this._onparse=j2e,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,r=e._buffer,o=function(){e._continue()},a=function(v){if(e._locked=!1,v)return e.destroy(v);e._stream||o()},n=function(){e._stream=null;var v=M2e(e._header.size);v?e._parse(v,u):e._parse(512,I),e._locked||o()},u=function(){e._buffer.consume(M2e(e._header.size)),e._parse(512,I),o()},A=function(){var v=e._header.size;e._paxGlobal=Pv.decodePax(r.slice(0,v)),r.consume(v),n()},p=function(){var v=e._header.size;e._pax=Pv.decodePax(r.slice(0,v)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(v),n()},h=function(){var v=e._header.size;this._gnuLongPath=Pv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},E=function(){var v=e._header.size;this._gnuLongLinkPath=Pv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},I=function(){var v=e._offset,x;try{x=e._header=Pv.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(C){e.emit("error",C)}if(r.consume(512),!x){e._parse(512,I),o();return}if(x.type==="gnu-long-path"){e._parse(x.size,h),o();return}if(x.type==="gnu-long-link-path"){e._parse(x.size,E),o();return}if(x.type==="pax-global-header"){e._parse(x.size,A),o();return}if(x.type==="pax-header"){e._parse(x.size,p),o();return}if(e._gnuLongPath&&(x.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(x.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=x=ZBt(x,e._pax),e._pax=null),e._locked=!0,!x.size||x.type==="directory"){e._parse(512,I),e.emit("entry",x,XBt(e,v),a);return}e._stream=new YQ(e,v),e.emit("entry",x,e._stream,a),e._parse(x.size,n),o()};this._onheader=I,this._parse(512,I)};U2e.inherits(op,_2e);op.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};op.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};op.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=j2e,this._overflow?this._write(this._overflow,void 0,t):t()}};op.prototype._write=function(t,e,r){if(!this._destroyed){var o=this._stream,a=this._buffer,n=this._missing;if(t.length&&(this._partial=!0),t.lengthn&&(u=t.slice(n),t=t.slice(0,n)),o?o.end(t):a.append(t),this._overflow=u,this._onparse()}};op.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};G2e.exports=op});var W2e=_((O$t,Y2e)=>{Y2e.exports=ve("fs").constants||ve("constants")});var X2e=_((M$t,z2e)=>{var iw=W2e(),K2e=LM(),KQ=F0(),$Bt=Buffer.alloc,V2e=tw().Readable,sw=tw().Writable,evt=ve("string_decoder").StringDecoder,WQ=nq(),tvt=parseInt("755",8),rvt=parseInt("644",8),J2e=$Bt(1024),sq=function(){},iq=function(t,e){e&=511,e&&t.push(J2e.slice(0,512-e))};function nvt(t){switch(t&iw.S_IFMT){case iw.S_IFBLK:return"block-device";case iw.S_IFCHR:return"character-device";case iw.S_IFDIR:return"directory";case iw.S_IFIFO:return"fifo";case iw.S_IFLNK:return"symlink"}return"file"}var VQ=function(t){sw.call(this),this.written=0,this._to=t,this._destroyed=!1};KQ(VQ,sw);VQ.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};VQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var JQ=function(){sw.call(this),this.linkname="",this._decoder=new evt("utf-8"),this._destroyed=!1};KQ(JQ,sw);JQ.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};JQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var bv=function(){sw.call(this),this._destroyed=!1};KQ(bv,sw);bv.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};bv.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var CA=function(t){if(!(this instanceof CA))return new CA(t);V2e.call(this,t),this._drain=sq,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};KQ(CA,V2e);CA.prototype.entry=function(t,e,r){if(this._stream)throw new Error("already piping an entry");if(!(this._finalized||this._destroyed)){typeof e=="function"&&(r=e,e=null),r||(r=sq);var o=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=nvt(t.mode)),t.mode||(t.mode=t.type==="directory"?tvt:rvt),t.uid||(t.uid=0),t.gid||(t.gid=0),t.mtime||(t.mtime=new Date),typeof e=="string"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){t.size=e.length,this._encode(t);var a=this.push(e);return iq(o,t.size),a?process.nextTick(r):this._drain=r,new bv}if(t.type==="symlink"&&!t.linkname){var n=new JQ;return K2e(n,function(A){if(A)return o.destroy(),r(A);t.linkname=n.linkname,o._encode(t),r()}),n}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new bv;var u=new VQ(this);return this._stream=u,K2e(u,function(A){if(o._stream=null,A)return o.destroy(),r(A);if(u.written!==t.size)return o.destroy(),r(new Error("size mismatch"));iq(o,t.size),o._finalizing&&o.finalize(),r()}),u}};CA.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(J2e),this.push(null))};CA.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.destroy&&this._stream.destroy())};CA.prototype._encode=function(t){if(!t.pax){var e=WQ.encode(t);if(e){this.push(e);return}}this._encodePax(t)};CA.prototype._encodePax=function(t){var e=WQ.encodePax({name:t.name,linkname:t.linkname,pax:t.pax}),r={name:"PaxHeader",mode:t.mode,uid:t.uid,gid:t.gid,size:e.length,mtime:t.mtime,type:"pax-header",linkname:t.linkname&&"PaxHeader",uname:t.uname,gname:t.gname,devmajor:t.devmajor,devminor:t.devminor};this.push(WQ.encode(r)),this.push(e),iq(this,e.length),r.size=t.size,r.type=t.type,this.push(WQ.encode(r))};CA.prototype._read=function(t){var e=this._drain;this._drain=sq,e()};z2e.exports=CA});var Z2e=_(oq=>{oq.extract=q2e();oq.pack=X2e()});var uBe=_((ier,cBe)=>{"use strict";var vm=class{constructor(e,r,o){this.__specs=e||{},Object.keys(this.__specs).forEach(a=>{if(typeof this.__specs[a]=="string"){let n=this.__specs[a],u=this.__specs[n];if(u){let A=u.aliases||[];A.push(a,n),u.aliases=[...new Set(A)],this.__specs[a]=u}else throw new Error(`Alias refers to invalid key: ${n} -> ${a}`)}}),this.__opts=r||{},this.__providers=aBe(o.filter(a=>a!=null&&typeof a=="object")),this.__isFiggyPudding=!0}get(e){return fq(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,r=this){for(let[o,a]of this.entries())e.call(r,a,o,this)}toJSON(){let e={};return this.forEach((r,o)=>{e[o]=r}),e}*entries(e){for(let o of Object.keys(this.__specs))yield[o,this.get(o)];let r=e||this.__opts.other;if(r){let o=new Set;for(let a of this.__providers){let n=a.entries?a.entries(r):yvt(a);for(let[u,A]of n)r(u)&&!o.has(u)&&(o.add(u),yield[u,A])}}}*[Symbol.iterator](){for(let[e,r]of this.entries())yield[e,r]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new vm(this.__specs,this.__opts,aBe(this.__providers).concat(e)),lBe)}};try{let t=ve("util");vm.prototype[t.inspect.custom]=function(e,r){return this[Symbol.toStringTag]+" "+t.inspect(this.toJSON(),r)}}catch{}function dvt(t){throw Object.assign(new Error(`invalid config key requested: ${t}`),{code:"EBADKEY"})}function fq(t,e,r){let o=t.__specs[e];if(r&&!o&&(!t.__opts.other||!t.__opts.other(e)))dvt(e);else{o||(o={});let a;for(let n of t.__providers){if(a=oBe(e,n),a===void 0&&o.aliases&&o.aliases.length){for(let u of o.aliases)if(u!==e&&(a=oBe(u,n),a!==void 0))break}if(a!==void 0)break}return a===void 0&&o.default!==void 0?typeof o.default=="function"?o.default(t):o.default:a}}function oBe(t,e){let r;return e.__isFiggyPudding?r=fq(e,t,!1):typeof e.get=="function"?r=e.get(t):r=e[t],r}var lBe={has(t,e){return e in t.__specs&&fq(t,e,!1)!==void 0},ownKeys(t){return Object.keys(t.__specs)},get(t,e){return typeof e=="symbol"||e.slice(0,2)==="__"||e in vm.prototype?t[e]:t.get(e)},set(t,e,r){if(typeof e=="symbol"||e.slice(0,2)==="__")return t[e]=r,!0;throw new Error("figgyPudding options cannot be modified. Use .concat() instead.")},deleteProperty(){throw new Error("figgyPudding options cannot be deleted. Use .concat() and shadow them instead.")}};cBe.exports=mvt;function mvt(t,e){function r(...o){return new Proxy(new vm(t,e,o),lBe)}return r}function aBe(t){let e=[];return t.forEach(r=>e.unshift(r)),e}function yvt(t){return Object.keys(t).map(e=>[e,t[e]])}});var pBe=_((ser,BA)=>{"use strict";var kv=ve("crypto"),Evt=uBe(),Cvt=ve("stream").Transform,ABe=["sha256","sha384","sha512"],wvt=/^[a-z0-9+/]+(?:=?=?)$/i,Ivt=/^([^-]+)-([^?]+)([?\S*]*)$/,Bvt=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,vvt=/^[\x21-\x7E]+$/,ia=Evt({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>Fvt},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}}),_0=class{get isHash(){return!0}constructor(e,r){r=ia(r);let o=!!r.strict;this.source=e.trim();let a=this.source.match(o?Bvt:Ivt);if(!a||o&&!ABe.some(u=>u===a[1]))return;this.algorithm=a[1],this.digest=a[2];let n=a[3];this.options=n?n.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if(e=ia(e),e.strict&&!(ABe.some(o=>o===this.algorithm)&&this.digest.match(wvt)&&(this.options||[]).every(o=>o.match(vvt))))return"";let r=this.options&&this.options.length?`?${this.options.join("?")}`:"";return`${this.algorithm}-${this.digest}${r}`}},Dm=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=ia(e);let r=e.sep||" ";return e.strict&&(r=r.replace(/\S+/g," ")),Object.keys(this).map(o=>this[o].map(a=>_0.prototype.toString.call(a,e)).filter(a=>a.length).join(r)).filter(o=>o.length).join(r)}concat(e,r){r=ia(r);let o=typeof e=="string"?e:xv(e,r);return IA(`${this.toString(r)} ${o}`,r)}hexDigest(){return IA(this,{single:!0}).hexDigest()}match(e,r){r=ia(r);let o=IA(e,r),a=o.pickAlgorithm(r);return this[a]&&o[a]&&this[a].find(n=>o[a].find(u=>n.digest===u.digest))||!1}pickAlgorithm(e){e=ia(e);let r=e.pickAlgorithm,o=Object.keys(this);if(!o.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return o.reduce((a,n)=>r(a,n)||a)}};BA.exports.parse=IA;function IA(t,e){if(e=ia(e),typeof t=="string")return pq(t,e);if(t.algorithm&&t.digest){let r=new Dm;return r[t.algorithm]=[t],pq(xv(r,e),e)}else return pq(xv(t,e),e)}function pq(t,e){return e.single?new _0(t,e):t.trim().split(/\s+/).reduce((r,o)=>{let a=new _0(o,e);if(a.algorithm&&a.digest){let n=a.algorithm;r[n]||(r[n]=[]),r[n].push(a)}return r},new Dm)}BA.exports.stringify=xv;function xv(t,e){return e=ia(e),t.algorithm&&t.digest?_0.prototype.toString.call(t,e):typeof t=="string"?xv(IA(t,e),e):Dm.prototype.toString.call(t,e)}BA.exports.fromHex=Dvt;function Dvt(t,e,r){r=ia(r);let o=r.options&&r.options.length?`?${r.options.join("?")}`:"";return IA(`${e}-${Buffer.from(t,"hex").toString("base64")}${o}`,r)}BA.exports.fromData=Svt;function Svt(t,e){e=ia(e);let r=e.algorithms,o=e.options&&e.options.length?`?${e.options.join("?")}`:"";return r.reduce((a,n)=>{let u=kv.createHash(n).update(t).digest("base64"),A=new _0(`${n}-${u}${o}`,e);if(A.algorithm&&A.digest){let p=A.algorithm;a[p]||(a[p]=[]),a[p].push(A)}return a},new Dm)}BA.exports.fromStream=Pvt;function Pvt(t,e){e=ia(e);let r=e.Promise||Promise,o=hq(e);return new r((a,n)=>{t.pipe(o),t.on("error",n),o.on("error",n);let u;o.on("integrity",A=>{u=A}),o.on("end",()=>a(u)),o.on("data",()=>{})})}BA.exports.checkData=bvt;function bvt(t,e,r){if(r=ia(r),e=IA(e,r),!Object.keys(e).length){if(r.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let o=e.pickAlgorithm(r),a=kv.createHash(o).update(t).digest("base64"),n=IA({algorithm:o,digest:a}),u=n.match(e,r);if(u||!r.error)return u;if(typeof r.size=="number"&&t.length!==r.size){let A=new Error(`data size mismatch when checking ${e}. + Wanted: ${r.size} + Found: ${t.length}`);throw A.code="EBADSIZE",A.found=t.length,A.expected=r.size,A.sri=e,A}else{let A=new Error(`Integrity checksum failed when using ${o}: Wanted ${e}, but got ${n}. (${t.length} bytes)`);throw A.code="EINTEGRITY",A.found=n,A.expected=e,A.algorithm=o,A.sri=e,A}}BA.exports.checkStream=xvt;function xvt(t,e,r){r=ia(r);let o=r.Promise||Promise,a=hq(r.concat({integrity:e}));return new o((n,u)=>{t.pipe(a),t.on("error",u),a.on("error",u);let A;a.on("verified",p=>{A=p}),a.on("end",()=>n(A)),a.on("data",()=>{})})}BA.exports.integrityStream=hq;function hq(t){t=ia(t);let e=t.integrity&&IA(t.integrity,t),r=e&&Object.keys(e).length,o=r&&e.pickAlgorithm(t),a=r&&e[o],n=Array.from(new Set(t.algorithms.concat(o?[o]:[]))),u=n.map(kv.createHash),A=0,p=new Cvt({transform(h,E,I){A+=h.length,u.forEach(v=>v.update(h,E)),I(null,h,E)}}).on("end",()=>{let h=t.options&&t.options.length?`?${t.options.join("?")}`:"",E=IA(u.map((v,x)=>`${n[x]}-${v.digest("base64")}${h}`).join(" "),t),I=r&&E.match(e,t);if(typeof t.size=="number"&&A!==t.size){let v=new Error(`stream size mismatch when checking ${e}. + Wanted: ${t.size} + Found: ${A}`);v.code="EBADSIZE",v.found=A,v.expected=t.size,v.sri=e,p.emit("error",v)}else if(t.integrity&&!I){let v=new Error(`${e} integrity checksum failed when using ${o}: wanted ${a} but got ${E}. (${A} bytes)`);v.code="EINTEGRITY",v.found=E,v.expected=a,v.algorithm=o,v.sri=e,p.emit("error",v)}else p.emit("size",A),p.emit("integrity",E),I&&p.emit("verified",I)});return p}BA.exports.create=kvt;function kvt(t){t=ia(t);let e=t.algorithms,r=t.options.length?`?${t.options.join("?")}`:"",o=e.map(kv.createHash);return{update:function(a,n){return o.forEach(u=>u.update(a,n)),this},digest:function(a){return e.reduce((u,A)=>{let p=o.shift().digest("base64"),h=new _0(`${A}-${p}${r}`,t);if(h.algorithm&&h.digest){let E=h.algorithm;u[E]||(u[E]=[]),u[E].push(h)}return u},new Dm)}}}var Qvt=new Set(kv.getHashes()),fBe=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>Qvt.has(t));function Fvt(t,e){return fBe.indexOf(t.toLowerCase())>=fBe.indexOf(e.toLowerCase())?t:e}});var jBe=_((lir,HBe)=>{var FDt=lL();function RDt(t){return FDt(t)?void 0:t}HBe.exports=RDt});var qBe=_((cir,GBe)=>{var TDt=Hb(),NDt=x8(),LDt=R8(),ODt=Gd(),MDt=dd(),UDt=jBe(),_Dt=v_(),HDt=b8(),jDt=1,GDt=2,qDt=4,YDt=_Dt(function(t,e){var r={};if(t==null)return r;var o=!1;e=TDt(e,function(n){return n=ODt(n,t),o||(o=n.length>1),n}),MDt(t,HDt(t),r),o&&(r=NDt(r,jDt|GDt|qDt,UDt));for(var a=e.length;a--;)LDt(r,e[a]);return r});GBe.exports=YDt});St();Ye();St();var JBe=ve("child_process"),zBe=$e(td());jt();var AC=new Map([]);var a2={};Vt(a2,{BaseCommand:()=>ut,WorkspaceRequiredError:()=>rr,getCli:()=>$pe,getDynamicLibs:()=>Zpe,getPluginConfiguration:()=>pC,openWorkspace:()=>fC,pluginCommands:()=>AC,runExit:()=>nk});jt();var ut=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",{hidden:!0})}validateAndExecute(){if(typeof this.cwd<"u")throw new it("The --cwd option is ambiguous when used anywhere else than the very first parameter provided in the command line, before even the command path");return super.validateAndExecute()}};Ye();St();jt();var rr=class extends it{constructor(e,r){let o=V.relative(e,r),a=V.join(e,Ot.fileName);super(`This command can only be run from within a workspace of your project (${o} isn't a workspace of ${a}).`)}};Ye();St();nA();Nl();k1();jt();var RAt=$e(zn());Za();var Zpe=()=>new Map([["@yarnpkg/cli",a2],["@yarnpkg/core",o2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",rI],["@yarnpkg/shell",T1],["clipanion",hI],["semver",RAt],["typanion",Vo]]);Ye();async function fC(t,e){let{project:r,workspace:o}=await Pt.find(t,e);if(!o)throw new rr(r.cwd,e);return o}Ye();St();nA();Nl();k1();jt();var eSt=$e(zn());Za();var $8={};Vt($8,{AddCommand:()=>kh,BinCommand:()=>Qh,CacheCleanCommand:()=>Fh,ClipanionCommand:()=>Kd,ConfigCommand:()=>Lh,ConfigGetCommand:()=>Rh,ConfigSetCommand:()=>Th,ConfigUnsetCommand:()=>Nh,DedupeCommand:()=>Oh,EntryCommand:()=>mC,ExecCommand:()=>Mh,ExplainCommand:()=>Hh,ExplainPeerRequirementsCommand:()=>Uh,HelpCommand:()=>Vd,InfoCommand:()=>jh,LinkCommand:()=>qh,NodeCommand:()=>Yh,PluginCheckCommand:()=>Wh,PluginImportCommand:()=>Jh,PluginImportSourcesCommand:()=>zh,PluginListCommand:()=>Kh,PluginRemoveCommand:()=>Xh,PluginRuntimeCommand:()=>Zh,RebuildCommand:()=>$h,RemoveCommand:()=>e0,RunCommand:()=>t0,RunIndexCommand:()=>Xd,SetResolutionCommand:()=>r0,SetVersionCommand:()=>_h,SetVersionSourcesCommand:()=>Vh,UnlinkCommand:()=>n0,UpCommand:()=>Jf,VersionCommand:()=>Jd,WhyCommand:()=>i0,WorkspaceCommand:()=>a0,WorkspacesListCommand:()=>o0,YarnCommand:()=>Gh,dedupeUtils:()=>pk,default:()=>Sgt,suggestUtils:()=>zc});var kde=$e(td());Ye();Ye();Ye();jt();var _0e=$e(f2());Za();var zc={};Vt(zc,{Modifier:()=>B8,Strategy:()=>uk,Target:()=>p2,WorkspaceModifier:()=>N0e,applyModifier:()=>$ft,extractDescriptorFromPath:()=>v8,extractRangeModifier:()=>L0e,fetchDescriptorFrom:()=>D8,findProjectDescriptors:()=>U0e,getModifier:()=>h2,getSuggestedDescriptors:()=>g2,makeWorkspaceDescriptor:()=>M0e,toWorkspaceModifier:()=>O0e});Ye();Ye();St();var I8=$e(zn()),Xft="workspace:",p2=(o=>(o.REGULAR="dependencies",o.DEVELOPMENT="devDependencies",o.PEER="peerDependencies",o))(p2||{}),B8=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="",o))(B8||{}),N0e=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="*",o))(N0e||{}),uk=(n=>(n.KEEP="keep",n.REUSE="reuse",n.PROJECT="project",n.LATEST="latest",n.CACHE="cache",n))(uk||{});function h2(t,e){return t.exact?"":t.caret?"^":t.tilde?"~":e.configuration.get("defaultSemverRangePrefix")}var Zft=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function L0e(t,{project:e}){let r=t.match(Zft);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function $ft(t,e){let{protocol:r,source:o,params:a,selector:n}=W.parseRange(t.range);return I8.default.valid(n)&&(n=`${e}${t.range}`),W.makeDescriptor(t,W.makeRange({protocol:r,source:o,params:a,selector:n}))}function O0e(t){switch(t){case"^":return"^";case"~":return"~";case"":return"*";default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function M0e(t,e){return W.makeDescriptor(t.anchoredDescriptor,`${Xft}${O0e(e)}`)}async function U0e(t,{project:e,target:r}){let o=new Map,a=n=>{let u=o.get(n.descriptorHash);return u||o.set(n.descriptorHash,u={descriptor:n,locators:[]}),u};for(let n of e.workspaces)if(r==="peerDependencies"){let u=n.manifest.peerDependencies.get(t.identHash);u!==void 0&&a(u).locators.push(n.anchoredLocator)}else{let u=n.manifest.dependencies.get(t.identHash),A=n.manifest.devDependencies.get(t.identHash);r==="devDependencies"?A!==void 0?a(A).locators.push(n.anchoredLocator):u!==void 0&&a(u).locators.push(n.anchoredLocator):u!==void 0?a(u).locators.push(n.anchoredLocator):A!==void 0&&a(A).locators.push(n.anchoredLocator)}return o}async function v8(t,{cwd:e,workspace:r}){return await ept(async o=>{V.isAbsolute(t)||(t=V.relative(r.cwd,V.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:a}=r,n=await D8(W.makeIdent(null,"archive"),t,{project:r.project,cache:o,workspace:r});if(!n)throw new Error("Assertion failed: The descriptor should have been found");let u=new Qi,A=a.configuration.makeResolver(),p=a.configuration.makeFetcher(),h={checksums:a.storedChecksums,project:a,cache:o,fetcher:p,report:u,resolver:A},E=A.bindDescriptor(n,r.anchoredLocator,h),I=W.convertDescriptorToLocator(E),v=await p.fetch(I,h),x=await Ot.find(v.prefixPath,{baseFs:v.packageFs});if(!x.name)throw new Error("Target path doesn't have a name");return W.makeDescriptor(x.name,t)})}async function g2(t,{project:e,workspace:r,cache:o,target:a,fixed:n,modifier:u,strategies:A,maxResults:p=1/0}){if(!(p>=0))throw new Error(`Invalid maxResults (${p})`);let[h,E]=t.range!=="unknown"?n||kr.validRange(t.range)||!t.range.match(/^[a-z0-9._-]+$/i)?[t.range,"latest"]:["unknown",t.range]:["unknown","latest"];if(h!=="unknown")return{suggestions:[{descriptor:t,name:`Use ${W.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let I=typeof r<"u"&&r!==null&&r.manifest[a].get(t.identHash)||null,v=[],x=[],C=async R=>{try{await R()}catch(L){x.push(L)}};for(let R of A){if(v.length>=p)break;switch(R){case"keep":await C(async()=>{I&&v.push({descriptor:I,name:`Keep ${W.prettyDescriptor(e.configuration,I)}`,reason:"(no changes)"})});break;case"reuse":await C(async()=>{for(let{descriptor:L,locators:U}of(await U0e(t,{project:e,target:a})).values()){if(U.length===1&&U[0].locatorHash===r.anchoredLocator.locatorHash&&A.includes("keep"))continue;let J=`(originally used by ${W.prettyLocator(e.configuration,U[0])}`;J+=U.length>1?` and ${U.length-1} other${U.length>2?"s":""})`:")",v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:J})}});break;case"cache":await C(async()=>{for(let L of e.storedDescriptors.values())L.identHash===t.identHash&&v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:"(already used somewhere in the lockfile)"})});break;case"project":await C(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let L=e.tryWorkspaceByIdent(t);if(L===null)return;let U=M0e(L,u);v.push({descriptor:U,name:`Attach ${W.prettyDescriptor(e.configuration,U)}`,reason:`(local workspace at ${de.pretty(e.configuration,L.relativeCwd,de.Type.PATH)})`})});break;case"latest":{let L=e.configuration.get("enableNetwork"),U=e.configuration.get("enableOfflineMode");await C(async()=>{if(a==="peerDependencies")v.push({descriptor:W.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!L&&!U)v.push({descriptor:null,name:"Resolve from latest",reason:de.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let J=await D8(t,E,{project:e,cache:o,workspace:r,modifier:u});J&&v.push({descriptor:J,name:`Use ${W.prettyDescriptor(e.configuration,J)}`,reason:`(resolved from ${U?"the cache":"latest"})`})}})}break}}return{suggestions:v.slice(0,p),rejections:x.slice(0,p)}}async function D8(t,e,{project:r,cache:o,workspace:a,preserveModifier:n=!0,modifier:u}){let A=r.configuration.normalizeDependency(W.makeDescriptor(t,e)),p=new Qi,h=r.configuration.makeFetcher(),E=r.configuration.makeResolver(),I={project:r,fetcher:h,cache:o,checksums:r.storedChecksums,report:p,cacheOptions:{skipIntegrityCheck:!0}},v={...I,resolver:E,fetchOptions:I},x=E.bindDescriptor(A,a.anchoredLocator,v),C=await E.getCandidates(x,{},v);if(C.length===0)return null;let R=C[0],{protocol:L,source:U,params:J,selector:te}=W.parseRange(W.convertToManifestRange(R.reference));if(L===r.configuration.get("defaultProtocol")&&(L=null),I8.default.valid(te)){let ae=te;if(typeof u<"u")te=u+te;else if(n!==!1){let me=typeof n=="string"?n:A.range;te=L0e(me,{project:r})+te}let fe=W.makeDescriptor(R,W.makeRange({protocol:L,source:U,params:J,selector:te}));(await E.getCandidates(r.configuration.normalizeDependency(fe),{},v)).length!==1&&(te=ae)}return W.makeDescriptor(R,W.makeRange({protocol:L,source:U,params:J,selector:te}))}async function ept(t){return await oe.mktempPromise(async e=>{let r=Ke.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Lr(e,{configuration:r,check:!1,immutable:!1}))})}var kh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.dev=ge.Boolean("-D,--dev",!1,{description:"Add a package as a dev dependency"});this.peer=ge.Boolean("-P,--peer",!1,{description:"Add a package as a peer dependency"});this.optional=ge.Boolean("-O,--optional",!1,{description:"Add / upgrade a package to an optional regular / peer dependency"});this.preferDev=ge.Boolean("--prefer-dev",!1,{description:"Add / upgrade a package to a dev dependency"});this.interactive=ge.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"});this.cached=ge.Boolean("--cached",!1,{description:"Reuse the highest version already used somewhere within the project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.silent=ge.Boolean("--silent",{hidden:!0});this.packages=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=A||r.get("preferReuse"),h=h2(this,o),E=[p?"reuse":void 0,"project",this.cached?"cache":void 0,"latest"].filter(U=>typeof U<"u"),I=A?1/0:1,v=await Promise.all(this.packages.map(async U=>{let J=U.match(/^\.{0,2}\//)?await v8(U,{cwd:this.context.cwd,workspace:a}):W.tryParseDescriptor(U),te=U.match(/^(https?:|git@github)/);if(te)throw new it(`It seems you are trying to add a package using a ${de.pretty(r,`${te[0]}...`,de.Type.RANGE)} url; we now require package names to be explicitly specified. +Try running the command again with the package name prefixed: ${de.pretty(r,"yarn add",de.Type.CODE)} ${de.pretty(r,W.makeDescriptor(W.makeIdent(null,"my-package"),`${te[0]}...`),de.Type.DESCRIPTOR)}`);if(!J)throw new it(`The ${de.pretty(r,U,de.Type.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let ae=tpt(a,J,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(ae.map(async ce=>{let me=await g2(J,{project:o,workspace:a,cache:n,fixed:u,target:ce,modifier:h,strategies:E,maxResults:I});return{request:J,suggestedDescriptors:me,target:ce}}))})).then(U=>U.flat()),x=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async U=>{for(let{request:J,suggestedDescriptors:{suggestions:te,rejections:ae}}of v)if(te.filter(ce=>ce.descriptor!==null).length===0){let[ce]=ae;if(typeof ce>"u")throw new Error("Assertion failed: Expected an error to have been set");o.configuration.get("enableNetwork")?U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range`):U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),U.reportSeparator(),U.reportExceptionOnce(ce)}});if(x.hasErrors())return x.exitCode();let C=!1,R=[],L=[];for(let{suggestedDescriptors:{suggestions:U},target:J}of v){let te,ae=U.filter(he=>he.descriptor!==null),fe=ae[0].descriptor,ce=ae.every(he=>W.areDescriptorsEqual(he.descriptor,fe));ae.length===1||ce?te=fe:(C=!0,{answer:te}=await(0,_0e.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:U.map(({descriptor:he,name:Be,reason:we})=>he?{name:Be,hint:we,descriptor:he}:{name:Be,hint:we,disabled:!0}),onCancel:()=>process.exit(130),result(he){return this.find(he,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let me=a.manifest[J].get(te.identHash);(typeof me>"u"||me.descriptorHash!==te.descriptorHash)&&(a.manifest[J].set(te.identHash,te),this.optional&&(J==="dependencies"?a.manifest.ensureDependencyMeta({...te,range:"unknown"}).optional=!0:J==="peerDependencies"&&(a.manifest.ensurePeerDependencyMeta({...te,range:"unknown"}).optional=!0)),typeof me>"u"?R.push([a,J,te,E]):L.push([a,J,me,te]))}return await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyAddition,R),await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyReplacement,L),C&&this.context.stdout.write(` +`),await o.installWithNewReport({json:this.json,stdout:this.context.stdout,quiet:this.context.quiet},{cache:n,mode:this.mode})}};kh.paths=[["add"]],kh.usage=nt.Usage({description:"add dependencies to the project",details:"\n This command adds a package to the package.json for the nearest workspace.\n\n - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\n\n - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\n\n - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\n\n - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\"peerDependenciesMeta\": { \"\": { \"optional\": true } }`\n\n - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\n\n - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\n\n If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\n\n If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/protocols.\n ",examples:[["Add a regular package to the current workspace","$0 add lodash"],["Add a specific version for a package to the current workspace","$0 add lodash@1.2.3"],["Add a package from a GitHub repository (the master branch) to the current workspace using a URL","$0 add lodash@https://github.com/lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol","$0 add lodash@github:lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)","$0 add lodash@lodash/lodash"],["Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)","$0 add lodash-es@lodash/lodash#es"]]});function tpt(t,e,{dev:r,peer:o,preferDev:a,optional:n}){let u=t.manifest["dependencies"].has(e.identHash),A=t.manifest["devDependencies"].has(e.identHash),p=t.manifest["peerDependencies"].has(e.identHash);if((r||o)&&u)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(n&&A)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(n&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||a)&&n)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);let h=[];return o&&h.push("peerDependencies"),(r||a)&&h.push("devDependencies"),n&&h.push("dependencies"),h.length>0?h:A?["devDependencies"]:p?["peerDependencies"]:["dependencies"]}Ye();Ye();jt();var Qh=class extends ut{constructor(){super(...arguments);this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Print both the binary name and the locator of the package that provides the binary"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.name=ge.String({required:!1})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await Pt.find(r,this.context.cwd);if(await o.restoreInstallState(),this.name){let A=(await un.getPackageAccessibleBinaries(a,{project:o})).get(this.name);if(!A)throw new it(`Couldn't find a binary named "${this.name}" for package "${W.prettyLocator(r,a)}"`);let[,p]=A;return this.context.stdout.write(`${p} +`),0}return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async u=>{let A=await un.getPackageAccessibleBinaries(a,{project:o}),h=Array.from(A.keys()).reduce((E,I)=>Math.max(E,I.length),0);for(let[E,[I,v]]of A)u.reportJson({name:E,source:W.stringifyIdent(I),path:v});if(this.verbose)for(let[E,[I]]of A)u.reportInfo(null,`${E.padEnd(h," ")} ${W.prettyLocator(r,I)}`);else for(let E of A.keys())u.reportInfo(null,E)})).exitCode()}};Qh.paths=[["bin"]],Qh.usage=nt.Usage({description:"get the path to a binary script",details:` + When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \`-v,--verbose\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary. + + When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive. + `,examples:[["List all the available binaries","$0 bin"],["Print the path to a specific binary","$0 bin eslint"]]});Ye();St();jt();var Fh=class extends ut{constructor(){super(...arguments);this.mirror=ge.Boolean("--mirror",!1,{description:"Remove the global cache files instead of the local cache files"});this.all=ge.Boolean("--all",!1,{description:"Remove both the global cache files and the local cache files of the current project"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await Lr.find(r);return(await Nt.start({configuration:r,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&o.mirrorCwd!==null,u=!this.mirror;n&&(await oe.removePromise(o.mirrorCwd),await r.triggerHook(A=>A.cleanGlobalArtifacts,r)),u&&await oe.removePromise(o.cwd)})).exitCode()}};Fh.paths=[["cache","clean"],["cache","clear"]],Fh.usage=nt.Usage({description:"remove the shared cache files",details:` + This command will remove all the files from the cache. + `,examples:[["Remove all the local archives","$0 cache clean"],["Remove all the archives stored in the ~/.yarn directory","$0 cache clean --mirror"]]});Ye();jt();var j0e=$e(d2()),S8=ve("util"),Rh=class extends ut{constructor(){super(...arguments);this.why=ge.Boolean("--why",!1,{description:"Print the explanation for why a setting has its value"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.unsafe=ge.Boolean("--no-redacted",!1,{description:"Don't redact secrets (such as tokens) from the output"});this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=this.name.replace(/[.[].*$/,""),a=this.name.replace(/^[^.[]*/,"");if(typeof r.settings.get(o)>"u")throw new it(`Couldn't find a configuration settings named "${o}"`);let u=r.getSpecial(o,{hideSecrets:!this.unsafe,getNativePaths:!0}),A=_e.convertMapsToIndexableObjects(u),p=a?(0,j0e.default)(A,a):A,h=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async E=>{E.reportJson(p)});if(!this.json){if(typeof p=="string")return this.context.stdout.write(`${p} +`),h.exitCode();S8.inspect.styles.name="cyan",this.context.stdout.write(`${(0,S8.inspect)(p,{depth:1/0,colors:r.get("enableColors"),compact:!1})} +`)}return h.exitCode()}};Rh.paths=[["config","get"]],Rh.usage=nt.Usage({description:"read a configuration settings",details:` + This command will print a configuration setting. + + Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \`--no-redacted\` to get the untransformed value. + `,examples:[["Print a simple configuration setting","yarn config get yarnPath"],["Print a complex configuration setting","yarn config get packageExtensions"],["Print a nested field from the configuration",`yarn config get 'npmScopes["my-company"].npmRegistryServer'`],["Print a token from the configuration","yarn config get npmAuthToken --no-redacted"],["Print a configuration setting as JSON","yarn config get packageExtensions --json"]]});Ye();jt();var Fge=$e(k8()),Rge=$e(d2()),Tge=$e(Q8()),F8=ve("util"),Th=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Set complex configuration settings to JSON values"});this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String();this.value=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);if(a==="enableStrictSettings")throw new it("This setting only affects the file it's in, and thus cannot be set from the CLI");let A=this.json?JSON.parse(this.value):this.value;await(this.home?C=>Ke.updateHomeConfiguration(C):C=>Ke.updateConfiguration(o(),C))(C=>{if(n){let R=(0,Fge.default)(C);return(0,Tge.default)(R,this.name,A),R}else return{...C,[a]:A}});let E=(await Ke.find(this.context.cwd,this.context.plugins)).getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),I=_e.convertMapsToIndexableObjects(E),v=n?(0,Rge.default)(I,n):I;return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async C=>{F8.inspect.styles.name="cyan",C.reportInfo(0,`Successfully set ${this.name} to ${(0,F8.inspect)(v,{depth:1/0,colors:r.get("enableColors"),compact:!1})}`)})).exitCode()}};Th.paths=[["config","set"]],Th.usage=nt.Usage({description:"change a configuration settings",details:` + This command will set a configuration setting. + + When used without the \`--json\` flag, it can only set a simple configuration setting (a string, a number, or a boolean). + + When used with the \`--json\` flag, it can set both simple and complex configuration settings, including Arrays and Objects. + `,examples:[["Set a simple configuration setting (a string, a number, or a boolean)","yarn config set initScope myScope"],["Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag",'yarn config set initScope --json \\"myScope\\"'],["Set a complex configuration setting (an Array) using the `--json` flag",`yarn config set unsafeHttpWhitelist --json '["*.example.com", "example.com"]'`],["Set a complex configuration setting (an Object) using the `--json` flag",`yarn config set packageExtensions --json '{ "@babel/parser@*": { "dependencies": { "@babel/types": "*" } } }'`],["Set a nested configuration setting",'yarn config set npmScopes.company.npmRegistryServer "https://npm.example.com"'],["Set a nested configuration setting using indexed access for non-simple keys",`yarn config set 'npmRegistries["//npm.example.com"].npmAuthToken' "ffffffff-ffff-ffff-ffff-ffffffffffff"`]]});Ye();jt();var Yge=$e(k8()),Wge=$e(Mge()),Kge=$e(T8()),Nh=class extends ut{constructor(){super(...arguments);this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);let A=this.home?h=>Ke.updateHomeConfiguration(h):h=>Ke.updateConfiguration(o(),h);return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async h=>{let E=!1;await A(I=>{if(!(0,Wge.default)(I,this.name))return h.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),E=!0,I;let v=n?(0,Yge.default)(I):{...I};return(0,Kge.default)(v,this.name),v}),E||h.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};Nh.paths=[["config","unset"]],Nh.usage=nt.Usage({description:"unset a configuration setting",details:` + This command will unset a configuration setting. + `,examples:[["Unset a simple configuration setting","yarn config unset initScope"],["Unset a complex configuration setting","yarn config unset packageExtensions"],["Unset a nested configuration setting","yarn config unset npmScopes.company.npmRegistryServer"]]});Ye();St();jt();var fk=ve("util"),Lh=class extends ut{constructor(){super(...arguments);this.noDefaults=ge.Boolean("--no-defaults",!1,{description:"Omit the default values from the display"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.verbose=ge.Boolean("-v,--verbose",{hidden:!0});this.why=ge.Boolean("--why",{hidden:!0});this.names=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins,{strict:!1}),o=await LE({configuration:r,stdout:this.context.stdout,forceError:this.json},[{option:this.verbose,message:"The --verbose option is deprecated, the settings' descriptions are now always displayed"},{option:this.why,message:"The --why option is deprecated, the settings' sources are now always displayed"}]);if(o!==null)return o;let a=this.names.length>0?[...new Set(this.names)].sort():[...r.settings.keys()].sort(),n,u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async A=>{if(r.invalid.size>0&&!this.json){for(let[p,h]of r.invalid)A.reportError(34,`Invalid configuration key "${p}" in ${h}`);A.reportSeparator()}if(this.json)for(let p of a){let h=r.settings.get(p);typeof h>"u"&&A.reportError(34,`No configuration key named "${p}"`);let E=r.getSpecial(p,{hideSecrets:!0,getNativePaths:!0}),I=r.sources.get(p)??"",v=I&&I[0]!=="<"?ue.fromPortablePath(I):I;A.reportJson({key:p,effective:E,source:v,...h})}else{let p={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},h={},E={children:h};for(let I of a){if(this.noDefaults&&!r.sources.has(I))continue;let v=r.settings.get(I),x=r.sources.get(I)??"",C=r.getSpecial(I,{hideSecrets:!0,getNativePaths:!0}),R={Description:{label:"Description",value:de.tuple(de.Type.MARKDOWN,{text:v.description,format:this.cli.format(),paragraphs:!1})},Source:{label:"Source",value:de.tuple(x[0]==="<"?de.Type.CODE:de.Type.PATH,x)}};h[I]={value:de.tuple(de.Type.CODE,I),children:R};let L=(U,J)=>{for(let[te,ae]of J)if(ae instanceof Map){let fe={};U[te]={children:fe},L(fe,ae)}else U[te]={label:te,value:de.tuple(de.Type.NO_HINT,(0,fk.inspect)(ae,p))}};C instanceof Map?L(R,C):R.Value={label:"Value",value:de.tuple(de.Type.NO_HINT,(0,fk.inspect)(C,p))}}a.length!==1&&(n=void 0),$s.emitTree(E,{configuration:r,json:this.json,stdout:this.context.stdout,separators:2})}});if(!this.json&&typeof n<"u"){let A=a[0],p=(0,fk.inspect)(r.getSpecial(A,{hideSecrets:!0,getNativePaths:!0}),{colors:r.get("enableColors")});this.context.stdout.write(` +`),this.context.stdout.write(`${p} +`)}return u.exitCode()}};Lh.paths=[["config"]],Lh.usage=nt.Usage({description:"display the current configuration",details:` + This command prints the current active configuration settings. + `,examples:[["Print the active configuration settings","$0 config"]]});Ye();jt();Za();var pk={};Vt(pk,{Strategy:()=>m2,acceptedStrategies:()=>O0t,dedupe:()=>N8});Ye();Ye();var Vge=$e(Zo()),m2=(e=>(e.HIGHEST="highest",e))(m2||{}),O0t=new Set(Object.values(m2)),M0t={highest:async(t,e,{resolver:r,fetcher:o,resolveOptions:a,fetchOptions:n})=>{let u=new Map;for(let[p,h]of t.storedResolutions){let E=t.storedDescriptors.get(p);if(typeof E>"u")throw new Error(`Assertion failed: The descriptor (${p}) should have been registered`);_e.getSetWithDefault(u,E.identHash).add(h)}let A=new Map(_e.mapAndFilter(t.storedDescriptors.values(),p=>W.isVirtualDescriptor(p)?_e.mapAndFilter.skip:[p.descriptorHash,_e.makeDeferred()]));for(let p of t.storedDescriptors.values()){let h=A.get(p.descriptorHash);if(typeof h>"u")throw new Error(`Assertion failed: The descriptor (${p.descriptorHash}) should have been registered`);let E=t.storedResolutions.get(p.descriptorHash);if(typeof E>"u")throw new Error(`Assertion failed: The resolution (${p.descriptorHash}) should have been registered`);let I=t.originalPackages.get(E);if(typeof I>"u")throw new Error(`Assertion failed: The package (${E}) should have been registered`);Promise.resolve().then(async()=>{let v=r.getResolutionDependencies(p,a),x=Object.fromEntries(await _e.allSettledSafe(Object.entries(v).map(async([te,ae])=>{let fe=A.get(ae.descriptorHash);if(typeof fe>"u")throw new Error(`Assertion failed: The descriptor (${ae.descriptorHash}) should have been registered`);let ce=await fe.promise;if(!ce)throw new Error("Assertion failed: Expected the dependency to have been through the dedupe process itself");return[te,ce.updatedPackage]})));if(e.length&&!Vge.default.isMatch(W.stringifyIdent(p),e)||!r.shouldPersistResolution(I,a))return I;let C=u.get(p.identHash);if(typeof C>"u")throw new Error(`Assertion failed: The resolutions (${p.identHash}) should have been registered`);if(C.size===1)return I;let R=[...C].map(te=>{let ae=t.originalPackages.get(te);if(typeof ae>"u")throw new Error(`Assertion failed: The package (${te}) should have been registered`);return ae}),L=await r.getSatisfying(p,x,R,a),U=L.locators?.[0];if(typeof U>"u"||!L.sorted)return I;let J=t.originalPackages.get(U.locatorHash);if(typeof J>"u")throw new Error(`Assertion failed: The package (${U.locatorHash}) should have been registered`);return J}).then(async v=>{let x=await t.preparePackage(v,{resolver:r,resolveOptions:a});h.resolve({descriptor:p,currentPackage:I,updatedPackage:v,resolvedPackage:x})}).catch(v=>{h.reject(v)})}return[...A.values()].map(p=>p.promise)}};async function N8(t,{strategy:e,patterns:r,cache:o,report:a}){let{configuration:n}=t,u=new Qi,A=n.makeResolver(),p=n.makeFetcher(),h={cache:o,checksums:t.storedChecksums,fetcher:p,project:t,report:u,cacheOptions:{skipIntegrityCheck:!0}},E={project:t,resolver:A,report:u,fetchOptions:h};return await a.startTimerPromise("Deduplication step",async()=>{let I=M0t[e],v=await I(t,r,{resolver:A,resolveOptions:E,fetcher:p,fetchOptions:h}),x=Xs.progressViaCounter(v.length);await a.reportProgress(x);let C=0;await Promise.all(v.map(U=>U.then(J=>{if(J===null||J.currentPackage.locatorHash===J.updatedPackage.locatorHash)return;C++;let{descriptor:te,currentPackage:ae,updatedPackage:fe}=J;a.reportInfo(0,`${W.prettyDescriptor(n,te)} can be deduped from ${W.prettyLocator(n,ae)} to ${W.prettyLocator(n,fe)}`),a.reportJson({descriptor:W.stringifyDescriptor(te),currentResolution:W.stringifyLocator(ae),updatedResolution:W.stringifyLocator(fe)}),t.storedResolutions.set(te.descriptorHash,fe.locatorHash)}).finally(()=>x.tick())));let R;switch(C){case 0:R="No packages";break;case 1:R="One package";break;default:R=`${C} packages`}let L=de.pretty(n,e,de.Type.CODE);return a.reportInfo(0,`${R} can be deduped using the ${L} strategy`),C})}var Oh=class extends ut{constructor(){super(...arguments);this.strategy=ge.String("-s,--strategy","highest",{description:"The strategy to use when deduping dependencies",validator:Ks(m2)});this.check=ge.Boolean("-c,--check",!1,{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd),a=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let n=0,u=await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout,json:this.json},async A=>{n=await N8(o,{strategy:this.strategy,patterns:this.patterns,cache:a,report:A})});return u.hasErrors()?u.exitCode():this.check?n?1:0:await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:a,mode:this.mode})}};Oh.paths=[["dedupe"]],Oh.usage=nt.Usage({description:"deduplicate dependencies with overlapping ranges",details:"\n Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\n\n This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\n\n - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\n\n **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\n\n If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n ### In-depth explanation:\n\n Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\n\n Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\n ",examples:[["Dedupe all packages","$0 dedupe"],["Dedupe all packages using a specific strategy","$0 dedupe --strategy highest"],["Dedupe a specific package","$0 dedupe lodash"],["Dedupe all packages with the `@babel/*` scope","$0 dedupe '@babel/*'"],["Check for duplicates (can be used as a CI step)","$0 dedupe --check"]]});Ye();jt();var Kd=class extends ut{async execute(){let{plugins:e}=await Ke.find(this.context.cwd,this.context.plugins),r=[];for(let u of e){let{commands:A}=u[1];if(A){let h=as.from(A).definitions();r.push([u[0],h])}}let o=this.cli.definitions(),a=(u,A)=>u.split(" ").slice(1).join()===A.split(" ").slice(1).join(),n=Jge()["@yarnpkg/builder"].bundles.standard;for(let u of r){let A=u[1];for(let p of A)o.find(h=>a(h.path,p.path)).plugin={name:u[0],isDefault:n.includes(u[0])}}this.context.stdout.write(`${JSON.stringify(o,null,2)} +`)}};Kd.paths=[["--clipanion=definitions"]];var Vd=class extends ut{async execute(){this.context.stdout.write(this.cli.usage(null))}};Vd.paths=[["help"],["--help"],["-h"]];Ye();St();jt();var mC=class extends ut{constructor(){super(...arguments);this.leadingArgument=ge.String();this.args=ge.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!W.tryParseIdent(this.leadingArgument)){let r=V.resolve(this.context.cwd,ue.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:r})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}};Ye();var Jd=class extends ut{async execute(){this.context.stdout.write(`${rn||""} +`)}};Jd.paths=[["-v"],["--version"]];Ye();Ye();jt();var Mh=class extends ut{constructor(){super(...arguments);this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await Pt.find(r,this.context.cwd);return await o.restoreInstallState(),await un.executePackageShellcode(a,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:o})}};Mh.paths=[["exec"]],Mh.usage=nt.Usage({description:"execute a shell script",details:` + This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell. + + It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). + `,examples:[["Execute a single shell command","$0 exec echo Hello World"],["Execute a shell script",'$0 exec "tsc & babel src --out-dir lib"']]});Ye();jt();Za();var Uh=class extends ut{constructor(){super(...arguments);this.hash=ge.String({validator:oS(Cy(),[oI(/^p[0-9a-f]{5}$/)])})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd);return await o.restoreInstallState({restoreResolutions:!1}),await o.applyLightResolution(),await _0t(this.hash,o,{stdout:this.context.stdout})}};Uh.paths=[["explain","peer-requirements"]],Uh.usage=nt.Usage({description:"explain a set of peer requirements",details:` + A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants. + + When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not. + + When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set. + + **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\`yarn explain peer-requirements\`). + `,examples:[["Explain the corresponding set of peer requirements for a hash","$0 explain peer-requirements p1a4ed"],["List all sets of peer requirements","$0 explain peer-requirements"]]});async function _0t(t,e,r){let o=e.peerWarnings.find(n=>n.hash===t);if(typeof o>"u")throw new Error(`No peerDependency requirements found for hash: "${t}"`);return(await Nt.start({configuration:e.configuration,stdout:r.stdout,includeFooter:!1,includePrefix:!1},async n=>{let u=de.mark(e.configuration);switch(o.type){case 2:{n.reportInfo(0,`We have a problem with ${de.pretty(e.configuration,o.requested,de.Type.IDENT)}, which is provided with version ${W.prettyReference(e.configuration,o.version)}.`),n.reportInfo(0,"It is needed by the following direct dependencies of workspaces in your project:"),n.reportSeparator();for(let h of o.requesters.values()){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}let A=[...o.links.values()].filter(h=>!o.requesters.has(h.locatorHash));if(A.length>0){n.reportSeparator(),n.reportInfo(0,`However, those packages themselves have more dependencies listing ${W.prettyIdent(e.configuration,o.requested)} as peer dependency:`),n.reportSeparator();for(let h of A){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}}let p=Array.from(o.links.values(),h=>{let E=e.storedPackages.get(h.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: Expected the package to be registered");let I=E.peerDependencies.get(o.requested.identHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the ident to be registered");return I.range});if(p.length>1){let h=kr.simplifyRanges(p);n.reportSeparator(),h===null?(n.reportInfo(0,"Unfortunately, put together, we found no single range that can satisfy all those peer requirements."),n.reportInfo(0,`Your best option may be to try to upgrade some dependencies with ${de.pretty(e.configuration,"yarn up",de.Type.CODE)}, or silence the warning via ${de.pretty(e.configuration,"logFilters",de.Type.CODE)}.`)):n.reportInfo(0,`Put together, the final range we computed is ${de.pretty(e.configuration,h,de.Type.RANGE)}`)}}break;default:n.reportInfo(0,`The ${de.pretty(e.configuration,"yarn explain peer-requirements",de.Type.CODE)} command doesn't support this warning type yet.`);break}})).exitCode()}Ye();jt();Za();Ye();Ye();St();jt();var zge=$e(zn()),_h=class extends ut{constructor(){super(...arguments);this.useYarnPath=ge.Boolean("--yarn-path",{description:"Set the yarnPath setting even if the version can be accessed by Corepack"});this.onlyIfNeeded=ge.Boolean("--only-if-needed",!1,{description:"Only lock the Yarn version if it isn't already locked"});this.version=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&r.get("yarnPath")){let A=r.sources.get("yarnPath");if(!A)throw new Error("Assertion failed: Expected 'yarnPath' to have a source");let p=r.projectCwd??r.startingCwd;if(V.contains(p,A))return 0}let o=()=>{if(typeof rn>"u")throw new it("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},a,n=(A,p)=>({version:p,url:A.replace(/\{\}/g,p)});if(this.version==="self")a={url:o(),version:rn??"self"};else if(this.version==="latest"||this.version==="berry"||this.version==="stable")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await y2(r,"stable"));else if(this.version==="canary")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await y2(r,"canary"));else if(this.version==="classic")a={url:"https://classic.yarnpkg.com/latest.js",version:"classic"};else if(this.version.match(/^https?:/))a={url:this.version,version:"remote"};else if(this.version.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.version))a={url:`file://${V.resolve(ue.toPortablePath(this.version))}`,version:"file"};else if(kr.satisfiesWithPrereleases(this.version,">=2.0.0"))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",this.version);else if(kr.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))a=n("https://github.com/yarnpkg/yarn/releases/download/v{}/yarn-{}.js",this.version);else if(kr.validRange(this.version))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await H0t(r,this.version));else throw new it(`Invalid version descriptor "${this.version}"`);return(await Nt.start({configuration:r,stdout:this.context.stdout,includeLogs:!this.context.quiet},async A=>{let p=async()=>{let h="file://";return a.url.startsWith(h)?(A.reportInfo(0,`Retrieving ${de.pretty(r,a.url,de.Type.PATH)}`),await oe.readFilePromise(a.url.slice(h.length))):(A.reportInfo(0,`Downloading ${de.pretty(r,a.url,de.Type.URL)}`),await nn.get(a.url,{configuration:r}))};await L8(r,a.version,p,{report:A,useYarnPath:this.useYarnPath})})).exitCode()}};_h.paths=[["set","version"]],_h.usage=nt.Usage({description:"lock the Yarn version used by the project",details:"\n This command will set a specific release of Yarn to be used by Corepack: https://nodejs.org/api/corepack.html.\n\n By default it only will set the `packageManager` field at the root of your project, but if the referenced release cannot be represented this way, if you already have `yarnPath` configured, or if you set the `--yarn-path` command line flag, then the release will also be downloaded from the Yarn GitHub repository, stored inside your project, and referenced via the `yarnPath` settings from your project `.yarnrc.yml` file.\n\n A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\n\n The version specifier can be:\n\n - a tag:\n - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\n - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\n - `classic` -> the most recent classic (`^0.x || ^1.x`) release\n\n - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\n\n - a semver version (e.g. `2.4.1`, `1.22.1`)\n\n - a local file referenced through either a relative or absolute path\n\n - `self` -> the version used to invoke the command\n ",examples:[["Download the latest release from the Yarn repository","$0 set version latest"],["Download the latest canary release from the Yarn repository","$0 set version canary"],["Download the latest classic release from the Yarn repository","$0 set version classic"],["Download the most recent Yarn 3 build","$0 set version 3.x"],["Download a specific Yarn 2 build","$0 set version 2.0.0-rc.30"],["Switch back to a specific Yarn 1 release","$0 set version 1.22.1"],["Use a release from the local filesystem","$0 set version ./yarn.cjs"],["Use a release from a URL","$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js"],["Download the version used to invoke the command","$0 set version self"]]});async function H0t(t,e){let o=(await nn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(a=>kr.satisfiesWithPrereleases(a,e));if(o.length===0)throw new it(`No matching release found for range ${de.pretty(t,e,de.Type.RANGE)}.`);return o[0]}async function y2(t,e){let r=await nn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new it(`Tag ${de.pretty(t,e,de.Type.RANGE)} not found`);return r.latest[e]}async function L8(t,e,r,{report:o,useYarnPath:a}){let n,u=async()=>(typeof n>"u"&&(n=await r()),n);if(e===null){let te=await u();await oe.mktempPromise(async ae=>{let fe=V.join(ae,"yarn.cjs");await oe.writeFilePromise(fe,te);let{stdout:ce}=await Ur.execvp(process.execPath,[ue.fromPortablePath(fe),"--version"],{cwd:ae,env:{...t.env,YARN_IGNORE_PATH:"1"}});if(e=ce.trim(),!zge.default.valid(e))throw new Error(`Invalid semver version. ${de.pretty(t,"yarn --version",de.Type.CODE)} returned: +${e}`)})}let A=t.projectCwd??t.startingCwd,p=V.resolve(A,".yarn/releases"),h=V.resolve(p,`yarn-${e}.cjs`),E=V.relative(t.startingCwd,h),I=_e.isTaggedYarnVersion(e),v=t.get("yarnPath"),x=!I,C=x||!!v||!!a;if(a===!1){if(x)throw new zt(0,"You explicitly opted out of yarnPath usage in your command line, but the version you specified cannot be represented by Corepack");C=!1}else!C&&!process.env.COREPACK_ROOT&&(o.reportWarning(0,`You don't seem to have ${de.applyHyperlink(t,"Corepack","https://nodejs.org/api/corepack.html")} enabled; we'll have to rely on ${de.applyHyperlink(t,"yarnPath","https://yarnpkg.com/configuration/yarnrc#yarnPath")} instead`),C=!0);if(C){let te=await u();o.reportInfo(0,`Saving the new release in ${de.pretty(t,E,"magenta")}`),await oe.removePromise(V.dirname(h)),await oe.mkdirPromise(V.dirname(h),{recursive:!0}),await oe.writeFilePromise(h,te,{mode:493}),await Ke.updateConfiguration(A,{yarnPath:V.relative(A,h)})}else await oe.removePromise(V.dirname(h)),await Ke.updateConfiguration(A,{yarnPath:Ke.deleteProperty});let R=await Ot.tryFind(A)||new Ot;R.packageManager=`yarn@${I?e:await y2(t,"stable")}`;let L={};R.exportTo(L);let U=V.join(A,Ot.fileName),J=`${JSON.stringify(L,null,R.indent)} +`;return await oe.changeFilePromise(U,J,{automaticNewlines:!0}),{bundleVersion:e}}function Xge(t){return wr[AS(t)]}var j0t=/## (?YN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?
(?:.(?!##))+)/gs;async function G0t(t){let r=`https://repo.yarnpkg.com/${_e.isTaggedYarnVersion(rn)?rn:await y2(t,"canary")}/packages/gatsby/content/advanced/error-codes.md`,o=await nn.get(r,{configuration:t});return new Map(Array.from(o.toString().matchAll(j0t),({groups:a})=>{if(!a)throw new Error("Assertion failed: Expected the match to have been successful");let n=Xge(a.code);if(a.name!==n)throw new Error(`Assertion failed: Invalid error code data: Expected "${a.name}" to be named "${n}"`);return[a.code,a.details]}))}var Hh=class extends ut{constructor(){super(...arguments);this.code=ge.String({required:!1,validator:aI(Cy(),[oI(/^YN[0-9]{4}$/)])});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);if(typeof this.code<"u"){let o=Xge(this.code),a=de.pretty(r,o,de.Type.CODE),n=this.cli.format().header(`${this.code} - ${a}`),A=(await G0t(r)).get(this.code),p=typeof A<"u"?de.jsonOrPretty(this.json,r,de.tuple(de.Type.MARKDOWN,{text:A,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description. + +You can help us by editing this page on GitHub \u{1F642}: +${de.jsonOrPretty(this.json,r,de.tuple(de.Type.URL,"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md"))} +`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:o,details:p})} +`):this.context.stdout.write(`${n} + +${p} +`)}else{let o={children:_e.mapAndFilter(Object.entries(wr),([a,n])=>Number.isNaN(Number(a))?_e.mapAndFilter.skip:{label:Wu(Number(a)),value:de.tuple(de.Type.CODE,n)})};$s.emitTree(o,{configuration:r,stdout:this.context.stdout,json:this.json})}}};Hh.paths=[["explain"]],Hh.usage=nt.Usage({description:"explain an error code",details:` + When the code argument is specified, this command prints its name and its details. + + When used without arguments, this command lists all error codes and their names. + `,examples:[["Explain an error code","$0 explain YN0006"],["List all error codes","$0 explain"]]});Ye();St();jt();var Zge=$e(Zo()),jh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=ge.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=ge.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=ge.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=ge.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=ge.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=ge.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a&&!this.all)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=new Set(this.extra);this.cache&&u.add("cache"),this.dependents&&u.add("dependents"),this.manifest&&u.add("manifest");let A=(ae,{recursive:fe})=>{let ce=ae.anchoredLocator.locatorHash,me=new Map,he=[ce];for(;he.length>0;){let Be=he.shift();if(me.has(Be))continue;let we=o.storedPackages.get(Be);if(typeof we>"u")throw new Error("Assertion failed: Expected the package to be registered");if(me.set(Be,we),W.isVirtualLocator(we)&&he.push(W.devirtualizeLocator(we).locatorHash),!(!fe&&Be!==ce))for(let g of we.dependencies.values()){let Ee=o.storedResolutions.get(g.descriptorHash);if(typeof Ee>"u")throw new Error("Assertion failed: Expected the resolution to be registered");he.push(Ee)}}return me.values()},p=({recursive:ae})=>{let fe=new Map;for(let ce of o.workspaces)for(let me of A(ce,{recursive:ae}))fe.set(me.locatorHash,me);return fe.values()},h=({all:ae,recursive:fe})=>ae&&fe?o.storedPackages.values():ae?p({recursive:fe}):A(a,{recursive:fe}),E=({all:ae,recursive:fe})=>{let ce=h({all:ae,recursive:fe}),me=this.patterns.map(we=>{let g=W.parseLocator(we),Ee=Zge.default.makeRe(W.stringifyIdent(g)),Se=W.isVirtualLocator(g),le=Se?W.devirtualizeLocator(g):g;return ne=>{let ee=W.stringifyIdent(ne);if(!Ee.test(ee))return!1;if(g.reference==="unknown")return!0;let Ie=W.isVirtualLocator(ne),Fe=Ie?W.devirtualizeLocator(ne):ne;return!(Se&&Ie&&g.reference!==ne.reference||le.reference!==Fe.reference)}}),he=_e.sortMap([...ce],we=>W.stringifyLocator(we));return{selection:he.filter(we=>me.length===0||me.some(g=>g(we))),sortedLookup:he}},{selection:I,sortedLookup:v}=E({all:this.all,recursive:this.recursive});if(I.length===0)throw new it("No package matched your request");let x=new Map;if(this.dependents)for(let ae of v)for(let fe of ae.dependencies.values()){let ce=o.storedResolutions.get(fe.descriptorHash);if(typeof ce>"u")throw new Error("Assertion failed: Expected the resolution to be registered");_e.getArrayWithDefault(x,ce).push(ae)}let C=new Map;for(let ae of v){if(!W.isVirtualLocator(ae))continue;let fe=W.devirtualizeLocator(ae);_e.getArrayWithDefault(C,fe.locatorHash).push(ae)}let R={},L={children:R},U=r.makeFetcher(),J={project:o,fetcher:U,cache:n,checksums:o.storedChecksums,report:new Qi,cacheOptions:{skipIntegrityCheck:!0}},te=[async(ae,fe,ce)=>{if(!fe.has("manifest"))return;let me=await U.fetch(ae,J),he;try{he=await Ot.find(me.prefixPath,{baseFs:me.packageFs})}finally{me.releaseFs?.()}ce("Manifest",{License:de.tuple(de.Type.NO_HINT,he.license),Homepage:de.tuple(de.Type.URL,he.raw.homepage??null)})},async(ae,fe,ce)=>{if(!fe.has("cache"))return;let me=o.storedChecksums.get(ae.locatorHash)??null,he=n.getLocatorPath(ae,me),Be;if(he!==null)try{Be=await oe.statPromise(he)}catch{}let we=typeof Be<"u"?[Be.size,de.Type.SIZE]:void 0;ce("Cache",{Checksum:de.tuple(de.Type.NO_HINT,me),Path:de.tuple(de.Type.PATH,he),Size:we})}];for(let ae of I){let fe=W.isVirtualLocator(ae);if(!this.virtuals&&fe)continue;let ce={},me={value:[ae,de.Type.LOCATOR],children:ce};if(R[W.stringifyLocator(ae)]=me,this.nameOnly){delete me.children;continue}let he=C.get(ae.locatorHash);typeof he<"u"&&(ce.Instances={label:"Instances",value:de.tuple(de.Type.NUMBER,he.length)}),ce.Version={label:"Version",value:de.tuple(de.Type.NO_HINT,ae.version)};let Be=(g,Ee)=>{let Se={};if(ce[g]=Se,Array.isArray(Ee))Se.children=Ee.map(le=>({value:le}));else{let le={};Se.children=le;for(let[ne,ee]of Object.entries(Ee))typeof ee>"u"||(le[ne]={label:ne,value:ee})}};if(!fe){for(let g of te)await g(ae,u,Be);await r.triggerHook(g=>g.fetchPackageInfo,ae,u,Be)}ae.bin.size>0&&!fe&&Be("Exported Binaries",[...ae.bin.keys()].map(g=>de.tuple(de.Type.PATH,g)));let we=x.get(ae.locatorHash);typeof we<"u"&&we.length>0&&Be("Dependents",we.map(g=>de.tuple(de.Type.LOCATOR,g))),ae.dependencies.size>0&&!fe&&Be("Dependencies",[...ae.dependencies.values()].map(g=>{let Ee=o.storedResolutions.get(g.descriptorHash),Se=typeof Ee<"u"?o.storedPackages.get(Ee)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:Se})})),ae.peerDependencies.size>0&&fe&&Be("Peer dependencies",[...ae.peerDependencies.values()].map(g=>{let Ee=ae.dependencies.get(g.identHash),Se=typeof Ee<"u"?o.storedResolutions.get(Ee.descriptorHash)??null:null,le=Se!==null?o.storedPackages.get(Se)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:le})}))}$s.emitTree(L,{configuration:r,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};jh.paths=[["info"]],jh.usage=nt.Usage({description:"see information related to packages",details:"\n This command prints various information related to the specified packages, accepting glob patterns.\n\n By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\n\n Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\n\n Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\n ",examples:[["Show information about Lodash","$0 info lodash"]]});Ye();St();Nl();var hk=$e(td());jt();var O8=$e(zn());Za();var q0t=[{selector:t=>t===-1,name:"nodeLinker",value:"node-modules"},{selector:t=>t!==-1&&t<8,name:"enableGlobalCache",value:!1},{selector:t=>t!==-1&&t<8,name:"compressionLevel",value:"mixed"}],Gh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=ge.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=ge.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.refreshLockfile=ge.Boolean("--refresh-lockfile",{description:"Refresh the package metadata stored in the lockfile"});this.checkCache=ge.Boolean("--check-cache",{description:"Always refetch the packages and ensure that their checksums are consistent"});this.checkResolutions=ge.Boolean("--check-resolutions",{description:"Validates that the package resolutions are coherent"});this.inlineBuilds=ge.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.cacheFolder=ge.String("--cache-folder",{hidden:!0});this.frozenLockfile=ge.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=ge.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=ge.Boolean("--non-interactive",{hidden:!0});this.preferOffline=ge.Boolean("--prefer-offline",{hidden:!0});this.production=ge.Boolean("--production",{hidden:!0});this.registry=ge.String("--registry",{hidden:!0});this.silent=ge.Boolean("--silent",{hidden:!0});this.networkTimeout=ge.String("--network-timeout",{hidden:!0})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<"u"&&r.useWithSource("",{enableInlineBuilds:this.inlineBuilds},r.startingCwd,{overwrite:!0});let o=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=await LE({configuration:r,stdout:this.context.stdout},[{option:this.ignoreEngines,message:"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",error:!hk.default.VERCEL},{option:this.registry,message:"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file"},{option:this.preferOffline,message:"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",error:!hk.default.VERCEL},{option:this.production,message:"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",error:!0},{option:this.nonInteractive,message:"The --non-interactive option is deprecated",error:!o},{option:this.frozenLockfile,message:"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",callback:()=>this.immutable=this.frozenLockfile},{option:this.cacheFolder,message:"The cache-folder option has been deprecated; use rc settings instead",error:!hk.default.NETLIFY}]);if(a!==null)return a;let n=this.mode==="update-lockfile";if(n&&(this.immutable||this.immutableCache))throw new it(`${de.pretty(r,"--immutable",de.Type.CODE)} and ${de.pretty(r,"--immutable-cache",de.Type.CODE)} cannot be used with ${de.pretty(r,"--mode=update-lockfile",de.Type.CODE)}`);let u=(this.immutable??r.get("enableImmutableInstalls"))&&!n,A=this.immutableCache&&!n;if(r.projectCwd!==null){let R=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U=!1;await K0t(r,u)&&(L.reportInfo(48,"Automatically removed core plugins that are now builtins \u{1F44D}"),U=!0),await W0t(r,u)&&(L.reportInfo(48,"Automatically fixed merge conflicts \u{1F44D}"),U=!0),U&&L.reportSeparator()});if(R.hasErrors())return R.exitCode()}if(r.projectCwd!==null){let R=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{if(Ke.telemetry?.isNew)Ke.telemetry.commitTips(),L.reportInfo(65,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),L.reportInfo(65,`Run ${de.pretty(r,"yarn config set --home enableTelemetry 0",de.Type.CODE)} to disable`),L.reportSeparator();else if(Ke.telemetry?.shouldShowTips){let U=await nn.get("https://repo.yarnpkg.com/tags",{configuration:r,jsonResponse:!0}).catch(()=>null);if(U!==null){let J=null;if(rn!==null){let ae=O8.default.prerelease(rn)?"canary":"stable",fe=U.latest[ae];O8.default.gt(fe,rn)&&(J=[ae,fe])}if(J)Ke.telemetry.commitTips(),L.reportInfo(88,`${de.applyStyle(r,`A new ${J[0]} version of Yarn is available:`,de.Style.BOLD)} ${W.prettyReference(r,J[1])}!`),L.reportInfo(88,`Upgrade now by running ${de.pretty(r,`yarn set version ${J[1]}`,de.Type.CODE)}`),L.reportSeparator();else{let te=Ke.telemetry.selectTip(U.tips);te&&(L.reportInfo(89,de.pretty(r,te.message,de.Type.MARKDOWN_INLINE)),te.url&&L.reportInfo(89,`Learn more at ${te.url}`),L.reportSeparator())}}}});if(R.hasErrors())return R.exitCode()}let{project:p,workspace:h}=await Pt.find(r,this.context.cwd),E=p.lockfileLastVersion;if(E!==null){let R=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U={};for(let J of q0t)J.selector(E)&&typeof r.sources.get(J.name)>"u"&&(r.use("",{[J.name]:J.value},p.cwd,{overwrite:!0}),U[J.name]=J.value);Object.keys(U).length>0&&(await Ke.updateConfiguration(p.cwd,U),L.reportInfo(87,"Migrated your project to the latest Yarn version \u{1F680}"),L.reportSeparator())});if(R.hasErrors())return R.exitCode()}let I=await Lr.find(r,{immutable:A,check:this.checkCache});if(!h)throw new rr(p.cwd,this.context.cwd);await p.restoreInstallState({restoreResolutions:!1});let v=r.get("enableHardenedMode");v&&typeof r.sources.get("enableHardenedMode")>"u"&&await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async R=>{R.reportWarning(0,"Yarn detected that the current workflow is executed from a public pull request. For safety the hardened mode has been enabled."),R.reportWarning(0,`It will prevent malicious lockfile manipulations, in exchange for a slower install time. You can opt-out if necessary; check our ${de.applyHyperlink(r,"documentation","https://yarnpkg.com/features/security#hardened-mode")} for more details.`),R.reportSeparator()}),(this.refreshLockfile??v)&&(p.lockfileNeedsRefresh=!0);let x=this.checkResolutions??v;return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,forceSectionAlignment:!0,includeLogs:!0,includeVersion:!0},async R=>{await p.install({cache:I,report:R,immutable:u,checkResolutions:x,mode:this.mode})})).exitCode()}};Gh.paths=[["install"],nt.Default],Gh.usage=nt.Usage({description:"install the project dependencies",details:"\n This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of `cacheFolder` in `yarn config` to see where the cache files are stored).\n\n - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n If the `--immutable` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the `immutablePatterns` configuration setting). For backward compatibility we offer an alias under the name of `--frozen-lockfile`, but it will be removed in a later release.\n\n If the `--immutable-cache` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n If the `--refresh-lockfile` option is set, Yarn will keep the same resolution for the packages currently in the lockfile but will refresh their metadata. If used together with `--immutable`, it can validate that the lockfile information are consistent. This flag is enabled by default when Yarn detects it runs within a pull request context.\n\n If the `--check-cache` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n If the `--inline-builds` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n ",examples:[["Install the project","$0 install"],["Validate a project when using Zero-Installs","$0 install --immutable --immutable-cache"],["Validate a project when using Zero-Installs (slightly safer if you accept external PRs)","$0 install --immutable --immutable-cache --check-cache"]]});var Y0t="<<<<<<<";async function W0t(t,e){if(!t.projectCwd)return!1;let r=V.join(t.projectCwd,dr.lockfile);if(!await oe.existsPromise(r)||!(await oe.readFilePromise(r,"utf8")).includes(Y0t))return!1;if(e)throw new zt(47,"Cannot autofix a lockfile when running an immutable install");let a=await Ur.execvp("git",["rev-parse","MERGE_HEAD","HEAD"],{cwd:t.projectCwd});if(a.code!==0&&(a=await Ur.execvp("git",["rev-parse","REBASE_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0&&(a=await Ur.execvp("git",["rev-parse","CHERRY_PICK_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0)throw new zt(83,"Git returned an error when trying to find the commits pertaining to the conflict");let n=await Promise.all(a.stdout.trim().split(/\n/).map(async A=>{let p=await Ur.execvp("git",["show",`${A}:./${dr.lockfile}`],{cwd:t.projectCwd});if(p.code!==0)throw new zt(83,`Git returned an error when trying to access the lockfile content in ${A}`);try{return Ki(p.stdout)}catch{throw new zt(46,"A variant of the conflicting lockfile failed to parse")}}));n=n.filter(A=>!!A.__metadata);for(let A of n){if(A.__metadata.version<7)for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=W.parseDescriptor(p,!0),E=t.normalizeDependency(h),I=W.stringifyDescriptor(E);I!==p&&(A[I]=A[p],delete A[p])}for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=A[p].checksum;typeof h=="string"&&h.includes("/")||(A[p].checksum=`${A.__metadata.cacheKey}/${h}`)}}let u=Object.assign({},...n);u.__metadata.version=`${Math.min(...n.map(A=>parseInt(A.__metadata.version??0)))}`,u.__metadata.cacheKey="merged";for(let[A,p]of Object.entries(u))typeof p=="string"&&delete u[A];return await oe.changeFilePromise(r,Ba(u),{automaticNewlines:!0}),!0}async function K0t(t,e){if(!t.projectCwd)return!1;let r=[],o=V.join(t.projectCwd,".yarn/plugins/@yarnpkg");return await Ke.updateConfiguration(t.projectCwd,{plugins:n=>{if(!Array.isArray(n))return n;let u=n.filter(A=>{if(!A.path)return!0;let p=V.resolve(t.projectCwd,A.path),h=v1.has(A.spec)&&V.contains(o,p);return h&&r.push(p),!h});return u.length===0?Ke.deleteProperty:u.length===n.length?n:u}},{immutable:e})?(await Promise.all(r.map(async n=>{await oe.removePromise(n)})),!0):!1}Ye();St();jt();var qh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target projects to the current one"});this.private=ge.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target projects to the current one"});this.relative=ge.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destinations=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=o.topLevelWorkspace,A=[];for(let p of this.destinations){let h=V.resolve(this.context.cwd,ue.toPortablePath(p)),E=await Ke.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await Pt.find(E,h);if(o.cwd===I.cwd)throw new it(`Invalid destination '${p}'; Can't link the project to itself`);if(!v)throw new rr(I.cwd,h);if(this.all){let x=!1;for(let C of I.workspaces)C.manifest.name&&(!C.manifest.private||this.private)&&(A.push(C),x=!0);if(!x)throw new it(`No workspace found to be linked in the target project: ${p}`)}else{if(!v.manifest.name)throw new it(`The target workspace at '${p}' doesn't have a name and thus cannot be linked`);if(v.manifest.private&&!this.private)throw new it(`The target workspace at '${p}' is marked private - use the --private flag to link it anyway`);A.push(v)}}for(let p of A){let h=W.stringifyIdent(p.anchoredLocator),E=this.relative?V.relative(o.cwd,p.cwd):p.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${E}`})}return await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};qh.paths=[["link"]],qh.usage=nt.Usage({description:"connect the local project to another one",details:"\n This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\n ",examples:[["Register one or more remote workspaces for use in the current project","$0 link ~/ts-loader ~/jest"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]});jt();var Yh=class extends ut{constructor(){super(...arguments);this.args=ge.Proxy()}async execute(){return this.cli.run(["exec","node",...this.args])}};Yh.paths=[["node"]],Yh.usage=nt.Usage({description:"run node with the hook already setup",details:` + This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). + + The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version. + `,examples:[["Run a Node script","$0 node ./my-script.js"]]});Ye();jt();var Wh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await Ke.findRcFiles(this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{for(let u of o)if(!!u.data?.plugins)for(let A of u.data.plugins){if(!A.checksum||!A.spec.match(/^https?:/))continue;let p=await nn.get(A.spec,{configuration:r}),h=wn.makeHash(p);if(A.checksum===h)continue;let E=de.pretty(r,A.path,de.Type.PATH),I=de.pretty(r,A.spec,de.Type.URL),v=`${E} is different from the file provided by ${I}`;n.reportJson({...A,newChecksum:h}),n.reportError(0,v)}})).exitCode()}};Wh.paths=[["plugin","check"]],Wh.usage=nt.Usage({category:"Plugin-related commands",description:"find all third-party plugins that differ from their own spec",details:` + Check only the plugins from https. + + If this command detects any plugin differences in the CI environment, it will throw an error. + `,examples:[["find all third-party plugins that differ from their own spec","$0 plugin check"]]});Ye();Ye();St();jt();var nde=ve("os");Ye();St();jt();var $ge=ve("os");Ye();Nl();jt();var V0t="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function zd(t,e){let r=await nn.get(V0t,{configuration:t}),o=Ki(r.toString());return Object.fromEntries(Object.entries(o).filter(([a,n])=>!e||kr.satisfiesWithPrereleases(e,n.range??"<4.0.0-rc.1")))}var Kh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{let n=await zd(r,rn);for(let[u,{experimental:A,...p}]of Object.entries(n)){let h=u;A&&(h+=" [experimental]"),a.reportJson({name:u,experimental:A,...p}),a.reportInfo(null,h)}})).exitCode()}};Kh.paths=[["plugin","list"]],Kh.usage=nt.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]});var J0t=/^[0-9]+$/,z0t=process.platform==="win32";function ede(t){return J0t.test(t)?`pull/${t}/head`:t}var X0t=({repository:t,branch:e},r)=>[["git","init",ue.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",ede(e)],["git","reset","--hard","FETCH_HEAD"]],Z0t=({branch:t})=>[["git","fetch","origin","--depth=1",ede(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx","-e","packages/yarnpkg-cli/bundles"]],$0t=({plugins:t,noMinify:e},r,o)=>[["yarn","build:cli",...new Array().concat(...t.map(a=>["--plugin",V.resolve(o,a)])),...e?["--no-minify"]:[],"|"],[z0t?"move":"mv","packages/yarnpkg-cli/bundles/yarn.js",ue.fromPortablePath(r),"|"]],Vh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=ge.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"If set, the bundle will be built but not added to the project"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=ge.Boolean("--skip-plugins",!1,{description:"Skip updating the contrib plugins"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd),a=typeof this.installPath<"u"?V.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):V.resolve(ue.toPortablePath((0,$ge.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{await M8(this,{configuration:r,report:u,target:a}),u.reportSeparator(),u.reportInfo(0,"Building a fresh bundle"),u.reportSeparator();let A=await Ur.execvp("git",["rev-parse","--short","HEAD"],{cwd:a,strict:!0}),p=V.join(a,`packages/yarnpkg-cli/bundles/yarn-${A.stdout.trim()}.js`);oe.existsSync(p)||(await E2($0t(this,p,a),{configuration:r,context:this.context,target:a}),u.reportSeparator());let h=await oe.readFilePromise(p);if(!this.dryRun){let{bundleVersion:E}=await L8(r,null,async()=>h,{report:u});this.skipPlugins||await egt(this,E,{project:o,report:u,target:a})}})).exitCode()}};Vh.paths=[["set","version","from","sources"]],Vh.usage=nt.Usage({description:"build Yarn from master",details:` + This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project. + + By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \`--skip-plugins\` flag. + `,examples:[["Build Yarn from master","$0 set version from sources"]]});async function E2(t,{configuration:e,context:r,target:o}){for(let[a,...n]of t){let u=n[n.length-1]==="|";if(u&&n.pop(),u)await Ur.pipevp(a,n,{cwd:o,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${de.pretty(e,` $ ${[a,...n].join(" ")}`,"grey")} +`);try{await Ur.execvp(a,n,{cwd:o,strict:!0})}catch(A){throw r.stdout.write(A.stdout||A.stack),A}}}}async function M8(t,{configuration:e,report:r,target:o}){let a=!1;if(!t.force&&oe.existsSync(V.join(o,".git"))){r.reportInfo(0,"Fetching the latest commits"),r.reportSeparator();try{await E2(Z0t(t),{configuration:e,context:t.context,target:o}),a=!0}catch{r.reportSeparator(),r.reportWarning(0,"Repository update failed; we'll try to regenerate it")}}a||(r.reportInfo(0,"Cloning the remote repository"),r.reportSeparator(),await oe.removePromise(o),await oe.mkdirPromise(o,{recursive:!0}),await E2(X0t(t,o),{configuration:e,context:t.context,target:o}))}async function egt(t,e,{project:r,report:o,target:a}){let n=await zd(r.configuration,e),u=new Set(Object.keys(n));for(let A of r.configuration.plugins.keys())!u.has(A)||await U8(A,t,{project:r,report:o,target:a})}Ye();Ye();St();jt();var tde=$e(zn()),rde=ve("vm");var Jh=class extends ut{constructor(){super(...arguments);this.name=ge.String();this.checksum=ge.Boolean("--checksum",!0,{description:"Whether to care if this plugin is modified"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,stdout:this.context.stdout},async a=>{let{project:n}=await Pt.find(r,this.context.cwd),u,A;if(this.name.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.name)){let p=V.resolve(this.context.cwd,ue.toPortablePath(this.name));a.reportInfo(0,`Reading ${de.pretty(r,p,de.Type.PATH)}`),u=V.relative(n.cwd,p),A=await oe.readFilePromise(p)}else{let p;if(this.name.match(/^https?:/)){try{new URL(this.name)}catch{throw new zt(52,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}u=this.name,p=this.name}else{let h=W.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(h.reference!=="unknown"&&!tde.default.valid(h.reference))throw new zt(0,"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.");let E=W.stringifyIdent(h),I=await zd(r,rn);if(!Object.hasOwn(I,E)){let v=`Couldn't find a plugin named ${W.prettyIdent(r,h)} on the remote registry. +`;throw r.plugins.has(E)?v+=`A plugin named ${W.prettyIdent(r,h)} is already installed; possibly attempting to import a built-in plugin.`:v+=`Note that only the plugins referenced on our website (${de.pretty(r,"https://github.com/yarnpkg/berry/blob/master/plugins.yml",de.Type.URL)}) can be referenced by their name; any other plugin will have to be referenced through its public url (for example ${de.pretty(r,"https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js",de.Type.URL)}).`,new zt(51,v)}u=E,p=I[E].url,h.reference!=="unknown"?p=p.replace(/\/master\//,`/${E}/${h.reference}/`):rn!==null&&(p=p.replace(/\/master\//,`/@yarnpkg/cli/${rn}/`))}a.reportInfo(0,`Downloading ${de.pretty(r,p,"green")}`),A=await nn.get(p,{configuration:r})}await _8(u,A,{checksum:this.checksum,project:n,report:a})})).exitCode()}};Jh.paths=[["plugin","import"]],Jh.usage=nt.Usage({category:"Plugin-related commands",description:"download a plugin",details:` + This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations. + + Three types of plugin references are accepted: + + - If the plugin is stored within the Yarn repository, it can be referenced by name. + - Third-party plugins can be referenced directly through their public urls. + - Local plugins can be referenced by their path on the disk. + + If the \`--no-checksum\` option is set, Yarn will no longer care if the plugin is modified. + + Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \`@yarnpkg/builder\` package). + `,examples:[['Download and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import @yarnpkg/plugin-exec"],['Download and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import exec"],["Download and activate a community plugin","$0 plugin import https://example.org/path/to/plugin.js"],["Activate a local plugin","$0 plugin import ./path/to/plugin.js"]]});async function _8(t,e,{checksum:r=!0,project:o,report:a}){let{configuration:n}=o,u={},A={exports:u};(0,rde.runInNewContext)(e.toString(),{module:A,exports:u});let h=`.yarn/plugins/${A.exports.name}.cjs`,E=V.resolve(o.cwd,h);a.reportInfo(0,`Saving the new plugin in ${de.pretty(n,h,"magenta")}`),await oe.mkdirPromise(V.dirname(E),{recursive:!0}),await oe.writeFilePromise(E,e);let I={path:h,spec:t};r&&(I.checksum=wn.makeHash(e)),await Ke.addPlugin(o.cwd,[I])}var tgt=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],zh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=typeof this.installPath<"u"?V.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):V.resolve(ue.toPortablePath((0,nde.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let{project:u}=await Pt.find(r,this.context.cwd),A=W.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),p=W.stringifyIdent(A),h=await zd(r,rn);if(!Object.hasOwn(h,p))throw new zt(51,`Couldn't find a plugin named "${p}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let E=p;await M8(this,{configuration:r,report:n,target:o}),await U8(E,this,{project:u,report:n,target:o})})).exitCode()}};zh.paths=[["plugin","import","from","sources"]],zh.usage=nt.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:` + This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations. + + The plugins can be referenced by their short name if sourced from the official Yarn repository. + `,examples:[['Build and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import from sources @yarnpkg/plugin-exec"],['Build and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import from sources exec"]]});async function U8(t,{context:e,noMinify:r},{project:o,report:a,target:n}){let u=t.replace(/@yarnpkg\//,""),{configuration:A}=o;a.reportSeparator(),a.reportInfo(0,`Building a fresh ${u}`),a.reportSeparator(),await E2(tgt({pluginName:u,noMinify:r},n),{configuration:A,context:e,target:n}),a.reportSeparator();let p=V.resolve(n,`packages/${u}/bundles/${t}.js`),h=await oe.readFilePromise(p);await _8(t,h,{project:o,report:a})}Ye();St();jt();var Xh=class extends ut{constructor(){super(...arguments);this.name=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd);return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u=this.name,A=W.parseIdent(u);if(!r.plugins.has(u))throw new it(`${W.prettyIdent(r,A)} isn't referenced by the current configuration`);let p=`.yarn/plugins/${u}.cjs`,h=V.resolve(o.cwd,p);oe.existsSync(h)&&(n.reportInfo(0,`Removing ${de.pretty(r,p,de.Type.PATH)}...`),await oe.removePromise(h)),n.reportInfo(0,"Updating the configuration..."),await Ke.updateConfiguration(o.cwd,{plugins:E=>{if(!Array.isArray(E))return E;let I=E.filter(v=>v.path!==p);return I.length===0?Ke.deleteProperty:I.length===E.length?E:I}})})).exitCode()}};Xh.paths=[["plugin","remove"]],Xh.usage=nt.Usage({category:"Plugin-related commands",description:"remove a plugin",details:` + This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration. + + **Note:** The plugins have to be referenced by their name property, which can be obtained using the \`yarn plugin runtime\` command. Shorthands are not allowed. + `,examples:[["Remove a plugin imported from the Yarn repository","$0 plugin remove @yarnpkg/plugin-typescript"],["Remove a plugin imported from a local file","$0 plugin remove my-local-plugin"]]});Ye();jt();var Zh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{for(let n of r.plugins.keys()){let u=this.context.plugins.plugins.has(n),A=n;u&&(A+=" [builtin]"),a.reportJson({name:n,builtin:u}),a.reportInfo(null,`${A}`)}})).exitCode()}};Zh.paths=[["plugin","runtime"]],Zh.usage=nt.Usage({category:"Plugin-related commands",description:"list the active plugins",details:` + This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins. + `,examples:[["List the currently active plugins","$0 plugin runtime"]]});Ye();Ye();jt();var $h=class extends ut{constructor(){super(...arguments);this.idents=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=new Set;for(let A of this.idents)u.add(W.parseIdent(A).identHash);if(await o.restoreInstallState({restoreResolutions:!1}),await o.resolveEverything({cache:n,report:new Qi}),u.size>0)for(let A of o.storedPackages.values())u.has(A.identHash)&&(o.storedBuildState.delete(A.locatorHash),o.skippedBuilds.delete(A.locatorHash));else o.storedBuildState.clear(),o.skippedBuilds.clear();return await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};$h.paths=[["rebuild"]],$h.usage=nt.Usage({description:"rebuild the project's native packages",details:` + This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again. + + Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future). + + By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory. + `,examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]});Ye();Ye();Ye();jt();var H8=$e(Zo());Za();var e0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.all?o.workspaces:[a],A=["dependencies","devDependencies","peerDependencies"],p=[],h=!1,E=[];for(let C of this.patterns){let R=!1,L=W.parseIdent(C);for(let U of u){let J=[...U.manifest.peerDependenciesMeta.keys()];for(let te of(0,H8.default)(J,C))U.manifest.peerDependenciesMeta.delete(te),h=!0,R=!0;for(let te of A){let ae=U.manifest.getForScope(te),fe=[...ae.values()].map(ce=>W.stringifyIdent(ce));for(let ce of(0,H8.default)(fe,W.stringifyIdent(L))){let{identHash:me}=W.parseIdent(ce),he=ae.get(me);if(typeof he>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");U.manifest[te].delete(me),E.push([U,te,he]),h=!0,R=!0}}}R||p.push(C)}let I=p.length>1?"Patterns":"Pattern",v=p.length>1?"don't":"doesn't",x=this.all?"any":"this";if(p.length>0)throw new it(`${I} ${de.prettyList(r,p,de.Type.CODE)} ${v} match any packages referenced by ${x} workspace`);return h?(await r.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,E),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})):0}};e0.paths=[["remove"]],e0.usage=nt.Usage({description:"remove dependencies from the project",details:` + This command will remove the packages matching the specified patterns from the current workspace. + + If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are: + + - \`skip-build\` will not run the build scripts at all. Note that this is different from setting \`enableScripts\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run. + + - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost. + + This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them. + `,examples:[["Remove a dependency from the current project","$0 remove lodash"],["Remove a dependency from all workspaces at once","$0 remove lodash --all"],["Remove all dependencies starting with `eslint-`","$0 remove 'eslint-*'"],["Remove all dependencies with the `@babel` scope","$0 remove '@babel/*'"],["Remove all dependencies matching `react-dom` or `react-helmet`","$0 remove 'react-{dom,helmet}'"]]});Ye();Ye();jt();var ide=ve("util"),Xd=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);return(await Nt.start({configuration:r,stdout:this.context.stdout,json:this.json},async u=>{let A=a.manifest.scripts,p=_e.sortMap(A.keys(),I=>I),h={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},E=p.reduce((I,v)=>Math.max(I,v.length),0);for(let[I,v]of A.entries())u.reportInfo(null,`${I.padEnd(E," ")} ${(0,ide.inspect)(v,h)}`),u.reportJson({name:I,script:v})})).exitCode()}};Xd.paths=[["run"]];Ye();Ye();jt();var t0=class extends ut{constructor(){super(...arguments);this.inspect=ge.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=ge.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=ge.Boolean("-T,--top-level",!1,{description:"Check the root workspace for scripts and/or binaries instead of the current one"});this.binariesOnly=ge.Boolean("-B,--binaries-only",!1,{description:"Ignore any user defined scripts and only check for binaries"});this.require=ge.String("--require",{description:"Forwarded to the underlying Node process when executing a binary"});this.silent=ge.Boolean("--silent",{hidden:!0});this.scriptName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a,locator:n}=await Pt.find(r,this.context.cwd);await o.restoreInstallState();let u=this.topLevel?o.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await un.hasPackageScript(u,this.scriptName,{project:o}))return await un.executePackageScript(u,this.scriptName,this.args,{project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let A=await un.getPackageAccessibleBinaries(u,{project:o});if(A.get(this.scriptName)){let h=[];return this.inspect&&(typeof this.inspect=="string"?h.push(`--inspect=${this.inspect}`):h.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?h.push(`--inspect-brk=${this.inspectBrk}`):h.push("--inspect-brk")),this.require&&h.push(`--require=${this.require}`),await un.executePackageAccessibleBinary(u,this.scriptName,this.args,{cwd:this.context.cwd,project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:h,packageAccessibleBinaries:A})}if(!this.topLevel&&!this.binariesOnly&&a&&this.scriptName.includes(":")){let E=(await Promise.all(o.workspaces.map(async I=>I.manifest.scripts.has(this.scriptName)?I:null))).filter(I=>I!==null);if(E.length===1)return await un.executeWorkspaceScript(E[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}).`);{if(this.scriptName==="global")throw new it("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let h=[this.scriptName].concat(this.args);for(let[E,I]of AC)for(let v of I)if(h.length>=v.length&&JSON.stringify(h.slice(0,v.length))===JSON.stringify(v))throw new it(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${E} plugin. You can install it with "yarn plugin import ${E}".`);throw new it(`Couldn't find a script named "${this.scriptName}".`)}}};t0.paths=[["run"]],t0.usage=nt.Usage({description:"run a script defined in the package.json",details:` + This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace: + + - If the \`scripts\` field from your local package.json contains a matching script name, its definition will get executed. + + - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed. + + - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed. + + Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax). + `,examples:[["Run the tests from the local workspace","$0 run test"],['Same thing, but without the "run" keyword',"$0 test"],["Inspect Webpack while running","$0 run --inspect-brk webpack"]]});Ye();Ye();jt();var r0=class extends ut{constructor(){super(...arguments);this.descriptor=ge.String();this.resolution=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(await o.restoreInstallState({restoreResolutions:!1}),!a)throw new rr(o.cwd,this.context.cwd);let u=W.parseDescriptor(this.descriptor,!0),A=W.makeDescriptor(u,this.resolution);return o.storedDescriptors.set(u.descriptorHash,u),o.storedDescriptors.set(A.descriptorHash,A),o.resolutionAliases.set(u.descriptorHash,A.descriptorHash),await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};r0.paths=[["set","resolution"]],r0.usage=nt.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, edit the `resolutions` field in your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]});Ye();St();jt();var sde=$e(Zo()),n0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=o.topLevelWorkspace,A=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:p,reference:h}of u.manifest.resolutions)h.startsWith("portal:")&&A.add(p.descriptor.fullName);if(this.leadingArguments.length>0)for(let p of this.leadingArguments){let h=V.resolve(this.context.cwd,ue.toPortablePath(p));if(_e.isPathLike(p)){let E=await Ke.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await Pt.find(E,h);if(!v)throw new rr(I.cwd,h);if(this.all){for(let x of I.workspaces)x.manifest.name&&A.add(W.stringifyIdent(x.anchoredLocator));if(A.size===0)throw new it("No workspace found to be unlinked in the target project")}else{if(!v.manifest.name)throw new it("The target workspace doesn't have a name and thus cannot be unlinked");A.add(W.stringifyIdent(v.anchoredLocator))}}else{let E=[...u.manifest.resolutions.map(({pattern:I})=>I.descriptor.fullName)];for(let I of(0,sde.default)(E,p))A.add(I)}}return u.manifest.resolutions=u.manifest.resolutions.filter(({pattern:p})=>!A.has(p.descriptor.fullName)),await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};n0.paths=[["unlink"]],n0.usage=nt.Usage({description:"disconnect the local project from another one",details:` + This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments. + `,examples:[["Unregister a remote workspace in the current project","$0 unlink ~/ts-loader"],["Unregister all workspaces from a remote project in the current project","$0 unlink ~/jest --all"],["Unregister all previously linked workspaces","$0 unlink --all"],["Unregister all workspaces matching a glob","$0 unlink '@babel/*' 'pkg-{a,b}'"]]});Ye();Ye();Ye();jt();var ode=$e(f2()),j8=$e(Zo());Za();var Jf=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Ks(pl)});this.patterns=ge.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=[...o.storedDescriptors.values()],A=u.map(E=>W.stringifyIdent(E)),p=new Set;for(let E of this.patterns){if(W.parseDescriptor(E).range!=="unknown")throw new it("Ranges aren't allowed when using --recursive");for(let I of(0,j8.default)(A,E)){let v=W.parseIdent(I);p.add(v.identHash)}}let h=u.filter(E=>p.has(E.identHash));for(let E of h)o.storedDescriptors.delete(E.descriptorHash),o.storedResolutions.delete(E.descriptorHash);return await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}async executeUpClassic(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=h2(this,o),h=A?["keep","reuse","project","latest"]:["project","latest"],E=[],I=[];for(let L of this.patterns){let U=!1,J=W.parseDescriptor(L),te=W.stringifyIdent(J);for(let ae of o.workspaces)for(let fe of["dependencies","devDependencies"]){let me=[...ae.manifest.getForScope(fe).values()].map(Be=>W.stringifyIdent(Be)),he=te==="*"?me:(0,j8.default)(me,te);for(let Be of he){let we=W.parseIdent(Be),g=ae.manifest[fe].get(we.identHash);if(typeof g>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let Ee=W.makeDescriptor(we,J.range);E.push(Promise.resolve().then(async()=>[ae,fe,g,await g2(Ee,{project:o,workspace:ae,cache:n,target:fe,fixed:u,modifier:p,strategies:h})])),U=!0}}U||I.push(L)}if(I.length>1)throw new it(`Patterns ${de.prettyList(r,I,de.Type.CODE)} don't match any packages referenced by any workspace`);if(I.length>0)throw new it(`Pattern ${de.prettyList(r,I,de.Type.CODE)} doesn't match any packages referenced by any workspace`);let v=await Promise.all(E),x=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async L=>{for(let[,,U,{suggestions:J,rejections:te}]of v){let ae=J.filter(fe=>fe.descriptor!==null);if(ae.length===0){let[fe]=te;if(typeof fe>"u")throw new Error("Assertion failed: Expected an error to have been set");let ce=this.cli.error(fe);o.configuration.get("enableNetwork")?L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range + +${ce}`):L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range (note: network resolution has been disabled) + +${ce}`)}else ae.length>1&&!A&&L.reportError(27,`${W.prettyDescriptor(r,U)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(x.hasErrors())return x.exitCode();let C=!1,R=[];for(let[L,U,,{suggestions:J}]of v){let te,ae=J.filter(he=>he.descriptor!==null),fe=ae[0].descriptor,ce=ae.every(he=>W.areDescriptorsEqual(he.descriptor,fe));ae.length===1||ce?te=fe:(C=!0,{answer:te}=await(0,ode.prompt)({type:"select",name:"answer",message:`Which range do you want to use in ${W.prettyWorkspace(r,L)} \u276F ${U}?`,choices:J.map(({descriptor:he,name:Be,reason:we})=>he?{name:Be,hint:we,descriptor:he}:{name:Be,hint:we,disabled:!0}),onCancel:()=>process.exit(130),result(he){return this.find(he,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let me=L.manifest[U].get(te.identHash);if(typeof me>"u")throw new Error("Assertion failed: This descriptor should have a matching entry");if(me.descriptorHash!==te.descriptorHash)L.manifest[U].set(te.identHash,te),R.push([L,U,me,te]);else{let he=r.makeResolver(),Be={project:o,resolver:he},we=r.normalizeDependency(me),g=he.bindDescriptor(we,L.anchoredLocator,Be);o.forgetResolution(g)}}return await r.triggerMultipleHooks(L=>L.afterWorkspaceDependencyReplacement,R),C&&this.context.stdout.write(` +`),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}};Jf.paths=[["up"]],Jf.usage=nt.Usage({description:"upgrade dependencies across the project",details:"\n This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\n\n If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\n\n If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\n\n The, `-C,--caret`, `-E,--exact` and `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\n\n This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\n ",examples:[["Upgrade all instances of lodash to the latest release","$0 up lodash"],["Upgrade all instances of lodash to the latest release, but ask confirmation for each","$0 up lodash -i"],["Upgrade all instances of lodash to 1.2.3","$0 up lodash@1.2.3"],["Upgrade all instances of packages with the `@babel` scope to the latest release","$0 up '@babel/*'"],["Upgrade all instances of packages containing the word `jest` to the latest release","$0 up '*jest*'"],["Upgrade all instances of packages with the `@babel` scope to 7.0.0","$0 up '@babel/*@7.0.0'"]]}),Jf.schema=[cI("recursive",qu.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})];Ye();Ye();Ye();jt();var i0=class extends ut{constructor(){super(...arguments);this.recursive=ge.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=ge.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=W.parseIdent(this.package).identHash,u=this.recursive?ngt(o,n,{configuration:r,peers:this.peers}):rgt(o,n,{configuration:r,peers:this.peers});$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1})}};i0.paths=[["why"]],i0.usage=nt.Usage({description:"display the reason why a package is needed",details:` + This command prints the exact reasons why a package appears in the dependency tree. + + If \`-R,--recursive\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named "Foo" when looking for "Bar", it means that "Foo" already got printed higher in the tree. + `,examples:[["Explain why lodash is used in your project","$0 why lodash"]]});function rgt(t,e,{configuration:r,peers:o}){let a=_e.sortMap(t.storedPackages.values(),A=>W.stringifyLocator(A)),n={},u={children:n};for(let A of a){let p={};for(let E of A.dependencies.values()){if(!o&&A.peerDependencies.has(E.identHash))continue;let I=t.storedResolutions.get(E.descriptorHash);if(!I)throw new Error("Assertion failed: The resolution should have been registered");let v=t.storedPackages.get(I);if(!v)throw new Error("Assertion failed: The package should have been registered");if(v.identHash!==e)continue;{let C=W.stringifyLocator(A);n[C]={value:[A,de.Type.LOCATOR],children:p}}let x=W.stringifyLocator(v);p[x]={value:[{descriptor:E,locator:v},de.Type.DEPENDENT]}}}return u}function ngt(t,e,{configuration:r,peers:o}){let a=_e.sortMap(t.workspaces,v=>W.stringifyLocator(v.anchoredLocator)),n=new Set,u=new Set,A=v=>{if(n.has(v.locatorHash))return u.has(v.locatorHash);if(n.add(v.locatorHash),v.identHash===e)return u.add(v.locatorHash),!0;let x=!1;v.identHash===e&&(x=!0);for(let C of v.dependencies.values()){if(!o&&v.peerDependencies.has(C.identHash))continue;let R=t.storedResolutions.get(C.descriptorHash);if(!R)throw new Error("Assertion failed: The resolution should have been registered");let L=t.storedPackages.get(R);if(!L)throw new Error("Assertion failed: The package should have been registered");A(L)&&(x=!0)}return x&&u.add(v.locatorHash),x};for(let v of a)A(v.anchoredPackage);let p=new Set,h={},E={children:h},I=(v,x,C)=>{if(!u.has(v.locatorHash))return;let R=C!==null?de.tuple(de.Type.DEPENDENT,{locator:v,descriptor:C}):de.tuple(de.Type.LOCATOR,v),L={},U={value:R,children:L},J=W.stringifyLocator(v);if(x[J]=U,!p.has(v.locatorHash)&&(p.add(v.locatorHash),!(C!==null&&t.tryWorkspaceByLocator(v))))for(let te of v.dependencies.values()){if(!o&&v.peerDependencies.has(te.identHash))continue;let ae=t.storedResolutions.get(te.descriptorHash);if(!ae)throw new Error("Assertion failed: The resolution should have been registered");let fe=t.storedPackages.get(ae);if(!fe)throw new Error("Assertion failed: The package should have been registered");I(fe,L,te)}};for(let v of a)I(v.anchoredPackage,h,null);return E}Ye();var Z8={};Vt(Z8,{GitFetcher:()=>w2,GitResolver:()=>I2,default:()=>vgt,gitUtils:()=>ra});Ye();St();var ra={};Vt(ra,{TreeishProtocols:()=>C2,clone:()=>X8,fetchBase:()=>bde,fetchChangedFiles:()=>xde,fetchChangedWorkspaces:()=>Igt,fetchRoot:()=>Pde,isGitUrl:()=>CC,lsRemote:()=>Sde,normalizeLocator:()=>wgt,normalizeRepoUrl:()=>yC,resolveUrl:()=>z8,splitRepoUrl:()=>s0,validateRepoUrl:()=>J8});Ye();St();jt();var Bde=$e(Cde()),vde=$e(mU()),EC=$e(ve("querystring")),K8=$e(zn());function W8(t,e,r){let o=t.indexOf(r);return t.lastIndexOf(e,o>-1?o:1/0)}function wde(t){try{return new URL(t)}catch{return}}function Egt(t){let e=W8(t,"@","#"),r=W8(t,":","#");return r>e&&(t=`${t.slice(0,r)}/${t.slice(r+1)}`),W8(t,":","#")===-1&&t.indexOf("//")===-1&&(t=`ssh://${t}`),t}function Ide(t){return wde(t)||wde(Egt(t))}function yC(t,{git:e=!1}={}){if(t=t.replace(/^git\+https:/,"https:"),t=t.replace(/^(?:github:|https:\/\/github\.com\/|git:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\.git)?(#.*)?$/,"https://github.com/$1/$2.git$3"),t=t.replace(/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/,"https://github.com/$1/$2.git#$3"),e){let r=Ide(t);r&&(t=r.href),t=t.replace(/^git\+([^:]+):/,"$1:")}return t}function Dde(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`}}var Cgt=[/^ssh:/,/^git(?:\+[^:]+)?:/,/^(?:git\+)?https?:[^#]+\/[^#]+(?:\.git)(?:#.*)?$/,/^git@[^#]+\/[^#]+\.git(?:#.*)?$/,/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z._0-9-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\.git)?(?:#.*)?$/,/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/],C2=(a=>(a.Commit="commit",a.Head="head",a.Tag="tag",a.Semver="semver",a))(C2||{});function CC(t){return t?Cgt.some(e=>!!t.match(e)):!1}function s0(t){t=yC(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:"head",request:"HEAD"},extra:{}};let r=t.slice(0,e),o=t.slice(e+1);if(o.match(/^[a-z]+=/)){let a=EC.default.parse(o);for(let[p,h]of Object.entries(a))if(typeof h!="string")throw new Error(`Assertion failed: The ${p} parameter must be a literal string`);let n=Object.values(C2).find(p=>Object.hasOwn(a,p)),[u,A]=typeof n<"u"?[n,a[n]]:["head","HEAD"];for(let p of Object.values(C2))delete a[p];return{repo:r,treeish:{protocol:u,request:A},extra:a}}else{let a=o.indexOf(":"),[n,u]=a===-1?[null,o]:[o.slice(0,a),o.slice(a+1)];return{repo:r,treeish:{protocol:n,request:u},extra:{}}}}function wgt(t){return W.makeLocator(t,yC(t.reference))}function J8(t,{configuration:e}){let r=yC(t,{git:!0});if(!nn.getNetworkSettings(`https://${(0,Bde.default)(r).resource}`,{configuration:e}).enableNetwork)throw new zt(80,`Request to '${r}' has been blocked because of your configuration settings`);return r}async function Sde(t,e){let r=J8(t,{configuration:e}),o=await V8("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:Dde()},{configuration:e,normalizedRepoUrl:r}),a=new Map,n=/^([a-f0-9]{40})\t([^\n]+)/gm,u;for(;(u=n.exec(o.stdout))!==null;)a.set(u[2],u[1]);return a}async function z8(t,e){let{repo:r,treeish:{protocol:o,request:a},extra:n}=s0(t),u=await Sde(r,e),A=(h,E)=>{switch(h){case"commit":{if(!E.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return EC.default.stringify({...n,commit:E})}case"head":{let I=u.get(E==="HEAD"?E:`refs/heads/${E}`);if(typeof I>"u")throw new Error(`Unknown head ("${E}")`);return EC.default.stringify({...n,commit:I})}case"tag":{let I=u.get(`refs/tags/${E}`);if(typeof I>"u")throw new Error(`Unknown tag ("${E}")`);return EC.default.stringify({...n,commit:I})}case"semver":{let I=kr.validRange(E);if(!I)throw new Error(`Invalid range ("${E}")`);let v=new Map([...u.entries()].filter(([C])=>C.startsWith("refs/tags/")).map(([C,R])=>[K8.default.parse(C.slice(10)),R]).filter(C=>C[0]!==null)),x=K8.default.maxSatisfying([...v.keys()],I);if(x===null)throw new Error(`No matching range ("${E}")`);return EC.default.stringify({...n,commit:v.get(x)})}case null:{let I;if((I=p("commit",E))!==null||(I=p("tag",E))!==null||(I=p("head",E))!==null)return I;throw E.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${h}")`)}},p=(h,E)=>{try{return A(h,E)}catch{return null}};return yC(`${r}#${A(o,a)}`)}async function X8(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:o,request:a}}=s0(t);if(o!=="commit")throw new Error("Invalid treeish protocol when cloning");let n=J8(r,{configuration:e}),u=await oe.mktempPromise(),A={cwd:u,env:Dde()};return await V8("cloning the repository",["clone","-c core.autocrlf=false",n,ue.fromPortablePath(u)],A,{configuration:e,normalizedRepoUrl:n}),await V8("switching branch",["checkout",`${a}`],A,{configuration:e,normalizedRepoUrl:n}),u})}async function Pde(t){let e,r=t;do{if(e=r,await oe.existsPromise(V.join(e,".git")))return e;r=V.dirname(e)}while(r!==e);return null}async function bde(t,{baseRefs:e}){if(e.length===0)throw new it("Can't run this command with zero base refs specified.");let r=[];for(let A of e){let{code:p}=await Ur.execvp("git",["merge-base",A,"HEAD"],{cwd:t});p===0&&r.push(A)}if(r.length===0)throw new it(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:o}=await Ur.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),a=o.trim(),{stdout:n}=await Ur.execvp("git",["show","--quiet","--pretty=format:%s",a],{cwd:t,strict:!0}),u=n.trim();return{hash:a,title:u}}async function xde(t,{base:e,project:r}){let o=_e.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:a}=await Ur.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),n=a.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>V.resolve(t,ue.toPortablePath(h))),{stdout:u}=await Ur.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),A=u.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>V.resolve(t,ue.toPortablePath(h))),p=[...new Set([...n,...A].sort())];return o?p.filter(h=>!V.relative(r.cwd,h).match(o)):p}async function Igt({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let r=[V.resolve(e.cwd,dr.lockfile),V.resolve(e.cwd,e.configuration.get("cacheFolder")),V.resolve(e.cwd,e.configuration.get("installStatePath")),V.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(u=>u.populateYarnPaths,e,u=>{u!=null&&r.push(u)});let o=await Pde(e.configuration.projectCwd);if(o==null)throw new it("This command can only be run on Git repositories");let a=await bde(o,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),n=await xde(o,{base:a.hash,project:e});return new Set(_e.mapAndFilter(n,u=>{let A=e.tryWorkspaceByFilePath(u);return A===null?_e.mapAndFilter.skip:r.some(p=>u.startsWith(p))?_e.mapAndFilter.skip:A}))}async function V8(t,e,r,{configuration:o,normalizedRepoUrl:a}){try{return await Ur.execvp("git",e,{...r,strict:!0})}catch(n){if(!(n instanceof Ur.ExecError))throw n;let u=n.reportExtra,A=n.stderr.toString();throw new zt(1,`Failed ${t}`,p=>{p.reportError(1,` ${de.prettyField(o,{label:"Repository URL",value:de.tuple(de.Type.URL,a)})}`);for(let h of A.matchAll(/^(.+?): (.*)$/gm)){let[,E,I]=h;E=E.toLowerCase();let v=E==="error"?"Error":`${(0,vde.default)(E)} Error`;p.reportError(1,` ${de.prettyField(o,{label:v,value:de.tuple(de.Type.NO_HINT,I)})}`)}u?.(p)})}}var w2=class{supports(e,r){return CC(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,a=new Map(r.checksums);a.set(e.locatorHash,o);let n={...r,checksums:a},u=await this.downloadHosted(e,n);if(u!==null)return u;let[A,p,h]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(e,n),...r.cacheOptions});return{packageFs:A,releaseFs:p,prefixPath:W.getIdentVendorPath(e),checksum:h}}async downloadHosted(e,r){return r.project.configuration.reduceHook(o=>o.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let o=await X8(e.reference,r.project.configuration),a=s0(e.reference),n=V.join(o,"package.tgz");await un.prepareExternalProject(o,n,{configuration:r.project.configuration,report:r.report,workspace:a.extra.workspace,locator:e});let u=await oe.readFilePromise(n);return await _e.releaseAfterUseAsync(async()=>await Xi.convertToZip(u,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1}))}};Ye();Ye();var I2=class{supportsDescriptor(e,r){return CC(e.range)}supportsLocator(e,r){return CC(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=await z8(e.range,o.project.configuration);return[W.makeLocator(e,a)]}async getSatisfying(e,r,o,a){let n=s0(e.range);return{locators:o.filter(A=>{if(A.identHash!==e.identHash)return!1;let p=s0(A.reference);return!(n.repo!==p.repo||n.treeish.protocol==="commit"&&n.treeish.request!==p.treeish.request)}),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var Bgt={configuration:{changesetBaseRefs:{description:"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.",type:"STRING",isArray:!0,isNullable:!1,default:["master","origin/master","upstream/master","main","origin/main","upstream/main"]},changesetIgnorePatterns:{description:"Array of glob patterns; files matching them will be ignored when fetching the changed files",type:"STRING",default:[],isArray:!0},cloneConcurrency:{description:"Maximal number of concurrent clones",type:"NUMBER",default:2}},fetchers:[w2],resolvers:[I2]};var vgt=Bgt;jt();var o0=class extends ut{constructor(){super(...arguments);this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.noPrivate=ge.Boolean("--no-private",{description:"Exclude workspaces that have the private field set to true"});this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{let u=this.since?await ra.fetchChangedWorkspaces({ref:this.since,project:o}):o.workspaces,A=new Set(u);if(this.recursive)for(let p of[...u].map(h=>h.getRecursiveWorkspaceDependents()))for(let h of p)A.add(h);for(let p of A){let{manifest:h}=p;if(h.private&&this.noPrivate)continue;let E;if(this.verbose){let I=new Set,v=new Set;for(let x of Ot.hardDependencies)for(let[C,R]of h.getForScope(x)){let L=o.tryWorkspaceByDescriptor(R);L===null?o.workspacesByIdent.has(C)&&v.add(R):I.add(L)}E={workspaceDependencies:Array.from(I).map(x=>x.relativeCwd),mismatchedWorkspaceDependencies:Array.from(v).map(x=>W.stringifyDescriptor(x))}}n.reportInfo(null,`${p.relativeCwd}`),n.reportJson({location:p.relativeCwd,name:h.name?W.stringifyIdent(h.name):null,...E})}})).exitCode()}};o0.paths=[["workspaces","list"]],o0.usage=nt.Usage({category:"Workspace-related commands",description:"list all available workspaces",details:"\n This command will print the list of all workspaces in the project.\n\n - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\n\n - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\n "});Ye();Ye();jt();var a0=class extends ut{constructor(){super(...arguments);this.workspaceName=ge.String();this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=o.workspaces,u=new Map(n.map(p=>[W.stringifyIdent(p.anchoredLocator),p])),A=u.get(this.workspaceName);if(A===void 0){let p=Array.from(u.keys()).sort();throw new it(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: + - ${p.join(` + - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:A.cwd})}};a0.paths=[["workspace"]],a0.usage=nt.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:` + This command will run a given sub-command on a single workspace. + `,examples:[["Add a package to a single workspace","yarn workspace components add -D react"],["Run build script on a single workspace","yarn workspace components run build"]]});var Dgt={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:"BOOLEAN",default:kde.isCI},defaultSemverRangePrefix:{description:"The default save prefix: '^', '~' or ''",type:"STRING",values:["^","~",""],default:"^"},preferReuse:{description:"If true, `yarn add` will attempt to reuse the most common dependency range in other workspaces.",type:"BOOLEAN",default:!1}},commands:[Fh,Rh,Th,Nh,r0,Vh,_h,o0,Kd,Vd,mC,Jd,kh,Qh,Lh,Oh,Mh,Uh,Hh,jh,Gh,qh,n0,Yh,Wh,zh,Jh,Xh,Kh,Zh,$h,e0,Xd,t0,Jf,i0,a0]},Sgt=Dgt;var iH={};Vt(iH,{default:()=>bgt});Ye();var kt={optional:!0},eH=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{["supports-color"]:kt}}],["got@<11",{dependencies:{["@types/responselike"]:"^1.0.0",["@types/keyv"]:"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{["@types/keyv"]:"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{["vscode-jsonrpc"]:"^5.0.1",["vscode-languageserver-protocol"]:"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{["postcss-html"]:kt,["postcss-jsx"]:kt,["postcss-less"]:kt,["postcss-markdown"]:kt,["postcss-scss"]:kt}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{["tiny-warning"]:"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:kt}}],["snowpack@>=3.3.0",{dependencies:{["node-gyp"]:"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:kt}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@<=0.5.2",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@<=6.3.4",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:kt,"vue-template-compiler":kt}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:kt,"utf-8-validate":kt}}],["react-portal@<4.2.2",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{["babel-polyfill"]:"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{["cross-spawn"]:"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@<=4.6.0-next.3",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@<=5.6.0-next.0",{dependencies:{["prop-types"]:"^15.7.2"}}],["@rebass/forms@*",{dependencies:{["@styled-system/should-forward-prop"]:"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt,"vuetify-loader":kt}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["vue-cli-plugin-vuetify@>=2.4.3",{peerDependencies:{vue:"*"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":kt}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":kt}}],["consolidate@<0.16.0",{peerDependencies:{mustache:"^3.0.0"},peerDependenciesMeta:{mustache:kt}}],["consolidate@<=0.16.0",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:kt,tinyliquid:kt,"liquid-node":kt,jade:kt,"then-jade":kt,dust:kt,"dustjs-helpers":kt,"dustjs-linkedin":kt,swig:kt,"swig-templates":kt,"razor-tmpl":kt,atpl:kt,liquor:kt,twig:kt,ejs:kt,eco:kt,jazz:kt,jqtpl:kt,hamljs:kt,hamlet:kt,whiskers:kt,"haml-coffee":kt,"hogan.js":kt,templayed:kt,handlebars:kt,underscore:kt,lodash:kt,pug:kt,"then-pug":kt,qejs:kt,walrus:kt,mustache:kt,just:kt,ect:kt,mote:kt,toffee:kt,dot:kt,"bracket-template":kt,ractive:kt,nunjucks:kt,htmling:kt,"babel-core":kt,plates:kt,"react-dom":kt,react:kt,"arc-templates":kt,vash:kt,slm:kt,marko:kt,teacup:kt,"coffee-script":kt,squirrelly:kt,twing:kt}}],["vue-loader@<=16.3.3",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"},peerDependenciesMeta:{"@vue/compiler-sfc":kt}}],["vue-loader@^16.7.0",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",vue:"^3.2.13"},peerDependenciesMeta:{"@vue/compiler-sfc":kt,vue:kt}}],["scss-parser@<=1.0.5",{dependencies:{lodash:"^4.17.21"}}],["query-ast@<1.0.5",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}],["skypack@<=0.3.2",{dependencies:{tar:"^6.1.0"}}],["@npmcli/metavuln-calculator@<2.0.0",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@<2.3.0",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@<=0.8.0",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@<3.8.6",{dependencies:{"magic-string":"^0.25.7"}}],["elm-webpack-loader@*",{dependencies:{temp:"^0.9.4"}}],["winston-transport@<=4.4.0",{dependencies:{logform:"^2.2.0"}}],["jest-vue-preprocessor@*",{dependencies:{"@babel/core":"7.8.7","@babel/template":"7.8.6"},peerDependencies:{pug:"^2.0.4"},peerDependenciesMeta:{pug:kt}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:kt}}],["sodium@>=3",{dependencies:{"node-gyp":"^3.8.0"}}],["babel-plugin-graphql-tag@<=3.1.0",{peerDependencies:{graphql:"^14.0.0 || ^15.0.0"}}],["@playwright/test@<=1.14.1",{dependencies:{"jest-matcher-utils":"^26.4.2"}}],...["babel-plugin-remove-graphql-queries@<3.14.0-next.1","babel-preset-gatsby-package@<1.14.0-next.1","create-gatsby@<1.14.0-next.1","gatsby-admin@<0.24.0-next.1","gatsby-cli@<3.14.0-next.1","gatsby-core-utils@<2.14.0-next.1","gatsby-design-tokens@<3.14.0-next.1","gatsby-legacy-polyfills@<1.14.0-next.1","gatsby-plugin-benchmark-reporting@<1.14.0-next.1","gatsby-plugin-graphql-config@<0.23.0-next.1","gatsby-plugin-image@<1.14.0-next.1","gatsby-plugin-mdx@<2.14.0-next.1","gatsby-plugin-netlify-cms@<5.14.0-next.1","gatsby-plugin-no-sourcemaps@<3.14.0-next.1","gatsby-plugin-page-creator@<3.14.0-next.1","gatsby-plugin-preact@<5.14.0-next.1","gatsby-plugin-preload-fonts@<2.14.0-next.1","gatsby-plugin-schema-snapshot@<2.14.0-next.1","gatsby-plugin-styletron@<6.14.0-next.1","gatsby-plugin-subfont@<3.14.0-next.1","gatsby-plugin-utils@<1.14.0-next.1","gatsby-recipes@<0.25.0-next.1","gatsby-source-shopify@<5.6.0-next.1","gatsby-source-wikipedia@<3.14.0-next.1","gatsby-transformer-screenshot@<3.14.0-next.1","gatsby-worker@<0.5.0-next.1"].map(t=>[t,{dependencies:{"@babel/runtime":"^7.14.8"}}]),["gatsby-core-utils@<2.14.0-next.1",{dependencies:{got:"8.3.2"}}],["gatsby-plugin-gatsby-cloud@<=3.1.0-next.0",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["gatsby-plugin-gatsby-cloud@<=3.2.0-next.1",{peerDependencies:{webpack:"*"}}],["babel-plugin-remove-graphql-queries@<=3.14.0-next.1",{dependencies:{"gatsby-core-utils":"^2.8.0-next.1"}}],["gatsby-plugin-netlify@3.13.0-next.1",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["clipanion-v3-codemod@<=0.2.0",{peerDependencies:{jscodeshift:"^0.11.0"}}],["react-live@*",{peerDependencies:{"react-dom":"*",react:"*"}}],["webpack@<4.44.1",{peerDependenciesMeta:{"webpack-cli":kt,"webpack-command":kt}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":kt}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":kt}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:kt,jimp:kt}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":kt,"eslint-import-resolver-typescript":kt,"eslint-import-resolver-webpack":kt,"@typescript-eslint/parser":kt}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":kt}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":kt}}],["terser@<=5.10.0",{dependencies:{acorn:"^8.5.0"}}],["babel-preset-react-app@10.0.x <10.0.2",{dependencies:{"@babel/plugin-proposal-private-property-in-object":"^7.16.7"}}],["eslint-config-react-app@*",{peerDependenciesMeta:{typescript:kt}}],["@vue/eslint-config-typescript@<11.0.0",{peerDependenciesMeta:{typescript:kt}}],["unplugin-vue2-script-setup@<0.9.1",{peerDependencies:{"@vue/composition-api":"^1.4.3","@vue/runtime-dom":"^3.2.26"}}],["@cypress/snapshot@*",{dependencies:{debug:"^3.2.7"}}],["auto-relay@<=0.14.0",{peerDependencies:{"reflect-metadata":"^0.1.13"}}],["vue-template-babel-compiler@<1.2.0",{peerDependencies:{["vue-template-compiler"]:"^2.6.0"}}],["@parcel/transformer-image@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["@parcel/transformer-js@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["parcel@*",{peerDependenciesMeta:{["@parcel/core"]:kt}}],["react-scripts@*",{peerDependencies:{eslint:"*"}}],["focus-trap-react@^8.0.0",{dependencies:{tabbable:"^5.3.2"}}],["react-rnd@<10.3.7",{peerDependencies:{react:">=16.3.0","react-dom":">=16.3.0"}}],["connect-mongo@<5.0.0",{peerDependencies:{"express-session":"^1.17.1"}}],["vue-i18n@<9",{peerDependencies:{vue:"^2"}}],["vue-router@<4",{peerDependencies:{vue:"^2"}}],["unified@<10",{dependencies:{"@types/unist":"^2.0.0"}}],["react-github-btn@<=1.3.0",{peerDependencies:{react:">=16.3.0"}}],["react-dev-utils@*",{peerDependencies:{typescript:">=2.7",webpack:">=4"},peerDependenciesMeta:{typescript:kt}}],["@asyncapi/react-component@<=1.0.0-next.39",{peerDependencies:{react:">=16.8.0","react-dom":">=16.8.0"}}],["xo@*",{peerDependencies:{webpack:">=1.11.0"},peerDependenciesMeta:{webpack:kt}}],["babel-plugin-remove-graphql-queries@<=4.20.0-next.0",{dependencies:{"@babel/types":"^7.15.4"}}],["gatsby-plugin-page-creator@<=4.20.0-next.1",{dependencies:{"fs-extra":"^10.1.0"}}],["gatsby-plugin-utils@<=3.14.0-next.1",{dependencies:{fastq:"^1.13.0"},peerDependencies:{graphql:"^15.0.0"}}],["gatsby-plugin-mdx@<3.1.0-next.1",{dependencies:{mkdirp:"^1.0.4"}}],["gatsby-plugin-mdx@^2",{peerDependencies:{gatsby:"^3.0.0-next"}}],["fdir@<=5.2.0",{peerDependencies:{picomatch:"2.x"},peerDependenciesMeta:{picomatch:kt}}],["babel-plugin-transform-typescript-metadata@<=0.3.2",{peerDependencies:{"@babel/core":"^7","@babel/traverse":"^7"},peerDependenciesMeta:{"@babel/traverse":kt}}],["graphql-compose@>=9.0.10",{peerDependencies:{graphql:"^14.2.0 || ^15.0.0 || ^16.0.0"}}],["vite-plugin-vuetify@<=1.0.2",{peerDependencies:{vue:"^3.0.0"}}],["webpack-plugin-vuetify@<=2.0.1",{peerDependencies:{vue:"^3.2.6"}}]];var tH;function Qde(){return typeof tH>"u"&&(tH=ve("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),tH}var rH;function Fde(){return typeof rH>"u"&&(rH=ve("zlib").brotliDecompressSync(Buffer.from("G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=","base64")).toString()),rH}var nH;function Rde(){return typeof nH>"u"&&(nH=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),nH}var Tde=new Map([[W.makeIdent(null,"fsevents").identHash,Qde],[W.makeIdent(null,"resolve").identHash,Fde],[W.makeIdent(null,"typescript").identHash,Rde]]),Pgt={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,o]of eH)e(W.parseDescriptor(r,!0),o)},getBuiltinPatch:async(t,e)=>{let r="compat/";if(!e.startsWith(r))return;let o=W.parseIdent(e.slice(r.length)),a=Tde.get(o.identHash)?.();return typeof a<"u"?a:null},reduceDependency:async(t,e,r,o)=>typeof Tde.get(t.identHash)>"u"?t:W.makeDescriptor(t,W.makeRange({protocol:"patch:",source:W.stringifyDescriptor(t),selector:`optional!builtin`,params:null}))}},bgt=Pgt;var wH={};Vt(wH,{ConstraintsCheckCommand:()=>h0,ConstraintsQueryCommand:()=>f0,ConstraintsSourceCommand:()=>p0,default:()=>tdt});Ye();Ye();v2();var IC=class{constructor(e){this.project=e}createEnvironment(){let e=new wC(["cwd","ident"]),r=new wC(["workspace","type","ident"]),o=new wC(["ident"]),a={manifestUpdates:new Map,reportedErrors:new Map},n=new Map,u=new Map;for(let A of this.project.storedPackages.values()){let p=Array.from(A.peerDependencies.values(),h=>[W.stringifyIdent(h),h.range]);n.set(A.locatorHash,{workspace:null,ident:W.stringifyIdent(A),version:A.version,dependencies:new Map,peerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional!==!0)),optionalPeerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional===!0))})}for(let A of this.project.storedPackages.values()){let p=n.get(A.locatorHash);p.dependencies=new Map(Array.from(A.dependencies.values(),h=>{let E=this.project.storedResolutions.get(h.descriptorHash);if(typeof E>"u")throw new Error("Assertion failed: The resolution should have been registered");let I=n.get(E);if(typeof I>"u")throw new Error("Assertion failed: The package should have been registered");return[W.stringifyIdent(h),I]})),p.dependencies.delete(p.ident)}for(let A of this.project.workspaces){let p=W.stringifyIdent(A.anchoredLocator),h=A.manifest.exportTo({}),E=n.get(A.anchoredLocator.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");let I=(R,L,{caller:U=Ji.getCaller()}={})=>{let J=B2(R),te=_e.getMapWithDefault(a.manifestUpdates,A.cwd),ae=_e.getMapWithDefault(te,J),fe=_e.getSetWithDefault(ae,L);U!==null&&fe.add(U)},v=R=>I(R,void 0,{caller:Ji.getCaller()}),x=R=>{_e.getArrayWithDefault(a.reportedErrors,A.cwd).push(R)},C=e.insert({cwd:A.relativeCwd,ident:p,manifest:h,pkg:E,set:I,unset:v,error:x});u.set(A,C);for(let R of Ot.allDependencies)for(let L of A.manifest[R].values()){let U=W.stringifyIdent(L),J=()=>{I([R,U],void 0,{caller:Ji.getCaller()})},te=fe=>{I([R,U],fe,{caller:Ji.getCaller()})},ae=null;if(R!=="peerDependencies"&&(R!=="dependencies"||!A.manifest.devDependencies.has(L.identHash))){let fe=A.anchoredPackage.dependencies.get(L.identHash);if(fe){if(typeof fe>"u")throw new Error("Assertion failed: The dependency should have been registered");let ce=this.project.storedResolutions.get(fe.descriptorHash);if(typeof ce>"u")throw new Error("Assertion failed: The resolution should have been registered");let me=n.get(ce);if(typeof me>"u")throw new Error("Assertion failed: The package should have been registered");ae=me}}r.insert({workspace:C,ident:U,range:L.range,type:R,resolution:ae,update:te,delete:J,error:x})}}for(let A of this.project.storedPackages.values()){let p=this.project.tryWorkspaceByLocator(A);if(!p)continue;let h=u.get(p);if(typeof h>"u")throw new Error("Assertion failed: The workspace should have been registered");let E=n.get(A.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");E.workspace=h}return{workspaces:e,dependencies:r,packages:o,result:a}}async process(){let e=this.createEnvironment(),r={Yarn:{workspace:a=>e.workspaces.find(a)[0]??null,workspaces:a=>e.workspaces.find(a),dependency:a=>e.dependencies.find(a)[0]??null,dependencies:a=>e.dependencies.find(a),package:a=>e.packages.find(a)[0]??null,packages:a=>e.packages.find(a)}},o=await this.project.loadUserConfig();return o?.constraints?(await o.constraints(r),e.result):null}};Ye();Ye();jt();var f0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.query=ge.String()}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(x2(),b2)),o=await Ke.find(this.context.cwd,this.context.plugins),{project:a}=await Pt.find(o,this.context.cwd),n=await r.find(a),u=this.query;return u.endsWith(".")||(u=`${u}.`),(await Nt.start({configuration:o,json:this.json,stdout:this.context.stdout},async p=>{for await(let h of n.query(u)){let E=Array.from(Object.entries(h)),I=E.length,v=E.reduce((x,[C])=>Math.max(x,C.length),0);for(let x=0;x(x2(),b2)),o=await Ke.find(this.context.cwd,this.context.plugins),{project:a}=await Pt.find(o,this.context.cwd),n=await r.find(a);this.context.stdout.write(this.verbose?n.fullSource:n.source)}};p0.paths=[["constraints","source"]],p0.usage=nt.Usage({category:"Constraints-related commands",description:"print the source code for the constraints",details:"\n This command will print the Prolog source code used by the constraints engine. Adding the `-v,--verbose` flag will print the *full* source code, including the fact database automatically compiled from the workspace manifests.\n ",examples:[["Prints the source code","yarn constraints source"],["Print the source code and the fact database","yarn constraints source -v"]]});Ye();Ye();jt();v2();var h0=class extends ut{constructor(){super(...arguments);this.fix=ge.Boolean("--fix",!1,{description:"Attempt to automatically fix unambiguous issues, following a multi-pass process"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd);await o.restoreInstallState();let a=await o.loadUserConfig(),n;if(a?.constraints)n=new IC(o);else{let{Constraints:h}=await Promise.resolve().then(()=>(x2(),b2));n=await h.find(o)}let u,A=!1,p=!1;for(let h=this.fix?10:1;h>0;--h){let E=await n.process();if(!E)break;let{changedWorkspaces:I,remainingErrors:v}=gk(o,E,{fix:this.fix}),x=[];for(let[C,R]of I){let L=C.manifest.indent;C.manifest=new Ot,C.manifest.indent=L,C.manifest.load(R),x.push(C.persistManifest())}if(await Promise.all(x),!(I.size>0&&h>1)){u=Hde(v,{configuration:r}),A=!1,p=!0;for(let[,C]of v)for(let R of C)R.fixable?A=!0:p=!1}}if(u.children.length===0)return 0;if(A){let h=p?`Those errors can all be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`:`Errors prefixed by '\u2699' can be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`;await Nt.start({configuration:r,stdout:this.context.stdout,includeNames:!1,includeFooter:!1},async E=>{E.reportInfo(0,h),E.reportSeparator()})}return u.children=_e.sortMap(u.children,h=>h.value[1]),$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1}),1}};h0.paths=[["constraints"]],h0.usage=nt.Usage({category:"Constraints-related commands",description:"check that the project constraints are met",details:` + This command will run constraints on your project and emit errors for each one that is found but isn't met. If any error is emitted the process will exit with a non-zero exit code. + + If the \`--fix\` flag is used, Yarn will attempt to automatically fix the issues the best it can, following a multi-pass process (with a maximum of 10 iterations). Some ambiguous patterns cannot be autofixed, in which case you'll have to manually specify the right resolution. + + For more information as to how to write constraints, please consult our dedicated page on our website: https://yarnpkg.com/features/constraints. + `,examples:[["Check that all constraints are satisfied","yarn constraints"],["Autofix all unmet constraints","yarn constraints --fix"]]});v2();var edt={configuration:{enableConstraintsChecks:{description:"If true, constraints will run during installs",type:"BOOLEAN",default:!1},constraintsPath:{description:"The path of the constraints file.",type:"ABSOLUTE_PATH",default:"./constraints.pro"}},commands:[f0,p0,h0],hooks:{async validateProjectAfterInstall(t,{reportError:e}){if(!t.configuration.get("enableConstraintsChecks"))return;let r=await t.loadUserConfig(),o;if(r?.constraints)o=new IC(t);else{let{Constraints:u}=await Promise.resolve().then(()=>(x2(),b2));o=await u.find(t)}let a=await o.process();if(!a)return;let{remainingErrors:n}=gk(t,a);if(n.size!==0)if(t.configuration.isCI)for(let[u,A]of n)for(let p of A)e(84,`${de.pretty(t.configuration,u.anchoredLocator,de.Type.IDENT)}: ${p.text}`);else e(84,`Constraint check failed; run ${de.pretty(t.configuration,"yarn constraints",de.Type.CODE)} for more details`)}}},tdt=edt;var IH={};Vt(IH,{CreateCommand:()=>tm,DlxCommand:()=>g0,default:()=>ndt});Ye();jt();var tm=class extends ut{constructor(){super(...arguments);this.pkg=ge.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){let r=[];this.pkg&&r.push("--package",this.pkg),this.quiet&&r.push("--quiet");let o=this.command.replace(/^(@[^@/]+)(@|$)/,"$1/create$2"),a=W.parseDescriptor(o),n=a.name.match(/^create(-|$)/)?a:a.scope?W.makeIdent(a.scope,`create-${a.name}`):W.makeIdent(null,`create-${a.name}`),u=W.stringifyIdent(n);return a.range!=="unknown"&&(u+=`@${a.range}`),this.cli.run(["dlx",...r,u,...this.args])}};tm.paths=[["create"]];Ye();Ye();St();jt();var g0=class extends ut{constructor(){super(...arguments);this.packages=ge.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){return Ke.telemetry=null,await oe.mktempPromise(async r=>{let o=V.join(r,`dlx-${process.pid}`);await oe.mkdirPromise(o),await oe.writeFilePromise(V.join(o,"package.json"),`{} +`),await oe.writeFilePromise(V.join(o,"yarn.lock"),"");let a=V.join(o,".yarnrc.yml"),n=await Ke.findProjectCwd(this.context.cwd),A={enableGlobalCache:!(await Ke.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),enableTelemetry:!1,logFilters:[{code:Wu(68),level:de.LogLevel.Discard}]},p=n!==null?V.join(n,".yarnrc.yml"):null;p!==null&&oe.existsSync(p)?(await oe.copyFilePromise(p,a),await Ke.updateConfiguration(o,L=>{let U=_e.toMerged(L,A);return Array.isArray(L.plugins)&&(U.plugins=L.plugins.map(J=>{let te=typeof J=="string"?J:J.path,ae=ue.isAbsolute(te)?te:ue.resolve(ue.fromPortablePath(n),te);return typeof J=="string"?ae:{path:ae,spec:J.spec}})),U})):await oe.writeJsonPromise(a,A);let h=this.packages??[this.command],E=W.parseDescriptor(this.command).name,I=await this.cli.run(["add","--fixed","--",...h],{cwd:o,quiet:this.quiet});if(I!==0)return I;this.quiet||this.context.stdout.write(` +`);let v=await Ke.find(o,this.context.plugins),{project:x,workspace:C}=await Pt.find(v,o);if(C===null)throw new rr(x.cwd,o);await x.restoreInstallState();let R=await un.getWorkspaceAccessibleBinaries(C);return R.has(E)===!1&&R.size===1&&typeof this.packages>"u"&&(E=Array.from(R)[0][0]),await un.executeWorkspaceAccessibleBinary(C,E,this.args,{packageAccessibleBinaries:R,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};g0.paths=[["dlx"]],g0.usage=nt.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"],["Install multiple packages for a single command",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e "console.log('hello!')"`]]});var rdt={commands:[tm,g0]},ndt=rdt;var DH={};Vt(DH,{ExecFetcher:()=>Q2,ExecResolver:()=>F2,default:()=>odt,execUtils:()=>Ek});Ye();Ye();St();var fA="exec:";var Ek={};Vt(Ek,{loadGeneratorFile:()=>k2,makeLocator:()=>vH,makeSpec:()=>pme,parseSpec:()=>BH});Ye();St();function BH(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function pme({parentLocator:t,path:e,generatorHash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function vH(t,{parentLocator:e,path:r,generatorHash:o,protocol:a}){return W.makeLocator(t,pme({parentLocator:e,path:r,generatorHash:o,protocol:a}))}async function k2(t,e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(t,{protocol:e}),n=V.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,n.localPath)}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.join(u.prefixPath,a);return await A.readFilePromise(p,"utf8")}var Q2=class{supports(e,r){return!!e.reference.startsWith(fA)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:fA});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){let o=await k2(e.reference,fA,r);return oe.mktempPromise(async a=>{let n=V.join(a,"generator.js");return await oe.writeFilePromise(n,o),oe.mktempPromise(async u=>{if(await this.generatePackage(u,e,n,r),!oe.existsSync(V.join(u,"build")))throw new Error("The script should have generated a build directory");return await Xi.makeArchiveFromDirectory(V.join(u,"build"),{prefixPath:W.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel")})})})}async generatePackage(e,r,o,a){return await oe.mktempPromise(async n=>{let u=await un.makeScriptEnv({project:a.project,binFolder:n}),A=V.join(e,"runtime.js");return await oe.mktempPromise(async p=>{let h=V.join(p,"buildfile.log"),E=V.join(e,"generator"),I=V.join(e,"build");await oe.mkdirPromise(E),await oe.mkdirPromise(I);let v={tempDir:ue.fromPortablePath(E),buildDir:ue.fromPortablePath(I),locator:W.stringifyLocator(r)};await oe.writeFilePromise(A,` + // Expose 'Module' as a global variable + Object.defineProperty(global, 'Module', { + get: () => require('module'), + configurable: true, + enumerable: false, + }); + + // Expose non-hidden built-in modules as global variables + for (const name of Module.builtinModules.filter((name) => name !== 'module' && !name.startsWith('_'))) { + Object.defineProperty(global, name, { + get: () => require(name), + configurable: true, + enumerable: false, + }); + } + + // Expose the 'execEnv' global variable + Object.defineProperty(global, 'execEnv', { + value: { + ...${JSON.stringify(v)}, + }, + enumerable: true, + }); + `);let x=u.NODE_OPTIONS||"",C=/\s*--require\s+\S*\.pnp\.c?js\s*/g;x=x.replace(C," ").trim(),u.NODE_OPTIONS=x;let{stdout:R,stderr:L}=a.project.configuration.getSubprocessStreams(h,{header:`# This file contains the result of Yarn generating a package (${W.stringifyLocator(r)}) +`,prefix:W.prettyLocator(a.project.configuration,r),report:a.report}),{code:U}=await Ur.pipevp(process.execPath,["--require",ue.fromPortablePath(A),ue.fromPortablePath(o),W.stringifyIdent(r)],{cwd:e,env:u,stdin:null,stdout:R,stderr:L});if(U!==0)throw oe.detachTemp(p),new Error(`Package generation failed (exit code ${U}, logs can be found here: ${de.pretty(a.project.configuration,h,de.Type.PATH)})`)})})}};Ye();Ye();var idt=2,F2=class{supportsDescriptor(e,r){return!!e.range.startsWith(fA)}supportsLocator(e,r){return!!e.reference.startsWith(fA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=BH(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await k2(W.makeRange({protocol:fA,source:a,selector:a,params:{locator:W.stringifyLocator(n)}}),fA,o.fetchOptions),A=wn.makeHash(`${idt}`,u).slice(0,6);return[vH(e,{parentLocator:n,path:a,generatorHash:A,protocol:fA})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var sdt={fetchers:[Q2],resolvers:[F2]},odt=sdt;var PH={};Vt(PH,{FileFetcher:()=>L2,FileResolver:()=>O2,TarballFileFetcher:()=>M2,TarballFileResolver:()=>U2,default:()=>cdt,fileUtils:()=>rm});Ye();St();var SC=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,R2=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,Ui="file:";var rm={};Vt(rm,{fetchArchiveFromLocator:()=>N2,makeArchiveFromLocator:()=>Ck,makeBufferFromLocator:()=>SH,makeLocator:()=>PC,makeSpec:()=>hme,parseSpec:()=>T2});Ye();St();function T2(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function hme({parentLocator:t,path:e,hash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PC(t,{parentLocator:e,path:r,hash:o,protocol:a}){return W.makeLocator(t,hme({parentLocator:e,path:r,hash:o,protocol:a}))}async function N2(t,e){let{parentLocator:r,path:o}=W.parseFileStyleRange(t.reference,{protocol:Ui}),a=V.isAbsolute(o)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await e.fetcher.fetch(r,e),n=a.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,a.localPath)}:a;a!==n&&a.releaseFs&&a.releaseFs();let u=n.packageFs,A=V.join(n.prefixPath,o);return await _e.releaseAfterUseAsync(async()=>await u.readFilePromise(A),n.releaseFs)}async function Ck(t,{protocol:e,fetchOptions:r,inMemory:o=!1}){let{parentLocator:a,path:n}=W.parseFileStyleRange(t.reference,{protocol:e}),u=V.isAbsolute(n)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(a,r),A=u.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,u.localPath)}:u;u!==A&&u.releaseFs&&u.releaseFs();let p=A.packageFs,h=V.join(A.prefixPath,n);return await _e.releaseAfterUseAsync(async()=>await Xi.makeArchiveFromDirectory(h,{baseFs:p,prefixPath:W.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:o}),A.releaseFs)}async function SH(t,{protocol:e,fetchOptions:r}){return(await Ck(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var L2=class{supports(e,r){return!!e.reference.startsWith(Ui)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:Ui});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){return Ck(e,{protocol:Ui,fetchOptions:r})}};Ye();Ye();var adt=2,O2=class{supportsDescriptor(e,r){return e.range.match(SC)?!0:!!e.range.startsWith(Ui)}supportsLocator(e,r){return!!e.reference.startsWith(Ui)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return SC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await SH(W.makeLocator(e,W.makeRange({protocol:Ui,source:a,selector:a,params:{locator:W.stringifyLocator(n)}})),{protocol:Ui,fetchOptions:o.fetchOptions}),A=wn.makeHash(`${adt}`,u).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:A,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};Ye();var M2=class{supports(e,r){return R2.test(e.reference)?!!e.reference.startsWith(Ui):!1}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromDisk(e,r){let o=await N2(e,r);return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();Ye();var U2=class{supportsDescriptor(e,r){return R2.test(e.range)?!!(e.range.startsWith(Ui)||SC.test(e.range)):!1}supportsLocator(e,r){return R2.test(e.reference)?!!e.reference.startsWith(Ui):!1}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return SC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=PC(e,{parentLocator:n,path:a,hash:"",protocol:Ui}),A=await N2(u,o.fetchOptions),p=wn.makeHash(A).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:p,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var ldt={fetchers:[M2,L2],resolvers:[U2,O2]},cdt=ldt;var kH={};Vt(kH,{GithubFetcher:()=>_2,default:()=>Adt,githubUtils:()=>wk});Ye();St();var wk={};Vt(wk,{invalidGithubUrlMessage:()=>mme,isGithubUrl:()=>bH,parseGithubUrl:()=>xH});var gme=$e(ve("querystring")),dme=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function bH(t){return t?dme.some(e=>!!t.match(e)):!1}function xH(t){let e;for(let A of dme)if(e=t.match(A),e)break;if(!e)throw new Error(mme(t));let[,r,o,a,n="master"]=e,{commit:u}=gme.default.parse(n);return n=u||n.replace(/[^:]*:/,""),{auth:r,username:o,reponame:a,treeish:n}}function mme(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var _2=class{supports(e,r){return!!bH(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await nn.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await oe.mktempPromise(async a=>{let n=new gn(a);await Xi.extractArchiveTo(o,n,{stripComponents:1});let u=ra.splitRepoUrl(e.reference),A=V.join(a,"package.tgz");await un.prepareExternalProject(a,A,{configuration:r.project.configuration,report:r.report,workspace:u.extra.workspace,locator:e});let p=await oe.readFilePromise(A);return await Xi.convertToZip(p,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:o,username:a,reponame:n,treeish:u}=xH(e.reference);return`https://${o?`${o}@`:""}github.com/${a}/${n}/archive/${u}.tar.gz`}};var udt={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let o=new _2;if(!o.supports(e,r))return null;try{return await o.fetch(e,r)}catch{return null}}}},Adt=udt;var QH={};Vt(QH,{TarballHttpFetcher:()=>j2,TarballHttpResolver:()=>G2,default:()=>pdt});Ye();function H2(t){let e;try{e=new URL(t)}catch{return!1}return!(e.protocol!=="http:"&&e.protocol!=="https:"||!e.pathname.match(/(\.tar\.gz|\.tgz|\/[^.]+)$/))}var j2=class{supports(e,r){return H2(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await nn.get(e.reference,{configuration:r.project.configuration});return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();var G2=class{supportsDescriptor(e,r){return H2(e.range)}supportsLocator(e,r){return H2(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[W.convertDescriptorToLocator(e)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var fdt={fetchers:[j2],resolvers:[G2]},pdt=fdt;var FH={};Vt(FH,{InitCommand:()=>d0,default:()=>gdt});Ye();Ye();St();jt();var d0=class extends ut{constructor(){super(...arguments);this.private=ge.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=ge.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=ge.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.name=ge.String("-n,--name",{description:"Initialize a package with the given name"});this.usev2=ge.Boolean("-2",!1,{hidden:!0});this.yes=ge.Boolean("-y,--yes",{hidden:!0})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return o!==null?await this.executeProxy(r,o):await this.executeRegular(r)}async executeProxy(r,o){if(r.projectCwd!==null&&r.projectCwd!==this.context.cwd)throw new it("Cannot use the --install flag from within a project subdirectory");oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=V.join(this.context.cwd,dr.lockfile);oe.existsSync(a)||await oe.writeFilePromise(a,"");let n=await this.cli.run(["set","version",o],{quiet:!0});if(n!==0)return n;let u=[];return this.private&&u.push("-p"),this.workspace&&u.push("-w"),this.name&&u.push(`-n=${this.name}`),this.yes&&u.push("-y"),await oe.mktempPromise(async A=>{let{code:p}=await Ur.pipevp("yarn",["init",...u],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await un.makeScriptEnv({binFolder:A})});return p})}async executeRegular(r){let o=null;try{o=(await Pt.find(r,this.context.cwd)).project}catch{o=null}oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=await Ot.tryFind(this.context.cwd),n=a??new Ot,u=Object.fromEntries(r.get("initFields").entries());n.load(u),n.name=n.name??W.makeIdent(r.get("initScope"),this.name??V.basename(this.context.cwd)),n.packageManager=rn&&_e.isTaggedYarnVersion(rn)?`yarn@${rn}`:null,(!a&&this.workspace||this.private)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await oe.mkdirPromise(V.join(this.context.cwd,"packages"),{recursive:!0}),n.workspaceDefinitions=[{pattern:"packages/*"}]);let A={};n.exportTo(A);let p=V.join(this.context.cwd,Ot.fileName);await oe.changeFilePromise(p,`${JSON.stringify(A,null,2)} +`,{automaticNewlines:!0});let h=[p],E=V.join(this.context.cwd,"README.md");if(oe.existsSync(E)||(await oe.writeFilePromise(E,`# ${W.stringifyIdent(n.name)} +`),h.push(E)),!o||o.cwd===this.context.cwd){let I=V.join(this.context.cwd,dr.lockfile);oe.existsSync(I)||(await oe.writeFilePromise(I,""),h.push(I));let x=[".yarn/*","!.yarn/patches","!.yarn/plugins","!.yarn/releases","!.yarn/sdks","!.yarn/versions","","# Swap the comments on the following lines if you wish to use zero-installs","# In that case, don't forget to run `yarn config set enableGlobalCache false`!","# Documentation here: https://yarnpkg.com/features/caching#zero-installs","","#!.yarn/cache",".pnp.*"].map(fe=>`${fe} +`).join(""),C=V.join(this.context.cwd,".gitignore");oe.existsSync(C)||(await oe.writeFilePromise(C,x),h.push(C));let L=["/.yarn/** linguist-vendored","/.yarn/releases/* binary","/.yarn/plugins/**/* binary","/.pnp.* binary linguist-generated"].map(fe=>`${fe} +`).join(""),U=V.join(this.context.cwd,".gitattributes");oe.existsSync(U)||(await oe.writeFilePromise(U,L),h.push(U));let J={["*"]:{endOfLine:"lf",insertFinalNewline:!0},["*.{js,json,yml}"]:{charset:"utf-8",indentStyle:"space",indentSize:2}};_e.mergeIntoTarget(J,r.get("initEditorConfig"));let te=`root = true +`;for(let[fe,ce]of Object.entries(J)){te+=` +[${fe}] +`;for(let[me,he]of Object.entries(ce)){let Be=me.replace(/[A-Z]/g,we=>`_${we.toLowerCase()}`);te+=`${Be} = ${he} +`}}let ae=V.join(this.context.cwd,".editorconfig");oe.existsSync(ae)||(await oe.writeFilePromise(ae,te),h.push(ae)),await this.cli.run(["install"],{quiet:!0}),oe.existsSync(V.join(this.context.cwd,".git"))||(await Ur.execvp("git",["init"],{cwd:this.context.cwd}),await Ur.execvp("git",["add","--",...h],{cwd:this.context.cwd}),await Ur.execvp("git",["commit","--allow-empty","-m","First commit"],{cwd:this.context.cwd}))}}};d0.paths=[["init"]],d0.usage=nt.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]});var hdt={configuration:{initScope:{description:"Scope used when creating packages via the init command",type:"STRING",default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:"MAP",valueDefinition:{description:"",type:"ANY"}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:"MAP",valueDefinition:{description:"",type:"ANY"}}},commands:[d0]},gdt=hdt;var Tj={};Vt(Tj,{SearchCommand:()=>w0,UpgradeInteractiveCommand:()=>B0,default:()=>nIt});Ye();var Eme=$e(ve("os"));function bC({stdout:t}){if(Eme.default.endianness()==="BE")throw new Error("Interactive commands cannot be used on big-endian systems because ink depends on yoga-layout-prebuilt which only supports little-endian architectures");if(!t.isTTY)throw new Error("Interactive commands can only be used inside a TTY environment")}jt();var Qye=$e(zH()),XH={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},fyt=(0,Qye.default)(XH.appId,XH.apiKey).initIndex(XH.indexName),ZH=async(t,e=0)=>await fyt.search(t,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:e,hitsPerPage:10});var jB=["regular","dev","peer"],w0=class extends ut{async execute(){bC(this.context);let{Gem:e}=await Promise.resolve().then(()=>(cQ(),Bj)),{ScrollableItems:r}=await Promise.resolve().then(()=>(pQ(),fQ)),{useKeypress:o}=await Promise.resolve().then(()=>(UB(),Wwe)),{useMinistore:a}=await Promise.resolve().then(()=>(xj(),bj)),{renderForm:n}=await Promise.resolve().then(()=>(mQ(),dQ)),{default:u}=await Promise.resolve().then(()=>$e(rIe())),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useEffect:E,useState:I}=await Promise.resolve().then(()=>$e(on())),v=await Ke.find(this.context.cwd,this.context.plugins),x=()=>h.createElement(A,{flexDirection:"row"},h.createElement(A,{flexDirection:"column",width:48},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move between packages.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select a package.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," again to change the target."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),C=()=>h.createElement(h.Fragment,null,h.createElement(A,{width:15},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Owner")),h.createElement(A,{width:11},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Version")),h.createElement(A,{width:10},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Downloads"))),R=()=>h.createElement(A,{width:17},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Target")),L=({hit:he,active:Be})=>{let[we,g]=a(he.name,null);o({active:Be},(le,ne)=>{if(ne.name!=="space")return;if(!we){g(jB[0]);return}let ee=jB.indexOf(we)+1;ee===jB.length?g(null):g(jB[ee])},[we,g]);let Ee=W.parseIdent(he.name),Se=W.prettyIdent(v,Ee);return h.createElement(A,null,h.createElement(A,{width:45},h.createElement(p,{bold:!0,wrap:"wrap"},Se)),h.createElement(A,{width:14,marginLeft:1},h.createElement(p,{bold:!0,wrap:"truncate"},he.owner.name)),h.createElement(A,{width:10,marginLeft:1},h.createElement(p,{italic:!0,wrap:"truncate"},he.version)),h.createElement(A,{width:16,marginLeft:1},h.createElement(p,null,he.humanDownloadsLast30Days)))},U=({name:he,active:Be})=>{let[we]=a(he,null),g=W.parseIdent(he);return h.createElement(A,null,h.createElement(A,{width:47},h.createElement(p,{bold:!0}," - ",W.prettyIdent(v,g))),jB.map(Ee=>h.createElement(A,{key:Ee,width:14,marginLeft:1},h.createElement(p,null," ",h.createElement(e,{active:we===Ee})," ",h.createElement(p,{bold:!0},Ee)))))},J=()=>h.createElement(A,{marginTop:1},h.createElement(p,null,"Powered by Algolia.")),ae=await n(({useSubmit:he})=>{let Be=a();he(Be);let we=Array.from(Be.keys()).filter(H=>Be.get(H)!==null),[g,Ee]=I(""),[Se,le]=I(0),[ne,ee]=I([]),Ie=H=>{H.match(/\t| /)||Ee(H)},Fe=async()=>{le(0);let H=await ZH(g);H.query===g&&ee(H.hits)},At=async()=>{let H=await ZH(g,Se+1);H.query===g&&H.page-1===Se&&(le(H.page),ee([...ne,...H.hits]))};return E(()=>{g?Fe():ee([])},[g]),h.createElement(A,{flexDirection:"column"},h.createElement(x,null),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(p,{bold:!0},"Search: "),h.createElement(A,{width:41},h.createElement(u,{value:g,onChange:Ie,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),h.createElement(C,null)),ne.length?h.createElement(r,{radius:2,loop:!1,children:ne.map(H=>h.createElement(L,{key:H.name,hit:H,active:!1})),willReachEnd:At}):h.createElement(p,{color:"gray"},"Start typing..."),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(A,{width:49},h.createElement(p,{bold:!0},"Selected:")),h.createElement(R,null)),we.length?we.map(H=>h.createElement(U,{key:H,name:H,active:!1})):h.createElement(p,{color:"gray"},"No selected packages..."),h.createElement(J,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof ae>"u")return 1;let fe=Array.from(ae.keys()).filter(he=>ae.get(he)==="regular"),ce=Array.from(ae.keys()).filter(he=>ae.get(he)==="dev"),me=Array.from(ae.keys()).filter(he=>ae.get(he)==="peer");return fe.length&&await this.cli.run(["add",...fe]),ce.length&&await this.cli.run(["add","--dev",...ce]),me&&await this.cli.run(["add","--peer",...me]),0}};w0.paths=[["search"]],w0.usage=nt.Usage({category:"Interactive commands",description:"open the search interface",details:` + This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. + `,examples:[["Open the search window","yarn search"]]});Ye();jt();E_();var cIe=$e(zn()),lIe=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,uIe=(t,e)=>t.length>0?[t.slice(0,e)].concat(uIe(t.slice(e),e)):[],B0=class extends ut{async execute(){bC(this.context);let{ItemOptions:e}=await Promise.resolve().then(()=>(aIe(),oIe)),{Pad:r}=await Promise.resolve().then(()=>(Rj(),sIe)),{ScrollableItems:o}=await Promise.resolve().then(()=>(pQ(),fQ)),{useMinistore:a}=await Promise.resolve().then(()=>(xj(),bj)),{renderForm:n}=await Promise.resolve().then(()=>(mQ(),dQ)),{Box:u,Text:A}=await Promise.resolve().then(()=>$e(ic())),{default:p,useEffect:h,useRef:E,useState:I}=await Promise.resolve().then(()=>$e(on())),v=await Ke.find(this.context.cwd,this.context.plugins),{project:x,workspace:C}=await Pt.find(v,this.context.cwd),R=await Lr.find(v);if(!C)throw new rr(x.cwd,this.context.cwd);await x.restoreInstallState({restoreResolutions:!1});let L=this.context.stdout.rows-7,U=(Ee,Se)=>{let le=upe(Ee,Se),ne="";for(let ee of le)ee.added?ne+=de.pretty(v,ee.value,"green"):ee.removed||(ne+=ee.value);return ne},J=(Ee,Se)=>{if(Ee===Se)return Se;let le=W.parseRange(Ee),ne=W.parseRange(Se),ee=le.selector.match(lIe),Ie=ne.selector.match(lIe);if(!ee||!Ie)return U(Ee,Se);let Fe=["gray","red","yellow","green","magenta"],At=null,H="";for(let at=1;at{let ne=await zc.fetchDescriptorFrom(Ee,le,{project:x,cache:R,preserveModifier:Se,workspace:C});return ne!==null?ne.range:Ee.range},ae=async Ee=>{let Se=cIe.default.valid(Ee.range)?`^${Ee.range}`:Ee.range,[le,ne]=await Promise.all([te(Ee,Ee.range,Se).catch(()=>null),te(Ee,Ee.range,"latest").catch(()=>null)]),ee=[{value:null,label:Ee.range}];return le&&le!==Ee.range?ee.push({value:le,label:J(Ee.range,le)}):ee.push({value:null,label:""}),ne&&ne!==le&&ne!==Ee.range?ee.push({value:ne,label:J(Ee.range,ne)}):ee.push({value:null,label:""}),ee},fe=()=>p.createElement(u,{flexDirection:"row"},p.createElement(u,{flexDirection:"column",width:49},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select packages.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select versions."))),p.createElement(u,{flexDirection:"column"},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to install.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to abort.")))),ce=()=>p.createElement(u,{flexDirection:"row",paddingTop:1,paddingBottom:1},p.createElement(u,{width:50},p.createElement(A,{bold:!0},p.createElement(A,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Current")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Range")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Latest"))),me=({active:Ee,descriptor:Se,suggestions:le})=>{let[ne,ee]=a(Se.descriptorHash,null),Ie=W.stringifyIdent(Se),Fe=Math.max(0,45-Ie.length);return p.createElement(p.Fragment,null,p.createElement(u,null,p.createElement(u,{width:45},p.createElement(A,{bold:!0},W.prettyIdent(v,Se)),p.createElement(r,{active:Ee,length:Fe})),p.createElement(e,{active:Ee,options:le,value:ne,skewer:!0,onChange:ee,sizes:[17,17,17]})))},he=({dependencies:Ee})=>{let[Se,le]=I(Ee.map(()=>null)),ne=E(!0),ee=async Ie=>{let Fe=await ae(Ie);return Fe.filter(At=>At.label!=="").length<=1?null:{descriptor:Ie,suggestions:Fe}};return h(()=>()=>{ne.current=!1},[]),h(()=>{let Ie=Math.trunc(L*1.75),Fe=Ee.slice(0,Ie),At=Ee.slice(Ie),H=uIe(At,L),at=Fe.map(ee).reduce(async(Re,ke)=>{await Re;let xe=await ke;xe!==null&&(!ne.current||le(He=>{let Te=He.findIndex(je=>je===null),Je=[...He];return Je[Te]=xe,Je}))},Promise.resolve());H.reduce((Re,ke)=>Promise.all(ke.map(xe=>Promise.resolve().then(()=>ee(xe)))).then(async xe=>{xe=xe.filter(He=>He!==null),await Re,ne.current&&le(He=>{let Te=He.findIndex(Je=>Je===null);return He.slice(0,Te).concat(xe).concat(He.slice(Te+xe.length))})}),at).then(()=>{ne.current&&le(Re=>Re.filter(ke=>ke!==null))})},[]),Se.length?p.createElement(o,{radius:L>>1,children:Se.map((Ie,Fe)=>Ie!==null?p.createElement(me,{key:Fe,active:!1,descriptor:Ie.descriptor,suggestions:Ie.suggestions}):p.createElement(A,{key:Fe},"Loading..."))}):p.createElement(A,null,"No upgrades found")},we=await n(({useSubmit:Ee})=>{Ee(a());let Se=new Map;for(let ne of x.workspaces)for(let ee of["dependencies","devDependencies"])for(let Ie of ne.manifest[ee].values())x.tryWorkspaceByDescriptor(Ie)===null&&(Ie.range.startsWith("link:")||Se.set(Ie.descriptorHash,Ie));let le=_e.sortMap(Se.values(),ne=>W.stringifyDescriptor(ne));return p.createElement(u,{flexDirection:"column"},p.createElement(fe,null),p.createElement(ce,null),p.createElement(he,{dependencies:le}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof we>"u")return 1;let g=!1;for(let Ee of x.workspaces)for(let Se of["dependencies","devDependencies"]){let le=Ee.manifest[Se];for(let ne of le.values()){let ee=we.get(ne.descriptorHash);typeof ee<"u"&&ee!==null&&(le.set(ne.identHash,W.makeDescriptor(ne,ee)),g=!0)}}return g?await x.installWithNewReport({quiet:this.context.quiet,stdout:this.context.stdout},{cache:R}):0}};B0.paths=[["upgrade-interactive"]],B0.usage=nt.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` + This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. + `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var rIt={commands:[w0,B0]},nIt=rIt;var Nj={};Vt(Nj,{LinkFetcher:()=>qB,LinkResolver:()=>YB,PortalFetcher:()=>WB,PortalResolver:()=>KB,default:()=>sIt});Ye();St();var tp="portal:",rp="link:";var qB=class{supports(e,r){return!!e.reference.startsWith(rp)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:rp});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:rp}),n=V.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0}}};Ye();St();var YB=class{supportsDescriptor(e,r){return!!e.range.startsWith(rp)}supportsLocator(e,r){return!!e.reference.startsWith(rp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(rp.length);return[W.makeLocator(e,`${rp}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){return{...e,version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};Ye();St();var WB=class{supports(e,r){return!!e.reference.startsWith(tp)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp}),n=V.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot}}};Ye();Ye();St();var KB=class{supportsDescriptor(e,r){return!!e.range.startsWith(tp)}supportsLocator(e,r){return!!e.reference.startsWith(tp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(tp.length);return[W.makeLocator(e,`${tp}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await _e.releaseAfterUseAsync(async()=>await Ot.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var iIt={fetchers:[qB,WB],resolvers:[YB,KB]},sIt=iIt;var yG={};Vt(yG,{NodeModulesLinker:()=>lv,NodeModulesMode:()=>hG,PnpLooseLinker:()=>cv,default:()=>w1t});St();Ye();St();St();var Oj=(t,e)=>`${t}@${e}`,AIe=(t,e)=>{let r=e.indexOf("#"),o=r>=0?e.substring(r+1):e;return Oj(t,o)};var hIe=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),o=e.check||r>=9,a=e.hoistingLimits||new Map,n={check:o,debugLevel:r,hoistingLimits:a,fastLookupPossible:!0},u;n.debugLevel>=0&&(u=Date.now());let A=fIt(t,n),p=!1,h=0;do p=Mj(A,[A],new Set([A.locator]),new Map,n).anotherRoundNeeded,n.fastLookupPossible=!1,h++;while(p);if(n.debugLevel>=0&&console.log(`hoist time: ${Date.now()-u}ms, rounds: ${h}`),n.debugLevel>=1){let E=VB(A);if(Mj(A,[A],new Set([A.locator]),new Map,n).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: +${E}, next tree: +${VB(A)}`);let v=gIe(A);if(v)throw new Error(`${v}, after hoisting finished: +${VB(A)}`)}return n.debugLevel>=2&&console.log(VB(A)),pIt(A)},oIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=n=>{if(!o.has(n)){o.add(n);for(let u of n.hoistedDependencies.values())r.set(u.name,u);for(let u of n.dependencies.values())n.peerNames.has(u.name)||a(u)}};return a(e),r},aIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=new Set,n=(u,A)=>{if(o.has(u))return;o.add(u);for(let h of u.hoistedDependencies.values())if(!A.has(h.name)){let E;for(let I of t)E=I.dependencies.get(h.name),E&&r.set(E.name,E)}let p=new Set;for(let h of u.dependencies.values())p.add(h.name);for(let h of u.dependencies.values())u.peerNames.has(h.name)||n(h,p)};return n(e,a),r},fIe=(t,e)=>{if(e.decoupled)return e;let{name:r,references:o,ident:a,locator:n,dependencies:u,originalDependencies:A,hoistedDependencies:p,peerNames:h,reasons:E,isHoistBorder:I,hoistPriority:v,dependencyKind:x,hoistedFrom:C,hoistedTo:R}=e,L={name:r,references:new Set(o),ident:a,locator:n,dependencies:new Map(u),originalDependencies:new Map(A),hoistedDependencies:new Map(p),peerNames:new Set(h),reasons:new Map(E),decoupled:!0,isHoistBorder:I,hoistPriority:v,dependencyKind:x,hoistedFrom:new Map(C),hoistedTo:new Map(R)},U=L.dependencies.get(r);return U&&U.ident==L.ident&&L.dependencies.set(r,L),t.dependencies.set(L.name,L),L},lIt=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let a of t.dependencies.values())t.peerNames.has(a.name)||r.set(a.name,[a.ident]);let o=Array.from(e.keys());o.sort((a,n)=>{let u=e.get(a),A=e.get(n);return A.hoistPriority!==u.hoistPriority?A.hoistPriority-u.hoistPriority:A.peerDependents.size!==u.peerDependents.size?A.peerDependents.size-u.peerDependents.size:A.dependents.size-u.dependents.size});for(let a of o){let n=a.substring(0,a.indexOf("@",1)),u=a.substring(n.length+1);if(!t.peerNames.has(n)){let A=r.get(n);A||(A=[],r.set(n,A)),A.indexOf(u)<0&&A.push(u)}}return r},Lj=t=>{let e=new Set,r=(o,a=new Set)=>{if(!a.has(o)){a.add(o);for(let n of o.peerNames)if(!t.peerNames.has(n)){let u=t.dependencies.get(n);u&&!e.has(u)&&r(u,a)}e.add(o)}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||r(o);return e},Mj=(t,e,r,o,a,n=new Set)=>{let u=e[e.length-1];if(n.has(u))return{anotherRoundNeeded:!1,isGraphChanged:!1};n.add(u);let A=hIt(u),p=lIt(u,A),h=t==u?new Map:a.fastLookupPossible?oIt(e):aIt(e),E,I=!1,v=!1,x=new Map(Array.from(p.entries()).map(([R,L])=>[R,L[0]])),C=new Map;do{let R=AIt(t,e,r,h,x,p,o,C,a);R.isGraphChanged&&(v=!0),R.anotherRoundNeeded&&(I=!0),E=!1;for(let[L,U]of p)U.length>1&&!u.dependencies.has(L)&&(x.delete(L),U.shift(),x.set(L,U[0]),E=!0)}while(E);for(let R of u.dependencies.values())if(!u.peerNames.has(R.name)&&!r.has(R.locator)){r.add(R.locator);let L=Mj(t,[...e,R],r,C,a);L.isGraphChanged&&(v=!0),L.anotherRoundNeeded&&(I=!0),r.delete(R.locator)}return{anotherRoundNeeded:I,isGraphChanged:v}},cIt=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},uIt=(t,e,r,o,a,n,u,A,{outputReason:p,fastLookupPossible:h})=>{let E,I=null,v=new Set;p&&(E=`${Array.from(e).map(L=>no(L)).join("\u2192")}`);let x=r[r.length-1],R=!(o.ident===x.ident);if(p&&!R&&(I="- self-reference"),R&&(R=o.dependencyKind!==1,p&&!R&&(I="- workspace")),R&&o.dependencyKind===2&&(R=!cIt(o),p&&!R&&(I="- external soft link with unhoisted dependencies")),R&&(R=x.dependencyKind!==1||x.hoistedFrom.has(o.name)||e.size===1,p&&!R&&(I=x.reasons.get(o.name))),R&&(R=!t.peerNames.has(o.name),p&&!R&&(I=`- cannot shadow peer: ${no(t.originalDependencies.get(o.name).locator)} at ${E}`)),R){let L=!1,U=a.get(o.name);if(L=!U||U.ident===o.ident,p&&!L&&(I=`- filled by: ${no(U.locator)} at ${E}`),L)for(let J=r.length-1;J>=1;J--){let ae=r[J].dependencies.get(o.name);if(ae&&ae.ident!==o.ident){L=!1;let fe=A.get(x);fe||(fe=new Set,A.set(x,fe)),fe.add(o.name),p&&(I=`- filled by ${no(ae.locator)} at ${r.slice(0,J).map(ce=>no(ce.locator)).join("\u2192")}`);break}}R=L}if(R&&(R=n.get(o.name)===o.ident,p&&!R&&(I=`- filled by: ${no(u.get(o.name)[0])} at ${E}`)),R){let L=!0,U=new Set(o.peerNames);for(let J=r.length-1;J>=1;J--){let te=r[J];for(let ae of U){if(te.peerNames.has(ae)&&te.originalDependencies.has(ae))continue;let fe=te.dependencies.get(ae);fe&&t.dependencies.get(ae)!==fe&&(J===r.length-1?v.add(fe):(v=null,L=!1,p&&(I=`- peer dependency ${no(fe.locator)} from parent ${no(te.locator)} was not hoisted to ${E}`))),U.delete(ae)}if(!L)break}R=L}if(R&&!h)for(let L of o.hoistedDependencies.values()){let U=a.get(L.name)||t.dependencies.get(L.name);if(!U||L.ident!==U.ident){R=!1,p&&(I=`- previously hoisted dependency mismatch, needed: ${no(L.locator)}, available: ${no(U?.locator)}`);break}}return v!==null&&v.size>0?{isHoistable:2,dependsOn:v,reason:I}:{isHoistable:R?0:1,reason:I}},yQ=t=>`${t.name}@${t.locator}`,AIt=(t,e,r,o,a,n,u,A,p)=>{let h=e[e.length-1],E=new Set,I=!1,v=!1,x=(U,J,te,ae,fe)=>{if(E.has(ae))return;let ce=[...J,yQ(ae)],me=[...te,yQ(ae)],he=new Map,Be=new Map;for(let le of Lj(ae)){let ne=uIt(h,r,[h,...U,ae],le,o,a,n,A,{outputReason:p.debugLevel>=2,fastLookupPossible:p.fastLookupPossible});if(Be.set(le,ne),ne.isHoistable===2)for(let ee of ne.dependsOn){let Ie=he.get(ee.name)||new Set;Ie.add(le.name),he.set(ee.name,Ie)}}let we=new Set,g=(le,ne,ee)=>{if(!we.has(le)){we.add(le),Be.set(le,{isHoistable:1,reason:ee});for(let Ie of he.get(le.name)||[])g(ae.dependencies.get(Ie),ne,p.debugLevel>=2?`- peer dependency ${no(le.locator)} from parent ${no(ae.locator)} was not hoisted`:"")}};for(let[le,ne]of Be)ne.isHoistable===1&&g(le,ne,ne.reason);let Ee=!1;for(let le of Be.keys())if(!we.has(le)){v=!0;let ne=u.get(ae);ne&&ne.has(le.name)&&(I=!0),Ee=!0,ae.dependencies.delete(le.name),ae.hoistedDependencies.set(le.name,le),ae.reasons.delete(le.name);let ee=h.dependencies.get(le.name);if(p.debugLevel>=2){let Ie=Array.from(J).concat([ae.locator]).map(At=>no(At)).join("\u2192"),Fe=h.hoistedFrom.get(le.name);Fe||(Fe=[],h.hoistedFrom.set(le.name,Fe)),Fe.push(Ie),ae.hoistedTo.set(le.name,Array.from(e).map(At=>no(At.locator)).join("\u2192"))}if(!ee)h.ident!==le.ident&&(h.dependencies.set(le.name,le),fe.add(le));else for(let Ie of le.references)ee.references.add(Ie)}if(ae.dependencyKind===2&&Ee&&(I=!0),p.check){let le=gIe(t);if(le)throw new Error(`${le}, after hoisting dependencies of ${[h,...U,ae].map(ne=>no(ne.locator)).join("\u2192")}: +${VB(t)}`)}let Se=Lj(ae);for(let le of Se)if(we.has(le)){let ne=Be.get(le);if((a.get(le.name)===le.ident||!ae.reasons.has(le.name))&&ne.isHoistable!==0&&ae.reasons.set(le.name,ne.reason),!le.isHoistBorder&&me.indexOf(yQ(le))<0){E.add(ae);let Ie=fIe(ae,le);x([...U,ae],ce,me,Ie,R),E.delete(ae)}}},C,R=new Set(Lj(h)),L=Array.from(e).map(U=>yQ(U));do{C=R,R=new Set;for(let U of C){if(U.locator===h.locator||U.isHoistBorder)continue;let J=fIe(h,U);x([],Array.from(r),L,J,R)}}while(R.size>0);return{anotherRoundNeeded:I,isGraphChanged:v}},gIe=t=>{let e=[],r=new Set,o=new Set,a=(n,u,A)=>{if(r.has(n)||(r.add(n),o.has(n)))return;let p=new Map(u);for(let h of n.dependencies.values())n.peerNames.has(h.name)||p.set(h.name,h);for(let h of n.originalDependencies.values()){let E=p.get(h.name),I=()=>`${Array.from(o).concat([n]).map(v=>no(v.locator)).join("\u2192")}`;if(n.peerNames.has(h.name)){let v=u.get(h.name);(v!==E||!v||v.ident!==h.ident)&&e.push(`${I()} - broken peer promise: expected ${h.ident} but found ${v&&v.ident}`)}else{let v=A.hoistedFrom.get(n.name),x=n.hoistedTo.get(h.name),C=`${v?` hoisted from ${v.join(", ")}`:""}`,R=`${x?` hoisted to ${x}`:""}`,L=`${I()}${C}`;E?E.ident!==h.ident&&e.push(`${L} - broken require promise for ${h.name}${R}: expected ${h.ident}, but found: ${E.ident}`):e.push(`${L} - broken require promise: no required dependency ${h.name}${R} found`)}}o.add(n);for(let h of n.dependencies.values())n.peerNames.has(h.name)||a(h,p,n);o.delete(n)};return a(t,t.dependencies,t),e.join(` +`)},fIt=(t,e)=>{let{identName:r,name:o,reference:a,peerNames:n}=t,u={name:o,references:new Set([a]),locator:Oj(r,a),ident:AIe(r,a),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(n),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},A=new Map([[t,u]]),p=(h,E)=>{let I=A.get(h),v=!!I;if(!I){let{name:x,identName:C,reference:R,peerNames:L,hoistPriority:U,dependencyKind:J}=h,te=e.hoistingLimits.get(E.locator);I={name:x,references:new Set([R]),locator:Oj(C,R),ident:AIe(C,R),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(L),reasons:new Map,decoupled:!0,isHoistBorder:te?te.has(x):!1,hoistPriority:U||0,dependencyKind:J||0,hoistedFrom:new Map,hoistedTo:new Map},A.set(h,I)}if(E.dependencies.set(h.name,I),E.originalDependencies.set(h.name,I),v){let x=new Set,C=R=>{if(!x.has(R)){x.add(R),R.decoupled=!1;for(let L of R.dependencies.values())R.peerNames.has(L.name)||C(L)}};C(I)}else for(let x of h.dependencies)p(x,I)};for(let h of t.dependencies)p(h,u);return u},Uj=t=>t.substring(0,t.indexOf("@",1)),pIt=t=>{let e={name:t.name,identName:Uj(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),o=(a,n,u)=>{let A=r.has(a),p;if(n===a)p=u;else{let{name:h,references:E,locator:I}=a;p={name:h,identName:Uj(I),references:E,dependencies:new Set}}if(u.dependencies.add(p),!A){r.add(a);for(let h of a.dependencies.values())a.peerNames.has(h.name)||o(h,a,p);r.delete(a)}};for(let a of t.dependencies.values())o(a,t,e);return e},hIt=t=>{let e=new Map,r=new Set([t]),o=u=>`${u.name}@${u.ident}`,a=u=>{let A=o(u),p=e.get(A);return p||(p={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(A,p)),p},n=(u,A)=>{let p=!!r.has(A);if(a(A).dependents.add(u.ident),!p){r.add(A);for(let E of A.dependencies.values()){let I=a(E);I.hoistPriority=Math.max(I.hoistPriority,E.hoistPriority),A.peerNames.has(E.name)?I.peerDependents.add(A.ident):n(A,E)}}};for(let u of t.dependencies.values())t.peerNames.has(u.name)||n(t,u);return e},no=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let o=t.substring(e+1);if(o==="workspace:.")return".";if(o){let a=(o.indexOf("#")>0?o.split("#")[1]:o).replace("npm:","");return o.startsWith("virtual")&&(r=`v:${r}`),a.startsWith("workspace")&&(r=`w:${r}`,a=""),`${r}${a?`@${a}`:""}`}else return`${r}`},pIe=5e4,VB=t=>{let e=0,r=(a,n,u="")=>{if(e>pIe||n.has(a))return"";e++;let A=Array.from(a.dependencies.values()).sort((h,E)=>h.name===E.name?0:h.name>E.name?1:-1),p="";n.add(a);for(let h=0;h":"")+(v!==E.name?`a:${E.name}:`:"")+no(E.locator)+(I?` ${I}`:"")} +`,p+=r(E,n,`${u}${hpIe?` +Tree is too large, part of the tree has been dunped +`:"")};var JB=(o=>(o.WORKSPACES="workspaces",o.DEPENDENCIES="dependencies",o.NONE="none",o))(JB||{}),dIe="node_modules",v0="$wsroot$";var zB=(t,e)=>{let{packageTree:r,hoistingLimits:o,errors:a,preserveSymlinksRequired:n}=dIt(t,e),u=null;if(a.length===0){let A=hIe(r,{hoistingLimits:o});u=yIt(t,A,e)}return{tree:u,errors:a,preserveSymlinksRequired:n}},gA=t=>`${t.name}@${t.reference}`,Hj=t=>{let e=new Map;for(let[r,o]of t.entries())if(!o.dirList){let a=e.get(o.locator);a||(a={target:o.target,linkType:o.linkType,locations:[],aliases:o.aliases},e.set(o.locator,a)),a.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((o,a)=>{let n=o.split(V.delimiter).length,u=a.split(V.delimiter).length;return a===o?0:n!==u?u-n:a>o?1:-1});return e},mIe=(t,e)=>{let r=W.isVirtualLocator(t)?W.devirtualizeLocator(t):t,o=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e;return W.areLocatorsEqual(r,o)},_j=(t,e,r,o)=>{if(t.linkType!=="SOFT")return!1;let a=ue.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return V.contains(o,a)===null},gIt=t=>{let e=t.getPackageInformation(t.topLevel);if(e===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");if(t.findPackageLocator(e.packageLocation)===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let o=ue.toPortablePath(e.packageLocation.slice(0,-1)),a=new Map,n={children:new Map},u=t.getDependencyTreeRoots(),A=new Map,p=new Set,h=(v,x)=>{let C=gA(v);if(p.has(C))return;p.add(C);let R=t.getPackageInformation(v);if(R){let L=x?gA(x):"";if(gA(v)!==L&&R.linkType==="SOFT"&&!v.reference.startsWith("link:")&&!_j(R,v,t,o)){let U=yIe(R,v,t);(!A.get(U)||v.reference.startsWith("workspace:"))&&A.set(U,v)}for(let[U,J]of R.packageDependencies)J!==null&&(R.packagePeers.has(U)||h(t.getLocator(U,J),v))}};for(let v of u)h(v,null);let E=o.split(V.sep);for(let v of A.values()){let x=t.getPackageInformation(v),R=ue.toPortablePath(x.packageLocation.slice(0,-1)).split(V.sep).slice(E.length),L=n;for(let U of R){let J=L.children.get(U);J||(J={children:new Map},L.children.set(U,J)),L=J}L.workspaceLocator=v}let I=(v,x)=>{if(v.workspaceLocator){let C=gA(x),R=a.get(C);R||(R=new Set,a.set(C,R)),R.add(v.workspaceLocator)}for(let C of v.children.values())I(C,v.workspaceLocator||x)};for(let v of n.children.values())I(v,n.workspaceLocator);return a},dIt=(t,e)=>{let r=[],o=!1,a=new Map,n=gIt(t),u=t.getPackageInformation(t.topLevel);if(u===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let A=t.findPackageLocator(u.packageLocation);if(A===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let p=ue.toPortablePath(u.packageLocation.slice(0,-1)),h={name:A.name,identName:A.name,reference:A.reference,peerNames:u.packagePeers,dependencies:new Set,dependencyKind:1},E=new Map,I=(x,C)=>`${gA(C)}:${x}`,v=(x,C,R,L,U,J,te,ae)=>{let fe=I(x,R),ce=E.get(fe),me=!!ce;!me&&R.name===A.name&&R.reference===A.reference&&(ce=h,E.set(fe,h));let he=_j(C,R,t,p);if(!ce){let le=0;he?le=2:C.linkType==="SOFT"&&R.name.endsWith(v0)&&(le=1),ce={name:x,identName:R.name,reference:R.reference,dependencies:new Set,peerNames:le===1?new Set:C.packagePeers,dependencyKind:le},E.set(fe,ce)}let Be;if(he?Be=2:U.linkType==="SOFT"?Be=1:Be=0,ce.hoistPriority=Math.max(ce.hoistPriority||0,Be),ae&&!he){let le=gA({name:L.identName,reference:L.reference}),ne=a.get(le)||new Set;a.set(le,ne),ne.add(ce.name)}let we=new Map(C.packageDependencies);if(e.project){let le=e.project.workspacesByCwd.get(ue.toPortablePath(C.packageLocation.slice(0,-1)));if(le){let ne=new Set([...Array.from(le.manifest.peerDependencies.values(),ee=>W.stringifyIdent(ee)),...Array.from(le.manifest.peerDependenciesMeta.keys())]);for(let ee of ne)we.has(ee)||(we.set(ee,J.get(ee)||null),ce.peerNames.add(ee))}}let g=gA({name:R.name.replace(v0,""),reference:R.reference}),Ee=n.get(g);if(Ee)for(let le of Ee)we.set(`${le.name}${v0}`,le.reference);(C!==U||C.linkType!=="SOFT"||!he&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(te)))&&L.dependencies.add(ce);let Se=R!==A&&C.linkType==="SOFT"&&!R.name.endsWith(v0)&&!he;if(!me&&!Se){let le=new Map;for(let[ne,ee]of we)if(ee!==null){let Ie=t.getLocator(ne,ee),Fe=t.getLocator(ne.replace(v0,""),ee),At=t.getPackageInformation(Fe);if(At===null)throw new Error("Assertion failed: Expected the package to have been registered");let H=_j(At,Ie,t,p);if(e.validateExternalSoftLinks&&e.project&&H){At.packageDependencies.size>0&&(o=!0);for(let[He,Te]of At.packageDependencies)if(Te!==null){let Je=W.parseLocator(Array.isArray(Te)?`${Te[0]}@${Te[1]}`:`${He}@${Te}`);if(gA(Je)!==gA(Ie)){let je=we.get(He);if(je){let b=W.parseLocator(Array.isArray(je)?`${je[0]}@${je[1]}`:`${He}@${je}`);mIe(b,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${R.name}@${R.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with parent dependency ${W.prettyLocator(e.project.configuration,b)}`})}else{let b=le.get(He);if(b){let w=b.target,P=W.parseLocator(Array.isArray(w)?`${w[0]}@${w[1]}`:`${He}@${w}`);mIe(P,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${R.name}@${R.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with dependency ${W.prettyLocator(e.project.configuration,P)} from sibling portal ${W.prettyIdent(e.project.configuration,W.parseIdent(b.portal.name))}`})}else le.set(He,{target:Je.reference,portal:Ie})}}}}let at=e.hoistingLimitsByCwd?.get(te),Re=H?te:V.relative(p,ue.toPortablePath(At.packageLocation))||Bt.dot,ke=e.hoistingLimitsByCwd?.get(Re);v(ne,At,Ie,ce,C,we,Re,at==="dependencies"||ke==="dependencies"||ke==="workspaces")}}};return v(A.name,u,A,h,u,u.packageDependencies,Bt.dot,!1),{packageTree:h,hoistingLimits:a,errors:r,preserveSymlinksRequired:o}};function yIe(t,e,r){let o=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return ue.toPortablePath(o||t.packageLocation)}function mIt(t,e,r){let o=e.getLocator(t.name.replace(v0,""),t.reference),a=e.getPackageInformation(o);if(a===null)throw new Error("Assertion failed: Expected the package to be registered");return r.pnpifyFs?{linkType:"SOFT",target:ue.toPortablePath(a.packageLocation)}:{linkType:a.linkType,target:yIe(a,t,e)}}var yIt=(t,e,r)=>{let o=new Map,a=(E,I,v)=>{let{linkType:x,target:C}=mIt(E,t,r);return{locator:gA(E),nodePath:I,target:C,linkType:x,aliases:v}},n=E=>{let[I,v]=E.split("/");return v?{scope:I,name:v}:{scope:null,name:I}},u=new Set,A=(E,I,v)=>{if(u.has(E))return;u.add(E);let x=Array.from(E.references).sort().join("#");for(let C of E.dependencies){let R=Array.from(C.references).sort().join("#");if(C.identName===E.identName.replace(v0,"")&&R===x)continue;let L=Array.from(C.references).sort(),U={name:C.identName,reference:L[0]},{name:J,scope:te}=n(C.name),ae=te?[te,J]:[J],fe=V.join(I,dIe),ce=V.join(fe,...ae),me=`${v}/${U.name}`,he=a(U,v,L.slice(1)),Be=!1;if(he.linkType==="SOFT"&&r.project){let we=r.project.workspacesByCwd.get(he.target.slice(0,-1));Be=!!(we&&!we.manifest.name)}if(!C.name.endsWith(v0)&&!Be){let we=o.get(ce);if(we){if(we.dirList)throw new Error(`Assertion failed: ${ce} cannot merge dir node with leaf node`);{let Se=W.parseLocator(we.locator),le=W.parseLocator(he.locator);if(we.linkType!==he.linkType)throw new Error(`Assertion failed: ${ce} cannot merge nodes with different link types ${we.nodePath}/${W.stringifyLocator(Se)} and ${v}/${W.stringifyLocator(le)}`);if(Se.identHash!==le.identHash)throw new Error(`Assertion failed: ${ce} cannot merge nodes with different idents ${we.nodePath}/${W.stringifyLocator(Se)} and ${v}/s${W.stringifyLocator(le)}`);he.aliases=[...he.aliases,...we.aliases,W.parseLocator(we.locator).reference]}}o.set(ce,he);let g=ce.split("/"),Ee=g.indexOf(dIe);for(let Se=g.length-1;Ee>=0&&Se>Ee;Se--){let le=ue.toPortablePath(g.slice(0,Se).join(V.sep)),ne=g[Se],ee=o.get(le);if(!ee)o.set(le,{dirList:new Set([ne])});else if(ee.dirList){if(ee.dirList.has(ne))break;ee.dirList.add(ne)}}}A(C,he.linkType==="SOFT"?he.target:ce,me)}},p=a({name:e.name,reference:Array.from(e.references)[0]},"",[]),h=p.target;return o.set(h,p),A(e,h,""),o};Ye();Ye();St();St();nA();Nl();var oG={};Vt(oG,{PnpInstaller:()=>mm,PnpLinker:()=>P0,UnplugCommand:()=>x0,default:()=>VIt,getPnpPath:()=>b0,jsInstallUtils:()=>yA,pnpUtils:()=>av,quotePathIfNeeded:()=>r1e});St();var t1e=ve("url");Ye();Ye();St();St();var EIe={["DEFAULT"]:{collapsed:!1,next:{["*"]:"DEFAULT"}},["TOP_LEVEL"]:{collapsed:!1,next:{fallbackExclusionList:"FALLBACK_EXCLUSION_LIST",packageRegistryData:"PACKAGE_REGISTRY_DATA",["*"]:"DEFAULT"}},["FALLBACK_EXCLUSION_LIST"]:{collapsed:!1,next:{["*"]:"FALLBACK_EXCLUSION_ENTRIES"}},["FALLBACK_EXCLUSION_ENTRIES"]:{collapsed:!0,next:{["*"]:"FALLBACK_EXCLUSION_DATA"}},["FALLBACK_EXCLUSION_DATA"]:{collapsed:!0,next:{["*"]:"DEFAULT"}},["PACKAGE_REGISTRY_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_REGISTRY_ENTRIES"}},["PACKAGE_REGISTRY_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_STORE_DATA"}},["PACKAGE_STORE_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_STORE_ENTRIES"}},["PACKAGE_STORE_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_INFORMATION_DATA"}},["PACKAGE_INFORMATION_DATA"]:{collapsed:!1,next:{packageDependencies:"PACKAGE_DEPENDENCIES",["*"]:"DEFAULT"}},["PACKAGE_DEPENDENCIES"]:{collapsed:!1,next:{["*"]:"PACKAGE_DEPENDENCY"}},["PACKAGE_DEPENDENCY"]:{collapsed:!0,next:{["*"]:"DEFAULT"}}};function EIt(t,e,r){let o="";o+="[";for(let a=0,n=t.length;a"u"||(A!==0&&(a+=", "),a+=JSON.stringify(p),a+=": ",a+=EQ(p,h,e,r).replace(/^ +/g,""),A+=1)}return a+="}",a}function IIt(t,e,r){let o=Object.keys(t),a=`${r} `,n="";n+=r,n+=`{ +`;let u=0;for(let A=0,p=o.length;A"u"||(u!==0&&(n+=",",n+=` +`),n+=a,n+=JSON.stringify(h),n+=": ",n+=EQ(h,E,e,a).replace(/^ +/g,""),u+=1)}return u!==0&&(n+=` +`),n+=r,n+="}",n}function EQ(t,e,r,o){let{next:a}=EIe[r],n=a[t]||a["*"];return CIe(e,n,o)}function CIe(t,e,r){let{collapsed:o}=EIe[e];return Array.isArray(t)?o?EIt(t,e,r):CIt(t,e,r):typeof t=="object"&&t!==null?o?wIt(t,e,r):IIt(t,e,r):JSON.stringify(t)}function wIe(t){return CIe(t,"TOP_LEVEL","")}function XB(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function BIt(t){let e=new Map,r=XB(t.fallbackExclusionList||[],[({name:o,reference:a})=>o,({name:o,reference:a})=>a]);for(let{name:o,reference:a}of r){let n=e.get(o);typeof n>"u"&&e.set(o,n=new Set),n.add(a)}return Array.from(e).map(([o,a])=>[o,Array.from(a)])}function vIt(t){return XB(t.fallbackPool||[],([e])=>e)}function DIt(t){let e=[];for(let[r,o]of XB(t.packageRegistry,([a])=>a===null?"0":`1${a}`)){let a=[];e.push([r,a]);for(let[n,{packageLocation:u,packageDependencies:A,packagePeers:p,linkType:h,discardFromLookup:E}]of XB(o,([I])=>I===null?"0":`1${I}`)){let I=[];r!==null&&n!==null&&!A.has(r)&&I.push([r,n]);for(let[C,R]of XB(A.entries(),([L])=>L))I.push([C,R]);let v=p&&p.size>0?Array.from(p):void 0,x=E||void 0;a.push([n,{packageLocation:u,packageDependencies:I,packagePeers:v,linkType:h,discardFromLookup:x}])}}return e}function ZB(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:BIt(t),fallbackPool:vIt(t),packageRegistryData:DIt(t)}}var vIe=$e(BIe());function DIe(t,e){return[t?`${t} +`:"",`/* eslint-disable */ +`,`"use strict"; +`,` +`,e,` +`,(0,vIe.default)()].join("")}function SIt(t){return JSON.stringify(t,null,2)}function PIt(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\ +`)}'`}function bIt(t){return[`const RAW_RUNTIME_STATE = +`,`${PIt(wIe(t))}; + +`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`,` return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); +`,`} +`].join("")}function xIt(){return[`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`,` const fs = require('fs'); +`,` const path = require('path'); +`,` const pnpDataFilepath = path.resolve(__dirname, ${JSON.stringify(dr.pnpData)}); +`,` return hydrateRuntimeState(JSON.parse(fs.readFileSync(pnpDataFilepath, 'utf8')), {basePath: basePath || __dirname}); +`,`} +`].join("")}function SIe(t){let e=ZB(t),r=bIt(e);return DIe(t.shebang,r)}function PIe(t){let e=ZB(t),r=xIt(),o=DIe(t.shebang,r);return{dataFile:SIt(e),loaderFile:o}}St();function Gj(t,{basePath:e}){let r=ue.toPortablePath(e),o=V.resolve(r),a=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,n=new Map,u=new Map(t.packageRegistryData.map(([I,v])=>[I,new Map(v.map(([x,C])=>{if(I===null!=(x===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let R=C.discardFromLookup??!1,L={name:I,reference:x},U=n.get(C.packageLocation);U?(U.discardFromLookup=U.discardFromLookup&&R,R||(U.locator=L)):n.set(C.packageLocation,{locator:L,discardFromLookup:R});let J=null;return[x,{packageDependencies:new Map(C.packageDependencies),packagePeers:new Set(C.packagePeers),linkType:C.linkType,discardFromLookup:R,get packageLocation(){return J||(J=V.join(o,C.packageLocation))}}]}))])),A=new Map(t.fallbackExclusionList.map(([I,v])=>[I,new Set(v)])),p=new Map(t.fallbackPool),h=t.dependencyTreeRoots,E=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:h,enableTopLevelFallback:E,fallbackExclusionList:A,fallbackPool:p,ignorePattern:a,packageLocatorsByLocations:n,packageRegistry:u}}St();St();var np=ve("module"),dm=ve("url"),$j=ve("util");var Mo=ve("url");var QIe=$e(ve("assert"));var qj=Array.isArray,$B=JSON.stringify,ev=Object.getOwnPropertyNames,hm=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Yj=(t,e)=>RegExp.prototype.exec.call(t,e),Wj=(t,...e)=>RegExp.prototype[Symbol.replace].apply(t,e),D0=(t,...e)=>String.prototype.endsWith.apply(t,e),Kj=(t,...e)=>String.prototype.includes.apply(t,e),Vj=(t,...e)=>String.prototype.lastIndexOf.apply(t,e),tv=(t,...e)=>String.prototype.indexOf.apply(t,e),bIe=(t,...e)=>String.prototype.replace.apply(t,e),S0=(t,...e)=>String.prototype.slice.apply(t,e),dA=(t,...e)=>String.prototype.startsWith.apply(t,e),xIe=Map,kIe=JSON.parse;function rv(t,e,r){return class extends r{constructor(...o){super(e(...o)),this.code=t,this.name=`${r.name} [${t}]`}}}var FIe=rv("ERR_PACKAGE_IMPORT_NOT_DEFINED",(t,e,r)=>`Package import specifier "${t}" is not defined${e?` in package ${e}package.json`:""} imported from ${r}`,TypeError),Jj=rv("ERR_INVALID_MODULE_SPECIFIER",(t,e,r=void 0)=>`Invalid module "${t}" ${e}${r?` imported from ${r}`:""}`,TypeError),RIe=rv("ERR_INVALID_PACKAGE_TARGET",(t,e,r,o=!1,a=void 0)=>{let n=typeof r=="string"&&!o&&r.length&&!dA(r,"./");return e==="."?((0,QIe.default)(o===!1),`Invalid "exports" main target ${$B(r)} defined in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`):`Invalid "${o?"imports":"exports"}" target ${$B(r)} defined for '${e}' in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`},Error),nv=rv("ERR_INVALID_PACKAGE_CONFIG",(t,e,r)=>`Invalid package config ${t}${e?` while importing ${e}`:""}${r?`. ${r}`:""}`,Error),TIe=rv("ERR_PACKAGE_PATH_NOT_EXPORTED",(t,e,r=void 0)=>e==="."?`No "exports" main defined in ${t}package.json${r?` imported from ${r}`:""}`:`Package subpath '${e}' is not defined by "exports" in ${t}package.json${r?` imported from ${r}`:""}`,Error);var wQ=ve("url");function NIe(t,e){let r=Object.create(null);for(let o=0;oe):t+e}iv(r,t,o,u,a)}Yj(OIe,S0(t,2))!==null&&iv(r,t,o,u,a);let p=new URL(t,o),h=p.pathname,E=new URL(".",o).pathname;if(dA(h,E)||iv(r,t,o,u,a),e==="")return p;if(Yj(OIe,e)!==null){let I=n?bIe(r,"*",()=>e):r+e;FIt(I,o,u,a)}return n?new URL(Wj(MIe,p.href,()=>e)):new URL(e,p)}function TIt(t){let e=+t;return`${e}`!==t?!1:e>=0&&e<4294967295}function qC(t,e,r,o,a,n,u,A){if(typeof e=="string")return RIt(e,r,o,t,a,n,u,A);if(qj(e)){if(e.length===0)return null;let p;for(let h=0;hn?-1:n>a||r===-1?1:o===-1||t.length>e.length?-1:e.length>t.length?1:0}function NIt(t,e,r){if(typeof t=="string"||qj(t))return!0;if(typeof t!="object"||t===null)return!1;let o=ev(t),a=!1,n=0;for(let u=0;u=h.length&&D0(e,I)&&_Ie(n,h)===1&&Vj(h,"*")===E&&(n=h,u=S0(e,E,e.length-I.length))}}if(n){let p=r[n],h=qC(t,p,u,n,o,!0,!1,a);return h==null&&zj(e,t,o),h}zj(e,t,o)}function jIe({name:t,base:e,conditions:r,readFileSyncFn:o}){if(t==="#"||dA(t,"#/")||D0(t,"/")){let u="is not a valid internal imports specifier name";throw new Jj(t,u,(0,Mo.fileURLToPath)(e))}let a,n=LIe(e,o);if(n.exists){a=(0,Mo.pathToFileURL)(n.pjsonPath);let u=n.imports;if(u)if(hm(u,t)&&!Kj(t,"*")){let A=qC(a,u[t],"",t,e,!1,!0,r);if(A!=null)return A}else{let A="",p,h=ev(u);for(let E=0;E=I.length&&D0(t,x)&&_Ie(A,I)===1&&Vj(I,"*")===v&&(A=I,p=S0(t,v,t.length-x.length))}}if(A){let E=u[A],I=qC(a,E,p,A,e,!0,!0,r);if(I!=null)return I}}}QIt(t,a,e)}St();var OIt=new Set(["BUILTIN_NODE_RESOLUTION_FAILED","MISSING_DEPENDENCY","MISSING_PEER_DEPENDENCY","QUALIFIED_PATH_RESOLUTION_FAILED","UNDECLARED_DEPENDENCY"]);function $i(t,e,r={},o){o??=OIt.has(t)?"MODULE_NOT_FOUND":t;let a={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...a,value:o},pnpCode:{...a,value:t},data:{...a,value:r}})}function au(t){return ue.normalize(ue.fromPortablePath(t))}var WIe=$e(qIe());function KIe(t){return MIt(),Zj[t]}var Zj;function MIt(){Zj||(Zj={"--conditions":[],...YIe(UIt()),...YIe(process.execArgv)})}function YIe(t){return(0,WIe.default)({"--conditions":[String],"-C":"--conditions"},{argv:t,permissive:!0})}function UIt(){let t=[],e=_It(process.env.NODE_OPTIONS||"",t);return t.length,e}function _It(t,e){let r=[],o=!1,a=!0;for(let n=0;nparseInt(t,10)),VIe=mA>19||mA===19&&gm>=2||mA===18&&gm>=13,Bzt=mA===20&&gm<6||mA===19&&gm>=3,vzt=mA>19||mA===19&&gm>=6,Dzt=mA>=21||mA===20&&gm>=10||mA===18&&gm>=19;function JIe(t){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(t=t.map(e=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(e)))),VIe)process.send({"watch:require":t});else for(let e of t)process.send({"watch:require":e})}function eG(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,o=Number(process.env.PNP_DEBUG_LEVEL),a=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,n=/^(\/|\.{1,2}(\/|$))/,u=/\/$/,A=/^\.{0,2}\//,p={name:null,reference:null},h=[],E=new Set;if(t.enableTopLevelFallback===!0&&h.push(p),e.compatibilityMode!==!1)for(let Re of["react-scripts","gatsby"]){let ke=t.packageRegistry.get(Re);if(ke)for(let xe of ke.keys()){if(xe===null)throw new Error("Assertion failed: This reference shouldn't be null");h.push({name:Re,reference:xe})}}let{ignorePattern:I,packageRegistry:v,packageLocatorsByLocations:x}=t;function C(Re,ke){return{fn:Re,args:ke,error:null,result:null}}function R(Re){let ke=process.stderr?.hasColors?.()??process.stdout.isTTY,xe=(Je,je)=>`\x1B[${Je}m${je}\x1B[0m`,He=Re.error;console.error(He?xe("31;1",`\u2716 ${Re.error?.message.replace(/\n.*/s,"")}`):xe("33;1","\u203C Resolution")),Re.args.length>0&&console.error();for(let Je of Re.args)console.error(` ${xe("37;1","In \u2190")} ${(0,$j.inspect)(Je,{colors:ke,compact:!0})}`);Re.result&&(console.error(),console.error(` ${xe("37;1","Out \u2192")} ${(0,$j.inspect)(Re.result,{colors:ke,compact:!0})}`));let Te=new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2)??[];if(Te.length>0){console.error();for(let Je of Te)console.error(` ${xe("38;5;244",Je)}`)}console.error()}function L(Re,ke){if(e.allowDebug===!1)return ke;if(Number.isFinite(o)){if(o>=2)return(...xe)=>{let He=C(Re,xe);try{return He.result=ke(...xe)}catch(Te){throw He.error=Te}finally{R(He)}};if(o>=1)return(...xe)=>{try{return ke(...xe)}catch(He){let Te=C(Re,xe);throw Te.error=He,R(Te),He}}}return ke}function U(Re){let ke=g(Re);if(!ke)throw $i("INTERNAL","Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return ke}function J(Re){if(Re.name===null)return!0;for(let ke of t.dependencyTreeRoots)if(ke.name===Re.name&&ke.reference===Re.reference)return!0;return!1}let te=new Set(["node","require",...KIe("--conditions")]);function ae(Re,ke=te,xe){let He=le(V.join(Re,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(He===null)throw $i("INTERNAL",`The locator that owns the "${Re}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:Te}=U(He),Je=V.join(Te,dr.manifest);if(!e.fakeFs.existsSync(Je))return null;let je=JSON.parse(e.fakeFs.readFileSync(Je,"utf8"));if(je.exports==null)return null;let b=V.contains(Te,Re);if(b===null)throw $i("INTERNAL","unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");b!=="."&&!A.test(b)&&(b=`./${b}`);try{let w=HIe({packageJSONUrl:(0,dm.pathToFileURL)(ue.fromPortablePath(Je)),packageSubpath:b,exports:je.exports,base:xe?(0,dm.pathToFileURL)(ue.fromPortablePath(xe)):null,conditions:ke});return ue.toPortablePath((0,dm.fileURLToPath)(w))}catch(w){throw $i("EXPORTS_RESOLUTION_FAILED",w.message,{unqualifiedPath:au(Re),locator:He,pkgJson:je,subpath:au(b),conditions:ke},w.code)}}function fe(Re,ke,{extensions:xe}){let He;try{ke.push(Re),He=e.fakeFs.statSync(Re)}catch{}if(He&&!He.isDirectory())return e.fakeFs.realpathSync(Re);if(He&&He.isDirectory()){let Te;try{Te=JSON.parse(e.fakeFs.readFileSync(V.join(Re,dr.manifest),"utf8"))}catch{}let Je;if(Te&&Te.main&&(Je=V.resolve(Re,Te.main)),Je&&Je!==Re){let je=fe(Je,ke,{extensions:xe});if(je!==null)return je}}for(let Te=0,Je=xe.length;Te{let b=JSON.stringify(je.name);if(He.has(b))return;He.add(b);let w=Ee(je);for(let P of w)if(U(P).packagePeers.has(Re))Te(P);else{let F=xe.get(P.name);typeof F>"u"&&xe.set(P.name,F=new Set),F.add(P.reference)}};Te(ke);let Je=[];for(let je of[...xe.keys()].sort())for(let b of[...xe.get(je)].sort())Je.push({name:je,reference:b});return Je}function le(Re,{resolveIgnored:ke=!1,includeDiscardFromLookup:xe=!1}={}){if(he(Re)&&!ke)return null;let He=V.relative(t.basePath,Re);He.match(n)||(He=`./${He}`),He.endsWith("/")||(He=`${He}/`);do{let Te=x.get(He);if(typeof Te>"u"||Te.discardFromLookup&&!xe){He=He.substring(0,He.lastIndexOf("/",He.length-2)+1);continue}return Te.locator}while(He!=="");return null}function ne(Re){try{return e.fakeFs.readFileSync(ue.toPortablePath(Re),"utf8")}catch(ke){if(ke.code==="ENOENT")return;throw ke}}function ee(Re,ke,{considerBuiltins:xe=!0}={}){if(Re.startsWith("#"))throw new Error("resolveToUnqualified can not handle private import mappings");if(Re==="pnpapi")return ue.toPortablePath(e.pnpapiResolution);if(xe&&(0,np.isBuiltin)(Re))return null;let He=au(Re),Te=ke&&au(ke);if(ke&&he(ke)&&(!V.isAbsolute(Re)||le(Re)===null)){let b=me(Re,ke);if(b===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) + +Require request: "${He}" +Required by: ${Te} +`,{request:He,issuer:Te});return ue.toPortablePath(b)}let Je,je=Re.match(a);if(je){if(!ke)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:He,issuer:Te});let[,b,w]=je,P=le(ke);if(!P){let Ne=me(Re,ke);if(Ne===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). + +Require path: "${He}" +Required by: ${Te} +`,{request:He,issuer:Te});return ue.toPortablePath(Ne)}let F=U(P).packageDependencies.get(b),z=null;if(F==null&&P.name!==null){let Ne=t.fallbackExclusionList.get(P.name);if(!Ne||!Ne.has(P.reference)){for(let dt=0,Gt=h.length;dtJ(ot))?X=$i("MISSING_PEER_DEPENDENCY",`${P.name} tried to access ${b} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. + +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${P.name}@${P.reference} (via ${Te}) +${Ne.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} +`).join("")} +`,{request:He,issuer:Te,issuerLocator:Object.assign({},P),dependencyName:b,brokenAncestors:Ne}):X=$i("MISSING_PEER_DEPENDENCY",`${P.name} tried to access ${b} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. + +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${P.name}@${P.reference} (via ${Te}) + +${Ne.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} +`).join("")} +`,{request:He,issuer:Te,issuerLocator:Object.assign({},P),dependencyName:b,brokenAncestors:Ne})}else F===void 0&&(!xe&&(0,np.isBuiltin)(Re)?J(P)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${b}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${b} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. + +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${Te} +`,{request:He,issuer:Te,dependencyName:b}):X=$i("UNDECLARED_DEPENDENCY",`${P.name} tried to access ${b}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${b} isn't otherwise declared in ${P.name}'s dependencies, this makes the require call ambiguous and unsound. + +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${Te} +`,{request:He,issuer:Te,issuerLocator:Object.assign({},P),dependencyName:b}):J(P)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${b}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. + +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${Te} +`,{request:He,issuer:Te,dependencyName:b}):X=$i("UNDECLARED_DEPENDENCY",`${P.name} tried to access ${b}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. + +Required package: ${b}${b!==He?` (via "${He}")`:""} +Required by: ${P.name}@${P.reference} (via ${Te}) +`,{request:He,issuer:Te,issuerLocator:Object.assign({},P),dependencyName:b}));if(F==null){if(z===null||X===null)throw X||new Error("Assertion failed: Expected an error to have been set");F=z;let Ne=X.message.replace(/\n.*/g,"");X.message=Ne,!E.has(Ne)&&o!==0&&(E.add(Ne),process.emitWarning(X))}let Z=Array.isArray(F)?{name:F[0],reference:F[1]}:{name:b,reference:F},ie=U(Z);if(!ie.packageLocation)throw $i("MISSING_DEPENDENCY",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. + +Required package: ${Z.name}@${Z.reference}${Z.name!==He?` (via "${He}")`:""} +Required by: ${P.name}@${P.reference} (via ${Te}) +`,{request:He,issuer:Te,dependencyLocator:Object.assign({},Z)});let Pe=ie.packageLocation;w?Je=V.join(Pe,w):Je=Pe}else if(V.isAbsolute(Re))Je=V.normalize(Re);else{if(!ke)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:He,issuer:Te});let b=V.resolve(ke);ke.match(u)?Je=V.normalize(V.join(b,Re)):Je=V.normalize(V.join(V.dirname(b),Re))}return V.normalize(Je)}function Ie(Re,ke,xe=te,He){if(n.test(Re))return ke;let Te=ae(ke,xe,He);return Te?V.normalize(Te):ke}function Fe(Re,{extensions:ke=Object.keys(np.Module._extensions)}={}){let xe=[],He=fe(Re,xe,{extensions:ke});if(He)return V.normalize(He);{JIe(xe.map(je=>ue.fromPortablePath(je)));let Te=au(Re),Je=le(Re);if(Je){let{packageLocation:je}=U(Je),b=!0;try{e.fakeFs.accessSync(je)}catch(w){if(w?.code==="ENOENT")b=!1;else{let P=(w?.message??w??"empty exception thrown").replace(/^[A-Z]/,y=>y.toLowerCase());throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Required package exists but could not be accessed (${P}). + +Missing package: ${Je.name}@${Je.reference} +Expected package location: ${au(je)} +`,{unqualifiedPath:Te,extensions:ke})}}if(!b){let w=je.includes("/unplugged/")?"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).":"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.";throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`${w} + +Missing package: ${Je.name}@${Je.reference} +Expected package location: ${au(je)} +`,{unqualifiedPath:Te,extensions:ke})}}throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Qualified path resolution failed: we looked for the following paths, but none could be accessed. + +Source path: ${Te} +${xe.map(je=>`Not found: ${au(je)} +`).join("")}`,{unqualifiedPath:Te,extensions:ke})}}function At(Re,ke,xe){if(!ke)throw new Error("Assertion failed: An issuer is required to resolve private import mappings");let He=jIe({name:Re,base:(0,dm.pathToFileURL)(ue.fromPortablePath(ke)),conditions:xe.conditions??te,readFileSyncFn:ne});if(He instanceof URL)return Fe(ue.toPortablePath((0,dm.fileURLToPath)(He)),{extensions:xe.extensions});if(He.startsWith("#"))throw new Error("Mapping from one private import to another isn't allowed");return H(He,ke,xe)}function H(Re,ke,xe={}){try{if(Re.startsWith("#"))return At(Re,ke,xe);let{considerBuiltins:He,extensions:Te,conditions:Je}=xe,je=ee(Re,ke,{considerBuiltins:He});if(Re==="pnpapi")return je;if(je===null)return null;let b=()=>ke!==null?he(ke):!1,w=(!He||!(0,np.isBuiltin)(Re))&&!b()?Ie(Re,je,Je,ke):je;return Fe(w,{extensions:Te})}catch(He){throw Object.hasOwn(He,"pnpCode")&&Object.assign(He.data,{request:au(Re),issuer:ke&&au(ke)}),He}}function at(Re){let ke=V.normalize(Re),xe=mi.resolveVirtual(ke);return xe!==ke?xe:null}return{VERSIONS:Be,topLevel:we,getLocator:(Re,ke)=>Array.isArray(ke)?{name:ke[0],reference:ke[1]}:{name:Re,reference:ke},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let Re=[];for(let[ke,xe]of v)for(let He of xe.keys())ke!==null&&He!==null&&Re.push({name:ke,reference:He});return Re},getPackageInformation:Re=>{let ke=g(Re);if(ke===null)return null;let xe=ue.fromPortablePath(ke.packageLocation);return{...ke,packageLocation:xe}},findPackageLocator:Re=>le(ue.toPortablePath(Re)),resolveToUnqualified:L("resolveToUnqualified",(Re,ke,xe)=>{let He=ke!==null?ue.toPortablePath(ke):null,Te=ee(ue.toPortablePath(Re),He,xe);return Te===null?null:ue.fromPortablePath(Te)}),resolveUnqualified:L("resolveUnqualified",(Re,ke)=>ue.fromPortablePath(Fe(ue.toPortablePath(Re),ke))),resolveRequest:L("resolveRequest",(Re,ke,xe)=>{let He=ke!==null?ue.toPortablePath(ke):null,Te=H(ue.toPortablePath(Re),He,xe);return Te===null?null:ue.fromPortablePath(Te)}),resolveVirtual:L("resolveVirtual",Re=>{let ke=at(ue.toPortablePath(Re));return ke!==null?ue.fromPortablePath(ke):null})}}St();var zIe=(t,e,r)=>{let o=ZB(t),a=Gj(o,{basePath:e}),n=ue.join(e,dr.pnpCjs);return eG(a,{fakeFs:r,pnpapiResolution:n})};var rG=$e(ZIe());jt();var yA={};Vt(yA,{checkManifestCompatibility:()=>$Ie,extractBuildRequest:()=>IQ,getExtractHint:()=>nG,hasBindingGyp:()=>iG});Ye();St();function $Ie(t){return W.isPackageCompatible(t,Ji.getArchitectureSet())}function IQ(t,e,r,{configuration:o}){let a=[];for(let n of["preinstall","install","postinstall"])e.manifest.scripts.has(n)&&a.push({type:0,script:n});return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&a.push({type:1,script:"node-gyp rebuild"}),a.length===0?null:t.linkType!=="HARD"?{skipped:!0,explain:n=>n.reportWarningOnce(6,`${W.prettyLocator(o,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`)}:r&&r.built===!1?{skipped:!0,explain:n=>n.reportInfoOnce(5,`${W.prettyLocator(o,t)} lists build scripts, but its build has been explicitly disabled through configuration.`)}:!o.get("enableScripts")&&!r.built?{skipped:!0,explain:n=>n.reportWarningOnce(4,`${W.prettyLocator(o,t)} lists build scripts, but all build scripts have been disabled.`)}:$Ie(t)?{skipped:!1,directives:a}:{skipped:!0,explain:n=>n.reportWarningOnce(76,`${W.prettyLocator(o,t)} The ${Ji.getArchitectureName()} architecture is incompatible with this package, build skipped.`)}}var jIt=new Set([".exe",".bin",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function nG(t){return t.packageFs.getExtractHint({relevantExtensions:jIt})}function iG(t){let e=V.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var av={};Vt(av,{getUnpluggedPath:()=>ov});Ye();St();function ov(t,{configuration:e}){return V.resolve(e.get("pnpUnpluggedFolder"),W.slugifyLocator(t))}var GIt=new Set([W.makeIdent(null,"open").identHash,W.makeIdent(null,"opn").identHash]),P0=class{constructor(){this.mode="strict";this.pnpCache=new Map}getCustomDataKey(){return JSON.stringify({name:"PnpLinker",version:2})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the PnP linker to be enabled");let o=b0(r.project).cjs;if(!oe.existsSync(o))throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let a=_e.getFactoryWithDefault(this.pnpCache,o,()=>_e.dynamicRequire(o,{cachingStrategy:_e.CachingStrategy.FsTime})),n={name:W.stringifyIdent(e),reference:e.reference},u=a.getPackageInformation(n);if(!u)throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return ue.toPortablePath(u.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=b0(r.project).cjs;if(!oe.existsSync(o))return null;let n=_e.getFactoryWithDefault(this.pnpCache,o,()=>_e.dynamicRequire(o,{cachingStrategy:_e.CachingStrategy.FsTime})).findPackageLocator(ue.fromPortablePath(e));return n?W.makeLocator(W.parseIdent(n.name),n.reference):null}makeInstaller(e){return new mm(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},mm=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new _e.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}attachCustomData(e){this.customData=e}async installPackage(e,r,o){let a=W.stringifyIdent(e),n=e.reference,u=!!this.opts.project.tryWorkspaceByLocator(e),A=W.isVirtualLocator(e),p=e.peerDependencies.size>0&&!A,h=!p&&!u,E=!p&&e.linkType!=="SOFT",I,v;if(h||E){let te=A?W.devirtualizeLocator(e):e;I=this.customData.store.get(te.locatorHash),typeof I>"u"&&(I=await qIt(r),e.linkType==="HARD"&&this.customData.store.set(te.locatorHash,I)),I.manifest.type==="module"&&(this.isESMLoaderRequired=!0),v=this.opts.project.getDependencyMeta(te,e.version)}let x=h?IQ(e,I,v,{configuration:this.opts.project.configuration}):null,C=E?await this.unplugPackageIfNeeded(e,I,r,v,o):r.packageFs;if(V.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let R=V.resolve(C.getRealPath(),r.prefixPath),L=sG(this.opts.project.cwd,R),U=new Map,J=new Set;if(A){for(let te of e.peerDependencies.values())U.set(W.stringifyIdent(te),null),J.add(W.stringifyIdent(te));if(!u){let te=W.devirtualizeLocator(e);this.virtualTemplates.set(te.locatorHash,{location:sG(this.opts.project.cwd,mi.resolveVirtual(R)),locator:te})}}return _e.getMapWithDefault(this.packageRegistry,a).set(n,{packageLocation:L,packageDependencies:U,packagePeers:J,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:R,buildRequest:x}}async attachInternalDependencies(e,r){let o=this.getPackageInformation(e);for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){for(let o of r)this.getDiskInformation(o).packageDependencies.set(W.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=b0(this.opts.project);if(this.isEsmEnabled()||await oe.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await oe.removePromise(e.cjs),await oe.removePromise(e.data),await oe.removePromise(e.esmLoader),await oe.removePromise(this.opts.project.configuration.get("pnpUnpluggedFolder"));return}for(let{locator:E,location:I}of this.virtualTemplates.values())_e.getMapWithDefault(this.packageRegistry,W.stringifyIdent(E)).set(E.reference,{packageLocation:I,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let r=this.opts.project.configuration.get("pnpFallbackMode"),o=this.opts.project.workspaces.map(({anchoredLocator:E})=>({name:W.stringifyIdent(E),reference:E.reference})),a=r!=="none",n=[],u=new Map,A=_e.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),p=this.packageRegistry,h=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let E of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(E)&&n.push({name:W.stringifyIdent(E),reference:E.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:o,enableTopLevelFallback:a,fallbackExclusionList:n,fallbackPool:u,ignorePattern:A,packageRegistry:p,shebang:h}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has("pnpEnableEsmLoader"))return this.opts.project.configuration.get("pnpEnableEsmLoader");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type==="module")return!0;return!1}async finalizeInstallWithPnp(e){let r=b0(this.opts.project),o=await this.locateNodeModules(e.ignorePattern);if(o.length>0){this.opts.report.reportWarning(31,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let n of o)await oe.removePromise(n)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let n=SIe(e);await oe.changeFilePromise(r.cjs,n,{automaticNewlines:!0,mode:493}),await oe.removePromise(r.data)}else{let{dataFile:n,loaderFile:u}=PIe(e);await oe.changeFilePromise(r.cjs,u,{automaticNewlines:!0,mode:493}),await oe.changeFilePromise(r.data,n,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,"ESM support for PnP uses the experimental loader API and is therefore experimental"),await oe.changeFilePromise(r.esmLoader,(0,rG.default)(),{automaticNewlines:!0,mode:420}));let a=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await oe.removePromise(a);else for(let n of await oe.readdirPromise(a)){let u=V.resolve(a,n);this.unpluggedPaths.has(u)||await oe.removePromise(u)}}async locateNodeModules(e){let r=[],o=e?new RegExp(e):null;for(let a of this.opts.project.workspaces){let n=V.join(a.cwd,"node_modules");if(o&&o.test(V.relative(this.opts.project.cwd,a.cwd))||!oe.existsSync(n))continue;let u=await oe.readdirPromise(n,{withFileTypes:!0}),A=u.filter(p=>!p.isDirectory()||p.name===".bin"||!p.name.startsWith("."));if(A.length===u.length)r.push(n);else for(let p of A)r.push(V.join(n,p.name))}return r}async unplugPackageIfNeeded(e,r,o,a,n){return this.shouldBeUnplugged(e,r,a)?this.unplugPackage(e,o,n):o.packageFs}shouldBeUnplugged(e,r,o){return typeof o.unplugged<"u"?o.unplugged:GIt.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(IQ(e,r,o,{configuration:this.opts.project.configuration})?.skipped===!1||r.misc.extractHint)}async unplugPackage(e,r,o){let a=ov(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new Uu(a,{baseFs:r.packageFs,pathUtils:V}):(this.unpluggedPaths.add(a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let n=V.join(a,r.prefixPath,".ready");await oe.existsPromise(n)||(this.opts.project.storedBuildState.delete(e.locatorHash),await oe.mkdirPromise(a,{recursive:!0}),await oe.copyPromise(a,Bt.dot,{baseFs:r.packageFs,overwrite:!1}),await oe.writeFilePromise(n,""))})),new gn(a))}getPackageInformation(e){let r=W.stringifyIdent(e),o=e.reference,a=this.packageRegistry.get(r);if(!a)throw new Error(`Assertion failed: The package information store should have been available (for ${W.prettyIdent(this.opts.project.configuration,e)})`);let n=a.get(o);if(!n)throw new Error(`Assertion failed: The package information should have been available (for ${W.prettyLocator(this.opts.project.configuration,e)})`);return n}getDiskInformation(e){let r=_e.getMapWithDefault(this.packageRegistry,"@@disk"),o=sG(this.opts.project.cwd,e);return _e.getFactoryWithDefault(r,o,()=>({packageLocation:o,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1}))}};function sG(t,e){let r=V.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function qIt(t){let e=await Ot.tryFind(t.prefixPath,{baseFs:t.packageFs})??new Ot,r=new Set(["preinstall","install","postinstall"]);for(let o of e.scripts.keys())r.has(o)||e.scripts.delete(o);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:nG(t),hasBindingGyp:iG(t)}}}Ye();Ye();jt();var e1e=$e(Zo());var x0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);if(r.get("nodeLinker")!=="pnp")throw new it("This command can only be used if the `nodeLinker` option is set to `pnp`");await o.restoreInstallState();let u=new Set(this.patterns),A=this.patterns.map(x=>{let C=W.parseDescriptor(x),R=C.range!=="unknown"?C:W.makeDescriptor(C,"*");if(!kr.validRange(R.range))throw new it(`The range of the descriptor patterns must be a valid semver range (${W.prettyDescriptor(r,R)})`);return L=>{let U=W.stringifyIdent(L);return!e1e.default.isMatch(U,W.stringifyIdent(R))||L.version&&!kr.satisfiesWithPrereleases(L.version,R.range)?!1:(u.delete(x),!0)}}),p=()=>{let x=[];for(let C of o.storedPackages.values())!o.tryWorkspaceByLocator(C)&&!W.isVirtualLocator(C)&&A.some(R=>R(C))&&x.push(C);return x},h=x=>{let C=new Set,R=[],L=(U,J)=>{if(C.has(U.locatorHash))return;let te=!!o.tryWorkspaceByLocator(U);if(!(J>0&&!this.recursive&&te)&&(C.add(U.locatorHash),!o.tryWorkspaceByLocator(U)&&A.some(ae=>ae(U))&&R.push(U),!(J>0&&!this.recursive)))for(let ae of U.dependencies.values()){let fe=o.storedResolutions.get(ae.descriptorHash);if(!fe)throw new Error("Assertion failed: The resolution should have been registered");let ce=o.storedPackages.get(fe);if(!ce)throw new Error("Assertion failed: The package should have been registered");L(ce,J+1)}};for(let U of x)L(U.anchoredPackage,0);return R},E,I;if(this.all&&this.recursive?(E=p(),I="the project"):this.all?(E=h(o.workspaces),I="any workspace"):(E=h([a]),I="this workspace"),u.size>1)throw new it(`Patterns ${de.prettyList(r,u,de.Type.CODE)} don't match any packages referenced by ${I}`);if(u.size>0)throw new it(`Pattern ${de.prettyList(r,u,de.Type.CODE)} doesn't match any packages referenced by ${I}`);E=_e.sortMap(E,x=>W.stringifyLocator(x));let v=await Nt.start({configuration:r,stdout:this.context.stdout,json:this.json},async x=>{for(let C of E){let R=C.version??"unknown",L=o.topLevelWorkspace.manifest.ensureDependencyMeta(W.makeDescriptor(C,R));L.unplugged=!0,x.reportInfo(0,`Will unpack ${W.prettyLocator(r,C)} to ${de.pretty(r,ov(C,{configuration:r}),de.Type.PATH)}`),x.reportJson({locator:W.stringifyLocator(C),version:R})}await o.topLevelWorkspace.persistManifest(),this.json||x.reportSeparator()});return v.hasErrors()?v.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};x0.paths=[["unplug"]],x0.usage=nt.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]});var b0=t=>({cjs:V.join(t.cwd,dr.pnpCjs),data:V.join(t.cwd,dr.pnpData),esmLoader:V.join(t.cwd,dr.pnpEsmLoader)}),r1e=t=>/\s/.test(t)?JSON.stringify(t):t;async function YIt(t,e,r){let o=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/,n=(e.NODE_OPTIONS??"").replace(o," ").replace(a," ").trim();if(t.configuration.get("nodeLinker")!=="pnp"){e.NODE_OPTIONS=n;return}let u=b0(t),A=`--require ${r1e(ue.fromPortablePath(u.cjs))}`;oe.existsSync(u.esmLoader)&&(A=`${A} --experimental-loader ${(0,t1e.pathToFileURL)(ue.fromPortablePath(u.esmLoader)).href}`),oe.existsSync(u.cjs)&&(e.NODE_OPTIONS=n?`${A} ${n}`:A)}async function WIt(t,e){let r=b0(t);e(r.cjs),e(r.data),e(r.esmLoader),e(t.configuration.get("pnpUnpluggedFolder"))}var KIt={hooks:{populateYarnPaths:WIt,setupScriptEnvironment:YIt},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "pnpm", or "node-modules"',type:"STRING",default:"pnp"},winLinkType:{description:"Whether Yarn should use Windows Junctions or symlinks when creating links on Windows.",type:"STRING",values:["junctions","symlinks"],default:"junctions"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:"STRING",default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:"STRING",default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:"STRING",default:[],isArray:!0},pnpEnableEsmLoader:{description:"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.",type:"BOOLEAN",default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:"BOOLEAN",default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:"STRING",default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:"ABSOLUTE_PATH",default:"./.yarn/unplugged"}},linkers:[P0],commands:[x0]},VIt=KIt;var u1e=$e(a1e());jt();var pG=$e(ve("crypto")),A1e=$e(ve("fs")),f1e=1,Si="node_modules",BQ=".bin",p1e=".yarn-state.yml",A1t=1e3,hG=(o=>(o.CLASSIC="classic",o.HARDLINKS_LOCAL="hardlinks-local",o.HARDLINKS_GLOBAL="hardlinks-global",o))(hG||{}),lv=class{constructor(){this.installStateCache=new Map}getCustomDataKey(){return JSON.stringify({name:"NodeModulesLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the node-modules linker to be enabled");let o=r.project.tryWorkspaceByLocator(e);if(o)return o.cwd;let a=await _e.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await fG(r.project,{unrollAliases:!0}));if(a===null)throw new it("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let n=a.locatorMap.get(W.stringifyLocator(e));if(!n){let p=new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw p.code="LOCATOR_NOT_INSTALLED",p}let u=n.locations.sort((p,h)=>p.split(V.sep).length-h.split(V.sep).length),A=V.join(r.project.configuration.startingCwd,Si);return u.find(p=>V.contains(A,p))||n.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=await _e.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await fG(r.project,{unrollAliases:!0}));if(o===null)return null;let{locationRoot:a,segments:n}=vQ(V.resolve(e),{skipPrefix:r.project.cwd}),u=o.locationTree.get(a);if(!u)return null;let A=u.locator;for(let p of n){if(u=u.children.get(p),!u)break;A=u.locator||A}return W.parseLocator(A)}makeInstaller(e){return new AG(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},AG=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}attachCustomData(e){this.customData=e}async installPackage(e,r){let o=V.resolve(r.packageFs.getRealPath(),r.prefixPath),a=this.customData.store.get(e.locatorHash);if(typeof a>"u"&&(a=await f1t(e,r),e.linkType==="HARD"&&this.customData.store.set(e.locatorHash,a)),!W.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildRequest:null};let n=new Map,u=new Set;n.has(W.stringifyIdent(e))||n.set(W.stringifyIdent(e),e.reference);let A=e;if(W.isVirtualLocator(e)){A=W.devirtualizeLocator(e);for(let E of e.peerDependencies.values())n.set(W.stringifyIdent(E),null),u.add(W.stringifyIdent(E))}let p={packageLocation:`${ue.fromPortablePath(o)}/`,packageDependencies:n,packagePeers:u,linkType:e.linkType,discardFromLookup:r.discardFromLookup??!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:a,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:p});let h=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(A.locatorHash,h),{packageLocation:o,buildRequest:null}}async attachInternalDependencies(e,r){let o=this.localStore.get(e.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected information object to have been registered");for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.pnpNode.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),r=await fG(this.opts.project),o=this.opts.project.configuration.get("nmMode");(r===null||o!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:o,mtimeMs:0});let a=new Map(this.opts.project.workspaces.map(v=>{let x=this.opts.project.configuration.get("nmHoistingLimits");try{x=_e.validateEnum(JB,v.manifest.installConfig?.hoistingLimits??x)}catch{let R=W.prettyWorkspace(this.opts.project.configuration,v);this.opts.report.reportWarning(57,`${R}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(JB).join(", ")}, using default: "${x}"`)}return[v.relativeCwd,x]})),n=new Map(this.opts.project.workspaces.map(v=>{let x=this.opts.project.configuration.get("nmSelfReferences");return x=v.manifest.installConfig?.selfReferences??x,[v.relativeCwd,x]})),u={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(v,x)=>Array.isArray(x)?{name:x[0],reference:x[1]}:{name:v,reference:x},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(v=>{let x=v.anchoredLocator;return{name:W.stringifyIdent(x),reference:x.reference}}),getPackageInformation:v=>{let x=v.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:W.makeLocator(W.parseIdent(v.name),v.reference),C=this.localStore.get(x.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the package reference to have been registered");return C.pnpNode},findPackageLocator:v=>{let x=this.opts.project.tryWorkspaceByCwd(ue.toPortablePath(v));if(x!==null){let C=x.anchoredLocator;return{name:W.stringifyIdent(C),reference:C.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:v=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(v)))},{tree:A,errors:p,preserveSymlinksRequired:h}=zB(u,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:a,project:this.opts.project,selfReferencesByCwd:n});if(!A){for(let{messageName:v,text:x}of p)this.opts.report.reportError(v,x);return}let E=Hj(A);await y1t(r,E,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async v=>{let x=W.parseLocator(v),C=this.localStore.get(x.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the slot to exist");return C.customPackageData.manifest}});let I=[];for(let[v,x]of E.entries()){if(m1e(v))continue;let C=W.parseLocator(v),R=this.localStore.get(C.locatorHash);if(typeof R>"u")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(R.pkg))continue;let L=yA.extractBuildRequest(R.pkg,R.customPackageData,R.dependencyMeta,{configuration:this.opts.project.configuration});!L||I.push({buildLocations:x.locations,locator:C,buildRequest:L})}return h&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${de.pretty(this.opts.project.configuration,"--preserve-symlinks",de.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:I}}};async function f1t(t,e){let r=await Ot.tryFind(e.prefixPath,{baseFs:e.packageFs})??new Ot,o=new Set(["preinstall","install","postinstall"]);for(let a of r.scripts.keys())o.has(a)||r.scripts.delete(a);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{hasBindingGyp:yA.hasBindingGyp(e)}}}async function p1t(t,e,r,o,{installChangedByUser:a}){let n="";n+=`# Warning: This file is automatically generated. Removing it is fine, but will +`,n+=`# cause your node_modules installation to become invalidated. +`,n+=` +`,n+=`__metadata: +`,n+=` version: ${f1e} +`,n+=` nmMode: ${o.value} +`;let u=Array.from(e.keys()).sort(),A=W.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let E of u){let I=e.get(E);n+=` +`,n+=`${JSON.stringify(E)}: +`,n+=` locations: +`;for(let v of I.locations){let x=V.contains(t.cwd,v);if(x===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` - ${JSON.stringify(x)} +`}if(I.aliases.length>0){n+=` aliases: +`;for(let v of I.aliases)n+=` - ${JSON.stringify(v)} +`}if(E===A&&r.size>0){n+=` bin: +`;for(let[v,x]of r){let C=V.contains(t.cwd,v);if(C===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` ${JSON.stringify(C)}: +`;for(let[R,L]of x){let U=V.relative(V.join(v,Si),L);n+=` ${JSON.stringify(R)}: ${JSON.stringify(U)} +`}}}}let p=t.cwd,h=V.join(p,Si,p1e);a&&await oe.removePromise(h),await oe.changeFilePromise(h,n,{automaticNewlines:!0})}async function fG(t,{unrollAliases:e=!1}={}){let r=t.cwd,o=V.join(r,Si,p1e),a;try{a=await oe.statPromise(o)}catch{}if(!a)return null;let n=Ki(await oe.readFilePromise(o,"utf8"));if(n.__metadata.version>f1e)return null;let u=n.__metadata.nmMode||"classic",A=new Map,p=new Map;delete n.__metadata;for(let[h,E]of Object.entries(n)){let I=E.locations.map(x=>V.join(r,x)),v=E.bin;if(v)for(let[x,C]of Object.entries(v)){let R=V.join(r,ue.toPortablePath(x)),L=_e.getMapWithDefault(p,R);for(let[U,J]of Object.entries(C))L.set(U,ue.toPortablePath([R,Si,J].join(V.sep)))}if(A.set(h,{target:Bt.dot,linkType:"HARD",locations:I,aliases:E.aliases||[]}),e&&E.aliases)for(let x of E.aliases){let{scope:C,name:R}=W.parseLocator(h),L=W.makeLocator(W.makeIdent(C,R),x),U=W.stringifyLocator(L);A.set(U,{target:Bt.dot,linkType:"HARD",locations:I,aliases:[]})}}return{locatorMap:A,binSymlinks:p,locationTree:h1e(A,{skipPrefix:t.cwd}),nmMode:u,mtimeMs:a.mtimeMs}}var WC=async(t,e)=>{if(t.split(V.sep).indexOf(Si)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{if(!e.innerLoop){let o=e.allowSymlink?await oe.statPromise(t):await oe.lstatPromise(t);if(e.allowSymlink&&!o.isDirectory()||!e.allowSymlink&&o.isSymbolicLink()){await oe.unlinkPromise(t);return}}let r=await oe.readdirPromise(t,{withFileTypes:!0});for(let o of r){let a=V.join(t,o.name);o.isDirectory()?(o.name!==Si||e&&e.innerLoop)&&await WC(a,{innerLoop:!0,contentsOnly:!1}):await oe.unlinkPromise(a)}e.contentsOnly||await oe.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},l1e=4,vQ=(t,{skipPrefix:e})=>{let r=V.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let o=r.split(V.sep).filter(p=>p!==""),a=o.indexOf(Si),n=o.slice(0,a).join(V.sep),u=V.join(e,n),A=o.slice(a);return{locationRoot:u,segments:A}},h1e=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let o=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&V.contains(e,n.target)!==null){let A=_e.getFactoryWithDefault(r,n.target,o);A.locator=a,A.linkType=n.linkType}for(let u of n.locations){let{locationRoot:A,segments:p}=vQ(u,{skipPrefix:e}),h=_e.getFactoryWithDefault(r,A,o);for(let E=0;E{if(process.platform==="win32"&&r==="junctions"){let o;try{o=await oe.lstatPromise(t)}catch{}if(!o||o.isDirectory()){await oe.symlinkPromise(t,e,"junction");return}}await oe.symlinkPromise(V.relative(V.dirname(e),t),e)};async function g1e(t,e,r){let o=V.join(t,`${pG.default.randomBytes(16).toString("hex")}.tmp`);try{await oe.writeFilePromise(o,r);try{await oe.linkPromise(o,e)}catch{}}finally{await oe.unlinkPromise(o)}}async function h1t({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:o,baseFs:a,nmMode:n}){if(r.kind===d1e.FILE){if(n.value==="hardlinks-global"&&o&&r.digest){let A=V.join(o,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await oe.statPromise(A);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs(o.FILE="file",o.DIRECTORY="directory",o.SYMLINK="symlink",o))(d1e||{}),g1t=async(t,e,{baseFs:r,globalHardlinksStore:o,nmMode:a,windowsLinkType:n,packageChecksum:u})=>{await oe.mkdirPromise(t,{recursive:!0});let A=async(E=Bt.dot)=>{let I=V.join(e,E),v=await r.readdirPromise(I,{withFileTypes:!0}),x=new Map;for(let C of v){let R=V.join(E,C.name),L,U=V.join(I,C.name);if(C.isFile()){if(L={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let J=await wn.checksumFile(U,{baseFs:r,algorithm:"sha1"});L.digest=J}}else if(C.isDirectory())L={kind:"directory"};else if(C.isSymbolicLink())L={kind:"symlink",symlinkTo:await r.readlinkPromise(U)};else throw new Error(`Unsupported file type (file: ${U}, mode: 0o${await r.statSync(U).mode.toString(8).padStart(6,"0")})`);if(x.set(R,L),C.isDirectory()&&R!==Si){let J=await A(R);for(let[te,ae]of J)x.set(te,ae)}}return x},p;if(a.value==="hardlinks-global"&&o&&u){let E=V.join(o,u.substring(0,2),`${u.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await oe.readFilePromise(E,"utf8"))))}catch{p=await A()}}else p=await A();let h=!1;for(let[E,I]of p){let v=V.join(e,E),x=V.join(t,E);if(I.kind==="directory")await oe.mkdirPromise(x,{recursive:!0});else if(I.kind==="file"){let C=I.mtimeMs;await h1t({srcPath:v,dstPath:x,entry:I,nmMode:a,baseFs:r,globalHardlinksStore:o}),I.mtimeMs!==C&&(h=!0)}else I.kind==="symlink"&&await gG(V.resolve(V.dirname(x),I.symlinkTo),x,n)}if(a.value==="hardlinks-global"&&o&&h&&u){let E=V.join(o,u.substring(0,2),`${u.substring(2)}.json`);await oe.removePromise(E),await g1e(o,E,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function d1t(t,e,r,o){let a=new Map,n=new Map,u=new Map,A=!1,p=(h,E,I,v,x)=>{let C=!0,R=V.join(h,E),L=new Set;if(E===Si||E.startsWith("@")){let J;try{J=oe.statSync(R)}catch{}C=!!J,J?J.mtimeMs>r?(A=!0,L=new Set(oe.readdirSync(R))):L=new Set(I.children.get(E).children.keys()):A=!0;let te=e.get(h);if(te){let ae=V.join(h,Si,BQ),fe;try{fe=oe.statSync(ae)}catch{}if(!fe)A=!0;else if(fe.mtimeMs>r){A=!0;let ce=new Set(oe.readdirSync(ae)),me=new Map;n.set(h,me);for(let[he,Be]of te)ce.has(he)&&me.set(he,Be)}else n.set(h,te)}}else C=x.has(E);let U=I.children.get(E);if(C){let{linkType:J,locator:te}=U,ae={children:new Map,linkType:J,locator:te};if(v.children.set(E,ae),te){let fe=_e.getSetWithDefault(u,te);fe.add(R),u.set(te,fe)}for(let fe of U.children.keys())p(R,fe,U,ae,L)}else U.locator&&o.storedBuildState.delete(W.parseLocator(U.locator).locatorHash)};for(let[h,E]of t){let{linkType:I,locator:v}=E,x={children:new Map,linkType:I,locator:v};if(a.set(h,x),v){let C=_e.getSetWithDefault(u,E.locator);C.add(h),u.set(E.locator,C)}E.children.has(Si)&&p(h,Si,E,x,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:u,installChangedByUser:A}}function m1e(t){let e=W.parseDescriptor(t);return W.isVirtualDescriptor(e)&&(e=W.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function m1t(t,e,r,{loadManifest:o}){let a=new Map;for(let[A,{locations:p}]of t){let h=m1e(A)?null:await o(A,p[0]),E=new Map;if(h)for(let[I,v]of h.bin){let x=V.join(p[0],v);v!==""&&oe.existsSync(x)&&E.set(I,v)}a.set(A,E)}let n=new Map,u=(A,p,h)=>{let E=new Map,I=V.contains(r,A);if(h.locator&&I!==null){let v=a.get(h.locator);for(let[x,C]of v){let R=V.join(A,ue.toPortablePath(C));E.set(x,R)}for(let[x,C]of h.children){let R=V.join(A,x),L=u(R,R,C);L.size>0&&n.set(A,new Map([...n.get(A)||new Map,...L]))}}else for(let[v,x]of h.children){let C=u(V.join(A,v),p,x);for(let[R,L]of C)E.set(R,L)}return E};for(let[A,p]of e){let h=u(A,A,p);h.size>0&&n.set(A,new Map([...n.get(A)||new Map,...h]))}return n}var c1e=(t,e)=>{if(!t||!e)return t===e;let r=W.parseLocator(t);W.isVirtualLocator(r)&&(r=W.devirtualizeLocator(r));let o=W.parseLocator(e);return W.isVirtualLocator(o)&&(o=W.devirtualizeLocator(o)),W.areLocatorsEqual(r,o)};function dG(t){return V.join(t.get("globalFolder"),"store")}async function y1t(t,e,{baseFs:r,project:o,report:a,loadManifest:n,realLocatorChecksums:u}){let A=V.join(o.cwd,Si),{locationTree:p,binSymlinks:h,locatorLocations:E,installChangedByUser:I}=d1t(t.locationTree,t.binSymlinks,t.mtimeMs,o),v=h1e(e,{skipPrefix:o.cwd}),x=[],C=async({srcDir:Be,dstDir:we,linkType:g,globalHardlinksStore:Ee,nmMode:Se,windowsLinkType:le,packageChecksum:ne})=>{let ee=(async()=>{try{g==="SOFT"?(await oe.mkdirPromise(V.dirname(we),{recursive:!0}),await gG(V.resolve(Be),we,le)):await g1t(we,Be,{baseFs:r,globalHardlinksStore:Ee,nmMode:Se,windowsLinkType:le,packageChecksum:ne})}catch(Ie){throw Ie.message=`While persisting ${Be} -> ${we} ${Ie.message}`,Ie}finally{ae.tick()}})().then(()=>x.splice(x.indexOf(ee),1));x.push(ee),x.length>l1e&&await Promise.race(x)},R=async(Be,we,g)=>{let Ee=(async()=>{let Se=async(le,ne,ee)=>{try{ee.innerLoop||await oe.mkdirPromise(ne,{recursive:!0});let Ie=await oe.readdirPromise(le,{withFileTypes:!0});for(let Fe of Ie){if(!ee.innerLoop&&Fe.name===BQ)continue;let At=V.join(le,Fe.name),H=V.join(ne,Fe.name);Fe.isDirectory()?(Fe.name!==Si||ee&&ee.innerLoop)&&(await oe.mkdirPromise(H,{recursive:!0}),await Se(At,H,{...ee,innerLoop:!0})):me.value==="hardlinks-local"||me.value==="hardlinks-global"?await oe.linkPromise(At,H):await oe.copyFilePromise(At,H,A1e.default.constants.COPYFILE_FICLONE)}}catch(Ie){throw ee.innerLoop||(Ie.message=`While cloning ${le} -> ${ne} ${Ie.message}`),Ie}finally{ee.innerLoop||ae.tick()}};await Se(Be,we,g)})().then(()=>x.splice(x.indexOf(Ee),1));x.push(Ee),x.length>l1e&&await Promise.race(x)},L=async(Be,we,g)=>{if(g)for(let[Ee,Se]of we.children){let le=g.children.get(Ee);await L(V.join(Be,Ee),Se,le)}else{we.children.has(Si)&&await WC(V.join(Be,Si),{contentsOnly:!1});let Ee=V.basename(Be)===Si&&v.has(V.join(V.dirname(Be),V.sep));await WC(Be,{contentsOnly:Be===A,allowSymlink:Ee})}};for(let[Be,we]of p){let g=v.get(Be);for(let[Ee,Se]of we.children){if(Ee===".")continue;let le=g&&g.children.get(Ee),ne=V.join(Be,Ee);await L(ne,Se,le)}}let U=async(Be,we,g)=>{if(g){c1e(we.locator,g.locator)||await WC(Be,{contentsOnly:we.linkType==="HARD"});for(let[Ee,Se]of we.children){let le=g.children.get(Ee);await U(V.join(Be,Ee),Se,le)}}else{we.children.has(Si)&&await WC(V.join(Be,Si),{contentsOnly:!0});let Ee=V.basename(Be)===Si&&v.has(V.join(V.dirname(Be),V.sep));await WC(Be,{contentsOnly:we.linkType==="HARD",allowSymlink:Ee})}};for(let[Be,we]of v){let g=p.get(Be);for(let[Ee,Se]of we.children){if(Ee===".")continue;let le=g&&g.children.get(Ee);await U(V.join(Be,Ee),Se,le)}}let J=new Map,te=[];for(let[Be,we]of E)for(let g of we){let{locationRoot:Ee,segments:Se}=vQ(g,{skipPrefix:o.cwd}),le=v.get(Ee),ne=Ee;if(le){for(let ee of Se)if(ne=V.join(ne,ee),le=le.children.get(ee),!le)break;if(le){let ee=c1e(le.locator,Be),Ie=e.get(le.locator),Fe=Ie.target,At=ne,H=Ie.linkType;if(ee)J.has(Fe)||J.set(Fe,At);else if(Fe!==At){let at=W.parseLocator(le.locator);W.isVirtualLocator(at)&&(at=W.devirtualizeLocator(at)),te.push({srcDir:Fe,dstDir:At,linkType:H,realLocatorHash:at.locatorHash})}}}}for(let[Be,{locations:we}]of e.entries())for(let g of we){let{locationRoot:Ee,segments:Se}=vQ(g,{skipPrefix:o.cwd}),le=p.get(Ee),ne=v.get(Ee),ee=Ee,Ie=e.get(Be),Fe=W.parseLocator(Be);W.isVirtualLocator(Fe)&&(Fe=W.devirtualizeLocator(Fe));let At=Fe.locatorHash,H=Ie.target,at=g;if(H===at)continue;let Re=Ie.linkType;for(let ke of Se)ne=ne.children.get(ke);if(!le)te.push({srcDir:H,dstDir:at,linkType:Re,realLocatorHash:At});else for(let ke of Se)if(ee=V.join(ee,ke),le=le.children.get(ke),!le){te.push({srcDir:H,dstDir:at,linkType:Re,realLocatorHash:At});break}}let ae=Xs.progressViaCounter(te.length),fe=a.reportProgress(ae),ce=o.configuration.get("nmMode"),me={value:ce},he=o.configuration.get("winLinkType");try{let Be=me.value==="hardlinks-global"?`${dG(o.configuration)}/v1`:null;if(Be&&!await oe.existsPromise(Be)){await oe.mkdirpPromise(Be);for(let g=0;g<256;g++)await oe.mkdirPromise(V.join(Be,g.toString(16).padStart(2,"0")))}for(let g of te)(g.linkType==="SOFT"||!J.has(g.srcDir))&&(J.set(g.srcDir,g.dstDir),await C({...g,globalHardlinksStore:Be,nmMode:me,windowsLinkType:he,packageChecksum:u.get(g.realLocatorHash)||null}));await Promise.all(x),x.length=0;for(let g of te){let Ee=J.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==Ee&&await R(Ee,g.dstDir,{nmMode:me})}await Promise.all(x),await oe.mkdirPromise(A,{recursive:!0});let we=await m1t(e,v,o.cwd,{loadManifest:n});await E1t(h,we,o.cwd,he),await p1t(o,e,we,me,{installChangedByUser:I}),ce=="hardlinks-global"&&me.value=="hardlinks-local"&&a.reportWarningOnce(74,"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices")}finally{fe.stop()}}async function E1t(t,e,r,o){for(let a of t.keys()){if(V.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);if(!e.has(a)){let n=V.join(a,Si,BQ);await oe.removePromise(n)}}for(let[a,n]of e){if(V.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let u=V.join(a,Si,BQ),A=t.get(a)||new Map;await oe.mkdirPromise(u,{recursive:!0});for(let p of A.keys())n.has(p)||(await oe.removePromise(V.join(u,p)),process.platform==="win32"&&await oe.removePromise(V.join(u,`${p}.cmd`)));for(let[p,h]of n){let E=A.get(p),I=V.join(u,p);E!==h&&(process.platform==="win32"?await(0,u1e.default)(ue.fromPortablePath(h),ue.fromPortablePath(I),{createPwshFile:!1}):(await oe.removePromise(I),await gG(h,I,o),V.contains(r,await oe.realpathPromise(h))!==null&&await oe.chmodPromise(h,493)))}}}Ye();St();nA();var cv=class extends P0{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new mG(r)}},mG=class extends mm{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let o=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),a=zIe(r,this.opts.project.cwd,o),{tree:n,errors:u}=zB(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:I,text:v}of u)this.opts.report.reportError(I,v);return}let A=new Map;r.fallbackPool=A;let p=(I,v)=>{let x=W.parseLocator(v.locator),C=W.stringifyIdent(x);C===I?A.set(I,x.reference):A.set(I,[C,x.reference])},h=V.join(this.opts.project.cwd,dr.nodeModules),E=n.get(h);if(!(typeof E>"u")){if("target"in E)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let I of E.dirList){let v=V.join(h,I),x=n.get(v);if(typeof x>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in x)p(I,x);else for(let C of x.dirList){let R=V.join(v,C),L=n.get(R);if(typeof L>"u")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in L)p(`${I}/${C}`,L);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var C1t={hooks:{cleanGlobalArtifacts:async t=>{let e=dG(t);await oe.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevents packages to be hoisted past specific levels",type:"STRING",values:["workspaces","dependencies","none"],default:"none"},nmMode:{description:"Defines in which measure Yarn must use hardlinks and symlinks when generated `node_modules` directories.",type:"STRING",values:["classic","hardlinks-local","hardlinks-global"],default:"classic"},nmSelfReferences:{description:"Defines whether the linker should generate self-referencing symlinks for workspaces.",type:"BOOLEAN",default:!0}},linkers:[lv,cv]},w1t=C1t;var dq={};Vt(dq,{NpmHttpFetcher:()=>fv,NpmRemapResolver:()=>pv,NpmSemverFetcher:()=>dl,NpmSemverResolver:()=>hv,NpmTagResolver:()=>gv,default:()=>Lvt,npmConfigUtils:()=>Zn,npmHttpUtils:()=>Zr,npmPublishUtils:()=>ow});Ye();var D1e=$e(zn());var Wn="npm:";var Zr={};Vt(Zr,{AuthType:()=>I1e,customPackageError:()=>ym,del:()=>R1t,get:()=>Em,getIdentUrl:()=>DQ,getPackageMetadata:()=>JC,handleInvalidAuthenticationError:()=>k0,post:()=>Q1t,put:()=>F1t});Ye();Ye();St();var wG=$e(f2()),C1e=$e(D_()),w1e=$e(zn());var Zn={};Vt(Zn,{RegistryType:()=>y1e,getAuditRegistry:()=>I1t,getAuthConfiguration:()=>CG,getDefaultRegistry:()=>uv,getPublishRegistry:()=>B1t,getRegistryConfiguration:()=>E1e,getScopeConfiguration:()=>EG,getScopeRegistry:()=>KC,normalizeRegistry:()=>oc});var y1e=(o=>(o.AUDIT_REGISTRY="npmAuditRegistry",o.FETCH_REGISTRY="npmRegistryServer",o.PUBLISH_REGISTRY="npmPublishRegistry",o))(y1e||{});function oc(t){return t.replace(/\/$/,"")}function I1t({configuration:t}){return uv({configuration:t,type:"npmAuditRegistry"})}function B1t(t,{configuration:e}){return t.publishConfig?.registry?oc(t.publishConfig.registry):t.name?KC(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):uv({configuration:e,type:"npmPublishRegistry"})}function KC(t,{configuration:e,type:r="npmRegistryServer"}){let o=EG(t,{configuration:e});if(o===null)return uv({configuration:e,type:r});let a=o.get(r);return a===null?uv({configuration:e,type:r}):oc(a)}function uv({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return oc(r!==null?r:t.get("npmRegistryServer"))}function E1e(t,{configuration:e}){let r=e.get("npmRegistries"),o=oc(t),a=r.get(o);if(typeof a<"u")return a;let n=r.get(o.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}function EG(t,{configuration:e}){if(t===null)return null;let o=e.get("npmScopes").get(t);return o||null}function CG(t,{configuration:e,ident:r}){let o=r&&EG(r.scope,{configuration:e});return o?.get("npmAuthIdent")||o?.get("npmAuthToken")?o:E1e(t,{configuration:e})||e}var I1e=(a=>(a[a.NO_AUTH=0]="NO_AUTH",a[a.BEST_EFFORT=1]="BEST_EFFORT",a[a.CONFIGURATION=2]="CONFIGURATION",a[a.ALWAYS_AUTH=3]="ALWAYS_AUTH",a))(I1e||{});async function k0(t,{attemptedAs:e,registry:r,headers:o,configuration:a}){if(PQ(t))throw new zt(41,"Invalid OTP token");if(t.originalError?.name==="HTTPError"&&t.originalError?.response.statusCode===401)throw new zt(41,`Invalid authentication (${typeof e!="string"?`as ${await N1t(r,o,{configuration:a})}`:`attempted as ${e}`})`)}function ym(t,e){let r=t.response?.statusCode;return r?r===404?"Package not found":r>=500&&r<600?`The registry appears to be down (using a ${de.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function DQ(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var B1e=new Map,v1t=new Map;async function D1t(t){return await _e.getFactoryWithDefault(B1e,t,async()=>{let e=null;try{e=await oe.readJsonPromise(t)}catch{}return e})}async function S1t(t,e,{configuration:r,cached:o,registry:a,headers:n,version:u,...A}){return await _e.getFactoryWithDefault(v1t,t,async()=>await Em(DQ(e),{...A,customErrorMessage:ym,configuration:r,registry:a,ident:e,headers:{...n,["If-None-Match"]:o?.etag,["If-Modified-Since"]:o?.lastModified},wrapNetworkRequest:async p=>async()=>{let h=await p();if(h.statusCode===304){if(o===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...h,body:o.metadata}}let E=P1t(JSON.parse(h.body.toString())),I={metadata:E,etag:h.headers.etag,lastModified:h.headers["last-modified"]};return B1e.set(t,Promise.resolve(I)),Promise.resolve().then(async()=>{let v=`${t}-${process.pid}.tmp`;await oe.mkdirPromise(V.dirname(v),{recursive:!0}),await oe.writeJsonPromise(v,I,{compact:!0}),await oe.renamePromise(v,t)}).catch(()=>{}),{...h,body:E}}}))}async function JC(t,{cache:e,project:r,registry:o,headers:a,version:n,...u}){let{configuration:A}=r;o=Av(A,{ident:t,registry:o});let p=x1t(A,o),h=V.join(p,`${W.slugifyIdent(t)}.json`),E=null;if(!r.lockfileNeedsRefresh&&(E=await D1t(h),E)){if(typeof n<"u"&&typeof E.metadata.versions[n]<"u")return E.metadata;if(A.get("enableOfflineMode")){let I=structuredClone(E.metadata),v=new Set;if(e){for(let C of Object.keys(I.versions)){let R=W.makeLocator(t,`npm:${C}`),L=e.getLocatorMirrorPath(R);(!L||!oe.existsSync(L))&&(delete I.versions[C],v.add(C))}let x=I["dist-tags"].latest;if(v.has(x)){let C=Object.keys(E.metadata.versions).sort(w1e.default.compare),R=C.indexOf(x);for(;v.has(C[R])&&R>=0;)R-=1;R>=0?I["dist-tags"].latest=C[R]:delete I["dist-tags"].latest}}return I}}return await S1t(h,t,{...u,configuration:A,cached:E,registry:o,headers:a,version:n})}var v1e=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function P1t(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,(0,C1e.default)(r,v1e)]))}}var b1t=wn.makeHash(...v1e).slice(0,6);function x1t(t,e){let r=k1t(t),o=new URL(e);return V.join(r,b1t,o.hostname)}function k1t(t){return V.join(t.get("globalFolder"),"metadata/npm")}async function Em(t,{configuration:e,headers:r,ident:o,authType:a,registry:n,...u}){n=Av(e,{ident:o,registry:n}),o&&o.scope&&typeof a>"u"&&(a=1);let A=await SQ(n,{authType:a,configuration:e,ident:o});A&&(r={...r,authorization:A});try{return await nn.get(t.charAt(0)==="/"?`${n}${t}`:t,{configuration:e,headers:r,...u})}catch(p){throw await k0(p,{registry:n,configuration:e,headers:r}),p}}async function Q1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await SQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await nn.post(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!PQ(I)||p)throw await k0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await IG(I,{configuration:o});let v={...a,...VC(p)};try{return await nn.post(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(x){throw await k0(x,{attemptedAs:r,registry:A,configuration:o,headers:a}),x}}}async function F1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await SQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await nn.put(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!PQ(I))throw await k0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await IG(I,{configuration:o});let v={...a,...VC(p)};try{return await nn.put(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(x){throw await k0(x,{attemptedAs:r,registry:A,configuration:o,headers:a}),x}}}async function R1t(t,{attemptedAs:e,configuration:r,headers:o,ident:a,authType:n=3,registry:u,otp:A,...p}){u=Av(r,{ident:a,registry:u});let h=await SQ(u,{authType:n,configuration:r,ident:a});h&&(o={...o,authorization:h}),A&&(o={...o,...VC(A)});try{return await nn.del(u+t,{configuration:r,headers:o,...p})}catch(E){if(!PQ(E)||A)throw await k0(E,{attemptedAs:e,registry:u,configuration:r,headers:o}),E;A=await IG(E,{configuration:r});let I={...o,...VC(A)};try{return await nn.del(`${u}${t}`,{configuration:r,headers:I,...p})}catch(v){throw await k0(v,{attemptedAs:e,registry:u,configuration:r,headers:o}),v}}}function Av(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return KC(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return oc(r)}async function SQ(t,{authType:e=2,configuration:r,ident:o}){let a=CG(t,{configuration:r,ident:o}),n=T1t(a,e);if(!n)return null;let u=await r.reduceHook(A=>A.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:o});if(u)return u;if(a.get("npmAuthToken"))return`Bearer ${a.get("npmAuthToken")}`;if(a.get("npmAuthIdent")){let A=a.get("npmAuthIdent");return A.includes(":")?`Basic ${Buffer.from(A).toString("base64")}`:`Basic ${A}`}if(n&&e!==1)throw new zt(33,"No authentication configured for request");return null}function T1t(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function N1t(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await nn.get(new URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function IG(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Nt.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,de.pretty(e,"$1",de.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&Ji.openUrl){let{openNow:u}=await(0,wG.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});u&&(await Ji.openUrl(n[1])||(a.reportSeparator(),a.reportWarning(0,"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.")))}}}),process.stdout.write(` +`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||"";let{otp:o}=await(0,wG.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(` +`),o}function PQ(t){if(t.originalError?.name!=="HTTPError")return!1;try{return(t.originalError?.response.headers["www-authenticate"].split(/,\s*/).map(r=>r.toLowerCase())).includes("otp")}catch{return!1}}function VC(t){return{["npm-otp"]:t}}var fv=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o,params:a}=W.parseRange(e.reference);return!(!D1e.default.valid(o)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let{params:o}=W.parseRange(e.reference);if(o===null||typeof o.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await Em(o.__archiveUrl,{customErrorMessage:ym,configuration:r.project.configuration,ident:e});return await Xi.convertToZip(a,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();var pv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!W.tryParseDescriptor(e.range.slice(Wn.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){let o=r.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return r.resolver.getResolutionDependencies(o,r)}async getCandidates(e,r,o){let a=o.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return await o.resolver.getCandidates(a,r,o)}async getSatisfying(e,r,o,a){let n=a.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return a.resolver.getSatisfying(n,r,o,a)}resolve(e,r){throw new Error("Unreachable")}};Ye();Ye();var S1e=$e(zn());var dl=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let o=new URL(e.reference);return!(!S1e.default.valid(o.pathname)||o.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o;try{o=await Em(dl.getLocatorUrl(e),{customErrorMessage:ym,configuration:r.project.configuration,ident:e})}catch{o=await Em(dl.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:ym,configuration:r.project.configuration,ident:e})}return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:o}){let a=KC(e.scope,{configuration:o}),n=dl.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),a=a.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===a+n||r===a+n.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=kr.clean(e.reference.slice(Wn.length));if(r===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");return`${DQ(e)}/-/${e.name}-${r}.tgz`}};Ye();Ye();Ye();var BG=$e(zn());var bQ=W.makeIdent(null,"node-gyp"),L1t=/\b(node-gyp|prebuild-install)\b/,hv=class{supportsDescriptor(e,r){return e.range.startsWith(Wn)?!!kr.validRange(e.range.slice(Wn.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o}=W.parseRange(e.reference);return!!BG.default.valid(o)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=kr.validRange(e.range.slice(Wn.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);let n=await JC(e,{cache:o.fetchOptions?.cache,project:o.project,version:BG.default.valid(a.raw)?a.raw:void 0}),u=_e.mapAndFilter(Object.keys(n.versions),h=>{try{let E=new kr.SemVer(h);if(a.test(E))return E}catch{}return _e.mapAndFilter.skip}),A=u.filter(h=>!n.versions[h.raw].deprecated),p=A.length>0?A:u;return p.sort((h,E)=>-h.compare(E)),p.map(h=>{let E=W.makeLocator(e,`${Wn}${h.raw}`),I=n.versions[h.raw].dist.tarball;return dl.isConventionalTarballUrl(E,I,{configuration:o.project.configuration})?E:W.bindLocator(E,{__archiveUrl:I})})}async getSatisfying(e,r,o,a){let n=kr.validRange(e.range.slice(Wn.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);return{locators:_e.mapAndFilter(o,p=>{if(p.identHash!==e.identHash)return _e.mapAndFilter.skip;let h=W.tryParseRange(p.reference,{requireProtocol:Wn});if(!h)return _e.mapAndFilter.skip;let E=new kr.SemVer(h.selector);return n.test(E)?{locator:p,version:E}:_e.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:o}=W.parseRange(e.reference),a=kr.clean(o);if(a===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await JC(e,{cache:r.fetchOptions?.cache,project:r.project,version:a});if(!Object.hasOwn(n,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(!Object.hasOwn(n.versions,a))throw new zt(16,`Registry failed to return reference "${a}"`);let u=new Ot;if(u.load(n.versions[a]),!u.dependencies.has(bQ.identHash)&&!u.peerDependencies.has(bQ.identHash)){for(let A of u.scripts.values())if(A.match(L1t)){u.dependencies.set(bQ.identHash,W.makeDescriptor(bQ,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:u.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(u.dependencies),peerDependencies:u.peerDependencies,dependenciesMeta:u.dependenciesMeta,peerDependenciesMeta:u.peerDependenciesMeta,bin:u.bin}}};Ye();Ye();var P1e=$e(zn());var gv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!FE.test(e.range.slice(Wn.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(Wn.length),n=await JC(e,{cache:o.fetchOptions?.cache,project:o.project});if(!Object.hasOwn(n,"dist-tags"))throw new zt(15,'Registry returned invalid data - missing "dist-tags" field');let u=n["dist-tags"];if(!Object.hasOwn(u,a))throw new zt(16,`Registry failed to return tag "${a}"`);let A=u[a],p=W.makeLocator(e,`${Wn}${A}`),h=n.versions[A].dist.tarball;return dl.isConventionalTarballUrl(p,h,{configuration:o.project.configuration})?[p]:[W.bindLocator(p,{__archiveUrl:h})]}async getSatisfying(e,r,o,a){let n=[];for(let u of o){if(u.identHash!==e.identHash)continue;let A=W.tryParseRange(u.reference,{requireProtocol:Wn});if(!(!A||!P1e.default.valid(A.selector))){if(A.params?.__archiveUrl){let p=W.makeRange({protocol:Wn,selector:A.selector,source:null,params:null}),[h]=await a.resolver.getCandidates(W.makeDescriptor(e,p),r,a);if(u.reference!==h.reference)continue}n.push(u)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var ow={};Vt(ow,{getGitHead:()=>Tvt,getPublishAccess:()=>dBe,getReadmeContent:()=>mBe,makePublishBody:()=>Rvt});Ye();Ye();St();var Aq={};Vt(Aq,{PackCommand:()=>U0,default:()=>gvt,packUtils:()=>wA});Ye();Ye();Ye();St();jt();var wA={};Vt(wA,{genPackList:()=>XQ,genPackStream:()=>uq,genPackageManifest:()=>iBe,hasPackScripts:()=>lq,prepareForPack:()=>cq});Ye();St();var aq=$e(Zo()),rBe=$e(Z2e()),nBe=ve("zlib"),ivt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],svt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function lq(t){return!!(un.hasWorkspaceScript(t,"prepack")||un.hasWorkspaceScript(t,"postpack"))}async function cq(t,{report:e},r){await un.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let o=V.join(t.cwd,Ot.fileName);await oe.existsPromise(o)&&await t.manifest.loadFile(o,{baseFs:oe}),await r()}finally{await un.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function uq(t,e){typeof e>"u"&&(e=await XQ(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(V.normalize(n));for(let n of t.manifest.bin.values())r.add(V.normalize(n));let o=rBe.default.pack();process.nextTick(async()=>{for(let n of e){let u=V.normalize(n),A=V.resolve(t.cwd,u),p=V.join("package",u),h=await oe.lstatPromise(A),E={name:p,mtime:new Date(vi.SAFE_TIME*1e3)},I=r.has(u)?493:420,v,x,C=new Promise((L,U)=>{v=L,x=U}),R=L=>{L?x(L):v()};if(h.isFile()){let L;u==="package.json"?L=Buffer.from(JSON.stringify(await iBe(t),null,2)):L=await oe.readFilePromise(A),o.entry({...E,mode:I,type:"file"},L,R)}else h.isSymbolicLink()?o.entry({...E,mode:I,type:"symlink",linkname:await oe.readlinkPromise(A)},R):R(new Error(`Unsupported file type ${h.mode} for ${ue.fromPortablePath(u)}`));await C}o.finalize()});let a=(0,nBe.createGzip)();return o.pipe(a),a}async function iBe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function XQ(t){let e=t.project,r=e.configuration,o={accept:[],reject:[]};for(let I of svt)o.reject.push(I);for(let I of ivt)o.accept.push(I);o.reject.push(r.get("rcFilename"));let a=I=>{if(I===null||!I.startsWith(`${t.cwd}/`))return;let v=V.relative(t.cwd,I),x=V.resolve(Bt.root,v);o.reject.push(x)};a(V.resolve(e.cwd,dr.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(I=>I.populateYarnPaths,e,I=>{a(I)});for(let I of e.workspaces){let v=V.relative(t.cwd,I.cwd);v!==""&&!v.match(/^(\.\.)?\//)&&o.reject.push(`/${v}`)}let n={accept:[],reject:[]},u=t.manifest.publishConfig?.main??t.manifest.main,A=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;u!=null&&n.accept.push(V.resolve(Bt.root,u)),A!=null&&n.accept.push(V.resolve(Bt.root,A)),typeof p=="string"&&n.accept.push(V.resolve(Bt.root,p));for(let I of h.values())n.accept.push(V.resolve(Bt.root,I));if(p instanceof Map)for(let[I,v]of p.entries())n.accept.push(V.resolve(Bt.root,I)),typeof v=="string"&&n.accept.push(V.resolve(Bt.root,v));let E=t.manifest.files!==null;if(E){n.reject.push("/*");for(let I of t.manifest.files)sBe(n.accept,I,{cwd:Bt.root})}return await ovt(t.cwd,{hasExplicitFileList:E,globalList:o,ignoreList:n})}async function ovt(t,{hasExplicitFileList:e,globalList:r,ignoreList:o}){let a=[],n=new _u(t),u=[[Bt.root,[o]]];for(;u.length>0;){let[A,p]=u.pop(),h=await n.lstatPromise(A);if(!eBe(A,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let E=await n.readdirPromise(A),I=!1,v=!1;if(!e||A!==Bt.root)for(let R of E)I=I||R===".gitignore",v=v||R===".npmignore";let x=v?await $2e(n,A,".npmignore"):I?await $2e(n,A,".gitignore"):null,C=x!==null?[x].concat(p):p;eBe(A,{globalList:r,ignoreLists:p})&&(C=[...p,{accept:[],reject:["**/*"]}]);for(let R of E)u.push([V.resolve(A,R),C])}else(h.isFile()||h.isSymbolicLink())&&a.push(V.relative(Bt.root,A))}return a.sort()}async function $2e(t,e,r){let o={accept:[],reject:[]},a=await t.readFilePromise(V.join(e,r),"utf8");for(let n of a.split(/\n/g))sBe(o.reject,n,{cwd:e});return o}function avt(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=V.resolve(e,t)),r&&(t=`!${t}`),t}function sBe(t,e,{cwd:r}){let o=e.trim();o===""||o[0]==="#"||t.push(avt(o,{cwd:r}))}function eBe(t,{globalList:e,ignoreLists:r}){let o=zQ(t,e.accept);if(o!==0)return o===2;let a=zQ(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let u=zQ(t,n.accept);if(u!==0)return u===2;let A=zQ(t,n.reject);if(A!==0)return A===1}return!1}function zQ(t,e){let r=e,o=[];for(let a=0;a{await cq(a,{report:p},async()=>{p.reportJson({base:ue.fromPortablePath(a.cwd)});let h=await XQ(a);for(let E of h)p.reportInfo(null,ue.fromPortablePath(E)),p.reportJson({location:ue.fromPortablePath(E)});if(!this.dryRun){let E=await uq(a,h),I=oe.createWriteStream(u);E.pipe(I),await new Promise(v=>{I.on("finish",v)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${de.pretty(r,u,de.Type.PATH)}`),p.reportJson({output:ue.fromPortablePath(u)}))})).exitCode()}};U0.paths=[["pack"]],U0.usage=nt.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]});function lvt(t,{workspace:e}){let r=t.replace("%s",cvt(e)).replace("%v",uvt(e));return ue.toPortablePath(r)}function cvt(t){return t.manifest.name!==null?W.slugifyIdent(t.manifest.name):"package"}function uvt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var Avt=["dependencies","devDependencies","peerDependencies"],fvt="workspace:",pvt=(t,e)=>{e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let o of Avt)for(let a of t.manifest.getForScope(o).values()){let n=r.tryWorkspaceByDescriptor(a),u=W.parseRange(a.range);if(u.protocol===fvt)if(n===null){if(r.tryWorkspaceByIdent(a)===null)throw new zt(21,`${W.prettyDescriptor(r.configuration,a)}: No local workspace found for this range`)}else{let A;W.areDescriptorsEqual(a,n.anchoredDescriptor)||u.selector==="*"?A=n.manifest.version??"0.0.0":u.selector==="~"||u.selector==="^"?A=`${u.selector}${n.manifest.version??"0.0.0"}`:A=u.selector;let p=o==="dependencies"?W.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":o;e[h][W.stringifyIdent(a)]=A}}},hvt={hooks:{beforeWorkspacePacking:pvt},commands:[U0]},gvt=hvt;var hBe=ve("crypto"),gBe=$e(pBe());async function Rvt(t,e,{access:r,tag:o,registry:a,gitHead:n}){let u=t.manifest.name,A=t.manifest.version,p=W.stringifyIdent(u),h=(0,hBe.createHash)("sha1").update(e).digest("hex"),E=gBe.default.fromData(e).toString(),I=r??dBe(t,u),v=await mBe(t),x=await wA.genPackageManifest(t),C=`${p}-${A}.tgz`,R=new URL(`${oc(a)}/${p}/-/${C}`);return{_id:p,_attachments:{[C]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:p,access:I,["dist-tags"]:{[o]:A},versions:{[A]:{...x,_id:`${p}@${A}`,name:p,version:A,gitHead:n,dist:{shasum:h,integrity:E,tarball:R.toString()}}},readme:v}}async function Tvt(t){try{let{stdout:e}=await Ur.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}function dBe(t,e){let r=t.project.configuration;return t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?t.manifest.publishConfig.access:r.get("npmPublishAccess")!==null?r.get("npmPublishAccess"):e.scope?"restricted":"public"}async function mBe(t){let e=ue.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${W.stringifyIdent(r)} +`;try{a=await oe.readFilePromise(e,"utf8")}catch(n){if(n.code==="ENOENT")return a;throw n}return a}var gq={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"BOOLEAN",default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:"SECRET",default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:"SECRET",default:null}},yBe={npmAuditRegistry:{description:"Registry to query for audit reports",type:"STRING",default:null},npmPublishRegistry:{description:"Registry to push packages to",type:"STRING",default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"STRING",default:"https://registry.yarnpkg.com"}},Nvt={configuration:{...gq,...yBe,npmScopes:{description:"Settings per package scope",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{...gq,...yBe}}},npmRegistries:{description:"Settings per registry",type:"MAP",normalizeKeys:oc,valueDefinition:{description:"",type:"SHAPE",properties:{...gq}}}},fetchers:[fv,dl],resolvers:[pv,hv,gv]},Lvt=Nvt;var Dq={};Vt(Dq,{NpmAuditCommand:()=>H0,NpmInfoCommand:()=>j0,NpmLoginCommand:()=>G0,NpmLogoutCommand:()=>q0,NpmPublishCommand:()=>Y0,NpmTagAddCommand:()=>K0,NpmTagListCommand:()=>W0,NpmTagRemoveCommand:()=>V0,NpmWhoamiCommand:()=>J0,default:()=>Gvt,npmAuditTypes:()=>Rv,npmAuditUtils:()=>ZQ});Ye();Ye();jt();var wq=$e(Zo());Za();var Rv={};Vt(Rv,{Environment:()=>Qv,Severity:()=>Fv});var Qv=(o=>(o.All="all",o.Production="production",o.Development="development",o))(Qv||{}),Fv=(n=>(n.Info="info",n.Low="low",n.Moderate="moderate",n.High="high",n.Critical="critical",n))(Fv||{});var ZQ={};Vt(ZQ,{allSeverities:()=>aw,getPackages:()=>Cq,getReportTree:()=>yq,getSeverityInclusions:()=>mq,getTopLevelDependencies:()=>Eq});Ye();var EBe=$e(zn());var aw=["info","low","moderate","high","critical"];function mq(t){if(typeof t>"u")return new Set(aw);let e=aw.indexOf(t),r=aw.slice(e);return new Set(r)}function yq(t){let e={},r={children:e};for(let[o,a]of _e.sortMap(Object.entries(t),n=>n[0]))for(let n of _e.sortMap(a,u=>`${u.id}`))e[`${o}/${n.id}`]={value:de.tuple(de.Type.IDENT,W.parseIdent(o)),children:{ID:typeof n.id<"u"&&{label:"ID",value:de.tuple(de.Type.ID,n.id)},Issue:{label:"Issue",value:de.tuple(de.Type.NO_HINT,n.title)},URL:typeof n.url<"u"&&{label:"URL",value:de.tuple(de.Type.URL,n.url)},Severity:{label:"Severity",value:de.tuple(de.Type.NO_HINT,n.severity)},["Vulnerable Versions"]:{label:"Vulnerable Versions",value:de.tuple(de.Type.RANGE,n.vulnerable_versions)},["Tree Versions"]:{label:"Tree Versions",children:[...n.versions].sort(EBe.default.compare).map(u=>({value:de.tuple(de.Type.REFERENCE,u)}))},Dependents:{label:"Dependents",children:_e.sortMap(n.dependents,u=>W.stringifyLocator(u)).map(u=>({value:de.tuple(de.Type.LOCATOR,u)}))}}};return r}function Eq(t,e,{all:r,environment:o}){let a=[],n=r?t.workspaces:[e],u=["all","production"].includes(o),A=["all","development"].includes(o);for(let p of n)for(let h of p.anchoredPackage.dependencies.values())(p.manifest.devDependencies.has(h.identHash)?!A:!u)||a.push({workspace:p,dependency:h});return a}function Cq(t,e,{recursive:r}){let o=new Map,a=new Set,n=[],u=(A,p)=>{let h=t.storedResolutions.get(p.descriptorHash);if(typeof h>"u")throw new Error("Assertion failed: The resolution should have been registered");if(!a.has(h))a.add(h);else return;let E=t.storedPackages.get(h);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");if(W.ensureDevirtualizedLocator(E).reference.startsWith("npm:")&&E.version!==null){let v=W.stringifyIdent(E),x=_e.getMapWithDefault(o,v);_e.getArrayWithDefault(x,E.version).push(A)}if(r)for(let v of E.dependencies.values())n.push([E,v])};for(let{workspace:A,dependency:p}of e)n.push([A.anchoredLocator,p]);for(;n.length>0;){let[A,p]=n.shift();u(A,p)}return o}var H0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=ge.String("--environment","all",{description:"Which environments to cover",validator:Ks(Qv)});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.noDeprecations=ge.Boolean("--no-deprecations",!1,{description:"Don't warn about deprecated packages"});this.severity=ge.String("--severity","info",{description:"Minimal severity requested for packages to be displayed",validator:Ks(Fv)});this.excludes=ge.Array("--exclude",[],{description:"Array of glob patterns of packages to exclude from audit"});this.ignores=ge.Array("--ignore",[],{description:"Array of glob patterns of advisory ID's to ignore in the audit report"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=Eq(o,a,{all:this.all,environment:this.environment}),u=Cq(o,n,{recursive:this.recursive}),A=Array.from(new Set([...r.get("npmAuditExcludePackages"),...this.excludes])),p=Object.create(null);for(let[L,U]of u)A.some(J=>wq.default.isMatch(L,J))||(p[L]=[...U.keys()]);let h=Zn.getAuditRegistry({configuration:r}),E,I=await AA.start({configuration:r,stdout:this.context.stdout},async()=>{let L=Zr.post("/-/npm/v1/security/advisories/bulk",p,{authType:Zr.AuthType.BEST_EFFORT,configuration:r,jsonResponse:!0,registry:h}),U=this.noDeprecations?[]:await Promise.all(Array.from(Object.entries(p),async([te,ae])=>{let fe=await Zr.getPackageMetadata(W.parseIdent(te),{project:o});return _e.mapAndFilter(ae,ce=>{let{deprecated:me}=fe.versions[ce];return me?[te,ce,me]:_e.mapAndFilter.skip})})),J=await L;for(let[te,ae,fe]of U.flat(1))Object.hasOwn(J,te)&&J[te].some(ce=>kr.satisfiesWithPrereleases(ae,ce.vulnerable_versions))||(J[te]??=[],J[te].push({id:`${te} (deprecation)`,title:fe.trim()||"This package has been deprecated.",severity:"moderate",vulnerable_versions:ae}));E=J});if(I.hasErrors())return I.exitCode();let v=mq(this.severity),x=Array.from(new Set([...r.get("npmAuditIgnoreAdvisories"),...this.ignores])),C=Object.create(null);for(let[L,U]of Object.entries(E)){let J=U.filter(te=>!wq.default.isMatch(`${te.id}`,x)&&v.has(te.severity));J.length>0&&(C[L]=J.map(te=>{let ae=u.get(L);if(typeof ae>"u")throw new Error("Assertion failed: Expected the registry to only return packages that were requested");let fe=[...ae.keys()].filter(me=>kr.satisfiesWithPrereleases(me,te.vulnerable_versions)),ce=new Map;for(let me of fe)for(let he of ae.get(me))ce.set(he.locatorHash,he);return{...te,versions:fe,dependents:[...ce.values()]}}))}let R=Object.keys(C).length>0;return R?($s.emitTree(yq(C),{configuration:r,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async L=>{L.reportInfo(1,"No audit suggestions")}),R?1:0)}};H0.paths=[["npm","audit"]],H0.usage=nt.Usage({description:"perform a vulnerability audit against the installed packages",details:` + This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths). + + For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \`-A,--all\`. To extend this search to both direct and transitive dependencies, use \`-R,--recursive\`. + + Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${aw.map(r=>`\`${r}\``).join(", ")}. + + If the \`--json\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages. + + If certain packages produce false positives for a particular environment, the \`--exclude\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \`npmAuditExcludePackages\` option. + + If particular advisories are needed to be ignored, the \`--ignore\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \`npmAuditIgnoreAdvisories\` option. + + To understand the dependency tree requiring vulnerable packages, check the raw report with the \`--json\` flag or use \`yarn why package\` to get more information as to who depends on them. + `,examples:[["Checks for known security issues with the installed packages. The output is a list of known issues.","yarn npm audit"],["Audit dependencies in all workspaces","yarn npm audit --all"],["Limit auditing to `dependencies` (excludes `devDependencies`)","yarn npm audit --environment production"],["Show audit report as valid JSON","yarn npm audit --json"],["Audit all direct and transitive dependencies","yarn npm audit --recursive"],["Output moderate (or more severe) vulnerabilities","yarn npm audit --severity moderate"],["Exclude certain packages","yarn npm audit --exclude package1 --exclude package2"],["Ignore specific advisories","yarn npm audit --ignore 1234567 --ignore 7654321"]]});Ye();Ye();St();jt();var Iq=$e(zn()),Bq=ve("util"),j0=class extends ut{constructor(){super(...arguments);this.fields=ge.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd),a=typeof this.fields<"u"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],u=!1,A=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async p=>{for(let h of this.packages){let E;if(h==="."){let ae=o.topLevelWorkspace;if(!ae.manifest.name)throw new it(`Missing ${de.pretty(r,"name",de.Type.CODE)} field in ${ue.fromPortablePath(V.join(ae.cwd,dr.manifest))}`);E=W.makeDescriptor(ae.manifest.name,"unknown")}else E=W.parseDescriptor(h);let I=Zr.getIdentUrl(E),v=vq(await Zr.get(I,{configuration:r,ident:E,jsonResponse:!0,customErrorMessage:Zr.customPackageError})),x=Object.keys(v.versions).sort(Iq.default.compareLoose),R=v["dist-tags"].latest||x[x.length-1],L=kr.validRange(E.range);if(L){let ae=Iq.default.maxSatisfying(x,L);ae!==null?R=ae:(p.reportWarning(0,`Unmet range ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0)}else Object.hasOwn(v["dist-tags"],E.range)?R=v["dist-tags"][E.range]:E.range!=="unknown"&&(p.reportWarning(0,`Unknown tag ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0);let U=v.versions[R],J={...v,...U,version:R,versions:x},te;if(a!==null){te={};for(let ae of a){let fe=J[ae];if(typeof fe<"u")te[ae]=fe;else{p.reportWarning(1,`The ${de.pretty(r,ae,de.Type.CODE)} field doesn't exist inside ${W.prettyIdent(r,E)}'s information`),u=!0;continue}}}else this.json||(delete J.dist,delete J.readme,delete J.users),te=J;p.reportJson(te),this.json||n.push(te)}});Bq.inspect.styles.name="cyan";for(let p of n)(p!==n[0]||u)&&this.context.stdout.write(` +`),this.context.stdout.write(`${(0,Bq.inspect)(p,{depth:1/0,colors:!0,compact:!1})} +`);return A.exitCode()}};j0.paths=[["npm","info"]],j0.usage=nt.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command fetches information about a package from the npm registry and prints it in a tree format.\n\n The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\n\n Append `@` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\n\n If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\n\n By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\n ",examples:[["Show all available information about react (except the `dist`, `readme`, and `users` fields)","yarn npm info react"],["Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)","yarn npm info react --json"],["Show all available information about react@16.12.0","yarn npm info react@16.12.0"],["Show all available information about react@next","yarn npm info react@next"],["Show the description of react","yarn npm info react --fields description"],["Show all available versions of react","yarn npm info react --fields versions"],["Show the readme of react","yarn npm info react --fields readme"],["Show a few fields of react","yarn npm info react --fields homepage,repository"]]});function vq(t){if(Array.isArray(t)){let e=[];for(let r of t)r=vq(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let o=vq(t[r]);o&&(e[r]=o)}return e}else return t||null}Ye();Ye();jt();var CBe=$e(f2()),G0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Login to the publish registry"});this.alwaysAuth=ge.Boolean("--always-auth",{description:"Set the npmAlwaysAuth configuration"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Nt.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let u=await Uvt({configuration:r,registry:o,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),A=await Ovt(o,u,r);return await Mvt(o,A,{alwaysAuth:this.alwaysAuth,scope:this.scope}),n.reportInfo(0,"Successfully logged in")})).exitCode()}};G0.paths=[["npm","login"]],G0.usage=nt.Usage({category:"Npm-related commands",description:"store new login info to access the npm registry",details:"\n This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\n\n Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n ",examples:[["Login to the default registry","yarn npm login"],["Login to the registry linked to the @my-scope registry","yarn npm login --scope my-scope"],["Login to the publish registry for the current package","yarn npm login --publish"]]});async function $Q({scope:t,publish:e,configuration:r,cwd:o}){return t&&e?Zn.getScopeRegistry(t,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):t?Zn.getScopeRegistry(t,{configuration:r}):e?Zn.getPublishRegistry((await fC(r,o)).manifest,{configuration:r}):Zn.getDefaultRegistry({configuration:r})}async function Ovt(t,e,r){let o=`/-/user/org.couchdb.user:${encodeURIComponent(e.name)}`,a={_id:`org.couchdb.user:${e.name}`,name:e.name,password:e.password,type:"user",roles:[],date:new Date().toISOString()},n={attemptedAs:e.name,configuration:r,registry:t,jsonResponse:!0,authType:Zr.AuthType.NO_AUTH};try{return(await Zr.put(o,a,n)).token}catch(E){if(!(E.originalError?.name==="HTTPError"&&E.originalError?.response.statusCode===409))throw E}let u={...n,authType:Zr.AuthType.NO_AUTH,headers:{authorization:`Basic ${Buffer.from(`${e.name}:${e.password}`).toString("base64")}`}},A=await Zr.get(o,u);for(let[E,I]of Object.entries(A))(!a[E]||E==="roles")&&(a[E]=I);let p=`${o}/-rev/${a._rev}`;return(await Zr.put(p,a,u)).token}async function Mvt(t,e,{alwaysAuth:r,scope:o}){let a=u=>A=>{let p=_e.isIndexableObject(A)?A:{},h=p[u],E=_e.isIndexableObject(h)?h:{};return{...p,[u]:{...E,...r!==void 0?{npmAlwaysAuth:r}:{},npmAuthToken:e}}},n=o?{npmScopes:a(o)}:{npmRegistries:a(t)};return await Ke.updateHomeConfiguration(n)}async function Uvt({configuration:t,registry:e,report:r,stdin:o,stdout:a}){r.reportInfo(0,`Logging in to ${de.pretty(t,e,de.Type.URL)}`);let n=!1;if(e.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(r.reportInfo(0,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),r.reportSeparator(),t.env.YARN_IS_TEST_ENV)return{name:t.env.YARN_INJECT_NPM_USER||"",password:t.env.YARN_INJECT_NPM_PASSWORD||""};let u=await(0,CBe.prompt)([{type:"input",name:"name",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a}]);return r.reportSeparator(),u}Ye();Ye();jt();var lw=new Set(["npmAuthIdent","npmAuthToken"]),q0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=ge.Boolean("-A,--all",!1,{description:"Logout of all registries"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o=async()=>{let n=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),u=await Ke.find(this.context.cwd,this.context.plugins),A=W.makeIdent(this.scope??null,"pkg");return!Zn.getAuthConfiguration(n,{configuration:u,ident:A}).get("npmAuthToken")};return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{if(this.all&&(await Hvt(),n.reportInfo(0,"Successfully logged out from everything")),this.scope){await wBe("npmScopes",this.scope),await o()?n.reportInfo(0,`Successfully logged out from ${this.scope}`):n.reportWarning(0,"Scope authentication settings removed, but some other ones settings still apply to it");return}let u=await $Q({configuration:r,cwd:this.context.cwd,publish:this.publish});await wBe("npmRegistries",u),await o()?n.reportInfo(0,`Successfully logged out from ${u}`):n.reportWarning(0,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};q0.paths=[["npm","logout"]],q0.usage=nt.Usage({category:"Npm-related commands",description:"logout of the npm registry",details:"\n This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\n\n Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n\n Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\n ",examples:[["Logout of the default registry","yarn npm logout"],["Logout of the @my-scope scope","yarn npm logout --scope my-scope"],["Logout of the publish registry for the current package","yarn npm logout --publish"],["Logout of all registries","yarn npm logout --all"]]});function _vt(t,e){let r=t[e];if(!_e.isIndexableObject(r))return!1;let o=new Set(Object.keys(r));if([...lw].every(n=>!o.has(n)))return!1;for(let n of lw)o.delete(n);if(o.size===0)return t[e]=void 0,!0;let a={...r};for(let n of lw)delete a[n];return t[e]=a,!0}async function Hvt(){let t=e=>{let r=!1,o=_e.isIndexableObject(e)?{...e}:{};o.npmAuthToken&&(delete o.npmAuthToken,r=!0);for(let a of Object.keys(o))_vt(o,a)&&(r=!0);if(Object.keys(o).length!==0)return r?o:e};return await Ke.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function wBe(t,e){return await Ke.updateHomeConfiguration({[t]:r=>{let o=_e.isIndexableObject(r)?r:{};if(!Object.hasOwn(o,e))return r;let a=o[e],n=_e.isIndexableObject(a)?a:{},u=new Set(Object.keys(n));if([...lw].every(p=>!u.has(p)))return r;for(let p of lw)u.delete(p);if(u.size===0)return Object.keys(o).length===1?void 0:{...o,[e]:void 0};let A={};for(let p of lw)A[p]=void 0;return{...o,[e]:{...n,...A}}}})}Ye();jt();var Y0=class extends ut{constructor(){super(...arguments);this.access=ge.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=ge.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=ge.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"});this.otp=ge.String("--otp",{description:"The OTP token to use with the command"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);if(a.manifest.private)throw new it("Private workspaces cannot be published");if(a.manifest.name===null||a.manifest.version===null)throw new it("Workspaces must have valid names and versions to be published on an external registry");await o.restoreInstallState();let n=a.manifest.name,u=a.manifest.version,A=Zn.getPublishRegistry(a.manifest,{configuration:r});return(await Nt.start({configuration:r,stdout:this.context.stdout},async h=>{if(this.tolerateRepublish)try{let E=await Zr.get(Zr.getIdentUrl(n),{configuration:r,registry:A,ident:n,jsonResponse:!0});if(!Object.hasOwn(E,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(Object.hasOwn(E.versions,u)){h.reportWarning(0,`Registry already knows about version ${u}; skipping.`);return}}catch(E){if(E.originalError?.response?.statusCode!==404)throw E}await un.maybeExecuteWorkspaceLifecycleScript(a,"prepublish",{report:h}),await wA.prepareForPack(a,{report:h},async()=>{let E=await wA.genPackList(a);for(let R of E)h.reportInfo(null,R);let I=await wA.genPackStream(a,E),v=await _e.bufferStream(I),x=await ow.getGitHead(a.cwd),C=await ow.makePublishBody(a,v,{access:this.access,tag:this.tag,registry:A,gitHead:x});await Zr.put(Zr.getIdentUrl(n),C,{configuration:r,registry:A,ident:n,otp:this.otp,jsonResponse:!0})}),h.reportInfo(0,"Package archive published")})).exitCode()}};Y0.paths=[["npm","publish"]],Y0.usage=nt.Usage({category:"Npm-related commands",description:"publish the active workspace to the npm registry",details:'\n This command will pack the active workspace into a fresh archive and upload it to the npm registry.\n\n The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\n\n Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka "private packages"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\n ',examples:[["Publish the active workspace","yarn npm publish"]]});Ye();jt();var IBe=$e(zn());Ye();St();jt();var W0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String({required:!1})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n;if(typeof this.package<"u")n=W.parseIdent(this.package);else{if(!a)throw new rr(o.cwd,this.context.cwd);if(!a.manifest.name)throw new it(`Missing 'name' field in ${ue.fromPortablePath(V.join(a.cwd,dr.manifest))}`);n=a.manifest.name}let u=await Tv(n,r),p={children:_e.sortMap(Object.entries(u),([h])=>h).map(([h,E])=>({value:de.tuple(de.Type.RESOLUTION,{descriptor:W.makeDescriptor(n,h),locator:W.makeLocator(n,E)})}))};return $s.emitTree(p,{configuration:r,json:this.json,stdout:this.context.stdout})}};W0.paths=[["npm","tag","list"]],W0.usage=nt.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:` + This command will list all tags of a package from the npm registry. + + If the package is not specified, Yarn will default to the current workspace. + `,examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]});async function Tv(t,e){let r=`/-/package${Zr.getIdentUrl(t)}/dist-tags`;return Zr.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:Zr.customPackageError})}var K0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseDescriptor(this.package,!0),u=n.range;if(!IBe.default.valid(u))throw new it(`The range ${de.pretty(r,n.range,de.Type.RANGE)} must be a valid semver version`);let A=Zn.getPublishRegistry(a.manifest,{configuration:r}),p=de.pretty(r,n,de.Type.IDENT),h=de.pretty(r,u,de.Type.RANGE),E=de.pretty(r,this.tag,de.Type.CODE);return(await Nt.start({configuration:r,stdout:this.context.stdout},async v=>{let x=await Tv(n,r);Object.hasOwn(x,this.tag)&&x[this.tag]===u&&v.reportWarning(0,`Tag ${E} is already set to version ${h}`);let C=`/-/package${Zr.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await Zr.put(C,u,{configuration:r,registry:A,ident:n,jsonRequest:!0,jsonResponse:!0}),v.reportInfo(0,`Tag ${E} added to version ${h} of package ${p}`)})).exitCode()}};K0.paths=[["npm","tag","add"]],K0.usage=nt.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:` + This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten. + `,examples:[["Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`","yarn npm tag add my-pkg@2.3.4-beta.4 beta"]]});Ye();jt();var V0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){if(this.tag==="latest")throw new it("The 'latest' tag cannot be removed.");let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseIdent(this.package),u=Zn.getPublishRegistry(a.manifest,{configuration:r}),A=de.pretty(r,this.tag,de.Type.CODE),p=de.pretty(r,n,de.Type.IDENT),h=await Tv(n,r);if(!Object.hasOwn(h,this.tag))throw new it(`${A} is not a tag of package ${p}`);return(await Nt.start({configuration:r,stdout:this.context.stdout},async I=>{let v=`/-/package${Zr.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await Zr.del(v,{configuration:r,registry:u,ident:n,jsonResponse:!0}),I.reportInfo(0,`Tag ${A} removed from package ${p}`)})).exitCode()}};V0.paths=[["npm","tag","remove"]],V0.usage=nt.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:` + This command will remove a tag from a package from the npm registry. + `,examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]});Ye();Ye();jt();var J0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Print username for the publish registry"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),o;return this.scope&&this.publish?o=Zn.getScopeRegistry(this.scope,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):this.scope?o=Zn.getScopeRegistry(this.scope,{configuration:r}):this.publish?o=Zn.getPublishRegistry((await fC(r,this.context.cwd)).manifest,{configuration:r}):o=Zn.getDefaultRegistry({configuration:r}),(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u;try{u=await Zr.get("/-/whoami",{configuration:r,registry:o,authType:Zr.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?W.makeIdent(this.scope,""):void 0})}catch(A){if(A.response?.statusCode===401||A.response?.statusCode===403){n.reportError(41,"Authentication failed - your credentials may have expired");return}else throw A}n.reportInfo(0,u.username)})).exitCode()}};J0.paths=[["npm","whoami"]],J0.usage=nt.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]});var jvt={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:"STRING",default:null},npmAuditExcludePackages:{description:"Array of glob patterns of packages to exclude from npm audit",type:"STRING",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:"Array of glob patterns of advisory IDs to exclude from npm audit",type:"STRING",default:[],isArray:!0}},commands:[H0,j0,G0,q0,Y0,K0,W0,V0,J0]},Gvt=jvt;var Fq={};Vt(Fq,{PatchCommand:()=>Z0,PatchCommitCommand:()=>X0,PatchFetcher:()=>Uv,PatchResolver:()=>_v,default:()=>aDt,patchUtils:()=>Sm});Ye();Ye();St();nA();var Sm={};Vt(Sm,{applyPatchFile:()=>tF,diffFolders:()=>kq,ensureUnpatchedDescriptor:()=>Sq,ensureUnpatchedLocator:()=>nF,extractPackageToDisk:()=>xq,extractPatchFlags:()=>xBe,isParentRequired:()=>bq,isPatchDescriptor:()=>rF,isPatchLocator:()=>z0,loadPatchFiles:()=>Mv,makeDescriptor:()=>iF,makeLocator:()=>Pq,makePatchHash:()=>Qq,parseDescriptor:()=>Lv,parseLocator:()=>Ov,parsePatchFile:()=>Nv,unpatchDescriptor:()=>iDt,unpatchLocator:()=>sDt});Ye();St();Ye();St();var qvt=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function cw(t){return V.relative(Bt.root,V.resolve(Bt.root,ue.toPortablePath(t)))}function Yvt(t){let e=t.trim().match(qvt);if(!e)throw new Error(`Bad header line: '${t}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var Wvt=420,Kvt=493;var BBe=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),Vvt=t=>({header:Yvt(t),parts:[]}),Jvt={["@"]:"header",["-"]:"deletion",["+"]:"insertion",[" "]:"context",["\\"]:"pragma",undefined:"context"};function zvt(t){let e=[],r=BBe(),o="parsing header",a=null,n=null;function u(){a&&(n&&(a.parts.push(n),n=null),r.hunks.push(a),a=null)}function A(){u(),e.push(r),r=BBe()}for(let p=0;p0?"patch":"mode change",J=null;switch(U){case"rename":{if(!E||!I)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:o,fromPath:cw(E),toPath:cw(I)}),J=I}break;case"file deletion":{let te=a||C;if(!te)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:o,hunk:L&&L[0]||null,path:cw(te),mode:eF(p),hash:v})}break;case"file creation":{let te=n||R;if(!te)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:o,hunk:L&&L[0]||null,path:cw(te),mode:eF(h),hash:x})}break;case"patch":case"mode change":J=R||n;break;default:_e.assertNever(U);break}J&&u&&A&&u!==A&&e.push({type:"mode change",semverExclusivity:o,path:cw(J),oldMode:eF(u),newMode:eF(A)}),J&&L&&L.length&&e.push({type:"patch",semverExclusivity:o,path:cw(J),hunks:L,beforeHash:v,afterHash:x})}if(e.length===0)throw new Error("Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string");return e}function eF(t){let e=parseInt(t,8)&511;if(e!==Wvt&&e!==Kvt)throw new Error(`Unexpected file mode string: ${t}`);return e}function Nv(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),Xvt(zvt(e))}function Zvt(t){let e=0,r=0;for(let{type:o,lines:a}of t.parts)switch(o){case"context":r+=a.length,e+=a.length;break;case"deletion":e+=a.length;break;case"insertion":r+=a.length;break;default:_e.assertNever(o);break}if(e!==t.header.original.length||r!==t.header.patched.length){let o=a=>a<0?a:`+${a}`;throw new Error(`hunk header integrity check failed (expected @@ ${o(t.header.original.length)} ${o(t.header.patched.length)} @@, got @@ ${o(e)} ${o(r)} @@)`)}}Ye();St();var uw=class extends Error{constructor(r,o){super(`Cannot apply hunk #${r+1}`);this.hunk=o}};async function Aw(t,e,r){let o=await t.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await t.lutimesPromise(e,o.atime,o.mtime)}async function tF(t,{baseFs:e=new Tn,dryRun:r=!1,version:o=null}={}){for(let a of t)if(!(a.semverExclusivity!==null&&o!==null&&!kr.satisfiesWithPrereleases(o,a.semverExclusivity)))switch(a.type){case"file deletion":if(r){if(!e.existsSync(a.path))throw new Error(`Trying to delete a file that doesn't exist: ${a.path}`)}else await Aw(e,V.dirname(a.path),async()=>{await e.unlinkPromise(a.path)});break;case"rename":if(r){if(!e.existsSync(a.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${a.fromPath}`)}else await Aw(e,V.dirname(a.fromPath),async()=>{await Aw(e,V.dirname(a.toPath),async()=>{await Aw(e,a.fromPath,async()=>(await e.movePromise(a.fromPath,a.toPath),a.toPath))})});break;case"file creation":if(r){if(e.existsSync(a.path))throw new Error(`Trying to create a file that already exists: ${a.path}`)}else{let n=a.hunk?a.hunk.parts[0].lines.join(` +`)+(a.hunk.parts[0].noNewlineAtEndOfFile?"":` +`):"";await e.mkdirpPromise(V.dirname(a.path),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),await e.writeFilePromise(a.path,n,{mode:a.mode}),await e.utimesPromise(a.path,vi.SAFE_TIME,vi.SAFE_TIME)}break;case"patch":await Aw(e,a.path,async()=>{await tDt(a,{baseFs:e,dryRun:r})});break;case"mode change":{let u=(await e.statPromise(a.path)).mode;if(vBe(a.newMode)!==vBe(u))continue;await Aw(e,a.path,async()=>{await e.chmodPromise(a.path,a.newMode)})}break;default:_e.assertNever(a);break}}function vBe(t){return(t&64)>0}function DBe(t){return t.replace(/\s+$/,"")}function eDt(t,e){return DBe(t)===DBe(e)}async function tDt({hunks:t,path:e},{baseFs:r,dryRun:o=!1}){let a=await r.statSync(e).mode,u=(await r.readFileSync(e,"utf8")).split(/\n/),A=[],p=0,h=0;for(let I of t){let v=Math.max(h,I.header.patched.start+p),x=Math.max(0,v-h),C=Math.max(0,u.length-v-I.header.original.length),R=Math.max(x,C),L=0,U=0,J=null;for(;L<=R;){if(L<=x&&(U=v-L,J=SBe(I,u,U),J!==null)){L=-L;break}if(L<=C&&(U=v+L,J=SBe(I,u,U),J!==null))break;L+=1}if(J===null)throw new uw(t.indexOf(I),I);A.push(J),p+=L,h=U+I.header.original.length}if(o)return;let E=0;for(let I of A)for(let v of I)switch(v.type){case"splice":{let x=v.index+E;u.splice(x,v.numToDelete,...v.linesToInsert),E+=v.linesToInsert.length-v.numToDelete}break;case"pop":u.pop();break;case"push":u.push(v.line);break;default:_e.assertNever(v);break}await r.writeFilePromise(e,u.join(` +`),{mode:a})}function SBe(t,e,r){let o=[];for(let a of t.parts)switch(a.type){case"context":case"deletion":{for(let n of a.lines){let u=e[r];if(u==null||!eDt(u,n))return null;r+=1}a.type==="deletion"&&(o.push({type:"splice",index:r-a.lines.length,numToDelete:a.lines.length,linesToInsert:[]}),a.noNewlineAtEndOfFile&&o.push({type:"push",line:""}))}break;case"insertion":o.push({type:"splice",index:r,numToDelete:0,linesToInsert:a.lines}),a.noNewlineAtEndOfFile&&o.push({type:"pop"});break;default:_e.assertNever(a.type);break}return o}var nDt=/^builtin<([^>]+)>$/;function fw(t,e){let{protocol:r,source:o,selector:a,params:n}=W.parseRange(t);if(r!=="patch:")throw new Error("Invalid patch range");if(o===null)throw new Error("Patch locators must explicitly define their source");let u=a?a.split(/&/).map(E=>ue.toPortablePath(E)):[],A=n&&typeof n.locator=="string"?W.parseLocator(n.locator):null,p=n&&typeof n.version=="string"?n.version:null,h=e(o);return{parentLocator:A,sourceItem:h,patchPaths:u,sourceVersion:p}}function rF(t){return t.range.startsWith("patch:")}function z0(t){return t.reference.startsWith("patch:")}function Lv(t){let{sourceItem:e,...r}=fw(t.range,W.parseDescriptor);return{...r,sourceDescriptor:e}}function Ov(t){let{sourceItem:e,...r}=fw(t.reference,W.parseLocator);return{...r,sourceLocator:e}}function iDt(t){let{sourceItem:e}=fw(t.range,W.parseDescriptor);return e}function sDt(t){let{sourceItem:e}=fw(t.reference,W.parseLocator);return e}function Sq(t){if(!rF(t))return t;let{sourceItem:e}=fw(t.range,W.parseDescriptor);return e}function nF(t){if(!z0(t))return t;let{sourceItem:e}=fw(t.reference,W.parseLocator);return e}function PBe({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:o,patchHash:a},n){let u=t!==null?{locator:W.stringifyLocator(t)}:{},A=typeof o<"u"?{version:o}:{},p=typeof a<"u"?{hash:a}:{};return W.makeRange({protocol:"patch:",source:n(e),selector:r.join("&"),params:{...A,...p,...u}})}function iF(t,{parentLocator:e,sourceDescriptor:r,patchPaths:o}){return W.makeDescriptor(t,PBe({parentLocator:e,sourceItem:r,patchPaths:o},W.stringifyDescriptor))}function Pq(t,{parentLocator:e,sourcePackage:r,patchPaths:o,patchHash:a}){return W.makeLocator(t,PBe({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:o,patchHash:a},W.stringifyLocator))}function bBe({onAbsolute:t,onRelative:e,onProject:r,onBuiltin:o},a){let n=a.lastIndexOf("!");n!==-1&&(a=a.slice(n+1));let u=a.match(nDt);return u!==null?o(u[1]):a.startsWith("~/")?r(a.slice(2)):V.isAbsolute(a)?t(a):e(a)}function xBe(t){let e=t.lastIndexOf("!");return{optional:(e!==-1?new Set(t.slice(0,e).split(/!/)):new Set).has("optional")}}function bq(t){return bBe({onAbsolute:()=>!1,onRelative:()=>!0,onProject:()=>!1,onBuiltin:()=>!1},t)}async function Mv(t,e,r){let o=t!==null?await r.fetcher.fetch(t,r):null,a=o&&o.localPath?{packageFs:new gn(Bt.root),prefixPath:V.relative(Bt.root,o.localPath)}:o;o&&o!==a&&o.releaseFs&&o.releaseFs();let n=await _e.releaseAfterUseAsync(async()=>await Promise.all(e.map(async u=>{let A=xBe(u),p=await bBe({onAbsolute:async h=>await oe.readFilePromise(h,"utf8"),onRelative:async h=>{if(a===null)throw new Error("Assertion failed: The parent locator should have been fetched");return await a.packageFs.readFilePromise(V.join(a.prefixPath,h),"utf8")},onProject:async h=>await oe.readFilePromise(V.join(r.project.cwd,h),"utf8"),onBuiltin:async h=>await r.project.configuration.firstHook(E=>E.getBuiltinPatch,r.project,h)},u);return{...A,source:p}})));for(let u of n)typeof u.source=="string"&&(u.source=u.source.replace(/\r\n?/g,` +`));return n}async function xq(t,{cache:e,project:r}){let o=r.storedPackages.get(t.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected the package to be registered");let a=nF(t),n=r.storedChecksums,u=new Qi,A=await oe.mktempPromise(),p=V.join(A,"source"),h=V.join(A,"user"),E=V.join(A,".yarn-patch.json"),I=r.configuration.makeFetcher(),v=[];try{let x,C;if(t.locatorHash===a.locatorHash){let R=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u});v.push(()=>R.releaseFs?.()),x=R,C=R}else x=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>x.releaseFs?.()),C=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>C.releaseFs?.());await Promise.all([oe.copyPromise(p,x.prefixPath,{baseFs:x.packageFs}),oe.copyPromise(h,C.prefixPath,{baseFs:C.packageFs}),oe.writeJsonPromise(E,{locator:W.stringifyLocator(t),version:o.version})])}finally{for(let x of v)x()}return oe.detachTemp(A),h}async function kq(t,e){let r=ue.fromPortablePath(t).replace(/\\/g,"/"),o=ue.fromPortablePath(e).replace(/\\/g,"/"),{stdout:a,stderr:n}=await Ur.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--no-renames","--text",r,o],{cwd:ue.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""}});if(n.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH. +The following error was reported by 'git': +${n}`);let u=r.startsWith("/")?A=>A.slice(1):A=>A;return a.replace(new RegExp(`(a|b)(${_e.escapeRegExp(`/${u(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${_e.escapeRegExp(`/${u(o)}/`)}`,"g"),"$1/").replace(new RegExp(_e.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(_e.escapeRegExp(`${o}/`),"g"),"")}function Qq(t,e){let r=[];for(let{source:o}of t){if(o===null)continue;let a=Nv(o);for(let n of a){let{semverExclusivity:u,...A}=n;u!==null&&e!==null&&!kr.satisfiesWithPrereleases(e,u)||r.push(JSON.stringify(A))}}return wn.makeHash(`${3}`,...r).slice(0,6)}Ye();function kBe(t,{configuration:e,report:r}){for(let o of t.parts)for(let a of o.lines)switch(o.type){case"context":r.reportInfo(null,` ${de.pretty(e,a,"grey")}`);break;case"deletion":r.reportError(28,`- ${de.pretty(e,a,de.Type.REMOVED)}`);break;case"insertion":r.reportError(28,`+ ${de.pretty(e,a,de.Type.ADDED)}`);break;default:_e.assertNever(o.type)}}var Uv=class{supports(e,r){return!!z0(e)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async patchPackage(e,r){let{parentLocator:o,sourceLocator:a,sourceVersion:n,patchPaths:u}=Ov(e),A=await Mv(o,u,r),p=await oe.mktempPromise(),h=V.join(p,"current.zip"),E=await r.fetcher.fetch(a,r),I=W.getIdentVendorPath(e),v=new zi(h,{create:!0,level:r.project.configuration.get("compressionLevel")});await _e.releaseAfterUseAsync(async()=>{await v.copyPromise(I,E.prefixPath,{baseFs:E.packageFs,stableSort:!0})},E.releaseFs),v.saveAndClose();for(let{source:x,optional:C}of A){if(x===null)continue;let R=new zi(h,{level:r.project.configuration.get("compressionLevel")}),L=new gn(V.resolve(Bt.root,I),{baseFs:R});try{await tF(Nv(x),{baseFs:L,version:n})}catch(U){if(!(U instanceof uw))throw U;let J=r.project.configuration.get("enableInlineHunks"),te=!J&&!C?" (set enableInlineHunks for details)":"",ae=`${W.prettyLocator(r.project.configuration,e)}: ${U.message}${te}`,fe=ce=>{!J||kBe(U.hunk,{configuration:r.project.configuration,report:ce})};if(R.discardAndClose(),C){r.report.reportWarningOnce(66,ae,{reportExtra:fe});continue}else throw new zt(66,ae,fe)}R.saveAndClose()}return new zi(h,{level:r.project.configuration.get("compressionLevel")})}};Ye();var _v=class{supportsDescriptor(e,r){return!!rF(e)}supportsLocator(e,r){return!!z0(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){let{patchPaths:a}=Lv(e);return a.every(n=>!bq(n))?e:W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:o}=Lv(e);return{sourceDescriptor:r.project.configuration.normalizeDependency(o)}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:a,patchPaths:n}=Lv(e),u=await Mv(a,n,o.fetchOptions),A=r.sourceDescriptor;if(typeof A>"u")throw new Error("Assertion failed: The dependency should have been resolved");let p=Qq(u,A.version);return[Pq(e,{parentLocator:a,sourcePackage:A,patchPaths:n,patchHash:p})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let{sourceLocator:o}=Ov(e);return{...await r.resolver.resolve(o,r),...e}}};Ye();St();jt();var X0=class extends ut{constructor(){super(...arguments);this.save=ge.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=V.resolve(this.context.cwd,ue.toPortablePath(this.patchFolder)),u=V.join(n,"../source"),A=V.join(n,"../.yarn-patch.json");if(!oe.existsSync(u))throw new it("The argument folder didn't get created by 'yarn patch'");let p=await kq(u,n),h=await oe.readJsonPromise(A),E=W.parseLocator(h.locator,!0);if(!o.storedPackages.has(E.locatorHash))throw new it("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(p);return}let I=r.get("patchFolder"),v=V.join(I,`${W.slugifyLocator(E)}.patch`);await oe.mkdirPromise(I,{recursive:!0}),await oe.writeFilePromise(v,p);let x=[],C=new Map;for(let R of o.storedPackages.values()){if(W.isVirtualLocator(R))continue;let L=R.dependencies.get(E.identHash);if(!L)continue;let U=W.ensureDevirtualizedDescriptor(L),J=Sq(U),te=o.storedResolutions.get(J.descriptorHash);if(!te)throw new Error("Assertion failed: Expected the resolution to have been registered");if(!o.storedPackages.get(te))throw new Error("Assertion failed: Expected the package to have been registered");let fe=o.tryWorkspaceByLocator(R);if(fe)x.push(fe);else{let ce=o.originalPackages.get(R.locatorHash);if(!ce)throw new Error("Assertion failed: Expected the original package to have been registered");let me=ce.dependencies.get(L.identHash);if(!me)throw new Error("Assertion failed: Expected the original dependency to have been registered");C.set(me.descriptorHash,me)}}for(let R of x)for(let L of Ot.hardDependencies){let U=R.manifest[L].get(E.identHash);if(!U)continue;let J=iF(U,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[V.join(dr.home,V.relative(o.cwd,v))]});R.manifest[L].set(U.identHash,J)}for(let R of C.values()){let L=iF(R,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[V.join(dr.home,V.relative(o.cwd,v))]});o.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:W.stringifyIdent(L),description:R.range}},reference:L.range})}await o.persist()}};X0.paths=[["patch-commit"]],X0.usage=nt.Usage({description:"generate a patch out of a directory",details:"\n By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\n\n With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\n\n Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "});Ye();St();jt();var Z0=class extends ut{constructor(){super(...arguments);this.update=ge.Boolean("-u,--update",!1,{description:"Reapply local patches that already apply to this packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=W.parseLocator(this.package);if(u.reference==="unknown"){let A=_e.mapAndFilter([...o.storedPackages.values()],p=>p.identHash!==u.identHash?_e.mapAndFilter.skip:W.isVirtualLocator(p)?_e.mapAndFilter.skip:z0(p)!==this.update?_e.mapAndFilter.skip:p);if(A.length===0)throw new it("No package found in the project for the given locator");if(A.length>1)throw new it(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): +${A.map(p=>` +- ${W.prettyLocator(r,p)}`).join("")}`);u=A[0]}if(!o.storedPackages.has(u.locatorHash))throw new it("No package found in the project for the given locator");await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=nF(u),h=await xq(u,{cache:n,project:o});A.reportJson({locator:W.stringifyLocator(p),path:ue.fromPortablePath(h)});let E=this.update?" along with its current modifications":"";A.reportInfo(0,`Package ${W.prettyLocator(r,p)} got extracted with success${E}!`),A.reportInfo(0,`You can now edit the following folder: ${de.pretty(r,ue.fromPortablePath(h),"magenta")}`),A.reportInfo(0,`Once you are done run ${de.pretty(r,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${ue.fromPortablePath(h)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};Z0.paths=[["patch"]],Z0.usage=nt.Usage({description:"prepare a package for patching",details:"\n This command will cause a package to be extracted in a temporary directory intended to be editable at will.\n\n Once you're done with your changes, run `yarn patch-commit -s path` (with `path` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\n\n Calling the command when you already have a patch won't import it by default (in other words, the default behavior is to reset existing patches). However, adding the `-u,--update` flag will import any current patch.\n "});var oDt={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:"BOOLEAN",default:!1},patchFolder:{description:"Folder where the patch files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/patches"}},commands:[X0,Z0],fetchers:[Uv],resolvers:[_v]},aDt=oDt;var Nq={};Vt(Nq,{PnpmLinker:()=>Hv,default:()=>fDt});Ye();St();jt();var Hv=class{getCustomDataKey(){return JSON.stringify({name:"PnpmLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the pnpm linker to be enabled");let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=a.pathsByLocator.get(e.locatorHash);if(typeof n>"u")throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return n.packageLocation}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(n){let p=a.locatorByPath.get(n[1]);if(p)return p}let u=e,A=e;do{A=u,u=V.dirname(A);let p=a.locatorByPath.get(A);if(p)return p}while(u!==A);return null}makeInstaller(e){return new Rq(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},Rq=class{constructor(e){this.opts=e;this.asyncActions=new _e.AsyncActions(10);this.customData={pathsByLocator:new Map,locatorByPath:new Map};this.indexFolderPromise=SD(oe,{indexPath:V.join(e.project.configuration.get("globalFolder"),"index")})}attachCustomData(e){}async installPackage(e,r,o){switch(e.linkType){case"SOFT":return this.installPackageSoft(e,r,o);case"HARD":return this.installPackageHard(e,r,o)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,o){let a=V.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.opts.project.tryWorkspaceByLocator(e)?V.join(a,dr.nodeModules):null;return this.customData.pathsByLocator.set(e.locatorHash,{packageLocation:a,dependenciesLocation:n}),{packageLocation:a,buildRequest:null}}async installPackageHard(e,r,o){let a=lDt(e,{project:this.opts.project}),n=a.packageLocation;this.customData.locatorByPath.set(n,W.stringifyLocator(e)),this.customData.pathsByLocator.set(e.locatorHash,a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await oe.mkdirPromise(n,{recursive:!0}),await oe.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1,linkStrategy:{type:"HardlinkFromIndex",indexPath:await this.indexFolderPromise,autoRepair:!0}})}));let A=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e,p={manifest:await Ot.tryFind(r.prefixPath,{baseFs:r.packageFs})??new Ot,misc:{hasBindingGyp:yA.hasBindingGyp(r)}},h=this.opts.project.getDependencyMeta(A,e.version),E=yA.extractBuildRequest(e,p,h,{configuration:this.opts.project.configuration});return{packageLocation:n,buildRequest:E}}async attachInternalDependencies(e,r){if(this.opts.project.configuration.get("nodeLinker")!=="pnpm"||!QBe(e,{project:this.opts.project}))return;let o=this.customData.pathsByLocator.get(e.locatorHash);if(typeof o>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(e)})`);let{dependenciesLocation:a}=o;!a||this.asyncActions.reduce(e.locatorHash,async n=>{await oe.mkdirPromise(a,{recursive:!0});let u=await cDt(a),A=new Map(u),p=[n],h=(I,v)=>{let x=v;QBe(v,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),x=W.devirtualizeLocator(v));let C=this.customData.pathsByLocator.get(x.locatorHash);if(typeof C>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(v)})`);let R=W.stringifyIdent(I),L=V.join(a,R),U=V.relative(V.dirname(L),C.packageLocation),J=A.get(R);A.delete(R),p.push(Promise.resolve().then(async()=>{if(J){if(J.isSymbolicLink()&&await oe.readlinkPromise(L)===U)return;await oe.removePromise(L)}await oe.mkdirpPromise(V.dirname(L)),process.platform=="win32"&&this.opts.project.configuration.get("winLinkType")==="junctions"?await oe.symlinkPromise(C.packageLocation,L,"junction"):await oe.symlinkPromise(U,L)}))},E=!1;for(let[I,v]of r)I.identHash===e.identHash&&(E=!0),h(I,v);!E&&!this.opts.project.tryWorkspaceByLocator(e)&&h(W.convertLocatorToDescriptor(e),e),p.push(uDt(a,A)),await Promise.all(p)})}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=RBe(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await oe.removePromise(e);else{let r;try{r=new Set(await oe.readdirPromise(e))}catch{r=new Set}for(let{dependenciesLocation:o}of this.customData.pathsByLocator.values()){if(!o)continue;let a=V.contains(e,o);if(a===null)continue;let[n]=a.split(V.sep);r.delete(n)}await Promise.all([...r].map(async o=>{await oe.removePromise(V.join(e,o))}))}return await this.asyncActions.wait(),await Tq(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await Tq(FBe(this.opts.project)),{customData:this.customData}}};function FBe(t){return V.join(t.cwd,dr.nodeModules)}function RBe(t){return V.join(FBe(t),".store")}function lDt(t,{project:e}){let r=W.slugifyLocator(t),o=RBe(e),a=V.join(o,r,"package"),n=V.join(o,r,dr.nodeModules);return{packageLocation:a,dependenciesLocation:n}}function QBe(t,{project:e}){return!W.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function cDt(t){let e=new Map,r=[];try{r=await oe.readdirPromise(t,{withFileTypes:!0})}catch(o){if(o.code!=="ENOENT")throw o}try{for(let o of r)if(!o.name.startsWith("."))if(o.name.startsWith("@")){let a=await oe.readdirPromise(V.join(t,o.name),{withFileTypes:!0});if(a.length===0)e.set(o.name,o);else for(let n of a)e.set(`${o.name}/${n.name}`,n)}else e.set(o.name,o)}catch(o){if(o.code!=="ENOENT")throw o}return e}async function uDt(t,e){let r=[],o=new Set;for(let a of e.keys()){r.push(oe.removePromise(V.join(t,a)));let n=W.tryParseIdent(a)?.scope;n&&o.add(`@${n}`)}return Promise.all(r).then(()=>Promise.all([...o].map(a=>Tq(V.join(t,a)))))}async function Tq(t){try{await oe.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY")throw e}}var ADt={linkers:[Hv]},fDt=ADt;var jq={};Vt(jq,{StageCommand:()=>$0,default:()=>BDt,stageUtils:()=>oF});Ye();St();jt();Ye();St();var oF={};Vt(oF,{ActionType:()=>Lq,checkConsensus:()=>sF,expandDirectory:()=>Uq,findConsensus:()=>_q,findVcsRoot:()=>Oq,genCommitMessage:()=>Hq,getCommitPrefix:()=>TBe,isYarnFile:()=>Mq});St();var Lq=(n=>(n[n.CREATE=0]="CREATE",n[n.DELETE=1]="DELETE",n[n.ADD=2]="ADD",n[n.REMOVE=3]="REMOVE",n[n.MODIFY=4]="MODIFY",n))(Lq||{});async function Oq(t,{marker:e}){do if(!oe.existsSync(V.join(t,e)))t=V.dirname(t);else return t;while(t!=="/");return null}function Mq(t,{roots:e,names:r}){if(r.has(V.basename(t)))return!0;do if(!e.has(t))t=V.dirname(t);else return!0;while(t!=="/");return!1}function Uq(t){let e=[],r=[t];for(;r.length>0;){let o=r.pop(),a=oe.readdirSync(o);for(let n of a){let u=V.resolve(o,n);oe.lstatSync(u).isDirectory()?r.push(u):e.push(u)}}return e}function sF(t,e){let r=0,o=0;for(let a of t)a!=="wip"&&(e.test(a)?r+=1:o+=1);return r>=o}function _q(t){let e=sF(t,/^(\w\(\w+\):\s*)?\w+s/),r=sF(t,/^(\w\(\w+\):\s*)?[A-Z]/),o=sF(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:r,useComponent:o}}function TBe(t){return t.useComponent?"chore(yarn): ":""}var pDt=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function Hq(t,e){let r=TBe(t),o=[],a=e.slice().sort((n,u)=>n[0]-u[0]);for(;a.length>0;){let[n,u]=a.shift(),A=pDt.get(n);t.useUpperCase&&o.length===0&&(A=`${A[0].toUpperCase()}${A.slice(1)}`),t.useThirdPerson&&(A+="s");let p=[u];for(;a.length>0&&a[0][0]===n;){let[,E]=a.shift();p.push(E)}p.sort();let h=p.shift();p.length===1?h+=" (and one other)":p.length>1&&(h+=` (and ${p.length} others)`),o.push(`${A} ${h}`)}return`${r}${o.join(", ")}`}var hDt="Commit generated via `yarn stage`",gDt=11;async function NBe(t){let{code:e,stdout:r}=await Ur.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?r.trim():null}async function dDt(t,e){let r=[],o=e.filter(h=>V.basename(h.path)==="package.json");for(let{action:h,path:E}of o){let I=V.relative(t,E);if(h===4){let v=await NBe(t),{stdout:x}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Ot.fromText(x),R=await Ot.fromFile(E),L=new Map([...R.dependencies,...R.devDependencies]),U=new Map([...C.dependencies,...C.devDependencies]);for(let[J,te]of U){let ae=W.stringifyIdent(te),fe=L.get(J);fe?fe.range!==te.range&&r.push([4,`${ae} to ${fe.range}`]):r.push([3,ae])}for(let[J,te]of L)U.has(J)||r.push([2,W.stringifyIdent(te)])}else if(h===0){let v=await Ot.fromFile(E);v.name?r.push([0,W.stringifyIdent(v.name)]):r.push([0,"a package"])}else if(h===1){let v=await NBe(t),{stdout:x}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Ot.fromText(x);C.name?r.push([1,W.stringifyIdent(C.name)]):r.push([1,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:a,stdout:n}=await Ur.execvp("git",["log",`-${gDt}`,"--pretty=format:%s"],{cwd:t}),u=a===0?n.split(/\n/g).filter(h=>h!==""):[],A=_q(u);return Hq(A,r)}var mDt={[0]:[" A ","?? "],[4]:[" M "],[1]:[" D "]},yDt={[0]:["A "],[4]:["M "],[1]:["D "]},LBe={async findRoot(t){return await Oq(t,{marker:".git"})},async filterChanges(t,e,r,o){let{stdout:a}=await Ur.execvp("git",["status","-s"],{cwd:t,strict:!0}),n=a.toString().split(/\n/g),u=o?.staged?yDt:mDt;return[].concat(...n.map(p=>{if(p==="")return[];let h=p.slice(0,3),E=V.resolve(t,p.slice(3));if(!o?.staged&&h==="?? "&&p.endsWith("/"))return Uq(E).map(I=>({action:0,path:I}));{let v=[0,4,1].find(x=>u[x].includes(h));return v!==void 0?[{action:v,path:E}]:[]}})).filter(p=>Mq(p.path,{roots:e,names:r}))},async genCommitMessage(t,e){return await dDt(t,e)},async makeStage(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["add","--",...r],{cwd:t,strict:!0})},async makeCommit(t,e,r){let o=e.map(a=>ue.fromPortablePath(a.path));await Ur.execvp("git",["add","-N","--",...o],{cwd:t,strict:!0}),await Ur.execvp("git",["commit","-m",`${r} + +${hDt} +`,"--",...o],{cwd:t,strict:!0})},async makeReset(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["reset","HEAD","--",...r],{cwd:t,strict:!0})}};var EDt=[LBe],$0=class extends ut{constructor(){super(...arguments);this.commit=ge.Boolean("-c,--commit",!1,{description:"Commit the staged files"});this.reset=ge.Boolean("-r,--reset",!1,{description:"Remove all files from the staging area"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"Print the commit message and the list of modified files without staging / committing"});this.update=ge.Boolean("-u,--update",!1,{hidden:!0})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o}=await Pt.find(r,this.context.cwd),{driver:a,root:n}=await CDt(o.cwd),u=[r.get("cacheFolder"),r.get("globalFolder"),r.get("virtualFolder"),r.get("yarnPath")];await r.triggerHook(I=>I.populateYarnPaths,o,I=>{u.push(I)});let A=new Set;for(let I of u)for(let v of wDt(n,I))A.add(v);let p=new Set([r.get("rcFilename"),dr.lockfile,dr.manifest]),h=await a.filterChanges(n,A,p),E=await a.genCommitMessage(n,h);if(this.dryRun)if(this.commit)this.context.stdout.write(`${E} +`);else for(let I of h)this.context.stdout.write(`${ue.fromPortablePath(I.path)} +`);else if(this.reset){let I=await a.filterChanges(n,A,p,{staged:!0});I.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,I)}else h.length===0?this.context.stdout.write("No changes found!"):this.commit?await a.makeCommit(n,h,E):(await a.makeStage(n,h),this.context.stdout.write(E))}};$0.paths=[["stage"]],$0.usage=nt.Usage({description:"add all yarn files to your vcs",details:"\n This command will add to your staging area the files belonging to Yarn (typically any modified `package.json` and `.yarnrc.yml` files, but also linker-generated files, cache data, etc). It will take your ignore list into account, so the cache files won't be added if the cache is ignored in a `.gitignore` file (assuming you use Git).\n\n Running `--reset` will instead remove them from the staging area (the changes will still be there, but won't be committed until you stage them back).\n\n Since the staging area is a non-existent concept in Mercurial, Yarn will always create a new commit when running this command on Mercurial repositories. You can get this behavior when using Git by using the `--commit` flag which will directly create a commit.\n ",examples:[["Adds all modified project files to the staging area","yarn stage"],["Creates a new commit containing all modified project files","yarn stage --commit"]]});async function CDt(t){let e=null,r=null;for(let o of EDt)if((r=await o.findRoot(t))!==null){e=o;break}if(e===null||r===null)throw new it("No stage driver has been found for your current project");return{driver:e,root:r}}function wDt(t,e){let r=[];if(e===null)return r;for(;;){(e===t||e.startsWith(`${t}/`))&&r.push(e);let o;try{o=oe.statSync(e)}catch{break}if(o.isSymbolicLink())e=V.resolve(V.dirname(e),oe.readlinkSync(e));else break}return r}var IDt={commands:[$0]},BDt=IDt;var Gq={};Vt(Gq,{default:()=>QDt});Ye();Ye();St();var UBe=$e(zn());Ye();var OBe=$e(zH()),vDt="e8e1bd300d860104bb8c58453ffa1eb4",DDt="OFCNCOG2CU",MBe=async(t,e)=>{let r=W.stringifyIdent(t),a=SDt(e).initIndex("npm-search");try{return(await a.getObject(r,{attributesToRetrieve:["types"]})).types?.ts==="definitely-typed"}catch{return!1}},SDt=t=>(0,OBe.default)(DDt,vDt,{requester:{async send(r){try{let o=await nn.request(r.url,r.data||null,{configuration:t,headers:r.headers});return{content:o.body,isTimedOut:!1,status:o.statusCode}}catch(o){return{content:o.response.body,isTimedOut:!1,status:o.response.statusCode}}}}});var _Be=t=>t.scope?`${t.scope}__${t.name}`:`${t.name}`,PDt=async(t,e,r,o)=>{if(r.scope==="types")return;let{project:a}=t,{configuration:n}=a;if(!(n.get("tsEnableAutoTypes")??oe.existsSync(V.join(a.cwd,"tsconfig.json"))))return;let A=n.makeResolver(),p={project:a,resolver:A,report:new Qi};if(!await MBe(r,n))return;let E=_Be(r),I=W.parseRange(r.range).selector;if(!kr.validRange(I)){let L=n.normalizeDependency(r),U=await A.getCandidates(L,{},p);I=W.parseRange(U[0].reference).selector}let v=UBe.default.coerce(I);if(v===null)return;let x=`${zc.Modifier.CARET}${v.major}`,C=W.makeDescriptor(W.makeIdent("types",E),x),R=_e.mapAndFind(a.workspaces,L=>{let U=L.manifest.dependencies.get(r.identHash)?.descriptorHash,J=L.manifest.devDependencies.get(r.identHash)?.descriptorHash;if(U!==r.descriptorHash&&J!==r.descriptorHash)return _e.mapAndFind.skip;let te=[];for(let ae of Ot.allDependencies){let fe=L.manifest[ae].get(C.identHash);typeof fe>"u"||te.push([ae,fe])}return te.length===0?_e.mapAndFind.skip:te});if(typeof R<"u")for(let[L,U]of R)t.manifest[L].set(U.identHash,U);else{try{let L=n.normalizeDependency(C);if((await A.getCandidates(L,{},p)).length===0)return}catch{return}t.manifest[zc.Target.DEVELOPMENT].set(C.identHash,C)}},bDt=async(t,e,r)=>{if(r.scope==="types")return;let{project:o}=t,{configuration:a}=o;if(!(a.get("tsEnableAutoTypes")??oe.existsSync(V.join(o.cwd,"tsconfig.json"))))return;let u=_Be(r),A=W.makeIdent("types",u);for(let p of Ot.allDependencies)typeof t.manifest[p].get(A.identHash)>"u"||t.manifest[p].delete(A.identHash)},xDt=(t,e)=>{e.publishConfig&&e.publishConfig.typings&&(e.typings=e.publishConfig.typings),e.publishConfig&&e.publishConfig.types&&(e.types=e.publishConfig.types)},kDt={configuration:{tsEnableAutoTypes:{description:"Whether Yarn should auto-install @types/ dependencies on 'yarn add'",type:"BOOLEAN",isNullable:!0,default:null}},hooks:{afterWorkspaceDependencyAddition:PDt,afterWorkspaceDependencyRemoval:bDt,beforeWorkspacePacking:xDt}},QDt=kDt;var Vq={};Vt(Vq,{VersionApplyCommand:()=>eg,VersionCheckCommand:()=>tg,VersionCommand:()=>rg,default:()=>zDt,versionUtils:()=>dw});Ye();Ye();jt();var dw={};Vt(dw,{Decision:()=>hw,applyPrerelease:()=>WBe,applyReleases:()=>Kq,applyStrategy:()=>lF,clearVersionFiles:()=>qq,getUndecidedDependentWorkspaces:()=>Gv,getUndecidedWorkspaces:()=>aF,openVersionFile:()=>gw,requireMoreDecisions:()=>KDt,resolveVersionFiles:()=>jv,suggestStrategy:()=>Wq,updateVersionFiles:()=>Yq,validateReleaseDecision:()=>pw});Ye();St();Nl();jt();var YBe=$e(qBe()),vA=$e(zn()),WDt=/^(>=|[~^]|)(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/,hw=(u=>(u.UNDECIDED="undecided",u.DECLINE="decline",u.MAJOR="major",u.MINOR="minor",u.PATCH="patch",u.PRERELEASE="prerelease",u))(hw||{});function pw(t){let e=vA.default.valid(t);return e||_e.validateEnum((0,YBe.default)(hw,"UNDECIDED"),t)}async function jv(t,{prerelease:e=null}={}){let r=new Map,o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return r;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=V.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Ki(A);for(let[h,E]of Object.entries(p.releases||{})){if(E==="decline")continue;let I=W.parseIdent(h),v=t.tryWorkspaceByIdent(I);if(v===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${V.basename(u)} references ${h})`);if(v.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${W.prettyLocator(t.configuration,v.anchoredLocator)})`);let x=v.manifest.raw.stableVersion??v.manifest.version,C=r.get(v),R=lF(x,pw(E));if(R===null)throw new Error(`Assertion failed: Expected ${x} to support being bumped via strategy ${E}`);let L=typeof C<"u"?vA.default.gt(R,C)?R:C:R;r.set(v,L)}}return e&&(r=new Map([...r].map(([n,u])=>[n,WBe(u,{current:n.manifest.version,prerelease:e})]))),r}async function qq(t){let e=t.configuration.get("deferredVersionFolder");!oe.existsSync(e)||await oe.removePromise(e)}async function Yq(t,e){let r=new Set(e),o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=V.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Ki(A),h=p?.releases;if(!!h){for(let E of Object.keys(h)){let I=W.parseIdent(E),v=t.tryWorkspaceByIdent(I);(v===null||r.has(v))&&delete p.releases[E]}Object.keys(p.releases).length>0?await oe.changeFilePromise(u,Ba(new Ba.PreserveOrdering(p))):await oe.unlinkPromise(u)}}}async function gw(t,{allowEmpty:e=!1}={}){let r=t.configuration;if(r.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let o=await ra.fetchRoot(r.projectCwd),a=o!==null?await ra.fetchBase(o,{baseRefs:r.get("changesetBaseRefs")}):null,n=o!==null?await ra.fetchChangedFiles(o,{base:a.hash,project:t}):[],u=r.get("deferredVersionFolder"),A=n.filter(x=>V.contains(u,x)!==null);if(A.length>1)throw new it(`Your current branch contains multiple versioning files; this isn't supported: +- ${A.map(x=>ue.fromPortablePath(x)).join(` +- `)}`);let p=new Set(_e.mapAndFilter(n,x=>{let C=t.tryWorkspaceByFilePath(x);return C===null?_e.mapAndFilter.skip:C}));if(A.length===0&&p.size===0&&!e)return null;let h=A.length===1?A[0]:V.join(u,`${wn.makeHash(Math.random().toString()).slice(0,8)}.yml`),E=oe.existsSync(h)?await oe.readFilePromise(h,"utf8"):"{}",I=Ki(E),v=new Map;for(let x of I.declined||[]){let C=W.parseIdent(x),R=t.getWorkspaceByIdent(C);v.set(R,"decline")}for(let[x,C]of Object.entries(I.releases||{})){let R=W.parseIdent(x),L=t.getWorkspaceByIdent(R);v.set(L,pw(C))}return{project:t,root:o,baseHash:a!==null?a.hash:null,baseTitle:a!==null?a.title:null,changedFiles:new Set(n),changedWorkspaces:p,releaseRoots:new Set([...p].filter(x=>x.manifest.version!==null)),releases:v,async saveAll(){let x={},C=[],R=[];for(let L of t.workspaces){if(L.manifest.version===null)continue;let U=W.stringifyIdent(L.anchoredLocator),J=v.get(L);J==="decline"?C.push(U):typeof J<"u"?x[U]=pw(J):p.has(L)&&R.push(U)}await oe.mkdirPromise(V.dirname(h),{recursive:!0}),await oe.changeFilePromise(h,Ba(new Ba.PreserveOrdering({releases:Object.keys(x).length>0?x:void 0,declined:C.length>0?C:void 0,undecided:R.length>0?R:void 0})))}}}function KDt(t){return aF(t).size>0||Gv(t).length>0}function aF(t){let e=new Set;for(let r of t.changedWorkspaces)r.manifest.version!==null&&(t.releases.has(r)||e.add(r));return e}function Gv(t,{include:e=new Set}={}){let r=[],o=new Map(_e.mapAndFilter([...t.releases],([n,u])=>u==="decline"?_e.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n])),a=new Map(_e.mapAndFilter([...t.releases],([n,u])=>u!=="decline"?_e.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n]));for(let n of t.project.workspaces)if(!(!e.has(n)&&(a.has(n.anchoredLocator.locatorHash)||o.has(n.anchoredLocator.locatorHash)))&&n.manifest.version!==null)for(let u of Ot.hardDependencies)for(let A of n.manifest.getForScope(u).values()){let p=t.project.tryWorkspaceByDescriptor(A);p!==null&&o.has(p.anchoredLocator.locatorHash)&&r.push([n,p])}return r}function Wq(t,e){let r=vA.default.clean(e);for(let o of Object.values(hw))if(o!=="undecided"&&o!=="decline"&&vA.default.inc(t,o)===r)return o;return null}function lF(t,e){if(vA.default.valid(e))return e;if(t===null)throw new it(`Cannot apply the release strategy "${e}" unless the workspace already has a valid version`);if(!vA.default.valid(t))throw new it(`Cannot apply the release strategy "${e}" on a non-semver version (${t})`);let r=vA.default.inc(t,e);if(r===null)throw new it(`Cannot apply the release strategy "${e}" on the specified version (${t})`);return r}function Kq(t,e,{report:r}){let o=new Map;for(let a of t.workspaces)for(let n of Ot.allDependencies)for(let u of a.manifest[n].values()){let A=t.tryWorkspaceByDescriptor(u);if(A===null||!e.has(A))continue;_e.getArrayWithDefault(o,A).push([a,n,u.identHash])}for(let[a,n]of e){let u=a.manifest.version;a.manifest.version=n,vA.default.prerelease(n)===null?delete a.manifest.raw.stableVersion:a.manifest.raw.stableVersion||(a.manifest.raw.stableVersion=u);let A=a.manifest.name!==null?W.stringifyIdent(a.manifest.name):null;r.reportInfo(0,`${W.prettyLocator(t.configuration,a.anchoredLocator)}: Bumped to ${n}`),r.reportJson({cwd:ue.fromPortablePath(a.cwd),ident:A,oldVersion:u,newVersion:n});let p=o.get(a);if(!(typeof p>"u"))for(let[h,E,I]of p){let v=h.manifest[E].get(I);if(typeof v>"u")throw new Error("Assertion failed: The dependency should have existed");let x=v.range,C=!1;if(x.startsWith(Xn.protocol)&&(x=x.slice(Xn.protocol.length),C=!0,x===a.relativeCwd))continue;let R=x.match(WDt);if(!R){r.reportWarning(0,`Couldn't auto-upgrade range ${x} (in ${W.prettyLocator(t.configuration,h.anchoredLocator)})`);continue}let L=`${R[1]}${n}`;C&&(L=`${Xn.protocol}${L}`);let U=W.makeDescriptor(v,L);h.manifest[E].set(I,U)}}}var VDt=new Map([["%n",{extract:t=>t.length>=1?[t[0],t.slice(1)]:null,generate:(t=0)=>`${t+1}`}]]);function WBe(t,{current:e,prerelease:r}){let o=new vA.default.SemVer(e),a=o.prerelease.slice(),n=[];o.prerelease=[],o.format()!==t&&(a.length=0);let u=!0,A=r.split(/\./g);for(let p of A){let h=VDt.get(p);if(typeof h>"u")n.push(p),a[0]===p?a.shift():u=!1;else{let E=u?h.extract(a):null;E!==null&&typeof E[0]=="number"?(n.push(h.generate(E[0])),a=E[1]):(n.push(h.generate()),u=!1)}}return o.prerelease&&(o.prerelease=[]),`${t}-${n.join(".")}`}var eg=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("--all",!1,{description:"Apply the deferred version changes on all workspaces"});this.dryRun=ge.Boolean("--dry-run",!1,{description:"Print the versions without actually generating the package archive"});this.prerelease=ge.String("--prerelease",{description:"Add a prerelease identifier to new versions",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",{description:"Release the transitive workspaces as well"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,h=await jv(o,{prerelease:p}),E=new Map;if(this.all)E=h;else{let I=this.recursive?a.getRecursiveWorkspaceDependencies():[a];for(let v of I){let x=h.get(v);typeof x<"u"&&E.set(v,x)}}if(E.size===0){let I=h.size>0?" Did you want to add --all?":"";A.reportWarning(0,`The current workspace doesn't seem to require a version bump.${I}`);return}Kq(o,E,{report:A}),this.dryRun||(p||(this.all?await qq(o):await Yq(o,[...E.keys()])),A.reportSeparator())});return this.dryRun||u.hasErrors()?u.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};eg.paths=[["version","apply"]],eg.usage=nt.Usage({category:"Release-related commands",description:"apply all the deferred version bumps at once",details:` + This command will apply the deferred version changes and remove their definitions from the repository. + + Note that if \`--prerelease\` is set, the given prerelease identifier (by default \`rc.%d\`) will be used on all new versions and the version definitions will be kept as-is. + + By default only the current workspace will be bumped, but you can configure this behavior by using one of: + + - \`--recursive\` to also apply the version bump on its dependencies + - \`--all\` to apply the version bump on all packages in the repository + + Note that this command will also update the \`workspace:\` references across all your local workspaces, thus ensuring that they keep referring to the same workspaces even after the version bump. + `,examples:[["Apply the version change to the local workspace","yarn version apply"],["Apply the version change to all the workspaces in the local workspace","yarn version apply --all"]]});Ye();St();jt();var cF=$e(zn());var tg=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Open an interactive interface used to set version bumps"})}async execute(){return this.interactive?await this.executeInteractive():await this.executeStandard()}async executeInteractive(){bC(this.context);let{Gem:r}=await Promise.resolve().then(()=>(cQ(),Bj)),{ScrollableItems:o}=await Promise.resolve().then(()=>(pQ(),fQ)),{FocusRequest:a}=await Promise.resolve().then(()=>(Dj(),Vwe)),{useListInput:n}=await Promise.resolve().then(()=>(AQ(),Jwe)),{renderForm:u}=await Promise.resolve().then(()=>(mQ(),dQ)),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useCallback:E,useState:I}=await Promise.resolve().then(()=>$e(on())),v=await Ke.find(this.context.cwd,this.context.plugins),{project:x,workspace:C}=await Pt.find(v,this.context.cwd);if(!C)throw new rr(x.cwd,this.context.cwd);await x.restoreInstallState();let R=await gw(x);if(R===null||R.releaseRoots.size===0)return 0;if(R.root===null)throw new it("This command can only be run on Git repositories");let L=()=>h.createElement(A,{flexDirection:"row",paddingBottom:1},h.createElement(A,{flexDirection:"column",width:60},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select workspaces.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select release strategies."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to save.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),U=({workspace:me,active:he,decision:Be,setDecision:we})=>{let g=me.manifest.raw.stableVersion??me.manifest.version;if(g===null)throw new Error(`Assertion failed: The version should have been set (${W.prettyLocator(v,me.anchoredLocator)})`);if(cF.default.prerelease(g)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${g})`);let Ee=["undecided","decline","patch","minor","major"];n(Be,Ee,{active:he,minus:"left",plus:"right",set:we});let Se=Be==="undecided"?h.createElement(p,{color:"yellow"},g):Be==="decline"?h.createElement(p,{color:"green"},g):h.createElement(p,null,h.createElement(p,{color:"magenta"},g)," \u2192 ",h.createElement(p,{color:"green"},cF.default.valid(Be)?Be:cF.default.inc(g,Be)));return h.createElement(A,{flexDirection:"column"},h.createElement(A,null,h.createElement(p,null,W.prettyLocator(v,me.anchoredLocator)," - ",Se)),h.createElement(A,null,Ee.map(le=>h.createElement(A,{key:le,paddingLeft:2},h.createElement(p,null,h.createElement(r,{active:le===Be})," ",le)))))},J=me=>{let he=new Set(R.releaseRoots),Be=new Map([...me].filter(([we])=>he.has(we)));for(;;){let we=Gv({project:R.project,releases:Be}),g=!1;if(we.length>0){for(let[Ee]of we)if(!he.has(Ee)){he.add(Ee),g=!0;let Se=me.get(Ee);typeof Se<"u"&&Be.set(Ee,Se)}}if(!g)break}return{relevantWorkspaces:he,relevantReleases:Be}},te=()=>{let[me,he]=I(()=>new Map(R.releases)),Be=E((we,g)=>{let Ee=new Map(me);g!=="undecided"?Ee.set(we,g):Ee.delete(we);let{relevantReleases:Se}=J(Ee);he(Se)},[me,he]);return[me,Be]},ae=({workspaces:me,releases:he})=>{let Be=[];Be.push(`${me.size} total`);let we=0,g=0;for(let Ee of me){let Se=he.get(Ee);typeof Se>"u"?g+=1:Se!=="decline"&&(we+=1)}return Be.push(`${we} release${we===1?"":"s"}`),Be.push(`${g} remaining`),h.createElement(p,{color:"yellow"},Be.join(", "))},ce=await u(({useSubmit:me})=>{let[he,Be]=te();me(he);let{relevantWorkspaces:we}=J(he),g=new Set([...we].filter(ne=>!R.releaseRoots.has(ne))),[Ee,Se]=I(0),le=E(ne=>{switch(ne){case a.BEFORE:Se(Ee-1);break;case a.AFTER:Se(Ee+1);break}},[Ee,Se]);return h.createElement(A,{flexDirection:"column"},h.createElement(L,null),h.createElement(A,null,h.createElement(p,{wrap:"wrap"},"The following files have been modified in your local checkout.")),h.createElement(A,{flexDirection:"column",marginTop:1,paddingLeft:2},[...R.changedFiles].map(ne=>h.createElement(A,{key:ne},h.createElement(p,null,h.createElement(p,{color:"grey"},ue.fromPortablePath(R.root)),ue.sep,ue.relative(ue.fromPortablePath(R.root),ue.fromPortablePath(ne)))))),R.releaseRoots.size>0&&h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"Because of those files having been modified, the following workspaces may need to be released again (note that private workspaces are also shown here, because even though they won't be published, releasing them will allow us to flag their dependents for potential re-release):")),g.size>3?h.createElement(A,{marginTop:1},h.createElement(ae,{workspaces:R.releaseRoots,releases:he})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===0,radius:1,size:2,onFocusRequest:le},[...R.releaseRoots].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:he.get(ne)||"undecided",setDecision:ee=>Be(ne,ee)}))))),g.size>0?h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"The following workspaces depend on other workspaces that have been marked for release, and thus may need to be released as well:")),h.createElement(A,null,h.createElement(p,null,"(Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move the focus between the workspace groups.)")),g.size>5?h.createElement(A,{marginTop:1},h.createElement(ae,{workspaces:g,releases:he})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===1,radius:2,size:2,onFocusRequest:le},[...g].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:he.get(ne)||"undecided",setDecision:ee=>Be(ne,ee)}))))):null)},{versionFile:R},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof ce>"u")return 1;R.releases.clear();for(let[me,he]of ce)R.releases.set(me,he);await R.saveAll()}async executeStandard(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);return await o.restoreInstallState(),(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{let A=await gw(o);if(A===null||A.releaseRoots.size===0)return;if(A.root===null)throw new it("This command can only be run on Git repositories");if(u.reportInfo(0,`Your PR was started right after ${de.pretty(r,A.baseHash.slice(0,7),"yellow")} ${de.pretty(r,A.baseTitle,"magenta")}`),A.changedFiles.size>0){u.reportInfo(0,"You have changed the following files since then:"),u.reportSeparator();for(let v of A.changedFiles)u.reportInfo(null,`${de.pretty(r,ue.fromPortablePath(A.root),"gray")}${ue.sep}${ue.relative(ue.fromPortablePath(A.root),ue.fromPortablePath(v))}`)}let p=!1,h=!1,E=aF(A);if(E.size>0){p||u.reportSeparator();for(let v of E)u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} has been modified but doesn't have a release strategy attached`);p=!0}let I=Gv(A);for(let[v,x]of I)h||u.reportSeparator(),u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} doesn't have a release strategy attached, but depends on ${W.prettyWorkspace(r,x)} which is planned for release.`),h=!0;(p||h)&&(u.reportSeparator(),u.reportInfo(0,"This command detected that at least some workspaces have received modifications without explicit instructions as to how they had to be released (if needed)."),u.reportInfo(0,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};tg.paths=[["version","check"]],tg.usage=nt.Usage({category:"Release-related commands",description:"check that all the relevant packages have been bumped",details:"\n **Warning:** This command currently requires Git.\n\n This command will check that all the packages covered by the files listed in argument have been properly bumped or declined to bump.\n\n In the case of a bump, the check will also cover transitive packages - meaning that should `Foo` be bumped, a package `Bar` depending on `Foo` will require a decision as to whether `Bar` will need to be bumped. This check doesn't cross packages that have declined to bump.\n\n In case no arguments are passed to the function, the list of modified files will be generated by comparing the HEAD against `master`.\n ",examples:[["Check whether the modified packages need a bump","yarn version check"]]});Ye();jt();var uF=$e(zn());var rg=class extends ut{constructor(){super(...arguments);this.deferred=ge.Boolean("-d,--deferred",{description:"Prepare the version to be bumped during the next release cycle"});this.immediate=ge.Boolean("-i,--immediate",{description:"Bump the version immediately"});this.strategy=ge.String()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=r.get("preferDeferredVersions");this.deferred&&(n=!0),this.immediate&&(n=!1);let u=uF.default.valid(this.strategy),A=this.strategy==="decline",p;if(u)if(a.manifest.version!==null){let E=Wq(a.manifest.version,this.strategy);E!==null?p=E:p=this.strategy}else p=this.strategy;else{let E=a.manifest.version;if(!A){if(E===null)throw new it("Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.");if(typeof E!="string"||!uF.default.valid(E))throw new it(`Can't bump the version (${E}) if it's not valid semver`)}p=pw(this.strategy)}if(!n){let I=(await jv(o)).get(a);if(typeof I<"u"&&p!=="decline"){let v=lF(a.manifest.version,p);if(uF.default.lt(v,I))throw new it(`Can't bump the version to one that would be lower than the current deferred one (${I})`)}}let h=await gw(o,{allowEmpty:!0});return h.releases.set(a,p),await h.saveAll(),n?0:await this.cli.run(["version","apply"])}};rg.paths=[["version"]],rg.usage=nt.Usage({category:"Release-related commands",description:"apply a new version to the current package",details:"\n This command will bump the version number for the given package, following the specified strategy:\n\n - If `major`, the first number from the semver range will be increased (`X.0.0`).\n - If `minor`, the second number from the semver range will be increased (`0.X.0`).\n - If `patch`, the third number from the semver range will be increased (`0.0.X`).\n - If prefixed by `pre` (`premajor`, ...), a `-0` suffix will be set (`0.0.0-0`).\n - If `prerelease`, the suffix will be increased (`0.0.0-X`); the third number from the semver range will also be increased if there was no suffix in the previous version.\n - If `decline`, the nonce will be increased for `yarn version check` to pass without version bump.\n - If a valid semver range, it will be used as new version.\n - If unspecified, Yarn will ask you for guidance.\n\n For more information about the `--deferred` flag, consult our documentation (https://yarnpkg.com/features/release-workflow#deferred-versioning).\n ",examples:[["Immediately bump the version to the next major","yarn version major"],["Prepare the version to be bumped to the next major","yarn version major --deferred"]]});var JDt={configuration:{deferredVersionFolder:{description:"Folder where are stored the versioning files",type:"ABSOLUTE_PATH",default:"./.yarn/versions"},preferDeferredVersions:{description:"If true, running `yarn version` will assume the `--deferred` flag unless `--immediate` is set",type:"BOOLEAN",default:!1}},commands:[eg,tg,rg]},zDt=JDt;var Jq={};Vt(Jq,{WorkspacesFocusCommand:()=>ng,WorkspacesForeachCommand:()=>ap,default:()=>$Dt});Ye();Ye();jt();var ng=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.production=ge.Boolean("--production",!1,{description:"Only install regular dependencies by omitting dev dependencies"});this.all=ge.Boolean("-A,--all",!1,{description:"Install the entire project"});this.workspaces=ge.Rest()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd),n=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let u;if(this.all)u=new Set(o.workspaces);else if(this.workspaces.length===0){if(!a)throw new rr(o.cwd,this.context.cwd);u=new Set([a])}else u=new Set(this.workspaces.map(A=>o.getWorkspaceByIdent(W.parseIdent(A))));for(let A of u)for(let p of this.production?["dependencies"]:Ot.hardDependencies)for(let h of A.manifest.getForScope(p).values()){let E=o.tryWorkspaceByDescriptor(h);E!==null&&u.add(E)}for(let A of o.workspaces)u.has(A)?this.production&&A.manifest.devDependencies.clear():(A.manifest.installConfig=A.manifest.installConfig||{},A.manifest.installConfig.selfReferences=!1,A.manifest.dependencies.clear(),A.manifest.devDependencies.clear(),A.manifest.peerDependencies.clear(),A.manifest.scripts.clear());return await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n,persistProject:!1})}};ng.paths=[["workspaces","focus"]],ng.usage=nt.Usage({category:"Workspace-related commands",description:"install a single workspace and its dependencies",details:"\n This command will run an install as if the specified workspaces (and all other workspaces they depend on) were the only ones in the project. If no workspaces are explicitly listed, the active one will be assumed.\n\n Note that this command is only very moderately useful when using zero-installs, since the cache will contain all the packages anyway - meaning that the only difference between a full install and a focused install would just be a few extra lines in the `.pnp.cjs` file, at the cost of introducing an extra complexity.\n\n If the `-A,--all` flag is set, the entire project will be installed. Combine with `--production` to replicate the old `yarn install --production`.\n "});Ye();Ye();Ye();jt();var mw=$e(Zo()),VBe=$e(id());Za();var ap=class extends ut{constructor(){super(...arguments);this.from=ge.Array("--from",{description:"An array of glob pattern idents or paths from which to base any recursion"});this.all=ge.Boolean("-A,--all",{description:"Run the command on all workspaces of a project"});this.recursive=ge.Boolean("-R,--recursive",{description:"Run the command on the current workspace and all of its recursive dependencies"});this.worktree=ge.Boolean("-W,--worktree",{description:"Run the command on all workspaces of the current worktree"});this.verbose=ge.Counter("-v,--verbose",{description:"Increase level of logging verbosity up to 2 times"});this.parallel=ge.Boolean("-p,--parallel",!1,{description:"Run the commands in parallel"});this.interlaced=ge.Boolean("-i,--interlaced",!1,{description:"Print the output of commands in real-time instead of buffering it"});this.jobs=ge.String("-j,--jobs",{description:"The maximum number of parallel tasks that the execution will be limited to; or `unlimited`",validator:TT([Ks(["unlimited"]),aI(RT(),[LT(),NT(1)])])});this.topological=ge.Boolean("-t,--topological",!1,{description:"Run the command after all workspaces it depends on (regular) have finished"});this.topologicalDev=ge.Boolean("--topological-dev",!1,{description:"Run the command after all workspaces it depends on (regular + dev) have finished"});this.include=ge.Array("--include",[],{description:"An array of glob pattern idents or paths; only matching workspaces will be traversed"});this.exclude=ge.Array("--exclude",[],{description:"An array of glob pattern idents or paths; matching workspaces won't be traversed"});this.publicOnly=ge.Boolean("--no-private",{description:"Avoid running the command on private workspaces"});this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.dryRun=ge.Boolean("-n,--dry-run",{description:"Print the commands that would be run, without actually running them"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ke.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Pt.find(r,this.context.cwd);if(!this.all&&!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=this.cli.process([this.commandName,...this.args]),u=n.path.length===1&&n.path[0]==="run"&&typeof n.scriptName<"u"?n.scriptName:null;if(n.path.length===0)throw new it("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let A=we=>{!this.dryRun||this.context.stdout.write(`${we} +`)},p=()=>{let we=this.from.map(g=>mw.default.matcher(g));return o.workspaces.filter(g=>{let Ee=W.stringifyIdent(g.anchoredLocator),Se=g.relativeCwd;return we.some(le=>le(Ee)||le(Se))})},h=[];if(this.since?(A("Option --since is set; selecting the changed workspaces as root for workspace selection"),h=Array.from(await ra.fetchChangedWorkspaces({ref:this.since,project:o}))):this.from?(A("Option --from is set; selecting the specified workspaces"),h=[...p()]):this.worktree?(A("Option --worktree is set; selecting the current workspace"),h=[a]):this.recursive?(A("Option --recursive is set; selecting the current workspace"),h=[a]):this.all&&(A("Option --all is set; selecting all workspaces"),h=[...o.workspaces]),this.dryRun&&!this.all){for(let we of h)A(` +- ${we.relativeCwd} + ${W.prettyLocator(r,we.anchoredLocator)}`);h.length>0&&A("")}let E;if(this.recursive?this.since?(A("Option --recursive --since is set; recursively selecting all dependent workspaces"),E=new Set(h.map(we=>[...we.getRecursiveWorkspaceDependents()]).flat())):(A("Option --recursive is set; recursively selecting all transitive dependencies"),E=new Set(h.map(we=>[...we.getRecursiveWorkspaceDependencies()]).flat())):this.worktree?(A("Option --worktree is set; recursively selecting all nested workspaces"),E=new Set(h.map(we=>[...we.getRecursiveWorkspaceChildren()]).flat())):E=null,E!==null&&(h=[...new Set([...h,...E])],this.dryRun))for(let we of E)A(` +- ${we.relativeCwd} + ${W.prettyLocator(r,we.anchoredLocator)}`);let I=[],v=!1;if(u?.includes(":")){for(let we of o.workspaces)if(we.manifest.scripts.has(u)&&(v=!v,v===!1))break}for(let we of h){if(u&&!we.manifest.scripts.has(u)&&!v&&!(await un.getWorkspaceAccessibleBinaries(we)).has(u)){A(`Excluding ${we.relativeCwd} because it doesn't have a "${u}" script`);continue}if(!(u===r.env.npm_lifecycle_event&&we.cwd===a.cwd)){if(this.include.length>0&&!mw.default.isMatch(W.stringifyIdent(we.anchoredLocator),this.include)&&!mw.default.isMatch(we.relativeCwd,this.include)){A(`Excluding ${we.relativeCwd} because it doesn't match the --include filter`);continue}if(this.exclude.length>0&&(mw.default.isMatch(W.stringifyIdent(we.anchoredLocator),this.exclude)||mw.default.isMatch(we.relativeCwd,this.exclude))){A(`Excluding ${we.relativeCwd} because it matches the --include filter`);continue}if(this.publicOnly&&we.manifest.private===!0){A(`Excluding ${we.relativeCwd} because it's a private workspace and --no-private was set`);continue}I.push(we)}}if(this.dryRun)return 0;let x=this.verbose??(this.context.stdout.isTTY?1/0:0),C=x>0,R=x>1,L=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.ceil(Ji.availableParallelism()/2):1,U=L===1?!1:this.parallel,J=U?this.interlaced:!0,te=(0,VBe.default)(L),ae=new Map,fe=new Set,ce=0,me=null,he=!1,Be=await Nt.start({configuration:r,stdout:this.context.stdout,includePrefix:!1},async we=>{let g=async(Ee,{commandIndex:Se})=>{if(he)return-1;!U&&R&&Se>1&&we.reportSeparator();let le=XDt(Ee,{configuration:r,label:C,commandIndex:Se}),[ne,ee]=KBe(we,{prefix:le,interlaced:J}),[Ie,Fe]=KBe(we,{prefix:le,interlaced:J});try{R&&we.reportInfo(null,`${le?`${le} `:""}Process started`);let At=Date.now(),H=await this.cli.run([this.commandName,...this.args],{cwd:Ee.cwd,stdout:ne,stderr:Ie})||0;ne.end(),Ie.end(),await ee,await Fe;let at=Date.now();if(R){let Re=r.get("enableTimers")?`, completed in ${de.pretty(r,at-At,de.Type.DURATION)}`:"";we.reportInfo(null,`${le?`${le} `:""}Process exited (exit code ${H})${Re}`)}return H===130&&(he=!0,me=H),H}catch(At){throw ne.end(),Ie.end(),await ee,await Fe,At}};for(let Ee of I)ae.set(Ee.anchoredLocator.locatorHash,Ee);for(;ae.size>0&&!we.hasErrors();){let Ee=[];for(let[ne,ee]of ae){if(fe.has(ee.anchoredDescriptor.descriptorHash))continue;let Ie=!0;if(this.topological||this.topologicalDev){let Fe=this.topologicalDev?new Map([...ee.manifest.dependencies,...ee.manifest.devDependencies]):ee.manifest.dependencies;for(let At of Fe.values()){let H=o.tryWorkspaceByDescriptor(At);if(Ie=H===null||!ae.has(H.anchoredLocator.locatorHash),!Ie)break}}if(!!Ie&&(fe.add(ee.anchoredDescriptor.descriptorHash),Ee.push(te(async()=>{let Fe=await g(ee,{commandIndex:++ce});return ae.delete(ne),fe.delete(ee.anchoredDescriptor.descriptorHash),Fe})),!U))break}if(Ee.length===0){let ne=Array.from(ae.values()).map(ee=>W.prettyLocator(r,ee.anchoredLocator)).join(", ");we.reportError(3,`Dependency cycle detected (${ne})`);return}let le=(await Promise.all(Ee)).find(ne=>ne!==0);me===null&&(me=typeof le<"u"?1:me),(this.topological||this.topologicalDev)&&typeof le<"u"&&we.reportError(0,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return me!==null?me:Be.exitCode()}};ap.paths=[["workspaces","foreach"]],ap.usage=nt.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`, or disabled by setting `-j unlimited`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `-W,--worktree` is set, Yarn will find workspaces to run the command on by looking at the current worktree.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - If `--since` is set, Yarn will only run the command on workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `--dry-run` is set, Yarn will explain what it would do without actually doing anything.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n The `-v,--verbose` flag can be passed up to twice: once to prefix output lines with the originating workspace's name, and again to include start/finish/timing log lines. Maximum verbosity is enabled by default in terminal environments.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish all packages","yarn workspaces foreach -A npm publish --tolerate-republish"],["Run the build script on all descendant packages","yarn workspaces foreach -A run build"],["Run the build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -Apt run build"],["Run the build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -Rpt --from '{workspace-a,workspace-b}' run build"]]}),ap.schema=[cI("all",qu.Forbids,["from","recursive","since","worktree"],{missingIf:"undefined"}),OT(["all","recursive","since","worktree"],{missingIf:"undefined"})];function KBe(t,{prefix:e,interlaced:r}){let o=t.createStreamReporter(e),a=new _e.DefaultStream;a.pipe(o,{end:!1}),a.on("finish",()=>{o.end()});let n=new Promise(A=>{o.on("finish",()=>{A(a.active)})});if(r)return[a,n];let u=new _e.BufferStream;return u.pipe(a,{end:!1}),u.on("finish",()=>{a.end()}),[u,n]}function XDt(t,{configuration:e,commandIndex:r,label:o}){if(!o)return null;let n=`[${W.stringifyIdent(t.anchoredLocator)}]:`,u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[r%u.length];return de.pretty(e,n,A)}var ZDt={commands:[ng,ap]},$Dt=ZDt;var pC=()=>({modules:new Map([["@yarnpkg/cli",a2],["@yarnpkg/core",o2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",rI],["@yarnpkg/shell",T1],["clipanion",hI],["semver",eSt],["typanion",Vo],["@yarnpkg/plugin-essentials",$8],["@yarnpkg/plugin-compat",iH],["@yarnpkg/plugin-constraints",wH],["@yarnpkg/plugin-dlx",IH],["@yarnpkg/plugin-exec",DH],["@yarnpkg/plugin-file",PH],["@yarnpkg/plugin-git",Z8],["@yarnpkg/plugin-github",kH],["@yarnpkg/plugin-http",QH],["@yarnpkg/plugin-init",FH],["@yarnpkg/plugin-interactive-tools",Tj],["@yarnpkg/plugin-link",Nj],["@yarnpkg/plugin-nm",yG],["@yarnpkg/plugin-npm",dq],["@yarnpkg/plugin-npm-cli",Dq],["@yarnpkg/plugin-pack",Aq],["@yarnpkg/plugin-patch",Fq],["@yarnpkg/plugin-pnp",oG],["@yarnpkg/plugin-pnpm",Nq],["@yarnpkg/plugin-stage",jq],["@yarnpkg/plugin-typescript",Gq],["@yarnpkg/plugin-version",Vq],["@yarnpkg/plugin-workspace-tools",Jq]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"])});function XBe({cwd:t,pluginConfiguration:e}){let r=new as({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:rn??""});return Object.assign(r,{defaultContext:{...as.defaultContext,cwd:t,plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr}})}function tSt(t){if(_e.parseOptionalBoolean(process.env.YARN_IGNORE_NODE))return!0;let r=process.versions.node,o=">=18.12.0";if(kr.satisfiesWithPrereleases(r,o))return!0;let a=new it(`This tool requires a Node version compatible with ${o} (got ${r}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);return as.defaultContext.stdout.write(t.error(a)),!1}async function ZBe({selfPath:t,pluginConfiguration:e}){return await Ke.find(ue.toPortablePath(process.cwd()),e,{strict:!1,usePathCheck:t})}function rSt(t,e,{yarnPath:r}){if(!oe.existsSync(r))return t.error(new Error(`The "yarn-path" option has been set, but the specified location doesn't exist (${r}).`)),1;process.on("SIGINT",()=>{});let o={stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1"}};try{(0,JBe.execFileSync)(process.execPath,[ue.fromPortablePath(r),...e],o)}catch(a){return a.status??1}return 0}function nSt(t,e){let r=null,o=e;return e.length>=2&&e[0]==="--cwd"?(r=ue.toPortablePath(e[1]),o=e.slice(2)):e.length>=1&&e[0].startsWith("--cwd=")?(r=ue.toPortablePath(e[0].slice(6)),o=e.slice(1)):e[0]==="add"&&e[e.length-2]==="--cwd"&&(r=ue.toPortablePath(e[e.length-1]),o=e.slice(0,e.length-2)),t.defaultContext.cwd=r!==null?V.resolve(r):V.cwd(),o}function iSt(t,{configuration:e}){if(!e.get("enableTelemetry")||zBe.isCI||!process.stdout.isTTY)return;Ke.telemetry=new uC(e,"puba9cdc10ec5790a2cf4969dd413a47270");let o=/^@yarnpkg\/plugin-(.*)$/;for(let a of e.plugins.keys())AC.has(a.match(o)?.[1]??"")&&Ke.telemetry?.reportPluginName(a);t.binaryVersion&&Ke.telemetry.reportVersion(t.binaryVersion)}function $Be(t,{configuration:e}){for(let r of e.plugins.values())for(let o of r.commands||[])t.register(o)}async function sSt(t,e,{selfPath:r,pluginConfiguration:o}){if(!tSt(t))return 1;let a=await ZBe({selfPath:r,pluginConfiguration:o}),n=a.get("yarnPath"),u=a.get("ignorePath");if(n&&!u)return rSt(t,e,{yarnPath:n});delete process.env.YARN_IGNORE_PATH;let A=nSt(t,e);iSt(t,{configuration:a}),$Be(t,{configuration:a});let p=t.process(A,t.defaultContext);return p.help||Ke.telemetry?.reportCommandName(p.path.join(" ")),await t.run(p,t.defaultContext)}async function $pe({cwd:t=V.cwd(),pluginConfiguration:e=pC()}={}){let r=XBe({cwd:t,pluginConfiguration:e}),o=await ZBe({pluginConfiguration:e,selfPath:null});return $Be(r,{configuration:o}),r}async function nk(t,{cwd:e=V.cwd(),selfPath:r,pluginConfiguration:o}){let a=XBe({cwd:e,pluginConfiguration:o});try{process.exitCode=await sSt(a,t,{selfPath:r,pluginConfiguration:o})}catch(n){as.defaultContext.stdout.write(a.error(n)),process.exitCode=1}finally{await oe.rmtempPromise()}}nk(process.argv.slice(2),{cwd:V.cwd(),selfPath:ue.toPortablePath(ue.resolve(process.argv[1])),pluginConfiguration:pC()});})(); +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ +/*! + * buildToken + * Builds OAuth token prefix (helper function) + * + * @name buildToken + * @function + * @param {GitUrl} obj The parsed Git url object. + * @return {String} token prefix + */ +/*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + */ +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * is-windows + * + * Copyright © 2015-2018, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + */ +/** + @license + Copyright (c) 2015, Rebecca Turner + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + */ +/** + @license + Copyright Joyent, Inc. and other Node contributors. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to permit + persons to whom the Software is furnished to do so, subject to the + following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** + @license + Copyright Node.js contributors. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. +*/ +/** + @license + The MIT License (MIT) + + Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ +/** @license React v0.18.0 + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/** @license React v0.24.0 + * react-reconciler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/** @license React v16.13.1 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/.yarn/sdks/eslint/bin/eslint.js b/.yarn/sdks/eslint/bin/eslint.js deleted file mode 100755 index 9ef98e400b47b..0000000000000 --- a/.yarn/sdks/eslint/bin/eslint.js +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env node - -const {existsSync} = require(`fs`); -const {createRequire} = require(`module`); -const {resolve} = require(`path`); - -const relPnpApiPath = "../../../../.pnp.cjs"; - -const absPnpApiPath = resolve(__dirname, relPnpApiPath); -const absRequire = createRequire(absPnpApiPath); - -if (existsSync(absPnpApiPath)) { - if (!process.versions.pnp) { - // Setup the environment to be able to require eslint/bin/eslint.js - require(absPnpApiPath).setup(); - } -} - -// Defer to the real eslint/bin/eslint.js your application uses -module.exports = absRequire(`eslint/bin/eslint.js`); diff --git a/.yarn/sdks/eslint/lib/api.js b/.yarn/sdks/eslint/lib/api.js deleted file mode 100644 index 653b22bae06f4..0000000000000 --- a/.yarn/sdks/eslint/lib/api.js +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env node - -const {existsSync} = require(`fs`); -const {createRequire} = require(`module`); -const {resolve} = require(`path`); - -const relPnpApiPath = "../../../../.pnp.cjs"; - -const absPnpApiPath = resolve(__dirname, relPnpApiPath); -const absRequire = createRequire(absPnpApiPath); - -if (existsSync(absPnpApiPath)) { - if (!process.versions.pnp) { - // Setup the environment to be able to require eslint - require(absPnpApiPath).setup(); - } -} - -// Defer to the real eslint your application uses -module.exports = absRequire(`eslint`); diff --git a/.yarn/sdks/eslint/package.json b/.yarn/sdks/eslint/package.json deleted file mode 100644 index ef371cb8e726c..0000000000000 --- a/.yarn/sdks/eslint/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "eslint", - "version": "8.52.0-sdk", - "main": "./lib/api.js", - "type": "commonjs", - "bin": { - "eslint": "./bin/eslint.js" - }, - "exports": { - "./package.json": "./package.json", - ".": "./lib/api.js", - "./use-at-your-own-risk": "./lib/unsupported-api.js" - } -} diff --git a/.yarn/sdks/integrations.yml b/.yarn/sdks/integrations.yml deleted file mode 100644 index 7e42d1884d84d..0000000000000 --- a/.yarn/sdks/integrations.yml +++ /dev/null @@ -1,6 +0,0 @@ -# This file is automatically generated by @yarnpkg/sdks. -# Manual changes might be lost! - -integrations: - - vscode - - vim diff --git a/.yarn/sdks/prettier/package.json b/.yarn/sdks/prettier/package.json deleted file mode 100644 index 4301e0948f114..0000000000000 --- a/.yarn/sdks/prettier/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "prettier", - "version": "3.0.0-sdk", - "main": "./index.cjs", - "type": "commonjs", - "bin": "./bin/prettier.cjs" -} diff --git a/.yarn/sdks/typescript/bin/tsc b/.yarn/sdks/typescript/bin/tsc deleted file mode 100755 index 454b950b7e8f1..0000000000000 --- a/.yarn/sdks/typescript/bin/tsc +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env node - -const {existsSync} = require(`fs`); -const {createRequire} = require(`module`); -const {resolve} = require(`path`); - -const relPnpApiPath = "../../../../.pnp.cjs"; - -const absPnpApiPath = resolve(__dirname, relPnpApiPath); -const absRequire = createRequire(absPnpApiPath); - -if (existsSync(absPnpApiPath)) { - if (!process.versions.pnp) { - // Setup the environment to be able to require typescript/bin/tsc - require(absPnpApiPath).setup(); - } -} - -// Defer to the real typescript/bin/tsc your application uses -module.exports = absRequire(`typescript/bin/tsc`); diff --git a/.yarn/sdks/typescript/bin/tsserver b/.yarn/sdks/typescript/bin/tsserver deleted file mode 100755 index d7a605684df95..0000000000000 --- a/.yarn/sdks/typescript/bin/tsserver +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env node - -const {existsSync} = require(`fs`); -const {createRequire} = require(`module`); -const {resolve} = require(`path`); - -const relPnpApiPath = "../../../../.pnp.cjs"; - -const absPnpApiPath = resolve(__dirname, relPnpApiPath); -const absRequire = createRequire(absPnpApiPath); - -if (existsSync(absPnpApiPath)) { - if (!process.versions.pnp) { - // Setup the environment to be able to require typescript/bin/tsserver - require(absPnpApiPath).setup(); - } -} - -// Defer to the real typescript/bin/tsserver your application uses -module.exports = absRequire(`typescript/bin/tsserver`); diff --git a/.yarn/sdks/typescript/lib/tsc.js b/.yarn/sdks/typescript/lib/tsc.js deleted file mode 100644 index 2f62fc96c0a08..0000000000000 --- a/.yarn/sdks/typescript/lib/tsc.js +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env node - -const {existsSync} = require(`fs`); -const {createRequire} = require(`module`); -const {resolve} = require(`path`); - -const relPnpApiPath = "../../../../.pnp.cjs"; - -const absPnpApiPath = resolve(__dirname, relPnpApiPath); -const absRequire = createRequire(absPnpApiPath); - -if (existsSync(absPnpApiPath)) { - if (!process.versions.pnp) { - // Setup the environment to be able to require typescript/lib/tsc.js - require(absPnpApiPath).setup(); - } -} - -// Defer to the real typescript/lib/tsc.js your application uses -module.exports = absRequire(`typescript/lib/tsc.js`); diff --git a/.yarn/sdks/typescript/lib/tsserver.js b/.yarn/sdks/typescript/lib/tsserver.js deleted file mode 100644 index bbb1e46501b52..0000000000000 --- a/.yarn/sdks/typescript/lib/tsserver.js +++ /dev/null @@ -1,225 +0,0 @@ -#!/usr/bin/env node - -const {existsSync} = require(`fs`); -const {createRequire} = require(`module`); -const {resolve} = require(`path`); - -const relPnpApiPath = "../../../../.pnp.cjs"; - -const absPnpApiPath = resolve(__dirname, relPnpApiPath); -const absRequire = createRequire(absPnpApiPath); - -const moduleWrapper = tsserver => { - if (!process.versions.pnp) { - return tsserver; - } - - const {isAbsolute} = require(`path`); - const pnpApi = require(`pnpapi`); - - const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//); - const isPortal = str => str.startsWith("portal:/"); - const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); - - const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => { - return `${locator.name}@${locator.reference}`; - })); - - // VSCode sends the zip paths to TS using the "zip://" prefix, that TS - // doesn't understand. This layer makes sure to remove the protocol - // before forwarding it to TS, and to add it back on all returned paths. - - function toEditorPath(str) { - // We add the `zip:` prefix to both `.zip/` paths and virtual paths - if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) { - // We also take the opportunity to turn virtual paths into physical ones; - // this makes it much easier to work with workspaces that list peer - // dependencies, since otherwise Ctrl+Click would bring us to the virtual - // file instances instead of the real ones. - // - // We only do this to modules owned by the the dependency tree roots. - // This avoids breaking the resolution when jumping inside a vendor - // with peer dep (otherwise jumping into react-dom would show resolution - // errors on react). - // - const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str; - if (resolved) { - const locator = pnpApi.findPackageLocator(resolved); - if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) { - str = resolved; - } - } - - str = normalize(str); - - if (str.match(/\.zip\//)) { - switch (hostInfo) { - // Absolute VSCode `Uri.fsPath`s need to start with a slash. - // VSCode only adds it automatically for supported schemes, - // so we have to do it manually for the `zip` scheme. - // The path needs to start with a caret otherwise VSCode doesn't handle the protocol - // - // Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910 - // - // 2021-10-08: VSCode changed the format in 1.61. - // Before | ^zip:/c:/foo/bar.zip/package.json - // After | ^/zip//c:/foo/bar.zip/package.json - // - // 2022-04-06: VSCode changed the format in 1.66. - // Before | ^/zip//c:/foo/bar.zip/package.json - // After | ^/zip/c:/foo/bar.zip/package.json - // - // 2022-05-06: VSCode changed the format in 1.68 - // Before | ^/zip/c:/foo/bar.zip/package.json - // After | ^/zip//c:/foo/bar.zip/package.json - // - case `vscode <1.61`: { - str = `^zip:${str}`; - } break; - - case `vscode <1.66`: { - str = `^/zip/${str}`; - } break; - - case `vscode <1.68`: { - str = `^/zip${str}`; - } break; - - case `vscode`: { - str = `^/zip/${str}`; - } break; - - // To make "go to definition" work, - // We have to resolve the actual file system path from virtual path - // and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip) - case `coc-nvim`: { - str = normalize(resolved).replace(/\.zip\//, `.zip::`); - str = resolve(`zipfile:${str}`); - } break; - - // Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server) - // We have to resolve the actual file system path from virtual path, - // everything else is up to neovim - case `neovim`: { - str = normalize(resolved).replace(/\.zip\//, `.zip::`); - str = `zipfile://${str}`; - } break; - - default: { - str = `zip:${str}`; - } break; - } - } else { - str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); - } - } - - return str; - } - - function fromEditorPath(str) { - switch (hostInfo) { - case `coc-nvim`: { - str = str.replace(/\.zip::/, `.zip/`); - // The path for coc-nvim is in format of //zipfile://.yarn/... - // So in order to convert it back, we use .* to match all the thing - // before `zipfile:` - return process.platform === `win32` - ? str.replace(/^.*zipfile:\//, ``) - : str.replace(/^.*zipfile:/, ``); - } break; - - case `neovim`: { - str = str.replace(/\.zip::/, `.zip/`); - // The path for neovim is in format of zipfile:////.yarn/... - return str.replace(/^zipfile:\/\//, ``); - } break; - - case `vscode`: - default: { - return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`) - } break; - } - } - - // Force enable 'allowLocalPluginLoads' - // TypeScript tries to resolve plugins using a path relative to itself - // which doesn't work when using the global cache - // https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238 - // VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but - // TypeScript already does local loads and if this code is running the user trusts the workspace - // https://github.com/microsoft/vscode/issues/45856 - const ConfiguredProject = tsserver.server.ConfiguredProject; - const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype; - ConfiguredProject.prototype.enablePluginsWithOptions = function() { - this.projectService.allowLocalPluginLoads = true; - return originalEnablePluginsWithOptions.apply(this, arguments); - }; - - // And here is the point where we hijack the VSCode <-> TS communications - // by adding ourselves in the middle. We locate everything that looks - // like an absolute path of ours and normalize it. - - const Session = tsserver.server.Session; - const {onMessage: originalOnMessage, send: originalSend} = Session.prototype; - let hostInfo = `unknown`; - - Object.assign(Session.prototype, { - onMessage(/** @type {string | object} */ message) { - const isStringMessage = typeof message === 'string'; - const parsedMessage = isStringMessage ? JSON.parse(message) : message; - - if ( - parsedMessage != null && - typeof parsedMessage === `object` && - parsedMessage.arguments && - typeof parsedMessage.arguments.hostInfo === `string` - ) { - hostInfo = parsedMessage.arguments.hostInfo; - if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) { - const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match( - // The RegExp from https://semver.org/ but without the caret at the start - /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ - ) ?? []).map(Number) - - if (major === 1) { - if (minor < 61) { - hostInfo += ` <1.61`; - } else if (minor < 66) { - hostInfo += ` <1.66`; - } else if (minor < 68) { - hostInfo += ` <1.68`; - } - } - } - } - - const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => { - return typeof value === 'string' ? fromEditorPath(value) : value; - }); - - return originalOnMessage.call( - this, - isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON) - ); - }, - - send(/** @type {any} */ msg) { - return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => { - return typeof value === `string` ? toEditorPath(value) : value; - }))); - } - }); - - return tsserver; -}; - -if (existsSync(absPnpApiPath)) { - if (!process.versions.pnp) { - // Setup the environment to be able to require typescript/lib/tsserver.js - require(absPnpApiPath).setup(); - } -} - -// Defer to the real typescript/lib/tsserver.js your application uses -module.exports = moduleWrapper(absRequire(`typescript/lib/tsserver.js`)); diff --git a/.yarn/sdks/typescript/lib/tsserverlibrary.js b/.yarn/sdks/typescript/lib/tsserverlibrary.js deleted file mode 100644 index a68f028fe1971..0000000000000 --- a/.yarn/sdks/typescript/lib/tsserverlibrary.js +++ /dev/null @@ -1,225 +0,0 @@ -#!/usr/bin/env node - -const {existsSync} = require(`fs`); -const {createRequire} = require(`module`); -const {resolve} = require(`path`); - -const relPnpApiPath = "../../../../.pnp.cjs"; - -const absPnpApiPath = resolve(__dirname, relPnpApiPath); -const absRequire = createRequire(absPnpApiPath); - -const moduleWrapper = tsserver => { - if (!process.versions.pnp) { - return tsserver; - } - - const {isAbsolute} = require(`path`); - const pnpApi = require(`pnpapi`); - - const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//); - const isPortal = str => str.startsWith("portal:/"); - const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); - - const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => { - return `${locator.name}@${locator.reference}`; - })); - - // VSCode sends the zip paths to TS using the "zip://" prefix, that TS - // doesn't understand. This layer makes sure to remove the protocol - // before forwarding it to TS, and to add it back on all returned paths. - - function toEditorPath(str) { - // We add the `zip:` prefix to both `.zip/` paths and virtual paths - if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) { - // We also take the opportunity to turn virtual paths into physical ones; - // this makes it much easier to work with workspaces that list peer - // dependencies, since otherwise Ctrl+Click would bring us to the virtual - // file instances instead of the real ones. - // - // We only do this to modules owned by the the dependency tree roots. - // This avoids breaking the resolution when jumping inside a vendor - // with peer dep (otherwise jumping into react-dom would show resolution - // errors on react). - // - const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str; - if (resolved) { - const locator = pnpApi.findPackageLocator(resolved); - if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) { - str = resolved; - } - } - - str = normalize(str); - - if (str.match(/\.zip\//)) { - switch (hostInfo) { - // Absolute VSCode `Uri.fsPath`s need to start with a slash. - // VSCode only adds it automatically for supported schemes, - // so we have to do it manually for the `zip` scheme. - // The path needs to start with a caret otherwise VSCode doesn't handle the protocol - // - // Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910 - // - // 2021-10-08: VSCode changed the format in 1.61. - // Before | ^zip:/c:/foo/bar.zip/package.json - // After | ^/zip//c:/foo/bar.zip/package.json - // - // 2022-04-06: VSCode changed the format in 1.66. - // Before | ^/zip//c:/foo/bar.zip/package.json - // After | ^/zip/c:/foo/bar.zip/package.json - // - // 2022-05-06: VSCode changed the format in 1.68 - // Before | ^/zip/c:/foo/bar.zip/package.json - // After | ^/zip//c:/foo/bar.zip/package.json - // - case `vscode <1.61`: { - str = `^zip:${str}`; - } break; - - case `vscode <1.66`: { - str = `^/zip/${str}`; - } break; - - case `vscode <1.68`: { - str = `^/zip${str}`; - } break; - - case `vscode`: { - str = `^/zip/${str}`; - } break; - - // To make "go to definition" work, - // We have to resolve the actual file system path from virtual path - // and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip) - case `coc-nvim`: { - str = normalize(resolved).replace(/\.zip\//, `.zip::`); - str = resolve(`zipfile:${str}`); - } break; - - // Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server) - // We have to resolve the actual file system path from virtual path, - // everything else is up to neovim - case `neovim`: { - str = normalize(resolved).replace(/\.zip\//, `.zip::`); - str = `zipfile://${str}`; - } break; - - default: { - str = `zip:${str}`; - } break; - } - } else { - str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); - } - } - - return str; - } - - function fromEditorPath(str) { - switch (hostInfo) { - case `coc-nvim`: { - str = str.replace(/\.zip::/, `.zip/`); - // The path for coc-nvim is in format of //zipfile://.yarn/... - // So in order to convert it back, we use .* to match all the thing - // before `zipfile:` - return process.platform === `win32` - ? str.replace(/^.*zipfile:\//, ``) - : str.replace(/^.*zipfile:/, ``); - } break; - - case `neovim`: { - str = str.replace(/\.zip::/, `.zip/`); - // The path for neovim is in format of zipfile:////.yarn/... - return str.replace(/^zipfile:\/\//, ``); - } break; - - case `vscode`: - default: { - return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`) - } break; - } - } - - // Force enable 'allowLocalPluginLoads' - // TypeScript tries to resolve plugins using a path relative to itself - // which doesn't work when using the global cache - // https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238 - // VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but - // TypeScript already does local loads and if this code is running the user trusts the workspace - // https://github.com/microsoft/vscode/issues/45856 - const ConfiguredProject = tsserver.server.ConfiguredProject; - const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype; - ConfiguredProject.prototype.enablePluginsWithOptions = function() { - this.projectService.allowLocalPluginLoads = true; - return originalEnablePluginsWithOptions.apply(this, arguments); - }; - - // And here is the point where we hijack the VSCode <-> TS communications - // by adding ourselves in the middle. We locate everything that looks - // like an absolute path of ours and normalize it. - - const Session = tsserver.server.Session; - const {onMessage: originalOnMessage, send: originalSend} = Session.prototype; - let hostInfo = `unknown`; - - Object.assign(Session.prototype, { - onMessage(/** @type {string | object} */ message) { - const isStringMessage = typeof message === 'string'; - const parsedMessage = isStringMessage ? JSON.parse(message) : message; - - if ( - parsedMessage != null && - typeof parsedMessage === `object` && - parsedMessage.arguments && - typeof parsedMessage.arguments.hostInfo === `string` - ) { - hostInfo = parsedMessage.arguments.hostInfo; - if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) { - const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match( - // The RegExp from https://semver.org/ but without the caret at the start - /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ - ) ?? []).map(Number) - - if (major === 1) { - if (minor < 61) { - hostInfo += ` <1.61`; - } else if (minor < 66) { - hostInfo += ` <1.66`; - } else if (minor < 68) { - hostInfo += ` <1.68`; - } - } - } - } - - const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => { - return typeof value === 'string' ? fromEditorPath(value) : value; - }); - - return originalOnMessage.call( - this, - isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON) - ); - }, - - send(/** @type {any} */ msg) { - return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => { - return typeof value === `string` ? toEditorPath(value) : value; - }))); - } - }); - - return tsserver; -}; - -if (existsSync(absPnpApiPath)) { - if (!process.versions.pnp) { - // Setup the environment to be able to require typescript/lib/tsserverlibrary.js - require(absPnpApiPath).setup(); - } -} - -// Defer to the real typescript/lib/tsserverlibrary.js your application uses -module.exports = moduleWrapper(absRequire(`typescript/lib/tsserverlibrary.js`)); diff --git a/.yarn/sdks/typescript/lib/typescript.js b/.yarn/sdks/typescript/lib/typescript.js deleted file mode 100644 index b5f4db25bee67..0000000000000 --- a/.yarn/sdks/typescript/lib/typescript.js +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env node - -const {existsSync} = require(`fs`); -const {createRequire} = require(`module`); -const {resolve} = require(`path`); - -const relPnpApiPath = "../../../../.pnp.cjs"; - -const absPnpApiPath = resolve(__dirname, relPnpApiPath); -const absRequire = createRequire(absPnpApiPath); - -if (existsSync(absPnpApiPath)) { - if (!process.versions.pnp) { - // Setup the environment to be able to require typescript - require(absPnpApiPath).setup(); - } -} - -// Defer to the real typescript your application uses -module.exports = absRequire(`typescript`); diff --git a/.yarn/sdks/typescript/package.json b/.yarn/sdks/typescript/package.json deleted file mode 100644 index d32f3913d7958..0000000000000 --- a/.yarn/sdks/typescript/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "typescript", - "version": "5.2.2-sdk", - "main": "./lib/typescript.js", - "type": "commonjs", - "bin": { - "tsc": "./bin/tsc", - "tsserver": "./bin/tsserver" - } -} diff --git a/.yarnrc.yml b/.yarnrc.yml index affb1c6d2fe9c..4f0f49b98d0a8 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -4,12 +4,15 @@ enableGlobalCache: false enableTelemetry: false -nodeLinker: pnp +nodeLinker: node-modules packageExtensions: - "@storybook/core-common@7.4.5": + '@storybook/core-common@7.4.5': dependencies: '@storybook/react-webpack5': 7.4.5 + 'croact-css-styled@1.1.9': + dependencies: + croact: 1.0.4 doctrine@3.0.0: dependencies: assert: 2.0.0 @@ -26,16 +29,20 @@ packageExtensions: react-simple-compat: 1.2.2 react-icons@2.2.7: peerDependencies: - prop-types: "*" + prop-types: '*' react-resizable@3.0.4: peerDependencies: react-dom: 17.0.1 + '@msagl/drawing@*': + dependencies: + queue-typescript: "^1.0.1" + "@esfx/collections-sortedmap": "^1.0.0" plugins: - path: .yarn/plugins/@yarnpkg/plugin-outdated.cjs - spec: "https://mskelton.dev/yarn-outdated/v2" + spec: 'https://mskelton.dev/yarn-outdated/v2' -yarnPath: .yarn/releases/yarn-4.0.0.cjs +yarnPath: .yarn/releases/yarn-4.1.0.cjs # Uncomment the following lines if you want to use Verdaccio local npm registry. Read more at packages/README.md # npmScopes: # grafana: diff --git a/CHANGELOG.md b/CHANGELOG.md index 58412f83ff04b..9482a70d17aaf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,403 @@ + + +# 10.4.0 (2024-03-06) + +### Features and enhancements + +- **AuthToken:** Remove client token rotation feature toggle. [#82886](https://github.com/grafana/grafana/issues/82886), [@kalleep](https://github.com/kalleep) +- **Plugins:** Enable feature toggle angularDeprecationUI by default. [#82880](https://github.com/grafana/grafana/issues/82880), [@xnyo](https://github.com/xnyo) +- **Table Component:** Improve text-wrapping behavior of cells. [#82872](https://github.com/grafana/grafana/issues/82872), [@ahuarte47](https://github.com/ahuarte47) +- **Alerting:** Dry-run legacy upgrade on startup. [#82835](https://github.com/grafana/grafana/issues/82835), [@JacobsonMT](https://github.com/JacobsonMT) +- **Tempo:** Upgrade @grafana/lezer-traceql patch version to use trace metrics syntax. [#82532](https://github.com/grafana/grafana/issues/82532), [@joey-grafana](https://github.com/joey-grafana) +- **Logs Panel:** Add CSV to download options. [#82480](https://github.com/grafana/grafana/issues/82480), [@gtk-grafana](https://github.com/gtk-grafana) +- **Folders:** Switch order of the columns in folder table indexes so that org_id becomes first. [#82454](https://github.com/grafana/grafana/issues/82454), [@papagian](https://github.com/papagian) +- **Logs panel:** Table UI - Guess string field types. [#82397](https://github.com/grafana/grafana/issues/82397), [@gtk-grafana](https://github.com/gtk-grafana) +- **Alerting:** Send alerts to APIv2 when using the Alertmanager contact point. [#82373](https://github.com/grafana/grafana/issues/82373), [@grobinson-grafana](https://github.com/grobinson-grafana) +- **Alerting:** Emit warning when creating or updating unusually large groups. [#82279](https://github.com/grafana/grafana/issues/82279), [@alexweav](https://github.com/alexweav) +- **Keybindings:** Change 'h' to 'mod+h' to open help modal. [#82253](https://github.com/grafana/grafana/issues/82253), [@tskarhed](https://github.com/tskarhed) +- **Chore:** Update arrow and prometheus dependencies. [#82215](https://github.com/grafana/grafana/issues/82215), [@ryantxu](https://github.com/ryantxu) +- **Alerting:** Enable group-level rule evaluation jittering by default, remove feature toggle. [#82212](https://github.com/grafana/grafana/issues/82212), [@alexweav](https://github.com/alexweav) +- **Loki Log Context:** Always show label filters with at least one parsed label. [#82211](https://github.com/grafana/grafana/issues/82211), [@svennergr](https://github.com/svennergr) +- **Logs Panel:** Table UI - better default column spacing. [#82205](https://github.com/grafana/grafana/issues/82205), [@gtk-grafana](https://github.com/gtk-grafana) +- **RBAC:** Migration to remove the scope from permissions where action is alert.instances:read. [#82202](https://github.com/grafana/grafana/issues/82202), [@IevaVasiljeva](https://github.com/IevaVasiljeva) +- **JWT Authentication:** Add support for specifying groups in auth.jwt for teamsync. [#82175](https://github.com/grafana/grafana/issues/82175), [@Jguer](https://github.com/Jguer) +- **Alerting:** GA alertingPreviewUpgrade and enable by default. [#82038](https://github.com/grafana/grafana/issues/82038), [@JacobsonMT](https://github.com/JacobsonMT) +- **Elasticsearch:** Apply ad-hoc filters to annotation queries. [#82032](https://github.com/grafana/grafana/issues/82032), [@mikelv92](https://github.com/mikelv92) +- **Alerting:** Show legacy provisioned alert rules warning. [#81902](https://github.com/grafana/grafana/issues/81902), [@gillesdemey](https://github.com/gillesdemey) +- **Tempo:** Support TraceQL metrics queries. [#81886](https://github.com/grafana/grafana/issues/81886), [@adrapereira](https://github.com/adrapereira) +- **Tempo:** Support backtick strings. [#81802](https://github.com/grafana/grafana/issues/81802), [@fabrizio-grafana](https://github.com/fabrizio-grafana) +- **Dashboards:** Remove `advancedDataSourcePicker` feature toggle. [#81790](https://github.com/grafana/grafana/issues/81790), [@Sergej-Vlasov](https://github.com/Sergej-Vlasov) +- **CloudWatch:** Remove references to pkg/infra/metrics. [#81744](https://github.com/grafana/grafana/issues/81744), [@iwysiu](https://github.com/iwysiu) +- **Licensing:** Redact license when overriden by env variable. [#81726](https://github.com/grafana/grafana/issues/81726), [@leandro-deveikis](https://github.com/leandro-deveikis) +- **Explore:** Disable cursor sync. [#81698](https://github.com/grafana/grafana/issues/81698), [@ifrost](https://github.com/ifrost) +- **Tempo:** Add custom headers middleware for grpc client. [#81693](https://github.com/grafana/grafana/issues/81693), [@aocenas](https://github.com/aocenas) +- **Chore:** Update test database initialization. [#81673](https://github.com/grafana/grafana/issues/81673), [@DanCech](https://github.com/DanCech) +- **Elasticsearch:** Implement CheckHealth method in the backend. [#81671](https://github.com/grafana/grafana/issues/81671), [@mikelv92](https://github.com/mikelv92) +- **Tooltips:** Hide dimension configuration when tooltip mode is hidden. [#81627](https://github.com/grafana/grafana/issues/81627), [@codeincarnate](https://github.com/codeincarnate) +- **Alerting:** Show warning when cp does not exist and invalidate the form. [#81621](https://github.com/grafana/grafana/issues/81621), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **User:** Add uid colum to user table. [#81615](https://github.com/grafana/grafana/issues/81615), [@ryantxu](https://github.com/ryantxu) +- **Cloudwatch:** Remove core imports from infra/log. [#81543](https://github.com/grafana/grafana/issues/81543), [@njvrzm](https://github.com/njvrzm) +- **Alerting:** Add pagination and improved search for notification policies. [#81535](https://github.com/grafana/grafana/issues/81535), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Alerting:** Move action buttons in the alert list view. [#81341](https://github.com/grafana/grafana/issues/81341), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Grafana/ui:** Add deprecation notices to the legacy layout components. [#81328](https://github.com/grafana/grafana/issues/81328), [@Clarity-89](https://github.com/Clarity-89) +- **Cloudwatch:** Deprecate cloudwatchNewRegionsHandler feature toggle and remove core imports from featuremgmt. [#81310](https://github.com/grafana/grafana/issues/81310), [@njvrzm](https://github.com/njvrzm) +- **Candlestick:** Add tooltip options. [#81307](https://github.com/grafana/grafana/issues/81307), [@adela-almasan](https://github.com/adela-almasan) +- **Folders:** Forbid performing operations on folders via dashboards HTTP API. [#81264](https://github.com/grafana/grafana/issues/81264), [@undef1nd](https://github.com/undef1nd) +- **Feature Management:** Move awsDatasourcesNewFormStyling to Public Preview. [#81257](https://github.com/grafana/grafana/issues/81257), [@idastambuk](https://github.com/idastambuk) +- **Alerting:** Update API to use folders' full paths. [#81214](https://github.com/grafana/grafana/issues/81214), [@yuri-tceretian](https://github.com/yuri-tceretian) +- **Datasources:** Add concurrency number to the settings. [#81212](https://github.com/grafana/grafana/issues/81212), [@itsmylife](https://github.com/itsmylife) +- **CloudWatch:** Remove dependencies on grafana/pkg/setting. [#81208](https://github.com/grafana/grafana/issues/81208), [@iwysiu](https://github.com/iwysiu) +- **Logs:** Table UI - Allow users to resize field selection section. [#81201](https://github.com/grafana/grafana/issues/81201), [@gtk-grafana](https://github.com/gtk-grafana) +- **Dashboards:** Remove emptyDashboardPage feature flag. [#81188](https://github.com/grafana/grafana/issues/81188), [@Sergej-Vlasov](https://github.com/Sergej-Vlasov) +- **Cloudwatch:** Import httpClient from grafana-plugin-sdk-go instead of grafana/infra. [#81187](https://github.com/grafana/grafana/issues/81187), [@idastambuk](https://github.com/idastambuk) +- **Logs:** Table UI - Enable feature flag by default (GA). [#81185](https://github.com/grafana/grafana/issues/81185), [@gtk-grafana](https://github.com/gtk-grafana) +- **Tempo:** Improve tags UX. [#81166](https://github.com/grafana/grafana/issues/81166), [@joey-grafana](https://github.com/joey-grafana) +- **Table:** Cell inspector auto-detecting JSON. [#81152](https://github.com/grafana/grafana/issues/81152), [@gtk-grafana](https://github.com/gtk-grafana) +- **Grafana/ui:** Add Space component. [#81145](https://github.com/grafana/grafana/issues/81145), [@Clarity-89](https://github.com/Clarity-89) +- **Grafana/ui:** Add deprecation notice to the Form component. [#81068](https://github.com/grafana/grafana/issues/81068), [@Clarity-89](https://github.com/Clarity-89) +- **Alerting:** Swap order between Annotations and Labels step in the alert rule form. [#81060](https://github.com/grafana/grafana/issues/81060), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Plugins:** Change managedPluginsInstall to public preview. [#81053](https://github.com/grafana/grafana/issues/81053), [@oshirohugo](https://github.com/oshirohugo) +- **Tempo:** Add span, trace vars to trace to metrics interpolation. [#81046](https://github.com/grafana/grafana/issues/81046), [@joey-grafana](https://github.com/joey-grafana) +- **Tempo:** Support multiple filter expressions for service graph queries. [#81037](https://github.com/grafana/grafana/issues/81037), [@domasx2](https://github.com/domasx2) +- **Alerting:** Support for simplified notification settings in rule API. [#81011](https://github.com/grafana/grafana/issues/81011), [@yuri-tceretian](https://github.com/yuri-tceretian) +- **Plugins:** Add fuzzy search to plugins catalogue. [#81001](https://github.com/grafana/grafana/issues/81001), [@Ukochka](https://github.com/Ukochka) +- **CloudWatch:** Only override contextDialer when using PDC. [#80992](https://github.com/grafana/grafana/issues/80992), [@leandro-deveikis](https://github.com/leandro-deveikis) +- **Alerting:** Add a feature flag to periodically save states. [#80987](https://github.com/grafana/grafana/issues/80987), [@JohnnyQQQQ](https://github.com/JohnnyQQQQ) +- **RBAC:** Return the underlying error instead of internal server or bad request for managed permission endpoints. [#80974](https://github.com/grafana/grafana/issues/80974), [@IevaVasiljeva](https://github.com/IevaVasiljeva) +- **Correlations:** Enable correlations feature toggle by default. [#80881](https://github.com/grafana/grafana/issues/80881), [@ifrost](https://github.com/ifrost) +- **Transformations:** Focus search input on drawer open. [#80859](https://github.com/grafana/grafana/issues/80859), [@codeincarnate](https://github.com/codeincarnate) +- **Packaging:** Use the GRAFANA_HOME variable in postinst script on Debian. [#80853](https://github.com/grafana/grafana/issues/80853), [@denisse-dev](https://github.com/denisse-dev) +- **Visualizations:** Hue gradient mode now applies to the line color . [#80805](https://github.com/grafana/grafana/issues/80805), [@torkelo](https://github.com/torkelo) +- **Drawer:** Resizable via draggable edge . [#80796](https://github.com/grafana/grafana/issues/80796), [@torkelo](https://github.com/torkelo) +- **Alerting:** Add setting to distribute rule group evaluations over time. [#80766](https://github.com/grafana/grafana/issues/80766), [@alexweav](https://github.com/alexweav) +- **Logs Panel:** Permalink (copy shortlink). [#80764](https://github.com/grafana/grafana/issues/80764), [@gtk-grafana](https://github.com/gtk-grafana) +- **VizTooltips:** Copy to clipboard functionality. [#80761](https://github.com/grafana/grafana/issues/80761), [@adela-almasan](https://github.com/adela-almasan) +- **AuthN:** Support reloading SSO config after the sso settings have changed. [#80734](https://github.com/grafana/grafana/issues/80734), [@mgyongyosi](https://github.com/mgyongyosi) +- **Logs Panel:** Add total count to logs volume panel in explore. [#80730](https://github.com/grafana/grafana/issues/80730), [@gtk-grafana](https://github.com/gtk-grafana) +- **Caching:** Remove useCachingService feature toggle. [#80695](https://github.com/grafana/grafana/issues/80695), [@mmandrus](https://github.com/mmandrus) +- **Table:** Support showing data links inline. . [#80691](https://github.com/grafana/grafana/issues/80691), [@ryantxu](https://github.com/ryantxu) +- **Storage:** Add support for sortBy selector. [#80680](https://github.com/grafana/grafana/issues/80680), [@DanCech](https://github.com/DanCech) +- **Alerting:** Add metric counting rule groups per org. [#80669](https://github.com/grafana/grafana/issues/80669), [@alexweav](https://github.com/alexweav) +- **RBAC:** Cover plugin routes. [#80578](https://github.com/grafana/grafana/issues/80578), [@gamab](https://github.com/gamab) +- **Profiling:** Import godeltaprof/http/pprof. [#80509](https://github.com/grafana/grafana/issues/80509), [@korniltsev](https://github.com/korniltsev) +- **Tempo:** Add warning message when scope missing in TraceQL. [#80472](https://github.com/grafana/grafana/issues/80472), [@joey-grafana](https://github.com/joey-grafana) +- **Cloudwatch:** Move getNextRefIdChar util from app/core/utils to @grafana/data. [#80471](https://github.com/grafana/grafana/issues/80471), [@idastambuk](https://github.com/idastambuk) +- **DataFrame:** Add optional unique id definition. [#80428](https://github.com/grafana/grafana/issues/80428), [@aocenas](https://github.com/aocenas) +- **Canvas:** Add element snapping and alignment. [#80407](https://github.com/grafana/grafana/issues/80407), [@nmarrs](https://github.com/nmarrs) +- **Logs:** Add show context to dashboard panel. [#80403](https://github.com/grafana/grafana/issues/80403), [@svennergr](https://github.com/svennergr) +- **Canvas:** Support context menu in panel edit mode. [#80335](https://github.com/grafana/grafana/issues/80335), [@nmarrs](https://github.com/nmarrs) +- **VizTooltip:** Add sizing options. [#80306](https://github.com/grafana/grafana/issues/80306), [@Develer](https://github.com/Develer) +- **Plugins:** Parse defaultValues correctly for nested options. [#80302](https://github.com/grafana/grafana/issues/80302), [@oshirohugo](https://github.com/oshirohugo) +- **Geomap:** Support geojson styling properties. [#80272](https://github.com/grafana/grafana/issues/80272), [@drew08t](https://github.com/drew08t) +- **Runtime:** Add property for disabling caching. [#80245](https://github.com/grafana/grafana/issues/80245), [@aangelisc](https://github.com/aangelisc) +- **Alerting:** Log scheduler maxAttempts, guard against invalid retry counts, log retry errors. [#80234](https://github.com/grafana/grafana/issues/80234), [@alexweav](https://github.com/alexweav) +- **Alerting:** Improve integration with dashboards. [#80201](https://github.com/grafana/grafana/issues/80201), [@konrad147](https://github.com/konrad147) +- **Transformations:** Use an explicit join seperator when converting from an array to string field. [#80169](https://github.com/grafana/grafana/issues/80169), [@ryantxu](https://github.com/ryantxu) +- **Build:** Update plugin IDs list in build and release process. [#80160](https://github.com/grafana/grafana/issues/80160), [@fabrizio-grafana](https://github.com/fabrizio-grafana) +- **NestedFolders:** Support Shared with me folder for showing items you've been granted access to. [#80141](https://github.com/grafana/grafana/issues/80141), [@joshhunt](https://github.com/joshhunt) +- **Log Context:** Add highlighted words to log rows. [#80119](https://github.com/grafana/grafana/issues/80119), [@svennergr](https://github.com/svennergr) +- **Tempo:** Add `}` when `{` is inserted automatically. [#80113](https://github.com/grafana/grafana/issues/80113), [@harrymaurya05](https://github.com/harrymaurya05) +- **Time Range:** Copy-paste Time Range. [#80107](https://github.com/grafana/grafana/issues/80107), [@harisrozajac](https://github.com/harisrozajac) +- **PanelContext:** Remove deprecated onSplitOpen. [#80087](https://github.com/grafana/grafana/issues/80087), [@harisrozajac](https://github.com/harisrozajac) +- **Docs:** Add HAProxy rewrite information considering `serve_from_sub_path` setting. [#80062](https://github.com/grafana/grafana/issues/80062), [@simPod](https://github.com/simPod) +- **Table:** Keep expanded rows persistent when data changes if it has unique ID. [#80031](https://github.com/grafana/grafana/issues/80031), [@aocenas](https://github.com/aocenas) +- **SSO Config:** Add generic OAuth. [#79972](https://github.com/grafana/grafana/issues/79972), [@Clarity-89](https://github.com/Clarity-89) +- **FeatureFlags:** Remove the unsupported/undocumented option to read flags from a file. [#79959](https://github.com/grafana/grafana/issues/79959), [@ryantxu](https://github.com/ryantxu) +- **Transformations:** Add Group to Nested Tables Transformation. [#79952](https://github.com/grafana/grafana/issues/79952), [@codeincarnate](https://github.com/codeincarnate) +- **Cloudwatch Metrics:** Adjust error handling. [#79911](https://github.com/grafana/grafana/issues/79911), [@idastambuk](https://github.com/idastambuk) +- **Tempo:** Decouple Tempo from Grafana core. [#79888](https://github.com/grafana/grafana/issues/79888), [@fabrizio-grafana](https://github.com/fabrizio-grafana) +- **Table Panel:** Filter column values with operators or expressions. [#79853](https://github.com/grafana/grafana/issues/79853), [@ahuarte47](https://github.com/ahuarte47) +- **Chore:** Generate shorter UIDs. [#79843](https://github.com/grafana/grafana/issues/79843), [@ryantxu](https://github.com/ryantxu) +- **Alerting:** MuteTiming service return errutil + GetTiming by name. [#79772](https://github.com/grafana/grafana/issues/79772), [@yuri-tceretian](https://github.com/yuri-tceretian) +- **Azure Monitor:** Add select all subscription option for ARG queries. [#79582](https://github.com/grafana/grafana/issues/79582), [@alyssabull](https://github.com/alyssabull) +- **Alerting:** Enable sending notifications to a specific topic on Telegram. [#79546](https://github.com/grafana/grafana/issues/79546), [@th0th](https://github.com/th0th) +- **Logs Panel:** Table UI - Reordering table columns via drag-and-drop. [#79536](https://github.com/grafana/grafana/issues/79536), [@gtk-grafana](https://github.com/gtk-grafana) +- **Cloudwatch:** Add AWS/EMRServerless and AWS/KafkaConnect Metrics . [#79532](https://github.com/grafana/grafana/issues/79532), [@DugeraProve](https://github.com/DugeraProve) +- **Transformations:** Move transformation help to drawer component. [#79247](https://github.com/grafana/grafana/issues/79247), [@codeincarnate](https://github.com/codeincarnate) +- **Stat:** Support no value in spark line. [#78986](https://github.com/grafana/grafana/issues/78986), [@FOWind](https://github.com/FOWind) +- **NodeGraph:** Use layered layout instead of force based layout. [#78957](https://github.com/grafana/grafana/issues/78957), [@aocenas](https://github.com/aocenas) +- **Alerting:** Create alertingQueryOptimization feature flag for alert query optimization. [#78932](https://github.com/grafana/grafana/issues/78932), [@JacobsonMT](https://github.com/JacobsonMT) +- **Dashboard:** New EmbeddedDashboard runtime component . [#78916](https://github.com/grafana/grafana/issues/78916), [@torkelo](https://github.com/torkelo) +- **Alerting:** Show warning when query optimized. [#78751](https://github.com/grafana/grafana/issues/78751), [@JacobsonMT](https://github.com/JacobsonMT) +- **Alerting:** Add support for TTL for pushover for Mimir Alertmanager. [#78687](https://github.com/grafana/grafana/issues/78687), [@gillesdemey](https://github.com/gillesdemey) +- **Grafana/ui:** Enable removing values in multiselect opened state. [#78662](https://github.com/grafana/grafana/issues/78662), [@FOWind](https://github.com/FOWind) +- **SQL datasources:** Consistent interval handling. [#78517](https://github.com/grafana/grafana/issues/78517), [@gabor](https://github.com/gabor) +- **Alerting:** During legacy migration reduce the number of created silences. [#78505](https://github.com/grafana/grafana/issues/78505), [@JacobsonMT](https://github.com/JacobsonMT) +- **UI:** New share button and toolbar reorganize. [#77563](https://github.com/grafana/grafana/issues/77563), [@evictorero](https://github.com/evictorero) +- **Alerting:** Update rule API to address folders by UID. [#74600](https://github.com/grafana/grafana/issues/74600), [@papagian](https://github.com/papagian) +- **Reports:** Add uid column to the database. (Enterprise) +- **Plugins:** Add metrics for cloud plugin install. (Enterprise) +- **RBAC:** Make seeding resilient to failed plugin loading. (Enterprise) +- **Plugins:** Support disabling caching at a plugin instance level. (Enterprise) + +### Bug fixes + +- **Auth:** Fix email verification bypass when using basic authentication. [#82914](https://github.com/grafana/grafana/issues/82914), [@volcanonoodle](https://github.com/volcanonoodle) +- **LibraryPanels/RBAC:** Fix issue where folder scopes weren't being correctly inherited. [#82700](https://github.com/grafana/grafana/issues/82700), [@kaydelaney](https://github.com/kaydelaney) +- **Table Panel:** Fix display of ad-hoc filter actions. [#82442](https://github.com/grafana/grafana/issues/82442), [@codeincarnate](https://github.com/codeincarnate) +- **Loki:** Update `@grafana/lezer-logql` to `0.2.3` containing fix for ip label name. [#82378](https://github.com/grafana/grafana/issues/82378), [@ivanahuckova](https://github.com/ivanahuckova) +- **Alerting:** Fix slack double pound and email summary. [#82333](https://github.com/grafana/grafana/issues/82333), [@gillesdemey](https://github.com/gillesdemey) +- **Elasticsearch:** Fix resource calls for paths that include `:`. [#82327](https://github.com/grafana/grafana/issues/82327), [@ivanahuckova](https://github.com/ivanahuckova) +- **Alerting:** Return provenance of notification templates. [#82274](https://github.com/grafana/grafana/issues/82274), [@julienduchesne](https://github.com/julienduchesne) +- **LibraryPanels:** Fix issue with repeated library panels. [#82255](https://github.com/grafana/grafana/issues/82255), [@kaydelaney](https://github.com/kaydelaney) +- **Loki:** Fix fetching of values for label if no previous equality operator. [#82251](https://github.com/grafana/grafana/issues/82251), [@ivanahuckova](https://github.com/ivanahuckova) +- **Alerting:** Fix data races and improve testing. [#81994](https://github.com/grafana/grafana/issues/81994), [@diegommm](https://github.com/diegommm) +- **chore:** Fix typo in GraphTresholdsStyleMode enum. [#81960](https://github.com/grafana/grafana/issues/81960), [@paulJonesCalian](https://github.com/paulJonesCalian) +- **CloudWatch:** Fix code editor not resizing on mount when content height is > 200px. [#81911](https://github.com/grafana/grafana/issues/81911), [@kevinwcyu](https://github.com/kevinwcyu) +- **FieldOptions:** Revert scalable unit option as we already support this via custom prefix/suffixes . [#81893](https://github.com/grafana/grafana/issues/81893), [@torkelo](https://github.com/torkelo) +- **Browse Dashboards:** Imported dashboards now display immediately in the dashboard list. [#81819](https://github.com/grafana/grafana/issues/81819), [@ashharrison90](https://github.com/ashharrison90) +- **Elasticsearch:** Set middlewares from Grafana's `httpClientProvider`. [#81814](https://github.com/grafana/grafana/issues/81814), [@svennergr](https://github.com/svennergr) +- **Folders:** Fix failure to update folder in SQLite. [#81795](https://github.com/grafana/grafana/issues/81795), [@papagian](https://github.com/papagian) +- **Plugins:** Never disable add new data source for core plugins. [#81774](https://github.com/grafana/grafana/issues/81774), [@oshirohugo](https://github.com/oshirohugo) +- **Alerting:** Fixes for pending period. [#81718](https://github.com/grafana/grafana/issues/81718), [@gillesdemey](https://github.com/gillesdemey) +- **Alerting:** Fix editing group of nested folder. [#81665](https://github.com/grafana/grafana/issues/81665), [@gillesdemey](https://github.com/gillesdemey) +- **Plugins:** Don't auto prepend app sub url to plugin asset paths. [#81658](https://github.com/grafana/grafana/issues/81658), [@wbrowne](https://github.com/wbrowne) +- **Alerting:** Fix inconsistent AM raw config when applied via sync vs API. [#81655](https://github.com/grafana/grafana/issues/81655), [@JacobsonMT](https://github.com/JacobsonMT) +- **Alerting:** Fix support check for export with modifications. [#81602](https://github.com/grafana/grafana/issues/81602), [@gillesdemey](https://github.com/gillesdemey) +- **Alerting:** Fix selecting empty contact point value for notification policy inheritance. [#81482](https://github.com/grafana/grafana/issues/81482), [@gillesdemey](https://github.com/gillesdemey) +- **Alerting:** Fix child provisioned polices not being rendered as provisioned. [#81449](https://github.com/grafana/grafana/issues/81449), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Tempo:** Fix durations in TraceQL. [#81418](https://github.com/grafana/grafana/issues/81418), [@fabrizio-grafana](https://github.com/fabrizio-grafana) +- **Logs:** Fix toggleable filters to be applied for specified query. [#81368](https://github.com/grafana/grafana/issues/81368), [@ivanahuckova](https://github.com/ivanahuckova) +- **Loki:** Fix label not being added to all subexpressions. [#81360](https://github.com/grafana/grafana/issues/81360), [@svennergr](https://github.com/svennergr) +- **Loki/Elastic:** Assert queryfix value to always be string. [#81349](https://github.com/grafana/grafana/issues/81349), [@svennergr](https://github.com/svennergr) +- **Tempo:** Add query ref in the query editor. [#81343](https://github.com/grafana/grafana/issues/81343), [@joey-grafana](https://github.com/joey-grafana) +- **Transformations:** Use the display name of the original y field for the predicted field of the regression analysis transformation. [#81332](https://github.com/grafana/grafana/issues/81332), [@oscarkilhed](https://github.com/oscarkilhed) +- **Field:** Fix perf regression in getUniqueFieldName(). [#81323](https://github.com/grafana/grafana/issues/81323), [@leeoniya](https://github.com/leeoniya) +- **Alerting:** Fix scheduler to group folders by the unique key (orgID and UID). [#81303](https://github.com/grafana/grafana/issues/81303), [@yuri-tceretian](https://github.com/yuri-tceretian) +- **Alerting:** Fix migration edge-case race condition for silences. [#81206](https://github.com/grafana/grafana/issues/81206), [@JacobsonMT](https://github.com/JacobsonMT) +- **Explore:** Set default time range to now-1h. [#81135](https://github.com/grafana/grafana/issues/81135), [@ifrost](https://github.com/ifrost) +- **Elasticsearch:** Fix URL creation and allowlist for `/_mapping` requests. [#80970](https://github.com/grafana/grafana/issues/80970), [@svennergr](https://github.com/svennergr) +- **Postgres:** Handle single quotes in table names in the query editor. [#80951](https://github.com/grafana/grafana/issues/80951), [@gabor](https://github.com/gabor) +- **Folders:** Fix creating/updating a folder whose title has leading and trailing spaces. [#80909](https://github.com/grafana/grafana/issues/80909), [@papagian](https://github.com/papagian) +- **Loki:** Fix missing timerange in query builder values request. [#80829](https://github.com/grafana/grafana/issues/80829), [@svennergr](https://github.com/svennergr) +- **Elasticsearch:** Fix showing of logs when `__source` is log message field. [#80804](https://github.com/grafana/grafana/issues/80804), [@ivanahuckova](https://github.com/ivanahuckova) +- **Pyroscope:** Fix stale value for query in query editor. [#80753](https://github.com/grafana/grafana/issues/80753), [@joey-grafana](https://github.com/joey-grafana) +- **Stat:** Fix data links that refer to fields. [#80693](https://github.com/grafana/grafana/issues/80693), [@ajwerner](https://github.com/ajwerner) +- **RBAC:** Clean up data source permissions after data source deletion. [#80654](https://github.com/grafana/grafana/issues/80654), [@IevaVasiljeva](https://github.com/IevaVasiljeva) +- **Alerting:** Fix MuteTiming Get API to return provenance status. [#80494](https://github.com/grafana/grafana/issues/80494), [@yuri-tceretian](https://github.com/yuri-tceretian) +- **Tempo:** Fix regression caused by #79938. [#80465](https://github.com/grafana/grafana/issues/80465), [@fabrizio-grafana](https://github.com/fabrizio-grafana) +- **Alerting:** Fix preview getting the correct queries from the form. [#80458](https://github.com/grafana/grafana/issues/80458), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Alerting:** Fix firing alerts title when showing active in Insights panel. [#80414](https://github.com/grafana/grafana/issues/80414), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Postgres:** Fix enabling the socks proxy. [#80361](https://github.com/grafana/grafana/issues/80361), [@gabor](https://github.com/gabor) +- **Alerting:** Fix group filter. [#80358](https://github.com/grafana/grafana/issues/80358), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Alerting:** Increase size of kvstore value type for MySQL to LONGTEXT. [#80331](https://github.com/grafana/grafana/issues/80331), [@JacobsonMT](https://github.com/JacobsonMT) +- **Annotations:** Split cleanup into separate queries and deletes to avoid deadlocks on MySQL. [#80329](https://github.com/grafana/grafana/issues/80329), [@alexweav](https://github.com/alexweav) +- **Loki:** Fix bug duplicating parsed labels across multiple log lines. [#80292](https://github.com/grafana/grafana/issues/80292), [@svennergr](https://github.com/svennergr) +- **Alerting:** Fix NoData & Error alerts not resolving when rule is reset. [#80184](https://github.com/grafana/grafana/issues/80184), [@JacobsonMT](https://github.com/JacobsonMT) +- **Loki:** Fix metric time splitting to split starting with the start time. [#80085](https://github.com/grafana/grafana/issues/80085), [@svennergr](https://github.com/svennergr) +- **Rendering:** Fix streaming panels always reaching timeout. [#80022](https://github.com/grafana/grafana/issues/80022), [@AgnesToulet](https://github.com/AgnesToulet) +- **Plugins:** Fix colon in CallResource URL returning an error when creating plugin resource request. [#79746](https://github.com/grafana/grafana/issues/79746), [@GiedriusS](https://github.com/GiedriusS) +- **PDF:** Fix initialization when SMTP is disabled. (Enterprise) +- **PDF:** Fix repeated panels placement issue. (Enterprise) +- **Report CSV:** Fix timeout with streaming panels. (Enterprise) +- **RBAC:** Avoid repopulating removed basic role permissions if the permission scope has changed. (Enterprise) + +### Breaking changes + +We're adding a between the response of the ID token HD parameter and the list of allowed domains. This feature can be disabled through the configuration toggle `validate_hd `. Anyone using the legacy Google OAuth configuration should disable this validation if the ID Token response doesn't have the HD parameter. Issue [#83726](https://github.com/grafana/grafana/issues/83726) + +If you use an automated provisioning (eg, Terraform) for custom roles, and have provisioned a role that includes permission with action `alert.instances:read` and some scope, you will need to update the permission in your provisioning files by removing the scope. Issue [#82202](https://github.com/grafana/grafana/issues/82202) + +**The following breaking change occurs only when feature flag `nestedFolders` is enabled.** +If the folder title contains the symbol `/` (forward-slash) the notifications created from the rules that are placed in that folder will contain an escape sequence for that symbol in the label `grafana_folder`. +For example, the folder title is `Grafana / Folder`. Currently the label `grafana_folder` will contain the title as it is. If PR is merged - the label value will be `Grafana \/ Folder`. +This can break notifications if notification policies have matches that match that label and folder. Issue [#81214](https://github.com/grafana/grafana/issues/81214) + +`PanelContext.onSplitOpen` is removed. In the context of Explore, plugins should use `field.getLinks` to get a list of data link models. Issue [#80087](https://github.com/grafana/grafana/issues/80087) + +The unstable alert rule API has been changed and now expects a folder UID instead of the folder title as namespace path parameter. +I addition to this, the responses that used to return the folder title now return `/` to uniquely identify them. +Any consumers of the specific API should be appropriately adapted. Issue [#74600](https://github.com/grafana/grafana/issues/74600) + +### Plugin development fixes & changes + +- **Grafana/UI:** Add new Splitter component . [#82357](https://github.com/grafana/grafana/issues/82357), [@torkelo](https://github.com/torkelo) + + + + +# 10.3.4 (2024-03-06) + +### Features and enhancements + +- **Chore:** Improve domain validation for Google OAuth - Backport 83229 to v10.3.x. [#83725](https://github.com/grafana/grafana/issues/83725), [@linoman](https://github.com/linoman) + +### Bug fixes + +- **LDAP:** Fix LDAP users authenticated via auth proxy not being able to use LDAP active sync. [#83750](https://github.com/grafana/grafana/issues/83750), [@Jguer](https://github.com/Jguer) +- **Tempo:** Add template variable interpolation for filters (#83213). [#83706](https://github.com/grafana/grafana/issues/83706), [@joey-grafana](https://github.com/joey-grafana) +- **Elasticsearch:** Fix adhoc filters not applied in frontend mode. [#83596](https://github.com/grafana/grafana/issues/83596), [@svennergr](https://github.com/svennergr) +- **Dashboards:** Fixes issue where panels would not refresh if time range updated while in panel view mode. [#83525](https://github.com/grafana/grafana/issues/83525), [@kaydelaney](https://github.com/kaydelaney) +- **Auth:** Fix email verification bypass when using basic authentication. [#83484](https://github.com/grafana/grafana/issues/83484) +- **AuthProxy:** Invalidate previous cached item for user when changes are made to any header. [#83203](https://github.com/grafana/grafana/issues/83203), [@klesh](https://github.com/klesh) +- **LibraryPanels/RBAC:** Fix issue where folder scopes weren't being correctly inherited. [#82902](https://github.com/grafana/grafana/issues/82902), [@kaydelaney](https://github.com/kaydelaney) +- **LibraryPanels:** Fix issue with repeated library panels. [#82259](https://github.com/grafana/grafana/issues/82259), [@kaydelaney](https://github.com/kaydelaney) +- **Plugins:** Don't auto prepend app sub url to plugin asset paths. [#82147](https://github.com/grafana/grafana/issues/82147), [@wbrowne](https://github.com/wbrowne) +- **Elasticsearch:** Set middlewares from Grafana's `httpClientProvider`. [#81929](https://github.com/grafana/grafana/issues/81929), [@svennergr](https://github.com/svennergr) +- **Folders:** Fix failure to update folder in SQLite. [#81862](https://github.com/grafana/grafana/issues/81862), [@papagian](https://github.com/papagian) +- **Loki/Elastic:** Assert queryfix value to always be string. [#81463](https://github.com/grafana/grafana/issues/81463), [@svennergr](https://github.com/svennergr) + +### Breaking changes + +We're adding a between the response of the ID token HD parameter and the list of allowed domains. This feature can be disabled through the configuration toggle `validate_hd `. Anyone using the legacy Google OAuth configuration should disable this validation if the ID Token response doesn't have the HD parameter. Issue [#83725](https://github.com/grafana/grafana/issues/83725) + + + + +# 10.3.3 (2024-02-02) + +### Bug fixes + +- **Elasticsearch:** Fix creating of legend so it is backward compatible with frontend produced frames. [#81786](https://github.com/grafana/grafana/issues/81786), [@ivanahuckova](https://github.com/ivanahuckova) +- **ShareModal:** Fixes url sync issue that caused issue with save drawer. [#81721](https://github.com/grafana/grafana/issues/81721), [@ivanortegaalba](https://github.com/ivanortegaalba) + + + + +# 10.3.1 (2024-01-22) + +To resolve a technical issue within the Grafana release package management process, we are releasing both Grafana 10.3.0 and Grafana 10.3.1 simultaneously. The 10.3.1 release contains no breaking or functional changes from 10.3.0. Please refer to the [What’s New](https://grafana.com/docs/grafana/latest/whatsnew/whats-new-in-v10-3/) post for Grafana 10.3.0 for details on new features and changes in this release. + + + + +# 10.3.0 (2024-01-22) + +To resolve a technical issue within the Grafana release package management process, we are releasing both Grafana 10.3.0 and Grafana 10.3.1 simultaneously. The 10.3.1 release contains no breaking or functional changes from 10.3.0. Please refer to the [What’s New](https://grafana.com/docs/grafana/latest/whatsnew/whats-new-in-v10-3/) post for Grafana 10.3.0 for details on new features and changes in this release. + +### Features and enhancements + +- **Alerting:** Guided legacy alerting upgrade dry-run. [#80071](https://github.com/grafana/grafana/issues/80071), [@JacobsonMT](https://github.com/JacobsonMT) +- **Explore:** Preserve time range when creating a dashboard panel from Explore. [#80070](https://github.com/grafana/grafana/issues/80070), [@Elfo404](https://github.com/Elfo404) +- **Explore:** Init with mixed DS if there's no root DS in the URL and queries have multiple datasources. [#80068](https://github.com/grafana/grafana/issues/80068), [@Elfo404](https://github.com/Elfo404) +- **QueryEditor:** Display error even if error field is empty. [#79943](https://github.com/grafana/grafana/issues/79943), [@idastambuk](https://github.com/idastambuk) +- **K8s:** Enable api-server by default. [#79942](https://github.com/grafana/grafana/issues/79942), [@ryantxu](https://github.com/ryantxu) +- **Parca:** Add standalone building configuration. [#79896](https://github.com/grafana/grafana/issues/79896), [@fabrizio-grafana](https://github.com/fabrizio-grafana) +- **Auth:** Hide forgot password if grafana auth is disabled. [#79895](https://github.com/grafana/grafana/issues/79895), [@Jguer](https://github.com/Jguer) +- **Plugins:** Add uninstall requested message for cloud plugins. [#79748](https://github.com/grafana/grafana/issues/79748), [@oshirohugo](https://github.com/oshirohugo) +- **Loki:** Open log context in new tab. [#79723](https://github.com/grafana/grafana/issues/79723), [@svennergr](https://github.com/svennergr) +- **Alerting:** Allow linking to library panels. [#79693](https://github.com/grafana/grafana/issues/79693), [@gillesdemey](https://github.com/gillesdemey) +- **Loki:** Drop all errors in volume requests. [#79686](https://github.com/grafana/grafana/issues/79686), [@svennergr](https://github.com/svennergr) +- **Loki Logs volume:** Added a query splitting loading indicator to the Logs Volume graph. [#79681](https://github.com/grafana/grafana/issues/79681), [@matyax](https://github.com/matyax) +- **Plugins:** Disable add new data source for incomplete install. [#79658](https://github.com/grafana/grafana/issues/79658), [@oshirohugo](https://github.com/oshirohugo) +- **RBAC:** Render team, service account and user list when a user can see entities but not roles attached to them. [#79642](https://github.com/grafana/grafana/issues/79642), [@kalleep](https://github.com/kalleep) +- **InfluxDB:** Use database input for SQL configuration instead of metadata. [#79579](https://github.com/grafana/grafana/issues/79579), [@itsmylife](https://github.com/itsmylife) +- **Tempo:** Support special characters in identifiers. [#79565](https://github.com/grafana/grafana/issues/79565), [@fabrizio-grafana](https://github.com/fabrizio-grafana) +- **Alerting:** Display "Show all" button for cloud rules. [#79512](https://github.com/grafana/grafana/issues/79512), [@VikaCep](https://github.com/VikaCep) +- **React Hook Form:** Update to v 7.49.2. [#79493](https://github.com/grafana/grafana/issues/79493), [@Clarity-89](https://github.com/Clarity-89) +- **Loki:** Add timeRange to labels requests in LogContext to reduce loading times. [#79478](https://github.com/grafana/grafana/issues/79478), [@svennergr](https://github.com/svennergr) +- **InfluxDB:** Enable SQL support by default. [#79474](https://github.com/grafana/grafana/issues/79474), [@itsmylife](https://github.com/itsmylife) +- **OAuth:** Remove accessTokenExpirationCheck feature toggle. [#79455](https://github.com/grafana/grafana/issues/79455), [@mgyongyosi](https://github.com/mgyongyosi) +- **Units:** Add scalable unit option. [#79411](https://github.com/grafana/grafana/issues/79411), [@Develer](https://github.com/Develer) +- **Alerting:** Add export mute timings feature to the UI. [#79395](https://github.com/grafana/grafana/issues/79395), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Config:** Can add static headers to email messages. [#79365](https://github.com/grafana/grafana/issues/79365), [@owensmallwood](https://github.com/owensmallwood) +- **Alerting:** Drop NamespaceID from responses on unstable ngalert API endpoints in favor of NamespaceUID. [#79359](https://github.com/grafana/grafana/issues/79359), [@alexweav](https://github.com/alexweav) +- **Cloudwatch:** Update cloudwatchNewRegionsHandler to General Availability. [#79348](https://github.com/grafana/grafana/issues/79348), [@sarahzinger](https://github.com/sarahzinger) +- **Plugins:** Include Azure settings as a part of Grafana config sent in plugin requests. [#79342](https://github.com/grafana/grafana/issues/79342), [@aangelisc](https://github.com/aangelisc) +- **Plugins:** Add hide_angular_deprecation setting. [#79296](https://github.com/grafana/grafana/issues/79296), [@xnyo](https://github.com/xnyo) +- **Table:** Add select/unselect all column values to table filter. [#79290](https://github.com/grafana/grafana/issues/79290), [@ahuarte47](https://github.com/ahuarte47) +- **Anonymous:** Add configurable device limit. [#79265](https://github.com/grafana/grafana/issues/79265), [@Jguer](https://github.com/Jguer) +- **Frontend:** Detect new assets / versions / config changes. [#79258](https://github.com/grafana/grafana/issues/79258), [@ryantxu](https://github.com/ryantxu) +- **Plugins:** Add option to disable TLS in the socks proxy. [#79246](https://github.com/grafana/grafana/issues/79246), [@PoorlyDefinedBehaviour](https://github.com/PoorlyDefinedBehaviour) +- **Frontend:** Reload the browser when backend configuration/assets change. [#79057](https://github.com/grafana/grafana/issues/79057), [@torkelo](https://github.com/torkelo) +- **Chore:** Refactor dataviz aria-label e2e selectors to data-testid. [#78938](https://github.com/grafana/grafana/issues/78938), [@khushijain21](https://github.com/khushijain21) +- **SSO:** Add GitHub auth configuration page. [#78933](https://github.com/grafana/grafana/issues/78933), [@Clarity-89](https://github.com/Clarity-89) +- **PublicDashboards:** Add setting to disable the feature. [#78894](https://github.com/grafana/grafana/issues/78894), [@AgnesToulet](https://github.com/AgnesToulet) +- **Variables:** Interpolate variables used in custom variable definition. [#78800](https://github.com/grafana/grafana/issues/78800), [@torkelo](https://github.com/torkelo) +- **Table:** Highlight row on shared crosshair. [#78392](https://github.com/grafana/grafana/issues/78392), [@mdvictor](https://github.com/mdvictor) +- **Stat:** Add Percent Change Option. [#78250](https://github.com/grafana/grafana/issues/78250), [@drew08t](https://github.com/drew08t) +- **Plugins:** Add Command Palette extension point. [#78098](https://github.com/grafana/grafana/issues/78098), [@sd2k](https://github.com/sd2k) +- **Transformations:** Add frame source picker to allow transforming annotations. [#77842](https://github.com/grafana/grafana/issues/77842), [@leeoniya](https://github.com/leeoniya) +- **Pyroscope:** Send start/end with profile types query. [#77523](https://github.com/grafana/grafana/issues/77523), [@bryanhuhta](https://github.com/bryanhuhta) +- **Explore:** Create menu for short link button. [#77336](https://github.com/grafana/grafana/issues/77336), [@gelicia](https://github.com/gelicia) +- **Alerting:** Don't record annotations for mapped NoData transitions, when NoData is mapped to OK. [#77164](https://github.com/grafana/grafana/issues/77164), [@alexweav](https://github.com/alexweav) +- **Canvas:** Add Pan and Zoom. [#76705](https://github.com/grafana/grafana/issues/76705), [@drew08t](https://github.com/drew08t) +- **Alerting:** In migration, create one label per channel. [#76527](https://github.com/grafana/grafana/issues/76527), [@JacobsonMT](https://github.com/JacobsonMT) +- **Alerting:** Separate overlapping legacy and UA alerting routes. [#76517](https://github.com/grafana/grafana/issues/76517), [@JacobsonMT](https://github.com/JacobsonMT) +- **Tooltip:** Improved Timeseries and Candlestick tooltips. [#75841](https://github.com/grafana/grafana/issues/75841), [@adela-almasan](https://github.com/adela-almasan) +- **Alerting:** Support hysteresis command expression. [#75189](https://github.com/grafana/grafana/issues/75189), [@yuri-tceretian](https://github.com/yuri-tceretian) +- **Plugins:** Add update for instance plugins. (Enterprise) +- **React Hook Form:** Update to v 7.49.2. (Enterprise) +- **Plugins:** Improve cloud plugins install error treatment. (Enterprise) + +### Bug fixes + +- **Transformations:** Fix bug where having NaN in the input to regression analysis transformation causes all predictions to be NaN. [#80079](https://github.com/grafana/grafana/issues/80079), [@oscarkilhed](https://github.com/oscarkilhed) +- **Alerting:** Fix URL timestamp conversion in historian API in annotation mode. [#80026](https://github.com/grafana/grafana/issues/80026), [@alexweav](https://github.com/alexweav) +- **Fix:** Switch component not being styled as disabled when is checked. [#80012](https://github.com/grafana/grafana/issues/80012), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Tempo:** Fix Spans table format. [#79938](https://github.com/grafana/grafana/issues/79938), [@fabrizio-grafana](https://github.com/fabrizio-grafana) +- **Gauges:** Fixing broken auto sizing. [#79926](https://github.com/grafana/grafana/issues/79926), [@torkelo](https://github.com/torkelo) +- **Barchart:** Fix percent stacking regression. [#79903](https://github.com/grafana/grafana/issues/79903), [@nmarrs](https://github.com/nmarrs) +- **Alerting:** Fix reusing last url in tab when reopening a new tab in rule detail a…. [#79801](https://github.com/grafana/grafana/issues/79801), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Azure Monitor:** Fix multi-resource bug "Missing required region params, requested QueryParams: api-version:2017-12-01-preview...". [#79669](https://github.com/grafana/grafana/issues/79669), [@bossinc](https://github.com/bossinc) +- **Explore:** Fix URL sync with async queries import . [#79584](https://github.com/grafana/grafana/issues/79584), [@Elfo404](https://github.com/Elfo404) +- **Dashboards:** Skip inherited object variable names. [#79567](https://github.com/grafana/grafana/issues/79567), [@jarben](https://github.com/jarben) +- **Alerting:** Fix queries and expressions in rule view details. [#79497](https://github.com/grafana/grafana/issues/79497), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Tempo:** Fix cache in TraceQL editor. [#79468](https://github.com/grafana/grafana/issues/79468), [@adrapereira](https://github.com/adrapereira) +- **Nested Folders:** Fix /api/folders pagination. [#79447](https://github.com/grafana/grafana/issues/79447), [@papagian](https://github.com/papagian) +- **Elasticsearch:** Fix modify query with backslashes. [#79430](https://github.com/grafana/grafana/issues/79430), [@svennergr](https://github.com/svennergr) +- **Cloudwatch:** Fix errors while loading queries/datasource on Safari. [#79417](https://github.com/grafana/grafana/issues/79417), [@kevinwcyu](https://github.com/kevinwcyu) +- **Stat:** Fix inconsistent center padding. [#79389](https://github.com/grafana/grafana/issues/79389), [@torkelo](https://github.com/torkelo) +- **Tempo:** Fix autocompletion with strings. [#79370](https://github.com/grafana/grafana/issues/79370), [@fabrizio-grafana](https://github.com/fabrizio-grafana) +- **Alerting:** Fix for data source filter on cloud rules. [#79327](https://github.com/grafana/grafana/issues/79327), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Alerting:** Fix UI inheriting mute timings from parent when calculating the polic…. [#79295](https://github.com/grafana/grafana/issues/79295), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Auth:** Fix a panic during logout when OAuth provider is not set. [#79271](https://github.com/grafana/grafana/issues/79271), [@dmihai](https://github.com/dmihai) +- **Tempo:** Fix read-only assignment. [#79183](https://github.com/grafana/grafana/issues/79183), [@fabrizio-grafana](https://github.com/fabrizio-grafana) +- **Templating:** Json interpolation of single-value default selection does not create valid json. [#79137](https://github.com/grafana/grafana/issues/79137), [@kaydelaney](https://github.com/kaydelaney) +- **Heatmap:** Fix null options migration. [#79083](https://github.com/grafana/grafana/issues/79083), [@overvenus](https://github.com/overvenus) +- **Dashboards:** Run shared queries even when source panel is in collapsed row. [#77792](https://github.com/grafana/grafana/issues/77792), [@kaydelaney](https://github.com/kaydelaney) +- **PDF:** Fix support for large panels. (Enterprise) +- **Reporting:** Fix daylight saving time support for custom schedules. (Enterprise) +- **RBAC:** Fix role assignment removal . (Enterprise) + +### Breaking changes + +Users who have InfluxDB datasource configured with SQL querying language must update their database information. They have to enter their `bucket name` into the database field. Issue [#79579](https://github.com/grafana/grafana/issues/79579) + +Removes `NamespaceID` from responses of all GET routes underneath the path `/api/ruler/grafana/api/v1/rules` - 3 affected endpoints. All affected routes are not in the publicly documented or `stable` marked portion of the ngalert API. This only breaks clients who are directly using the unstable portion of the API. Such clients should use `NamespaceUID` rather than `NamespaceID` to identify namespaces. Issue [#79359](https://github.com/grafana/grafana/issues/79359) + + + + +# 10.2.5 (2024-03-06) + +### Features and enhancements + +- **Alerting:** Add setting to distribute rule group evaluations over time. [#81404](https://github.com/grafana/grafana/issues/81404), [@alexweav](https://github.com/alexweav) + +### Bug fixes + +- **Cloudwatch:** Fix errors while loading queries/datasource on Safari. [#83842](https://github.com/grafana/grafana/issues/83842), [@kevinwcyu](https://github.com/kevinwcyu) +- **Elasticsearch:** Fix adhoc filters not applied in frontend mode. [#83595](https://github.com/grafana/grafana/issues/83595), [@svennergr](https://github.com/svennergr) +- **Auth:** Fix email verification bypass when using basic authentication. [#83489](https://github.com/grafana/grafana/issues/83489) +- **Alerting:** Fix queries and expressions in rule view details. [#82875](https://github.com/grafana/grafana/issues/82875), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Plugins:** Don't auto prepend app sub url to plugin asset paths. [#82146](https://github.com/grafana/grafana/issues/82146), [@wbrowne](https://github.com/wbrowne) +- **Folders:** Fix failure to update folder in SQLite. [#81861](https://github.com/grafana/grafana/issues/81861), [@papagian](https://github.com/papagian) + + + + +# 10.2.4 (2024-01-29) + +### Features and enhancements + +- **Chore:** Upgrade Go to 1.21.5. [#79560](https://github.com/grafana/grafana/issues/79560), [@tolzhabayev](https://github.com/tolzhabayev) + +### Bug fixes + +- **Field:** Fix perf regression in getUniqueFieldName(). [#81417](https://github.com/grafana/grafana/issues/81417), [@leeoniya](https://github.com/leeoniya) +- **Alerting:** Fix Graphite subqueries. [#80816](https://github.com/grafana/grafana/issues/80816), [@gillesdemey](https://github.com/gillesdemey) +- **Alerting:** Fix Graphite subqueries. [#80744](https://github.com/grafana/grafana/issues/80744), [@gillesdemey](https://github.com/gillesdemey) +- **Annotations:** Split cleanup into separate queries and deletes to avoid deadlocks on MySQL. [#80485](https://github.com/grafana/grafana/issues/80485), [@alexweav](https://github.com/alexweav) +- **Loki:** Fix bug duplicating parsed labels across multiple log lines. [#80368](https://github.com/grafana/grafana/issues/80368), [@svennergr](https://github.com/svennergr) +- **Alerting:** Fix NoData & Error alerts not resolving when rule is reset. [#80241](https://github.com/grafana/grafana/issues/80241), [@JacobsonMT](https://github.com/JacobsonMT) +- **Auth:** Fix a panic during logout when OAuth provider is not set. [#80221](https://github.com/grafana/grafana/issues/80221), [@dmihai](https://github.com/dmihai) +- **Gauges:** Fixing broken auto sizing. [#79940](https://github.com/grafana/grafana/issues/79940), [@torkelo](https://github.com/torkelo) +- **Templating:** Json interpolation of single-value default selection does not create valid json. [#79503](https://github.com/grafana/grafana/issues/79503), [@kaydelaney](https://github.com/kaydelaney) +- **Tempo:** Fix cache in TraceQL editor. [#79471](https://github.com/grafana/grafana/issues/79471), [@adrapereira](https://github.com/adrapereira) +- **Alerting:** Fix for data source filter on cloud rules. (#79327). [#79350](https://github.com/grafana/grafana/issues/79350), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) + + # 10.2.3 (2023-12-18) @@ -100,7 +500,7 @@ - **Alerting:** Show receiver in groups view to avoid duplication in the list. [#77109](https://github.com/grafana/grafana/issues/77109), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) - **Alerting:** Allow more time before Alertmanager expire-resolves alerts. [#77094](https://github.com/grafana/grafana/issues/77094), [@alexweav](https://github.com/alexweav) - **Tempo:** Add new structural operators. [#77056](https://github.com/grafana/grafana/issues/77056), [@fabrizio-grafana](https://github.com/fabrizio-grafana) -- **ServiceAccount:** Add pagination to service accout table. [#77044](https://github.com/grafana/grafana/issues/77044), [@kalleep](https://github.com/kalleep) +- **ServiceAccount:** Add pagination to service account table. [#77044](https://github.com/grafana/grafana/issues/77044), [@kalleep](https://github.com/kalleep) - **Transformations:** Cumulative and window modes for `Add field from calculation`. [#77029](https://github.com/grafana/grafana/issues/77029), [@mdvictor](https://github.com/mdvictor) - **Plugins:** Allow disabling angular deprecation UI for specific plugins. [#77026](https://github.com/grafana/grafana/issues/77026), [@xnyo](https://github.com/xnyo) - **Stat:** Add panel option to control wide layout. [#77018](https://github.com/grafana/grafana/issues/77018), [@nmarrs](https://github.com/nmarrs) @@ -208,7 +608,7 @@ - **Organize fields transformation:** Fix re-ordering of fields using drag and drop. [#77172](https://github.com/grafana/grafana/issues/77172), [@adela-almasan](https://github.com/adela-almasan) - **Bug fix:** Correctly set permissions on provisioned dashboards. [#77155](https://github.com/grafana/grafana/issues/77155), [@IevaVasiljeva](https://github.com/IevaVasiljeva) - **InfluxDB:** Fix adhoc filter calls by properly checking optional parameter in metricFindQuery. [#77113](https://github.com/grafana/grafana/issues/77113), [@itsmylife](https://github.com/itsmylife) -- **Alerting:** Fix NoRulesSplash being rendered for some seconds, fater creating a rule. [#77048](https://github.com/grafana/grafana/issues/77048), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) +- **Alerting:** Fix NoRulesSplash being rendered for some seconds, faster creating a rule. [#77048](https://github.com/grafana/grafana/issues/77048), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) - **RBAC:** Allow scoping access to root level dashboards. [#76987](https://github.com/grafana/grafana/issues/76987), [@IevaVasiljeva](https://github.com/IevaVasiljeva) - **Alerting:** Dont show 1 firing series when no data in Expressions PreviewSummary. [#76981](https://github.com/grafana/grafana/issues/76981), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron) - **InfluxDB:** Fix aliasing with $measurement or $m on backend mode. [#76917](https://github.com/grafana/grafana/issues/76917), [@itsmylife](https://github.com/itsmylife) @@ -260,7 +660,7 @@ Please use the following endpoints instead: - `GET /api/access-control/datasources/:uid` for listing data source permissions - `POST /api/access-control/datasources/:uid/users/:id`, `POST /api/access-control/datasources/:uid/teams/:id` and `POST /api/access-control/datasources/:uid/buildInRoles/:id` for adding or removing data source permissions -If you are using Terraform Grafana provider to manage data source permissions, you will need to upgrade your provider to [version 2.6.0](https://registry.terraform.io/providers/grafana/grafana/2.6.0/docs) or newer to ensure that data source permission provisioning keeps working. Issue [#5880](https://github.com/grafana/grafana/issues/5880) +If you are using Terraform Grafana provider to manage data source permissions, you will need to upgrade your provider to [version 2.6.0](https://registry.terraform.io/providers/grafana/grafana/2.6.0/docs) or newer to ensure that data source permission provisioning keeps working. ### Deprecations @@ -581,7 +981,7 @@ For the existing backend mode users who have table visualization might see some - **Pyroscope:** Fix error when no profile types are returned. [#75143](https://github.com/grafana/grafana/issues/75143), [@aocenas](https://github.com/aocenas) - **BarChart:** Axes centered zero, borders, and colors. [#75136](https://github.com/grafana/grafana/issues/75136), [@leeoniya](https://github.com/leeoniya) - **Plugins:** Refresh plugin info after installation. [#75074](https://github.com/grafana/grafana/issues/75074), [@oshirohugo](https://github.com/oshirohugo) -- **LDAP:** FIX Enable users on successfull login . [#75073](https://github.com/grafana/grafana/issues/75073), [@gamab](https://github.com/gamab) +- **LDAP:** FIX Enable users on successful login . [#75073](https://github.com/grafana/grafana/issues/75073), [@gamab](https://github.com/gamab) - **XYChart:** Fix numerous axis options. [#75044](https://github.com/grafana/grafana/issues/75044), [@leeoniya](https://github.com/leeoniya) - **Trace View:** Remove "deployment.environment" default traces 2 logs tag. [#74986](https://github.com/grafana/grafana/issues/74986), [@domasx2](https://github.com/domasx2) - **Snapshots:** Use appUrl on snapshot list page. [#74944](https://github.com/grafana/grafana/issues/74944), [@evictorero](https://github.com/evictorero) @@ -651,6 +1051,24 @@ Starting with 10.2, `parentRowIndex` is deprecated. It will be removed in a futu - **Drawer:** Make content scroll by default. [#75287](https://github.com/grafana/grafana/issues/75287), [@ashharrison90](https://github.com/ashharrison90) + + +# 10.1.8 (2024-03-06) + +### Bug fixes + +- **Auth:** Fix email verification bypass when using basic authentication. [#83492](https://github.com/grafana/grafana/issues/83492) + + + + +# 10.1.7 (2024-01-29) + +### Bug fixes + +- **Annotations:** Split cleanup into separate queries and deletes to avoid deadlocks on MySQL. [#80678](https://github.com/grafana/grafana/issues/80678), [@alexweav](https://github.com/alexweav) + + # 10.1.6 (2023-12-18) @@ -669,7 +1087,7 @@ Starting with 10.2, `parentRowIndex` is deprecated. It will be removed in a futu - **Loki:** Cache extracted labels. [#75905](https://github.com/grafana/grafana/issues/75905), [@gtk-grafana](https://github.com/gtk-grafana) - **DataSourcePicker:** Disable autocomplete for the search input . [#75900](https://github.com/grafana/grafana/issues/75900), [@ivanortegaalba](https://github.com/ivanortegaalba) - **Plugins:** Refresh plugin info after installation. [#75225](https://github.com/grafana/grafana/issues/75225), [@oshirohugo](https://github.com/oshirohugo) -- **LDAP:** FIX Enable users on successfull login . [#75176](https://github.com/grafana/grafana/issues/75176), [@gamab](https://github.com/gamab) +- **LDAP:** FIX Enable users on successful login . [#75176](https://github.com/grafana/grafana/issues/75176), [@gamab](https://github.com/gamab) - **Loki:** Fix filters not being added with multiple expressions and parsers. [#75172](https://github.com/grafana/grafana/issues/75172), [@svennergr](https://github.com/svennergr) - **Recorded Queries:** Add org isolation (remote write target per org), and fix cross org Delete/List. (Enterprise) - **Auditing and UsageInsights:** FIX Loki configuration to use proxy env variables. (Enterprise) @@ -777,7 +1195,7 @@ Starting with 10.2, `parentRowIndex` is deprecated. It will be removed in a futu - **Geomap:** Promote route + photos layer to beta, promote geojson layer to stable. [#72233](https://github.com/grafana/grafana/issues/72233), [@nmarrs](https://github.com/nmarrs) - **Dashboards:** Add Angular deprecation alert in data source query editor. [#72211](https://github.com/grafana/grafana/issues/72211), [@xnyo](https://github.com/xnyo) - **Auth:** Lock organization roles for users who are managed through an external auth provider. [#72204](https://github.com/grafana/grafana/issues/72204), [@IevaVasiljeva](https://github.com/IevaVasiljeva) -- **Tranformations:** True OUTER JOIN in the join by field transformation used for tabular data . [#72176](https://github.com/grafana/grafana/issues/72176), [@bohandley](https://github.com/bohandley) +- **Transformations:** True OUTER JOIN in the join by field transformation used for tabular data . [#72176](https://github.com/grafana/grafana/issues/72176), [@bohandley](https://github.com/bohandley) - **NestedFolders:** Enable new nested folder picker by default for nested folders. [#72129](https://github.com/grafana/grafana/issues/72129), [@joshhunt](https://github.com/joshhunt) - **Alerting:** Add dashboardUID and panelID query parameters for loki state history. [#72119](https://github.com/grafana/grafana/issues/72119), [@alexweav](https://github.com/alexweav) - **Feature toggles management:** Define get feature toggles api. [#72106](https://github.com/grafana/grafana/issues/72106), [@jcalisto](https://github.com/jcalisto) @@ -844,7 +1262,7 @@ Starting with 10.2, `parentRowIndex` is deprecated. It will be removed in a futu - **Login:** Adjust error message when user exceed login attempts. [#70736](https://github.com/grafana/grafana/issues/70736), [@RoxanaAnamariaTurc](https://github.com/RoxanaAnamariaTurc) - **Nested folders:** Paginate child folder items. [#70730](https://github.com/grafana/grafana/issues/70730), [@ashharrison90](https://github.com/ashharrison90) - **Units:** Add events/messages/records/rows throughput units. [#70726](https://github.com/grafana/grafana/issues/70726), [@hhromic](https://github.com/hhromic) -- **Plugins:** Enable feature toggles for long running queries by deafult. [#70678](https://github.com/grafana/grafana/issues/70678), [@idastambuk](https://github.com/idastambuk) +- **Plugins:** Enable feature toggles for long running queries by default. [#70678](https://github.com/grafana/grafana/issues/70678), [@idastambuk](https://github.com/idastambuk) - **I18n:** Translate phrases for new Browse Dashboards. [#70654](https://github.com/grafana/grafana/issues/70654), [@Bohdanator](https://github.com/Bohdanator) - **Flamegraph:** Prevent cropping of tooltip by bottom of the viewport. [#70633](https://github.com/grafana/grafana/issues/70633), [@aocenas](https://github.com/aocenas) - **Pyroscope:** Preselect default profile type or app in the query editor dropdown. [#70624](https://github.com/grafana/grafana/issues/70624), [@aocenas](https://github.com/aocenas) @@ -870,7 +1288,7 @@ Starting with 10.2, `parentRowIndex` is deprecated. It will be removed in a futu - **Geomap:** Add network layer. [#70192](https://github.com/grafana/grafana/issues/70192), [@drew08t](https://github.com/drew08t) - **Alerting:** Bump grafana/alerting and refactor the ImageStore/Provider to provide image URL/bytes. [#70182](https://github.com/grafana/grafana/issues/70182), [@santihernandezc](https://github.com/santihernandezc) - **Auth:** Support google OIDC and group fetching. [#70140](https://github.com/grafana/grafana/issues/70140), [@Jguer](https://github.com/Jguer) -- **Alerting:** Make QueryEditor not collapsable. [#70112](https://github.com/grafana/grafana/issues/70112), [@VikaCep](https://github.com/VikaCep) +- **Alerting:** Make QueryEditor not collapsible. [#70112](https://github.com/grafana/grafana/issues/70112), [@VikaCep](https://github.com/VikaCep) - **TimeSeries:** Add option to disconnect values. [#70097](https://github.com/grafana/grafana/issues/70097), [@drew08t](https://github.com/drew08t) - **Logs:** Add toggle behavior support for "filter for" and "filter out" label within Logs Details. [#70091](https://github.com/grafana/grafana/issues/70091), [@matyax](https://github.com/matyax) - **Plugins:** Periodically update public signing key. [#70080](https://github.com/grafana/grafana/issues/70080), [@andresmgot](https://github.com/andresmgot) @@ -1152,6 +1570,24 @@ Starting with 10.0, changing the folder UID is deprecated. It will be removed in - **Grafana/ui:** Fix margin in RadioButtonGroup option when only icon is present. [#68899](https://github.com/grafana/grafana/issues/68899), [@aocenas](https://github.com/aocenas) + + +# 10.0.12 (2024-03-06) + +### Bug fixes + +- **Auth:** Fix email verification bypass when using basic authentication. [#83493](https://github.com/grafana/grafana/issues/83493) + + + + +# 10.0.11 (2024-01-29) + +### Bug fixes + +- **Annotations:** Split cleanup into separate queries and deletes to avoid deadlocks on MySQL. [#80681](https://github.com/grafana/grafana/issues/80681), [@alexweav](https://github.com/alexweav) + + # 10.0.10 (2023-12-18) @@ -1684,6 +2120,29 @@ The `database` field has been deprecated in the Elasticsearch datasource provisi - **InteractiveTable:** Updated design and minor tweak to Correlactions page. [#66443](https://github.com/grafana/grafana/issues/66443), [@torkelo](https://github.com/torkelo) + + +# 9.5.17 (2024-03-05) + +### Features and enhancements + +- Bump go-git to v5.11.0. [#83711](https://github.com/grafana/grafana/issues/83711), [@papagian](https://github.com/papagian) +- **Plugins:** Bump otelgrpc instrumentation to 0.47.0. [#83674](https://github.com/grafana/grafana/issues/83674), [@wbrowne](https://github.com/wbrowne) + +### Bug fixes + +- **Auth:** Fix email verification bypass when using basic authentication. [#83494](https://github.com/grafana/grafana/issues/83494) + + + + +# 9.5.16 (2024-01-29) + +### Bug fixes + +- **Annotations:** Split cleanup into separate queries and deletes to avoid deadlocks on MySQL. [#80682](https://github.com/grafana/grafana/issues/80682), [@alexweav](https://github.com/alexweav) + + # 9.5.15 (2023-12-18) @@ -1706,7 +2165,7 @@ The `database` field has been deprecated in the Elasticsearch datasource provisi - **Alerting:** Fix state manager to not keep datasource_uid and ref_id labels in state after Error. [#77391](https://github.com/grafana/grafana/issues/77391), [@yuri-tceretian](https://github.com/yuri-tceretian) - **Transformations:** Config overrides being lost when config from query transform is applied. [#75347](https://github.com/grafana/grafana/issues/75347), [@IbrahimCSAE](https://github.com/IbrahimCSAE) -- **LDAP:** FIX Enable users on successfull login . [#75192](https://github.com/grafana/grafana/issues/75192), [@gamab](https://github.com/gamab) +- **LDAP:** FIX Enable users on successful login . [#75192](https://github.com/grafana/grafana/issues/75192), [@gamab](https://github.com/gamab) - **Auditing and UsageInsights:** FIX Loki configuration to use proxy env variables. (Enterprise) diff --git a/Dockerfile b/Dockerfile index 59355acfc8f50..d17a384ff3327 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,9 @@ # syntax=docker/dockerfile:1 -ARG BASE_IMAGE=alpine:3.18.3 -ARG JS_IMAGE=node:20-alpine3.18 +ARG BASE_IMAGE=alpine:3.19.1 +ARG JS_IMAGE=node:20-alpine ARG JS_PLATFORM=linux/amd64 -ARG GO_IMAGE=golang:1.21.5-alpine3.18 +ARG GO_IMAGE=golang:1.21.8-alpine ARG GO_SRC=go-builder ARG JS_SRC=js-builder @@ -20,9 +20,11 @@ COPY packages packages COPY plugins-bundled plugins-bundled COPY public public +RUN apk add --no-cache make build-base python3 + RUN yarn install --immutable -COPY tsconfig.json .eslintrc .editorconfig .browserslistrc .prettierrc.js babel.config.json ./ +COPY tsconfig.json .eslintrc .editorconfig .browserslistrc .prettierrc.js ./ COPY public public COPY scripts scripts COPY emails emails @@ -38,6 +40,9 @@ ARG GO_BUILD_TAGS="oss" ARG WIRE_TAGS="oss" ARG BINGO="true" +# This is required to allow building on arm64 due to https://github.com/golang/go/issues/22040 +RUN apk add --no-cache binutils-gold + # Install build dependencies RUN if grep -i -q alpine /etc/issue; then \ apk add --no-cache gcc g++ make git; \ @@ -50,6 +55,8 @@ COPY .bingo .bingo # Include vendored dependencies COPY pkg/util/xorm/go.* pkg/util/xorm/ +COPY pkg/apiserver/go.* pkg/apiserver/ +COPY pkg/apimachinery/go.* pkg/apimachinery/ RUN go mod download RUN if [[ "$BINGO" = "true" ]]; then \ diff --git a/GOVERNANCE.md b/GOVERNANCE.md index def47f1a1c15f..ff129a8755770 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -173,7 +173,7 @@ Supermajority votes must be called explicitly in a separate thread on the approp Votes may take the form of a single proposal, with the option to vote yes or no, or the form of multiple alternatives. -A vote on a single proposal is considered successful if at least two thirds of those eligible to vote vote in favor. +A vote on a single proposal is considered successful if at least two thirds of those eligible to vote in favor. If there are multiple alternatives, members may vote for one or more alternatives, or vote “no” to object to all alternatives. A vote on multiple alternatives is considered decided in favor of one alternative if it has received the most votes in favor, and a vote from at least two thirds of those eligible to vote. Should no alternative reach this quorum, another vote on a reduced number of options may be called separately. diff --git a/HALL_OF_FAME.md b/HALL_OF_FAME.md index 18fd83f6c2103..f895045493067 100644 --- a/HALL_OF_FAME.md +++ b/HALL_OF_FAME.md @@ -2,4 +2,4 @@ List of previous team members that have had a big impact on the company or the product and contributed during a long period of time. -- Hugo Häggmark ([School of applied technology](https://salt.study)) +- Hugo Häggmark ([Björn Lundén](https://www.bjornlunden.se/)) diff --git a/LICENSING.md b/LICENSING.md index f8bfef7f94585..97f2c53d8e759 100644 --- a/LICENSING.md +++ b/LICENSING.md @@ -18,7 +18,7 @@ packaging/ kinds/ pkg/kinds/ pkg/kindsys/ -pkg/registry/corekind/ +pkg/registry/schemas/ grafana-mixin/ public/app/plugins/datasource/tempo public/app/features/explore/TraceView/components diff --git a/Makefile b/Makefile index 4c6a646c8822e..3d53ca4dcfc7c 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ include .bingo/Variables.mk .PHONY: all deps-go deps-js deps build-go build-backend build-server build-cli build-js build build-docker-full build-docker-full-ubuntu lint-go golangci-lint test-go test-js gen-ts test run run-frontend clean devenv devenv-down protobuf drone help gen-go gen-cue fix-cue GO = go -GO_FILES ?= ./pkg/... +GO_FILES ?= ./pkg/... ./pkg/apiserver/... ./pkg/apimachinery/... ./pkg/promlib/... SH_FILES ?= $(shell find ./scripts -name *.sh) GO_BUILD_FLAGS += $(if $(GO_BUILD_DEV),-dev) GO_BUILD_FLAGS += $(if $(GO_BUILD_TAGS),-build-tags=$(GO_BUILD_TAGS)) @@ -45,12 +45,12 @@ $(NGALERT_SPEC_TARGET): $(MERGED_SPEC_TARGET): swagger-oss-gen swagger-enterprise-gen $(NGALERT_SPEC_TARGET) $(SWAGGER) ## Merge generated and ngalert API specs # known conflicts DsPermissionType, AddApiKeyCommand, Json, Duration (identical models referenced by both specs) - $(SWAGGER) mixin $(SPEC_TARGET) $(ENTERPRISE_SPEC_TARGET) $(NGALERT_SPEC_TARGET) --ignore-conflicts -o $(MERGED_SPEC_TARGET) + $(SWAGGER) mixin -q $(SPEC_TARGET) $(ENTERPRISE_SPEC_TARGET) $(NGALERT_SPEC_TARGET) --ignore-conflicts -o $(MERGED_SPEC_TARGET) swagger-oss-gen: $(SWAGGER) ## Generate API Swagger specification @echo "re-generating swagger for OSS" rm -f $(SPEC_TARGET) - SWAGGER_GENERATE_EXTENSION=false $(SWAGGER) generate spec -m -w pkg/server -o $(SPEC_TARGET) \ + SWAGGER_GENERATE_EXTENSION=false $(SWAGGER) generate spec -q -m -w pkg/server -o $(SPEC_TARGET) \ -x "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" \ -x "github.com/prometheus/alertmanager" \ -i pkg/api/swagger_tags.json \ @@ -66,7 +66,7 @@ else swagger-enterprise-gen: $(SWAGGER) ## Generate API Swagger specification @echo "re-generating swagger for enterprise" rm -f $(ENTERPRISE_SPEC_TARGET) - SWAGGER_GENERATE_EXTENSION=false $(SWAGGER) generate spec -m -w pkg/server -o $(ENTERPRISE_SPEC_TARGET) \ + SWAGGER_GENERATE_EXTENSION=false $(SWAGGER) generate spec -q -m -w pkg/server -o $(ENTERPRISE_SPEC_TARGET) \ -x "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" \ -x "github.com/prometheus/alertmanager" \ -i pkg/api/swagger_tags.json \ @@ -77,7 +77,7 @@ endif swagger-gen: gen-go $(MERGED_SPEC_TARGET) swagger-validate swagger-validate: $(MERGED_SPEC_TARGET) $(SWAGGER) ## Validate API spec - $(SWAGGER) validate $(<) + $(SWAGGER) validate --skip-warnings $(<) swagger-clean: rm -f $(SPEC_TARGET) $(MERGED_SPEC_TARGET) $(OAPI_SPEC_TARGET) @@ -103,10 +103,8 @@ openapi3-gen: swagger-gen ## Generates OpenApi 3 specs from the Swagger 2 alread ##@ Building gen-cue: ## Do all CUE/Thema code generation @echo "generate code from .cue files" - go generate ./pkg/plugins/plugindef go generate ./kinds/gen.go go generate ./public/app/plugins/gen.go - go generate ./pkg/kindsysreport/codegen/report.go gen-go: $(WIRE) @echo "generate go files" @@ -141,11 +139,6 @@ build-js: ## Build frontend assets. yarn run build yarn run plugins:build-bundled -build-plugins-go: ## Build decoupled plugins - @echo "build plugins" - @cd pkg/tsdb; \ - mage -v - PLUGIN_ID ?= build-plugin-go: ## Build decoupled plugins @@ -173,7 +166,8 @@ test-go: test-go-unit test-go-integration .PHONY: test-go-unit test-go-unit: ## Run unit tests for backend with flags. @echo "test backend unit tests" - $(GO) test -short -covermode=atomic -timeout=30m ./pkg/... + go list -f '{{.Dir}}/...' -m | xargs \ + $(GO) test -short -covermode=atomic -timeout=30m .PHONY: test-go-integration test-go-integration: ## Run integration tests for backend with flags. @@ -261,7 +255,7 @@ build-docker-full-ubuntu: ## Build Docker image based on Ubuntu for development. --build-arg COMMIT_SHA=$$(git rev-parse HEAD) \ --build-arg BUILD_BRANCH=$$(git rev-parse --abbrev-ref HEAD) \ --build-arg BASE_IMAGE=ubuntu:22.04 \ - --build-arg GO_IMAGE=golang:1.21.5 \ + --build-arg GO_IMAGE=golang:1.21.8 \ --tag grafana/grafana$(TAG_SUFFIX):dev-ubuntu \ $(DOCKER_BUILD_ARGS) @@ -324,6 +318,7 @@ gen-ts: # Use this make target to regenerate the configuration YAML files when # you modify starlark files. drone: $(DRONE) + bash scripts/drone/env-var-check.sh $(DRONE) starlark --format $(DRONE) lint .drone.yml --trusted $(DRONE) --server https://drone.grafana.net sign --save grafana/grafana diff --git a/WORKFLOW.md b/WORKFLOW.md index fca782e178d21..ab1821b468ffe 100644 --- a/WORKFLOW.md +++ b/WORKFLOW.md @@ -44,7 +44,7 @@ Once a PR is approved as per above, any team member MAY merge the PR. ## Backporting a PR Critical bug fixes needed for a previous minor release should be backported to the respective release branches after coordinating with the delivery team. -Please see the [contibution guide](./contribute/merge-pull-request.md#should-the-pull-request-be-backported) for further details. +Please see the [contribution guide](./contribute/merge-pull-request.md#should-the-pull-request-be-backported) for further details. # Release workflow diff --git a/babel.config.json b/babel.config.json deleted file mode 100644 index b7e1723c6268d..0000000000000 --- a/babel.config.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "babelrc": false, - // Note: order is bottom-to-top and/or right-to-left - "presets": [ - [ - "@babel/preset-env", - { - "bugfixes": true, - "browserslistEnv": "dev" - } - ], - [ - "@babel/preset-typescript", - { - "allowNamespaces": true, - "allowDeclareFields": true - } - ], - [ - "@babel/preset-react", - { - "runtime": "automatic" - } - ] - ], - "plugins": [ - [ - "@babel/plugin-transform-typescript", - { - "allowNamespaces": true, - "allowDeclareFields": true - } - ], - // added to mitigate https://github.com/babel/babel/issues/14289 - // package (and following line) can be removed once the issue is fixed and released - "@babel/plugin-proposal-class-properties", - ["@babel/plugin-proposal-object-rest-spread", { "loose": true }], - "@babel/plugin-transform-react-constant-elements", - "@babel/plugin-proposal-nullish-coalescing-operator", - "@babel/plugin-proposal-optional-chaining", - "@babel/plugin-syntax-dynamic-import", // needed for `() => import()` in routes.ts - "angularjs-annotate", - "macros" - ], - "env": { - "production": { - "presets": [ - [ - "@babel/preset-env", - { - "browserslistEnv": "production" - } - ] - ] - }, - "hot": { - "plugins": ["react-refresh/babel"] - } - } -} diff --git a/conf/defaults.ini b/conf/defaults.ini index 87e2ec3c8b21a..1db14386a2cfe 100644 --- a/conf/defaults.ini +++ b/conf/defaults.ini @@ -9,10 +9,6 @@ app_mode = production # instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty instance_name = ${HOSTNAME} -# force migration will run migrations that might cause dataloss -# Deprecated, use clean_upgrade option in [unified_alerting.upgrade] instead. -force_migration = false - #################################### Paths ############################### [paths] # Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used) @@ -94,6 +90,10 @@ read_timeout = 0 #exampleHeader1 = exampleValue1 #exampleHeader2 = exampleValue2 +[environment] +# Sets whether the local file system is available for Grafana to use. Default is true for backward compatibility. +local_file_system_available = true + #################################### GRPC Server ######################### [grpc_server] network = "tcp" @@ -134,6 +134,9 @@ log_queries = # For "mysql", use either "true", "false", or "skip-verify". ssl_mode = disable +# For "postregs", use either "1" to enable or "0" to disable SNI +ssl_sni = + # Database drivers may support different transaction isolation levels. # Currently, only "mysql" driver supports isolation levels. # If the value is empty - driver's default isolation level is applied. @@ -246,7 +249,7 @@ reporting_distributor = grafana-labs # for new versions of grafana. The check is used # in some UI views to notify that a grafana update exists. # This option does not cause any auto updates, nor send any information -# only a GET request to https://raw.githubusercontent.com/grafana/grafana/main/latest.json to get the latest version. +# only a GET request to https://grafana.com/api/grafana/versions/stable to get the latest version. check_for_updates = true # Set to false to disable all checks to https://grafana.com @@ -429,6 +432,11 @@ default_home_dashboard_path = # Upper limit of data sources that Grafana will return. This limit is a temporary configuration and it will be deprecated when pagination will be introduced on the list data sources API. datasource_limit = 5000 +# Number of queries to be executed concurrently. Only for the datasource supports concurrency. +# For now only Loki and InfluxDB (with influxql) are supporting concurrency behind the feature flags. +# Check datasource documentations for enabling concurrency. +concurrent_query_count = 10 + ################################### SQL Data Sources ##################### [sql_datasources] @@ -464,6 +472,9 @@ auto_assign_org_role = Viewer # Require email validation before sign up completes verify_email_enabled = false +# Redirect to default OrgId after login +login_default_org_id = + # Background text for the user field on the login page login_hint = email or username password_hint = password @@ -491,6 +502,9 @@ editors_can_admin = false # The duration in time a user invitation remains valid before expiring. This setting should be expressed as a duration. Examples: 6h (hours), 2d (days), 1w (week). Default is 24h (24 hours). The minimum supported duration is 15m (15 minutes). user_invite_max_lifetime_duration = 24h +# The duration in time a verification email, used to update the email address of a user, remains valid before expiring. This setting should be expressed as a duration. Examples: 6h (hours), 2d (days), 1w (week). Default is 1h (1 hour). +verification_email_max_lifetime_duration = 1h + # Enter a comma-separated list of usernames to hide them in the Grafana UI. These users are shown to Grafana admins and to themselves. hidden_users = @@ -577,6 +591,16 @@ id_response_header_prefix = X-Grafana # The header value will encode the namespace ("user:", "api-key:", "service-account:") id_response_header_namespaces = user api-key service-account +#################################### SSO Settings ########################### +[sso_settings] +# interval for reloading the SSO Settings from the database +# useful in high availability setups running multiple Grafana instances +# set to 0 to disable this feature +reload_interval = 1m + +# List of providers that can be configured through the SSO Settings API and UI. +configurable_providers = github gitlab google generic_oauth azuread okta + #################################### Anonymous Auth ###################### [auth.anonymous] # enable anonymous access @@ -592,7 +616,7 @@ org_role = Viewer hide_version = false # number of devices in total -device_limit = +device_limit = #################################### GitHub Auth ######################### [auth.github] @@ -664,6 +688,7 @@ token_url = https://oauth2.googleapis.com/token api_url = https://openidconnect.googleapis.com/v1/userinfo signout_redirect_url = allowed_domains = +validate_hd = true hosted_domain = allowed_groups = role_attribute_path = @@ -797,6 +822,14 @@ use_refresh_token = false #################################### Basic Auth ########################## [auth.basic] enabled = true +# This setting will enable a stronger password policy for user's password under basic auth. +# The password will need to comply with the following password policy +# 1. Have a minimum of 12 characters +# 2. Composed by at least 1 uppercase character +# 3. Composed by at least 1 lowercase character +# 4. Composed by at least 1 digit character +# 5. Composed by at least 1 symbol character +password_policy = false #################################### Auth Proxy ########################## [auth.proxy] @@ -804,7 +837,7 @@ enabled = false header_name = X-WEBAUTH-USER header_property = username auto_sign_up = true -sync_ttl = 60 +sync_ttl = 15 whitelist = headers = headers_encoded = false @@ -825,6 +858,7 @@ key_file = key_id = role_attribute_path = role_attribute_strict = false +groups_attribute_path = auto_sign_up = false url_login = false allow_assign_grafana_admin = false @@ -843,7 +877,7 @@ skip_org_role_sync = false sync_cron = "0 1 * * *" active_sync_enabled = true -#################################### AWS ########################### +#################################### AWS ##################################### [aws] # Enter a comma-separated list of allowed AWS authentication providers. # Options are: default (AWS SDK Default), keys (Access && secret key), credentials (Credentials field), ec2_iam_role (EC2 IAM Role) @@ -859,6 +893,14 @@ list_metrics_page_limit = 500 # Experimental, for use in Grafana Cloud only. Please do not set. external_id = +# Sets the expiry duration of an assumed role. +# This setting should be expressed as a duration. Examples: 6h (hours), 10d (days), 2w (weeks), 1M (month). +session_duration = "15m" + +# Set the plugins that will receive AWS settings for each request (via plugin context) +# By default this will include all Grafana Labs owned AWS plugins, or those that make use of AWS settings (ElasticSearch, Prometheus). +forward_settings_to_plugins = cloudwatch, grafana-athena-datasource, grafana-redshift-datasource, grafana-x-ray-datasource, grafana-timestream-datasource, grafana-iot-sitewise-datasource, grafana-iot-twinmaker-app, grafana-opensearch-datasource, aws-datasource-provisioner, elasticsearch, prometheus + #################################### Azure ############################### [azure] # Azure cloud environment where Grafana is hosted @@ -940,6 +982,7 @@ from_address = admin@grafana.localhost from_name = Grafana ehlo_identity = startTLS_policy = +enable_tracing = false [smtp.static_headers] # Include custom static headers in all outgoing emails @@ -1031,6 +1074,11 @@ instrumentations_console_enabled = false # Should webvitals instrumentation be enabled, only affects Grafana Javascript Agent instrumentations_webvitals_enabled = false +# level of internal logging for debugging Grafana Javascript Agent. +# possible values are: 0 = OFF, 1 = ERROR, 2 = WARN, 3 = INFO, 4 = VERBOSE +# more details: https://github.com/grafana/faro-web-sdk/blob/v1.3.7/docs/sources/tutorials/quick-start-browser.md#how-to-activate-debugging +internal_logger_level = 0 + # Api Key, only applies to Grafana Javascript Agent provider api_key = @@ -1081,10 +1129,14 @@ global_file = 1000 # global limit of correlations global_correlations = -1 +# Limit of the number of alert rules per rule group. +# This is not strictly enforced yet, but will be enforced over time. +alerting_rule_group_rules = 100 + #################################### Unified Alerting #################### [unified_alerting] -# Enable the Unified Alerting sub-system and interface. When enabled we'll migrate all of your alert rules and notification channels to the new system. New alert rules will be created and your notification channels will be converted into an Alertmanager configuration. Previous data is preserved to enable backwards compatibility but new data is removed when switching. When this configuration section and flag are not defined, the state is defined at runtime. See the documentation for more details. -enabled = false +# Enable the Alerting sub-system and interface. +enabled = # Comma-separated list of organization IDs for which to disable unified alerting. Only supported if unified alerting is enabled. disabled_orgs = @@ -1150,17 +1202,17 @@ ha_gossip_interval = 200ms # The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m. ha_push_pull_interval = 60s -# Enable or disable alerting rule execution. The alerting UI remains visible. This option has a legacy version in the `[alerting]` section that takes precedence. +# Enable or disable alerting rule execution. The alerting UI remains visible. execute_alerts = true -# Alert evaluation timeout when fetching data from the datasource. This option has a legacy version in the `[alerting]` section that takes precedence. +# Alert evaluation timeout when fetching data from the datasource. # The timeout string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m. evaluation_timeout = 30s # Number of times we'll attempt to evaluate an alert rule before giving up on that evaluation. The default value is 1. max_attempts = 1 -# Minimum interval to enforce between rule evaluations. Rules will be adjusted if they are less than this value or if they are not multiple of the scheduler interval (10s). Higher values can help with resource management as we'll schedule fewer evaluations over time. This option has a legacy version in the `[alerting]` section that takes precedence. +# Minimum interval to enforce between rule evaluations. Rules will be adjusted if they are less than this value or if they are not multiple of the scheduler interval (10s). Higher values can help with resource management as we'll schedule fewer evaluations over time. # The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m. min_interval = 10s @@ -1169,6 +1221,14 @@ min_interval = 10s # (concurrent queries per rule disabled). max_state_save_concurrency = 1 +# If the feature flag 'alertingSaveStatePeriodic' is enabled, this is the interval that is used to persist the alerting instances to the database. +# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m. +state_periodic_save_interval = 5m + +# Disables the smoothing of alert evaluations across their evaluation window. +# Rules will evaluate in sync. +disable_jitter = false + [unified_alerting.screenshots] # Enable screenshots in notifications. You must have either installed the Grafana image rendering # plugin, or set up Grafana to use a remote rendering service. @@ -1242,6 +1302,10 @@ loki_basic_auth_username = # Optional password for basic authentication on requests sent to Loki. Can be left blank. loki_basic_auth_password = +# For "loki" only. +# Optional max query length for queries sent to Loki. Default is 721h which matches the default Loki value. +loki_max_query_length = 721h + [unified_alerting.state_history.external_labels] # Optional extra labels to attach to outbound state history records or log streams. # Any number of label key-value-pairs can be provided. @@ -1249,12 +1313,16 @@ loki_basic_auth_password = # ex. # mylabelkey = mylabelvalue -[unified_alerting.upgrade] -# If set to true when upgrading from legacy alerting to Unified Alerting, grafana will first delete all existing -# Unified Alerting resources, thus re-upgrading all organizations from scratch. If false or unset, organizations that -# have previously upgraded will not lose their existing Unified Alerting data when switching between legacy and -# Unified Alerting. Should be kept false when not needed as it may cause unintended data-loss if left enabled. -clean_upgrade = false +[unified_alerting.state_history.annotations] +# Controls retention of annotations automatically created while evaluating alert rules. +# Alert state history backend must be configured to be annotations (see setting [unified_alerting.state_history].backend). + +# Configures how long alert annotations are stored for. Default is 0, which keeps them forever. +# This setting should be expressed as a duration. Ex 6h (hours), 10d (days), 2w (weeks), 1M (month). +max_age = + +# Configures max number of alert annotations that Grafana stores. Default value is 0, which keeps all alert annotations. +max_annotations_to_keep = # NOTE: this configuration options are not used yet. [remote.alertmanager] @@ -1278,43 +1346,6 @@ password = sync_interval = 5m -#################################### Alerting ############################ -[alerting] -# Enable the legacy alerting sub-system and interface. If Unified Alerting is already enabled and you try to go back to legacy alerting, all data that is part of Unified Alerting will be deleted. When this configuration section and flag are not defined, the state is defined at runtime. See the documentation for more details. -enabled = false - -# Makes it possible to turn off alert execution but alerting UI is visible -execute_alerts = true - -# Default setting for new alert rules. Defaults to categorize error and timeouts as alerting. (alerting, keep_state) -error_or_timeout = alerting - -# Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok) -nodata_or_nullvalues = no_data - -# Alert notifications can include images, but rendering many images at the same time can overload the server -# This limit will protect the server from render overloading and make sure notifications are sent out quickly -concurrent_render_limit = 5 - -# Default setting for alert calculation timeout. Default value is 30 -evaluation_timeout_seconds = 30 - -# Default setting for alert notification timeout. Default value is 30 -notification_timeout_seconds = 30 - -# Default setting for max attempts to sending alert notifications. Default value is 3 -max_attempts = 3 - -# Makes it possible to enforce a minimal interval between evaluations, to reduce load on the backend -min_interval_seconds = 1 - -# Configures for how long alert annotations are stored. Default is 0, which keeps them forever. -# This setting should be expressed as an duration. Ex 6h (hours), 10d (days), 2w (weeks), 1M (month). -max_annotation_age = - -# Configures max number of alert annotations that Grafana stores. Default value is 0, which keeps all alert annotations. -max_annotations_to_keep = - #################################### Annotations ######################### [annotations] # Configures the batch size for the annotation clean-up job. This setting is used for dashboard, API, and alert annotations. @@ -1518,6 +1549,12 @@ concurrent_render_request_limit = 30 # Default is 5m. This should be more than enough for most deployments. # Change the value only if image rendering is failing and you see `Failed to get the render key from cache` in Grafana logs. render_key_lifetime = 5m +# Default width for panel screenshot +default_image_width = 1000 +# Default height for panel screenshot +default_image_height = 500 +# Default scale for panel screenshot +default_image_scale = 1 [panels] # here for to support old env variables, can remove after a few months @@ -1770,3 +1807,8 @@ read_only_toggles = [public_dashboards] # Set to false to disable public dashboards enabled = true + +###################################### Cloud Migration ###################################### +[cloud_migration] +# Set to true to enable target-side migration UI +is_target = false diff --git a/conf/provisioning/alerting/sample.yaml b/conf/provisioning/alerting/sample.yaml index ec41552e5310b..51836f25b3f58 100644 --- a/conf/provisioning/alerting/sample.yaml +++ b/conf/provisioning/alerting/sample.yaml @@ -67,6 +67,45 @@ apiVersion: 1 # labels: # team: sre_team_1 # isPaused: false +# # optional settings that let configure notification settings applied to alerts created by this rule +# notification_settings: +# # name of the receiver (contact-point) that should be used for this route +# receiver: grafana-default-email +# # > The labels by which incoming alerts are grouped together. For example, +# # multiple alerts coming in for cluster=A and alertname=LatencyHigh would +# # be batched into a single group. +# # +# # To aggregate by all possible labels, use the special value '...' as +# # the sole label name, for example: +# # group_by: ['...'] +# # This effectively disables aggregation entirely, passing through all +# # alerts as-is. This is unlikely to be what you want, unless you have +# # a very low alert volume or your upstream notification system performs +# # its own grouping. +# # If defined, must contain the labels 'alertname' and 'grafana_folder', except when contains '...' +# group_by: ["alertname", "grafana_folder", "region"] +# # Times when the route should be muted. These must match the name of a +# # mute time interval. +# # Additionally, the root node cannot have any mute times. +# # When a route is muted it will not send any notifications, but +# # otherwise acts normally (including ending the route-matching process +# # if the `continue` option is not set) +# mute_time_intervals: +# - abc +# # How long to initially wait to send a notification for a group +# # of alerts. Allows to collect more initial alerts for the same group. +# # (Usually ~0s to few minutes). +# # If not specified, the corresponding setting of the default policy is used. +# group_wait: 30s +# # How long to wait before sending a notification about new alerts that +# # are added to a group of alerts for which an initial notification has +# # already been sent. (Usually ~5m or more). +# # If not specified, the corresponding setting of the default policy is used. +# group_interval: 5m +# # How long to wait before sending a notification again if it has already +# # been sent successfully for an alert. (Usually ~3h or more) +# # If not specified, the corresponding setting of the default policy is used. +# repeat_interval: 4h # # List of alert rule UIDs that should be deleted # deleteRules: diff --git a/conf/provisioning/datasources/sample.yaml b/conf/provisioning/datasources/sample.yaml index 2d9bae8ee5622..98895709d5989 100644 --- a/conf/provisioning/datasources/sample.yaml +++ b/conf/provisioning/datasources/sample.yaml @@ -1,50 +1,71 @@ -# # config file version +# Configuration file version apiVersion: 1 -# # list of datasources that should be deleted from the database -#deleteDatasources: +# # List of data sources to delete from the database. +# deleteDatasources: # - name: Graphite # orgId: 1 -# # list of datasources to insert/update depending -# # on what's available in the database -#datasources: -# # name of the datasource. Required -# - name: Graphite -# # datasource type. Required -# type: graphite -# # access mode. direct or proxy. Required -# access: proxy -# # org id. will default to orgId 1 if not specified -# orgId: 1 -# # url -# url: http://localhost:8080 -# # database user, if used -# user: -# # database name, if used -# database: -# # enable/disable basic auth -# basicAuth: -# # basic auth username -# basicAuthUser: -# # enable/disable with credentials headers -# withCredentials: -# # mark as default datasource. Max one per org -# isDefault: -# # fields that will be converted to json and stored in json_data -# jsonData: -# graphiteVersion: "1.1" -# tlsAuth: true -# tlsAuthWithCACert: true -# httpHeaderName1: "Authorization" -# # json object of data that will be encrypted. -# secureJsonData: -# tlsCACert: "..." -# tlsClientCert: "..." -# tlsClientKey: "..." -# # -# httpHeaderValue1: "Bearer xf5yhfkpsnmgo" -# version: 1 -# # allow users to edit datasources from the UI. -# editable: false - +# # List of data sources to insert/update depending on what's +# # available in the database. +# datasources: +# # Sets the name you use to refer to +# # the data source in panels and queries. +# - name: Graphite +# # Sets the data source type. +# type: graphite +# # Sets the access mode, either +# # proxy or direct (Server or Browser in the UI). +# # Some data sources are incompatible with any setting +# # but proxy (Server). +# access: proxy +# # Sets the organization id. Defaults to orgId 1. +# orgId: 1 +# # Sets a custom UID to reference this +# # data source in other parts of the configuration. +# # If not specified, Grafana generates one. +# uid: my_unique_uid +# # Sets the data source's URL, including the +# # port. +# url: http://localhost:8080 +# # Sets the database user, if necessary. +# user: +# # Sets the database name, if necessary. +# database: +# # Enables basic authorization. +# basicAuth: +# # Sets the basic authorization username. +# basicAuthUser: +# # Enables credential headers. +# withCredentials: +# # Toggles whether the data source is pre-selected +# # for new panels. You can set only one default +# # data source per organization. +# isDefault: +# # Fields to convert to JSON and store in jsonData. +# jsonData: +# # Defines the Graphite service's version. +# graphiteVersion: '1.1' +# # Enables TLS authentication using a client +# # certificate configured in secureJsonData. +# tlsAuth: true +# # Enables TLS authentication using a CA +# # certificate. +# tlsAuthWithCACert: true +# # Fields to encrypt before storing in jsonData. +# secureJsonData: +# # Defines the CA cert, client cert, and +# # client key for encrypted authentication. +# tlsCACert: '...' +# tlsClientCert: '...' +# tlsClientKey: '...' +# # Sets the database password, if necessary. +# password: +# # Sets the basic authorization password. +# basicAuthPassword: +# # Sets the version. Used to compare versions when +# # updating. Ignored when creating a new data source. +# version: 1 +# # Allows users to edit data sources from the +# # Grafana UI. +# editable: false diff --git a/conf/provisioning/notifiers/sample.yaml b/conf/provisioning/notifiers/sample.yaml deleted file mode 100644 index 7d90983941252..0000000000000 --- a/conf/provisioning/notifiers/sample.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# # config file version -apiVersion: 1 - -# notifiers: -# - name: default-slack-temp -# type: slack -# org_name: Main Org. -# is_default: true -# uid: notifier1 -# settings: -# recipient: "XXX" -# token: "xoxb" -# uploadImage: true -# url: https://slack.com -# - name: default-email -# type: email -# org_id: 1 -# uid: notifier2 -# is_default: false -# settings: -# addresses: example11111@example.com -# delete_notifiers: -# - name: default-slack-temp -# org_name: Main Org. -# uid: notifier1 \ No newline at end of file diff --git a/conf/sample.ini b/conf/sample.ini index ad9a28410fdf0..1c52da72f8d93 100644 --- a/conf/sample.ini +++ b/conf/sample.ini @@ -9,10 +9,6 @@ # instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty ;instance_name = ${HOSTNAME} -# force migration will run migrations that might cause dataloss -# Deprecated, use clean_upgrade option in [unified_alerting.upgrade] instead. -;force_migration = false - #################################### Paths #################################### [paths] # Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used) @@ -124,6 +120,9 @@ # For "mysql", use either "true", "false", or "skip-verify". ;ssl_mode = disable +# For "postregs", use either "1" to enable or "0" to disable SNI +;ssl_sni = + # Database drivers may support different transaction isolation levels. # Currently, only "mysql" driver supports isolation levels. # If the value is empty - driver's default isolation level is applied. @@ -253,7 +252,7 @@ # for new versions of grafana. The check is used # in some UI views to notify that a grafana update exists. # This option does not cause any auto updates, nor send any information -# only a GET request to https://raw.githubusercontent.com/grafana/grafana/main/latest.json to get the latest version. +# only a GET request to https://grafana.com/api/grafana/versions/stable to get the latest version. ;check_for_updates = true # Set to false to disable all checks to https://grafana.com @@ -449,6 +448,9 @@ # Require email validation before sign up completes ;verify_email_enabled = false +# Redirect to default OrgId after login +;login_default_org_id = + # Background text for the user field on the login page ;login_hint = email or username ;password_hint = password @@ -476,6 +478,9 @@ # The duration in time a user invitation remains valid before expiring. This setting should be expressed as a duration. Examples: 6h (hours), 2d (days), 1w (week). Default is 24h (24 hours). The minimum supported duration is 15m (15 minutes). ;user_invite_max_lifetime_duration = 24h +# The duration in time a verification email, used to update the email address of a user, remains valid before expiring. This setting should be expressed as a duration. Examples: 6h (hours), 2d (days), 1w (week). Default is 1h (1 hour). +;verification_email_max_lifetime_duration = 1h + # Enter a comma-separated list of users login to hide them in the Grafana UI. These users are shown to Grafana admins and themselves. ; hidden_users = @@ -643,6 +648,7 @@ ;api_url = https://openidconnect.googleapis.com/v1/userinfo ;signout_redirect_url = ;allowed_domains = +;validate_hd = ;hosted_domain = ;allowed_groups = ;role_attribute_path = @@ -745,6 +751,7 @@ #################################### Basic Auth ########################## [auth.basic] ;enabled = true +;password_policy = false #################################### Auth Proxy ########################## [auth.proxy] @@ -774,6 +781,7 @@ # Use in conjunction with key_file in case the JWT token's header specifies a key ID in "kid" field ;key_id = some-key-id ;role_attribute_path = +;groups_attribute_path = ;role_attribute_strict = false ;auto_sign_up = false ;url_login = false @@ -808,6 +816,14 @@ # Experimental, for use in Grafana Cloud only. Please do not set. ; external_id = +# Sets the expiry duration of an assumed role. +# This setting should be expressed as a duration. Examples: 6h (hours), 10d (days), 2w (weeks), 1M (month). +; session_duration = "15m" + +# Set the plugins that will receive AWS settings for each request (via plugin context) +# By default this will include all Grafana Labs owned AWS plugins, or those that make use of AWS settings (ElasticSearch, Prometheus). +; forward_settings_to_plugins = cloudwatch, grafana-athena-datasource, grafana-redshift-datasource, grafana-x-ray-datasource, grafana-timestream-datasource, grafana-iot-sitewise-datasource, grafana-iot-twinmaker-app, grafana-opensearch-datasource, aws-datasource-provisioner, elasticsearch, prometheus + #################################### Azure ############################### [azure] # Azure cloud environment where Grafana is hosted @@ -890,6 +906,8 @@ ;ehlo_identity = dashboard.example.com # SMTP startTLS policy (defaults to 'OpportunisticStartTLS') ;startTLS_policy = NoStartTLS +# Enable trace propagation in e-mail headers, using the 'traceparent', 'tracestate' and (optionally) 'baggage' fields (defaults to false) +;enable_tracing = false [smtp.static_headers] # Include custom static headers in all outgoing emails @@ -1030,6 +1048,10 @@ # global limit of correlations ; global_correlations = -1 +# Limit of the number of alert rules per rule group. +# This is not strictly enforced yet, but will be enforced over time. +;alerting_rule_group_rules = 100 + #################################### Unified Alerting #################### [unified_alerting] #Enable the Unified Alerting sub-system and interface. When enabled we'll migrate all of your alert rules and notification channels to the new system. New alert rules will be created and your notification channels will be converted into an Alertmanager configuration. Previous data is preserved to enable backwards compatibility but new data is removed.``` @@ -1096,20 +1118,33 @@ # The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m. ;ha_push_pull_interval = "60s" -# Enable or disable alerting rule execution. The alerting UI remains visible. This option has a legacy version in the `[alerting]` section that takes precedence. +# Enable or disable alerting rule execution. The alerting UI remains visible. ;execute_alerts = true -# Alert evaluation timeout when fetching data from the datasource. This option has a legacy version in the `[alerting]` section that takes precedence. +# Alert evaluation timeout when fetching data from the datasource. # The timeout string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m. ;evaluation_timeout = 30s # Number of times we'll attempt to evaluate an alert rule before giving up on that evaluation. The default value is 1. ;max_attempts = 1 -# Minimum interval to enforce between rule evaluations. Rules will be adjusted if they are less than this value or if they are not multiple of the scheduler interval (10s). Higher values can help with resource management as we'll schedule fewer evaluations over time. This option has a legacy version in the `[alerting]` section that takes precedence. +# Minimum interval to enforce between rule evaluations. Rules will be adjusted if they are less than this value or if they are not multiple of the scheduler interval (10s). Higher values can help with resource management as we'll schedule fewer evaluations over time. # The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m. ;min_interval = 10s +# This is an experimental option to add parallelization to saving alert states in the database. +# It configures the maximum number of concurrent queries per rule evaluated. The default value is 1 +# (concurrent queries per rule disabled). +;max_state_save_concurrency = 1 + +# If the feature flag 'alertingSaveStatePeriodic' is enabled, this is the interval that is used to persist the alerting instances to the database. +# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m. +;state_periodic_save_interval = 5m + +# Disables the smoothing of alert evaluations across their evaluation window. +# Rules will evaluate in sync. +;disable_jitter = false + [unified_alerting.reserved_labels] # Comma-separated list of reserved labels added by the Grafana Alerting engine that should be disabled. # For example: `disabled_labels=grafana_folder` @@ -1160,54 +1195,25 @@ # Optional password for basic authentication on requests sent to Loki. Can be left blank. ; loki_basic_auth_password = "mypass" +# For "loki" only. +# Optional max query length for queries sent to Loki. Default is 721h which matches the default Loki value. +; loki_max_query_length = 360h + [unified_alerting.state_history.external_labels] # Optional extra labels to attach to outbound state history records or log streams. # Any number of label key-value-pairs can be provided. ; mylabelkey = mylabelvalue -[unified_alerting.upgrade] -# If set to true when upgrading from legacy alerting to Unified Alerting, grafana will first delete all existing -# Unified Alerting resources, thus re-upgrading all organizations from scratch. If false or unset, organizations that -# have previously upgraded will not lose their existing Unified Alerting data when switching between legacy and -# Unified Alerting. Should be kept false when not needed as it may cause unintended data-loss if left enabled. -;clean_upgrade = false - -#################################### Alerting ############################ -[alerting] -# Disable legacy alerting engine & UI features -;enabled = false - -# Makes it possible to turn off alert execution but alerting UI is visible -;execute_alerts = true - -# Default setting for new alert rules. Defaults to categorize error and timeouts as alerting. (alerting, keep_state) -;error_or_timeout = alerting - -# Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok) -;nodata_or_nullvalues = no_data - -# Alert notifications can include images, but rendering many images at the same time can overload the server -# This limit will protect the server from render overloading and make sure notifications are sent out quickly -;concurrent_render_limit = 5 - -# Default setting for alert calculation timeout. Default value is 30 -;evaluation_timeout_seconds = 30 - -# Default setting for alert notification timeout. Default value is 30 -;notification_timeout_seconds = 30 - -# Default setting for max attempts to sending alert notifications. Default value is 3 -;max_attempts = 3 - -# Makes it possible to enforce a minimal interval between evaluations, to reduce load on the backend -;min_interval_seconds = 1 +[unified_alerting.state_history.annotations] +# This section controls retention of annotations automatically created while evaluating alert rules +# when alerting state history backend is configured to be annotations (a setting [unified_alerting.state_history].backend # Configures for how long alert annotations are stored. Default is 0, which keeps them forever. -# This setting should be expressed as a duration. Examples: 6h (hours), 10d (days), 2w (weeks), 1M (month). -;max_annotation_age = +# This setting should be expressed as an duration. Ex 6h (hours), 10d (days), 2w (weeks), 1M (month). +max_age = # Configures max number of alert annotations that Grafana stores. Default value is 0, which keeps all alert annotations. -;max_annotations_to_keep = +max_annotations_to_keep = #################################### Annotations ######################### [annotations] @@ -1620,4 +1626,3 @@ [public_dashboards] # Set to false to disable public dashboards ;enabled = true - diff --git a/ISSUE_TRIAGE.md b/contribute/ISSUE_TRIAGE.md similarity index 97% rename from ISSUE_TRIAGE.md rename to contribute/ISSUE_TRIAGE.md index 336b6497a25ac..70ee5c5e7bc83 100644 --- a/ISSUE_TRIAGE.md +++ b/contribute/ISSUE_TRIAGE.md @@ -4,7 +4,7 @@ The main goal of issue triage is to categorize all incoming Grafana issues and m > **Note:** This information is for Grafana project Maintainers, Owners, and Admins. If you are a Contributor, then you will not be able to perform most of the tasks in this topic. -The core maintainers of the Grafana project are responsible for categorizing all incoming issues and delegating any critical or important issue to other maintainers. Currently one maintainer each week is responsible. Besides that part, triage provides an important way to contribute to an open source project. +The core maintainers of the Grafana project are responsible for categorizing all incoming issues and delegating any critical or important issue to other maintainers. Currently, one maintainer each week is responsible. Besides that part, triage provides an important way to contribute to an open source project. Triage helps ensure issues resolve quickly by: @@ -136,13 +136,13 @@ To make it easier for everyone to understand and find issues they're searching f Depending on the issue, you might not feel all this information is needed. Use your best judgement. If you cannot triage an issue using what its author provided, explain kindly to the author that they must provide the above information to clarify the problem. Label issue with `needs more info` and add any related `area/*` or `datasource/*` labels. Alternatively, use `bot/needs more info` label and the Grafana bot will request it for you. -If the author provides the standard information but you are still unable to triage the issue, request additional information. Do this kindly and politely because you are asking for more of the author's time. +If the author provides the standard information, but you are still unable to triage the issue, request additional information. Do this kindly and politely because you are asking for more of the author's time. If the author does not respond to the requested information within the timespan of a week, close the issue with a kind note stating that the author can request for the issue to be reopened when the necessary information is provided. When you feel you have all the information needed you're ready to [categorizing the issue](#3-categorizing-an-issue). -If you receive a notification with additional information provided but you are not anymore on issue triage and you feel you do not have time to handle it, you should delegate it to the current person on issue triage. +If you receive a notification with additional information provided, but you are not anymore on issue triage and you feel you do not have time to handle it, you should delegate it to the current person on issue triage. ## 3. Categorizing an issue @@ -312,7 +312,7 @@ When an issue has all basic information provided, but the triage responsible hav Investigating issues can be a very time consuming task, especially for the maintainers, given the huge number of combinations of plugins, data sources, platforms, databases, browsers, tools, hardware, integrations, versions and cloud services, etc that are being used with Grafana. There is a certain number of combinations that are more common than others, and these are in general easier for maintainers to investigate. -For some other combinations it may not be possible at all for a maintainer to setup a proper test environment to investigate the issue. In these cases we really appreciate any help we can get from the community. Otherwise the issue is highly likely to be closed. +For some other combinations it may not be possible at all for a maintainer to setup a proper test environment to investigate the issue. In these cases we really appreciate any help we can get from the community. Otherwise, the issue is highly likely to be closed. Even if you don't have the time or knowledge to investigate an issue we highly recommend that you [upvote](https://github.blog/2016-03-10-add-reactions-to-pull-requests-issues-and-comments) the issue if you happen to have the same problem. If you have further details that may help investigating the issue please provide as much information as possible. diff --git a/UPGRADING_DEPENDENCIES.md b/contribute/UPGRADING_DEPENDENCIES.md similarity index 100% rename from UPGRADING_DEPENDENCIES.md rename to contribute/UPGRADING_DEPENDENCIES.md diff --git a/contribute/backend/errors.md b/contribute/backend/errors.md index 1d3ba3c9228f4..2d79cb8a6e141 100644 --- a/contribute/backend/errors.md +++ b/contribute/backend/errors.md @@ -109,7 +109,7 @@ fully Go modules compatible, but can be viewed using ### Error source You can optionally specify an error source that describes from where an -error originates. By default it's _server_ and means the error originates +error originates. By default, it's _server_ and means the error originates from within the application, e.g. Grafana. The `errutil.WithDownstream()` option may be appended to the NewBase function call to denote an error originates from a _downstream_ server/service. The error source information diff --git a/contribute/backend/instrumentation.md b/contribute/backend/instrumentation.md index a845825828a7b..d6d50c19c810e 100644 --- a/contribute/backend/instrumentation.md +++ b/contribute/backend/instrumentation.md @@ -80,7 +80,7 @@ func doSomething(ctx context.Context) { ### Enable certain log levels for certain loggers -During development it's convenient to enable certain log level, e.g. debug, for certain loggers to minimize the generated log output and make it easier to find things. See [[log.filters]](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#filters) for information how to configure this. +During development, it's convenient to enable certain log level, e.g. debug, for certain loggers to minimize the generated log output and make it easier to find things. See [[log.filters]](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#filters) for information how to configure this. It's also possible to configure multiple loggers: diff --git a/contribute/backend/style-guide.md b/contribute/backend/style-guide.md index 17a063d3dc521..a0877c3b44b63 100644 --- a/contribute/backend/style-guide.md +++ b/contribute/backend/style-guide.md @@ -29,13 +29,40 @@ We value clean and readable code, that is loosely coupled and covered by unit te Tests must use the standard library, `testing`. For assertions, prefer using [testify](https://github.com/stretchr/testify). +### Test Suite and Database Tests + +We have a [testsuite](https://github.com/grafana/grafana/tree/main/pkg/tests/testsuite) package which provides utilities for package-level setup and teardown. + +Currently, this is just used to ensure that test databases are correctly set up and torn down, but it also provides a place we can attach future tasks. + +Each package SHOULD include a [TestMain](https://pkg.go.dev/testing#hdr-Main) function that calls `testsuite.Run(m)`: + +```go +package mypkg + +import ( + "testing" + + "github.com/grafana/grafana/pkg/tests/testsuite" +) + +func TestMain(m *testing.M) { + testsuite.Run(m) +} +``` + +You only need to define `TestMain` in one `_test.go` file within each package. + +> Warning +> For tests that use the database, you MUST define `TestMain` so that the test databases can be cleaned up properly. + ### Integration Tests We run unit and integration tests separately, to help keep our CI pipeline running smoothly and provide a better developer experience. To properly mark a test as being an integration test, you must format your test function definition as follows, with the function name starting with `TestIntegration` and the check for `testing.Short()`: -``` +```go func TestIntegrationFoo(t *testing.T) { if testing.Short() { t.Skip("skipping integration test") @@ -51,7 +78,7 @@ func TestIntegrationFoo(t *testing.T) { Use respectively [`assert.*`](https://github.com/stretchr/testify#assert-package) functions to make assertions that should _not_ halt the test ("soft checks") and [`require.*`](https://github.com/stretchr/testify#require-package) -functions to make assertions that _should_ halt the test ("hard checks"). Typically you want to use the latter type of +functions to make assertions that _should_ halt the test ("hard checks"). Typically, you want to use the latter type of check to assert that errors have or have not happened, since continuing the test after such an assertion fails is chaotic (the system under test will be in an undefined state) and you'll often have segfaults in practice. @@ -66,8 +93,8 @@ Use [`t.Cleanup`](https://golang.org/pkg/testing/#T.Cleanup) to clean up resourc ### Mock -Optionally, we use [`mock.Mock`](https://github.com/stretchr/testify#mock-package) package to write mocks. This is -useful when you expect different behaviours of the same function. +Optionally, we use [`mock.Mock`](https://github.com/stretchr/testify#mock-package) package to write mocks. +This is useful when you expect different behaviors of the same function. #### Tips @@ -126,7 +153,7 @@ assert.Equal(t, resp.Message, objectToReturn.Message) #### Mockery -When an interface to test is too big, it's annoying to mock each function manually. To avoid this, you can +When an interface to test is too big, it may be toilsome to mock each function manually. To avoid this, you can use [`mockery`](https://github.com/vektra/mockery) library to generate the mocks. The command is like the following (there are more options documented if you need to use another one): diff --git a/contribute/create-pull-request.md b/contribute/create-pull-request.md index 7fe1023a8979e..0e41754ea486f 100644 --- a/contribute/create-pull-request.md +++ b/contribute/create-pull-request.md @@ -124,7 +124,7 @@ If you're unsure, see the existing [changelog](https://github.com/grafana/grafan The pull request title should be formatted according to `: ` (Both "Area" and "Summary" should start with a capital letter). -The Grafana team _squashes_ all commits into one when we accept a pull request. The title of the pull request becomes the subject line of the squashed commit message. We still encourage contributors to write informative commit messages, as they becomes a part of the Git commit body. +The Grafana team _squashes_ all commits into one when we accept a pull request. The title of the pull request becomes the subject line of the squashed commit message. We still encourage contributors to write informative commit messages, as they become a part of the Git commit body. We use the pull request title when we generate change logs for releases. As such, we strive to make the title as informative as possible. @@ -133,7 +133,7 @@ We use the pull request title when we generate change logs for releases. As such ## Configuration changes -If your PR includes configuration changes, all of the following files must be changed correspondingly: +If your PR includes configuration changes, all the following files must be changed correspondingly: - conf/defaults.ini - conf/sample.ini diff --git a/contribute/deprecation-policy.md b/contribute/deprecation-policy.md index a49016588a147..3c305833ab1a3 100644 --- a/contribute/deprecation-policy.md +++ b/contribute/deprecation-policy.md @@ -26,6 +26,6 @@ Grafana employees can find more details in our internal docs. ## Announced deprecations. -| Name | Annoucement Date | Disabling date | Removal Date | Description | Status | -| ------------------------------------------------------------------------ | ---------------- | -------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------- | ------- | -| [Support for Mysql 5.7](https://github.com/grafana/grafana/issues/68446) | 2023-05-15 | October 2023 | | MySQL 5.7 is being deprecated in October 2023 and Grafana's policy is to test against the officially supported version. | Planned | +| Name | Announcement Date | Disabling date | Removal Date | Description | Status | +| ------------------------------------------------------------------------ | ----------------- | -------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------- | ------- | +| [Support for Mysql 5.7](https://github.com/grafana/grafana/issues/68446) | 2023-05-15 | October 2023 | | MySQL 5.7 is being deprecated in October 2023 and Grafana's policy is to test against the officially supported version. | Planned | diff --git a/contribute/developer-guide.md b/contribute/developer-guide.md index 20163d8dbfca0..650b966626304 100644 --- a/contribute/developer-guide.md +++ b/contribute/developer-guide.md @@ -8,8 +8,8 @@ Make sure you have the following dependencies installed before setting up your d - [Git](https://git-scm.com/) - [Go](https://golang.org/dl/) (see [go.mod](../go.mod#L3) for minimum required version) -- [Node.js (Long Term Support)](https://nodejs.org) -- [Yarn](https://yarnpkg.com) +- [Node.js (Long Term Support)](https://nodejs.org), with [corepack enabled](https://nodejs.org/api/corepack.html#enabling-the-feature). See [.nvmrc](../.nvmrc) for supported version. It's recommend you use a version manager such as [nvm](https://github.com/nvm-sh/nvm), [fnm](https://github.com/Schniz/fnm), or similar. +- GCC (required for Cgo dependencies) ### macOS @@ -19,7 +19,7 @@ We recommend using [Homebrew](https://brew.sh/) for installing any missing depen brew install git brew install go brew install node@20 -npm install -g yarn +corepack enable ``` ### Windows @@ -37,14 +37,6 @@ For alternative ways of cloning the Grafana repository, please refer to [GitHub' **Warning:** Do not use `go get` to download Grafana. Recent versions of Go have added behavior which isn't compatible with the way the Grafana repository is structured. -### Configure Editors - -For some IDEs, additional configuration may be needed for Typescript to work with [Yarn plug'n'play](https://yarnpkg.com/features/pnp). -For [VSCode](https://yarnpkg.com/getting-started/editor-sdks#vscode) and [Vim](https://yarnpkg.com/getting-started/editor-sdks#vim), -it's as easy as running `yarn dlx @yarnpkg/sdks vscode` or `yarn dlx @yarnpkg/sdks vim`, respectively. - -More information can be found [here](https://yarnpkg.com/getting-started/editor-sdks). - ### Configure precommit hooks We use pre-commit hooks (via [lefthook](https://github.com/evilmartians/lefthook)) to lint, fix, and format code as you commit your changes. Previously the Grafana repository automatically installed these hook when you did `yarn install`, but they are now opt in for all contributors @@ -84,6 +76,7 @@ After the command has finished, we can start building our source code: yarn start ``` +This command will generate sass theme files, build all external plugins, then build the frontend assets. Once `yarn start` has built the assets, it will continue to do so whenever any of the files change. This means you don't have to manually build the assets every time you change the code. > Troubleshooting: if your first build works, but after pulling updates you see unexpected errors in the "Type-checking in progress..." stage, these can be caused by the [tsbuildinfo cache supporting incremental builds](https://www.typescriptlang.org/tsconfig#incremental). You can `rm tsconfig.tsbuildinfo` and re-try. @@ -159,7 +152,7 @@ go run build.go test ### Run SQLLite, PostgreSQL and MySQL integration tests -By default grafana runs SQLite, to run test with SQLite +By default, grafana runs SQLite, to run test with SQLite ```bash go test -covermode=atomic -tags=integration ./pkg/... @@ -179,9 +172,11 @@ make test-go-integration-postgres ### Run end-to-end tests -The end to end tests in Grafana use [Cypress](https://www.cypress.io/) to run automated scripts in a headless Chromium browser. Read more about our [e2e framework](/contribute/style-guides/e2e.md). +The end to end tests in Grafana use [Cypress](https://www.cypress.io/) and [Playwright](https://playwright.dev/) to run automated scripts in a browser. Read more about our Cypress [e2e framework](/contribute/style-guides/e2e.md). + +#### Running Cypress tests -To run the tests: +To run all tests in a headless Chromium browser. ``` yarn e2e @@ -205,6 +200,34 @@ To choose a single test to follow in the browser as it runs, use `yarn e2e:dev` yarn e2e:dev ``` +#### To run the Playwright tests: + +**Note:** If you're using VS Code as your development editor, it's recommended to install the [Playwright test extension](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright). It allows you to run, debug and generate Playwright tests from within the editor. For more information about the extension and how to install it, refer to the [Playwright documentation](https://playwright.dev/docs/getting-started-vscode). + +Each version of Playwright needs specific versions of browser binaries to operate. You will need to use the Playwright CLI to install these browsers. + +``` +yarn playwright install chromium +``` + +To run all tests in a headless Chromium browser and display results in the terminal. + +``` +yarn e2e:playwright +``` + +For a better developer experience, open the Playwright UI where you can easily walk through each step of the test and visually see what was happening before, during and after each step. + +``` +yarn e2e:playwright:ui +``` + +To open the HTML reporter for the last test run session. + +``` +yarn e2e:playwright:report +``` + ## Configure Grafana for development The default configuration, `defaults.ini`, is located in the `conf` directory. @@ -259,6 +282,12 @@ The resulting image will be tagged as grafana/grafana:dev. Are you having issues with setting up your environment? Here are some tips that might help. +### IDE configuration + +Configure your IDE to use the Typescript version from the Grafana repository. The version should match the Typescript version in the package.json file, and is typically at the path `node_modules/.bin/tsc`. + +Previously Grafana used Yarn PnP to install frontend dependencies, which required additional special IDE configuration. This is no longer the case. If you have custom paths in your IDE for ESLint, Prettier, or Typescript, you can now remove them and use the defaults from node_modules. + ### Too many open files when running `make run` Depending on your environment, you may have to increase the maximum number of open files allowed. For the rest of this section, we will assume you are on a Unix like OS (e.g. Linux/macOS), where you can control the maximum number of open files through the [ulimit](https://ss64.com/bash/ulimit.html) shell command. @@ -302,7 +331,7 @@ For some people, typically using the bash shell, ulimit fails with an error simi ulimit: open files: cannot modify limit: Operation not permitted ``` -If that happens to you, chances are you've already set a lower limit and your shell won't let you set a higher one. Try looking in your shell initialization files (~/.bashrc typically), if there's already a ulimit command that you can tweak. +If that happens to you, chances are you've already set a lower limit and your shell won't let you set a higher one. Try looking in your shell initialization files (~/.bashrc typically), if there's already an ulimit command that you can tweak. ## Next steps diff --git a/contribute/drone-pipeline.md b/contribute/drone-pipeline.md index 2d0b74db04698..b75ab2649c7d1 100644 --- a/contribute/drone-pipeline.md +++ b/contribute/drone-pipeline.md @@ -14,4 +14,4 @@ The Drone pipelines are built with [Starlark](https://github.com/bazelbuild/star - Open a PR where you can do test runs for your changes. If you need to experiment with secrets, create a PR in the [grafana-ci-sandbox repo](https://github.com/grafana/grafana-ci-sandbox), before opening a PR in the main repo. - Run `make drone` after making changes to the Starlark files. This builds the `.drone.yml` file. -For further questions, reach out to the grafana-delivery squad. +For further questions, reach out to the grafana-release-guild squad. diff --git a/contribute/engineering/terminology.md b/contribute/engineering/terminology.md index 4a833dd7fb23f..5b28cb7f4b151 100644 --- a/contribute/engineering/terminology.md +++ b/contribute/engineering/terminology.md @@ -6,7 +6,7 @@ This document defines technical terms used in Grafana. ## TLS/SSL -The acronyms [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) (Transport Layer Security and +The acronyms [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) (Transport Layer Security) and [SSL](https://en.wikipedia.org/wiki/SSL) (Secure Socket Layer) are both used to describe the HTTPS security layer, and are in practice synonymous. However, TLS is considered the current name for the technology, and SSL is considered [deprecated](https://tools.ietf.org/html/rfc7568). diff --git a/contribute/internationalization.md b/contribute/internationalization.md index 243db35efe21a..8d32a65e3edca 100644 --- a/contribute/internationalization.md +++ b/contribute/internationalization.md @@ -9,7 +9,8 @@ Grafana uses the [i18next](https://www.i18next.com/) framework for managing tran - Use `Go to {{ pageTitle }}` in code to add a translatable phrase - Translations are stored in JSON files in `public/locales/{locale}/grafana.json` - If a particular phrase is not available in the a language then it will fall back to English -- To update phrases in English, edit the default phrase in both the component's source and the [English grafana.json message catalogue](../public/locales/en-US/grafana.json), then run `yarn i18n:extract`. +- To update phrases in English, edit the default phrase in the component's source and then run `yarn i18n:extract`. +- The single source of truth for en-US (fallback language) is in grafana/grafana, the single source of truth for any translated language is Crowdin - To update phrases in any translated language, edit the phrase in Crowdin. Do not edit the `{locale}/grafana.json` ## How to add a new translation phrase @@ -40,7 +41,8 @@ const ErrorMessage = ({ id, message }) => There 2. Upon reload, the default English phrase will appear on the page. -3. Before submitting your PR, run the `yarn i18n:extract` command to extract the messages you added into the `grafana.json` file and make them available for translation. +3. Before submitting your PR, run the `yarn i18n:extract` command to extract the messages you added into the `public/locales/en-US/grafana.json` file and make them available for translation. + **Note:** All other languages will receive their translations when they are ready to be downloaded from Crowdin. ### Plain JS usage @@ -64,20 +66,20 @@ While the `t` function can technically be used outside of React functions (e.g, ## How to add a new language -1. Add new locale in Crowdin and sync files to repo +1. Add new locale in Crowdin and download files to repo 1. Grafana OSS Crowdin project -> "dot dot dot" menu in top right -> Target languages - 2. Grafana OSS Crowdin project -> Integrations -> Github -> Sync Now - 3. If Crowdin's locale code is different from our IETF language tag, add a custom mapping in Project Settings -> Language mapping -2. Update `public/app/core/internationalization/constants.ts` (add new constant, and add to `LOCALES`) -3. Update `public/locales/i18next-parser.config.js` to add the new locale to `locales` -4. Run `yarn i18n:extract` and commit the result + 2. If Crowdin's locale code is different from our IETF language tag, add a custom mapping in Project Settings -> Language mapping + 3. GH repo grafana/grafana -> Actions -> Choose `Crowdin Download Action` -> Run workflow -> Creates a PR automatically +2. Review the PR `I18n: Download translations from Crowdin` +3. Update `public/app/core/internationalization/constants.ts` (add new constant, and add to `LOCALES`) and add changes to the open PR +4. Approve and merge the PR ## How translations work in Grafana Grafana uses the [i18next](https://www.i18next.com/) framework for managing translating phrases in the Grafana frontend. It: - Marks up phrases within our code for extraction -- Extracts phrases into messages catalogues for translating in external systems +- Extracts phrases into the default messages catalogue for translating in external systems - Manages the user's locale and putting the translated phrases in the UI Grafana will load the message catalogue JSON before the initial render. diff --git a/contribute/style-guides/frontend.md b/contribute/style-guides/frontend.md index c25b671a8924f..07055362fffc3 100644 --- a/contribute/style-guides/frontend.md +++ b/contribute/style-guides/frontend.md @@ -180,7 +180,7 @@ const getStyles = (theme: GrafanaTheme2) => ({ }); ``` -Use hook useStyles2(getStyles) to memoize the styles generation and try to avoid passing props to the the getStyles function and instead compose classes using emotion cx function. +Use hook useStyles2(getStyles) to memoize the styles generation and try to avoid passing props to the getStyles function and instead compose classes using emotion cx function. #### Use `ALL_CAPS` for constants. diff --git a/crowdin.yml b/crowdin.yml index 1cdf69254dfa2..0d1bab25f7c40 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,8 +1,5 @@ files: - - source: /public/locales/en-US/grafana.json - translation: /public/locales/%locale%/%original_file_name% - type: i18next_json -pull_request_title: 'I18n: Crowdin sync' -pull_request_labels: - - area/internationalization - - no-changelog + - type: i18next_json +# The following are pulled from env variables +project_id_env: CROWDIN_PROJECT_ID +api_token_env: CROWDIN_PERSONAL_TOKEN diff --git a/devenv/bulk_alerting_dashboards/bulk_alerting_dashboards.yaml b/devenv/bulk_alerting_dashboards/bulk_alerting_dashboards.yaml deleted file mode 100644 index 1ede5dcd30a12..0000000000000 --- a/devenv/bulk_alerting_dashboards/bulk_alerting_dashboards.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: 1 - -providers: - - name: 'Bulk alerting dashboards' - folder: 'Bulk alerting dashboards' - type: file - options: - path: devenv/bulk_alerting_dashboards - diff --git a/devenv/bulk_alerting_dashboards/dashboard.libsonnet b/devenv/bulk_alerting_dashboards/dashboard.libsonnet deleted file mode 100644 index d19e1e1e45d6b..0000000000000 --- a/devenv/bulk_alerting_dashboards/dashboard.libsonnet +++ /dev/null @@ -1,169 +0,0 @@ -{ - alertingDashboard(dashboardCounter, datasourceCounter):: { - title: "alerting-title-" + dashboardCounter, - editable: true, - gnetId: null, - graphTooltip: 0, - id: null, - links: [], - panels: [ - { - alert: { - conditions: [ - { - evaluator: { - params: [ - 65 - ], - type: "gt" - }, - operator: { - type: "and" - }, - query: { - params: [ - "A", - "5m", - "now" - ] - }, - reducer: { - params: [], - type: "avg" - }, - type: "query" - } - ], - executionErrorState: "alerting", - frequency: "24h", - handler: 1, - name: "bulk alerting " + dashboardCounter, - noDataState: "no_data", - notifications: [] - }, - aliasColors: {}, - bars: false, - dashLength: 10, - dashes: false, - datasource: "gfdev-bulkalerting-" + datasourceCounter, - fill: 1, - gridPos: { - h: 9, - w: 12, - x: 0, - y: 0 - }, - id: 1, - legend: { - avg: false, - current: false, - max: false, - min: false, - show: true, - total: false, - values: false - }, - lines: true, - linewidth: 1, - nullPointMode: "null", - percentage: false, - pointradius: 5, - points: false, - renderer: "flot", - seriesOverrides: [], - spaceLength: 10, - stack: false, - steppedLine: false, - targets: [ - { - expr: "go_goroutines", - format: "time_series", - intervalFactor: 1, - refId: "A" - } - ], - thresholds: [ - { - colorMode: "critical", - fill: true, - line: true, - op: "gt", - value: 50 - } - ], - timeFrom: null, - timeShift: null, - title: "Panel Title", - tooltip: { - shared: true, - sort: 0, - value_type: "individual" - }, - type: "graph", - xaxis: { - buckets: null, - mode: "time", - name: null, - show: true, - values: [] - }, - yaxes: [ - { - format: "short", - label: null, - logBase: 1, - max: null, - min: null, - show: true - }, - { - format: "short", - label: null, - logBase: 1, - max: null, - min: null, - show: true - } - ] - } - ], - schemaVersion: 16, - tags: [], - templating: { - list: [] - }, - time: { - from: "now-6h", - to: "now" - }, - timepicker: { - refresh_intervals: [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - time_options: [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - timezone: "", - uid: null, - version: 0 - }, -} - diff --git a/devenv/bulk_alerting_dashboards/datasources.jsonnet b/devenv/bulk_alerting_dashboards/datasources.jsonnet deleted file mode 100644 index 453e1a812bfe6..0000000000000 --- a/devenv/bulk_alerting_dashboards/datasources.jsonnet +++ /dev/null @@ -1,14 +0,0 @@ -local arr = std.range(1, 100); - -{ - "apiVersion": 1, - "datasources": [ - { - "name": 'gfdev-bulkalerting-' + counter, - "type": "prometheus", - "access": "proxy", - "url": "http://localhost:9090" - } - for counter in arr - ], -} diff --git a/devenv/dev-dashboards/alerting/testdata_alerts.json b/devenv/dev-dashboards/alerting/testdata_alerts.json deleted file mode 100644 index b76ad5ff9ed10..0000000000000 --- a/devenv/dev-dashboards/alerting/testdata_alerts.json +++ /dev/null @@ -1,806 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "id": 147, - "links": [], - "liveNow": false, - "panels": [ - { - "alert": { - "alertRuleTags": {}, - "conditions": [ - { - "evaluator": { - "params": [ - 177 - ], - "type": "gt" - }, - "query": { - "params": [ - "A", - "5m", - "now" - ] - }, - "reducer": { - "params": [], - "type": "avg" - }, - "type": "query" - } - ], - "enabled": true, - "executionErrorState": "alerting", - "for": "0m", - "frequency": "60s", - "handler": 1, - "name": "TestData - Always Alerting", - "noDataState": "no_data", - "notifications": [] - }, - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "testdata", - "uid": "PD8C576611E62080A" - }, - "editable": true, - "error": false, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 10, - "x": 0, - "y": 0 - }, - "hiddenSeries": false, - "id": 4, - "isNew": true, - "legend": { - "show": true - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "9.4.0-pre", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "testdata", - "uid": "PD8C576611E62080A" - }, - "refId": "A", - "scenario": "random_walk", - "scenarioId": "csv_metric_values", - "stringInput": "200,445,100,150,200,220,190", - "target": "" - } - ], - "thresholds": [ - { - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "value": 177 - } - ], - "timeRegions": [], - "title": "Always Alerting", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "", - "logBase": 1, - "min": "0", - "show": true - }, - { - "format": "short", - "label": "", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "alert": { - "alertRuleTags": {}, - "conditions": [ - { - "evaluator": { - "params": [ - 100 - ], - "type": "gt" - }, - "operator": { - "type": "and" - }, - "query": { - "params": [ - "A", - "5m", - "now" - ] - }, - "reducer": { - "params": [], - "type": "avg" - }, - "type": "query" - } - ], - "executionErrorState": "alerting", - "for": "900000h", - "frequency": "1m", - "handler": 1, - "name": "TestData - Always Pending", - "noDataState": "no_data", - "notifications": [] - }, - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "testdata", - "uid": "PD8C576611E62080A" - }, - "editable": true, - "error": false, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 10, - "x": 10, - "y": 0 - }, - "hiddenSeries": false, - "id": 7, - "isNew": true, - "legend": { - "show": true - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "testdata", - "uid": "PD8C576611E62080A" - }, - "refId": "A", - "scenario": "random_walk", - "scenarioId": "csv_metric_values", - "stringInput": "200,445,100,150,200,220,190", - "target": "" - } - ], - "thresholds": [ - { - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "value": 100 - } - ], - "timeRegions": [], - "title": "Always Pending with For", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "", - "logBase": 1, - "min": "0", - "show": true - }, - { - "format": "short", - "label": "", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "datasource": { - "type": "testdata", - "uid": "PD8C576611E62080A" - }, - "gridPos": { - "h": 20, - "w": 4, - "x": 20, - "y": 0 - }, - "id": 9, - "targets": [ - { - "datasource": { - "type": "testdata", - "uid": "PD8C576611E62080A" - }, - "refId": "A" - } - ], - "title": "Alert list", - "type": "alertlist" - }, - { - "alert": { - "alertRuleTags": {}, - "conditions": [ - { - "evaluator": { - "params": [ - 177 - ], - "type": "gt" - }, - "operator": { - "type": "and" - }, - "query": { - "params": [ - "A", - "15m", - "now" - ] - }, - "reducer": { - "params": [], - "type": "avg" - }, - "type": "query" - } - ], - "executionErrorState": "alerting", - "for": "1m", - "frequency": "1m", - "handler": 1, - "name": "TestData - Always Alerting For", - "noDataState": "no_data", - "notifications": [] - }, - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "testdata", - "uid": "PD8C576611E62080A" - }, - "editable": true, - "error": false, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 10, - "x": 0, - "y": 7 - }, - "hiddenSeries": false, - "id": 6, - "isNew": true, - "legend": { - "show": true - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "9.4.0-pre", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "testdata", - "uid": "PD8C576611E62080A" - }, - "refId": "A", - "scenario": "random_walk", - "scenarioId": "csv_metric_values", - "stringInput": "200,445,100,150,200,220,190", - "target": "" - } - ], - "thresholds": [ - { - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "value": 177 - } - ], - "timeRegions": [], - "title": "Always Alerting with For", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "", - "logBase": 1, - "min": "0", - "show": true - }, - { - "format": "short", - "label": "", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "alert": { - "conditions": [ - { - "evaluator": { - "params": [ - 60 - ], - "type": "gt" - }, - "query": { - "params": [ - "A", - "5m", - "now" - ] - }, - "reducer": { - "params": [], - "type": "avg" - }, - "type": "query" - } - ], - "enabled": true, - "frequency": "60s", - "handler": 1, - "name": "TestData - Always OK", - "noDataState": "no_data", - "notifications": [] - }, - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "testdata", - "uid": "PD8C576611E62080A" - }, - "editable": true, - "error": false, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 6, - "w": 10, - "x": 10, - "y": 7 - }, - "hiddenSeries": false, - "id": 3, - "isNew": true, - "legend": { - "show": true - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "9.4.0-pre", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "testdata", - "uid": "PD8C576611E62080A" - }, - "refId": "A", - "scenario": "random_walk", - "scenarioId": "csv_metric_values", - "stringInput": "1,20,90,30,5,0", - "target": "" - } - ], - "thresholds": [ - { - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "value": 60 - } - ], - "timeRegions": [], - "title": "Always OK", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "", - "logBase": 1, - "max": "125", - "min": "0", - "show": true - }, - { - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "alert": { - "conditions": [ - { - "evaluator": { - "params": [ - 1 - ], - "type": "gt" - }, - "operator": { - "type": "and" - }, - "query": { - "params": [ - "A", - "15m", - "now" - ] - }, - "reducer": { - "params": [], - "type": "avg" - }, - "type": "query" - } - ], - "executionErrorState": "alerting", - "for": "5m", - "frequency": "1m", - "handler": 1, - "name": "TestData - No data", - "noDataState": "no_data", - "notifications": [] - }, - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "testdata", - "uid": "PD8C576611E62080A" - }, - "editable": true, - "error": false, - "fieldConfig": { - "defaults": { - "links": [] - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 10, - "x": 0, - "y": 13 - }, - "hiddenSeries": false, - "id": 5, - "isNew": true, - "legend": { - "show": true - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "9.4.0-pre", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "testdata", - "uid": "PD8C576611E62080A" - }, - "refId": "A", - "scenario": "random_walk", - "scenarioId": "no_data_points", - "stringInput": "", - "target": "" - } - ], - "thresholds": [ - { - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "value": 1 - } - ], - "timeRegions": [], - "title": "No data", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 0, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": "", - "logBase": 1, - "min": "0", - "show": true - }, - { - "format": "short", - "label": "", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - } - ], - "schemaVersion": 37, - "tags": [ - "gdev", - "alerting" - ], - "templating": { - "list": [ - { - "current": { - "text": "TestData", - "value": "TestData" - }, - "hide": 0, - "includeAll": false, - "label": "alert name filter", - "multi": false, - "name": "namefilter", - "options": [ - { - "selected": true, - "text": "TestData", - "value": "TestData" - }, - { - "selected": false, - "text": "Prometheus", - "value": "Prometheus" - }, - { - "selected": false, - "text": "Graphite", - "value": "Graphite" - } - ], - "query": "TestData,Prometheus,Graphite", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { - "from": "now-6h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "browser", - "title": "Alerting with TestData", - "uid": "7MeksYbmk", - "version": 1, - "weekStart": "" -} diff --git a/devenv/dev-dashboards/datasource-loki/loki_query_splitting.json b/devenv/dev-dashboards/datasource-loki/loki_query_splitting.json index 35285857acc69..804b354ea9da0 100644 --- a/devenv/dev-dashboards/datasource-loki/loki_query_splitting.json +++ b/devenv/dev-dashboards/datasource-loki/loki_query_splitting.json @@ -1,900 +1,1139 @@ { - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "id": 7004, - "links": [], - "liveNow": false, - "panels": [ + "annotations": { + "list": [ { + "builtIn": 1, "datasource": { - "type": "loki", - "uid": "gdev-loki" + "type": "grafana", + "uid": "-- Grafana --" }, - "description": "Transformations:\n- Count\n- Sort by\n- Limit 10", - "gridPos": { - "h": 7, - "w": 12, - "x": 0, - "y": 0 + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" + }, + "description": "Transformations:\n- Count\n- Sort by\n- Limit 10", + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "dedupStrategy": "none", + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showLabels": false, + "showTime": false, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" + }, + "editorMode": "code", + "expr": "{place=\"luna\"} | logfmt | label=\"val2\" | float > 60", + "maxLines": 5000, + "queryType": "range", + "refId": "A" + } + ], + "title": "Split logs", + "transformations": [ + { + "id": "calculateField", + "options": { + "alias": "id_count", + "mode": "reduceRow", + "reduce": { + "include": [ + "id" + ], + "reducer": "count" + }, + "replaceFields": false + } }, - "id": 1, - "options": { - "dedupStrategy": "none", - "enableLogDetails": true, - "prettifyLogMessage": false, - "showCommonLabels": false, - "showLabels": false, - "showTime": false, - "sortOrder": "Descending", - "wrapLogMessage": false + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "desc": true, + "field": "tsNs" + } + ] + } }, - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" - }, - "editorMode": "code", - "expr": "{place=\"luna\"} | logfmt | label=\"val2\" | float > 60", - "maxLines": 5000, - "queryType": "range", - "refId": "A" + { + "id": "limit", + "options": { + "limitField": 10 } - ], - "title": "Split logs", - "transformations": [ - { - "id": "calculateField", - "options": { - "alias": "id_count", - "mode": "reduceRow", - "reduce": { - "include": [ - "id" - ], - "reducer": "count" - }, - "replaceFields": false - } - }, - { - "id": "sortBy", - "options": { - "fields": {}, - "sort": [ - { - "desc": true, - "field": "tsNs" - } - ] - } + } + ], + "type": "logs" + }, + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" + }, + "description": "Transformations:\n- Count\n- Sort by\n- Limit 10", + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 2, + "options": { + "dedupStrategy": "none", + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showLabels": false, + "showTime": false, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" }, - { - "id": "limit", - "options": { - "limitField": 10 - } + "editorMode": "code", + "expr": "{place=\"luna\"} | logfmt | label=\"val2\" | float > 60", + "maxLines": 5000, + "queryType": "range", + "refId": "do-not-chunk" + } + ], + "title": "Logs without splitting", + "transformations": [ + { + "id": "calculateField", + "options": { + "alias": "id_count", + "mode": "reduceRow", + "reduce": { + "include": [ + "id" + ], + "reducer": "count" + }, + "replaceFields": false } - ], - "type": "logs" - }, - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" }, - "description": "Transformations:\n- Count\n- Sort by\n- Limit 10", - "gridPos": { - "h": 7, - "w": 12, - "x": 12, - "y": 0 - }, - "id": 2, - "options": { - "dedupStrategy": "none", - "enableLogDetails": true, - "prettifyLogMessage": false, - "showCommonLabels": false, - "showLabels": false, - "showTime": false, - "sortOrder": "Descending", - "wrapLogMessage": false + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "desc": true, + "field": "tsNs" + } + ] + } }, - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" + { + "id": "limit", + "options": {} + } + ], + "type": "logs" + }, + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false }, - "editorMode": "code", - "expr": "{place=\"luna\"} | logfmt | label=\"val2\" | float > 60", - "maxLines": 5000, - "queryType": "range", - "refId": "do-not-chunk" - } - ], - "title": "Logs without splitting", - "transformations": [ - { - "id": "calculateField", - "options": { - "alias": "id_count", - "mode": "reduceRow", - "reduce": { - "include": [ - "id" - ], - "reducer": "count" - }, - "replaceFields": false + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" } }, - { - "id": "sortBy", - "options": { - "fields": {}, - "sort": [ - { - "desc": true, - "field": "tsNs" - } - ] - } + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] }, - { - "id": "limit", - "options": {} - } - ], - "type": "logs" + "unitScale": true + }, + "overrides": [] }, - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 7 + }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" + }, + "editorMode": "code", + "expr": "count_over_time({place=\"luna\"} | logfmt | label=\"val2\" | float > 60 | drop wave, _entry, level, float, counter [$__auto])", + "queryType": "range", + "refId": "A" + } + ], + "title": "Split TS", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" } }, - "overrides": [] + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unitScale": true }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 7 + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 7 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true }, - "id": 3, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" + }, + "editorMode": "code", + "expr": "count_over_time({place=\"luna\"} | logfmt | label=\"val2\" | float > 60 | drop wave, _entry, level, float, counter [$__auto])", + "queryType": "range", + "refId": "do-not-chunk" + } + ], + "title": "TS without splitting", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 15 + }, + "id": 5, + "options": { + "dedupStrategy": "none", + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showLabels": false, + "showTime": false, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" + }, + "editorMode": "code", + "expr": "{place=\"luna\"} | logfmt", + "maxLines": 5000, + "queryType": "range", + "refId": "A" + } + ], + "title": "Logs with filter transformation", + "transformations": [ + { + "id": "filterByValue", + "options": { + "filters": [ + { + "config": { + "id": "isNull", + "options": {} + }, + "fieldName": "TraceID" + } + ], + "match": "any", + "type": "exclude" } - }, - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" - }, - "editorMode": "code", - "expr": "count_over_time({place=\"luna\"} | logfmt | label=\"val2\" | float > 60 | drop wave, _entry, level, float, counter [$__auto])", - "queryType": "range", - "refId": "A" + } + ], + "type": "logs" + }, + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 15 + }, + "id": 6, + "options": { + "dedupStrategy": "none", + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showLabels": false, + "showTime": false, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" + }, + "editorMode": "code", + "expr": "{place=\"luna\"} | logfmt", + "maxLines": 5000, + "queryType": "range", + "refId": "do-not-chunk" + } + ], + "title": "Logs with filter transformation, no splitting", + "transformations": [ + { + "id": "filterByValue", + "options": { + "filters": [ + { + "config": { + "id": "isNull", + "options": {} + }, + "fieldName": "TraceID" + } + ], + "match": "any", + "type": "exclude" } - ], - "title": "Split TS", - "transformations": [], - "type": "timeseries" + } + ], + "type": "logs" + }, + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" }, - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null }, - "thresholdsStyle": { - "mode": "off" + { + "color": "red", + "value": 80 } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } + ] }, - "overrides": [] + "unitScale": true }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 7 + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 20 + }, + "id": 7, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false }, - "id": 4, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" + "showHeader": true + }, + "pluginVersion": "10.3.0-pre", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" + }, + "editorMode": "code", + "expr": "{place=\"luna\", age=\"new\"}", + "maxLines": 5000, + "queryType": "range", + "refId": "A" + } + ], + "title": "Logs with extract fields transformation", + "transformations": [ + { + "id": "extractFields", + "options": { + "format": "json", + "keepTime": true, + "replace": true, + "source": "labels" } }, - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" + { + "id": "calculateField", + "options": { + "alias": "Row", + "mode": "index", + "reduce": { + "reducer": "sum" }, - "editorMode": "code", - "expr": "count_over_time({place=\"luna\"} | logfmt | label=\"val2\" | float > 60 | drop wave, _entry, level, float, counter [$__auto])", - "queryType": "range", - "refId": "do-not-chunk" + "replaceFields": false } - ], - "title": "TS without splitting", - "transformations": [], - "type": "timeseries" + } + ], + "type": "table" + }, + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" }, - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" - }, - "gridPos": { - "h": 5, - "w": 12, - "x": 0, - "y": 15 - }, - "id": 5, - "options": { - "dedupStrategy": "none", - "enableLogDetails": true, - "prettifyLogMessage": false, - "showCommonLabels": false, - "showLabels": false, - "showTime": false, - "sortOrder": "Descending", - "wrapLogMessage": false - }, - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" }, - "editorMode": "code", - "expr": "{place=\"luna\"} | logfmt", - "maxLines": 5000, - "queryType": "range", - "refId": "A" - } - ], - "title": "Logs with filter transformation", - "transformations": [ - { - "id": "filterByValue", - "options": { - "filters": [ - { - "config": { - "id": "isNull", - "options": {} - }, - "fieldName": "TraceID" - } - ], - "match": "any", - "type": "exclude" - } - } - ], - "type": "logs" - }, - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unitScale": true }, - "gridPos": { - "h": 5, - "w": 12, - "x": 12, - "y": 15 + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 20 + }, + "id": 8, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false }, - "id": 6, - "options": { - "dedupStrategy": "none", - "enableLogDetails": true, - "prettifyLogMessage": false, - "showCommonLabels": false, - "showLabels": false, - "showTime": false, - "sortOrder": "Descending", - "wrapLogMessage": false + "showHeader": true + }, + "pluginVersion": "10.3.0-pre", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" + }, + "editorMode": "code", + "expr": "{place=\"luna\", age=\"new\"}", + "maxLines": 5000, + "queryType": "range", + "refId": "do-not-chunk" + } + ], + "title": "Logs with extract fields transformation, no splitting", + "transformations": [ + { + "id": "extractFields", + "options": { + "format": "json", + "keepTime": true, + "replace": true, + "source": "labels" + } }, - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" + { + "id": "calculateField", + "options": { + "alias": "Row", + "mode": "index", + "reduce": { + "reducer": "sum" }, - "editorMode": "code", - "expr": "{place=\"luna\"} | logfmt", - "maxLines": 5000, - "queryType": "range", - "refId": "do-not-chunk" - } - ], - "title": "Logs with filter transformation, no splitting", - "transformations": [ - { - "id": "filterByValue", - "options": { - "filters": [ - { - "config": { - "id": "isNull", - "options": {} - }, - "fieldName": "TraceID" - } - ], - "match": "any", - "type": "exclude" - } + "replaceFields": false } - ], - "type": "logs" + } + ], + "type": "table" + }, + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" }, - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" }, - "custom": { - "align": "auto", - "cellOptions": { - "type": "auto" + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null }, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } + { + "color": "red", + "value": 80 + } + ] }, - "overrides": [] + "unitScale": true }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 20 + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 28 + }, + "id": 9, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false }, - "id": 7, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false + "showHeader": true + }, + "pluginVersion": "10.3.0-pre", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" }, - "showHeader": true + "editorMode": "code", + "expr": "{place=\"moon\"}", + "maxLines": 5, + "queryType": "range", + "refId": "A" + } + ], + "title": "Logs with extract key=value and organize", + "transformations": [ + { + "id": "extractFields", + "options": { + "format": "auto", + "keepTime": true, + "replace": true, + "source": "Line" + } }, - "pluginVersion": "10.2.0-61469", - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" + { + "id": "organize", + "options": { + "excludeByName": { + "31": true, + "32": true, + "33": true, + "34": true, + "35": true, + "36": true, + "37": true, + "38": true, + "39": true, + "40": true, + "41": true, + "42": true, + "43": true, + "44": true, + "45": true, + "46": true, + "2023-09-20T14": true, + "33+00": true, + "caller": true, + "main.go": true, + "t": true, + "ts": true }, - "editorMode": "code", - "expr": "{place=\"luna\", age=\"new\"}", - "maxLines": 5000, - "queryType": "range", - "refId": "A" - } - ], - "title": "Logs with extract fields transformation", - "transformations": [ - { - "id": "extractFields", - "options": { - "format": "json", - "keepTime": true, - "replace": true, - "source": "labels" - } - }, - { - "id": "calculateField", - "options": { - "alias": "Row", - "mode": "index", - "reduce": { - "reducer": "sum" - }, - "replaceFields": false + "indexByName": {}, + "renameByName": { + "level": "nivel", + "ts": "" } } - ], - "type": "table" + } + ], + "type": "table" + }, + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" }, - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" }, - "custom": { - "align": "auto", - "cellOptions": { - "type": "auto" + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null }, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } + { + "color": "red", + "value": 80 + } + ] }, - "overrides": [] + "unitScale": true }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 20 + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 28 + }, + "id": 10, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false }, - "id": 8, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false + "showHeader": true + }, + "pluginVersion": "10.3.0-pre", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" }, - "showHeader": true + "editorMode": "code", + "expr": "{place=\"moon\"}", + "maxLines": 5, + "queryType": "range", + "refId": "do-not-chunk" + } + ], + "title": "Logs with extract key=value and organize, no splitting", + "transformations": [ + { + "id": "extractFields", + "options": { + "format": "auto", + "keepTime": true, + "replace": true, + "source": "Line" + } }, - "pluginVersion": "10.2.0-61469", - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" + { + "id": "organize", + "options": { + "excludeByName": { + "31": true, + "32": true, + "33": true, + "34": true, + "35": true, + "36": true, + "37": true, + "38": true, + "39": true, + "40": true, + "41": true, + "42": true, + "43": true, + "44": true, + "45": true, + "46": true, + "2023-09-20T14": true, + "33+00": true, + "caller": true, + "main.go": true, + "t": true, + "ts": true }, - "editorMode": "code", - "expr": "{place=\"luna\", age=\"new\"}", - "maxLines": 5000, - "queryType": "range", - "refId": "do-not-chunk" - } - ], - "title": "Logs with extract fields transformation, no splitting", - "transformations": [ - { - "id": "extractFields", - "options": { - "format": "json", - "keepTime": true, - "replace": true, - "source": "labels" - } - }, - { - "id": "calculateField", - "options": { - "alias": "Row", - "mode": "index", - "reduce": { - "reducer": "sum" - }, - "replaceFields": false + "indexByName": {}, + "renameByName": { + "level": "nivel", + "ts": "" } } - ], - "type": "table" + } + ], + "type": "table" + }, + { + "datasource": { + "type": "loki", + "uid": "PDDA8E780A17E7EF1" }, - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" }, - "custom": { - "align": "auto", - "cellOptions": { - "type": "auto" + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null }, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } + { + "color": "red", + "value": 80 + } + ] }, - "overrides": [] + "unitScale": true }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 28 + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 36 + }, + "id": 11, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false }, - "id": 9, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false + "showHeader": true + }, + "pluginVersion": "10.3.0-pre", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" }, - "showHeader": true + "editorMode": "code", + "expr": "sum(count_over_time({place=\"moon\"}[$__auto]))", + "maxLines": 5, + "queryType": "range", + "refId": "A", + "step": "1d" + } + ], + "title": "Metric 1d step", + "transformations": [ + { + "id": "extractFields", + "options": { + "format": "auto", + "keepTime": true, + "replace": true, + "source": "Line" + } }, - "pluginVersion": "10.2.0-61469", - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" + { + "id": "organize", + "options": { + "excludeByName": { + "31": true, + "32": true, + "33": true, + "34": true, + "35": true, + "36": true, + "37": true, + "38": true, + "39": true, + "40": true, + "41": true, + "42": true, + "43": true, + "44": true, + "45": true, + "46": true, + "2023-09-20T14": true, + "33+00": true, + "caller": true, + "main.go": true, + "t": true, + "ts": true }, - "editorMode": "code", - "expr": "{place=\"moon\"}", - "maxLines": 5, - "queryType": "range", - "refId": "A" - } - ], - "title": "Logs with extract key=value and organize", - "transformations": [ - { - "id": "extractFields", - "options": { - "format": "auto", - "keepTime": true, - "replace": true, - "source": "Line" - } - }, - { - "id": "organize", - "options": { - "excludeByName": { - "31": true, - "32": true, - "33": true, - "34": true, - "35": true, - "36": true, - "37": true, - "38": true, - "39": true, - "40": true, - "41": true, - "42": true, - "43": true, - "44": true, - "45": true, - "46": true, - "2023-09-20T14": true, - "33+00": true, - "caller": true, - "main.go": true, - "t": true, - "ts": true - }, - "indexByName": {}, - "renameByName": { - "level": "nivel", - "ts": "" - } + "indexByName": {}, + "renameByName": { + "level": "nivel", + "ts": "" } } - ], - "type": "table" + } + ], + "type": "table" + }, + { + "datasource": { + "type": "loki", + "uid": "PDDA8E780A17E7EF1" }, - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" }, - "custom": { - "align": "auto", - "cellOptions": { - "type": "auto" + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null }, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } + { + "color": "red", + "value": 80 + } + ] }, - "overrides": [] + "unitScale": true }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 28 + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 36 + }, + "id": 12, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false }, - "id": 10, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false + "showHeader": true + }, + "pluginVersion": "10.3.0-pre", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "gdev-loki" }, - "showHeader": true + "editorMode": "code", + "expr": "sum(count_over_time({place=\"moon\"}[$__auto]))", + "maxLines": 5, + "queryType": "range", + "refId": "do-not-chunk", + "step": "1d" + } + ], + "title": "Metric 1d step, no splitting", + "transformations": [ + { + "id": "extractFields", + "options": { + "format": "auto", + "keepTime": true, + "replace": true, + "source": "Line" + } }, - "pluginVersion": "10.2.0-61469", - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "gdev-loki" + { + "id": "organize", + "options": { + "excludeByName": { + "31": true, + "32": true, + "33": true, + "34": true, + "35": true, + "36": true, + "37": true, + "38": true, + "39": true, + "40": true, + "41": true, + "42": true, + "43": true, + "44": true, + "45": true, + "46": true, + "2023-09-20T14": true, + "33+00": true, + "caller": true, + "main.go": true, + "t": true, + "ts": true }, - "editorMode": "code", - "expr": "{place=\"moon\"}", - "maxLines": 5, - "queryType": "range", - "refId": "do-not-chunk" - } - ], - "title": "Logs with extract key=value and organize, no splitting", - "transformations": [ - { - "id": "extractFields", - "options": { - "format": "auto", - "keepTime": true, - "replace": true, - "source": "Line" - } - }, - { - "id": "organize", - "options": { - "excludeByName": { - "31": true, - "32": true, - "33": true, - "34": true, - "35": true, - "36": true, - "37": true, - "38": true, - "39": true, - "40": true, - "41": true, - "42": true, - "43": true, - "44": true, - "45": true, - "46": true, - "2023-09-20T14": true, - "33+00": true, - "caller": true, - "main.go": true, - "t": true, - "ts": true - }, - "indexByName": {}, - "renameByName": { - "level": "nivel", - "ts": "" - } + "indexByName": {}, + "renameByName": { + "level": "nivel", + "ts": "" } } - ], - "type": "table" - } - ], - "refresh": "", - "schemaVersion": 38, - "tags": [], - "templating": { - "list": [] - }, - "time": { - "from": "now-6h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Datasource tests - Loki query splitting", - "uid": "dc4ec947-7e6b-4c3b-be8f-0abec7b0652a", - "version": 13, - "weekStart": "" - } \ No newline at end of file + } + ], + "type": "table" + } + ], + "refresh": "", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Datasource tests - Loki query splitting", + "uid": "dc4ec947-7e6b-4c3b-be8f-0abec7b0652a", + "version": 2, + "weekStart": "" +} \ No newline at end of file diff --git a/devenv/dev-dashboards/live/live-publish.json b/devenv/dev-dashboards/live/live-publish.json new file mode 100644 index 0000000000000..1e7e26b8dfb1e --- /dev/null +++ b/devenv/dev-dashboards/live/live-publish.json @@ -0,0 +1,447 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 209, + "links": [], + "panels": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 9, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "## This dashboard requires alpha panels to be enabled!", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "type": "text" + }, + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "gridPos": { + "h": 4, + "w": 15, + "x": 0, + "y": 2 + }, + "id": 2, + "options": { + "channel": { + "namespace": "devenv", + "path": "weather", + "scope": "stream" + }, + "display": "none", + "json": { + "hello": "world" + }, + "message": "weather,location=west,sensor=A temperature=82\nweather,location=east,sensor=A temperature=76", + "publish": "influx" + }, + "title": "Panel Title", + "type": "live" + }, + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 15, + "y": 2 + }, + "id": 4, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "channel": "stream/devenv/weather", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "measurements", + "refId": "A" + } + ], + "title": "Weather (values)", + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "desc": true, + "field": "time" + } + ] + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "gridPos": { + "h": 4, + "w": 15, + "x": 0, + "y": 6 + }, + "id": 5, + "options": { + "channel": { + "namespace": "devenv", + "path": "weather", + "scope": "stream" + }, + "display": "none", + "json": { + "hello": "world" + }, + "message": "weather,location=west,sensor=A temperature=90\nweather,location=east,sensor=A temperature=80", + "publish": "influx" + }, + "title": "Panel Title", + "type": "live" + }, + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "channel": "stream/devenv/weather", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "measurements", + "refId": "A" + }, + { + "channel": "stream/devenv/weatherX", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "hide": false, + "queryType": "measurements", + "refId": "B" + } + ], + "title": "Panel Title", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "gridPos": { + "h": 4, + "w": 15, + "x": 0, + "y": 17 + }, + "id": 6, + "options": { + "channel": { + "namespace": "devenv", + "path": "weather", + "scope": "stream" + }, + "display": "none", + "json": { + "hello": "world" + }, + "message": "weatherX,location=west,sensor=X temperature=82\nweatherX,location=east,sensor=X temperature=76", + "publish": "influx" + }, + "title": "Panel Title", + "type": "live" + }, + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 15, + "y": 17 + }, + "id": 7, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "channel": "stream/devenv/weatherX", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "measurements", + "refId": "A" + } + ], + "title": "WeatherX (values)", + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "desc": true, + "field": "time" + } + ] + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "gridPos": { + "h": 4, + "w": 15, + "x": 0, + "y": 21 + }, + "id": 8, + "options": { + "channel": { + "namespace": "devenv", + "path": "weather", + "scope": "stream" + }, + "display": "none", + "json": { + "hello": "world" + }, + "message": "weatherX,location=west,sensor=X temperature=90\nweatherX,location=east,sensor=X temperature=22", + "publish": "influx" + }, + "title": "Panel Title", + "type": "live" + } + ], + "schemaVersion": 39, + "tags": [ + "gdev", + "live-tests" + ], + "templating": { + "list": [] + }, + "time": { + "from": "now-1m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "live test", + "uid": "addoomtlivedev", + "version": 17, + "weekStart": "" + } \ No newline at end of file diff --git a/devenv/dev-dashboards/migrations/migrations.json b/devenv/dev-dashboards/migrations/migrations.json index e28a753409d2b..3d13fe327f696 100644 --- a/devenv/dev-dashboards/migrations/migrations.json +++ b/devenv/dev-dashboards/migrations/migrations.json @@ -21,7 +21,127 @@ "links": [ { "asDropdown": false, - "icon": "dashboard", + "icon": "external link", + "includeVars": false, + "keepTime": false, + "tags": [], + "targetBlank": true, + "title": "Auto migrate graph panel (TRUE)", + "tooltip": "", + "type": "link", + "url": " /d/cdd412c4/?__feature.autoMigrateGraphPanel=true" + }, + { + "asDropdown": false, + "icon": "external link", + "includeVars": false, + "keepTime": false, + "tags": [], + "targetBlank": true, + "title": "Auto migrate graph panel (FALSE)", + "tooltip": "", + "type": "link", + "url": " /d/cdd412c4/?__feature.autoMigrateGraphPanel=false" + }, + { + "asDropdown": false, + "icon": "external link", + "includeVars": false, + "keepTime": false, + "tags": [], + "targetBlank": true, + "title": "Auto migrate table (old) panel (TRUE)", + "tooltip": "", + "type": "link", + "url": " /d/cdd412c4/?__feature.autoMigrateTablePanel=true" + }, + { + "asDropdown": false, + "icon": "external link", + "includeVars": false, + "keepTime": false, + "tags": [], + "targetBlank": true, + "title": "Auto migrate table (old) panel (FALSE)", + "tooltip": "", + "type": "link", + "url": " /d/cdd412c4/?__feature.autoMigrateTablePanel=false" + }, + { + "asDropdown": false, + "icon": "external link", + "includeVars": false, + "keepTime": false, + "tags": [], + "targetBlank": true, + "title": "Auto migrate piechart panel (TRUE)", + "tooltip": "", + "type": "link", + "url": " /d/cdd412c4/?__feature.autoMigratePiechartPanel=true" + }, + { + "asDropdown": false, + "icon": "external link", + "includeVars": false, + "keepTime": false, + "tags": [], + "targetBlank": true, + "title": "Auto migrate piechart panel (FALSE)", + "tooltip": "", + "type": "link", + "url": " /d/cdd412c4/?__feature.autoMigratePiechartPanel=false" + }, + { + "asDropdown": false, + "icon": "external link", + "includeVars": false, + "keepTime": false, + "tags": [], + "targetBlank": true, + "title": "Auto migrate worldmap panel (TRUE)", + "tooltip": "", + "type": "link", + "url": " /d/cdd412c4/?__feature.autoMigrateWorldmapPanel=true" + }, + { + "asDropdown": false, + "icon": "external link", + "includeVars": false, + "keepTime": false, + "tags": [], + "targetBlank": true, + "title": "Auto migrate worldmap panel (FALSE)", + "tooltip": "", + "type": "link", + "url": " /d/cdd412c4/?__feature.autoMigrateWorldmapPanel=false" + }, + { + "asDropdown": false, + "icon": "external link", + "includeVars": false, + "keepTime": false, + "tags": [], + "targetBlank": true, + "title": "Auto migrate stat panel (TRUE)", + "tooltip": "", + "type": "link", + "url": " /d/cdd412c4/?__feature.autoMigrateStatPanel=true" + }, + { + "asDropdown": false, + "icon": "external link", + "includeVars": false, + "keepTime": false, + "tags": [], + "targetBlank": true, + "title": "Auto migrate stat panel (FALSE)", + "tooltip": "", + "type": "link", + "url": " /d/cdd412c4/?__feature.autoMigrateStatPanel=false" + }, + { + "asDropdown": false, + "icon": "external link", "includeVars": false, "keepTime": false, "tags": [], @@ -45,7 +165,7 @@ }, { "asDropdown": false, - "icon": "dashboard", + "icon": "external link", "includeVars": false, "keepTime": false, "tags": [], @@ -72,7 +192,279 @@ "panels": [ { "aliasColors": {}, - "bars": false, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "unit": "short" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 11, + "w": 16, + "x": 0, + "y": 0 + }, + "hiddenSeries": false, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "percentage": false, + "pluginVersion": "11.0.0-pre", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "random_walk", + "seriesCount": 3 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Flot graph", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "logBase": 1, + "show": true + }, + { + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "gridPos": { + "h": 11, + "w": 8, + "x": 16, + "y": 0 + }, + "id": 6, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "# Graph panel >> Timeseries panel\n\nKnown issues:\n* hiding null/empty series\n* time regions", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A" + } + ], + "title": "Status + Notes", + "type": "text" + }, + { + "aliasColors": {}, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "unit": "short" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 11, + "w": 16, + "x": 0, + "y": 11 + }, + "hiddenSeries": false, + "id": 28, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "percentage": false, + "pluginVersion": "11.0.0-pre", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "random_walk", + "seriesCount": 3 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Flot graph - x axis series mode", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "series", + "show": true, + "values": [ + "total" + ] + }, + "yaxes": [ + { + "$$hashKey": "object:88", + "format": "short", + "logBase": 1, + "show": true + }, + { + "$$hashKey": "object:89", + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "gridPos": { + "h": 11, + "w": 8, + "x": 16, + "y": 11 + }, + "id": 29, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "# Graph panel >> Bar chart panel\n", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A" + } + ], + "title": "Status + Notes", + "type": "text" + }, + { + "aliasColors": {}, + "bars": true, "dashLength": 10, "dashes": false, "datasource": { @@ -81,52 +473,6 @@ }, "fieldConfig": { "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, "unit": "short" }, "overrides": [] @@ -137,20 +483,20 @@ "h": 11, "w": 16, "x": 0, - "y": 0 + "y": 22 }, "hiddenSeries": false, - "id": 4, + "id": 30, "legend": { "avg": false, "current": false, "max": false, "min": false, - "show": true, + "show": false, "total": false, "values": false }, - "lines": true, + "lines": false, "linewidth": 1, "nullPointMode": "null", "options": { @@ -167,7 +513,7 @@ } }, "percentage": false, - "pluginVersion": "9.5.0-pre", + "pluginVersion": "11.0.0-pre", "pointradius": 2, "points": false, "renderer": "flot", @@ -188,25 +534,27 @@ ], "thresholds": [], "timeRegions": [], - "title": "Flot graph", + "title": "Flot graph - x axis histogram mode", "tooltip": { - "shared": true, + "shared": false, "sort": 0, "value_type": "individual" }, - "type": "timeseries", + "type": "graph", "xaxis": { - "mode": "time", + "mode": "histogram", "show": true, "values": [] }, "yaxes": [ { + "$$hashKey": "object:193", "format": "short", "logBase": 1, "show": true }, { + "$$hashKey": "object:194", "format": "short", "logBase": 1, "show": true @@ -225,19 +573,19 @@ "h": 11, "w": 8, "x": 16, - "y": 0 + "y": 22 }, - "id": 6, + "id": 31, "options": { "code": { "language": "plaintext", "showLineNumbers": false, "showMiniMap": false }, - "content": "# Graph panel >> Timeseries panel\n\nKnown issues:\n* hiding null/empty series\n* time regions", + "content": "# Graph panel >> Histogram panel\n", "mode": "markdown" }, - "pluginVersion": "9.5.0-pre", + "pluginVersion": "11.0.0-pre", "targets": [ { "datasource": { @@ -261,7 +609,7 @@ "h": 10, "w": 16, "x": 0, - "y": 11 + "y": 33 }, "id": 2, "options": { @@ -337,7 +685,7 @@ "h": 10, "w": 8, "x": 16, - "y": 11 + "y": 33 }, "id": 7, "options": { @@ -349,7 +697,7 @@ "content": "# Table (old) >> Table\n\nKnown issues:\n* wrapping text\n* style changes", "mode": "markdown" }, - "pluginVersion": "9.5.0-pre", + "pluginVersion": "11.0.0-pre", "targets": [ { "datasource": { @@ -386,10 +734,9 @@ "h": 8, "w": 8, "x": 0, - "y": 21 + "y": 43 }, "id": 9, - "links": [], "mappingType": 1, "mappingTypes": [ { @@ -444,65 +791,186 @@ "valueName": "avg" }, { - "colorBackground": false, - "colorValue": true, - "colors": [ - "#299c46", - "#73BF69", - "#d44a3a" - ], "datasource": { "type": "testdata", "uid": "PD8C576611E62080A" }, - "format": "ms", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] }, "gridPos": { "h": 8, "w": 8, "x": 8, - "y": 21 + "y": 43 }, "id": 23, - "links": [], - "mappingType": 1, - "mappingTypes": [ + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.0.0-pre", + "targets": [ { - "name": "value to text", - "value": 1 + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A" + } + ], + "title": "singlestat (old, internal. Migrated if schema < 28)", + "type": "stat" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 43 + }, + "id": 10, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false }, + "content": "# Singlestat >> Stat\n\nKnown issues:\n* limited options", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ { - "name": "range to text", - "value": 2 + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A" } ], - "maxDataPoints": 100, - "nullPointMode": "connected", - "pluginVersion": "6.2.0-pre", - "postfix": "", - "postfixFontSize": "50%", - "prefix": "p95", - "prefixFontSize": "80%", - "rangeMaps": [ + "title": "Status + Notes", + "type": "text" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "gridPos": { + "h": 10, + "w": 16, + "x": 0, + "y": 51 + }, + "id": 24, + "options": { + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "pieType": "pie", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.5.0-pre", + "targets": [ { - "from": "null", - "text": "N/A", - "to": "null" + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "random_walk_table" } ], - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": true + "title": "grafana-piechart-panel", + "transformations": [ + { + "id": "merge", + "options": { + "reducers": [] + } + } + ], + "type": "grafana-piechart-panel" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" }, - "tableColumn": "", + "gridPos": { + "h": 10, + "w": 8, + "x": 16, + "y": 51 + }, + "id": 25, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "# grafana-piechart-panel >> piechart\n\nKnown issues:\n* TBD", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", "targets": [ { "datasource": { @@ -512,18 +980,152 @@ "refId": "A" } ], - "thresholds": "", - "title": "singlestat (old, internal. Migrated if schema < 28)", - "type": "singlestat", - "valueFontSize": "120%", - "valueMaps": [ + "title": "Status + Notes", + "type": "text" + }, + { + "circleMaxSize": 30, + "circleMinSize": 2, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "PD8C576611E62080A" + }, + "decimals": 0, + "esMetric": "Count", + "gridPos": { + "h": 10, + "w": 16, + "x": 0, + "y": 61 + }, + "hideEmpty": false, + "hideZero": false, + "id": 26, + "initialZoom": 1, + "locationData": "countries", + "mapCenter": "(0°, 0°)", + "mapCenterLatitude": 0, + "mapCenterLongitude": 0, + "maxDataPoints": 1, + "mouseWheelZoom": false, + "options": { + "basemap": { + "name": "Basemap", + "type": "default" + }, + "controls": { + "mouseWheelZoom": false, + "showAttribution": true, + "showDebug": false, + "showMeasure": false, + "showScale": false, + "showZoom": true + }, + "layers": [ + { + "config": { + "showLegend": true, + "style": { + "color": { + "fixed": "dark-green" + }, + "opacity": 0.4, + "rotation": { + "fixed": 0, + "max": 360, + "min": -360, + "mode": "mod" + }, + "size": { + "fixed": 5, + "max": 30, + "min": 2 + }, + "symbol": { + "fixed": "img/icons/marker/circle.svg", + "mode": "fixed" + }, + "symbolAlign": { + "horizontal": "center", + "vertical": "center" + }, + "textConfig": { + "fontSize": 12, + "offsetX": 0, + "offsetY": 0, + "textAlign": "center", + "textBaseline": "middle" + } + } + }, + "location": { + "gazetteer": "public/gazetteer/countries.json", + "mode": "lookup" + }, + "name": "Layer 0", + "tooltip": true, + "type": "markers" + } + ], + "tooltip": { + "mode": "details" + }, + "view": { + "allLayers": true, + "id": "zero", + "lat": 0, + "lon": 0, + "zoom": 1 + } + }, + "pluginVersion": "10.4.0-pre", + "showLegend": true, + "stickyLabels": false, + "tableQueryOptions": { + "geohashField": "geohash", + "latitudeField": "latitude", + "longitudeField": "longitude", + "metricField": "metric", + "queryType": "geohash" + }, + "targets": [ { - "op": "=", - "text": "N/A", - "value": "null" + "csvFileName": "flight_info_by_state.csv", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "csv_file" } ], - "valueName": "avg" + "thresholds": "0,10", + "title": "grafana-worldmap-panel", + "transformations": [ + { + "id": "merge", + "options": { + "reducers": [] + } + }, + { + "id": "reduce", + "options": { + "reducers": [ + "sum" + ] + } + } + ], + "type": "grafana-worldmap-panel", + "unitPlural": "", + "unitSingle": "", + "valueName": "total" }, { "datasource": { @@ -531,22 +1133,22 @@ "uid": "PD8C576611E62080A" }, "gridPos": { - "h": 8, + "h": 10, "w": 8, "x": 16, - "y": 21 + "y": 61 }, - "id": 10, + "id": 27, "options": { "code": { "language": "plaintext", "showLineNumbers": false, "showMiniMap": false }, - "content": "# Singlestat >> Stat\n\nKnown issues:\n* limited options", + "content": "# grafana-worldmap-panel >> geomap\n\nKnown issues:\n* TBD", "mode": "markdown" }, - "pluginVersion": "9.5.0-pre", + "pluginVersion": "11.0.0-pre", "targets": [ { "datasource": { @@ -561,7 +1163,7 @@ } ], "refresh": "", - "schemaVersion": 34, + "schemaVersion": 39, "tags": [ "gdev", "migrations", @@ -574,10 +1176,11 @@ "from": "now-6h", "to": "now" }, + "timeRangeUpdatedDuringEditOrView": false, "timepicker": {}, "timezone": "", "title": "Devenv - Panel migrations", "uid": "cdd412c4", - "version": 6, + "version": 68, "weekStart": "" -} +} \ No newline at end of file diff --git a/devenv/dev-dashboards/panel-canvas/canvas-datalinks.json b/devenv/dev-dashboards/panel-canvas/canvas-datalinks.json new file mode 100644 index 0000000000000..8cbe54eb83e55 --- /dev/null +++ b/devenv/dev-dashboards/panel-canvas/canvas-datalinks.json @@ -0,0 +1,2940 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 740, + "links": [], + "panels": [ + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "A-hehwzd" + }, + "properties": [ + { + "id": "links", + "value": [ + { + "targetBlank": true, + "title": "A-series data link", + "url": "http://localhost:3000/d/dddouk2ygsb9cc/6114e28a-4041-5fbd-878f-b98718a90c4d?${__url_time_range}" + } + ] + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Count (transformation)" + }, + "properties": [ + { + "id": "links", + "value": [ + { + "targetBlank": true, + "title": "Count data link", + "url": "http://localhost:3000/d/dddouk2ygsb9cc/6114e28a-4041-5fbd-878f-b98718a90c4d${__data.fields.A-series}" + } + ] + } + ] + } + ] + }, + "gridPos": { + "h": 30, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "inlineEditing": false, + "panZoom": false, + "root": { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + }, + "width": 0 + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "elements": [ + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "fixed": "rgb(204, 204, 220)" + }, + "size": 24, + "text": { + "fixed": "Metric Value" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 1", + "placement": { + "height": 50, + "left": 38, + "top": 23, + "width": 144 + }, + "type": "text" + }, + { + "background": { + "color": { + "fixed": "#D9D9D9" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "fixed": "#000000" + }, + "size": 20, + "text": { + "field": "A-hehwzd", + "fixed": "", + "mode": "field" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 2", + "placement": { + "height": 50, + "left": 16, + "top": 91, + "width": 188 + }, + "type": "metric-value" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "field": "A-hehwzd", + "fixed": "#000000" + }, + "size": 20, + "text": { + "fixed": "Text color", + "mode": "fixed" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 3", + "placement": { + "height": 50, + "left": 16, + "top": 170, + "width": 188 + }, + "type": "metric-value" + }, + { + "background": { + "color": { + "fixed": "transparent" + }, + "image": { + "field": "Count (transformation)", + "mode": "field" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "fixed": "text" + }, + "size": 20, + "text": { + "fixed": "Background image", + "mode": "fixed" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 4", + "placement": { + "height": 50, + "left": 16, + "top": 249, + "width": 188 + }, + "type": "metric-value" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "field": "A-hehwzd", + "fixed": "dark-green" + }, + "width": 2 + }, + "config": { + "align": "center", + "color": { + "fixed": "text" + }, + "size": 20, + "text": { + "fixed": "Border", + "mode": "fixed" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 5", + "placement": { + "height": 50, + "left": 16, + "top": 328, + "width": 188 + }, + "type": "metric-value" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "fixed": "text" + }, + "size": 16, + "text": { + "field": "A-hehwzd", + "mode": "field" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 6", + "placement": { + "height": 50, + "left": 262, + "top": 91, + "width": 188 + }, + "type": "text" + }, + { + "background": { + "color": { + "fixed": "transparent" + }, + "image": { + "fixed": "" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "field": "A-hehwzd", + "fixed": "rgb(204, 204, 220)" + }, + "size": 16, + "text": { + "fixed": "Text color" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 7", + "placement": { + "height": 50, + "left": 262, + "top": 170, + "width": 188 + }, + "type": "text" + }, + { + "background": { + "color": { + "fixed": "transparent" + }, + "image": { + "field": "Count (transformation)", + "mode": "field" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "fixed": "rgb(204, 204, 220)" + }, + "size": 16, + "text": { + "fixed": "Background image" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 8", + "placement": { + "height": 50, + "left": 262, + "top": 249, + "width": 188 + }, + "type": "text" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "field": "A-hehwzd", + "fixed": "dark-green" + }, + "width": 2 + }, + "config": { + "align": "center", + "color": { + "fixed": "rgb(204, 204, 220)" + }, + "size": 16, + "text": { + "fixed": "Border" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 9", + "placement": { + "height": 50, + "left": 262, + "top": 328, + "width": 188 + }, + "type": "text" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "fixed": "rgb(204, 204, 220)" + }, + "size": 24, + "text": { + "fixed": "Text" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 10", + "placement": { + "height": 50, + "left": 284, + "top": 23, + "width": 144 + }, + "type": "text" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "backgroundColor": { + "fixed": "#D9D9D9" + }, + "borderColor": { + "fixed": "transparent" + }, + "color": { + "fixed": "#000000" + }, + "text": { + "field": "A-hehwzd", + "mode": "field" + }, + "valign": "middle", + "width": 1 + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 11", + "placement": { + "height": 50, + "left": 530, + "top": 91, + "width": 188 + }, + "type": "ellipse" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "backgroundColor": { + "fixed": "#D9D9D9" + }, + "borderColor": { + "fixed": "transparent" + }, + "color": { + "field": "A-hehwzd", + "fixed": "#000000" + }, + "text": { + "fixed": "Text color" + }, + "valign": "middle", + "width": 1 + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 12", + "placement": { + "height": 50, + "left": 530, + "top": 170, + "width": 188 + }, + "type": "ellipse" + }, + { + "background": { + "color": { + "fixed": "transparent" + }, + "image": { + "field": "Count (transformation)", + "mode": "field" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "backgroundColor": { + "fixed": "#D9D9D9" + }, + "borderColor": { + "fixed": "transparent" + }, + "color": { + "fixed": "#000000" + }, + "text": { + "fixed": "Background image" + }, + "valign": "middle", + "width": 1 + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 13", + "placement": { + "height": 50, + "left": 530, + "top": 249, + "width": 188 + }, + "type": "ellipse" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "field": "A-hehwzd", + "fixed": "dark-green" + }, + "width": 2 + }, + "config": { + "align": "center", + "backgroundColor": { + "fixed": "#D9D9D9" + }, + "borderColor": { + "fixed": "transparent" + }, + "color": { + "fixed": "#000000" + }, + "text": { + "fixed": "Border" + }, + "valign": "middle", + "width": 1 + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 14", + "placement": { + "height": 50, + "left": 530, + "top": 328, + "width": 188 + }, + "type": "ellipse" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "fixed": "rgb(204, 204, 220)" + }, + "size": 24, + "text": { + "fixed": "Ellipse" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 15", + "placement": { + "height": 50, + "left": 552, + "top": 23, + "width": 144 + }, + "type": "text" + }, + { + "background": { + "color": { + "fixed": "#D9D9D9" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "fixed": "#000000" + }, + "text": { + "field": "A-hehwzd", + "mode": "field" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 16", + "placement": { + "height": 50, + "left": 798, + "top": 91, + "width": 188 + }, + "type": "rectangle" + }, + { + "background": { + "color": { + "fixed": "#D9D9D9" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "field": "A-hehwzd", + "fixed": "#000000" + }, + "text": { + "fixed": "Text color" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 17", + "placement": { + "height": 50, + "left": 798, + "top": 170, + "width": 188 + }, + "type": "rectangle" + }, + { + "background": { + "color": { + "fixed": "#D9D9D9" + }, + "image": { + "field": "Count (transformation)", + "mode": "field" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "fixed": "#000000" + }, + "text": { + "fixed": "Background image" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 18", + "placement": { + "height": 50, + "left": 798, + "top": 249, + "width": 188 + }, + "type": "rectangle" + }, + { + "background": { + "color": { + "fixed": "#D9D9D9" + } + }, + "border": { + "color": { + "field": "A-hehwzd", + "fixed": "dark-green" + }, + "width": 2 + }, + "config": { + "align": "center", + "color": { + "fixed": "#000000" + }, + "text": { + "fixed": "Border" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 19", + "placement": { + "height": 50, + "left": 798, + "top": 328, + "width": 188 + }, + "type": "rectangle" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "fixed": "rgb(204, 204, 220)" + }, + "size": 24, + "text": { + "fixed": "Rectangle" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 20", + "placement": { + "height": 50, + "left": 820, + "top": 23, + "width": 144 + }, + "type": "text" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "fill": { + "fixed": "#D9D9D9" + }, + "path": { + "field": "A-hehwzd", + "fixed": "img/icons/unicons/question-circle.svg", + "mode": "field" + } + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 21", + "placement": { + "height": 50, + "left": 1066, + "top": 91, + "width": 188 + }, + "type": "icon" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "fill": { + "field": "A-hehwzd", + "fixed": "#D9D9D9" + }, + "path": { + "fixed": "img/icons/unicons/question-circle.svg", + "mode": "fixed" + } + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 22", + "placement": { + "height": 50, + "left": 1066, + "top": 170, + "width": 188 + }, + "type": "icon" + }, + { + "background": { + "color": { + "fixed": "transparent" + }, + "image": { + "field": "Count (transformation)", + "mode": "field" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "fill": { + "fixed": "#D9D9D9" + }, + "path": { + "fixed": "img/icons/unicons/question-circle.svg", + "mode": "fixed" + } + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 23", + "placement": { + "height": 50, + "left": 1066, + "top": 249, + "width": 188 + }, + "type": "icon" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "field": "A-hehwzd", + "fixed": "dark-green" + }, + "width": 2 + }, + "config": { + "fill": { + "fixed": "#D9D9D9" + }, + "path": { + "fixed": "img/icons/unicons/question-circle.svg", + "mode": "fixed" + } + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 24", + "placement": { + "height": 50, + "left": 1066, + "top": 328, + "width": 188 + }, + "type": "icon" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "fixed": "rgb(204, 204, 220)" + }, + "size": 24, + "text": { + "fixed": "Icon" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 25", + "placement": { + "height": 50, + "left": 1088, + "top": 23, + "width": 144 + }, + "type": "text" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "statusColor": { + "field": "A-hehwzd" + }, + "type": "Single" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 26", + "placement": { + "height": 90, + "left": 65, + "top": 516, + "width": 90 + }, + "type": "server" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "field": "A-hehwzd", + "fixed": "dark-green" + }, + "width": 2 + }, + "config": { + "type": "Single" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 29", + "placement": { + "height": 90, + "left": 65, + "top": 870, + "width": 90 + }, + "type": "server" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "fixed": "rgb(204, 204, 220)" + }, + "size": 24, + "text": { + "fixed": "Server" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 30", + "placement": { + "height": 50, + "left": 38, + "top": 438, + "width": 144 + }, + "type": "text" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "bulbColor": { + "field": "A-hehwzd" + }, + "statusColor": { + "fixed": "transparent" + }, + "type": "Single" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 31", + "placement": { + "height": 90, + "left": 65, + "top": 634, + "width": 90 + }, + "type": "server" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "blinkRate": { + "field": "A-hehwzd" + }, + "bulbColor": { + "fixed": "#000000" + }, + "statusColor": { + "fixed": "transparent" + }, + "type": "Single" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 32", + "placement": { + "height": 90, + "left": 65, + "top": 752, + "width": 90 + }, + "type": "server" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "rpm": { + "field": "A-hehwzd" + }, + "statusColor": { + "field": "A-hehwzd" + }, + "type": "Single" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 33", + "placement": { + "height": 55, + "left": 329, + "top": 516, + "width": 55 + }, + "type": "windTurbine" + }, + { + "background": { + "color": { + "fixed": "transparent" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "align": "center", + "color": { + "fixed": "rgb(204, 204, 220)" + }, + "size": 24, + "text": { + "fixed": "Wind Turbine" + }, + "valign": "middle" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 35", + "placement": { + "height": 50, + "left": 270, + "top": 438, + "width": 172 + }, + "type": "text" + }, + { + "background": { + "color": { + "field": "A-hehwzd", + "fixed": "transparent" + }, + "image": { + "field": "Count (transformation)", + "mode": "field" + } + }, + "border": { + "color": { + "fixed": "dark-green" + } + }, + "config": { + "bulbColor": { + "field": "A-hehwzd" + }, + "statusColor": { + "fixed": "transparent" + }, + "type": "Single" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 36", + "placement": { + "height": 55, + "left": 329, + "top": 633, + "width": 55 + }, + "type": "windTurbine" + }, + { + "background": { + "color": { + "field": "Count (transformation)", + "fixed": "transparent" + }, + "image": { + "field": "A-hehwzd", + "mode": "field" + } + }, + "border": { + "color": { + "fixed": "dark-green" + }, + "width": 0 + }, + "config": { + "type": "Single" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 38", + "placement": { + "height": 90, + "left": 65, + "top": 988, + "width": 90 + }, + "type": "server" + }, + { + "background": { + "color": { + "fixed": "transparent" + }, + "image": { + "field": "", + "mode": "field" + } + }, + "border": { + "color": { + "field": "A-hehwzd", + "fixed": "dark-green" + }, + "width": 1 + }, + "config": { + "bulbColor": { + "field": "A-hehwzd" + }, + "statusColor": { + "fixed": "transparent" + }, + "type": "Single" + }, + "constraint": { + "horizontal": "left", + "vertical": "top" + }, + "name": "Element 37", + "placement": { + "height": 55, + "left": 329, + "top": 752, + "width": 55 + }, + "type": "windTurbine" + } + ], + "name": "Element 1708700648848", + "placement": { + "height": 100, + "left": 0, + "top": 0, + "width": 100 + }, + "type": "frame" + }, + "showAdvancedTypes": true + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "queryType": "snapshot", + "refId": "A", + "snapshot": [ + { + "data": { + "values": [ + [ + 1708679336805, + 1708679366805, + 1708679396805, + 1708679426805, + 1708679456805, + 1708679486805, + 1708679516805, + 1708679546805, + 1708679576805, + 1708679606805, + 1708679636805, + 1708679666805, + 1708679696805, + 1708679726805, + 1708679756805, + 1708679786805, + 1708679816805, + 1708679846805, + 1708679876805, + 1708679906805, + 1708679936805, + 1708679966805, + 1708679996805, + 1708680026805, + 1708680056805, + 1708680086805, + 1708680116805, + 1708680146805, + 1708680176805, + 1708680206805, + 1708680236805, + 1708680266805, + 1708680296805, + 1708680326805, + 1708680356805, + 1708680386805, + 1708680416805, + 1708680446805, + 1708680476805, + 1708680506805, + 1708680536805, + 1708680566805, + 1708680596805, + 1708680626805, + 1708680656805, + 1708680686805, + 1708680716805, + 1708680746805, + 1708680776805, + 1708680806805, + 1708680836805, + 1708680866805, + 1708680896805, + 1708680926805, + 1708680956805, + 1708680986805, + 1708681016805, + 1708681046805, + 1708681076805, + 1708681106805, + 1708681136805, + 1708681166805, + 1708681196805, + 1708681226805, + 1708681256805, + 1708681286805, + 1708681316805, + 1708681346805, + 1708681376805, + 1708681406805, + 1708681436805, + 1708681466805, + 1708681496805, + 1708681526805, + 1708681556805, + 1708681586805, + 1708681616805, + 1708681646805, + 1708681676805, + 1708681706805, + 1708681736805, + 1708681766805, + 1708681796805, + 1708681826805, + 1708681856805, + 1708681886805, + 1708681916805, + 1708681946805, + 1708681976805, + 1708682006805, + 1708682036805, + 1708682066805, + 1708682096805, + 1708682126805, + 1708682156805, + 1708682186805, + 1708682216805, + 1708682246805, + 1708682276805, + 1708682306805, + 1708682336805, + 1708682366805, + 1708682396805, + 1708682426805, + 1708682456805, + 1708682486805, + 1708682516805, + 1708682546805, + 1708682576805, + 1708682606805, + 1708682636805, + 1708682666805, + 1708682696805, + 1708682726805, + 1708682756805, + 1708682786805, + 1708682816805, + 1708682846805, + 1708682876805, + 1708682906805, + 1708682936805, + 1708682966805, + 1708682996805, + 1708683026805, + 1708683056805, + 1708683086805, + 1708683116805, + 1708683146805, + 1708683176805, + 1708683206805, + 1708683236805, + 1708683266805, + 1708683296805, + 1708683326805, + 1708683356805, + 1708683386805, + 1708683416805, + 1708683446805, + 1708683476805, + 1708683506805, + 1708683536805, + 1708683566805, + 1708683596805, + 1708683626805, + 1708683656805, + 1708683686805, + 1708683716805, + 1708683746805, + 1708683776805, + 1708683806805, + 1708683836805, + 1708683866805, + 1708683896805, + 1708683926805, + 1708683956805, + 1708683986805, + 1708684016805, + 1708684046805, + 1708684076805, + 1708684106805, + 1708684136805, + 1708684166805, + 1708684196805, + 1708684226805, + 1708684256805, + 1708684286805, + 1708684316805, + 1708684346805, + 1708684376805, + 1708684406805, + 1708684436805, + 1708684466805, + 1708684496805, + 1708684526805, + 1708684556805, + 1708684586805, + 1708684616805, + 1708684646805, + 1708684676805, + 1708684706805, + 1708684736805, + 1708684766805, + 1708684796805, + 1708684826805, + 1708684856805, + 1708684886805, + 1708684916805, + 1708684946805, + 1708684976805, + 1708685006805, + 1708685036805, + 1708685066805, + 1708685096805, + 1708685126805, + 1708685156805, + 1708685186805, + 1708685216805, + 1708685246805, + 1708685276805, + 1708685306805, + 1708685336805, + 1708685366805, + 1708685396805, + 1708685426805, + 1708685456805, + 1708685486805, + 1708685516805, + 1708685546805, + 1708685576805, + 1708685606805, + 1708685636805, + 1708685666805, + 1708685696805, + 1708685726805, + 1708685756805, + 1708685786805, + 1708685816805, + 1708685846805, + 1708685876805, + 1708685906805, + 1708685936805, + 1708685966805, + 1708685996805, + 1708686026805, + 1708686056805, + 1708686086805, + 1708686116805, + 1708686146805, + 1708686176805, + 1708686206805, + 1708686236805, + 1708686266805, + 1708686296805, + 1708686326805, + 1708686356805, + 1708686386805, + 1708686416805, + 1708686446805, + 1708686476805, + 1708686506805, + 1708686536805, + 1708686566805, + 1708686596805, + 1708686626805, + 1708686656805, + 1708686686805, + 1708686716805, + 1708686746805, + 1708686776805, + 1708686806805, + 1708686836805, + 1708686866805, + 1708686896805, + 1708686926805, + 1708686956805, + 1708686986805, + 1708687016805, + 1708687046805, + 1708687076805, + 1708687106805, + 1708687136805, + 1708687166805, + 1708687196805, + 1708687226805, + 1708687256805, + 1708687286805, + 1708687316805, + 1708687346805, + 1708687376805, + 1708687406805, + 1708687436805, + 1708687466805, + 1708687496805, + 1708687526805, + 1708687556805, + 1708687586805, + 1708687616805, + 1708687646805, + 1708687676805, + 1708687706805, + 1708687736805, + 1708687766805, + 1708687796805, + 1708687826805, + 1708687856805, + 1708687886805, + 1708687916805, + 1708687946805, + 1708687976805, + 1708688006805, + 1708688036805, + 1708688066805, + 1708688096805, + 1708688126805, + 1708688156805, + 1708688186805, + 1708688216805, + 1708688246805, + 1708688276805, + 1708688306805, + 1708688336805, + 1708688366805, + 1708688396805, + 1708688426805, + 1708688456805, + 1708688486805, + 1708688516805, + 1708688546805, + 1708688576805, + 1708688606805, + 1708688636805, + 1708688666805, + 1708688696805, + 1708688726805, + 1708688756805, + 1708688786805, + 1708688816805, + 1708688846805, + 1708688876805, + 1708688906805, + 1708688936805, + 1708688966805, + 1708688996805, + 1708689026805, + 1708689056805, + 1708689086805, + 1708689116805, + 1708689146805, + 1708689176805, + 1708689206805, + 1708689236805, + 1708689266805, + 1708689296805, + 1708689326805, + 1708689356805, + 1708689386805, + 1708689416805, + 1708689446805, + 1708689476805, + 1708689506805, + 1708689536805, + 1708689566805, + 1708689596805, + 1708689626805, + 1708689656805, + 1708689686805, + 1708689716805, + 1708689746805, + 1708689776805, + 1708689806805, + 1708689836805, + 1708689866805, + 1708689896805, + 1708689926805, + 1708689956805, + 1708689986805, + 1708690016805, + 1708690046805, + 1708690076805, + 1708690106805, + 1708690136805, + 1708690166805, + 1708690196805, + 1708690226805, + 1708690256805, + 1708690286805, + 1708690316805, + 1708690346805, + 1708690376805, + 1708690406805, + 1708690436805, + 1708690466805, + 1708690496805, + 1708690526805, + 1708690556805, + 1708690586805, + 1708690616805, + 1708690646805, + 1708690676805, + 1708690706805, + 1708690736805, + 1708690766805, + 1708690796805, + 1708690826805, + 1708690856805, + 1708690886805, + 1708690916805, + 1708690946805, + 1708690976805, + 1708691006805, + 1708691036805, + 1708691066805, + 1708691096805, + 1708691126805, + 1708691156805, + 1708691186805, + 1708691216805, + 1708691246805, + 1708691276805, + 1708691306805, + 1708691336805, + 1708691366805, + 1708691396805, + 1708691426805, + 1708691456805, + 1708691486805, + 1708691516805, + 1708691546805, + 1708691576805, + 1708691606805, + 1708691636805, + 1708691666805, + 1708691696805, + 1708691726805, + 1708691756805, + 1708691786805, + 1708691816805, + 1708691846805, + 1708691876805, + 1708691906805, + 1708691936805, + 1708691966805, + 1708691996805, + 1708692026805, + 1708692056805, + 1708692086805, + 1708692116805, + 1708692146805, + 1708692176805, + 1708692206805, + 1708692236805, + 1708692266805, + 1708692296805, + 1708692326805, + 1708692356805, + 1708692386805, + 1708692416805, + 1708692446805, + 1708692476805, + 1708692506805, + 1708692536805, + 1708692566805, + 1708692596805, + 1708692626805, + 1708692656805, + 1708692686805, + 1708692716805, + 1708692746805, + 1708692776805, + 1708692806805, + 1708692836805, + 1708692866805, + 1708692896805, + 1708692926805, + 1708692956805, + 1708692986805, + 1708693016805, + 1708693046805, + 1708693076805, + 1708693106805, + 1708693136805, + 1708693166805, + 1708693196805, + 1708693226805, + 1708693256805, + 1708693286805, + 1708693316805, + 1708693346805, + 1708693376805, + 1708693406805, + 1708693436805, + 1708693466805, + 1708693496805, + 1708693526805, + 1708693556805, + 1708693586805, + 1708693616805, + 1708693646805, + 1708693676805, + 1708693706805, + 1708693736805, + 1708693766805, + 1708693796805, + 1708693826805, + 1708693856805, + 1708693886805, + 1708693916805, + 1708693946805, + 1708693976805, + 1708694006805, + 1708694036805, + 1708694066805, + 1708694096805, + 1708694126805, + 1708694156805, + 1708694186805, + 1708694216805, + 1708694246805, + 1708694276805, + 1708694306805, + 1708694336805, + 1708694366805, + 1708694396805, + 1708694426805, + 1708694456805, + 1708694486805, + 1708694516805, + 1708694546805, + 1708694576805, + 1708694606805, + 1708694636805, + 1708694666805, + 1708694696805, + 1708694726805, + 1708694756805, + 1708694786805, + 1708694816805, + 1708694846805, + 1708694876805, + 1708694906805, + 1708694936805, + 1708694966805, + 1708694996805, + 1708695026805, + 1708695056805, + 1708695086805, + 1708695116805, + 1708695146805, + 1708695176805, + 1708695206805, + 1708695236805, + 1708695266805, + 1708695296805, + 1708695326805, + 1708695356805, + 1708695386805, + 1708695416805, + 1708695446805, + 1708695476805, + 1708695506805, + 1708695536805, + 1708695566805, + 1708695596805, + 1708695626805, + 1708695656805, + 1708695686805, + 1708695716805, + 1708695746805, + 1708695776805, + 1708695806805, + 1708695836805, + 1708695866805, + 1708695896805, + 1708695926805, + 1708695956805, + 1708695986805, + 1708696016805, + 1708696046805, + 1708696076805, + 1708696106805, + 1708696136805, + 1708696166805, + 1708696196805, + 1708696226805, + 1708696256805, + 1708696286805, + 1708696316805, + 1708696346805, + 1708696376805, + 1708696406805, + 1708696436805, + 1708696466805, + 1708696496805, + 1708696526805, + 1708696556805, + 1708696586805, + 1708696616805, + 1708696646805, + 1708696676805, + 1708696706805, + 1708696736805, + 1708696766805, + 1708696796805, + 1708696826805, + 1708696856805, + 1708696886805, + 1708696916805, + 1708696946805, + 1708696976805, + 1708697006805, + 1708697036805, + 1708697066805, + 1708697096805, + 1708697126805, + 1708697156805, + 1708697186805, + 1708697216805, + 1708697246805, + 1708697276805, + 1708697306805, + 1708697336805, + 1708697366805, + 1708697396805, + 1708697426805, + 1708697456805, + 1708697486805, + 1708697516805, + 1708697546805, + 1708697576805, + 1708697606805, + 1708697636805, + 1708697666805, + 1708697696805, + 1708697726805, + 1708697756805, + 1708697786805, + 1708697816805, + 1708697846805, + 1708697876805, + 1708697906805, + 1708697936805, + 1708697966805, + 1708697996805, + 1708698026805, + 1708698056805, + 1708698086805, + 1708698116805, + 1708698146805, + 1708698176805, + 1708698206805, + 1708698236805, + 1708698266805, + 1708698296805, + 1708698326805, + 1708698356805, + 1708698386805, + 1708698416805, + 1708698446805, + 1708698476805, + 1708698506805, + 1708698536805, + 1708698566805, + 1708698596805, + 1708698626805, + 1708698656805, + 1708698686805, + 1708698716805, + 1708698746805, + 1708698776805, + 1708698806805, + 1708698836805, + 1708698866805, + 1708698896805, + 1708698926805, + 1708698956805, + 1708698986805, + 1708699016805, + 1708699046805, + 1708699076805, + 1708699106805, + 1708699136805, + 1708699166805, + 1708699196805, + 1708699226805, + 1708699256805, + 1708699286805, + 1708699316805, + 1708699346805, + 1708699376805, + 1708699406805, + 1708699436805, + 1708699466805, + 1708699496805, + 1708699526805, + 1708699556805, + 1708699586805, + 1708699616805, + 1708699646805, + 1708699676805, + 1708699706805, + 1708699736805, + 1708699766805, + 1708699796805, + 1708699826805, + 1708699856805, + 1708699886805, + 1708699916805, + 1708699946805, + 1708699976805, + 1708700006805, + 1708700036805, + 1708700066805, + 1708700096805, + 1708700126805, + 1708700156805, + 1708700186805, + 1708700216805, + 1708700246805, + 1708700276805, + 1708700306805, + 1708700336805, + 1708700366805, + 1708700396805, + 1708700426805, + 1708700456805, + 1708700486805, + 1708700516805, + 1708700546805, + 1708700576805, + 1708700606805, + 1708700636805, + 1708700666805, + 1708700696805, + 1708700726805, + 1708700756805, + 1708700786805, + 1708700816805, + 1708700846805, + 1708700876805, + 1708700906805 + ], + [ + 61.7880220958275, + 61.81270791445456, + 61.829208768453746, + 61.3952804521061, + 61.54378204663586, + 61.793292376739025, + 61.89508181687579, + 62.032346031223305, + 62.090954811114734, + 61.788446359641156, + 61.34681406228381, + 61.37147422434034, + 61.40948125782848, + 61.69144945060843, + 61.790001610516114, + 61.9726511399688, + 62.17186395369245, + 61.841593279449114, + 61.81351577982158, + 61.774548608665306, + 61.45071912098117, + 61.837381696515884, + 61.65059114296433, + 61.1939165193637, + 61.251406089255795, + 60.90456801094042, + 60.56801269725712, + 60.79736902333104, + 60.9367183948152, + 61.40785835680261, + 61.621326272755965, + 61.53478423246078, + 61.616180375313114, + 61.56950269911591, + 61.419724817297585, + 61.76631225002593, + 62.12897242834343, + 62.123394668856335, + 61.84384351878861, + 61.784342739352965, + 61.946359707479985, + 62.00854561243485, + 61.949378148238175, + 61.83251536870273, + 62.10046102360543, + 62.51955528279164, + 62.43194543555232, + 61.93563724102479, + 61.61222776112464, + 61.706572968014584, + 61.25653135192282, + 61.356339636867965, + 61.699918128409436, + 61.700832273918536, + 61.48680261436916, + 61.23885493750151, + 60.88064816100224, + 60.8061115971784, + 60.48689168723215, + 60.55420316390225, + 60.78326551379002, + 60.71763616746389, + 61.0384027799684, + 61.361681117105356, + 61.819694140841825, + 61.60303629180282, + 61.13531779096821, + 61.59247554276454, + 62.073700396192514, + 62.257393021269124, + 62.433793965222456, + 62.250955190991135, + 61.85027922321473, + 61.991414140632, + 62.103475488499456, + 62.1675085033716, + 61.81759701584563, + 61.44204189561965, + 61.39004247589699, + 61.84841370788845, + 62.01982884908544, + 62.29261477385842, + 62.1881407732118, + 61.77974858108549, + 61.30269030921595, + 61.72885233653658, + 62.160061928899516, + 62.13127060574461, + 61.99860014382346, + 62.2713524353439, + 62.45360209624644, + 62.45033536766769, + 62.74579940152534, + 62.652379007396135, + 62.50461375528075, + 62.4923739782267, + 62.87608071230181, + 62.979684959589086, + 63.376138214369306, + 63.66354651661235, + 63.77873383844567, + 64.02365055931571, + 63.57333739418103, + 63.569251641994995, + 63.51940188659398, + 63.81887126104792, + 64.10808860762592, + 64.26214829221084, + 63.81353904099011, + 63.792123977174654, + 64.09459044217124, + 64.49651926575704, + 64.87380353415439, + 65.22102686208456, + 65.49078940759729, + 65.83529933530703, + 66.06313506256244, + 66.36902912666964, + 66.78048161957578, + 66.85326316970041, + 67.14736719324404, + 67.55927886414139, + 67.497025942169, + 67.84593513490577, + 67.47441764273138, + 67.94871645670011, + 68.32729017349827, + 68.0857872436968, + 67.93500201308075, + 67.75781760651351, + 67.62321694227796, + 67.87687655718156, + 68.03974600191707, + 67.82627187210018, + 68.29863099170737, + 67.95842239244082, + 67.56173819267319, + 67.11089985276264, + 67.58721546400895, + 67.43817707268052, + 67.63734474285276, + 67.8608900819446, + 68.2491098921388, + 68.64222598287019, + 68.93436090180123, + 68.58516897681044, + 68.88556663186037, + 68.82509258379442, + 68.43122435581691, + 68.01151775860062, + 68.31539501569645, + 68.01224489043588, + 68.21383479637454, + 67.85864255481124, + 67.85285437130011, + 67.68770174333852, + 67.78834746198736, + 68.07096889676643, + 68.06340992932907, + 68.37116739265392, + 68.25606363201948, + 68.0308569092854, + 68.0279418148109, + 67.68837311892736, + 67.98015788941186, + 68.39001231797856, + 68.55810426314746, + 68.67055538403375, + 68.24669275435873, + 68.3542775530211, + 67.99792233705742, + 67.93848132742042, + 67.54327434886798, + 67.86541640645122, + 67.63715332453567, + 67.44863373545599, + 67.54029786855584, + 67.3799227903252, + 67.272800723832, + 67.65752571426705, + 67.27217330871126, + 67.36259068699385, + 67.6920166495926, + 67.99237921892899, + 68.00526928940994, + 67.67665255949264, + 67.82106088034847, + 68.22225474161398, + 68.17103508007338, + 68.1016199190692, + 67.9715626706774, + 68.32706440829391, + 67.87634330533211, + 67.97207720874553, + 67.87493382264455, + 67.38357737752105, + 66.94768029712087, + 66.67493510394992, + 66.48367657533245, + 66.77035937087237, + 66.87685661575208, + 66.68590889792685, + 67.11545823298368, + 67.39896920212514, + 67.34979904565203, + 67.19769898467558, + 67.45512207826779, + 67.07906680752531, + 67.41541723819202, + 67.15472798048341, + 67.15672773264464, + 67.6290223056695, + 68.11240707910342, + 68.40594352628086, + 67.92798893549167, + 67.46919856375305, + 67.4835115803936, + 67.63236807133978, + 67.17328415938867, + 67.24458272746313, + 66.84593455247185, + 67.01430262963748, + 67.05291762336604, + 67.23817875420809, + 66.98941509949245, + 66.68717338595964, + 67.12826784930103, + 66.74586515933792, + 67.12397362624425, + 66.91465424208462, + 66.68655917540693, + 66.19881496899525, + 66.68817057925634, + 66.37134623059349, + 66.596971028669, + 67.08641642499875, + 67.12758650919066, + 67.38518121414808, + 67.46997153732326, + 67.33145553844577, + 67.65363406004056, + 67.45595043797628, + 67.24978988019829, + 67.39677514651268, + 67.5978323405599, + 67.96140308646021, + 68.00477049936622, + 67.75104436464927, + 67.99988077010511, + 68.19366044789288, + 68.49848829432483, + 68.25947149341026, + 68.6317723773926, + 68.91668608614779, + 68.8159923502771, + 69.17513974647629, + 69.23356802652235, + 69.25309375298245, + 69.21125949874141, + 69.20726323550102, + 68.78019883289588, + 69.24667107728621, + 69.1153426259508, + 69.56206231608063, + 69.72141422867662, + 69.541238907092, + 69.81884141217625, + 69.53432369593423, + 69.43315031151812, + 69.01688148574168, + 68.90923934889648, + 69.13664462290991, + 69.31984528071725, + 69.14875943039056, + 69.48885652654923, + 69.88297168977773, + 69.42462273878934, + 69.12679413148601, + 68.98123233159377, + 68.7762758442149, + 68.48846507574687, + 68.02689832504595, + 68.02852643078998, + 67.555096330903, + 67.4639788904284, + 67.61277291577984, + 67.70121565906206, + 67.66817331556194, + 67.84767253849441, + 68.18538578924706, + 68.29860737971661, + 68.53693780239855, + 68.59722904625475, + 68.72061222893264, + 68.6709989466837, + 69.09400533816238, + 69.20295511428635, + 69.04258759148102, + 68.77139467473914, + 68.57756213054044, + 68.67449080482191, + 68.60860533532343, + 69.01676017621124, + 69.3052161196497, + 68.89017381442457, + 68.87423335356772, + 68.94718162265079, + 69.07199142609447, + 68.79769510366016, + 68.65106890757201, + 68.77703094552813, + 68.28258034480257, + 68.39479364216955, + 68.34220719427985, + 68.64253416645396, + 68.87725555362057, + 68.5131252571485, + 68.89127035251008, + 68.67886068136877, + 68.4447624537287, + 68.00181105736998, + 68.16998112143412, + 68.43591872875314, + 68.02705208136817, + 68.45211203302853, + 68.53289570629535, + 68.58200283313724, + 68.25718933019785, + 68.36370956465593, + 68.05020228727913, + 68.50658655636543, + 68.66449948753682, + 68.2241732330651, + 68.09791466418139, + 67.88940531760399, + 68.36978817923638, + 67.96433264274425, + 68.36349840881765, + 68.48435193949715, + 68.79844380614031, + 69.02017361165895, + 68.52624119834393, + 68.74005315812674, + 68.76067653657759, + 68.27918960695276, + 68.65714329915559, + 68.42872809873309, + 67.98192094490678, + 68.02723949195821, + 68.36423058076824, + 68.71132274325691, + 68.6730162618873, + 68.2039400216969, + 67.86554691576616, + 67.49988053949725, + 67.16307215146469, + 67.0353669125758, + 67.25486895820083, + 66.95629780399439, + 67.11477592840751, + 66.64323746050167, + 66.20269172026232, + 66.48026858749327, + 66.4824015740555, + 66.09931551662274, + 66.52915019033718, + 66.45576884782787, + 66.24667785942938, + 65.81418399593981, + 65.5611498094969, + 65.3398959293035, + 65.77646026507297, + 65.39346792956597, + 65.41692492067247, + 65.80888038895401, + 66.01134945900266, + 65.80681809031556, + 65.32295296805074, + 65.37373854104783, + 64.93533382859144, + 64.7705026812803, + 65.17813748381224, + 65.361732144628, + 64.9021692008158, + 64.7544901225187, + 64.89471070898715, + 64.74868721773261, + 65.00087272748908, + 65.13124433830268, + 64.86532668113782, + 64.51108629312537, + 64.48208116580882, + 64.86340417937541, + 64.5927354669956, + 64.1183990008181, + 63.66603997870095, + 63.670535114339415, + 63.179312479687646, + 62.71414451358941, + 62.349677869382184, + 62.73321111245177, + 62.63668992149067, + 62.246656820357686, + 62.12151749467506, + 62.09114940207692, + 62.13652644719604, + 62.59170540130276, + 62.28435878005047, + 62.62555470862962, + 62.73559453227453, + 62.63492310358647, + 62.99493118502586, + 63.2621260239913, + 62.99279716454684, + 62.8629723908099, + 63.01324605242161, + 63.27456767760901, + 63.11585082867133, + 63.04279509050621, + 63.10999097814922, + 63.544265738869036, + 63.11822935137409, + 63.01523903936018, + 63.20403674621687, + 62.83896086980938, + 62.41843196460615, + 62.11985404869429, + 62.07986319614809, + 61.99277704632526, + 61.668764434861785, + 61.24484474074755, + 61.461440830656386, + 61.276838934561326, + 61.190724244624434, + 61.55613660124493, + 61.12078454699415, + 61.3276958600818, + 61.6042219184118, + 61.25513892816126, + 61.31664892177688, + 61.688070650858535, + 62.01190639528168, + 62.08869564629636, + 61.97211569824653, + 62.06419901170042, + 62.32586483758532, + 62.23902878995992, + 62.10813808603461, + 61.85578175807045, + 62.23028871528028, + 62.632050281179744, + 62.94816419819628, + 62.73043921369783, + 62.23627146727455, + 62.584832680453275, + 62.62993353336442, + 62.8749075179418, + 62.48040775408503, + 62.21373335340891, + 61.79955494265226, + 61.833015907179636, + 61.39273179502193, + 61.269508387088344, + 61.72530078527864, + 62.09495330426252, + 62.151597131318645, + 62.03375578347783, + 62.417839543433374, + 62.857582366978384, + 62.57434410206618, + 63.025461247334185, + 62.891637883802545, + 62.74129737438404, + 62.686344200077194, + 62.74668907124072, + 62.8988624768576, + 62.60573732388666, + 63.025949401766745, + 62.67167444177004, + 62.90064380635685, + 62.864966632927896, + 62.75573606469665, + 62.64819512833622, + 62.568258206957815, + 62.60577268655998, + 62.15762551315059, + 62.567239861872935, + 62.2060758300364, + 62.31900525191699, + 62.28916506290531, + 62.44905922260444, + 62.461296429876256, + 62.500385909925505, + 62.650801268022704, + 62.56666212391569, + 62.40046878730333, + 62.094243157050244, + 62.53663695990193, + 62.42300679544488, + 62.36921559899188, + 62.24670139180489, + 62.569517596988945, + 62.66647211282815, + 62.665771463959715, + 62.876380887882625, + 62.45928337880216, + 62.909344895815984, + 62.792949925824054, + 62.83068709163355, + 62.69318202524612, + 62.87621607310353, + 63.31283919698538, + 63.25629003985129, + 63.705604438529726, + 63.273909526061956, + 63.5892070912608, + 63.25172069842234, + 63.29295380191922, + 63.37827406047424, + 63.40692971848919, + 62.91617622008834, + 62.78539371994352, + 62.67023463643756, + 62.778172553545886, + 62.47010093156481, + 62.73229570857713, + 62.59545419552364, + 63.021765325598885, + 63.12625341655425, + 62.78539970673421, + 62.48947067386955, + 62.50019409861797, + 62.27827076256643, + 62.32133231940964, + 62.28201148707485, + 62.75074499118775, + 62.2850034814543, + 62.11551149639342, + 62.19275216451308, + 61.99131816833137, + 61.53708598957499, + 61.935909883441674, + 61.982544659526965, + 62.47356745991423, + 62.54325753022373, + 62.146857201138765, + 62.189218538018835, + 62.06268691181029, + 62.33603183556959, + 62.82869197777662, + 63.18597742858942, + 63.032993740715966, + 63.5325845753775, + 63.562424373715885, + 63.50147245681481, + 63.9167851513779, + 64.41348447594058, + 64.47641931732102, + 64.00422787602398, + 63.84372934402268, + 63.57536630107787, + 64.06767133087304, + 63.857109831163605, + 63.594856285335126, + 64.01811161431772, + 64.07634398750827, + 64.53914449236566, + 64.0503925198368, + 63.65098131727389, + 63.68701372362301, + 63.69177696813634, + 63.37477814620089, + 62.9056011078514, + 62.51297543133976, + 62.59250225336332, + 62.80712544689635, + 62.841367040210486, + 63.01245999144349, + 63.05987075936997, + 62.7064932753452, + 62.53562962324097, + 62.31063278405174, + 62.266535846784436, + 62.302218124559445, + 62.342098988884466, + 61.85031656038063, + 62.236466943962625, + 62.38666354433638, + 62.50448443527158, + 62.2386149786552, + 62.43706094747305, + 62.48167927367151, + 62.53256313135768, + 62.78282604117919, + 62.610692060658806, + 62.60559562844521, + 62.522478905756024, + 62.11039441006909, + 62.455676051055406, + 62.12208142671207, + 62.08989132214651, + 61.60556028504288, + 61.72080384449528, + 61.67203415718332, + 61.300028102691506, + 61.2882234681282, + 61.67414171824772, + 61.663919195939215, + 61.82126261684866, + 62.14747753168045, + 61.90000454947883, + 61.550477655414085, + 61.823665895055534, + 62.2914692558774, + 61.97827489307881, + 62.373656454593686, + 62.77509964777066, + 63.03123026432718, + 62.71959998560016, + 62.798641799535915, + 62.36309802737797, + 62.187803490902276, + 61.86629603436246, + 61.51332614924758, + 61.670529134596514, + 62.01614193494398, + 62.42759829956865, + 62.04049015814663, + 62.4879050225676, + 62.534578908118796, + 62.53729183335963, + 62.507213724278294, + 62.91741156445245, + 62.80078558969012, + 62.89530940332275, + 62.82952275179085, + 62.931001539540134, + 62.715893011718826, + 63.176668587903144, + 63.25804897932602, + 63.715274804489724, + 63.25110762353138, + 63.703759539930466, + 63.9121877763375, + 63.74483403967367, + 63.278090432146044, + 63.25689283100131, + 63.5587547259249, + 63.99611056226184, + 63.711033213960846, + 63.61430481648302, + 63.37762519043254, + 63.825084284030204, + 63.65971618383464, + 64.11513361026066, + 64.55773804769903, + 64.72114634405787, + 64.92113863156139, + 64.74299967907277, + 64.58315181550863, + 64.53895512079164, + 64.29203322638713, + 64.35539787981175, + 64.51347297698413, + 64.41240397641245, + 64.37002365296716, + 64.54885534394022, + 65.0387758477243, + 64.77700441309366, + 65.18362739291737, + 65.05949296204716, + 64.57684960686204, + 64.47443633413799, + 64.25660237904727, + 64.56848853603353, + 64.13857108098799, + 63.779464548765795, + 63.940686810035814, + 63.47280572727399, + 63.75027671584932, + 63.72842205520389, + 63.28631208752196, + 63.54806381048302, + 63.89145142689777, + 63.77801877620565, + 64.22035568724904, + 63.99613288560804, + 64.03027098363421, + 64.45100338093056, + 64.4954103610469, + 64.0379570128468, + 64.509809400983, + 64.24776908391132, + 64.18308085450447, + 64.02686567211323, + 64.00949969057655, + 64.08790624904579, + 64.44413148646105, + 64.436667344197, + 64.925560935662, + 64.4380208837763, + 64.63611397061874, + 64.53720467943039, + 64.89043109965093, + 65.02933526203901, + 65.38083597755491, + 65.63733460002958, + 66.04889884599933, + 66.15611674378638, + 66.58017724018646, + 66.13733327264003, + 65.69321107501534, + 65.92059175869956, + 65.73905913370584, + 65.39714875503125, + 65.31355908128221, + 65.75886616744013, + 66.05775873128395, + 65.93022978097021, + 66.3107650269844 + ] + ] + }, + "schema": { + "fields": [ + { + "config": { + "interval": 30000 + }, + "name": "time", + "type": "time", + "typeInfo": { + "frame": "time.Time", + "nullable": true + } + }, + { + "config": {}, + "labels": {}, + "name": "A-hehwzd", + "type": "number", + "typeInfo": { + "frame": "float64", + "nullable": true + } + } + ], + "meta": { + "custom": { + "customStat": 10 + }, + "typeVersion": [ + 0, + 0 + ] + }, + "refId": "A" + } + } + ] + } + ], + "title": "Canvas Enhanced Data Links", + "transformations": [ + { + "id": "calculateField", + "options": { + "alias": "Count (transformation)", + "mode": "reduceRow", + "reduce": { + "include": [ + "A-series" + ], + "reducer": "count" + } + } + } + ], + "type": "canvas" + } + ], + "schemaVersion": 39, + "tags": [ + "gdev", + "panel-tests", + "canvas" + ], + "templating": { + "list": [] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timeRangeUpdatedDuringEditOrView": false, + "timepicker": {}, + "timezone": "browser", + "title": "Panel Tests - Canvas Datalinks", + "uid": "adf95uwu7w1s0e", + "version": 26, + "weekStart": "" +} \ No newline at end of file diff --git a/devenv/dev-dashboards/panel-histogram/histogram_tests.json b/devenv/dev-dashboards/panel-histogram/histogram_tests.json index 4399f6b67961e..60ca7a6302b7d 100644 --- a/devenv/dev-dashboards/panel-histogram/histogram_tests.json +++ b/devenv/dev-dashboards/panel-histogram/histogram_tests.json @@ -59,7 +59,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -128,7 +129,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -197,7 +199,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -279,7 +282,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -341,7 +345,9 @@ }, "custom": { "align": "auto", - "displayMode": "auto", + "cellOptions": { + "type": "auto" + }, "inspect": false }, "mappings": [], @@ -356,7 +362,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -368,6 +375,7 @@ }, "id": 8, "options": { + "cellHeight": "sm", "footer": { "countRows": false, "fields": [], @@ -376,9 +384,15 @@ ], "show": false }, - "showHeader": true + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Height" + } + ] }, - "pluginVersion": "9.4.0-pre", + "pluginVersion": "10.4.0-pre", "targets": [ { "csvFileName": "weight_height.csv", @@ -393,6 +407,7 @@ "title": "Standalone transform - Height", "transformations": [ { + "disabled": true, "id": "filterFieldsByName", "options": { "include": { @@ -403,6 +418,7 @@ } }, { + "disabled": true, "id": "histogram", "options": { "combine": true, @@ -424,7 +440,9 @@ }, "custom": { "align": "auto", - "displayMode": "auto", + "cellOptions": { + "type": "auto" + }, "inspect": false }, "mappings": [], @@ -439,7 +457,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -451,6 +470,7 @@ }, "id": 9, "options": { + "cellHeight": "sm", "footer": { "countRows": false, "fields": [], @@ -461,7 +481,7 @@ }, "showHeader": true }, - "pluginVersion": "9.4.0-pre", + "pluginVersion": "10.4.0-pre", "targets": [ { "csvFileName": "weight_height.csv", @@ -527,7 +547,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [ { @@ -611,7 +632,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [ { @@ -695,7 +717,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [ { @@ -746,9 +769,157 @@ ], "title": "Implict xMin", "type": "histogram" + }, + { + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1 + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unitScale": true + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 33 + }, + "id": 14, + "options": { + "bucketOffset": 0, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + } + }, + "targets": [ + { + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "PD8C576611E62080A" + }, + "rawFrameContent": "[\n {\n \"schema\": {\n \"refId\": \"A\",\n \"meta\": {\n \"custom\": {\n \"resultType\": \"matrix\"\n },\n \"type\": \"heatmap-rows\",\n \"typeVersion\": [\n 0,\n 1\n ]\n },\n \"name\": \"0.005\",\n \"fields\": [\n {\n \"config\": {\n \"interval\": 1200000\n },\n \"name\": \"Time\",\n \"type\": \"time\",\n \"typeInfo\": {\n \"frame\": \"time.Time\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"0.005\"\n },\n \"labels\": {\n \"le\": \"0.005\"\n },\n \"name\": \"0.005\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"0.01\"\n },\n \"labels\": {\n \"le\": \"0.01\"\n },\n \"name\": \"0.01\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"0.025\"\n },\n \"labels\": {\n \"le\": \"0.025\"\n },\n \"name\": \"0.025\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"0.05\"\n },\n \"labels\": {\n \"le\": \"0.05\"\n },\n \"name\": \"0.05\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"0.1\"\n },\n \"labels\": {\n \"le\": \"0.1\"\n },\n \"name\": \"0.1\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"0.25\"\n },\n \"labels\": {\n \"le\": \"0.25\"\n },\n \"name\": \"0.25\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"0.5\"\n },\n \"labels\": {\n \"le\": \"0.5\"\n },\n \"name\": \"0.5\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"1.0\"\n },\n \"labels\": {\n \"le\": \"1.0\"\n },\n \"name\": \"1.0\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"2.5\"\n },\n \"labels\": {\n \"le\": \"2.5\"\n },\n \"name\": \"2.5\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"5.0\"\n },\n \"labels\": {\n \"le\": \"5.0\"\n },\n \"name\": \"5.0\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"10.0\"\n },\n \"labels\": {\n \"le\": \"10.0\"\n },\n \"name\": \"10.0\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"25.0\"\n },\n \"labels\": {\n \"le\": \"25.0\"\n },\n \"name\": \"25.0\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"50.0\"\n },\n \"labels\": {\n \"le\": \"50.0\"\n },\n \"name\": \"50.0\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"100.0\"\n },\n \"labels\": {\n \"le\": \"100.0\"\n },\n \"name\": \"100.0\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n },\n {\n \"config\": {\n \"displayNameFromDS\": \"+Inf\"\n },\n \"labels\": {\n \"le\": \"+Inf\"\n },\n \"name\": \"+Inf\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n }\n }\n ]\n },\n \"data\": {\n \"values\": [\n [\n 1706456400000,\n 1706457600000,\n 1706458800000,\n 1706460000000,\n 1706461200000,\n 1706462400000,\n 1706463600000,\n 1706464800000,\n 1706466000000,\n 1706467200000,\n 1706468400000,\n 1706469600000,\n 1706470800000,\n 1706472000000,\n 1706473200000,\n 1706474400000,\n 1706475600000,\n 1706476800000,\n 1706478000000\n ],\n [\n 0.19357429718875502,\n 0.18072289156626506,\n 0.18313253012048192,\n 0.18955823293172688,\n 0.18634538152610441,\n 0.19518072289156624,\n 0.20080321285140562,\n 0.18313253012048192,\n 0.19678714859437751,\n 0.18795180722891563,\n 0.18473895582329317,\n 0.19357429718875502,\n 0.19116465863453813,\n 0.19196787148594374,\n 0.19437751004016063,\n 0.19759036144578312,\n 0.19839357429718874,\n 0.19357429718875502,\n 0.18634538152610441\n ],\n [\n 0.22248995983935738,\n 0.229718875502008,\n 0.22248995983935738,\n 0.22168674698795174,\n 0.2305220883534136,\n 0.21285140562248994,\n 0.2128514056224899,\n 0.22891566265060237,\n 0.22570281124497987,\n 0.22088353413654616,\n 0.22088353413654618,\n 0.21927710843373488,\n 0.21686746987951805,\n 0.22248995983935738,\n 0.21847389558232927,\n 0.21124497991967867,\n 0.216867469879518,\n 0.2200803212851405,\n 0.22329317269076304\n ],\n [\n 0.017670682730923704,\n 0.02329317269076303,\n 0.027309236947791138,\n 0.02168674698795181,\n 0.016867469879518093,\n 0.025702811244979917,\n 0.02008032128514059,\n 0.018473895582329314,\n 0.01124497991967871,\n 0.024899598393574307,\n 0.025702811244979862,\n 0.0208835341365462,\n 0.02409638554216864,\n 0.01927710843373498,\n 0.0208835341365462,\n 0.02248995983935742,\n 0.016867469879518093,\n 0.02008032128514059,\n 0.02329317269076303\n ],\n [\n 0,\n 0,\n 0.0008032128514056658,\n 0.0008032128514056658,\n 0,\n 0,\n 0,\n 0.0032128514056224966,\n 0,\n 0,\n 0.0024096385542168863,\n 0,\n 0.001606425702811276,\n 0,\n 0,\n 0.0024096385542168863,\n 0.001606425702811276,\n 0,\n 0.0008032128514056103\n ],\n [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ],\n [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ],\n [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ],\n [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ],\n [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ],\n [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ],\n [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ],\n [\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665,\n 0.06666666666666665\n ],\n [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ],\n [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ],\n [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]\n ]\n }\n }\n]", + "refId": "A", + "scenarioId": "raw_frame" + } + ], + "title": "heatmap-rows frame", + "type": "histogram" + }, + { + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1 + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unitScale": true + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "sum(rate(cortex_request_duration_seconds{container=~\"compactor\", route=~\"(debug_pprof|metrics|ready)\"}[4m0s]))" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 33 + }, + "id": 15, + "options": { + "bucketOffset": 0, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + } + }, + "targets": [ + { + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "PD8C576611E62080A" + }, + "rawFrameContent": "[\n {\n \"schema\": {\n \"refId\": \"A\",\n \"meta\": {\n \"type\": \"heatmap-cells\",\n \"typeVersion\": [\n 0,\n 0\n ],\n \"executedQueryString\": \"Expr: sum(rate(cortex_request_duration_seconds{container=~\\\"compactor\\\", route=~\\\"(debug_pprof|metrics|ready)\\\"}[4m0s]))\\nStep: 1m0s\",\n \"preferredVisualisationType\": \"graph\"\n },\n \"fields\": [\n {\n \"name\": \"xMax\",\n \"type\": \"time\",\n \"typeInfo\": {\n \"frame\": \"time.Time\"\n },\n \"config\": {\n \"interval\": 60000\n }\n },\n {\n \"name\": \"yMin\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n },\n \"labels\": {},\n \"config\": {\n \"displayNameFromDS\": \"sum(rate(cortex_request_duration_seconds{container=~\\\"compactor\\\", route=~\\\"(debug_pprof|metrics|ready)\\\"}[4m0s]))\"\n }\n },\n {\n \"name\": \"yMax\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n },\n \"config\": {}\n },\n {\n \"name\": \"count\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"float64\"\n },\n \"config\": {}\n },\n {\n \"name\": \"yLayout\",\n \"type\": \"number\",\n \"typeInfo\": {\n \"frame\": \"int8\"\n },\n \"config\": {}\n }\n ]\n },\n \"data\": {\n \"values\": [\n [\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483460000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483520000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483580000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483640000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483700000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000,\n 1706483760000\n ],\n [\n 0.000012831061023768835,\n 0.000013992371264719713,\n 0.000016639827463764308,\n 0.0000181458605194507,\n 0.000019788201212326197,\n 0.000021579186437577742,\n 0.00002566212204753767,\n 0.000039576402424652394,\n 0.00020529697638030136,\n 0.0002238779402355154,\n 0.00026623723942022893,\n 0.0002903337683112112,\n 0.00031661121939721915,\n 0.00048828125,\n 0.002532889755177753,\n 0.002762135864009951,\n 0.00390625,\n 0.004259795830723663,\n 0.004645340292979379,\n 0.005065779510355506,\n 0.005524271728019902,\n 0.0060242610367497685,\n 0.006569503244169644,\n 0.007164094087536493,\n 0.0078125,\n 0.009290680585958758,\n 0.010131559020711013,\n 0.012048522073499537,\n 0.014328188175072986,\n 0.01703918332289465,\n 0.018581361171917516,\n 0.020263118041422026,\n 13.45434264405943,\n 0.000012831061023768835,\n 0.000013992371264719713,\n 0.000016639827463764308,\n 0.0000181458605194507,\n 0.000019788201212326197,\n 0.000021579186437577742,\n 0.00002566212204753767,\n 0.000039576402424652394,\n 0.0002238779402355154,\n 0.000244140625,\n 0.00026623723942022893,\n 0.0002903337683112112,\n 0.00048828125,\n 0.0021298979153618314,\n 0.002532889755177753,\n 0.002762135864009951,\n 0.00390625,\n 0.004259795830723663,\n 0.004645340292979379,\n 0.005065779510355506,\n 0.005524271728019902,\n 0.0060242610367497685,\n 0.006569503244169644,\n 0.007164094087536493,\n 0.0078125,\n 0.009290680585958758,\n 0.010131559020711013,\n 0.011048543456039804,\n 0.012048522073499537,\n 0.014328188175072986,\n 0.01703918332289465,\n 13.45434264405943,\n 0.000012831061023768835,\n 0.000013992371264719713,\n 0.000016639827463764308,\n 0.0000181458605194507,\n 0.000019788201212326197,\n 0.000021579186437577742,\n 0.00002566212204753767,\n 0.000244140625,\n 0.00026623723942022893,\n 0.0002903337683112112,\n 0.0021298979153618314,\n 0.002532889755177753,\n 0.002762135864009951,\n 0.00390625,\n 0.004259795830723663,\n 0.004645340292979379,\n 0.005065779510355506,\n 0.005524271728019902,\n 0.0060242610367497685,\n 0.006569503244169644,\n 0.007164094087536493,\n 0.0078125,\n 0.009290680585958758,\n 0.010131559020711013,\n 0.011048543456039804,\n 0.012048522073499537,\n 0.014328188175072986,\n 0.01703918332289465,\n 13.45434264405943,\n 0.000012831061023768835,\n 0.000013992371264719713,\n 0.0000152587890625,\n 0.000016639827463764308,\n 0.0000181458605194507,\n 0.000019788201212326197,\n 0.000021579186437577742,\n 0.00002566212204753767,\n 0.000244140625,\n 0.00026623723942022893,\n 0.0002903337683112112,\n 0.0021298979153618314,\n 0.002762135864009951,\n 0.00390625,\n 0.004259795830723663,\n 0.004645340292979379,\n 0.005065779510355506,\n 0.005524271728019902,\n 0.0060242610367497685,\n 0.006569503244169644,\n 0.007164094087536493,\n 0.0078125,\n 0.008519591661447326,\n 0.009290680585958758,\n 0.010131559020711013,\n 0.011048543456039804,\n 0.012048522073499537,\n 0.014328188175072986,\n 0.01703918332289465,\n 13.45434264405943,\n 0.000012831061023768835,\n 0.000013992371264719713,\n 0.0000152587890625,\n 0.000016639827463764308,\n 0.0000181458605194507,\n 0.000019788201212326197,\n 0.000021579186437577742,\n 0.00002566212204753767,\n 0.000244140625,\n 0.00026623723942022893,\n 0.0002903337683112112,\n 0.0005806675366224224,\n 0.0021298979153618314,\n 0.002762135864009951,\n 0.00390625,\n 0.004259795830723663,\n 0.004645340292979379,\n 0.005065779510355506,\n 0.005524271728019902,\n 0.0060242610367497685,\n 0.006569503244169644,\n 0.007164094087536493,\n 0.0078125,\n 0.008519591661447326,\n 0.009290680585958758,\n 0.010131559020711013,\n 0.011048543456039804,\n 0.015625,\n 13.45434264405943,\n 0.000012831061023768835,\n 0.000013992371264719713,\n 0.0000152587890625,\n 0.000016639827463764308,\n 0.0000181458605194507,\n 0.000019788201212326197,\n 0.000021579186437577742,\n 0.00002566212204753767,\n 0.000244140625,\n 0.00026623723942022893,\n 0.0002903337683112112,\n 0.00031661121939721915,\n 0.0003452669830012439,\n 0.0005806675366224224,\n 0.0021298979153618314,\n 0.002762135864009951,\n 0.00390625,\n 0.004259795830723663,\n 0.004645340292979379,\n 0.005065779510355506,\n 0.005524271728019902,\n 0.0060242610367497685,\n 0.006569503244169644,\n 0.007164094087536493,\n 0.0078125,\n 0.008519591661447326,\n 0.009290680585958758,\n 0.010131559020711013,\n 0.011048543456039804,\n 0.015625,\n 13.45434264405943\n ],\n [\n 0.000013992371264719713,\n 0.0000152587890625,\n 0.0000181458605194507,\n 0.000019788201212326197,\n 0.000021579186437577742,\n 0.000023532269674803783,\n 0.000027984742529439426,\n 0.000043158372875155485,\n 0.0002238779402355154,\n 0.000244140625,\n 0.0002903337683112112,\n 0.00031661121939721915,\n 0.0003452669830012439,\n 0.0005324744788404579,\n 0.002762135864009951,\n 0.0030121305183748843,\n 0.004259795830723663,\n 0.004645340292979379,\n 0.005065779510355506,\n 0.005524271728019902,\n 0.0060242610367497685,\n 0.006569503244169644,\n 0.007164094087536493,\n 0.0078125,\n 0.008519591661447326,\n 0.010131559020711013,\n 0.011048543456039804,\n 0.013139006488339287,\n 0.015625,\n 0.018581361171917516,\n 0.020263118041422026,\n 0.022097086912079608,\n 14.672064691274738,\n 0.000013992371264719713,\n 0.0000152587890625,\n 0.0000181458605194507,\n 0.000019788201212326197,\n 0.000021579186437577742,\n 0.000023532269674803783,\n 0.000027984742529439426,\n 0.000043158372875155485,\n 0.000244140625,\n 0.00026623723942022893,\n 0.0002903337683112112,\n 0.00031661121939721915,\n 0.0005324744788404579,\n 0.0023226701464896895,\n 0.002762135864009951,\n 0.0030121305183748843,\n 0.004259795830723663,\n 0.004645340292979379,\n 0.005065779510355506,\n 0.005524271728019902,\n 0.0060242610367497685,\n 0.006569503244169644,\n 0.007164094087536493,\n 0.0078125,\n 0.008519591661447326,\n 0.010131559020711013,\n 0.011048543456039804,\n 0.012048522073499537,\n 0.013139006488339287,\n 0.015625,\n 0.018581361171917516,\n 14.672064691274738,\n 0.000013992371264719713,\n 0.0000152587890625,\n 0.0000181458605194507,\n 0.000019788201212326197,\n 0.000021579186437577742,\n 0.000023532269674803783,\n 0.000027984742529439426,\n 0.00026623723942022893,\n 0.0002903337683112112,\n 0.00031661121939721915,\n 0.0023226701464896895,\n 0.002762135864009951,\n 0.0030121305183748843,\n 0.004259795830723663,\n 0.004645340292979379,\n 0.005065779510355506,\n 0.005524271728019902,\n 0.0060242610367497685,\n 0.006569503244169644,\n 0.007164094087536493,\n 0.0078125,\n 0.008519591661447326,\n 0.010131559020711013,\n 0.011048543456039804,\n 0.012048522073499537,\n 0.013139006488339287,\n 0.015625,\n 0.018581361171917516,\n 14.672064691274738,\n 0.000013992371264719713,\n 0.0000152587890625,\n 0.000016639827463764308,\n 0.0000181458605194507,\n 0.000019788201212326197,\n 0.000021579186437577742,\n 0.000023532269674803783,\n 0.000027984742529439426,\n 0.00026623723942022893,\n 0.0002903337683112112,\n 0.00031661121939721915,\n 0.0023226701464896895,\n 0.0030121305183748843,\n 0.004259795830723663,\n 0.004645340292979379,\n 0.005065779510355506,\n 0.005524271728019902,\n 0.0060242610367497685,\n 0.006569503244169644,\n 0.007164094087536493,\n 0.0078125,\n 0.008519591661447326,\n 0.009290680585958758,\n 0.010131559020711013,\n 0.011048543456039804,\n 0.012048522073499537,\n 0.013139006488339287,\n 0.015625,\n 0.018581361171917516,\n 14.672064691274738,\n 0.000013992371264719713,\n 0.0000152587890625,\n 0.000016639827463764308,\n 0.0000181458605194507,\n 0.000019788201212326197,\n 0.000021579186437577742,\n 0.000023532269674803783,\n 0.000027984742529439426,\n 0.00026623723942022893,\n 0.0002903337683112112,\n 0.00031661121939721915,\n 0.0006332224387944383,\n 0.0023226701464896895,\n 0.0030121305183748843,\n 0.004259795830723663,\n 0.004645340292979379,\n 0.005065779510355506,\n 0.005524271728019902,\n 0.0060242610367497685,\n 0.006569503244169644,\n 0.007164094087536493,\n 0.0078125,\n 0.008519591661447326,\n 0.009290680585958758,\n 0.010131559020711013,\n 0.011048543456039804,\n 0.012048522073499537,\n 0.01703918332289465,\n 14.672064691274738,\n 0.000013992371264719713,\n 0.0000152587890625,\n 0.000016639827463764308,\n 0.0000181458605194507,\n 0.000019788201212326197,\n 0.000021579186437577742,\n 0.000023532269674803783,\n 0.000027984742529439426,\n 0.00026623723942022893,\n 0.0002903337683112112,\n 0.00031661121939721915,\n 0.0003452669830012439,\n 0.00037651631479686053,\n 0.0006332224387944383,\n 0.0023226701464896895,\n 0.0030121305183748843,\n 0.004259795830723663,\n 0.004645340292979379,\n 0.005065779510355506,\n 0.005524271728019902,\n 0.0060242610367497685,\n 0.006569503244169644,\n 0.007164094087536493,\n 0.0078125,\n 0.008519591661447326,\n 0.009290680585958758,\n 0.010131559020711013,\n 0.011048543456039804,\n 0.012048522073499537,\n 0.01703918332289465,\n 14.672064691274738\n ],\n [\n 0.0044444444444444444,\n 0.017777777777777778,\n 0.0044444444444444444,\n 0.035555555555555556,\n 0.017777777777777778,\n 0.013333333333333332,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.008888888888888889,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.008888888888888889,\n 0.0044444444444444444,\n 0.017777777777777778,\n 0.03111111111111111,\n 0.013333333333333332,\n 0.05333333333333334,\n 0.035555555555555556,\n 0.022222222222222223,\n 0.022222222222222223,\n 0.022222222222222223,\n 0.017777777777777778,\n 0.013333333333333332,\n 0.013333333333333332,\n 0.008888888888888889,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.06666666666666667,\n 0.008888888888888889,\n 0.017777777777777778,\n 0.008888888888888889,\n 0.04,\n 0.0044444444444444444,\n 0.013333333333333332,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.013333333333333332,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.008888888888888889,\n 0.0044444444444444444,\n 0.026666666666666665,\n 0.035555555555555556,\n 0.008888888888888889,\n 0.044444444444444446,\n 0.035555555555555556,\n 0.026666666666666665,\n 0.022222222222222223,\n 0.022222222222222223,\n 0.013333333333333332,\n 0.008888888888888889,\n 0.017777777777777778,\n 0.0044444444444444444,\n 0.008888888888888889,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.06666666666666667,\n 0.008888888888888889,\n 0.017777777777777778,\n 0.017777777777777778,\n 0.04,\n 0.0044444444444444444,\n 0.008888888888888889,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.008888888888888889,\n 0.017777777777777778,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.008888888888888889,\n 0.022222222222222223,\n 0.03111111111111111,\n 0.008888888888888889,\n 0.044444444444444446,\n 0.035555555555555556,\n 0.026666666666666665,\n 0.026666666666666665,\n 0.022222222222222223,\n 0.017777777777777778,\n 0.008888888888888889,\n 0.017777777777777778,\n 0.0044444444444444444,\n 0.008888888888888889,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.06666666666666667,\n 0.008888888888888889,\n 0.017777777777777778,\n 0.0044444444444444444,\n 0.017777777777777778,\n 0.03111111111111111,\n 0.008888888888888889,\n 0.008888888888888889,\n 0.0044444444444444444,\n 0.008888888888888889,\n 0.013333333333333332,\n 0.008888888888888889,\n 0.008888888888888889,\n 0.008888888888888889,\n 0.022222222222222223,\n 0.013333333333333332,\n 0.008888888888888889,\n 0.044444444444444446,\n 0.04,\n 0.022222222222222223,\n 0.022222222222222223,\n 0.022222222222222223,\n 0.03111111111111111,\n 0.0044444444444444444,\n 0.013333333333333332,\n 0.017777777777777778,\n 0.008888888888888889,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.06666666666666667,\n 0.008888888888888889,\n 0.026666666666666665,\n 0.0044444444444444444,\n 0.013333333333333332,\n 0.022222222222222223,\n 0.008888888888888889,\n 0.013333333333333332,\n 0.0044444444444444444,\n 0.008888888888888889,\n 0.008888888888888889,\n 0.008888888888888889,\n 0.0044444444444444444,\n 0.008888888888888889,\n 0.008888888888888889,\n 0.026666666666666665,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.035555555555555556,\n 0.057777777777777775,\n 0.026666666666666665,\n 0.03111111111111111,\n 0.03111111111111111,\n 0.022222222222222223,\n 0.0044444444444444444,\n 0.013333333333333332,\n 0.013333333333333332,\n 0.008888888888888889,\n 0.0044444444444444444,\n 0.06666666666666667,\n 0.0044444444444444444,\n 0.026666666666666665,\n 0.0044444444444444444,\n 0.022222222222222223,\n 0.022222222222222223,\n 0.0044444444444444444,\n 0.013333333333333332,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.008888888888888889,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.013333333333333332,\n 0.017777777777777778,\n 0.013333333333333332,\n 0.008888888888888889,\n 0.035555555555555556,\n 0.05333333333333333,\n 0.022222222222222223,\n 0.026666666666666665,\n 0.035555555555555556,\n 0.022222222222222223,\n 0.008888888888888889,\n 0.02222222222222222,\n 0.008888888888888889,\n 0.0044444444444444444,\n 0.0044444444444444444,\n 0.06666666666666667\n ],\n [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]\n ]\n }\n }\n]", + "refId": "A", + "scenarioId": "raw_frame" + } + ], + "title": "heatmap-cells frame", + "type": "histogram" } ], - "schemaVersion": 37, + "refresh": "", + "schemaVersion": 39, "tags": [ "gdev", "panel-tests", @@ -765,6 +936,6 @@ "timezone": "", "title": "Panel Tests - Histogram", "uid": "UTv--wqMk", - "version": 7, + "version": 29, "weekStart": "" } diff --git a/devenv/dev-dashboards/panel-timeline/timeline-align-endtime.json b/devenv/dev-dashboards/panel-timeline/timeline-align-endtime.json new file mode 100644 index 0000000000000..8542c7349b6f8 --- /dev/null +++ b/devenv/dev-dashboards/panel-timeline/timeline-align-endtime.json @@ -0,0 +1,271 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 988, + "links": [], + "panels": [ + { + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "fillOpacity": 70, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineWidth": 0, + "spanNulls": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 15, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "alignValue": "left", + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "mergeValues": true, + "rowHeight": 0.9, + "showValue": "auto", + "tooltip": { + "maxHeight": 600, + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "PD8C576611E62080A" + }, + "rawFrameContent": "[\n {\n \"schema\": {\n \"refId\": \"A\",\n \"meta\": {\n \"typeVersion\": [\n 0,\n 0\n ]\n },\n \"name\": \"A\",\n \"fields\": [\n {\n \"name\": \"channel\",\n \"config\": {\n \"selector\": \"channel\"\n },\n \"type\": \"string\"\n },\n {\n \"name\": \"name\",\n \"config\": {\n \"selector\": \"name\"\n },\n \"type\": \"string\"\n },\n {\n \"name\": \"starttime\",\n \"config\": {\n \"selector\": \"starttime\"\n },\n \"type\": \"string\"\n },\n {\n \"name\": \"endtime\",\n \"config\": {\n \"selector\": \"endtime\"\n },\n \"type\": \"string\"\n },\n {\n \"name\": \"duration_minutes\",\n \"config\": {\n \"selector\": \"duration_minutes\"\n },\n \"type\": \"number\"\n },\n {\n \"name\": \"state\",\n \"config\": {\n \"selector\": \"state\"\n },\n \"type\": \"string\"\n }\n ]\n },\n \"data\": {\n \"values\": [\n [\n \"Channel 1\",\n \"Channel 2\",\n \"Channel 1\",\n \"Channel 2\"\n ],\n [\n \"Event 1\",\n \"Event 2\",\n \"Event 3\",\n \"Event 4\"\n ],\n [\n \"2024-02-28T08:00:00Z\",\n \"2024-02-28T09:00:00Z\",\n \"2024-02-28T11:00:00Z\",\n \"2024-02-28T12:30:00Z\"\n ],\n [\n \"2024-02-28T10:00:00Z\",\n \"2024-02-28T10:30:00Z\",\n \"2024-02-28T14:00:00Z\",\n \"2024-02-28T13:30:00Z\"\n ],\n [\n 120,\n 90,\n 180,\n 60\n ],\n [\n \"OK\",\n \"ERROR\",\n \"NO_DATA\",\n \"WARNING\"\n ]\n ]\n }\n }\n]", + "refId": "A", + "scenarioId": "raw_frame" + } + ], + "title": "Raw frames w/enums", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "channel": false, + "duration_minutes": true, + "name": true + }, + "includeByName": {}, + "indexByName": {}, + "renameByName": {} + } + }, + { + "id": "convertFieldType", + "options": { + "conversions": [ + { + "destinationType": "time", + "enumConfig": { + "text": [ + "2024-02-28T08:00:00Z", + "2024-02-28T09:00:00Z", + "2024-02-28T11:00:00Z", + "2024-02-28T12:30:00Z" + ] + }, + "targetField": "starttime" + }, + { + "destinationType": "time", + "targetField": "endtime" + }, + { + "destinationType": "enum", + "enumConfig": { + "text": [ + "OK", + "ERROR", + "NO_DATA", + "WARNING" + ] + }, + "targetField": "state" + } + ], + "fields": {} + } + }, + { + "id": "partitionByValues", + "options": { + "fields": [ + "channel" + ], + "keepFields": false, + "naming": { + "asLabels": false + } + } + } + ], + "type": "state-timeline" + }, + { + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "fillOpacity": 70, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineWidth": 0, + "spanNulls": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 15, + "x": 0, + "y": 13 + }, + "id": 2, + "options": { + "alignValue": "left", + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "mergeValues": true, + "rowHeight": 0.9, + "showValue": "auto", + "tooltip": { + "maxHeight": 600, + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "alias": "Channel 1", + "csvContent": "starttime,endtime,state\n1709107200000,1709114400000,OK\n1709118000000,1709128800000,NO_DATA", + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "csv_content" + }, + { + "alias": "Channel 2", + "csvContent": "starttime,endtime,state\n1709110800000,1709116200000,ERROR\n1709123400000,1709127000000,WARNING", + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "PD8C576611E62080A" + }, + "refId": "B", + "scenarioId": "csv_content" + } + ], + "title": "CSV content", + "type": "state-timeline" + } + ], + "refresh": "", + "schemaVersion": 39, + "tags": [ + "gdev", + "panel-tests", + "graph-ng", + "demo" + ], + "templating": { + "list": [] + }, + "time": { + "from": "2024-02-28T07:47:21.428Z", + "to": "2024-02-28T14:12:43.391Z" + }, + "timeRangeUpdatedDuringEditOrView": false, + "timepicker": {}, + "timezone": "browser", + "title": "Panel Tests - StateTimeline - multiple frames with endTime", + "uid": "cdf3gkge5reo0f", + "version": 4, + "weekStart": "" +} \ No newline at end of file diff --git a/devenv/dev-dashboards/panel-timeline/timeline-align-nulls-retain.json b/devenv/dev-dashboards/panel-timeline/timeline-align-nulls-retain.json new file mode 100644 index 0000000000000..49907cca7714c --- /dev/null +++ b/devenv/dev-dashboards/panel-timeline/timeline-align-nulls-retain.json @@ -0,0 +1,213 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 993, + "links": [], + "panels": [ + { + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "PD8C576611E62080A" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "light-blue", + "mode": "fixed" + }, + "custom": { + "fillOpacity": 20, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineWidth": 1, + "spanNulls": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Dose" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#289fb0", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mix" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#d4b10b", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cook" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#c900c3", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Int. Shear" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#a49225", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Ext. Shear" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#148dd7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Transfer" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#01b70c", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 19, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 2, + "options": { + "alignValue": "center", + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "mergeValues": false, + "rowHeight": 0.9, + "showValue": "auto", + "tooltip": { + "maxHeight": 600, + "mode": "single", + "sort": "none" + } + }, + "repeat": "CHANNEL", + "repeatDirection": "v", + "targets": [ + { + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "PD8C576611E62080A" + }, + "rawFrameContent": "[\n {\n \"schema\": {\n \"refId\": \"Dose\",\n \"meta\": {\n \"executedQueryString\": \"from(bucket: \\\"data\\\")\\r\\n |> range(start: 2023-10-20T05:04:00Z, stop: 2023-10-20T07:22:00Z)\\r\\n |> filter(fn: (r) => r[\\\"_field\\\"] == \\\"FactoryManager_Analogs_DB.A01C02U09.PHS.Dose\\\")\\r\\n |> keep(columns: [\\\"_time\\\", \\\"_value\\\"])\\r\\n |> map(fn: (r) => ({ \\r\\n \\\"Dose\\\": r._value,\\r\\n time: r._time,\\r\\n }))\\r\\n\",\n \"typeVersion\": [\n 0,\n 0\n ]\n },\n \"fields\": [\n {\n \"config\": {},\n \"labels\": {},\n \"name\": \"time\",\n \"type\": \"time\",\n \"typeInfo\": {\n \"frame\": \"time.Time\",\n \"nullable\": true\n }\n },\n {\n \"config\": {},\n \"labels\": {},\n \"name\": \"Dose\",\n \"type\": \"string\",\n \"typeInfo\": {\n \"frame\": \"string\",\n \"nullable\": true\n }\n }\n ]\n },\n \"data\": {\n \"values\": [\n [\n 1697781872300,\n 1697781963303,\n 1697784138453,\n 1697784160451\n ],\n [\n \"Cold Water Dosing Active (150 ltrs)\",\n null,\n \"Hot Water Dosing Active (50 ltrs)\",\n null\n ]\n ]\n }\n },\n {\n \"schema\": {\n \"refId\": \"Mix\",\n \"meta\": {\n \"executedQueryString\": \"from(bucket: \\\"data\\\")\\r\\n |> range(start: 2023-10-20T05:04:00Z, stop: 2023-10-20T07:22:00Z)\\r\\n |> filter(fn: (r) => r[\\\"_field\\\"] == \\\"FactoryManager_Analogs_DB.A01C02U09.PHS.Mix\\\")\\r\\n |> keep(columns: [\\\"_time\\\", \\\"_value\\\"])\\r\\n |> map(fn: (r) => ({ \\r\\n \\\"Mix\\\": r._value,\\r\\n time: r._time,\\r\\n }))\\r\\n\",\n \"typeVersion\": [\n 0,\n 0\n ]\n },\n \"fields\": [\n {\n \"config\": {},\n \"labels\": {},\n \"name\": \"time\",\n \"type\": \"time\",\n \"typeInfo\": {\n \"frame\": \"time.Time\",\n \"nullable\": true\n }\n },\n {\n \"config\": {},\n \"labels\": {},\n \"name\": \"Mix\",\n \"type\": \"string\",\n \"typeInfo\": {\n \"frame\": \"string\",\n \"nullable\": true\n }\n }\n ]\n },\n \"data\": {\n \"values\": [\n [\n 1697778291972,\n 1697778393992,\n 1697778986994,\n 1697786485890\n ],\n [\n \"Running Constant Forward\",\n null,\n \"Running Constant Forward\",\n null\n ]\n ]\n }\n },\n {\n \"schema\": {\n \"refId\": \"Cook\",\n \"meta\": {\n \"executedQueryString\": \"from(bucket: \\\"data\\\")\\r\\n |> range(start: 2023-10-20T05:04:00Z, stop: 2023-10-20T07:22:00Z)\\r\\n |> filter(fn: (r) => r[\\\"_field\\\"] == \\\"FactoryManager_Analogs_DB.A01C02U09.PHS.Cook\\\")\\r\\n |> keep(columns: [\\\"_time\\\", \\\"_value\\\"])\\r\\n |> map(fn: (r) => ({ \\r\\n \\\"Cook\\\": r._value,\\r\\n time: r._time,\\r\\n }))\\r\\n\",\n \"typeVersion\": [\n 0,\n 0\n ]\n },\n \"fields\": [\n {\n \"config\": {},\n \"labels\": {},\n \"name\": \"time\",\n \"type\": \"time\",\n \"typeInfo\": {\n \"frame\": \"time.Time\",\n \"nullable\": true\n }\n },\n {\n \"config\": {},\n \"labels\": {},\n \"name\": \"Cook\",\n \"type\": \"string\",\n \"typeInfo\": {\n \"frame\": \"string\",\n \"nullable\": true\n }\n }\n ]\n },\n \"data\": {\n \"values\": [\n [\n 1697779163986,\n 1697779921045,\n 1697780221094,\n 1697780521111,\n 1697781186192,\n 1697781786291,\n 1697783332361,\n 1697783784395,\n 1697783790397,\n 1697784146478,\n 1697784517471,\n 1697784523487,\n 1697784949480,\n 1697785369505\n ],\n [\n \"Heating to Setpoint (92c)\",\n \"Stage Time Running (5 mins)\",\n null,\n \"Heating to Setpoint (96c)\",\n \"Stage Time Running (10 mins)\",\n null,\n \"Heating to Setpoint (92c)\",\n \"Stage Time Running (0 mins)\",\n null,\n \"Heating to Setpoint (92c)\",\n \"Stage Time Running (0 mins)\",\n null,\n \"CCP in Progress (7 mins)\",\n null\n ]\n ]\n }\n },\n {\n \"schema\": {\n \"refId\": \"Shear\",\n \"meta\": {\n \"executedQueryString\": \"from(bucket: \\\"data\\\")\\r\\n |> range(start: 2023-10-20T05:04:00Z, stop: 2023-10-20T07:22:00Z)\\r\\n |> filter(fn: (r) => r[\\\"_field\\\"] == \\\"FactoryManager_Analogs_DB.A01C02U09.PHS.Shear\\\")\\r\\n |> keep(columns: [\\\"_time\\\", \\\"_value\\\"])\\r\\n |> map(fn: (r) => ({ \\r\\n \\\"Int. Shear\\\": r._value,\\r\\n time: r._time,\\r\\n }))\\r\\n\",\n \"typeVersion\": [\n 0,\n 0\n ]\n },\n \"fields\": [\n {\n \"config\": {},\n \"labels\": {},\n \"name\": \"time\",\n \"type\": \"time\",\n \"typeInfo\": {\n \"frame\": \"time.Time\",\n \"nullable\": true\n }\n },\n {\n \"config\": {},\n \"labels\": {},\n \"name\": \"Int. Shear\",\n \"type\": \"string\",\n \"typeInfo\": {\n \"frame\": \"string\",\n \"nullable\": true\n }\n }\n ]\n },\n \"data\": {\n \"values\": [\n [\n 1697782100330,\n 1697782832342\n ],\n [\n \"Shearing Active (12 mins)\",\n null\n ]\n ]\n }\n },\n {\n \"schema\": {\n \"refId\": \"Recirc\",\n \"meta\": {\n \"executedQueryString\": \"from(bucket: \\\"data\\\")\\r\\n |> range(start: 2023-10-20T05:04:00Z, stop: 2023-10-20T07:22:00Z)\\r\\n |> filter(fn: (r) => r[\\\"_field\\\"] == \\\"FactoryManager_Analogs_DB.A01C02U09.PHS.Recirc\\\")\\r\\n |> keep(columns: [\\\"_time\\\", \\\"_value\\\"])\\r\\n |> map(fn: (r) => ({ \\r\\n \\\"Ext. Shear\\\": r._value,\\r\\n time: r._time,\\r\\n }))\\r\\n\",\n \"typeVersion\": [\n 0,\n 0\n ]\n },\n \"fields\": []\n },\n \"data\": {\n \"values\": []\n }\n },\n {\n \"schema\": {\n \"refId\": \"Transfer\",\n \"meta\": {\n \"executedQueryString\": \"from(bucket: \\\"data\\\")\\r\\n |> range(start: 2023-10-20T05:04:00Z, stop: 2023-10-20T07:22:00Z)\\r\\n |> filter(fn: (r) => r[\\\"_field\\\"] == \\\"FactoryManager_Analogs_DB.A01C02U09.PHS.Transfer\\\")\\r\\n |> keep(columns: [\\\"_time\\\", \\\"_value\\\"])\\r\\n |> map(fn: (r) => ({ \\r\\n \\\"Transfer\\\": r._value,\\r\\n time: r._time,\\r\\n }))\\r\\n\",\n \"typeVersion\": [\n 0,\n 0\n ]\n },\n \"fields\": [\n {\n \"config\": {},\n \"labels\": {},\n \"name\": \"time\",\n \"type\": \"time\",\n \"typeInfo\": {\n \"frame\": \"time.Time\",\n \"nullable\": true\n }\n },\n {\n \"config\": {},\n \"labels\": {},\n \"name\": \"Transfer\",\n \"type\": \"string\",\n \"typeInfo\": {\n \"frame\": \"string\",\n \"nullable\": true\n }\n }\n ]\n },\n \"data\": {\n \"values\": [\n [\n 1697785713869,\n 1697785753879,\n 1697785764887,\n 1697785875872,\n 1697786481929\n ],\n [\n \"Pre-Start Drain\",\n null,\n \"Build Pressure (0.6 Barg)\",\n \"Transfer in progress (0.7 Barg)\",\n \"Wait for pressure dissipation (0.2 Barg)\"\n ]\n ]\n }\n }\n]", + "refId": "A", + "scenarioId": "raw_frame" + } + ], + "title": "Reproduced with embedded data", + "type": "state-timeline" + } + ], + "refresh": "", + "schemaVersion": 39, + "tags": [ + "gdev", + "panel-tests", + "graph-ng", + "demo" + ], + "templating": { + "list": [] + }, + "time": { + "from": "2023-10-20T05:04:00.000Z", + "to": "2023-10-20T07:22:00.000Z" + }, + "timeRangeUpdatedDuringEditOrView": false, + "timepicker": {}, + "timezone": "utc", + "title": "Panel Tests - StateTimeline - multiple frames with nulls", + "uid": "edf55caay3w8wa", + "version": 4, + "weekStart": "" +} \ No newline at end of file diff --git a/devenv/dev-dashboards/panel-timeseries/timeseries-by-value-color-schemes.json b/devenv/dev-dashboards/panel-timeseries/timeseries-by-value-color-schemes.json index d785a1fcaffec..1167172539746 100644 --- a/devenv/dev-dashboards/panel-timeseries/timeseries-by-value-color-schemes.json +++ b/devenv/dev-dashboards/panel-timeseries/timeseries-by-value-color-schemes.json @@ -516,7 +516,7 @@ "refId": "A" } ], - "title": "Color line by discrete tresholds", + "title": "Color line by discrete thresholds", "type": "timeseries" }, { diff --git a/devenv/dev-dashboards/panel-xychart/xychart-tooltip-color-test.json b/devenv/dev-dashboards/panel-xychart/xychart-tooltip-color-test.json new file mode 100644 index 0000000000000..5ee05b7b7f9b8 --- /dev/null +++ b/devenv/dev-dashboards/panel-xychart/xychart-tooltip-color-test.json @@ -0,0 +1,687 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "pointSize": { + "fixed": 32 + }, + "scaleDistribution": { + "type": "linear" + }, + "show": "points" + }, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unitScale": true + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 7, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "series": [ + { + "pointColor": { + "fixed": "orange" + }, + "x": "Miles_per_Gallon", + "y": "Horsepower" + } + ], + "seriesMapping": "auto", + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "csvContent": "x,y,z\n1,2,3\n3,4,5\n5,6,7", + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "${DS_GDEV-TESTDATA}" + }, + "refId": "A", + "scenarioId": "csv_content" + } + ], + "title": "Standard options: Single color", + "type": "xychart" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "shades" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "pointSize": { + "fixed": 32 + }, + "scaleDistribution": { + "type": "linear" + }, + "show": "points" + }, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unitScale": true + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 7, + "x": 7, + "y": 0 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "series": [ + { + "pointColor": { + "fixed": "orange" + }, + "x": "Miles_per_Gallon", + "y": "Horsepower" + } + ], + "seriesMapping": "auto", + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "csvContent": "x,y,z\n1,2,3\n3,4,5\n5,6,7", + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "${DS_GDEV-TESTDATA}" + }, + "refId": "A", + "scenarioId": "csv_content" + } + ], + "title": "Standard options: Shades of a color", + "type": "xychart" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "yellow", + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "pointSize": { + "fixed": 32 + }, + "scaleDistribution": { + "type": "linear" + }, + "show": "points" + }, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unitScale": true + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 7, + "x": 14, + "y": 0 + }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "series": [ + { + "pointColor": { + "fixed": "orange" + }, + "x": "Miles_per_Gallon", + "y": "Horsepower" + } + ], + "seriesMapping": "auto", + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "csvContent": "x,y,z\n1,2,3\n3,4,5\n5,6,7", + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "${DS_GDEV-TESTDATA}" + }, + "refId": "A", + "scenarioId": "csv_content" + } + ], + "title": "Standard options: Classic palette", + "type": "xychart" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "pointSize": { + "fixed": 32 + }, + "scaleDistribution": { + "type": "linear" + }, + "show": "points" + }, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unitScale": true + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 7, + "x": 0, + "y": 11 + }, + "id": 5, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "series": [ + { + "pointColor": { + "fixed": "orange" + }, + "x": "x", + "y": "y" + }, + { + "pointColor": { + "fixed": "green" + }, + "x": "x", + "y": "z" + } + ], + "seriesMapping": "manual", + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "csvContent": "x,y,z\n1,2,3\n3,4,5\n5,6,7", + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "${DS_GDEV-TESTDATA}" + }, + "refId": "A", + "scenarioId": "csv_content" + } + ], + "title": "Standard options: Single color + Mapping: Fixed color", + "type": "xychart" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "shades" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "pointSize": { + "fixed": 32 + }, + "scaleDistribution": { + "type": "linear" + }, + "show": "points" + }, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unitScale": true + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 7, + "x": 7, + "y": 11 + }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "series": [ + { + "pointColor": { + "fixed": "orange" + }, + "x": "x", + "y": "y" + }, + { + "pointColor": { + "fixed": "green" + }, + "x": "x", + "y": "z" + } + ], + "seriesMapping": "manual", + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "csvContent": "x,y,z\n1,2,3\n3,4,5\n5,6,7", + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "${DS_GDEV-TESTDATA}" + }, + "refId": "A", + "scenarioId": "csv_content" + } + ], + "title": "Standard options: Shades of color + Mapping: Fixed color", + "type": "xychart" + }, + { + "datasource": {}, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "pointSize": { + "fixed": 32 + }, + "scaleDistribution": { + "type": "linear" + }, + "show": "points" + }, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unitScale": true + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 7, + "x": 14, + "y": 11 + }, + "id": 7, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "series": [ + { + "pointColor": { + "fixed": "orange" + }, + "x": "x", + "y": "y" + }, + { + "pointColor": { + "fixed": "green" + }, + "x": "x", + "y": "z" + } + ], + "seriesMapping": "manual", + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "csvContent": "x,y,z\n1,2,3\n3,4,5\n5,6,7", + "datasource": { + "type": "grafana-testdata-datasource", + "uid": "${DS_GDEV-TESTDATA}" + }, + "refId": "A", + "scenarioId": "csv_content" + } + ], + "title": "Standard options: Classic palette + Mapping: Fixed color", + "type": "xychart" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "pointSize": { + "fixed": 50 + }, + "scaleDistribution": { + "type": "linear" + }, + "show": "points" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unitScale": true + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 7, + "x": 0, + "y": 23 + }, + "id": 8, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "series": [ + { + "pointColor": { + "field": "c", + "fixed": "dark-green" + }, + "x": "x", + "y": "y" + } + ], + "seriesMapping": "manual", + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "csvContent": "x,y,c\n0,0,0\n50,50,25\n100,100,50", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "csv_content" + } + ], + "title": "Panel Title", + "type": "xychart" + } + ], + "refresh": "", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "XYChart tooltip color test", + "uid": "cb67db43-dd72-4ada-a313-53f46c20adcc", + "version": 1, + "weekStart": "" +} \ No newline at end of file diff --git a/devenv/dev-dashboards/scenarios/tall_dashboard.json b/devenv/dev-dashboards/scenarios/tall_dashboard.json new file mode 100644 index 0000000000000..ca87850c2b0c5 --- /dev/null +++ b/devenv/dev-dashboards/scenarios/tall_dashboard.json @@ -0,0 +1,1791 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 1", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #1", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 2, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 2", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #2", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 3, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 3", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #3", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 24 + }, + "id": 4, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 4", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #4", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 32 + }, + "id": 5, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 5", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #5", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 40 + }, + "id": 6, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 6", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #6", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 48 + }, + "id": 7, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 7", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #7", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 56 + }, + "id": 8, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 8", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #8", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 64 + }, + "id": 9, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 9", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #9", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 72 + }, + "id": 10, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 10", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #10", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 80 + }, + "id": 11, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 11", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #11", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 88 + }, + "id": 12, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 12", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #12", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 96 + }, + "id": 13, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 13", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #13", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 104 + }, + "id": 14, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 14", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #14", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 112 + }, + "id": 15, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 15", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #15", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 120 + }, + "id": 16, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 16", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #16", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 128 + }, + "id": 17, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 17", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #17", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 136 + }, + "id": 18, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 18", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #18", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 144 + }, + "id": 19, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 19", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #19", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 152 + }, + "id": 20, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 20", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #20", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 160 + }, + "id": 21, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 21", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #21", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 168 + }, + "id": 22, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 22", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #22", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 176 + }, + "id": 23, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 23", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #23", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 184 + }, + "id": 24, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 24", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #24", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 192 + }, + "id": 25, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 25", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #25", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 200 + }, + "id": 26, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 26", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #26", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 208 + }, + "id": 27, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 27", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #27", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 216 + }, + "id": 28, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 28", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #28", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 224 + }, + "id": 29, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 29", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #29", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 232 + }, + "id": 30, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 30", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #30", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 240 + }, + "id": 31, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 31", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #31", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 248 + }, + "id": 32, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 32", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #32", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 256 + }, + "id": 33, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 33", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #33", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 264 + }, + "id": 34, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 34", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #34", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 272 + }, + "id": 35, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 35", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #35", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 280 + }, + "id": 36, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 36", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #36", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 288 + }, + "id": 37, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 37", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #37", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 296 + }, + "id": 38, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 38", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #38", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 304 + }, + "id": 39, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 39", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #39", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 312 + }, + "id": 40, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 40", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #40", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 320 + }, + "id": 41, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 41", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #41", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 328 + }, + "id": 42, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 42", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #42", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 336 + }, + "id": 43, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 43", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #43", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 344 + }, + "id": 44, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 44", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #44", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 352 + }, + "id": 45, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 45", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #45", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 360 + }, + "id": 46, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 46", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #46", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 368 + }, + "id": 47, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 47", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #47", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 376 + }, + "id": 48, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 48", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #48", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 384 + }, + "id": 49, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 49", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #49", + "type": "text" + }, + { + "datasource": { + "type": "grafana", + "uid": "grafana" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 392 + }, + "id": 50, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Dashboard panel 50", + "mode": "markdown" + }, + "pluginVersion": "11.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Panel #50", + "type": "text" + } + ], + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timeRangeUpdatedDuringEditOrView": false, + "timepicker": {}, + "timezone": "browser", + "title": "A tall dashboard", + "uid": "edediimbjhdz4b", + "version": 1, + "weekStart": "" +} diff --git a/devenv/docker/blocks/auth/README.md b/devenv/docker/blocks/auth/README.md index ed2872704b732..2046804fb9ab1 100644 --- a/devenv/docker/blocks/auth/README.md +++ b/devenv/docker/blocks/auth/README.md @@ -9,7 +9,7 @@ Spin up a service with the following command from the base directory of this repository. ```bash -make devenv=oauth +make devenv=auth/oauth ``` This will add the `oauth/docker-compose` block to the `docker-compose` file used diff --git a/devenv/docker/blocks/auth/authentik/cloak.sql b/devenv/docker/blocks/auth/authentik/cloak.sql index 6669bf2bf6f8a..e861be4726763 100644 --- a/devenv/docker/blocks/auth/authentik/cloak.sql +++ b/devenv/docker/blocks/auth/authentik/cloak.sql @@ -2,8 +2,8 @@ -- PostgreSQL database dump -- --- Dumped from database version 12.13 --- Dumped by pg_dump version 12.13 +-- Dumped from database version 16.1 (Debian 16.1-1.pgdg120+1) +-- Dumped by pg_dump version 16.1 (Debian 16.1-1.pgdg120+1) SET statement_timeout = 0; SET lock_timeout = 0; @@ -178,6 +178,33 @@ CREATE TABLE public.authentik_core_group ( ALTER TABLE public.authentik_core_group OWNER TO authentik; +-- +-- Name: authentik_core_group_roles; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_core_group_roles ( + id integer NOT NULL, + group_id uuid NOT NULL, + role_id uuid NOT NULL +); + + +ALTER TABLE public.authentik_core_group_roles OWNER TO authentik; + +-- +-- Name: authentik_core_group_roles_id_seq; Type: SEQUENCE; Schema: public; Owner: authentik +-- + +ALTER TABLE public.authentik_core_group_roles ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.authentik_core_group_roles_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + -- -- Name: authentik_core_propertymapping; Type: TABLE; Schema: public; Owner: authentik -- @@ -198,8 +225,11 @@ ALTER TABLE public.authentik_core_propertymapping OWNER TO authentik; CREATE TABLE public.authentik_core_provider ( id integer NOT NULL, - authorization_flow_id uuid NOT NULL, - name text NOT NULL + authorization_flow_id uuid, + name text NOT NULL, + authentication_flow_id uuid, + backchannel_application_id uuid, + is_backchannel boolean NOT NULL ); @@ -330,7 +360,8 @@ CREATE TABLE public.authentik_core_user ( name text NOT NULL, password_change_date timestamp with time zone NOT NULL, attributes jsonb NOT NULL, - path text NOT NULL + path text NOT NULL, + type text NOT NULL ); @@ -477,6 +508,39 @@ CREATE TABLE public.authentik_crypto_certificatekeypair ( ALTER TABLE public.authentik_crypto_certificatekeypair OWNER TO authentik; +-- +-- Name: authentik_enterprise_license; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_enterprise_license ( + license_uuid uuid NOT NULL, + key text NOT NULL, + name text NOT NULL, + expiry timestamp with time zone NOT NULL, + internal_users bigint NOT NULL, + external_users bigint NOT NULL +); + + +ALTER TABLE public.authentik_enterprise_license OWNER TO authentik; + +-- +-- Name: authentik_enterprise_licenseusage; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_enterprise_licenseusage ( + expiring boolean NOT NULL, + expires timestamp with time zone NOT NULL, + usage_uuid uuid NOT NULL, + user_count bigint NOT NULL, + external_user_count bigint NOT NULL, + within_limits boolean NOT NULL, + record_date timestamp with time zone NOT NULL +); + + +ALTER TABLE public.authentik_enterprise_licenseusage OWNER TO authentik; + -- -- Name: authentik_events_event; Type: TABLE; Schema: public; Owner: authentik -- @@ -646,6 +710,17 @@ CREATE TABLE public.authentik_flows_stage ( ALTER TABLE public.authentik_flows_stage OWNER TO authentik; +-- +-- Name: authentik_install_id; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_install_id ( + id text NOT NULL +); + + +ALTER TABLE public.authentik_install_id OWNER TO authentik; + -- -- Name: authentik_outposts_dockerserviceconnection; Type: TABLE; Schema: public; Owner: authentik -- @@ -749,9 +824,10 @@ ALTER TABLE public.authentik_policies_dummy_dummypolicy OWNER TO authentik; CREATE TABLE public.authentik_policies_event_matcher_eventmatcherpolicy ( policy_ptr_id uuid NOT NULL, - action text NOT NULL, - client_ip text NOT NULL, - app text NOT NULL + action text, + client_ip text, + app text, + model text ); @@ -841,7 +917,9 @@ CREATE TABLE public.authentik_policies_policybinding ( negate boolean NOT NULL, timeout integer NOT NULL, group_id uuid, - user_id integer + user_id integer, + failure_result boolean NOT NULL, + CONSTRAINT authentik_policies_policybinding_timeout_b41b0d57_check CHECK ((timeout >= 0)) ); @@ -869,7 +947,9 @@ CREATE TABLE public.authentik_policies_reputation_reputation ( ip inet NOT NULL, ip_geo_data jsonb NOT NULL, score bigint NOT NULL, - updated timestamp with time zone NOT NULL + updated timestamp with time zone NOT NULL, + expires timestamp with time zone NOT NULL, + expiring boolean NOT NULL ); @@ -902,7 +982,8 @@ CREATE TABLE public.authentik_providers_ldap_ldapprovider ( gid_start_number integer NOT NULL, uid_start_number integer NOT NULL, search_mode text NOT NULL, - bind_mode text NOT NULL + bind_mode text NOT NULL, + mfa_support boolean NOT NULL ); @@ -921,7 +1002,9 @@ CREATE TABLE public.authentik_providers_oauth2_accesstoken ( token text NOT NULL, _id_token text NOT NULL, provider_id integer NOT NULL, - user_id integer NOT NULL + user_id integer NOT NULL, + auth_time timestamp with time zone NOT NULL, + session_id character varying NOT NULL ); @@ -956,7 +1039,9 @@ CREATE TABLE public.authentik_providers_oauth2_authorizationcode ( code_challenge_method character varying(255), provider_id integer NOT NULL, user_id integer NOT NULL, - revoked boolean NOT NULL + revoked boolean NOT NULL, + auth_time timestamp with time zone NOT NULL, + session_id character varying NOT NULL ); @@ -1070,7 +1155,9 @@ CREATE TABLE public.authentik_providers_oauth2_refreshtoken ( provider_id integer NOT NULL, user_id integer NOT NULL, revoked boolean NOT NULL, - token text NOT NULL + token text NOT NULL, + auth_time timestamp with time zone NOT NULL, + session_id character varying NOT NULL ); @@ -1126,6 +1213,20 @@ CREATE TABLE public.authentik_providers_proxy_proxyprovider ( ALTER TABLE public.authentik_providers_proxy_proxyprovider OWNER TO authentik; +-- +-- Name: authentik_providers_radius_radiusprovider; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_providers_radius_radiusprovider ( + provider_ptr_id integer NOT NULL, + shared_secret text NOT NULL, + client_networks text NOT NULL, + mfa_support boolean NOT NULL +); + + +ALTER TABLE public.authentik_providers_radius_radiusprovider OWNER TO authentik; + -- -- Name: authentik_providers_saml_samlpropertymapping; Type: TABLE; Schema: public; Owner: authentik -- @@ -1156,12 +1257,105 @@ CREATE TABLE public.authentik_providers_saml_samlprovider ( signing_kp_id uuid, sp_binding text NOT NULL, verification_kp_id uuid, - name_id_mapping_id uuid + name_id_mapping_id uuid, + default_relay_state text NOT NULL ); ALTER TABLE public.authentik_providers_saml_samlprovider OWNER TO authentik; +-- +-- Name: authentik_providers_scim_scimgroup; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_providers_scim_scimgroup ( + id text NOT NULL, + group_id uuid NOT NULL, + provider_id integer NOT NULL +); + + +ALTER TABLE public.authentik_providers_scim_scimgroup OWNER TO authentik; + +-- +-- Name: authentik_providers_scim_scimmapping; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_providers_scim_scimmapping ( + propertymapping_ptr_id uuid NOT NULL +); + + +ALTER TABLE public.authentik_providers_scim_scimmapping OWNER TO authentik; + +-- +-- Name: authentik_providers_scim_scimprovider; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_providers_scim_scimprovider ( + provider_ptr_id integer NOT NULL, + url text NOT NULL, + token text NOT NULL, + exclude_users_service_account boolean NOT NULL, + filter_group_id uuid +); + + +ALTER TABLE public.authentik_providers_scim_scimprovider OWNER TO authentik; + +-- +-- Name: authentik_providers_scim_scimprovider_property_mappings_group; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_providers_scim_scimprovider_property_mappings_group ( + id integer NOT NULL, + scimprovider_id integer NOT NULL, + propertymapping_id uuid NOT NULL +); + + +ALTER TABLE public.authentik_providers_scim_scimprovider_property_mappings_group OWNER TO authentik; + +-- +-- Name: authentik_providers_scim_scimprovider_property_mappings__id_seq; Type: SEQUENCE; Schema: public; Owner: authentik +-- + +ALTER TABLE public.authentik_providers_scim_scimprovider_property_mappings_group ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.authentik_providers_scim_scimprovider_property_mappings__id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- Name: authentik_providers_scim_scimuser; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_providers_scim_scimuser ( + id text NOT NULL, + provider_id integer NOT NULL, + user_id integer NOT NULL +); + + +ALTER TABLE public.authentik_providers_scim_scimuser OWNER TO authentik; + +-- +-- Name: authentik_rbac_role; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_rbac_role ( + uuid uuid NOT NULL, + name text NOT NULL, + group_id integer NOT NULL +); + + +ALTER TABLE public.authentik_rbac_role OWNER TO authentik; + -- -- Name: authentik_sources_ldap_ldappropertymapping; Type: TABLE; Schema: public; Owner: authentik -- @@ -1195,7 +1389,9 @@ CREATE TABLE public.authentik_sources_ldap_ldapsource ( sync_users boolean NOT NULL, sync_users_password boolean NOT NULL, group_membership_field text NOT NULL, - peer_certificate_id uuid + peer_certificate_id uuid, + client_certificate_id uuid, + sni boolean NOT NULL ); @@ -1307,7 +1503,8 @@ CREATE TABLE public.authentik_sources_saml_samlsource ( allow_idp_initiated boolean NOT NULL, digest_algorithm character varying(50) NOT NULL, signature_algorithm character varying(50) NOT NULL, - pre_authentication_flow_id uuid NOT NULL + pre_authentication_flow_id uuid NOT NULL, + verification_kp_id uuid ); @@ -1336,7 +1533,8 @@ CREATE TABLE public.authentik_stages_authenticator_duo_authenticatorduostage ( api_hostname text NOT NULL, configure_flow_id uuid, admin_integration_key text NOT NULL, - admin_secret_key text NOT NULL + admin_secret_key text NOT NULL, + friendly_name text ); @@ -1387,7 +1585,8 @@ CREATE TABLE public.authentik_stages_authenticator_sms_authenticatorsmsstage ( auth_password text NOT NULL, auth_type text NOT NULL, verify_only boolean NOT NULL, - mapping_id uuid + mapping_id uuid, + friendly_name text ); @@ -1433,12 +1632,74 @@ ALTER TABLE public.authentik_stages_authenticator_sms_smsdevice ALTER COLUMN id CREATE TABLE public.authentik_stages_authenticator_static_authenticatorstaticstage ( stage_ptr_id uuid NOT NULL, token_count integer NOT NULL, - configure_flow_id uuid + configure_flow_id uuid, + friendly_name text, + token_length integer NOT NULL, + CONSTRAINT authentik_stages_authen_token_count_72138a40_check CHECK ((token_count >= 0)), + CONSTRAINT authentik_stages_authenticator_static_authen_token_length_check CHECK ((token_length >= 0)) ); ALTER TABLE public.authentik_stages_authenticator_static_authenticatorstaticstage OWNER TO authentik; +-- +-- Name: authentik_stages_authenticator_static_staticdevice; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_stages_authenticator_static_staticdevice ( + id integer NOT NULL, + name character varying(64) NOT NULL, + confirmed boolean NOT NULL, + user_id integer NOT NULL, + throttling_failure_count integer NOT NULL, + throttling_failure_timestamp timestamp with time zone, + CONSTRAINT otp_static_staticdevice_throttling_failure_count_check CHECK ((throttling_failure_count >= 0)) +); + + +ALTER TABLE public.authentik_stages_authenticator_static_staticdevice OWNER TO authentik; + +-- +-- Name: authentik_stages_authenticator_static_staticdevice_id_seq; Type: SEQUENCE; Schema: public; Owner: authentik +-- + +ALTER TABLE public.authentik_stages_authenticator_static_staticdevice ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.authentik_stages_authenticator_static_staticdevice_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- Name: authentik_stages_authenticator_static_statictoken; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_stages_authenticator_static_statictoken ( + id integer NOT NULL, + token character varying(16) NOT NULL, + device_id integer NOT NULL +); + + +ALTER TABLE public.authentik_stages_authenticator_static_statictoken OWNER TO authentik; + +-- +-- Name: authentik_stages_authenticator_static_statictoken_id_seq; Type: SEQUENCE; Schema: public; Owner: authentik +-- + +ALTER TABLE public.authentik_stages_authenticator_static_statictoken ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.authentik_stages_authenticator_static_statictoken_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + -- -- Name: authentik_stages_authenticator_totp_authenticatortotpstage; Type: TABLE; Schema: public; Owner: authentik -- @@ -1446,12 +1707,54 @@ ALTER TABLE public.authentik_stages_authenticator_static_authenticatorstaticstag CREATE TABLE public.authentik_stages_authenticator_totp_authenticatortotpstage ( stage_ptr_id uuid NOT NULL, digits integer NOT NULL, - configure_flow_id uuid + configure_flow_id uuid, + friendly_name text ); ALTER TABLE public.authentik_stages_authenticator_totp_authenticatortotpstage OWNER TO authentik; +-- +-- Name: authentik_stages_authenticator_totp_totpdevice; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_stages_authenticator_totp_totpdevice ( + id integer NOT NULL, + name character varying(64) NOT NULL, + confirmed boolean NOT NULL, + key character varying(80) NOT NULL, + step smallint NOT NULL, + t0 bigint NOT NULL, + digits smallint NOT NULL, + tolerance smallint NOT NULL, + drift smallint NOT NULL, + last_t bigint NOT NULL, + user_id integer NOT NULL, + throttling_failure_count integer NOT NULL, + throttling_failure_timestamp timestamp with time zone, + CONSTRAINT otp_totp_totpdevice_digits_check CHECK ((digits >= 0)), + CONSTRAINT otp_totp_totpdevice_step_check CHECK ((step >= 0)), + CONSTRAINT otp_totp_totpdevice_throttling_failure_count_check CHECK ((throttling_failure_count >= 0)), + CONSTRAINT otp_totp_totpdevice_tolerance_check CHECK ((tolerance >= 0)) +); + + +ALTER TABLE public.authentik_stages_authenticator_totp_totpdevice OWNER TO authentik; + +-- +-- Name: authentik_stages_authenticator_totp_totpdevice_id_seq; Type: SEQUENCE; Schema: public; Owner: authentik +-- + +ALTER TABLE public.authentik_stages_authenticator_totp_totpdevice ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.authentik_stages_authenticator_totp_totpdevice_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + -- -- Name: authentik_stages_authenticator_validate_authenticatorvalida3e25; Type: TABLE; Schema: public; Owner: authentik -- @@ -1503,7 +1806,8 @@ CREATE TABLE public.authentik_stages_authenticator_webauthn_authenticatewebauth4 configure_flow_id uuid, user_verification text NOT NULL, authenticator_attachment text, - resident_key_requirement text NOT NULL + resident_key_requirement text NOT NULL, + friendly_name text ); @@ -1516,7 +1820,7 @@ ALTER TABLE public.authentik_stages_authenticator_webauthn_authenticatewebauth4b CREATE TABLE public.authentik_stages_authenticator_webauthn_webauthndevice ( id integer NOT NULL, name text NOT NULL, - credential_id character varying(300) NOT NULL, + credential_id text NOT NULL, public_key text NOT NULL, sign_count integer NOT NULL, rp_id character varying(253) NOT NULL, @@ -1606,7 +1910,8 @@ ALTER TABLE public.authentik_stages_consent_userconsent ALTER COLUMN id ADD GENE -- CREATE TABLE public.authentik_stages_deny_denystage ( - stage_ptr_id uuid NOT NULL + stage_ptr_id uuid NOT NULL, + deny_message text NOT NULL ); @@ -1752,7 +2057,9 @@ CREATE TABLE public.authentik_stages_prompt_prompt ( "order" integer NOT NULL, sub_text text NOT NULL, placeholder_expression boolean NOT NULL, - name text NOT NULL + name text NOT NULL, + initial_value text NOT NULL, + initial_value_expression boolean NOT NULL ); @@ -1840,7 +2147,9 @@ ALTER TABLE public.authentik_stages_user_delete_userdeletestage OWNER TO authent CREATE TABLE public.authentik_stages_user_login_userloginstage ( stage_ptr_id uuid NOT NULL, - session_duration text NOT NULL + session_duration text NOT NULL, + terminate_other_sessions boolean NOT NULL, + remember_me_offset text NOT NULL ); @@ -1866,7 +2175,8 @@ CREATE TABLE public.authentik_stages_user_write_userwritestage ( create_users_as_inactive boolean NOT NULL, create_users_group_id uuid, user_path_template text NOT NULL, - user_creation_mode text NOT NULL + user_creation_mode text NOT NULL, + user_type text NOT NULL ); @@ -2024,122 +2334,23 @@ ALTER TABLE public.guardian_userobjectpermission ALTER COLUMN id ADD GENERATED B -- --- Name: otp_static_staticdevice; Type: TABLE; Schema: public; Owner: authentik --- - -CREATE TABLE public.otp_static_staticdevice ( - id integer NOT NULL, - name character varying(64) NOT NULL, - confirmed boolean NOT NULL, - user_id integer NOT NULL, - throttling_failure_count integer NOT NULL, - throttling_failure_timestamp timestamp with time zone, - CONSTRAINT otp_static_staticdevice_throttling_failure_count_check CHECK ((throttling_failure_count >= 0)) -); - - -ALTER TABLE public.otp_static_staticdevice OWNER TO authentik; - --- --- Name: otp_static_staticdevice_id_seq; Type: SEQUENCE; Schema: public; Owner: authentik +-- Data for Name: auth_group; Type: TABLE DATA; Schema: public; Owner: authentik -- -ALTER TABLE public.otp_static_staticdevice ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( - SEQUENCE NAME public.otp_static_staticdevice_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1 -); +COPY public.auth_group (id, name) FROM stdin; +\. -- --- Name: otp_static_statictoken; Type: TABLE; Schema: public; Owner: authentik +-- Data for Name: auth_group_permissions; Type: TABLE DATA; Schema: public; Owner: authentik -- -CREATE TABLE public.otp_static_statictoken ( - id integer NOT NULL, - token character varying(16) NOT NULL, - device_id integer NOT NULL -); - +COPY public.auth_group_permissions (id, group_id, permission_id) FROM stdin; +\. -ALTER TABLE public.otp_static_statictoken OWNER TO authentik; -- --- Name: otp_static_statictoken_id_seq; Type: SEQUENCE; Schema: public; Owner: authentik --- - -ALTER TABLE public.otp_static_statictoken ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( - SEQUENCE NAME public.otp_static_statictoken_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1 -); - - --- --- Name: otp_totp_totpdevice; Type: TABLE; Schema: public; Owner: authentik --- - -CREATE TABLE public.otp_totp_totpdevice ( - id integer NOT NULL, - name character varying(64) NOT NULL, - confirmed boolean NOT NULL, - key character varying(80) NOT NULL, - step smallint NOT NULL, - t0 bigint NOT NULL, - digits smallint NOT NULL, - tolerance smallint NOT NULL, - drift smallint NOT NULL, - last_t bigint NOT NULL, - user_id integer NOT NULL, - throttling_failure_count integer NOT NULL, - throttling_failure_timestamp timestamp with time zone, - CONSTRAINT otp_totp_totpdevice_digits_check CHECK ((digits >= 0)), - CONSTRAINT otp_totp_totpdevice_step_check CHECK ((step >= 0)), - CONSTRAINT otp_totp_totpdevice_throttling_failure_count_check CHECK ((throttling_failure_count >= 0)), - CONSTRAINT otp_totp_totpdevice_tolerance_check CHECK ((tolerance >= 0)) -); - - -ALTER TABLE public.otp_totp_totpdevice OWNER TO authentik; - --- --- Name: otp_totp_totpdevice_id_seq; Type: SEQUENCE; Schema: public; Owner: authentik --- - -ALTER TABLE public.otp_totp_totpdevice ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( - SEQUENCE NAME public.otp_totp_totpdevice_id_seq - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1 -); - - --- --- Data for Name: auth_group; Type: TABLE DATA; Schema: public; Owner: authentik --- - -COPY public.auth_group (id, name) FROM stdin; -\. - - --- --- Data for Name: auth_group_permissions; Type: TABLE DATA; Schema: public; Owner: authentik --- - -COPY public.auth_group_permissions (id, group_id, permission_id) FROM stdin; -\. - - --- --- Data for Name: auth_permission; Type: TABLE DATA; Schema: public; Owner: authentik +-- Data for Name: auth_permission; Type: TABLE DATA; Schema: public; Owner: authentik -- COPY public.auth_permission (id, name, content_type_id, codename) FROM stdin; @@ -2503,6 +2714,59 @@ COPY public.auth_permission (id, name, content_type_id, codename) FROM stdin; 358 Can change OAuth2 Access Token 88 change_accesstoken 359 Can delete OAuth2 Access Token 88 delete_accesstoken 360 Can view OAuth2 Access Token 88 view_accesstoken +361 Can add Radius Provider 89 add_radiusprovider +362 Can change Radius Provider 89 change_radiusprovider +363 Can delete Radius Provider 89 delete_radiusprovider +364 Can view Radius Provider 89 view_radiusprovider +365 Can add SCIM Mapping 90 add_scimmapping +366 Can change SCIM Mapping 90 change_scimmapping +367 Can delete SCIM Mapping 90 delete_scimmapping +368 Can view SCIM Mapping 90 view_scimmapping +369 Can add SCIM Provider 91 add_scimprovider +370 Can change SCIM Provider 91 change_scimprovider +371 Can delete SCIM Provider 91 delete_scimprovider +372 Can view SCIM Provider 91 view_scimprovider +373 Can add scim user 92 add_scimuser +374 Can change scim user 92 change_scimuser +375 Can delete scim user 92 delete_scimuser +376 Can view scim user 92 view_scimuser +377 Can add scim group 93 add_scimgroup +378 Can change scim group 93 change_scimgroup +379 Can delete scim group 93 delete_scimgroup +380 Can view scim group 93 view_scimgroup +381 Can add license 94 add_license +382 Can change license 94 change_license +383 Can delete license 94 delete_license +384 Can view license 94 view_license +385 Can add license usage 95 add_licenseusage +386 Can change license usage 95 change_licenseusage +387 Can delete license usage 95 delete_licenseusage +388 Can view license usage 95 view_licenseusage +389 Can inspect a Flow's execution 11 inspect_flow +390 Can add Role 96 add_role +391 Can change Role 96 change_role +392 Can delete Role 96 delete_role +393 Can view Role 96 view_role +394 Can assign permissions to users 96 assign_role_permissions +395 Can unassign permissions from users 96 unassign_role_permissions +396 Can view system info 97 view_system_info +397 Can view system tasks 97 view_system_tasks +398 Can run system tasks 97 run_system_tasks +399 Can access admin interface 97 access_admin_interface +400 Can add Static Device 98 add_staticdevice +401 Can change Static Device 98 change_staticdevice +402 Can delete Static Device 98 delete_staticdevice +403 Can view Static Device 98 view_staticdevice +404 Can add Static Token 99 add_statictoken +405 Can change Static Token 99 change_statictoken +406 Can delete Static Token 99 delete_statictoken +407 Can view Static Token 99 view_statictoken +408 Can add TOTP Device 100 add_totpdevice +409 Can change TOTP Device 100 change_totpdevice +410 Can delete TOTP Device 100 delete_totpdevice +411 Can view TOTP Device 100 view_totpdevice +412 Can assign permissions to users 79 assign_user_permissions +413 Can unassign permissions from users 79 unassign_user_permissions \. @@ -2511,25 +2775,28 @@ COPY public.auth_permission (id, name, content_type_id, codename) FROM stdin; -- COPY public.authentik_blueprints_blueprintinstance (created, last_updated, managed, instance_uuid, name, metadata, path, context, last_applied, last_applied_hash, status, enabled, managed_models, content) FROM stdin; -2022-10-25 09:00:53.397894+00 2022-10-25 09:10:14.895369+00 \N 213482b6-347a-4595-ad7d-0840332a7cce System - OAuth2 Provider - Scopes {"name": "System - OAuth2 Provider - Scopes", "labels": {"blueprints.goauthentik.io/system": "true"}} system/providers-oauth2.yaml {} 2022-10-25 09:10:14.895374+00 02f2a78e41e3dfd1961f58670180c4cbc363a817ad2374703c6c00cb13ac7bd6384b6f43068fdec3234bc0670c2fc648d99d3a6e6605a5dcbf40e518533abb41 successful t {} -2022-10-25 09:00:53.310947+00 2022-10-25 09:10:09.618136+00 \N 1b7a73a0-43a3-4f2a-a7ee-12b0d13f4f24 Default - Source authentication flow {"name": "Default - Source authentication flow", "labels": {}} default/20-flow-default-source-authentication.yaml {} 2022-10-25 09:10:09.618142+00 ca118ec7730cc3d4bc92ba1ae24f8a48d907334eec49ad42c4879fcb4be280ad71b4d382f695eb23dc58914fda64fe99b4fa2429859730495cd3bdaa9d9bb2e7 successful t {} -2022-10-25 09:00:53.350088+00 2022-10-25 09:10:16.645135+00 \N 92453927-91a0-4b15-8333-b2da469353d7 Default - Out-of-box-experience flow {"name": "Default - Out-of-box-experience flow", "labels": {}} default/91-flow-oobe.yaml {} 2022-10-25 09:10:16.64514+00 438cbcda03cf8ede7626243ae323c52122188a11cb36a4aa558aa75b28b74994577099c8884b7527c4ef97417e62e17e13edd6f7a1984c8f7306f9a4fe81f020 successful t {} -2022-10-25 09:00:53.340402+00 2022-10-25 09:10:17.999704+00 \N f08f67f4-fbd6-418d-bf24-e228ca2ae34e Default - Tenant {"name": "Default - Tenant", "labels": {}} default/90-default-tenant.yaml {} 2022-10-25 09:10:17.999712+00 e344cbc00fb28d259089011b56d7973851d04234d74b4c5d4dd2b84fcb9bb26c70142dafa927a768631810e2c08a65823fde450cc1e28c177be08e43f89ecf9f successful t {} 2022-10-25 09:00:53.406863+00 2022-10-25 09:10:18.979063+00 \N c447f75b-a332-422c-a7dd-74bae02281ef System - SAML Provider - Mappings {"name": "System - SAML Provider - Mappings", "labels": {"blueprints.goauthentik.io/system": "true"}} system/providers-saml.yaml {} 2022-10-25 09:10:18.979067+00 15301d80ffa95fa0c37bc14fe3b5aaa74224a5998f82cdbd1a701ab96f05290b05dcee25df7053282c516383a6ba9890cbaac11aeca0fe1f9717f24e3d819ae3 successful t {} -2022-10-25 09:00:53.335974+00 2022-10-25 09:10:14.729439+00 \N 1217d36b-4f47-4ae1-9a5b-d65fdd507895 Default - Events Transport & Rules {"name": "Default - Events Transport & Rules", "labels": {}} default/40-events-default.yaml {} 2022-10-25 09:10:14.729446+00 2064655bcf32b92e6ca7cc8bc5c872c76937b708a25607f25586c55f2bbe1fe410ea5287f75d90dc6defaeaf0e3f9e2a933a34b8ef5a49b2abdadf1a8c92c9d7 successful t {} -2022-10-25 09:00:53.400474+00 2022-10-25 09:10:17.189551+00 \N de836c31-6248-4155-b6d2-94f8e81ba828 System - Proxy Provider - Scopes {"name": "System - Proxy Provider - Scopes", "labels": {"blueprints.goauthentik.io/system": "true"}} system/providers-proxy.yaml {} 2022-10-25 09:10:17.189557+00 c92fa491977a1a528005dd11953a6c524ae91cbb8f390938a8083211df02428168c883e75ce3b4a76484cad89310633ef34f2a8a6a272b27e1a53914ea53a8d5 successful t {} -2022-10-25 09:00:53.328036+00 2022-10-25 09:10:17.987802+00 \N 2cf975a1-1f35-4976-aaaa-b3a62d0b0c8d Default - User settings flow {"name": "Default - User settings flow", "labels": {}} default/30-flow-default-user-settings-flow.yaml {} 2022-10-25 09:10:17.987806+00 a5288e994e544ec8a37722ffd3484b893fc6c5ec689ef62450da8bab1c67af0d2a9c0b137387b43f2053d6b3f2c01c4e9f33d9f680416e1940f25323451b664a successful t {} -2022-10-25 09:00:53.413147+00 2022-10-25 09:10:19.535643+00 \N 6c91b3d1-2c5f-435e-b678-cb1b061cb9d8 System - LDAP Source - Mappings {"name": "System - LDAP Source - Mappings", "labels": {"blueprints.goauthentik.io/system": "true"}} system/sources-ldap.yaml {} 2022-10-25 09:10:19.535647+00 a764c21c655e7c65bc93ae1ddd839cea9b4726a41ad2b7ca70323d48b0676beda6a67a3b8274cfaa65ed0f4cc5c089a44aeead66ef4579c78c5761861577bbe2 successful t {} -2022-10-25 09:00:53.317415+00 2022-10-25 09:10:12.218147+00 \N 157ef54a-3fc7-4529-81c1-17fb0e83c451 Default - Source enrollment flow {"name": "Default - Source enrollment flow", "labels": {}} default/20-flow-default-source-enrollment.yaml {} 2022-10-25 09:10:12.218151+00 cb2f4f1bdc25e16c15cc4ec8d6eee0322867dd6cffa8ea3b92de716c737e4131e669692c47d86c7a4a8ec6b0e30eadf1b49d607863f49dcc2718815f20935ea3 successful t {} -2022-10-25 09:00:53.281978+00 2022-10-25 09:10:17.748151+00 \N 69074314-6974-4913-ba5d-48c1496c0f64 Default - Password change flow {"name": "Default - Password change flow", "labels": {}} default/0-flow-password-change.yaml {} 2022-10-25 09:10:17.748155+00 0be8cfcc5e9f619eab59f3eaf13c1ec94d1a73b2357cb7d62acb35d23cb4fc2dcbecc055c8df048a2f8d44a537e672936463d3dc02cc15e9a2f31de62ddc9a3c successful t {} -2022-10-25 09:00:53.288147+00 2022-10-25 09:10:17.817575+00 \N 714dc451-7831-4016-b8e8-4e2e050233e1 Default - Authentication flow {"name": "Default - Authentication flow", "labels": {}} default/10-flow-default-authentication-flow.yaml {} 2022-10-25 09:10:17.817579+00 eb9af60243f762b4288943af5d25f4be6633444b54be1e84a9d850ee0cf84c05c45abd0321b71587619593508b49dde279788517231bd114f10350cfcaefa272 successful t {} -2022-10-25 09:00:53.297924+00 2023-03-13 09:19:05.28134+00 \N e47fd8ed-c357-4220-bb82-16931f998fe0 Default - TOTP MFA setup flow {"name": "Default - TOTP MFA setup flow", "labels": {}} default/20-flow-default-authenticator-totp-setup.yaml {} 2023-03-13 09:19:05.281345+00 43d2dcce568cbbe0f5409f52e2250ce4aa28ca34049cfc6f284070a2c28f81e85bb11fcf797f171beb1cb7aa15d70f26175ba9010b615563cac6057fc2563104 successful t {} -2022-10-25 09:00:53.300852+00 2023-03-13 09:19:06.955701+00 \N 658a7307-9f70-4d89-93ea-b6160a092741 Default - WebAuthn MFA setup flow {"name": "Default - WebAuthn MFA setup flow", "labels": {}} default/20-flow-default-authenticator-webauthn-setup.yaml {} 2023-03-13 09:19:06.955709+00 67ef724536f41c451b9a88edd01100bd9ba4460f41b88f86a1385f9df30617371d0ddb610526b0a93aa32b9918475a63db03dfcf57bf7d0b02e7b509f9d35870 successful t {} -2022-10-25 09:00:53.306829+00 2023-03-13 09:19:07.746788+00 \N a463e186-ff86-4d2e-8c04-700e05a741af Default - Provider authorization flow (implicit consent) {"name": "Default - Provider authorization flow (implicit consent)", "labels": {}} default/20-flow-default-provider-authorization-implicit-consent.yaml {} 2023-03-13 09:19:07.746797+00 2321088d922a57fdb741f6857eb48d3090210b552a6ecadf9b08de4832f574c5231f37943da3dfda3a4fa07c900d236ace3d237710e2e986a207c758859c1ecb successful t {} -2022-10-25 09:00:53.319721+00 2023-03-13 09:19:08.143754+00 \N 29fc34e4-d6e5-47ed-97f0-2923728a9f81 Default - Source pre-authentication flow {"name": "Default - Source pre-authentication flow", "labels": {}} default/20-flow-default-source-pre-authentication.yaml {} 2023-03-13 09:19:08.143761+00 51b6b65fb60f2f925d80b38cf173e7aa1bc00a074990e8d0b0dfaae088007ceb9051d0722f41500da309af5d0c78417dfa08a40c706203c3d6ee1eb613ad564c successful t {} -2022-10-25 09:00:53.295041+00 2023-03-13 09:19:05.301487+00 \N 2cf52321-80c1-4c45-a598-ccdd61af26aa Default - Static MFA setup flow {"name": "Default - Static MFA setup flow", "labels": {}} default/20-flow-default-authenticator-static-setup.yaml {} 2023-03-13 09:19:05.301492+00 552f08718b573593e1b643f47734a1c185d7bc9efbea9c8d3dc49e6fd5060cd979098637fa20d958f4c3c9ff375e0fde3b871c956b87ebfbb1fb9319ba073bcb successful t {} -2022-10-25 09:00:53.303808+00 2023-03-13 09:19:07.800567+00 \N 8f64e59f-b41e-4c84-891b-492df2873c7b Default - Provider authorization flow (explicit consent) {"name": "Default - Provider authorization flow (explicit consent)", "labels": {}} default/20-flow-default-provider-authorization-explicit-consent.yaml {} 2023-03-13 09:19:07.800573+00 598eee861d8814c0dc200542f59e5d8085c140f7131e87a9fc6baf688a3e9e7b0a32e865c439084f76b11992ce056be574e5aba2664375cee287206d66d345c9 successful t {} -2022-10-25 09:00:53.291824+00 2023-03-13 09:19:04.593543+00 \N f999866c-2729-44cd-aee3-53e3df227bd6 Default - Invalidation flow {"name": "Default - Invalidation flow", "labels": {}} default/10-flow-default-invalidation-flow.yaml {} 2023-03-13 09:19:04.593549+00 a143bf2b9a1d20e2078389f7c37d213e51c52ea6a8df8f8ae7a7e6a1bb129ec4b862803aa44b8b1dbfe727e98e45cedac7a1a03632065040c87f045dcabab86a successful t {} +2024-01-10 13:34:48.625092+00 2024-01-10 13:34:54.474912+00 \N 7adb4b0a-c9bf-4872-9220-bbe6245e3162 Default - Tenant {"name": "Default - Tenant", "labels": {}} default/default-tenant.yaml {} 2024-01-10 13:34:54.474916+00 65a18916f00bcac6bb8a2fb5d05f891eb1473ef262d4d9c78afeba012efbaf1330c2141923f7ffade17472be0c19b9f0b53b40f46e66f07a35bb6d2c00922aee successful t {} +2024-01-10 13:34:48.638166+00 2024-01-10 13:34:52.69052+00 \N 55bfa7bc-b223-41f2-b105-1f95da2685e6 Default - Events Transport & Rules {"name": "Default - Events Transport & Rules", "labels": {}} default/events-default.yaml {} 2024-01-10 13:34:52.690524+00 bbee0ba3e8e51ea5290dbb2081c7c0a18f633766ff8f43c8897d68d0ea51b648cdffb345239b55cbab72d041972e80aea793d8a7a379f25aca02882f9fbf94ff successful t {} +2024-01-10 13:34:48.645446+00 2024-01-10 13:34:53.155446+00 \N e990d111-e8a0-4ad8-9d7e-6a5d2437a146 Default - Static MFA setup flow {"name": "Default - Static MFA setup flow", "labels": {}} default/flow-default-authenticator-static-setup.yaml {} 2024-01-10 13:34:53.155449+00 552f08718b573593e1b643f47734a1c185d7bc9efbea9c8d3dc49e6fd5060cd979098637fa20d958f4c3c9ff375e0fde3b871c956b87ebfbb1fb9319ba073bcb successful t {} +2024-01-10 13:34:48.649232+00 2024-01-10 13:34:53.730219+00 \N e23700e3-9a34-4c4e-875d-91cfb5c4f256 Default - TOTP MFA setup flow {"name": "Default - TOTP MFA setup flow", "labels": {}} default/flow-default-authenticator-totp-setup.yaml {} 2024-01-10 13:34:53.730224+00 43d2dcce568cbbe0f5409f52e2250ce4aa28ca34049cfc6f284070a2c28f81e85bb11fcf797f171beb1cb7aa15d70f26175ba9010b615563cac6057fc2563104 successful t {} +2024-01-10 13:34:48.653021+00 2024-01-10 13:34:54.090272+00 \N d359504f-978c-45a0-b6aa-b966c6e03cd7 Default - WebAuthn MFA setup flow {"name": "Default - WebAuthn MFA setup flow", "labels": {}} default/flow-default-authenticator-webauthn-setup.yaml {} 2024-01-10 13:34:54.090276+00 67ef724536f41c451b9a88edd01100bd9ba4460f41b88f86a1385f9df30617371d0ddb610526b0a93aa32b9918475a63db03dfcf57bf7d0b02e7b509f9d35870 successful t {} +2024-01-10 13:34:48.686469+00 2024-01-10 13:34:54.232304+00 \N 8a3417bb-039c-4bfe-b6ff-5d5a8911f01f Default - Password change flow {"name": "Default - Password change flow", "labels": {}} default/flow-password-change.yaml {} 2024-01-10 13:34:54.232307+00 6d7f1794e5a024d80e373fa9c9c791fa4837c690ad70d707fdf16208dec7c4b7feb490ab83f1db3e7d37f3d3ea41dfc4b06d87a221ffb208c076ff6672c27cc1 successful t {} +2024-01-10 13:34:48.641729+00 2024-01-10 13:34:54.29831+00 \N f5735a05-808c-4889-bba5-988fcb3063b6 Default - Authentication flow {"name": "Default - Authentication flow", "labels": {}} default/flow-default-authentication-flow.yaml {} 2024-01-10 13:34:54.298314+00 4a184d3cf46bcc05e3e6e2428b1100877d3b3a6ddf934a936d65f26ef81bc5cfb5481cf3128217ee3bbf4d1a83060f4b0c7b43a88546827b9e65fdaa361e8259 successful t {} +2024-01-10 13:34:48.656613+00 2024-01-10 13:34:54.329178+00 \N a1c83a68-6d68-47ae-af9a-62c9762cf788 Default - Invalidation flow {"name": "Default - Invalidation flow", "labels": {}} default/flow-default-invalidation-flow.yaml {} 2024-01-10 13:34:54.329181+00 a143bf2b9a1d20e2078389f7c37d213e51c52ea6a8df8f8ae7a7e6a1bb129ec4b862803aa44b8b1dbfe727e98e45cedac7a1a03632065040c87f045dcabab86a successful t {} +2024-01-10 13:34:48.679748+00 2024-01-10 13:34:54.462557+00 \N f4774725-5832-4732-a797-c06f0893fc63 Default - User settings flow {"name": "Default - User settings flow", "labels": {}} default/flow-default-user-settings-flow.yaml {} 2024-01-10 13:34:54.462561+00 192e32332465563ca0ec85be2ef4057a6bb8aeb3a291503d184f66c45377caa313225dc367780ef5ea4f1c86fbddc0b7706dd4cf0a3b9f5528abc98c790a883b successful t {} +2022-10-25 09:00:53.413147+00 2024-01-10 13:36:28.987297+00 \N 6c91b3d1-2c5f-435e-b678-cb1b061cb9d8 System - LDAP Source - Mappings {"name": "System - LDAP Source - Mappings", "labels": {"blueprints.goauthentik.io/system": "true"}} system/sources-ldap.yaml {} 2024-01-10 13:36:28.987301+00 cd457d2cef04cfc24d7bbadfac35d8ee1e91b04a0a1662a18a0428e97043bdbfbe7a23b21b065d2e201c291c99f22a38b32436d76edfa86dbae3a5dc4d0ae4fc successful t {} +2024-01-10 13:34:48.704062+00 2024-01-10 13:36:28.914859+00 \N d2e1c529-0d50-466b-8e49-99be615d70ae System - SCIM Provider - Mappings {"name": "System - SCIM Provider - Mappings", "labels": {"blueprints.goauthentik.io/system": "true"}} system/providers-scim.yaml {} 2024-01-10 13:36:28.914863+00 02355b6b64a68ce55025b5ddfe82f1153e1cc96bb3d2dad1176eef58a2285090944db5d583dd3a196bb5b7366f023412e043e72738613dc00f943f836cfc5b77 successful t {} +2024-01-10 13:34:48.659762+00 2024-01-10 13:36:28.345301+00 \N 24622aa4-74dc-46ba-8dba-f49da993c93e Default - Provider authorization flow (explicit consent) {"name": "Default - Provider authorization flow (explicit consent)", "labels": {}} default/flow-default-provider-authorization-explicit-consent.yaml {} 2024-01-10 13:36:28.345305+00 598eee861d8814c0dc200542f59e5d8085c140f7131e87a9fc6baf688a3e9e7b0a32e865c439084f76b11992ce056be574e5aba2664375cee287206d66d345c9 successful t {} +2024-01-10 13:34:48.663845+00 2024-01-10 13:36:28.370938+00 \N ec217fcf-60d9-4503-9e9c-345ff752a84d Default - Provider authorization flow (implicit consent) {"name": "Default - Provider authorization flow (implicit consent)", "labels": {}} default/flow-default-provider-authorization-implicit-consent.yaml {} 2024-01-10 13:36:28.370942+00 2321088d922a57fdb741f6857eb48d3090210b552a6ecadf9b08de4832f574c5231f37943da3dfda3a4fa07c900d236ace3d237710e2e986a207c758859c1ecb successful t {} +2024-01-10 13:34:48.672318+00 2024-01-10 13:36:28.547263+00 \N 2e2d0f4b-634d-4b56-a0ea-f06b33a789be Default - Source enrollment flow {"name": "Default - Source enrollment flow", "labels": {}} default/flow-default-source-enrollment.yaml {} 2024-01-10 13:36:28.547269+00 09d441466d7e215601551bcd7c147616bf3794909f706c99c8fe527120d6fc612c1e4885c09bca433b97273e6a3fb10840d957bd7c898b14495a7bb245060792 successful t {} +2024-01-10 13:34:48.683193+00 2024-01-10 13:36:28.724385+00 \N c0185639-17d7-4acb-bba0-f2044a8639a2 Default - Out-of-box-experience flow {"name": "Default - Out-of-box-experience flow", "labels": {}} default/flow-oobe.yaml {} 2024-01-10 13:36:28.724389+00 92a35a46db8ccbcd707c6065bf07797ab7a45406e24660d921224fb534875a2e204acf9bc65bcfc3a7b6f876414f0ee6d43669fa51244022afdf1b51aac11940 successful t {} +2022-10-25 09:00:53.400474+00 2024-01-10 13:36:28.879985+00 \N de836c31-6248-4155-b6d2-94f8e81ba828 System - Proxy Provider - Scopes {"name": "System - Proxy Provider - Scopes", "labels": {"blueprints.goauthentik.io/system": "true"}} system/providers-proxy.yaml {} 2024-01-10 13:36:28.879989+00 a17fede4a19025273be4e8556cdef4b62c6a4ebc8051f6dde98657cf571f16cf7ce45388539b68e891f96184b6cde3bb2273de43643e1b6d788548cfbf0393dc successful t {} +2022-10-25 09:00:53.397894+00 2024-01-10 13:36:28.896306+00 \N 213482b6-347a-4595-ad7d-0840332a7cce System - OAuth2 Provider - Scopes {"name": "System - OAuth2 Provider - Scopes", "labels": {"blueprints.goauthentik.io/system": "true"}} system/providers-oauth2.yaml {} 2024-01-10 13:36:28.89631+00 bef8877737dd0345a5e88ef83518cbcdd45b2345037f925dc51eb7097bdbd0c4e1565aacdf08ec3ce2c0b90f8bcba013fa8618ea12881062e4e59d87a2abf992 successful t {} +2024-01-10 13:34:48.668685+00 2024-01-10 13:36:28.445116+00 \N 4ec2089d-f691-4167-bd7c-5e569f26e126 Default - Source authentication flow {"name": "Default - Source authentication flow", "labels": {}} default/flow-default-source-authentication.yaml {} 2024-01-10 13:36:28.445119+00 d86613f21394af35d554692e9868e7e714bb7cbd99a362ef3b64476edc1ffcb832443610f193d3d116685a360a1734482a7152b6b6bc8913f45be9aac3934233 successful t {} +2024-01-10 13:34:48.676012+00 2024-01-10 13:36:28.470437+00 \N 60726d29-8b4f-461a-af0e-9f53a47016fa Default - Source pre-authentication flow {"name": "Default - Source pre-authentication flow", "labels": {}} default/flow-default-source-pre-authentication.yaml {} 2024-01-10 13:36:28.470448+00 51b6b65fb60f2f925d80b38cf173e7aa1bc00a074990e8d0b0dfaae088007ceb9051d0722f41500da309af5d0c78417dfa08a40c706203c3d6ee1eb613ad564c successful t {} +2024-01-10 13:34:48.694474+00 2024-01-10 13:36:28.845959+00 \N 018eec69-91fa-45fd-9157-153b590aadf8 Migration - Remove old prompt fields {"name": "Migration - Remove old prompt fields", "labels": {"blueprints.goauthentik.io/description": "Migrate to 2023.2, remove unused prompt fields"}} migrations/migrate-prompt-name.yaml {} 2024-01-10 13:36:28.845963+00 75617432af2bb8d9cbf74db0ba9d6ec1b123811fdb40975685386c85d8fa4046cc4749a8e6f1f3e0c1068e45bf2af73914c6ede5b3d31fa2ac3195a53b94cf43 successful t {} +2024-01-10 13:34:48.697665+00 2024-01-10 13:36:28.845678+00 \N 104c603e-f3e5-4e67-b3ad-ec31a9b2a9de authentik Bootstrap {"name": "authentik Bootstrap", "labels": {"blueprints.goauthentik.io/system": "true", "blueprints.goauthentik.io/description": "This blueprint configures the default admin user and group, and configures them for the [Automated install](https://goauthentik.io/docs/installation/automated-install).\\n", "blueprints.goauthentik.io/system-bootstrap": "true"}} system/bootstrap.yaml {} 2024-01-10 13:36:28.845683+00 c572042434ffa2218c5a30a656cbf10c80c434f19c596cdd9bc6aa37897af3be3f0ab0a73e332ebafb72bdf8a1a15937fb62c9077b484602edf4a196b632aa45 successful t {} \. @@ -2549,29 +2816,7 @@ d7dfa1d6-58cb-4bfc-94c5-38a2e507e290 Grafana OIDC grafana-oidc 3 f -- COPY public.authentik_core_authenticatedsession (expires, expiring, uuid, session_key, last_ip, last_user_agent, last_used, user_id) FROM stdin; -2023-03-27 09:19:36.714022+00 t 33fe8ba2-6652-46bc-992f-97edf89c9024 pnrgpcmuzjc6jd2ae4z3242v4le8s4dq 172.21.0.1 Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/111.0 2023-03-13 09:19:36.714338+00 1 -2023-03-27 09:20:56.674782+00 t db2c32ff-209a-4d71-a3c0-0dee0e024878 xps84azhqco49sstac6uj8jsjm9djtky 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:20:56.675277+00 6 -2023-03-27 09:21:58.815582+00 t fb2c4db2-c31e-4381-ba85-67828f436acc mwee9onydg2kpu2bg3pth8al2zv6jlve 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:21:58.815791+00 6 -2023-03-27 09:22:06.761376+00 t b183a313-ee3f-4e6f-b40a-d895aecbba25 1hhujbpdfb5muhahlo90s8523scor7dy 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:22:06.761575+00 6 -2023-03-27 09:22:07.83058+00 t 23261a68-1274-45cf-84c8-57591f5f13d0 2usmu6zxqajue9y7gl40brm34zh8jyhu 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:22:07.830772+00 8 -2023-03-27 09:26:00.688+00 t a1ea049c-5a2a-444f-bb0f-46f0cc1b83c2 t7k0uvsutwv5j7belns84z00di5bax5b 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:26:00.688213+00 6 -2023-03-27 09:27:12.748587+00 t c91473b6-670e-471f-8fdd-342a912c26a3 twvhclnfbrpdro8g787rhchxsdw99vpy 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:27:12.748761+00 6 -2023-03-27 09:33:04.047499+00 t b7d2c069-b68c-4674-b542-49ee8bcab49c 7anpa8pum56ecu84q910ey1tdgqt0l7a 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:33:04.048038+00 6 -2023-03-27 09:36:00.677614+00 t 1b7369c6-423c-4619-a95a-554fea065bb9 asz3sdzh4l8jap3v5fwobm0p3ryb3m6z 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:36:00.677783+00 6 -2023-03-27 09:38:09.280265+00 t 1d06b319-18fe-40a8-88b9-09a0fad5e9e7 wgivmdoyjh4j3lk4o35lxe1rgr4mtiiz 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:38:09.280422+00 6 -2023-03-27 09:46:00.676548+00 t 21e81f59-9584-489a-ae72-1c9be3788b5f 4ssznhrdtmibayofismpmq9pi4ji1z8y 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:46:00.676691+00 6 -2023-03-27 09:56:00.696737+00 t 7fefc723-7eb0-49c2-91dd-1b1c761f6863 vservymrqbrg4iqtr3tq2u3770fi9m5w 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:56:00.696955+00 6 -2023-03-27 12:15:42.983641+00 t 20e56a62-42d9-4a85-9354-8ecd546adc82 4u7n2w39blisa36ljoltvi1mnvn6k7rt 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:15:42.983795+00 6 -2023-03-27 12:16:00.756786+00 t 543a5423-0540-4a97-bea8-dd1a2fc1ef20 tlhzjzc8dus5akchnm7e3ivh2t8a7z5o 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:16:00.756966+00 6 -2023-03-27 12:16:25.282349+00 t 79648ae0-368e-4b54-ab74-bf8508f99c3b izckm6qrlxf200ikhmp245gw1ud1jni2 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:16:25.282588+00 6 -2023-03-27 12:17:03.669358+00 t f743c44b-7c71-488c-a065-d5e217fa5307 fuywipgbmgx1wzyf8654z1dniyy6yl9y 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:17:03.669511+00 6 -2023-03-27 12:17:27.480927+00 t 0da81503-cba6-44f5-a1ea-b81a43c8cdac 7icfpl80xx04jmth4untnhgznjw1jjcp 172.21.0.1 Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/111.0 2023-03-13 12:17:27.481193+00 8 -2023-03-27 12:22:20.180659+00 t 5df911c2-797f-4b77-82d2-fa66bdb251d0 ledovmptzdsj60tfv4irprijdaycu19d 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:22:20.180803+00 6 -2023-03-27 12:22:37.470262+00 t 21fcd520-e1d7-45bc-9691-6c14e51b4a1b gznzvsfyrfjr6i8qt5oyggutd89mzi19 172.21.0.1 Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/111.0 2023-03-13 12:22:37.470585+00 8 -2023-03-27 12:35:42.672958+00 t 6674325a-4a57-4ae3-995f-c0769c7cb5c2 ookwxmfok1k9id4jediu5030pvrdnzoj 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:35:42.673195+00 6 -2023-03-27 12:36:00.775286+00 t bb8317b6-8aab-44bd-9762-bb0a5cdd6854 qg1f4o9q2yihtvuejx8rz0exgcoxgxcq 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:36:00.775486+00 6 -2023-03-27 12:36:31.723397+00 t 42645d7c-a570-44e0-a030-d3078b54d978 m7skhobmxdhmrk4c3ne1yq6xbvfzrp29 172.21.0.1 Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/111.0 2023-03-13 12:36:31.723588+00 8 -2023-03-27 12:40:53.868898+00 t 4ba1f1c1-b066-4c1f-b483-b6cd3484f634 h2zyqqyoe9kxch9blcb8e42xzagr3r02 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:40:53.869061+00 6 +2024-01-25 22:11:15.829855+00 t a1b000d1-d98e-4e84-8f3a-39476361245a 3w9uc4x8na04umrd1glnat6bpldocjkg 172.20.0.8 goauthentik.io/outpost/2023.10.6 2024-01-11 22:11:15.830189+00 6 \. @@ -2589,21 +2834,19 @@ ca14281c-e025-4691-b5a2-3ee415920e80 extra-group {} \N f \. +-- +-- Data for Name: authentik_core_group_roles; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_core_group_roles (id, group_id, role_id) FROM stdin; +\. + + -- -- Data for Name: authentik_core_propertymapping; Type: TABLE DATA; Schema: public; Owner: authentik -- COPY public.authentik_core_propertymapping (pm_uuid, name, expression, managed) FROM stdin; -d3406e7e-2c6d-4d72-acdd-dda5513b1396 authentik default OAuth Mapping: Proxy outpost # This mapping is used by the authentik proxy. It passes extra user attributes,\n# which are used for example for the HTTP-Basic Authentication mapping.\nreturn {\n "ak_proxy": {\n "user_attributes": request.user.group_attributes(request),\n "is_superuser": request.user.is_superuser,\n }\n} goauthentik.io/providers/proxy/scope-proxy -353b9d65-66ce-4fea-814b-e12c6e45a277 authentik default LDAP Mapping: Name return ldap.get('name') goauthentik.io/sources/ldap/default-name -a58eb3a5-c68d-406d-a5ff-688a6a047575 authentik default LDAP Mapping: mail return ldap.get('mail') goauthentik.io/sources/ldap/default-mail -a75310af-c0cf-4709-a66c-963d8c27e662 authentik default Active Directory Mapping: sAMAccountName return ldap.get('sAMAccountName') goauthentik.io/sources/ldap/ms-samaccountname -b5ae1f98-a70a-4ea3-a8c5-15285a8755bc authentik default Active Directory Mapping: userPrincipalName return list_flatten(ldap.get('userPrincipalName')) goauthentik.io/sources/ldap/ms-userprincipalname -e8244e12-ed86-4f61-a0df-cfac793c267e authentik default Active Directory Mapping: givenName return list_flatten(ldap.get('givenName')) goauthentik.io/sources/ldap/ms-givenName -81c79ce4-042d-470d-9aa4-48baaa08591b authentik default Active Directory Mapping: sn return list_flatten(ldap.get('sn')) goauthentik.io/sources/ldap/ms-sn -9c13a34a-6007-4846-8c28-11d6dbd235c7 authentik default OAuth Mapping: OpenID 'openid' # This scope is required by the OpenID-spec, and must as such exist in authentik.\n# The scope by itself does not grant any information\nreturn {} goauthentik.io/providers/oauth2/scope-openid -a4825145-a8d1-4fbf-b88c-70d8cc801a4a authentik default OAuth Mapping: OpenID 'email' return {\n "email": request.user.email,\n "email_verified": True\n} goauthentik.io/providers/oauth2/scope-email -7446364c-faec-4cab-9191-beb2889d47b7 authentik default OAuth Mapping: OpenID 'profile' return {\n # Because authentik only saves the user's full name, and has no concept of first and last names,\n # the full name is used as given name.\n # You can override this behaviour in custom mappings, i.e. `request.user.name.split(" ")`\n "name": request.user.name,\n "given_name": request.user.name,\n "family_name": "",\n "preferred_username": request.user.username,\n "nickname": request.user.username,\n # groups is not part of the official userinfo schema, but is a quasi-standard\n "groups": [group.name for group in request.user.ak_groups.all()],\n} goauthentik.io/providers/oauth2/scope-profile 765b25ee-0e8b-4394-a56c-e27abf68f5ce authentik default SAML Mapping: UPN return request.user.attributes.get('upn', request.user.email) goauthentik.io/providers/saml/upn ef027c1a-728f-44e5-9072-6942d3e8d15e authentik default SAML Mapping: Name return request.user.name goauthentik.io/providers/saml/name 05712cf6-0557-4ae7-95e7-3a0538962b67 authentik default SAML Mapping: Email return request.user.email goauthentik.io/providers/saml/email @@ -2611,8 +2854,21 @@ b3fa1ee7-9507-4869-a29a-3c17c2482839 authentik default SAML Mapping: Username re 38ac59c3-e754-44e7-9790-5108a2cd027c authentik default SAML Mapping: User ID return request.user.pk goauthentik.io/providers/saml/uid c5d93ce6-8cda-42fa-9c19-3837ba67788a authentik default SAML Mapping: Groups for group in request.user.ak_groups.all():\n yield group.name goauthentik.io/providers/saml/groups 29fab284-b6db-433a-9c3c-7575aba47b2b authentik default SAML Mapping: WindowsAccountname (Username) return request.user.username goauthentik.io/providers/saml/ms-windowsaccountname +9c13a34a-6007-4846-8c28-11d6dbd235c7 authentik default OAuth Mapping: OpenID 'openid' # This scope is required by the OpenID-spec, and must as such exist in authentik.\n# The scope by itself does not grant any information\nreturn {} goauthentik.io/providers/oauth2/scope-openid +a4825145-a8d1-4fbf-b88c-70d8cc801a4a authentik default OAuth Mapping: OpenID 'email' return {\n "email": request.user.email,\n "email_verified": True\n} goauthentik.io/providers/oauth2/scope-email +252edb40-34ee-4f55-8ca4-4bf0a7fb445f authentik default SCIM Mapping: Group return {\n "displayName": group.name,\n} goauthentik.io/providers/scim/group +353b9d65-66ce-4fea-814b-e12c6e45a277 authentik default LDAP Mapping: Name return ldap.get('name') goauthentik.io/sources/ldap/default-name +a58eb3a5-c68d-406d-a5ff-688a6a047575 authentik default LDAP Mapping: mail return ldap.get('mail') goauthentik.io/sources/ldap/default-mail +a75310af-c0cf-4709-a66c-963d8c27e662 authentik default Active Directory Mapping: sAMAccountName return ldap.get('sAMAccountName') goauthentik.io/sources/ldap/ms-samaccountname +b5ae1f98-a70a-4ea3-a8c5-15285a8755bc authentik default Active Directory Mapping: userPrincipalName return list_flatten(ldap.get('userPrincipalName')) goauthentik.io/sources/ldap/ms-userprincipalname +e8244e12-ed86-4f61-a0df-cfac793c267e authentik default Active Directory Mapping: givenName return list_flatten(ldap.get('givenName')) goauthentik.io/sources/ldap/ms-givenName +81c79ce4-042d-470d-9aa4-48baaa08591b authentik default Active Directory Mapping: sn return list_flatten(ldap.get('sn')) goauthentik.io/sources/ldap/ms-sn 0094050f-e24a-4eff-8346-712851851af9 authentik default OpenLDAP Mapping: uid return ldap.get('uid') goauthentik.io/sources/ldap/openldap-uid e8809202-4ff0-4086-b078-196e6152e826 authentik default OpenLDAP Mapping: cn return ldap.get('cn') goauthentik.io/sources/ldap/openldap-cn +7446364c-faec-4cab-9191-beb2889d47b7 authentik default OAuth Mapping: OpenID 'profile' return {\n # Because authentik only saves the user's full name, and has no concept of first and last names,\n # the full name is used as given name.\n # You can override this behaviour in custom mappings, i.e. `request.user.name.split(" ")`\n "name": request.user.name,\n "given_name": request.user.name,\n "preferred_username": request.user.username,\n "nickname": request.user.username,\n # groups is not part of the official userinfo schema, but is a quasi-standard\n "groups": [group.name for group in request.user.ak_groups.all()],\n} goauthentik.io/providers/oauth2/scope-profile +200af9d0-7476-43e1-a0fb-b7a7a68dd277 authentik default LDAP Mapping: DN to User Path dn = ldap.get("distinguishedName")\npath_elements = []\nfor pair in dn.split(","):\n attr, _, value = pair.partition("=")\n # Ignore elements from the Root DSE and the canonical name of the object\n if attr.lower() in ["cn", "dc"]:\n continue\n path_elements.append(value)\npath_elements.reverse()\n\npath = source.get_user_path()\nif len(path_elements) > 0:\n path = f"{path}/{'/'.join(path_elements)}"\nreturn path goauthentik.io/sources/ldap/default-dn-path +d3406e7e-2c6d-4d72-acdd-dda5513b1396 authentik default OAuth Mapping: Proxy outpost # This mapping is used by the authentik proxy. It passes extra user attributes,\n# which are used for example for the HTTP-Basic Authentication mapping.\nsession_id = None\nif "token" in request.context:\n session_id = request.context.get("token").session_id\nreturn {\n "sid": session_id,\n "ak_proxy": {\n "user_attributes": request.user.group_attributes(request),\n "is_superuser": request.user.is_superuser,\n }\n} goauthentik.io/providers/proxy/scope-proxy +83a19cb8-acab-44e1-884f-a0a279ae4d2d authentik default SCIM Mapping: User # Some implementations require givenName and familyName to be set\ngivenName, familyName = request.user.name, " "\nformatted = request.user.name + " "\n# This default sets givenName to the name before the first space\n# and the remainder as family name\n# if the user's name has no space the givenName is the entire name\n# (this might cause issues with some SCIM implementations)\nif " " in request.user.name:\n givenName, _, familyName = request.user.name.partition(" ")\n formatted = request.user.name\n\n# photos supports URLs to images, however authentik might return data URIs\navatar = request.user.avatar\nphotos = None\nif "://" in avatar:\n photos = [{"value": avatar, "type": "photo"}]\n\nlocale = request.user.locale()\nif locale == "":\n locale = None\n\nemails = []\nif request.user.email != "":\n emails = [{\n "value": request.user.email,\n "type": "other",\n "primary": True,\n }]\nreturn {\n "userName": request.user.username,\n "name": {\n "formatted": formatted,\n "givenName": givenName,\n "familyName": familyName,\n },\n "displayName": request.user.name,\n "photos": photos,\n "locale": locale,\n "active": request.user.is_active,\n "emails": emails,\n} goauthentik.io/providers/scim/user \. @@ -2620,10 +2876,10 @@ e8809202-4ff0-4086-b078-196e6152e826 authentik default OpenLDAP Mapping: cn retu -- Data for Name: authentik_core_provider; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_core_provider (id, authorization_flow_id, name) FROM stdin; -1 87ca9599-5323-451c-8603-2f5bee7a0c12 grafana-ldap -2 a7ef54bb-7959-4559-979d-9345c022e086 grafana-saml -3 a7ef54bb-7959-4559-979d-9345c022e086 grafana-oidc +COPY public.authentik_core_provider (id, authorization_flow_id, name, authentication_flow_id, backchannel_application_id, is_backchannel) FROM stdin; +1 87ca9599-5323-451c-8603-2f5bee7a0c12 grafana-ldap \N \N t +3 a7ef54bb-7959-4559-979d-9345c022e086 grafana-oidc \N \N f +2 a7ef54bb-7959-4559-979d-9345c022e086 grafana-saml \N \N f \. @@ -2676,15 +2932,15 @@ COPY public.authentik_core_token (token_uuid, expires, expiring, description, us -- Data for Name: authentik_core_user; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_core_user (id, password, last_login, username, first_name, last_name, email, is_active, date_joined, uuid, name, password_change_date, attributes, path) FROM stdin; -2 !n7aLj0jKk3WIaSvfbaqM1nyy6fWejHsM54lRFljX \N AnonymousUser t 2022-10-25 09:01:03.467789+00 fe23113c-e658-40b0-872b-d522b6d84e95 2022-10-25 09:01:03.468042+00 {} users -7 pbkdf2_sha256$390000$s67BmqSPGYWQPDnZ01phY4$ky7qvH0SBsnsqeEM19AB0B4Ki8zIcmfshf7/r7aiodE= \N authentik-viewer authentik-viewer@localhost t 2022-10-25 09:56:58.979268+00 ee7aa163-4303-4c2d-99c7-293ffd9d08dd authentik-viewer 2022-10-25 09:57:13.55852+00 {} users -5 pbkdf2_sha256$390000$GmvsVEytoLZGHoKB8LdomP$Xi06ESYoLZ/ijL0FZDT964KM9C9WoPhQtv6Rfl3b6Nc= 2023-01-02 16:38:22.084529+00 authentik-admin authentik-admin@localhost t 2022-10-25 09:37:30.689793+00 a7d3e4ed-8b75-456f-b3aa-f53f45afd3a4 authentik-admin 2022-10-25 09:37:49.480346+00 {} users -4 !yrI1uXKCdF0svOmz83ldwXJnWMOUY8oY52dzYNT1 \N ak-outpost-efe635b92ce74de4977f9f25b9f36d97 t 2022-10-25 09:13:37.843347+00 a7dc29a9-11b7-4d35-aec1-260ae1ea62f5 Outpost ldap-outpost Service-Account 2022-10-25 09:13:37.843557+00 {"goauthentik.io/user/override-ips": true, "goauthentik.io/user/service-account": true} goauthentik.io/outposts -6 pbkdf2_sha256$390000$k0Ykknoutfj56D2AaJFxWJ$bmAmMoNISoYnUn+DQnepRd39Mp1pnY74yfAoiHwRYRc= 2023-03-13 12:40:53.895342+00 ldapservice ldapservice@localhost t 2022-10-25 09:49:18.218809+00 94fafa12-9abd-4567-9627-3c6998f38cca ldapservice 2022-10-25 09:49:50.76013+00 {} users -1 pbkdf2_sha256$390000$c4McOkDtg2Hps9uyXGdezW$8g7sh3praXa6Jo1AHfrng1dsf8dktric2hQYlUyAGyY= 2023-03-13 09:19:36.730646+00 akadmin admin@localhost t 2022-10-25 09:00:53.707692+00 d719cb26-008d-4bff-8f5c-13d1bf53de25 authentik Default Admin 2022-10-25 09:09:42.841946+00 {} users -3 !8j4wiqLzHmjS9fUEU0e0DsXx4z8Cj8W6lXnOCbo3 \N ak-outpost-0c24aadcf97e4720a70f72a190b0cafc t 2022-10-25 09:01:07.984838+00 b9835bf9-2711-41ef-86d2-b07124b9fef9 Outpost authentik Embedded Outpost Service-Account 2022-10-25 09:01:07.98507+00 {"goauthentik.io/user/override-ips": true, "goauthentik.io/user/service-account": true} goauthentik.io/outposts -8 pbkdf2_sha256$390000$g9w4rydmb2SLrzWYyInNZZ$W5G+Y2iayJp1KIp9wHuiozJ79Mdibo3zFx+Zxvofm5s= 2023-03-13 12:36:31.74172+00 authentik-editor authentik-editor@localhost t 2022-10-25 09:57:43.64112+00 3678963f-023e-48b3-97a1-0910b4fbbfea authentik-editor 2022-10-25 09:57:54.40015+00 {} users +COPY public.authentik_core_user (id, password, last_login, username, first_name, last_name, email, is_active, date_joined, uuid, name, password_change_date, attributes, path, type) FROM stdin; +2 !n7aLj0jKk3WIaSvfbaqM1nyy6fWejHsM54lRFljX \N AnonymousUser t 2022-10-25 09:01:03.467789+00 fe23113c-e658-40b0-872b-d522b6d84e95 2022-10-25 09:01:03.468042+00 {} users internal +3 !8j4wiqLzHmjS9fUEU0e0DsXx4z8Cj8W6lXnOCbo3 \N ak-outpost-0c24aadcf97e4720a70f72a190b0cafc t 2022-10-25 09:01:07.984838+00 b9835bf9-2711-41ef-86d2-b07124b9fef9 Outpost authentik Embedded Outpost Service-Account 2022-10-25 09:01:07.98507+00 {"goauthentik.io/user/override-ips": true, "goauthentik.io/user/service-account": true} goauthentik.io/outposts internal_service_account +4 !yrI1uXKCdF0svOmz83ldwXJnWMOUY8oY52dzYNT1 \N ak-outpost-efe635b92ce74de4977f9f25b9f36d97 t 2022-10-25 09:13:37.843347+00 a7dc29a9-11b7-4d35-aec1-260ae1ea62f5 Outpost ldap-outpost Service-Account 2022-10-25 09:13:37.843557+00 {"goauthentik.io/user/override-ips": true, "goauthentik.io/user/service-account": true} goauthentik.io/outposts internal_service_account +1 pbkdf2_sha256$600000$Z9YK1xODbvcOk3u3p0KonJ$N/S+WQZ1f9iXB734Xcc30AmE5hmV7e8EtT9cihvtc0g= 2024-01-11 22:06:44.87578+00 akadmin admin@localhost t 2022-10-25 09:00:53.707692+00 d719cb26-008d-4bff-8f5c-13d1bf53de25 authentik Default Admin 2022-10-25 09:09:42.841946+00 {} users internal +7 pbkdf2_sha256$600000$KzvAt9vwjfcZZ2j2vUxBeo$z3TLTqCB6IGqNiuqMhOp89GqCOA8NztlPc2CuSBlz2E= 2024-01-11 22:10:28.187334+00 authentik-viewer authentik-viewer@localhost t 2022-10-25 09:56:58.979268+00 ee7aa163-4303-4c2d-99c7-293ffd9d08dd authentik-viewer 2022-10-25 09:57:13.55852+00 {} users internal +8 pbkdf2_sha256$600000$mvb1xpRzqjDKlTV77sIulv$7dItv/PVoaamglojWjnh/AJrm9kzs/ZFPT6hPoSqk6Y= 2024-01-11 22:10:54.084985+00 authentik-editor authentik-editor@localhost t 2022-10-25 09:57:43.64112+00 3678963f-023e-48b3-97a1-0910b4fbbfea authentik-editor 2022-10-25 09:57:54.40015+00 {} users internal +6 pbkdf2_sha256$600000$5yumaes8rmMgoYHBoZJccx$ZwJQzQihlRZFZU8XwPj1WbJW0ZZhdHNo4SnoSEx+xV4= 2024-01-11 22:11:15.849616+00 ldapservice ldapservice@localhost t 2022-10-25 09:49:18.218809+00 94fafa12-9abd-4567-9627-3c6998f38cca ldapservice 2022-10-25 09:49:50.76013+00 {} users internal +5 pbkdf2_sha256$600000$SAxnow0EApm0aOYiQX5ZsB$iAxPX8OJVoKC+Cwf3mZyK9lOf1Q+i1BVJR+ECWd7jik= 2024-01-11 22:11:16.862134+00 authentik-admin authentik-admin@localhost t 2022-10-25 09:37:30.689793+00 a7d3e4ed-8b75-456f-b3aa-f53f45afd3a4 authentik-admin 2022-10-25 09:37:49.480346+00 {} users internal \. @@ -2716,10 +2972,10 @@ COPY public.authentik_core_user_groups (id, user_id, group_id) FROM stdin; -- COPY public.authentik_core_user_user_permissions (id, user_id, permission_id) FROM stdin; -31 4 21 -32 4 321 -33 4 348 -34 3 21 +38 4 21 +39 4 321 +40 4 348 +41 3 21 \. @@ -2736,10 +2992,24 @@ COPY public.authentik_core_usersourceconnection (id, created, last_updated, sour -- COPY public.authentik_crypto_certificatekeypair (created, last_updated, kp_uuid, name, certificate_data, key_data, managed) FROM stdin; -2022-10-25 09:01:06.131741+00 2022-10-25 09:01:06.131757+00 44404c15-dd39-48d7-8962-fcb807cd5e58 authentik Internal JWT Certificate -----BEGIN CERTIFICATE-----\nMIIFDDCCAvSgAwIBAgIRALJo/63v/kEBhLmb280DNEgwDQYJKoZIhvcNAQELBQAw\nHjEcMBoGA1UEAwwTYXV0aGVudGlrIDIwMjIuMTAuMDAeFw0yMjEwMjQwOTAxMDZa\nFw0yMzEwMjAwOTAxMDZaMEMxFzAVBgNVBAMMDmdvYXV0aGVudGlrLmlvMRIwEAYD\nVQQKDAlhdXRoZW50aWsxFDASBgNVBAsMC1NlbGYtc2lnbmVkMIICIjANBgkqhkiG\n9w0BAQEFAAOCAg8AMIICCgKCAgEAr4h9pDBcYkN+9+USHXFUj/j9UNQop+FLBSMz\nZ7sXLViRDxzIeWJ7ejB5Qshp+4pqOQiCLrOdxYuhupkl5w8O54DigKRCFLSzXtc8\nma3mDjUssrTwd8KLKzifpjUn5A/UGq4+AL7thJekgSqwo5nkQgnW8usXWnxViFxs\nMEqIFn1+XdD9s02lhuTkdq9k6c46duUFu/3YZmEOYmJguS3cV+DkQdqIr5DUT6+l\nx8iQNx2TsOxecpyBI17Jhh03TCiaL9btcj5hQTShIA/ssMh7xsTpqloLL0WG9hVG\n4txCIelIwEtSj7EGDTYDm6w2LUgxaEaPPPYWgnEEV5VEuAcWDVTpFyhy6xAlRrMR\nmN7HocHtXjcrAftv9rDRwi0dfpAr3SQgPy9q3vYimvl6srNNyuBEOYPXdIwAiDmQ\nE7NIouRi8jpFavd8L04WWaD05TghJ4WGPIR6MSEPBFQwCKmYdWUe/TSf/OlR57h/\n4KXuci9XB6xv69MSY6Ne5wprxouEz9FQTjjTipdkOw9iOQ9G+9FAW12BmpefOR+W\nazVdXwgmMjb0o7KckKOGMBJ4KqsXajn2sw77HKazHdtIMMCdNY3/Mykmi66iqkOF\nzG+HdJBMS6YMoQ2wKmRFOcZx0VH1M4muG903CryJND9Lt4befnkN7iKH4cY3PFI5\nOXRs/asCAwEAAaMgMB4wHAYDVR0RAQH/BBIwEIIOZ29hdXRoZW50aWsuaW8wDQYJ\nKoZIhvcNAQELBQADggIBAAllqD94m0olUDvOMenW80QVS/Im4S/Vk6E06SlsDcf6\nzaZ34SVBUftcYw1KhlDIifT2JwVLBEIsnW/nInmeFsLqGGlTuYTm+CDBT/+P4lsM\nKgy7cK0OrURcG1XxQlzYZqrHQinGVR6KaT7DQlonV8a3VUV40fEnn5urfbV/wOlW\nk6mmVJ2WvwUJ81dyGOxRLX9dwoMBzhuCdnpOk7rxfFZbpg/Rn8w6rng76U98R6ta\nbrS34vpqX1bARHVssi+2syXCRgBSvHFi6Y3Ix9XeUIhLCl/0R9eRxtEn0ROIcFyA\n0HtGtXZkHAJe9+Qyy6riImmFkLNIy7AwPkE7LgES8hYChjTPAzRg2uwlqW06esxW\nOWqnZCD387Dd5ji2vRLjvuTBDzkfK2mx8nYxJmFhGBe1gV6IscNoFcyxo2S2YS05\nWzjn9zADlE7e7+BhTtA1aOc6M2NqgtACGoKUFs76spYU4RNyGwsL2UDozvYeCr8r\nbbFBwclouhekWA/B6/4+uRqA3eUxYS3tmwHKiNM/xJUt0C2AZRxbW1FyWK/ZKtrI\n1Uv73BTLyAI8YmKbZn5IITJmWb2PAbGSb90FRXhk2qZan0x/uqypx7dm0/IKKWql\nu1Z9UP6KGNUBFzVmCc8ZoRfd6qZjHCS67LlTNVMTKf5eJ7wcNVKJ3WhRuLm/99Lc\n-----END CERTIFICATE-----\n -----BEGIN RSA PRIVATE KEY-----\n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\n-----END RSA PRIVATE KEY-----\n goauthentik.io/crypto/jwt-managed -2022-10-25 09:01:07.326561+00 2022-10-25 09:01:07.326585+00 6304c995-9003-4fc4-9ba2-3d32016fb04e authentik Self-signed Certificate -----BEGIN CERTIFICATE-----\nMIIFVDCCAzygAwIBAgIRAIquKwHdJ0cuqRSnZy/BhO0wDQYJKoZIhvcNAQELBQAw\nHjEcMBoGA1UEAwwTYXV0aGVudGlrIDIwMjIuMTAuMDAeFw0yMjEwMjQwOTAxMDda\nFw0yMzEwMjUwOTAxMDdaMFYxKjAoBgNVBAMMIWF1dGhlbnRpayBTZWxmLXNpZ25l\nZCBDZXJ0aWZpY2F0ZTESMBAGA1UECgwJYXV0aGVudGlrMRQwEgYDVQQLDAtTZWxm\nLXNpZ25lZDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvVUHe4feDV\n8kMLGbF25EuCnugVQpUhuwjcXrbQ9IiKvNCdw51Iagm3dpFftw+mkJ63WPTjuk+X\nyqSHvseBkStOaqsG1puq+TJ5apVix2/qVWAyQ63ERZs6kv3AJu+9hkHDNF8Vv2b5\ndXS5vvSiURZPIHh1mgZo+GepggdC2ob2wzs521b1o+2DfyNQeq5dnVM7JDV5qyRj\nXqcHd5GiPC4pUJbIw4srLAjW9oL0N7LdxcgtB+MLDxSc2KxZ64i4It3umpRx/zId\nzu3hJWuNKKr51SX3n7zUTJ0AM1MHSv6q/mbYOaiclZVzSOmhqVvEYiXFMeNCQJX0\nZuX9ZCeoS+j0NT3icmtK2enIC7S4a78nIEIwI91W5Co6oCzQHmNwffrKpYOAG4bE\n4BiY1afs2g6uam7XKYz+yixZ/fgSiGtCj7V1eeAiNy+3+hJJlvS5IS1FVTDK4BUL\nZ2h/6ZgkecjCNX0TxIsqo0F+M+7n00aRtLIDdc5w9VvAW9C5jMc0vBwWdrYHG3ZQ\nZAHvE5fRdIEVpEk8SKm9K0COuo0KX52VSRdYWTh3StDeaN9aHaF9tfoB/1rr+PEZ\n9v2BhR0bOUANaMVGUg4dZxonRGL3lYzDbsYEN+0/l2U15xZGfk6gpllFUpQi/fyc\ng/I2XI30YFBuoBhresBYTvErwqM45CQVAgMBAAGjVTBTMFEGA1UdEQEB/wRHMEWC\nQ2xabzJqU1V3WE9vcHJodUxDUjhGNXFYOXA3SVlNWmppRXpNTVh6TUwuc2VsZi1z\naWduZWQuZ29hdXRoZW50aWsuaW8wDQYJKoZIhvcNAQELBQADggIBAGNLFsJVrIDV\n170FzQ+vTu6Rcstcgefn+h7kSkALpsZeEjtZwM23Cew12iEbjUl6KUK4WXrgScE4\n7SPHOi0oInehNAVQGpiuE0J2tB8yDWkt56sPmDNYCoBR7HKLnEFHr8FRGMF/D3wD\ni0JmBH3kizpeUnEqSeEYDQpjETyla7xpYbPrUCJSgDbvB/lgYPuT682ZnfNfPGNo\nM5XU8QmkxzX9A2BtaBx04rP1rNtxS8iYNmVow0VNYhzrSMS85wvjg8cZPZkOQYC7\nbsiBIIFMRjgbWEd2GFMcJpM57pd6/uFvfIL+2V5eaH2Rbv8S1g1klrP8iN6kEV81\nr4QqKTG+lLZcxtnylHLO8EdquiSXGBp4hHxA1wC6r7DY82nVnL/yQ8VA8vh/wcH9\nhOkkjIvzwBkgV+SHgwE3c3w12sn+gRxOmWjEwbmr9mTNloADyMICftOiVU5VFF+9\nAyARrJg1n+t+IZdm6zGrE2/y3147YZtzxyoySp+RcqIzQM2BKEjk1GSSvdbBbNHZ\nu2fVFpl3/A+lZIgCYaSLwyw7dhfXnrTdHGofz2506tA7xIsjYK6etFepzPJgQmrP\n8v0MUb6tEtz201JISWAJumVDHqHxKH41RzZ0CCKmwHDtpNYCla22cGuvwPojWVJ9\nNYcW4HEgx5ppagtgwCDAVorV9HeJhfa+\n-----END CERTIFICATE-----\n -----BEGIN RSA PRIVATE KEY-----\n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\n-----END RSA PRIVATE KEY-----\n \N -2022-10-25 09:01:08.328413+00 2022-10-25 09:01:08.328425+00 f0a78f88-adc2-47e6-82c1-d49e9e159329 authentik Self-signed Certificate -----BEGIN CERTIFICATE-----\nMIIFUzCCAzugAwIBAgIQanwCoettS3O8glhNFB65gTANBgkqhkiG9w0BAQsFADAe\nMRwwGgYDVQQDDBNhdXRoZW50aWsgMjAyMi4xMC4wMB4XDTIyMTAyNDA5MDEwOFoX\nDTIzMTAyNTA5MDEwOFowVjEqMCgGA1UEAwwhYXV0aGVudGlrIFNlbGYtc2lnbmVk\nIENlcnRpZmljYXRlMRIwEAYDVQQKDAlhdXRoZW50aWsxFDASBgNVBAsMC1NlbGYt\nc2lnbmVkMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvBnbYXnQZBho\nj9DxExY04f9ELCT48oqdLHitJPxOy46iyfKyePWgNBvGUtqquCOy65ViNqFiXz/S\nat+5GLtXelXipqmOlBp7GfP9yTpeo0ClVfQ8vdccFGstrEaDv5nZkkKwPMfCGqVY\nwhJcxJCPUaXDDsK91YLpuLYNGJnmCHJUlHof7KSYjhn4Ie0/UtKjw5aqIoffMNup\nxs2tsdhUKz9nnKJzGm6lJeo18bOenhNmj1sYoF+xkdFENP768fAb8I39sIitlpL0\nAmPUW7PQpEQ835EwRHVoaUoQpjphuNsRGPcXOpIxkMgI2jJXDz/BGl70UZta/R8R\nGT9Oid8qm2UsOswbDUnHGMDbf1LogchOB0Wi3WgPVG8Z1sdBp5KStqDuYh+cxXwS\nD+xdfRfTzuFwsauTd0R27avWQ5e9qVjA7gQNohkVLQofy71ajrB2s/U+CoPnNIk5\nG50Ijd0K/WuE4en6e2vNxB9vTxZ0D7psc8/9wn+vtlcYn5o/gWBerBF5ptg4qjgp\nQ0f8vmifHuUztrrvI8q/wcdxjXQNfGlGZPRVArGecYEu3pxarRXhb7Bd0bzQu5Rp\nv3/IOFVL50Y1Y78TgCB/tSi5GKwkVT5WruntBPgE7IDCr3R9KqtMrE7ngon5wH2m\nhjKpkCRSa1Z4+spfw00UUENNwVcWFoUCAwEAAaNVMFMwUQYDVR0RAQH/BEcwRYJD\nOVJiZmRCRUU3c093QWp0bzN1RW9kbmNJZzFVQXBiREtlM3BJSkF0Zi5zZWxmLXNp\nZ25lZC5nb2F1dGhlbnRpay5pbzANBgkqhkiG9w0BAQsFAAOCAgEAkLqIXBRW7ffh\nrdwPkRaw/yuUN36gOnxs77j496mZMTHr2U+d/9k3gtvrZk8wB8tuL3kzsnRQp3PE\nRgJDJzlIOwFBwTkHb7Oi5Gb7ngVZKogufhgQvfCIJH2V3tgjF9Jj6/CaBfy9efy2\n4fQieSer0XB53fWL46eg5ZsHJhy4uo4Rwf3hggNtuHk3AO4SSg9iDHSthPaeMoXs\nyt5TnA2YkxHKQJRW5KjgdtqK+7D/nOzEr01chKWu94xKNSWAEh7FNRHuZhX9ppkc\nUiMtiRMY0AZXrWbLMjrbnNr7lNcrw6oze05ZNkws9NI04pytEhjbuREYvSHOUFub\n2SJg/jWPAjoh8LSAT5A97yEMtZf9x8prkbOq2fVyaNYBHhBciPFxqGMPdmDcLcvt\n5AxiTzHmgWL6B9eKdfT5wFbgbacdwtc4fNvb4g0nBipU6pKf2Rnyp2E99P7J7wx/\n/WVIPhEjovCj+2zakAxJna2Jn4AUDJBlO7xQrrPM9DCT3DWZzSX7oIr7u2mNwysw\nr0D5XhzWbzuhaNmS0gG6YUYk5xBTxjyaU0BJmcu1s9A5+a8DDGk7txJKPgAEdOtp\nQCDMNEk4usqLIEn21b9HaY0hlyGD+ae5JumwoIxoUHQtDIhJ55AM4GCn/wIitf4X\nLwH3MAd1SC3l7OGnME9gradc9SZYDmg=\n-----END CERTIFICATE-----\n -----BEGIN RSA PRIVATE KEY-----\n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\n-----END RSA PRIVATE KEY-----\n \N -2022-10-25 09:01:08.654156+00 2022-10-25 09:01:08.654169+00 fd8c40c1-e491-48d1-a265-02ef85ea9a12 authentik Self-signed Certificate -----BEGIN CERTIFICATE-----\nMIIFVDCCAzygAwIBAgIRAIwEhD3SuEWNm7TZwrVbRmAwDQYJKoZIhvcNAQELBQAw\nHjEcMBoGA1UEAwwTYXV0aGVudGlrIDIwMjIuMTAuMDAeFw0yMjEwMjQwOTAxMDha\nFw0yMzEwMjUwOTAxMDhaMFYxKjAoBgNVBAMMIWF1dGhlbnRpayBTZWxmLXNpZ25l\nZCBDZXJ0aWZpY2F0ZTESMBAGA1UECgwJYXV0aGVudGlrMRQwEgYDVQQLDAtTZWxm\nLXNpZ25lZDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKv4Thu+i4GD\ngNN6Id2fFg879TGr6WQZZW2DCsn4JgEiShtG1E4jXfzR0MaANrJU1Nn1RDd8Vp5O\n0RVso3+A21t44HVGJDiuPRYDrBaGxoKkvwb5TIq0rw8ID2XBqs+PzTXsd+fp1T94\nhRiSWFgsMuQgGXt4xH94VgHadv7oi4btZ40BuvF9oevw9S5ogbMfRnQuQe7inWlg\n6QkeyVnSAgZqT+IzuxL8y/XXIGzetQGsD/fvHz+BgWNFHwrEQd7gpOmrZSW7/SHU\nNBmP0PDONg2NQz8luFAAR1goebeZf+CqaNUWnmC/zmnNd+1wRIcuyMtmaVlBOrw1\nKgoLv6mg5rnIQB5W2BD2wBvh10+ed49Q4sKOndIej7I8lqkLm55g9VJxL7NXKk+v\n9H6bkvj4xWeXkyAONJKkzc/ggSgwOF/VVKXFR5qKuulAKYmZ+8OloB3dETKPcP7E\n+bcSX/8Z+1F3goFiUzgZms7Tlgzkp9Sy408SMssqexqqf3x4BV+eETDMKIfUosZ1\nt93hMa7nhP7VyfCf2SDV5+HP7BULbZhoepojwdtnH62zB/tp+3L/PAIfznJmJTaj\nOyLbk4fCRr5fR5F/FOO0rlnE73PIy8vEMDHvgoRbvuJM2CrCquYOEqBCX5NSsKJa\nzjp9n+LbuCJV8RSit4aX5KVNMl9XeS+DAgMBAAGjVTBTMFEGA1UdEQEB/wRHMEWC\nQ2JNMDJoVjZaWGI3ODR6bUU3ZlRoYzZRTk9nWG1ZWVY1VWpITjgwNTAuc2VsZi1z\naWduZWQuZ29hdXRoZW50aWsuaW8wDQYJKoZIhvcNAQELBQADggIBAKiDpxrkM8Nr\ngYfRPOvzOfviYdEVrcu8LJawEESKqBphFZjj30AOFSH79GdBz3ckeMdmyEAmfDh4\nijSueXJ65sgzYFjLRaG3YdjoTWMHH8tK3RK9NeOCQSrDaaIXRPdb5QGjUOmR3O6K\n+Z5vCy2mGnpeUnTit/s90NqylUn+CbVDxRqfdFushl6FPIfCGMXkLH0nTBhEDTyG\nrmgh9I6NtXI5HBAy+ZKdahcy4NE6rVqlzdvyc1jUjlP4Bwl670nzg9HFUDIGIbBf\n7OkBOt8AgZnziLP0vxmTcIa8KCtdbobdx5tIXoKsHkHsP2LrR24TbpRrfj40Ikzl\ni4ooqkQQ25SUGYjeKgX+ZQv7rWWs/3JyV3YGWSBTJI879v2+58WYXArXoGIzT1yo\nLAuPXzHMCYdHTCk7SzOtWa7g9HnqKx43jSWPc8sQg4HzubxoMzmBEthH/PXAgN8C\nGKgsATd9rpiml1FIeoJpJtCfE3F6oTdyAB73upgvQKUhTGShzwV8vCD9WERX1aXc\nu+0W4o8Zt7Oqtdj2rnqk8PQlNyn0ZsfsJYtiFPgntHLhIOh0HCY2irkQyUgFr4RU\nfjrf3PPnXzMfoa/bRuyNprMPl+R8WKU+6o0paZ3oSTkHzn/IUdNy+06JSdZDMjRM\nBdiRGnL05ZtSyoaf4dFZno2Qd0XAjYQJ\n-----END CERTIFICATE-----\n -----BEGIN RSA PRIVATE KEY-----\n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\n-----END RSA PRIVATE KEY-----\n \N +2022-10-25 09:01:06.131741+00 2024-01-10 13:34:38.497975+00 44404c15-dd39-48d7-8962-fcb807cd5e58 authentik Internal JWT Certificate -----BEGIN CERTIFICATE-----\nMIIFHjCCAwagAwIBAgIQF5FQmU7oSciGLNkWVbLSpzANBgkqhkiG9w0BAQsFADAd\nMRswGQYDVQQDDBJhdXRoZW50aWsgMjAyMy44LjEwHhcNMjQwMTA5MTMzNDM4WhcN\nMjUwMTA0MTMzNDM4WjBXMSswKQYDVQQDDCJhdXRoZW50aWsgSW50ZXJuYWwgSldU\nIENlcnRpZmljYXRlMRIwEAYDVQQKDAlhdXRoZW50aWsxFDASBgNVBAsMC1NlbGYt\nc2lnbmVkMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAz7YMxtUcRT+A\ni8oOZpnBHF/5NFQ15dexytyfB/ni2B0w7SjN0aoOXAY0/AHd8ykloSz9XLgDrUx+\n8qHYMX4V941DVPrFLe26UYnXNUDaLW4N6uMhJjxFzQQQ3bjMTzizJ8sbT7qAJ5yh\n2cs+IM3vHnivc/pYuM7VgLlbnPfbjYtnvpLNf94xkOaMuOX8HdbQmtlt/ARMe9mS\nhZYDkPcAkFjnxOE+dZkkKE13sZyoeghcrjaB56GZqhQ8e6Jkih6cbJ5vto5UOP8+\n9Hwe2FD//wEvRYYl2d32GREDqqrJX5ChODyL2u99z/6Zfe2UGbIYn0vF7zTYICTq\nAZgUuPzk5X2caUAVwDG1DRzu6xaU9AmNarg+MgdhKdO20F9qjJ/DJ3srSgaSLHyd\ne1XW94Pagt1mCGfPuxpuX/b0HCUhR4hQGmm76FbthkZn8VlucZc+qXuLzWyNWbI1\nNFXIpewSn5vGOyMRifCEZAXkIU0mBLp/ah8OK63Q4YoH+LnM7y1haIScVlY77AGa\nZq0wDnr5bpq5Cruylu90RsgkXqokqHmVJtKW0IQIxT5ilMpGXNnPkuwZxsFkAz2U\nlwBfKPhyrmYIIHvvLQYHohZOu/JSESqQ+KzkiRlzmdXmWciuC/G58Khz+Zoq+xas\nrR/vATcNjfkldbH6hJoV6o6gD1fO9TcCAwEAAaMgMB4wHAYDVR0RAQH/BBIwEIIO\nZ29hdXRoZW50aWsuaW8wDQYJKoZIhvcNAQELBQADggIBAG+xj/e41S2wPMmkSXx6\no88x7FhS+pCMUQqhdlCSSjweIWuIK+iTW+MHOhk9xVqwBKkO6fu1ImiDcZHv88JA\ne/dEMyqv+hfqx8MpAr6pPYfVloEY8UsafTXwGoE5bgr5SIeO2yqZ5IBEys3pC1I4\necGLEgKFJ+nNyCeC2COE7NTDQOSfYnnQQLDhBSehJU7gHJ05FJJCGwjSNp25TKEl\nT/9r7tnfgPkygu38bUHg9wRrR69gLsfgG4gkVrkgg/ac9XfKFOMstsXH/njm2CpI\nk6Kl1XrKxeJX65fFMSzHZ05NyWVRNyFH6EvLuFNehwF9fYiYFBGrLGjOD+LtnIPo\nOD+8Mx415zRAWGQzePrgK2oWuVqGAz/Rdw18vAFKHJdt0zwd1D+RzUKXNJIha40n\nyDvHIUjAGIcE5iOozoYk0VqCDzYaQDib+aYiy8UXmK7ac+AfYhH/+HmpcibQGOXx\n1XpDjkbYXosKfi9E77yOFL7Iuavgu8u4/F1OMF/yG1UxDEo/WS1mriF6e3Ec8snq\nV2taRnKmjj0vI1cRCPeLf8uoD/MoLjjyuTwmDhnIjbt24b6+bul87ZKpQtk3Ecp6\nyB7SWjTuIph3pxpwmHjRopFP7Upz7YLzU0/TViIF++pN2X65yDxiZc0zSoqJ/53I\nNfx5/oC06EbgbJieCxnHeYuB\n-----END CERTIFICATE-----\n -----BEGIN RSA PRIVATE KEY-----\n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\n-----END RSA PRIVATE KEY-----\n goauthentik.io/crypto/jwt-managed +2024-01-11 22:07:32.546353+00 2024-01-11 22:07:32.546366+00 3fcd5d6c-3e40-43bc-b916-c7cd3675d0f1 authentik Self-signed Certificate -----BEGIN CERTIFICATE-----\nMIIE/TCCAuWgAwIBAgIRAK1LRDkgWUYlrpBkN5TBxu8wDQYJKoZIhvcNAQELBQAw\nHjEcMBoGA1UEAwwTYXV0aGVudGlrIDIwMjMuMTAuNjAeFw0yNDAxMTAyMjA3MzJa\nFw0zNDAxMDgyMjA3MzJaMFYxKjAoBgNVBAMMIWF1dGhlbnRpayBTZWxmLXNpZ25l\nZCBDZXJ0aWZpY2F0ZTESMBAGA1UECgwJYXV0aGVudGlrMRQwEgYDVQQLDAtTZWxm\nLXNpZ25lZDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALY9CVd1AZoE\nidS5z5x0UiXhOlvrxDeJ2gZOzpKdfQ/V6piMruOnz247vsqTWTziy3dTejuTiBA4\nvxOolWzuTu6jWs20zmbpynqfszEB9X83ag0ijpkzIgj2nvtgIkXn+ti2v4f4tdmC\n8OlY6G4tlD0NUc95VBo6qFdrsKJHmDfNsNqcsYzsxvi4QXoIXx+WILcvMFAP0wU5\ndKIg3mrTc2EO08KHqh2rXj2W6DzhBCbQUTDRnuJwH0I4wtr8QgUGbjY2l5qig2Fm\nonH0L229NUiQmo7ptp9xvj3L1Kzt8q/aEoUW3hSTRujP0Wx72U3Q86xaD3dnC1tK\nF5PXG/JBb72oRGF978kfgAhERUvkmuyAV4kvFCTWw2oZTsszOZMIbQ10lxJ5+yGg\n0AhYojNnqWiM+D03FCnXpYdMUfTmEHSxFTmYivi7RKE/uA7VjvKL/mXLqR6alQBC\nHg08bhXcZCBvJEn+LKsysAvFuwb+yauV6O8BOKL1f1PMxK0VEhzISQ9p7FB84v7d\nZLH7pCzBSb8Or3URgls0wuNVsg6WedOgdCW3KOr1JcFNEn9daEKF3uoGxJ+58k5L\ngFV1+JOO1rgAFpUlIy8+UXHEkKUIA2HnUStedNfta5Rduw0sVkrIOOxG5GF3/wlu\n7ZKoogrKWVsmBIaDHD1FRTdtkz5BbJrtAgMBAAEwDQYJKoZIhvcNAQELBQADggIB\nAAHdrZStP3QAgiQclZHmW9rgjMIFstWGj3+MbR+MxJPqTJLAjXWYiFsTWE1WrjLv\n3eoE2pszEKPV+ZLSTmSFC3N61F9u7coXXLmGq8Z01ubyzZIiyih/pJOWax+0xYkD\n+gNZ0syjgyBQ9JxaOHol0ydoQSKYEhI+BsD5GVrh1q9FBtmJhB+E3Z+qb4axd+n1\n9u9G77ZMcoAjknXZsULx9jkAQehC5+qO6+7zOdKZ5LfvQGY7K6lsKpsCuC9nC9nl\n33BeKdshrIvJwFQ60U9f8CrbAEMVKaEB6UCWlmHAVk/i3/vYW49L31UKl0d8nyxC\neg+xE9lK8xfZ18P2G5xPOXkj0qqk/byMrTYTeVCzYQstc4Vpkcr6H0ltuYF41Fcg\nHJSV4mtxv3EvkZdpPx2Iqw8td4theHjt+j7Xb3sufgBfjEcX/ZYgPOYlFCs2ScDR\nwBvpXytwd58s7pWfIYhi7mnn4LDqhLgYMOue5KpuqMTBbINGywyoiA+tr5paJOy1\n7+KFqUuymClfKtvsBWEci+a71Toy/5O0OvvqbfBkiwpjSNwvTWLiVjuTCQx9BcBP\n3ZXeKE4s3SQ9WHTi4PLpItYNpkjDDQgy7avEBGSofh9k6RNunLkOmQJDTWofPXbI\nfVB1RPV/Pi69jLSI4y4nNPSXIN6r7R6mAHv4nng+Q6Tj\n-----END CERTIFICATE-----\n -----BEGIN RSA PRIVATE KEY-----\n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\n-----END RSA PRIVATE KEY-----\n \N +\. + + +-- +-- Data for Name: authentik_enterprise_license; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_enterprise_license (license_uuid, key, name, expiry, internal_users, external_users) FROM stdin; +\. + + +-- +-- Data for Name: authentik_enterprise_licenseusage; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_enterprise_licenseusage (expiring, expires, usage_uuid, user_count, external_user_count, within_limits, record_date) FROM stdin; \. @@ -2748,107 +3018,7 @@ COPY public.authentik_crypto_certificatekeypair (created, last_updated, kp_uuid, -- COPY public.authentik_events_event (event_uuid, action, app, context, client_ip, created, "user", expires, expiring, tenant) FROM stdin; -ca71d863-2b13-42fd-a836-134bdb8e13f2 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2022-10-25 09:09:13.17925+00 {} 2023-10-25 09:09:13.175376+00 t {"pk": "0b2cdade01e549bc94874f4e23b9feb9", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -fe793d8d-5f6b-40ef-af46-b8cf221432ca password_set authentik.events.signals {} 255.255.255.255 2022-10-25 09:09:42.825971+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:09:42.825304+00 t {"pk": "981ac441d0bb4249bdd540582695859f", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -af542ed4-b917-417a-8ca5-5f206298b936 user_write authentik.events.signals {"email": "admin@localhost", "created": false, "password": "********************", "component": "ak-stage-prompt", "http_request": {"args": {"query": ""}, "path": "/api/v3/flows/executor/initial-setup/", "method": "GET"}, "password_repeat": "********************", "oobe-header-text": "Welcome to authentik! Please set a password for the default admin user, akadmin."} 192.168.32.1 2022-10-25 09:09:42.969783+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:09:42.968372+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -b2f7c0a7-f389-4e88-b336-4490e21f83de login authentik.events.signals {"http_request": {"args": {"query": ""}, "path": "/api/v3/flows/executor/initial-setup/", "method": "GET"}} 192.168.32.1 2022-10-25 09:09:43.014062+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:09:43.013647+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -32a35640-815b-4f6e-a259-5a535259cd66 model_updated authentik.events.signals {"model": {"pk": "0c24aadcf97e4720a70f72a190b0cafc", "app": "authentik_outposts", "name": "authentik Embedded Outpost", "model_name": "outpost"}, "http_request": {"args": {}, "path": "/api/v3/outposts/instances/0c24aadc-f97e-4720-a70f-72a190b0cafc/", "method": "PUT"}} 192.168.32.1 2022-10-25 09:10:11.96456+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:10:11.963869+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -e1118e2c-91c8-48ed-a5ca-d7c6e60a7378 model_created authentik.events.signals {"model": {"pk": 1, "app": "authentik_providers_ldap", "name": "grafana-ldap", "model_name": "ldapprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/ldap/", "method": "POST"}} 192.168.32.1 2022-10-25 09:12:08.367626+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:12:08.36694+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -ef09da1d-1893-4528-bede-2aadb7f0c77e model_created authentik.events.signals {"model": {"pk": "77d294b58a504d6d8edd5b15e5871826", "app": "authentik_core", "name": "Grafana", "model_name": "application"}, "http_request": {"args": {}, "path": "/api/v3/core/applications/", "method": "POST"}} 192.168.32.1 2022-10-25 09:12:55.329043+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:12:55.328294+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -e60a1d29-8678-4e11-bfcc-c0fd2f2c464f model_created authentik.events.signals {"model": {"pk": 4, "app": "authentik_core", "name": "", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/outposts/instances/", "method": "POST"}} 192.168.32.1 2022-10-25 09:13:37.846856+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:13:37.846108+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -2047c684-54a8-44af-8f95-46112d8543a7 model_updated authentik.events.signals {"model": {"pk": 4, "app": "authentik_core", "name": "Outpost ldap-outpost Service-Account", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/outposts/instances/", "method": "POST"}} 192.168.32.1 2022-10-25 09:13:37.856944+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:13:37.856452+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -2dc275ec-e9a6-4dce-b259-bb685e7e429f model_created authentik.events.signals {"model": {"pk": "44299d02c0864d35b54e2e56bb3346f2", "app": "authentik_core", "name": "ak-outpost-efe635b9-2ce7-4de4-977f-9f25b9f36d97-api", "model_name": "token"}, "http_request": {"args": {}, "path": "/api/v3/outposts/instances/", "method": "POST"}} 192.168.32.1 2022-10-25 09:13:37.88489+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:13:37.88312+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -c7b6fea0-c89d-4125-8a23-859bf55911d9 model_created authentik.events.signals {"model": {"pk": "efe635b92ce74de4977f9f25b9f36d97", "app": "authentik_outposts", "name": "ldap-outpost", "model_name": "outpost"}, "http_request": {"args": {}, "path": "/api/v3/outposts/instances/", "method": "POST"}} 192.168.32.1 2022-10-25 09:13:37.890188+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:13:37.889512+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -f6ff23d7-9b7b-4424-afef-ec5ac2a574d0 secret_view authentik.core.api.tokens {"secret": {"pk": "44299d02c0864d35b54e2e56bb3346f2", "app": "authentik_core", "name": "ak-outpost-efe635b9-2ce7-4de4-977f-9f25b9f36d97-api", "model_name": "token"}, "http_request": {"args": {}, "path": "/api/v3/core/tokens/ak-outpost-efe635b9-2ce7-4de4-977f-9f25b9f36d97-api/view_key/", "method": "GET"}} 192.168.32.1 2022-10-25 09:15:44.834592+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:15:44.834124+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -da39c55c-e585-4d8b-b19e-7e18606b58aa login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "next=%2Fif%2Fadmin%2F%23%2Foutpost%2Foutposts"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 192.168.48.1 2022-10-25 09:17:04.22777+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:17:04.226384+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -3fc6a6d8-eb31-40a7-965d-c2ed92af04a6 model_updated authentik.events.signals {"model": {"pk": 1, "app": "authentik_providers_ldap", "name": "grafana-ldap", "model_name": "ldapprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/ldap/1/", "method": "PUT"}} 192.168.48.1 2022-10-25 09:29:26.860418+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:29:26.859915+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -ccee3640-def8-4062-a307-710b2033d31c model_updated authentik.events.signals {"model": {"pk": 1, "app": "authentik_providers_ldap", "name": "grafana-ldap", "model_name": "ldapprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/ldap/1/", "method": "PUT"}} 192.168.48.1 2022-10-25 09:32:43.836453+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:32:43.835938+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -7c898c81-9586-4aae-b239-ae659ed974c1 model_created authentik.events.signals {"model": {"pk": 5, "app": "authentik_core", "name": "authentik-admin", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/", "method": "POST"}} 192.168.48.1 2022-10-25 09:37:30.692906+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:37:30.692315+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -67a1a1a8-a924-4777-a8f4-d29aef82691c password_set authentik.events.signals {} 255.255.255.255 2022-10-25 09:37:47.793935+00 {"pk": 5, "email": "authentik-admin@localhost", "username": "authentik-admin"} 2023-10-25 09:37:47.793475+00 t {"pk": "124e241c825640d9b416596b2daab8b3", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -b895bd1d-03a2-44f1-8753-5232220d37a0 model_updated authentik.events.signals {"model": {"pk": 5, "app": "authentik_core", "name": "authentik-admin", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/5/set_password/", "method": "POST"}} 192.168.48.1 2022-10-25 09:37:47.924884+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:37:47.924462+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -54fefcce-6f93-40c6-93d1-007e77298c91 password_set authentik.events.signals {} 255.255.255.255 2022-10-25 09:37:49.464784+00 {"pk": 5, "email": "authentik-admin@localhost", "username": "authentik-admin"} 2023-10-25 09:37:49.464216+00 t {"pk": "124e241c825640d9b416596b2daab8b3", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -5ef43d7a-eac0-46c8-8681-c48dff52c46c model_updated authentik.events.signals {"model": {"pk": 5, "app": "authentik_core", "name": "authentik-admin", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/5/set_password/", "method": "POST"}} 192.168.48.1 2022-10-25 09:37:49.602412+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:37:49.601954+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -6689eeb4-5bef-4efa-a323-dbdcb7c4c7cd login_failed authentik.events.signals {"stage": {"pk": "02b4a829f9ab45d0adcc11e3c165f1c4", "app": "authentik_stages_password", "name": "default-authentication-password", "model_name": "passwordstage"}, "password": "********************", "username": "akadmin", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "POST"}} 192.168.48.1 2022-10-25 09:38:11.496946+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2023-10-25 09:38:11.49223+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -16ec88aa-d907-4bf6-bfc7-e81632994434 login_failed authentik.events.signals {"stage": {"pk": "02b4a829f9ab45d0adcc11e3c165f1c4", "app": "authentik_stages_password", "name": "default-authentication-password", "model_name": "passwordstage"}, "password": "********************", "username": "akadmin", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "POST"}} 192.168.48.1 2022-10-25 09:39:03.51403+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2023-10-25 09:39:03.509268+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -69829427-ccb3-49de-a311-f32de325b431 model_updated authentik.events.signals {"model": {"pk": 1, "app": "authentik_providers_ldap", "name": "grafana-ldap", "model_name": "ldapprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/ldap/1/", "method": "PUT"}} 192.168.48.1 2022-10-25 09:42:05.479394+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:42:05.478987+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -5a10fbbc-7ce4-4e1e-b5fc-201edf4fd1c7 login_failed authentik.events.signals {"stage": {"pk": "02b4a829f9ab45d0adcc11e3c165f1c4", "app": "authentik_stages_password", "name": "default-authentication-password", "model_name": "passwordstage"}, "password": "********************", "username": "akadmin", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "POST"}} 192.168.48.1 2022-10-25 09:42:08.483874+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2023-10-25 09:42:08.477967+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -a4594d02-c239-4607-b95b-3043d3d3b565 login_failed authentik.events.signals {"stage": {"pk": "02b4a829f9ab45d0adcc11e3c165f1c4", "app": "authentik_stages_password", "name": "default-authentication-password", "model_name": "passwordstage"}, "password": "********************", "username": "akadmin", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "POST"}} 192.168.48.1 2022-10-25 09:42:17.786095+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2023-10-25 09:42:17.780264+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -ede37431-b8b6-4b88-baaf-78a58802305c login_failed authentik.events.signals {"stage": {"pk": "02b4a829f9ab45d0adcc11e3c165f1c4", "app": "authentik_stages_password", "name": "default-authentication-password", "model_name": "passwordstage"}, "password": "********************", "username": "akadmin", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "POST"}} 192.168.48.1 2022-10-25 09:42:31.137414+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2023-10-25 09:42:31.132685+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -8d8dab83-750e-44f3-b5f9-e33b85e2f8b2 model_updated authentik.events.signals {"model": {"pk": 1, "app": "authentik_providers_ldap", "name": "grafana-ldap", "model_name": "ldapprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/ldap/1/", "method": "PUT"}} 192.168.48.1 2022-10-25 09:43:27.594287+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:43:27.59388+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -dacab0a4-45f4-43be-8471-44d99f3b8f4f login_failed authentik.events.signals {"stage": {"pk": "02b4a829f9ab45d0adcc11e3c165f1c4", "app": "authentik_stages_password", "name": "default-authentication-password", "model_name": "passwordstage"}, "password": "********************", "username": "akadmin", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "POST"}} 192.168.48.1 2022-10-25 09:43:30.63453+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2023-10-25 09:43:30.629991+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -12d75a37-20ee-44f4-9f1b-9f99d6dfdeea update_available authentik.admin.tasks {"message": "Changelog: https://goauthentik.io/docs/releases/2022.12#fixed-in-2022121", "new_version": "2022.12.1"} \N 2023-01-02 14:17:08.672486+00 {} 2024-01-02 14:17:08.671057+00 t {"pk": "3fe5e3c1df6f42e1a4a934178957c3b6", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -63133b06-3f6d-4b91-8dab-3de201e71ab5 model_updated authentik.events.signals {"model": {"pk": 1, "app": "authentik_providers_ldap", "name": "grafana-ldap", "model_name": "ldapprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/ldap/1/", "method": "PUT"}} 192.168.48.1 2022-10-25 09:44:12.026999+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:44:12.026611+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -8b1c946c-4713-47ff-a104-9053e97e4a70 model_created authentik.events.signals {"model": {"pk": "f4abcb7d5f9248908760afb9effda665", "app": "authentik_stages_identification", "name": "ldap-identification-stage", "model_name": "identificationstage"}, "http_request": {"args": {}, "path": "/api/v3/stages/identification/", "method": "POST"}} 192.168.48.1 2022-10-25 09:45:15.819069+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:45:15.81859+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -bcd2fae1-ef0b-4f9c-807d-67a66817d063 model_created authentik.events.signals {"model": {"pk": "95715d75025b4e5e9d2396826479906d", "app": "authentik_stages_password", "name": "ldap-authentication-password", "model_name": "passwordstage"}, "http_request": {"args": {}, "path": "/api/v3/stages/password/", "method": "POST"}} 192.168.48.1 2022-10-25 09:45:43.056738+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:45:43.056256+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -d1de4dc6-df68-493e-b13c-4379f96b5ff7 model_created authentik.events.signals {"model": {"pk": "8a432e545bb44199add953e198eca1dc", "app": "authentik_stages_user_login", "name": "ldap-authentication-login", "model_name": "userloginstage"}, "http_request": {"args": {}, "path": "/api/v3/stages/user_login/", "method": "POST"}} 192.168.48.1 2022-10-25 09:46:01.893085+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:46:01.892272+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -b3dfb7cf-4fd3-473c-b6ad-739962e40702 model_created authentik.events.signals {"model": {"pk": "87ca95995323451c86032f5bee7a0c12", "app": "authentik_flows", "name": "ldap-authentication-flow", "model_name": "flow"}, "http_request": {"args": {}, "path": "/api/v3/flows/instances/", "method": "POST"}} 192.168.48.1 2022-10-25 09:46:38.942684+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:46:38.942223+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -0aa9b970-1d95-44fa-9f79-d99b7e3ff03e model_created authentik.events.signals {"model": {"pk": "585626b672d84f0f9b4e085d6a3c2ee0", "app": "authentik_flows", "name": "Flow-stage binding #10 to 87ca9599-5323-451c-8603-2f5bee7a0c12", "model_name": "flowstagebinding"}, "http_request": {"args": {}, "path": "/api/v3/flows/bindings/", "method": "POST"}} 192.168.48.1 2022-10-25 09:47:33.7108+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:47:33.710142+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -79eee3e4-65e8-4080-87e3-9e8c636a9d17 model_created authentik.events.signals {"model": {"pk": "1e25b2d4d52b4f198b9e65960d3a64a8", "app": "authentik_flows", "name": "Flow-stage binding #30 to 87ca9599-5323-451c-8603-2f5bee7a0c12", "model_name": "flowstagebinding"}, "http_request": {"args": {}, "path": "/api/v3/flows/bindings/", "method": "POST"}} 192.168.48.1 2022-10-25 09:47:53.392562+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:47:53.392118+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -5afcc689-ec3d-4c8b-a40b-0d5dc94b0a96 model_updated authentik.events.signals {"model": {"pk": "f4abcb7d5f9248908760afb9effda665", "app": "authentik_stages_identification", "name": "ldap-identification-stage", "model_name": "identificationstage"}, "http_request": {"args": {}, "path": "/api/v3/stages/identification/f4abcb7d-5f92-4890-8760-afb9effda665/", "method": "PUT"}} 192.168.48.1 2022-10-25 09:48:07.123134+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:48:07.122699+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -02a707b3-cd63-48b1-8731-734d73af8c6a model_updated authentik.events.signals {"model": {"pk": 1, "app": "authentik_providers_ldap", "name": "grafana-ldap", "model_name": "ldapprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/ldap/1/", "method": "PUT"}} 192.168.48.1 2022-10-25 09:48:41.639902+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:48:41.639409+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -d4595a1a-8c5b-450f-a4de-9907facd1e94 model_created authentik.events.signals {"model": {"pk": 6, "app": "authentik_core", "name": "ldapservice", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/", "method": "POST"}} 192.168.48.1 2022-10-25 09:49:18.229623+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:49:18.228008+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -dfab21a9-ad29-4980-a762-80a1f0c42ab5 model_created authentik.events.signals {"model": {"pk": "a9c6327ccfca4d5ba0af421645e43c31", "app": "authentik_core", "name": "ldapsearch", "model_name": "group"}, "http_request": {"args": {}, "path": "/api/v3/core/groups/", "method": "POST"}} 192.168.48.1 2022-10-25 09:49:32.570493+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:49:32.570074+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -d273c74c-ec69-445b-87aa-0a7869c359b6 password_set authentik.events.signals {} 255.255.255.255 2022-10-25 09:49:44.127166+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2023-10-25 09:49:44.12686+00 t {"pk": "124e241c825640d9b416596b2daab8b3", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -9969bf93-4d3f-4325-97db-4037c6e9ed59 model_updated authentik.events.signals {"model": {"pk": 6, "app": "authentik_core", "name": "ldapservice", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/6/set_password/", "method": "POST"}} 192.168.48.1 2022-10-25 09:49:44.253791+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:49:44.253274+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -f8e8270f-871a-41bd-b02e-f3c29e9897f8 password_set authentik.events.signals {} 255.255.255.255 2022-10-25 09:49:45.195476+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2023-10-25 09:49:45.195113+00 t {"pk": "669e359eaf174055957065109edc72a8", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -a36d1d0c-a444-4dcd-b27c-297ecfce47fc authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBj9MwEIX%2FiuV7aicNSWttIpWtEJUWqLaFA7epM9lacuzgmQD771GzRVok1MMebc97n%2BfN3BEMfjSbic%2FhEX9MSCx%2BDz6QuTw0ckrBRCBHJsCAZNiaw%2BbTgykW2gARJnYxyFeS8bZmTJGjjV6K3baRrstWuu7zWndlX%2BaAuF6eynVV9brP39WnWq9sUeVVibUU3zCRi6GRxUJLsSOacBeIIXAjC10sM51nujjmlVnmZrlerMr6uxRbJHYBeFaemUejlI8W%2FDkSm7XWWsE4emfnEnVpQT0l6CFANh%2BIojq50LnwpBJ2LqFlJcXmb%2FP3MdA0YDpg%2Buksfn18%2BA9neeHMdmBJiv01hfcvvrcju8LJfDwe99n%2By%2BEo23lsZs4giQ8xDcC3TS43rsv6udRgYMfPsr3xzwEZOmC4U69Q7XVdPsOAu%2B0%2Bemef34DnBIEcBpZi4338dZ8QGBvJaUKp2hfkv0vZ%2FgkAAP%2F%2F&RelayState=TUVNeGt5N3FINDA5UGVEM1JuSHA1dU82TFBWUUZPSzVEcFR2U2RqQ1hrb2lOdmdKMEp8U2RLaHBycFZ6&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=w3j4ku9na9TCOBB0lF%2FHA5VTsVQb%2Fa0kuSgILzVcbLTq%2BcAcPRNmEcpVqZPHcWtIfJPw%2F%2FP0HsQhKiPm70JbrVBbZPsZO3ysTe%2Fa9bhpot1yf9HHbkFWShcT%2BA5hgap1DEvJMSZD8N5%2Fkq%2BO47s9%2F0ngZeN%2FErO41mXDrvEGXFEJfHCgU18BOAwbKN9eGj09idnldNiUJ4mm1HEbAHI935KS6buBDnLgM0dYIYZzEIBKewt7j8poD98hRyV9GnCBrN%2FH2D7yOf3IGwKBc4hdMhYbeqBKcj4MTywBEQIc1uY9nUdtRI4N1Nrfmwd2KOpribVB%2FE6musXjb%2Fxo5%2BRmvyMASQGb%2Foo1QIfDZ87lRbRNKffw8KTI7dTusJTl%2BH6mYEtWU5rd%2B6bsiSLFiLl%2F7wpFOHlynTaqte2J1Cg7RAaJt8o0V7vb3%2BpS9CxaFY%2BF8J7MLc3drOTLy9EReBgV2vmdkwS2lE92EYkOzm987nusuUGP2f8ET5oUr1udHw1w2UPdyoJHdTYiHwLUufCM1%2BgaJsoZALfzgW0vKe8ghMUrHl03M9mddynTF%2B%2F9y%2FtIp3INVoWeS6WRHhX0bwlkwBXpL675KkW7q%2F0rVYJ3m6BOt9JkzXPv3l42yQPYs8KY3TXvbwIf2m0L%2FTORX5Jnhs09rWhQrNv%2BrONgD1mUrsA%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 16:31:40.277118+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:31:40.276431+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -c07b9726-c9a6-41d9-8750-298dc6c02bb9 model_updated authentik.events.signals {"model": {"pk": 6, "app": "authentik_core", "name": "ldapservice", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/6/set_password/", "method": "POST"}} 192.168.48.1 2022-10-25 09:49:45.334164+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:49:45.333246+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -0e5513c2-7946-4809-b7ad-e8ee39eb06f7 password_set authentik.events.signals {} 255.255.255.255 2022-10-25 09:49:50.747043+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2023-10-25 09:49:50.746711+00 t {"pk": "669e359eaf174055957065109edc72a8", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -3c0fb3f6-a496-4f75-8748-065b52ecef2d model_updated authentik.events.signals {"model": {"pk": 6, "app": "authentik_core", "name": "ldapservice", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/6/set_password/", "method": "POST"}} 192.168.48.1 2022-10-25 09:49:50.876408+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:49:50.87598+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -ad444c96-d144-4242-912d-df660a82dfa8 model_updated authentik.events.signals {"model": {"pk": 1, "app": "authentik_providers_ldap", "name": "grafana-ldap", "model_name": "ldapprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/ldap/1/", "method": "PUT"}} 192.168.48.1 2022-10-25 09:51:10.6754+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:51:10.674831+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -6c99cc35-0fd4-42ce-866f-4c733c979208 model_updated authentik.events.signals {"model": {"pk": 3, "app": "authentik_core", "name": "Outpost authentik Embedded Outpost Service-Account", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/6/metrics/", "method": "GET"}} 192.168.48.1 2022-10-25 09:52:37.060707+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:52:37.059951+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -5a428128-25a6-4b0b-8228-1c965aca57f3 login_failed authentik.events.signals {"stage": {"pk": "f4abcb7d5f9248908760afb9effda665", "app": "authentik_stages_identification", "name": "ldap-identification-stage", "model_name": "identificationstage"}, "password": "********************", "username": "akadmin", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "POST"}} 192.168.48.1 2022-10-25 09:52:46.450704+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2023-10-25 09:52:46.444595+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -2fef73b5-98e6-4a7a-9b0d-ccd326d1dab6 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 192.168.48.1 2022-10-25 09:53:30.278414+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2023-10-25 09:53:30.271341+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -2a320fa4-0e4b-4350-88a9-0f3e2dafc249 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 192.168.48.1 2022-10-25 09:53:37.391263+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2023-10-25 09:53:37.387326+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -a8612adc-a554-41f0-8b4e-c097121e2e16 login_failed authentik.events.signals {"stage": {"pk": "f4abcb7d5f9248908760afb9effda665", "app": "authentik_stages_identification", "name": "ldap-identification-stage", "model_name": "identificationstage"}, "password": "********************", "username": "akadmin", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "POST"}} 192.168.48.1 2022-10-25 09:53:38.124841+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2023-10-25 09:53:38.120289+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -df28e1d0-db28-4303-9c1b-a1e2bd437de2 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 192.168.48.1 2022-10-25 09:53:47.045402+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2023-10-25 09:53:47.042514+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -16e97a17-7e98-4e87-849a-3db39705f612 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 192.168.48.1 2022-10-25 09:53:47.802321+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2023-10-25 09:53:47.798122+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -39515339-d523-4c5f-8209-97efccdd7e11 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 192.168.48.1 2022-10-25 09:54:00.215328+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2023-10-25 09:54:00.210145+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -1333efce-d2f6-4ef0-bd3a-3a0276df711b login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 192.168.48.1 2022-10-25 09:54:00.975468+00 {"pk": 5, "email": "authentik-admin@localhost", "username": "authentik-admin"} 2023-10-25 09:54:00.971761+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -7864022f-6f92-4812-8a3e-80da868b792f model_created authentik.events.signals {"model": {"pk": 7, "app": "authentik_core", "name": "authentik-viewer", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/", "method": "POST"}} 192.168.48.1 2022-10-25 09:56:58.989276+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:56:58.988641+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -b961fe98-2057-43e6-bba0-610c0bd2aba1 password_set authentik.events.signals {} 255.255.255.255 2022-10-25 09:57:07.656784+00 {"pk": 7, "email": "authentik-viewer@localhost", "username": "authentik-viewer"} 2023-10-25 09:57:07.656418+00 t {"pk": "669e359eaf174055957065109edc72a8", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -ecdd7e58-c10f-44dd-abe6-473b698b167e model_updated authentik.events.signals {"model": {"pk": 7, "app": "authentik_core", "name": "authentik-viewer", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/7/set_password/", "method": "POST"}} 192.168.48.1 2022-10-25 09:57:07.785245+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:57:07.784815+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -9d996d5c-3949-4a7c-a229-7572086943bb password_set authentik.events.signals {} 255.255.255.255 2022-10-25 09:57:13.548415+00 {"pk": 7, "email": "authentik-viewer@localhost", "username": "authentik-viewer"} 2023-10-25 09:57:13.548084+00 t {"pk": "124e241c825640d9b416596b2daab8b3", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -62ba45d9-5037-4b6d-ab3f-06a76e759f9e model_updated authentik.events.signals {"model": {"pk": 7, "app": "authentik_core", "name": "authentik-viewer", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/7/set_password/", "method": "POST"}} 192.168.48.1 2022-10-25 09:57:13.678156+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:57:13.677728+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -064c5c29-9b44-4887-88a6-7a921ba10c42 model_created authentik.events.signals {"model": {"pk": 8, "app": "authentik_core", "name": "authentik-editor", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/", "method": "POST"}} 192.168.48.1 2022-10-25 09:57:43.651383+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:57:43.650616+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -f9ea2089-5b8a-4701-95ab-eb29fc832fee password_set authentik.events.signals {} 255.255.255.255 2022-10-25 09:57:52.094392+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2023-10-25 09:57:52.094045+00 t {"pk": "669e359eaf174055957065109edc72a8", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -4403cff8-482b-4447-8548-37aeedbe027d model_updated authentik.events.signals {"model": {"pk": 8, "app": "authentik_core", "name": "authentik-editor", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/8/set_password/", "method": "POST"}} 192.168.48.1 2022-10-25 09:57:52.230146+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:57:52.229464+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -2094c1e2-a954-4cbf-b58f-e7221698b1a7 password_set authentik.events.signals {} 255.255.255.255 2022-10-25 09:57:54.385835+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2023-10-25 09:57:54.385364+00 t {"pk": "124e241c825640d9b416596b2daab8b3", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -ef60de42-c27f-46f3-9773-1c540f072ae0 model_updated authentik.events.signals {"model": {"pk": 8, "app": "authentik_core", "name": "authentik-editor", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/8/set_password/", "method": "POST"}} 192.168.48.1 2022-10-25 09:57:54.524086+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:57:54.523676+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -a8885c27-5608-4eb5-a0d1-1f19dea20bda model_created authentik.events.signals {"model": {"pk": "17bb354ecea248dbb3229f9c8b53b8bb", "app": "authentik_core", "name": "admin", "model_name": "group"}, "http_request": {"args": {}, "path": "/api/v3/core/groups/", "method": "POST"}} 192.168.48.1 2022-10-25 09:58:22.075895+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:58:22.075408+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -86d0a1ed-6d6b-4422-a4b5-6f60f9918b96 model_created authentik.events.signals {"model": {"pk": "7e216c1b2a0f4772ac3d7bdaf7511a2e", "app": "authentik_core", "name": "editor", "model_name": "group"}, "http_request": {"args": {}, "path": "/api/v3/core/groups/", "method": "POST"}} 192.168.48.1 2022-10-25 09:58:27.448906+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:58:27.44842+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -5f4a3eb8-6118-46f7-a066-26277ac65e15 model_created authentik.events.signals {"model": {"pk": "10d9a55e195b41a09fe663382d5b8208", "app": "authentik_core", "name": "viewer", "model_name": "group"}, "http_request": {"args": {}, "path": "/api/v3/core/groups/", "method": "POST"}} 192.168.48.1 2022-10-25 09:58:32.144204+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:58:32.143773+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -3454a52b-238c-4cb6-8db5-64c8303e339c model_updated authentik.events.signals {"model": {"pk": "17bb354ecea248dbb3229f9c8b53b8bb", "app": "authentik_core", "name": "admin", "model_name": "group"}, "http_request": {"args": {}, "path": "/api/v3/core/groups/17bb354e-cea2-48db-b322-9f9c8b53b8bb/", "method": "PUT"}} 192.168.48.1 2022-10-25 09:59:21.181345+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:59:21.180942+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -fdf81360-a8a8-4c8f-988d-2ed85c613a49 model_updated authentik.events.signals {"model": {"pk": "7e216c1b2a0f4772ac3d7bdaf7511a2e", "app": "authentik_core", "name": "editor", "model_name": "group"}, "http_request": {"args": {}, "path": "/api/v3/core/groups/7e216c1b-2a0f-4772-ac3d-7bdaf7511a2e/", "method": "PUT"}} 192.168.48.1 2022-10-25 09:59:30.4796+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:59:30.478673+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -a3998ed2-5beb-4a26-b395-f5b579d632ca model_updated authentik.events.signals {"model": {"pk": "10d9a55e195b41a09fe663382d5b8208", "app": "authentik_core", "name": "viewer", "model_name": "group"}, "http_request": {"args": {}, "path": "/api/v3/core/groups/10d9a55e-195b-41a0-9fe6-63382d5b8208/", "method": "PUT"}} 192.168.48.1 2022-10-25 09:59:42.963339+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2023-10-25 09:59:42.962914+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -2b3c7de7-f3cb-4e4d-bbcd-36ff4d1add8e login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "next=%2F"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.24.0.1 2023-01-02 14:16:55.819839+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 14:16:55.819267+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -eeb1be95-4ade-4812-93b0-2c87db29716c update_available authentik.admin.tasks {"message": "Changelog: https://goauthentik.io/docs/releases/2022.12#fixed-in-2022121", "new_version": "2022.12.1"} \N 2023-01-02 14:17:08.645256+00 {} 2024-01-02 14:17:08.643976+00 t {"pk": "3fe5e3c1df6f42e1a4a934178957c3b6", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -fa558ccb-705b-43b8-9a2e-86d4f1d8d0a0 system_task_exception authentik.events.monitored_tasks {"message": "Task notification_transport encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.10/site-packages/sentry_sdk/_compat.py\\", line 56, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.10/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/autoretry.py\\", line 54, in run\\n ret = task.retry(exc=exc, **retry_kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/task.py\\", line 717, in retry\\n raise_with_context(exc)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/autoretry.py\\", line 34, in run\\n return task._orig_run(*args, **kwargs)\\n File \\"/authentik/events/tasks.py\\", line 130, in notification_transport\\n raise exc\\n File \\"/authentik/events/tasks.py\\", line 126, in notification_transport\\n transport.send(notification)\\n File \\"/authentik/events/models.py\\", line 341, in send\\n return self.send_email(notification)\\n File \\"/authentik/events/models.py\\", line 463, in send_email\\n raise NotificationTransportError from exc\\nauthentik.events.models.NotificationTransportError: "} \N 2023-01-02 14:17:13.924879+00 {} 2024-01-02 14:17:13.924102+00 t {"pk": "3fe5e3c1df6f42e1a4a934178957c3b6", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -c1d32b85-3711-44c1-bd8b-918eba2599e2 system_task_exception authentik.events.monitored_tasks {"message": "Task notification_transport encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.10/site-packages/sentry_sdk/_compat.py\\", line 56, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.10/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/autoretry.py\\", line 54, in run\\n ret = task.retry(exc=exc, **retry_kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/task.py\\", line 717, in retry\\n raise_with_context(exc)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/autoretry.py\\", line 34, in run\\n return task._orig_run(*args, **kwargs)\\n File \\"/authentik/events/tasks.py\\", line 130, in notification_transport\\n raise exc\\n File \\"/authentik/events/tasks.py\\", line 126, in notification_transport\\n transport.send(notification)\\n File \\"/authentik/events/models.py\\", line 341, in send\\n return self.send_email(notification)\\n File \\"/authentik/events/models.py\\", line 463, in send_email\\n raise NotificationTransportError from exc\\nauthentik.events.models.NotificationTransportError: "} \N 2023-01-02 14:17:14.593626+00 {} 2024-01-02 14:17:14.592229+00 t {"pk": "3fe5e3c1df6f42e1a4a934178957c3b6", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -521e9674-7fa5-4d70-b266-9b8048b640b0 model_created authentik.events.signals {"model": {"pk": 2, "app": "authentik_providers_saml", "name": "grafana-saml", "model_name": "samlprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/saml/", "method": "POST"}} 172.24.0.1 2023-01-02 14:20:39.41267+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 14:20:39.41213+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -8a5a4f65-cbd8-4617-a52a-515f7e008164 model_created authentik.events.signals {"model": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}, "http_request": {"args": {}, "path": "/api/v3/core/applications/", "method": "POST"}} 172.24.0.1 2023-01-02 14:21:07.723593+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 14:21:07.722493+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -7ee95403-f95f-4a94-be59-0eb1210a3b55 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": ""}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 14:21:13.310418+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 14:21:13.30943+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -2e67f976-24c8-4f39-9fb8-160c8df5fc48 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": ""}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 14:21:43.965265+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 14:21:43.964033+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -a2a95f65-9f92-496e-b577-55c844b90891 model_updated authentik.events.signals {"model": {"pk": 2, "app": "authentik_providers_saml", "name": "grafana-saml", "model_name": "samlprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/saml/2/", "method": "PUT"}} 172.24.0.1 2023-01-02 14:22:28.185263+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 14:22:28.184795+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -95797e9f-e818-4f5d-9fdb-2d499833ae4c model_updated authentik.events.signals {"model": {"pk": 2, "app": "authentik_providers_saml", "name": "grafana-saml", "model_name": "samlprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/saml/2/", "method": "PUT"}} 172.24.0.1 2023-01-02 14:23:24.663957+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 14:23:24.663405+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -aa49c5e8-b508-4046-907e-cfdca67edf75 configuration_error authentik.providers.saml.views.sso {"message": "Failed to verify signature", "provider": {"pk": 2, "app": "authentik_providers_saml", "name": "grafana-saml", "model_name": "samlprovider"}} \N 2023-01-02 16:20:27.103437+00 {} 2024-01-02 16:20:27.102874+00 t {"pk": "69cc7a86348f4144973b0cbaaea44e3f", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} d0c607f5-b34e-4c87-bfe3-86b6af93bff8 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:32.449521+00 {} 2024-03-12 09:19:32.448974+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -9aac6d1c-02e9-4e51-b705-85a86f1919df system_task_exception authentik.events.monitored_tasks {"message": "Task notification_transport encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.10/site-packages/sentry_sdk/_compat.py\\", line 56, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.10/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/autoretry.py\\", line 54, in run\\n ret = task.retry(exc=exc, **retry_kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/task.py\\", line 717, in retry\\n raise_with_context(exc)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/autoretry.py\\", line 34, in run\\n return task._orig_run(*args, **kwargs)\\n File \\"/authentik/events/tasks.py\\", line 130, in notification_transport\\n raise exc\\n File \\"/authentik/events/tasks.py\\", line 126, in notification_transport\\n transport.send(notification)\\n File \\"/authentik/events/models.py\\", line 341, in send\\n return self.send_email(notification)\\n File \\"/authentik/events/models.py\\", line 463, in send_email\\n raise NotificationTransportError from exc\\nauthentik.events.models.NotificationTransportError: "} \N 2023-01-02 16:20:32.525925+00 {} 2024-01-02 16:20:32.524994+00 t {"pk": "3fe5e3c1df6f42e1a4a934178957c3b6", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -d93d9f43-d318-4f57-8fc5-58859aafd0a6 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": ""}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 16:20:39.35962+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:20:39.358773+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -9a1859e1-089a-46c9-a2a9-5ca91e1a14da model_updated authentik.events.signals {"model": {"pk": 2, "app": "authentik_providers_saml", "name": "grafana-saml", "model_name": "samlprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/saml/2/", "method": "PUT"}} 172.24.0.1 2023-01-02 16:21:00.718418+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:21:00.717578+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -58277880-d969-4e13-ba98-dfca29dc2815 model_updated authentik.events.signals {"model": {"pk": 2, "app": "authentik_providers_saml", "name": "grafana-saml", "model_name": "samlprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/saml/2/", "method": "PUT"}} 172.24.0.1 2023-01-02 16:21:20.595211+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:21:20.594713+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -9c9fc310-2115-4aee-a0f0-d91abc0dae03 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": ""}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 16:21:26.679637+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:21:26.67829+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -2f1ac464-0e79-47ea-b3df-bf70f90d22c7 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": ""}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 16:21:47.199639+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:21:47.198789+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -d4549f57-3afb-4e6f-8726-be968bbc902f model_updated authentik.events.signals {"model": {"pk": 2, "app": "authentik_providers_saml", "name": "grafana-saml", "model_name": "samlprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/saml/2/", "method": "PUT"}} 172.24.0.1 2023-01-02 16:22:24.896791+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:22:24.895837+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -8d6e7456-f3f6-4806-a1ae-286cd50c6e54 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": ""}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 16:22:37.062381+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:22:37.061613+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -7203b3e8-4475-498f-b837-5775a0501e86 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": ""}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 16:26:08.685203+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:26:08.684412+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -7384e1a4-157e-47dd-ad30-f0c4030a1b54 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBj9MwEIX%2FiuV76sRRmtbaRCpbISotUG0LB25TZ7q15NjBMwH236Nmi1QklANH2%2FPe53kzDwS9H8xm5Et4xu8jEotfvQ9krg%2BNHFMwEciRCdAjGbbmsPn4ZPQiN0CEiV0M8k4yzGuGFDna6KXYbRvpumxZl%2BeyrivbrWoN5akDrOtTpYuyWq3XS1utKnvSxVmKr5jIxdBIvcil2BGNuAvEELiROtdllhdZro%2FF0uiVKcpFWa%2B%2FSbFFYheAJ%2BWFeTBK%2BWjBXyKxWed5rmAYvLNTibq2oF4SnCFANh2Iojq50LnwohJ2LqFlJcXmT%2FOPMdDYYzpg%2BuEsfnl%2B%2BgenvHImO7Akxf6Wwrs33%2FnIbnAyH47Hfbb%2FfDjKdhqbmTJI4n1MPfC8yfXGddl5KjUY2PGrbGf%2B2SNDBwwP6g7V3tblE%2FS42%2B6jd%2Fb1P%2FCcIJDDwFJsvI8%2FHxMCYyM5jShV%2B4b8eynb3wEAAP%2F%2F&RelayState=MVFtczE2eEVENFo0amhyUEtoUFkySDJ5Wm5CRkRQWXJYaW42eTBMNTIyYkZNRENhS0Z8WkV6SHRydFZ6&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=Uds21tE5ZR3SmvxFqy9VrYyL8ujqShawaGcz0V77dayLPpeykS6JN36ZoTD4eHSPUqmHqvTziWpLC8O2IlbfANmm8%2F58AOWsxSaKjdqwlKgWeLSQUrqhDXLOdOfabzMXPFkcBg9jS7P%2FXRl4rGSyjS%2BCYTJdazdrM8w5JOBvO%2B%2B2NGfxbo1hcHbGprQTt7ScDsxt7WPcEE0GRVhEbOZAym%2Fp6ZwCGB%2FkxC%2BGN68hdbXKD%2B51X0SIdF8Apy%2BYw4nshrIqteXb6jcoTwfNQdNY25wnuJ3J4LXaE5ZqajjjIIfPFYjBsnRFuzFUed3372rahiX5ax0SWp7Fj3uxyG6%2FQil9MYSvCX1Kw0rQf5zKP%2FFohivJ3vtbgHsVa6mqgWPR%2BFyiX5xZbDi4DaHGof%2F7NM5f9g3CgcaQr5v8%2BK8eHn%2Fl1EjDlJSDr2BSJ3NX68581527VAcWZ2OjXRIeodh5DKBrQ9F9%2BTW4AEuTlRBPUWdL15209HG6MDcN5p6M0OgYh%2B6STW5FY0aqgSFBjxjXAGk%2BlKQTq%2BrpJnLQXxgJlby3%2BYkyO92Ick34NsxoaDr5ySYYtM6M%2FuZP9443t8B9xun407wdaja3CNWP8iXuM2%2FhS1JCDud%2Fb8oCq14l0sITUqUK4R%2BCEd7odJDUuSNdDjHiM%2BEW1mf3MyuB68M1dhE%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 16:28:13.791097+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:28:13.789745+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -b4315108-6c82-4ff3-aeea-56a31d071961 model_updated authentik.events.signals {"model": {"pk": 2, "app": "authentik_providers_saml", "name": "grafana-saml", "model_name": "samlprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/saml/2/", "method": "PUT"}} 172.24.0.1 2023-01-02 16:30:58.798901+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:30:58.797248+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -439439e2-e8e7-4af6-b3ef-e563b36f674a model_created authentik.events.signals {"model": {"pk": "ca14281ce0254691b5a23ee415920e80", "app": "authentik_core", "name": "extra-group", "model_name": "group"}, "http_request": {"args": {}, "path": "/api/v3/core/groups/", "method": "POST"}} 172.24.0.1 2023-01-02 16:33:50.270344+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:33:50.269707+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -c5efd86a-6999-4a7b-8fd9-305b26d96bc6 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "next=%2Fapplication%2Fsaml%2Fgrafana-saml%2Fsso%2Fbinding%2Fredirect%2F%3FSAMLRequest%3DnJJBb9swDIX%252FiqC7I1t2U0%252BoDWQNhgXotqDJdtiNlelGgCx5Ir2t%252F36ImwEZMPjQoyS%252B94mPvCMY%252FGg2E5%252FCI%252F6YkFj8Hnwgc35o5JSCiUCOTIABybA1h82nB6NXuQEiTOxikFeScVkzpsjRRi%252FFbttI12VY6luLsF5bjbaobxHqQvc3T1VVV7qsir4rboq%252BRim%252BYSIXQyP1KpdiRzThLhBD4EbqXJdZXmS5PhZrU9am0Kt19V2KLRK7ADwLT8yjUcpHC%252F4Uic27PM8VjKN3di5R5w7Uc4IeAmTzgSiqJxc6F55Vws4ltKyk2Pzt%252FT4GmgZMB0w%252FncWvjw%252F%252F4ZRnzmwHlqTYX0J4%252F%252Bq7nNgFTubj8bjP9l8OR9nOUzNzBEl8iGkAXjY537gu6%252BdSg4Edv8h24Z8DMnTAcKeuUO1lWz7DgLvtPnpnX96A5wSBHAaWYuN9%252FHWfEBgbyWlCqdpX5L872f4JAAD%252F%252Fw%253D%253D%26RelayState%3DR3cwMXZJMU9xZUVaY1RZVmxVMDkwVk1DSEVkQzYzR2hBU3NNUHNkVlZxSEt1SDdrUDJ8Z2pPbHA5cFZ6%26SigAlg%3Dhttp%253A%252F%252Fwww.w3.org%252F2001%252F04%252Fxmldsig-more%2523rsa-sha256%26Signature%3DBX5F2GCFaeadEWb17AxG2mVisyVfBGrNRczpBwqe0TwTQZKySlVpaED8Vqak2hSyOC9HdKSkRmYGBJqrKPImbGzdeptgxXqlr8usnoBmxy1UF8GKrOM2ptPOqMsXargtigpS7mLatQN1spTkxyDUnfQfCknvH%252BgjQymkGDjtMtOQLEP2y3webPtuBiwv43Wl4YzojxSXALALITtANMgCqdsE8omJ%252FtuZZG2iu31j%252BJk3OTDWhZn6QBNNrV%252FMEPZOVD5CpnxagNhPC4J74rmWP2JA6Yu%252BcqFaCBTlty0do7D%252FQVvdzjHgrnAaosxltAtUkDWS47%252Fo1Ed9Jp2jTzsLzOh2%252F2EXZB7UrPIiQL28THjChuMv9ohoVrwHi6Z77SSJzJJYQmUKPC6IUg4PeoUY%252FpghlrtqxTDeghePUcLuMTusLu4wf%252BdMEvhwi20Eaz6ABr7F0TYAxnKfdEwsG%252FEIkBHa109%252Fv3YqDKKbKUuJKyUeu%252F%252Bo9YwbZG5eRDqKoBoNRbAyDOBVqXMgkTNUEhs5qtLDbOlgcim%252F5Tum5usf921zEn0Z01vGTO2bjrjdRbdJiAfAPhOj%252F69n7rJn%252FklU8NtXdiNHYZn0MLAdOKpBChjnfjehCp08n%252BG4ZcCXMe62gnD2Art0HJf30z2N76vJsoyrXMypc%252BN6WpUQSpsgb6w%253D"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.24.0.1 2023-01-02 16:38:22.087813+00 {"pk": 5, "email": "authentik-admin@localhost", "username": "authentik-admin"} 2024-01-02 16:38:22.087203+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -0ffd3d0e-31f3-4b55-bdf7-d00160afcfdc authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBb9swDIX%2FiqC7I1t2U0%2BoDWQNhgXotqDJdtiNlelGgCx5Ir2t%2F36ImwEZMPjQoyS%2B94mPvCMY%2FGg2E5%2FCI%2F6YkFj8Hnwgc35o5JSCiUCOTIABybA1h82nB6NXuQEiTOxikFeScVkzpsjRRi%2FFbttI12VY6luLsF5bjbaobxHqQvc3T1VVV7qsir4rboq%2BRim%2BYSIXQyP1KpdiRzThLhBD4EbqXJdZXmS5PhZrU9am0Kt19V2KLRK7ADwLT8yjUcpHC%2F4Uic27PM8VjKN3di5R5w7Uc4IeAmTzgSiqJxc6F55Vws4ltKyk2Pzt%2FT4GmgZMB0w%2FncWvjw%2F%2F4ZRnzmwHlqTYX0J4%2F%2Bq7nNgFTubj8bjP9l8OR9nOUzNzBEl8iGkAXjY537gu6%2BdSg4Edv8h24Z8DMnTAcKeuUO1lWz7DgLvtPnpnX96A5wSBHAaWYuN9%2FHWfEBgbyWlCqdpX5L872f4JAAD%2F%2Fw%3D%3D&RelayState=R3cwMXZJMU9xZUVaY1RZVmxVMDkwVk1DSEVkQzYzR2hBU3NNUHNkVlZxSEt1SDdrUDJ8Z2pPbHA5cFZ6&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=BX5F2GCFaeadEWb17AxG2mVisyVfBGrNRczpBwqe0TwTQZKySlVpaED8Vqak2hSyOC9HdKSkRmYGBJqrKPImbGzdeptgxXqlr8usnoBmxy1UF8GKrOM2ptPOqMsXargtigpS7mLatQN1spTkxyDUnfQfCknvH%2BgjQymkGDjtMtOQLEP2y3webPtuBiwv43Wl4YzojxSXALALITtANMgCqdsE8omJ%2FtuZZG2iu31j%2BJk3OTDWhZn6QBNNrV%2FMEPZOVD5CpnxagNhPC4J74rmWP2JA6Yu%2BcqFaCBTlty0do7D%2FQVvdzjHgrnAaosxltAtUkDWS47%2Fo1Ed9Jp2jTzsLzOh2%2F2EXZB7UrPIiQL28THjChuMv9ohoVrwHi6Z77SSJzJJYQmUKPC6IUg4PeoUY%2FpghlrtqxTDeghePUcLuMTusLu4wf%2BdMEvhwi20Eaz6ABr7F0TYAxnKfdEwsG%2FEIkBHa109%2Fv3YqDKKbKUuJKyUeu%2F%2Bo9YwbZG5eRDqKoBoNRbAyDOBVqXMgkTNUEhs5qtLDbOlgcim%2F5Tum5usf921zEn0Z01vGTO2bjrjdRbdJiAfAPhOj%2F69n7rJn%2FklU8NtXdiNHYZn0MLAdOKpBChjnfjehCp08n%2BG4ZcCXMe62gnD2Art0HJf30z2N76vJsoyrXMypc%2BN6WpUQSpsgb6w%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 16:38:22.508665+00 {"pk": 5, "email": "authentik-admin@localhost", "username": "authentik-admin"} 2024-01-02 16:38:22.508022+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -025e97e0-ee2c-4178-a410-2b832340a35a authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": ""}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 16:40:38.094961+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:40:38.094424+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -8cdc9b41-47bb-440b-9ce8-3fa9d7c81800 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBj9MwEIX%2FSuR7ajvpJsTaRCpbISotUG0LB25TZ7q15NjBMwH236Nmi1Qk1MMebc97n%2BfN3BMMfjSriU%2FhCX9MSJz9Hnwgc35oxZSCiUCOTIABybA1u9WnR1MslAEiTOxiEFeS8bZmTJGjjV5km3UrXJ%2Frpa5RN1Dp4nBodF%2FZEnVT9XWpbH1X3tW2Pmo8vBPZN0zkYmhFsVAi2xBNuAnEELgVhSrKXOlcFXtdmWVl1HJRNvq7yNZI7ALwrDwxj0ZKHy34UyQ2jVJKwjh6Z%2BcSeW5BPic4QoB8PhBFeXChd%2BFZJuxdQstSZKu%2FzT%2FEQNOAaYfpp7P49enxP5zyzJntwJLItpcU3r%2F63o7sAifzcb%2Ff5tsvu73o5rGZOYOUfYhpAL5tcr5xfX6cSw0Gdvwiuhv%2FHJChB4Z7eYXqLuvyGQbcrLfRO%2FvyBjwnCOQwsMhW3sdfDwmBsRWcJhSye0X%2Bu5TdnwAAAP%2F%2F&RelayState=VVk1bmU0UDk4clBnUnNOVk5PNFBzV3hQamFHUVgxdEszS094WUN3SEZtWnlLczg0VXV8U2F5SGhydFZ6&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=mW4CQva3Vem85Dq5yo%2BBclqHaloTreonGr4VCel4SvbiRfF5jgQDGEcxn7kcxDw8JZym8iquo7Ivx%2BM%2FuciSTWOMp2n%2FTzbkkR7QxSfYjBLUXTsoh0JBZvh2fVsJMr10rYaW%2Frig8mGmP697eEhRyma9t5HJnu6mkvE%2Biszr3qQmv85nX%2B9Ac6IBOQOsiSheeKqdZm3Yj3gb3IGZjJ5Y8xmGZSmQ%2BLbiB7AerHM8KNUqysRBoyDBcG5YTtTNao4ImNBkCxh0a45Geur3y0LwEmt0lQkY2YJzW4Uh%2B3dKCK2yRqnTZfEK7nvH37Ue0uc1Fx9zH6hjgijSqWfYAYEJWf%2B4sM%2BhMZ8tHV93bLzzaPXH%2FfhAYyo%2FMREW2AKlIYElK6dQA68wblp%2FxYXm%2BXgJoYs%2FHQqPrQLU%2BE2Bd5Me5xvUIfD2KBR3Lx9GsY8%2F0n21HTajAgxga3NuscTGlP9Is%2FLdOxfu9IY3d77ecSTTUWgkcR%2BRyEo1ApUGLWZrAp5WK1IWMbfBf0hhPmQCccjgjN%2B8kDgAE9ETst36804uotZH6VY4iuTJhdnX4EPcFl848E6BwnrnlP%2FyJ16Qb7nQGWn2zGVGFTncEtwH%2FaUb1LKp6yTuMSuSQRcqzNyFuvJDBvmWiGTbGzlt9VCbwtIVTInSI3NLin%2BMErSktt5AFVg%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 16:46:04.805431+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:46:04.80479+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} efb6497b-cd83-4e42-a2da-9ea634020d29 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:18:52.857773+00 {} 2024-03-12 09:18:52.85257+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} f2345f3c-50f4-445f-b1f1-fd3cdfc1e548 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:18:55.67402+00 {} 2024-03-12 09:18:55.673476+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} 1da692a0-5369-49b1-918d-397a8fb4f6c7 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:18:59.93416+00 {} 2024-03-12 09:18:59.933726+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} @@ -2906,6 +3076,7 @@ c70a59e5-58b6-4a28-b1e8-ed6d4496c16c login authentik.events.signals {"auth_metho 0811b173-1a28-4ffc-8805-f25b7b32566e system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:02:00.03614+00 {} 2024-03-12 10:02:00.035596+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} 2c333a98-104b-4069-99f8-3995f8e276fe system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:07:00.057378+00 {} 2024-03-12 10:07:00.056377+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} 95d26a20-b12f-45c3-9ea6-937eefbf4c8a system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:12:00.043399+00 {} 2024-03-12 10:12:00.042488+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +c9a70db7-55e2-4bec-99c7-fad51b4cbefb login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"next": "/if/admin/#/crypto/certificates"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}, "auth_method_args": {}} 172.20.0.1 2024-01-11 22:06:44.865953+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2025-01-10 22:06:44.865331+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 509eaab6-93c5-402d-bcac-2236f3abed19 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:17:00.031189+00 {} 2024-03-12 10:17:00.030686+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} c00c8441-beb6-4486-94fb-1e908df60050 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:22:00.032774+00 {} 2024-03-12 10:22:00.032273+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} c3738939-74b3-46a0-9599-e5675a21fddf system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:27:00.033048+00 {} 2024-03-12 10:27:00.032527+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} @@ -2921,12 +3092,15 @@ f581e71a-734f-4d1c-9632-e7de00452063 system_exception authentik.root.celery {"me b9f9a80a-54c0-4e99-b1b3-dbdb61a8a8e1 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 10:55:02.921301+00 {} 2024-03-12 10:55:02.920999+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} 4306c39d-89fc-439d-afa7-92e599477417 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 10:55:10.307515+00 {} 2024-03-12 10:55:10.30681+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} 843f8709-4e62-41b8-a98b-213645931ca1 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:57:00.032694+00 {} 2024-03-12 10:57:00.031958+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +cf434072-8f63-4112-acae-f8bb01a43709 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:15:42.997603+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:15:42.993087+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 62899e67-5886-49ee-88a7-8c664e2f746d system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:02:00.034669+00 {} 2024-03-12 11:02:00.034074+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} 387c9985-3baf-4cd2-ad89-a64642510aaf system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:07:00.025306+00 {} 2024-03-12 11:07:00.024832+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} 4f3a4faf-c73b-40ab-9d4c-27a91a60fd69 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:12:00.037904+00 {} 2024-03-12 11:12:00.037441+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} d1014f1d-f907-4ed8-bb64-50fece7cc94b authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBb9swDIX%2FiqC7I9lu40aoDWQNhgXotqDJdtiNkZhGgCx5Ir2t%2F36ImwEdMPiwoyS%2B94mPvCfow2DWI5%2FjE34fkVj86kMkc3lo5ZijSUCeTIQeybA1%2B%2FXHR1MttAEizOxTlG8kw7xmyImTTUGK7aaV3hUrfTy6m2bpdLVcVWWDDdjbu5uycqfG4hJq3cDtCWspvmImn2Irq4WWYks04jYSQ%2BRWVrqqC10XZX0oK1PeGV0uVk39TYoNEvsIPCnPzINRKiQL4ZyIzUprrWAYgrdTibq0oJ4znCBCMR2Ikjr66Hx8Vhmdz2hZSbH%2B0%2FxDijT2mPeYf3iLX54e%2F8GpL5zJDixJsbum8O7Vdz6yK5zMh8NhV%2Bw%2B7w%2Bym8ZmpgyyeJ9yDzxvcrnxrjhNpQYje36R3cw%2Fe2RwwHCv3qC667p8gh63m10K3r78B54zRPIYWYp1COnnQ0ZgbCXnEaXqXpF%2FL2X3OwAA%2F%2F8%3D&RelayState=YWRYcTJyV01iNlVkY2R2VWZnVFpHRkVJNlNlM0lIYzM3bmVqWjJwTVd6dWtab2QwYzd8Y2VlMzM1M2Mt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=lUlHgH7IwMv%2F04xulllUtloFIwLWu2r%2FuyoXy4FHZ68ofaEEWzof2L7vMBv8aI3QQ91jI6eeQUjIBLO0HqaSUpadpp8ap%2Bm4cOsilBImRjoOIqpLsukzdBm4S7u1tjO5OqmeQaJmdZuBfwAWemiBEKp0DW1VCHsEDV9th%2BK%2BrptQAhVb8gfVmqRsYY13NZav0ZQOEHu7thDoDfVwQ1l6e6htxcpUFMfQvIB%2BQfB1aA5AAocVylIW1f%2B%2BtMNArDGW4VFAUpBga6lafl6cdSNhxRjPvVEdwAkLK%2BlKvhirGCM44R7ayQBTTIlrdfDaFKl3BEY8XuAnV2eQT6xSERBDyVpunPrZObQqFIp93%2Bm8vovmq8A6xNBHzkmwG%2BWPR4SoVoxIygRogkLuSxi%2B3RtXvRna7vs89sLyZgcIzDLAe6xMt%2FYHphlCvpM3yv83VqmQtPVhFKqQmqaeeJEGtB7JE5P4HK0fPReRXY65zFUeDDYpPrRbUjerI6YJogJqasG9UdZC%2BJXTW%2BAx3eNIpteqehGRXJP9FAbXUVgACS2%2FEUUJy%2FmgxkVHpK%2FUotX0DL50oHCmt0XCFMpWCUZMCXwMFXHEuO%2F%2BpSUqPOkVhX%2Bz3iWKCnUpHgF73UAbjUtgfXpA%2FGo4N3MyoDX1sNbQqPLai5iCZTRwdObBgsgQn%2FXPegw%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:18:02.192895+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:18:02.192123+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 2bb35f8d-322c-4193-b09d-32aafac220b7 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:17:00.043594+00 {} 2024-03-12 11:17:00.043125+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} 076a18d6-6d9b-4524-b619-cc4a0a6b5f94 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:22:00.029942+00 {} 2024-03-12 11:22:00.029491+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +05424407-2396-4a74-86e4-6b6833846bcf login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:16:00.769208+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:16:00.765898+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +51e69755-68bd-42de-817c-bd744ea221df login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:16:25.296145+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:16:25.291452+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 93da91ee-16b7-4bd8-b05f-ed07b6f9e8b6 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:27:00.027139+00 {} 2024-03-12 11:27:00.026677+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} ad4eb94d-1d1b-4e70-b8dc-9f60371a3076 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:32:00.028541+00 {} 2024-03-12 11:32:00.028065+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} eb523ba5-1b16-45bb-8ae8-7a40eb463c30 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:37:00.048995+00 {} 2024-03-12 11:37:00.048385+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} @@ -2944,11 +3118,9 @@ cef79b5a-c90c-4d64-b140-c9a302f31a8e system_task_exception authentik.events.moni 39052e69-2537-41c7-9709-8170094bb2f0 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJPj9MwEMW%2FiuV7asdR%2F1mbSGUrRKUFqm3hwG3WmWwtOXbwTID99ijZIi0S6oGj7Xnv53kzdwR9GOxu5Et8xO8jEotffYhkp4dajjnaBOTJRuiRLDt72n18sGahLRBhZp%2BifCMZbmuGnDi5FKQ47Gvp26JbbzfVGio0K72BrTGlgW6jn1bGadDLzpW47tp2JcVXzORTrKVZaCkORCMeIjFErqXRpip0VZTVuTS23NjSLJbb5Tcp9kjsI%2FCsvDAPVqmQHIRLIrZbrbWCYQjezSVqakE9Z%2BggQjEfiJJ68rH18VllbH1Gx0qK3Z%2Fm71Okscd8wvzDO%2Fzy%2BPAPTjVxZjtwJMXxmsK7V9%2FbkV3hZD%2Bcz8fi%2BPl0ls08NjtnkMX7lHvg2ybTzZT2XGoxsucX2dz4Z48MLTDcqTeo5roun6DHw%2F6Ygncv%2F4HnDJE8RpZiF0L6eZ8RGGvJeUSpmlfk30vZ%2FA4AAP%2F%2F&RelayState=NzhJeXNnVnNZZDZKRDd3Q3BLVmFJa3hSaXRtOTlFdjJ2ZE8xaDQ0VlE4OVhlMGVjVE98YThlZWJkMDgt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=puFkhzy3Z5ac%2F1r3XdkaI0iEal2x1%2F0VLcr70BnL2IzjKUZifOxWx5laZoeWQnLdh1kKv1Nwnn32R53gOQkY4ofvAN81RaOB6vuJLTupOqA8XVkv2B%2Fs%2BwpfZrYgpUbxMVVJCzasr15e5%2FLd8uvDbdL6EBKJuVqhKfEP1T%2FH%2Bgnjc8WnW6yPJpAzQa3VuciZCBxkyq7SWfZabfADGwrF7PYzUniCOzXco%2FCHPuqgoPi5DNg32g4UxkgZmgCum%2B16Hf0hcT3eHUFuCkn5CA4PnnmWeDJeWiy%2B8yiYthZcfZAsZ1d0ngr58nmn9%2B3pbq5ICAC6ebpQci5NuY1nH4h%2FabMCJQsS1RDlkVpQdfWImyY3KcrgXavDKmqlWZ66dPGOP94LiFrB6hvGCrgPujvxnMUF3q54I9m2DGI9n5NA9Tx6rvClljP35bjMHV16H%2BzKsmPdInvmXtSJCf1OQC4GHAnGXsHTKLOCXqEQGFcb%2BwXVMGCCpXcguc4pWxd4wgMhc18bTANKN5%2FzlXGFWQyHLFMwC5iIuJFll4DKGC0gZTlixuGPjyiBEkCWtIIq8CZkSvKp6Dcx1CdC8gsZhJUxWxVws8IgfrL2TpL9AHlWOjZEWPYA8GiZF%2B9Cuyt%2F%2BZZCxoHl2ISx1CMR46pXirmSKWU3sAB3qDXHuv%2FaXxIt5tc%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:18:12.851482+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:18:12.85073+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 0f288bb0-3131-4b6b-bd13-781b1fc8f7f1 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:07:00.029026+00 {} 2024-03-12 12:07:00.028562+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} cea6cb21-9afe-4f32-9daa-5f5e65bc6d8c system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:12:00.033447+00 {} 2024-03-12 12:12:00.032956+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} -cf434072-8f63-4112-acae-f8bb01a43709 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:15:42.997603+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:15:42.993087+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -05424407-2396-4a74-86e4-6b6833846bcf login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:16:00.769208+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:16:00.765898+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} -51e69755-68bd-42de-817c-bd744ea221df login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:16:25.296145+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:16:25.291452+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 5c20ff33-9685-41f9-a1a2-db46d9e4f5d9 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBb9swDIX%2FiqC7K0V201ioDWQNhgXotqDJdtiNkZlGgCx5Ir2t%2F36wmwEdMOSwoyS%2B94mPvCfow2DXI5%2FjE34fkVj86kMkOz00cszRJiBPNkKPZNnZ%2FfrjozU32gIRZvYpyjeS4bpmyImTS0GK7aaRvitOZVXWxxpcZW67FTiHtTtWGmpcLQ3cGaPvXF2fllJ8xUw%2BxUaaGy3FlmjEbSSGyI002pSFLotFeVgYu1ja6vZmVa2%2BSbFBYh%2BBZ%2BWZebBKheQgnBOxrbXWCoYheDeXqKkF9ZzhBBGK%2BUCU1NHHzsdnlbHzGR0rKdZ%2Fmn9IkcYe8x7zD%2B%2Fwy9PjPzjlxJntwJEUu0sK7159r0d2gZP9cDjsit3n%2FUG289jsnEEW71Puga%2BbTDdT2nOpxcieX2R75Z89MnTAcK%2FeoNrLunyCHrebXQrevfwHnjNE8hhZinUI6edDRmBsJOcRpWpfkX8vZfs7AAD%2F%2Fw%3D%3D&RelayState=VElyVjNaN2pnbDRVd1RWM29FM2x5MVZuVlBkY2N0WXBoZ01ET2Z4d2RKU2dOUE10ZFF8YmFjMjQzNDIt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=b5zxgS%2FAfwENvPrKFQIwHF04kGrruQL8VG3I15mtw7IOTkKWg%2BBZ6MuhG7C%2Bc4XNQfqTNtYwHNCr8FFd3STN1%2BsLv7NaBdcHjA%2BPAOZWrZc%2BsqB%2FFBpH6rWmB667UNcC9sTtlX1XS9O5vAJ%2Fln3Hb3pgV5r%2FEXcyrC1KSTiLSz6Xt6fqqopH6P7b%2FBOcAiWqvpt4J10UxXsC3huufmdg0MSGJO4ROun5dyL2NjxgASre4q9B2ka4pN3QaFdv5LOV9ptCd6EU5WJkc8rGVkvpGm2OdlrdxJi0jJy951%2FomKNGzfuR%2Bv6gWONM7aUoYUJbTKBibdC65EFVoNX%2BFnZIli9%2FK2zr00IoLqsyWkVpqZi4ziSevs%2F7XK4Hx4bFQ39E94Cs79uc6Mv1xDYa3Vf4grFkK99UUGoPBPgVrHOCRDt7SGw66ugSMktBFr7XPzJiTz%2B9Ue%2Fv4spp9J%2BuyQc1bdVFcgXIfBXwfomYvr%2BtPvc8gsIZJq2DFABStFX7OuaJOe5nKqhQuvfGMUlpFEePSOlTv2FhkH2ANMX0W%2B30pZjiOA1B7wthS6FrGJ9S6DVxqzvmfCzHFtMYPzOkLnE2hTNTjVIv%2FF5%2Bcsh8a4KT9o7KRAhXHbnrbyKA%2F1CKKJS%2FJfml7dG8eUOnGLg5BlQfTr4OS8DxxyHtFLykHPvfSQI%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:16:46.200868+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-03-12 12:16:46.200309+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} bc3357f2-1df7-47bd-8fa2-e853e44df893 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBb9swDIX%2FiqC7I1v2mkaoDWQNhgXotqDJdtiNkZhGgCx5Ir2t%2F36ImwEdMPjQoyS%2B94mPvCPow2DWI5%2FjI%2F4YkVj87kMkc3lo5ZijSUCeTIQeybA1%2B%2FWnB6MXpQEizOxTlK8kw7xmyImTTUGK7aaV3hUNNEtcHt%2FBaalRQ31cVo11VVNXK32ra8TjyTl7C1J8w0w%2BxVbqRSnFlmjEbSSGyK3Upa6Lsi6q%2BlBpU92YZrW4KevvUmyQ2EfgSXlmHoxSIVkI50RsVmVZKhiG4O1Uoi4tqKcMJ4hQTAeipI4%2BOh%2BfVEbnM1pWUqz%2FNn%2BfIo095j3mn97i18eH%2F3DqC2eyA0tS7K4pvH%2FxnY%2FsCifz8XDYFbsv%2B4PsprGZKYMsPqTcA8%2BbXG68K05TqcHInp9lN%2FPPHhkcMNypV6juui6focftZpeCt89vwHOGSB4jS7EOIf26zwiMreQ8olTdC%2FLfpez%2BBAAA%2F%2F8%3D&RelayState=VDBZcDVuczVpbVhzTlFMaXg0Y2k5UUk1b1N0M05LQ1YwaHVhcXlrZVJHdDBITTluOUR8ZDMxZDgxNzIt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=wUqtpzGasm1xm0%2B21lZLUOer33uK6YPH6MphpRPlGp8veCavKzKyr%2Fk%2BC9%2Fy6YqUScqYLmFd8joiRTWq1l0rZ1o6olA8Hq1%2FTyTx6OzuzbVV9qPd6hCIqfNFgNhfSjFLXolj079hkVqzs43nILWLyUb%2FH7bfLDu6yGPqndwpuvnZiRR4R3gYtkkTKsDvA%2B2BqskaLiW%2B%2FbMVaunroA0feuPWYlS6sO9gEwN%2BmNd2y8Ny9YmTBh8D8kwUrjasqsj7VwUQvA%2FPBxHrVY1qE%2B%2Bc2a0X0JOm4eBOvrAbuUGC58vZykC%2Fo7ub%2B2iaEsuPZow9vvJdYKzXUZSrYbRIdDBNOmkBpmA4QllPjV1vEdgDCNrGWmUPU7fB4xtLyoc2X0%2Bx010L1t9Z2QuLm3lQm8pK11oBzsiMcfzXBEbdZg%2BkPTQFL2szutYG3f2V4QmSUjQhDuphAKs99%2FUunI57Qn5rrck5cBmM0J97xWzNPzceIO0uamESgaBiteqw2ywBYgxpD0vTfc7VonPXpymR6z%2BjA0UPgslrQgqZxjAdHdPACdYKdHLfFIsRLAtyzHY%2FFkh5z6lmEqT9%2BGENv%2FGph%2FRxshU3Fhj4VQaT%2FHbkz6BOug2HUAbt8WiCgp4bwd8qSYAQLKSxXButM%2BLMofSt7GHhgdW2xMGurtNGqUhjX2jDFUo%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:16:49.912109+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-03-12 12:16:49.911609+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +2fe33328-90f8-4505-917b-5a6ba069ef79 model_updated authentik.events.middleware {"model": {"pk": 1, "app": "authentik_core", "name": "authentik Default Admin", "model_name": "user"}, "http_request": {"args": {"next": "/if/admin/#/crypto/certificates"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 172.20.0.1 2024-01-11 22:06:44.879979+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2025-01-10 22:06:44.879476+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} a6bcd075-2241-45f4-93c3-ba4b69af2918 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:17:00.03235+00 {} 2024-03-12 12:17:00.031758+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} 85b9d791-85e5-4c24-8c4d-36583538b4fa login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:17:03.682721+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:17:03.67834+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 2597fa7f-1be7-4636-9165-04f0b2dd813b login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "next=%2Fapplication%2Fsaml%2Fgrafana-saml%2Fsso%2Fbinding%2Fredirect%2F%3FSAMLRequest%3DnJJBj9MwEIX%252FiuV7aidhCbE2kcpWiEoLVNvCgds0mWwtOePgmQD771GzRVok1MMebc97n%252BfN3DKMYXLrWU70gD9mZFG%252Fx0Dszg%252BNnhO5COzZEYzITjq3X3%252B6d8XKOmDGJD6SfiGZrmumFCV2MWi13TTa95mtclu%252BHfI%252BH4ayACxsVeRV%252FabEfKhtfQMW62N%252FBK2%252BYWIfqdHFymq1ZZ5xSyxA0ujCFmVmyywvD3nh8srZavWuvPmu1QZZPIEsypPI5IwJsYNwiiyuttYamKbgu6XEnFswjwkGIMiWA3M0R0%252B9p0eTsPcJOzFarf82fxeJ5xHTHtNP3%252BHXh%252Fv%252FcMozZ7GDjrXaXVJ4%252F%252Bx7PbILnN3Hw2GX7b7sD7pdxuaWDJL6ENMIct3kfOP7bFhKHZJ4edLtlX%252BOKNCDwK15gWov6%252FIZRtxudjH47ukVeElA7JFEq3UI8dddQhBstKQZtWmfkf8uZfsnAAD%252F%252Fw%253D%253D%26RelayState%3DM01VdDk4TzhnSWtVMjBDTnlWb2FZZ05GOWZjUmxSNU41Sk1UbXdVcUxHcmM1dmJac2t8YWI3YjFjYTYt%26SigAlg%3Dhttp%253A%252F%252Fwww.w3.org%252F2001%252F04%252Fxmldsig-more%2523rsa-sha256%26Signature%3DW1uiWN6vvpGfU5nA49tvVbhWp71UjMbe%252Bsao3uLOeCYRCdJAxe22GIdpdViY8iuKSWISmNRMIDp3oWlTmbg5leMgWtO1wJxdk4AxnH8dLcMBhpNhhr8VD3QvQsJZfEMPBeWDa4IeFhfn%252FCL7gBKFHi5%252BNfzZuFUESyGQ0ZhRezPyff9pSPaZacYe%252FlAB%252FFQcejoGxBBohsbeVd5OMwYy0UVPmcgIWvp72%252FYYdMY5NEpre5tbQ9KQY1TlzMHKZAbVqfdPODKxobEXYuZBtEjrRzTJJP9iEpj4XXNEezg8vYOsAeex8Iagke2pSOa%252Bg741XW6HmEWDYNF3lksMd7f7lOP8b6MbcVeVUgZcF7s5XcSPYLuTelEruz%252BJgBGbtquqmUMidbeWAfvF4oiYcPnjncwToTSRa0EE1c%252BLxJaVwBAfDOYTRkYXb7BAg19tHQ8eMpG6JaQqdWY0OSabb2%252FGObiY9SMCjqgHFVYesRm9hn5Sv5nofAjjSxnQf69WiPCNTENznRZ%252BCYezWfEkXeYvh2Qk830%252BA24FHHRUZ4mvjlWwd9fFGuxcIy88LVkFfo5MmR%252FzrXZuPOLY5hRsBo9bHTbxxmYIW9HV8Q3UxO%252BuWnvYzhF3luBdePoxi%252B%252FDy%252B%252BrVaG1VfVUx89qVwgNcksp8C8FtkXO88t%252F1sIp8Hu0I3w%253D"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:17:27.490802+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:17:27.490352+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} @@ -2963,6 +3135,7 @@ ec35d60f-97e1-4eed-b11c-12e5388aabb9 system_task_exception authentik.events.moni 53020bf2-b2f1-4a00-8106-f068bfd43302 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBbxMxEIX%2FiuX7xo69AWp1VwqNEJEKRE3gwG3inTSWvPbimQX671G2QSoS2kOPtue9z%2FNmbgn6OLj1yOf0gD9GJBa%2F%2B5jIXR4aOZbkMlAgl6BHcuzdfv3p3pmFdkCEhUNO8oVkmNcMJXP2OUqx3TQydJXuTvZtZ9HbI5qVwdU7U4O2Gur6ja6N8X5p9MkfpfiGhUJOjTQLLcWWaMRtIobEjTTa2ErbamkPS%2BOMcfVysTI336XYIHFIwJPyzDw4pWL2EM%2BZ2N1orRUMQwx%2BKlGXFtRjgRMkqKYDUVbHkLqQHlXBLhT0rKRY%2F23%2BLicaeyx7LD%2BDx68P9%2F%2Fh2AtnsgNPUuyuKbx%2F9p2P7Aon9%2FFw2FW7L%2FuDbKexuSmDIj7k0gPPm1xuQledplKHiQM%2FyXbmnz0ydMBwq16g2uu6fIYet5tdjsE%2FvQLPBRIFTCzFOsb8664gMDaSy4hStc%2FIf5ey%2FRMAAP%2F%2F&RelayState=MUZpWUxjVUNYRUttcTdLaXRqVWhadTBkVzFmRUJhUWUwaWdkNHRRcmhsQWk2NXhzNnN8YjY3OGJlODMt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=iEae0yzkwmmEGk7goszwfJQvGB887jfnfszCokTmcnDBxT2FvWwYM%2FQ3chK3nvYHi%2BpmVVQmlFOFeq%2But0c8zbvSHz8oDkLy%2F1aIvQejRm%2B6HOJXxKfscKwYMOczyKD%2BBFTz6qEwiqBXeCmK8ab9jRwgt4NCz77aN%2Fx320cFZFOeK%2F8MQzUj%2FgAW1l1kzFe0eK4fQ2WQqRydvYtUcUMk%2FMfFQZZL%2BysvS8AnGVt15V13ZE6b%2BaM37F%2B726vOBqjyse99cLpZsY08P6PIKr7duElXND25x1jMyqC1hEEOBCzSj9Rd9be4elzUWMDRLPzEpPgLVD05cdvt64Dp%2FIP05HFW036Xt8A37azAfr5gulR%2B1ZDlsNXbnCHAHjVSfuAiS31%2B%2B%2BwPMwCk5hWInP5b8D7uCR989om153iD61cJgUrUHdBknhikTn6hhGahKNLVf6uDNcDiqdfcAEzgnaMB2Hy1MxTpz3Ge4nmXj6wK2%2F%2BgDhPTu6JayscchroBZPt7U4oN6ryuVcuSuOToqVJvhMilGUzMP4a9yeHqv6qk7T9egBBfwIrC%2FQ%2FsfNblceIDUTLomxw3gahf0Qb1JxmsuTqCYYHSJiddmBhMUzQ4iEMjz8tqEFWo6pJZFE1SrQATH7mXEB3Ki6%2FwkyBYPq6KHV36nDYhKJT34kWcrsaoRiA%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:22:41.756407+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:22:41.755874+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 33883ab6-55eb-40af-bd68-6f1b00a360c4 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBb9s%2BDMW%2FiqG7I1VK%2F4mF2kD%2BDYYF6LagyXbYjZXoRoAseSK9rd9%2BiJsBHTDksKMkvvcTH3lHMMTRbiY%2BpUf8NiFx9XOIiez5oRVTSTYDBbIJBiTLzh42Hx6sXigLRFg45CTeSMbrmrFkzi5HUe22rQi%2BXprGm1vjV6s1%2BnWz7lWv%2FNo40zw12rhbpVbw37JfiuoLFgo5tUIvlKh2RBPuEjEkboVW2tTK1DfmeKOt1na5Whijv4pqi8QhAc%2FKE%2FNopYzZQTxlYtsopSSMYwxuLpHnFuRzgR4S1POBKMunkHxIz7KgDwUdS1Ftfjd%2FnxNNA5YDlu%2FB4efHh79wzJkz24EjUe0vKfz%2F6ns9sguc7PvjcV%2FvPx2OopvHZucMSvUulwH4usn5Jvi6n0stJg78Iror%2FxyQwQPDnXyD6i7r8hEG3G33OQb38g94LpAoYGJRbWLMP%2B4LAmMruEwoZPeK%2FHMpu18BAAD%2F%2Fw%3D%3D&RelayState=anIybTVpRXpNb1M1cTY1STZkbTg5MnFEQ2Q5eUhyS3RmMnlhWDZrMWhtRVNCV3dieTJ8ZTU1N2E0YzIt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=Hg4HrLcQEHmjmUoBFkreDfipeHYL03BpwjjG0oErIkjegN5cvJeK6vOKgMuecGSt07zBYnOZ7w4%2BFbztzlUA9Ck1Z4939R8cWdIHwwXWq4EBCIANuRo83ae7igPfWK%2BAa%2FRRcVRsoHwpJC0Mj5Icz4obi6JYrQDy3YdY0jwRa7d5NDiYdmi3zmF2O4gBZqZmrIdJPeDGmF%2F6Ut3%2Bbpkw8Hkc%2FVSXohyNRsedQXLT30Uc7KsNSrdfIqlhJlYFhtDLh3ZKGWXxeI3qsKDwwj%2BCmbuzk8ElQfokH1ZBievQCrZ%2FpJZnxDYWZ2ipmAZAm%2BojsE0gJCVLZT6PMMF%2FJeP98Q8Z35rVZ8fNgJ0F14OPaU%2FRad12rMTJdlnoAVAbxvIhO%2BezuftLg81VAeJmxmhqU0wPpxZjFv3c5jsC2w04QufYW6rGQ9Eqk9Aul%2BBM398CWXo2fdWqSdTK3R9k9Hu4OPMD%2BOE%2FY4TxF4aDDfoDnO2AjWz0aW0SgU4R8%2B1Mq03kZhz5WGJ%2BVV4rbvIZC3rmTU2Uu9PXSUXrFEKe%2Fh3hifwHiCfLiQd7%2FttY1syGI%2ByOjBTCpfEYc8Idbk%2BVZDuWwLHFKk6sJPZ3S65DWFY83uGSmYmhmci8NG9tpaFu47ZrTJ0XIf8uVrp7NbLuJpJQ428XqyWeyskr1QchFoA5gK0%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:22:47.615052+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:22:47.614547+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} a3a94a54-ad14-44e1-b3fa-82daeded38cc authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBb9swDIX%2FiqC7I1lu6lqoDWQNhgXotqDJdtiNkZlGgCx5Ir2t%2F36ImwEdMOSwoyS%2B94mPvCcYwmhXE5%2FiE36fkFj8GkIke35o5ZSjTUCebIQBybKzu9XHR2sW2gIRZvYpyjeS8bpmzImTS0GKzbqVvi%2BwPkBVHg8llDfQGF0v4Q7uqmZZNb3Dm6o2eHtsbkGKr5jJp9hKs9BSbIgm3ERiiNxKo01V6Kooq31prDF2qRd1WX%2BTYo3EPgLPyhPzaJUKyUE4JWLbaK0VjGPwbi5R5xbUc4YjRCjmA1FSBx97H59Vxt5ndKykWP1p%2FiFFmgbMO8w%2FvMMvT4%2F%2F4FRnzmwHjqTYXlJ49%2Bp7PbILnOyH%2FX5bbD%2Fv9rKbx2bnDLJ4n%2FIAfN3kfOP74jiXWozs%2BUV2V%2F45IEMPDPfqDaq7rMsnGHCz3qbg3ct%2F4DlDJI%2BRpViFkH4%2BZATGVnKeUKruFfn3Una%2FAwAA%2F%2F8%3D&RelayState=M3pwWm9kRldFeml2eThQVHBQcGI1NGp6Y3VCdGE2QU4yY0Eyc05OVlZzS1hlZEpsVEx8ZmFkNjlmYzEt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=AMKBlDIOTlPlZhLhBMQnT6S1%2FPH0luAJKcoJDqnljva%2Fc8y8ttw8hyj9%2FsZ66ghIVdelzLHGYf0zHhnQpjLTnOlss1XKigzxLfzcW4VpNzb87x%2Bo4XgtKVQg41XYUiidoaY7WhaMViAlXit93lAoSVxLSRf2bdVMKAUdze1W2PHZLzNFWb8le%2FkIc1RL9am%2FqKHPVkV7dgaZYzsGjID1buVA8nES5AbeFEa13ncP4BgqlUOhBeYnPO7uY7g6UDXOrGFpsVbg7NCy61ERbU1YZgUUcVB%2F%2Fzuyl%2Bx9oGwAnE%2FcGQ62NWS4MgcUSyC9fUhm%2Bdh1FvCPpLbmh3aAFHwJgfW1zrLZqosu2vgDWdPl%2FFy8GhrPQtxHpUsmminQqVWuB03J5RL5faXuV8KbMSyHEKBYrPL8TosM5AUC8Myc3ofAWmoSnBhHHPDjo%2FGuvjziRCyknuIgMwXASS0fOJonaYJyYGwHNOFYdRhMvP0h40y5sbZZEsDQOZI0x6PkGX41rHfsB2K6nUshcKwr7vxf8DpBblmCgby7ikD11ZQaM32MKv9Nuy91jQ2ukPBlXTOZy2fUKokK0EHs%2Fu7W1%2FB6ZlWSCyC2B0Vk7CsG2WILsRo6U%2Fhpzn9Stka1y0L59k4%2Bj6yErQsSWny06kEaCiaS%2B1Os6Epib00K8q8Mhkf8swk%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:22:50.948601+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:22:50.94811+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +4bd7b207-ae32-4c25-9122-1aa0c86f429a login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"goauthentik.io/outpost/ldap": "true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET", "user_agent": "goauthentik.io/outpost/2023.10.6"}, "auth_method_args": {}} 172.20.0.8 2024-01-11 22:11:15.836471+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2025-01-10 22:11:15.832207+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 6e9edd91-9db5-4c23-9bcf-66a796709859 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:27:00.034068+00 {} 2024-03-12 12:27:00.033459+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} 9cebce0e-a584-4b23-b496-b45994aa0097 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:32:00.030109+00 {} 2024-03-12 12:32:00.02958+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} 6d9f7727-b1eb-4886-8bd1-8813397af8f2 model_created authentik.events.middleware {"model": {"pk": 3, "app": "authentik_providers_oauth2", "name": "grafana-oidc", "model_name": "oauth2provider"}, "http_request": {"args": {}, "path": "/api/v3/providers/oauth2/", "method": "POST"}} 172.21.0.1 2023-03-13 12:32:49.967325+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-03-12 12:32:49.966976+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} @@ -2972,6 +3145,7 @@ c319f061-18ad-4abe-a39d-8d952a64c49f model_created authentik.events.middleware { 34fe3cf8-47fe-4a75-bf99-74885f47b69e login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:36:00.789499+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:36:00.784286+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 637bc09b-af2c-4e11-9e01-e131d553a69b login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "next=%2Fapplication%2Fo%2Fauthorize%2F%3Fclient_id%3D43e8d2746fe2e508325a23cdf816d6ddd12e94f1%26redirect_uri%3Dhttp%253A%252F%252Flocalhost%253A3000%252Flogin%252Fgeneric_oauth%26response_type%3Dcode%26scope%3Dopenid%2Bemail%2Bprofile%26state%3DKhwpxm9LZ-bo7yjuyBvGuTCM2Gi4pSXwJk8hCRWup-s%253D"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:36:31.733073+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:36:31.732702+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 530a91a4-929a-4d8e-b2ed-8f26d4e36b0e authorize_application authentik.providers.oauth2.views.authorize {"flow": "a7ef54bb79594559979d9345c022e086", "scopes": "openid email profile", "http_request": {"args": {"query": "client_id=43e8d2746fe2e508325a23cdf816d6ddd12e94f1&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Flogin%2Fgeneric_oauth&response_type=code&scope=openid+email+profile&state=Khwpxm9LZ-bo7yjuyBvGuTCM2Gi4pSXwJk8hCRWup-s%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "d7dfa1d658cb4bfc94c538a2e507e290", "app": "authentik_core", "name": "Grafana OIDC", "model_name": "application"}} 172.21.0.1 2023-03-13 12:36:31.983378+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:36:31.982723+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +cad2b7aa-cc81-4767-bba1-caa28a096461 model_updated authentik.events.middleware {"model": {"pk": 1, "app": "authentik_core", "name": "authentik Default Admin", "model_name": "user"}, "http_request": {"args": {"next": "/if/admin/#/administration/overview"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "POST", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 10.89.0.4 2024-01-10 13:37:34.033723+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2025-01-09 13:37:34.032188+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 993af708-fc75-4a06-864f-54fe56c6a753 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:37:00.030818+00 {} 2024-03-12 12:37:00.030297+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} 61565f70-33eb-4563-a7a7-a31a963087ee login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:40:53.885265+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:40:53.878318+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} fd92f349-4b74-4387-8f10-56a833ef3c44 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:42:00.041363+00 {} 2024-03-12 12:42:00.040909+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} @@ -3000,6 +3174,32 @@ f05f35f9-fbe7-4838-9728-284298dd4776 system_exception authentik.root.celery {"me 04362a89-dae5-4023-a99a-541668da1e9e system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 13:55:02.882399+00 {} 2024-03-12 13:55:02.882148+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} a934eccb-bc35-45d4-8e2a-87eaca050a30 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 13:55:02.900363+00 {} 2024-03-12 13:55:02.900026+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} 7dc1bd11-f563-45a3-aa35-71e7699619cc system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 13:55:05.125416+00 {} 2024-03-12 13:55:05.124542+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +18adc05a-2cc7-45eb-9771-8fdbb2e3f329 system_task_exception authentik.events.monitored_tasks {"message": "Task blueprints_discovery encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 477, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 275, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 60, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 270, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 760, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/blueprints/v1/tasks.py\\", line 145, in blueprints_discovery\\n check_blueprint_v1_file(blueprint)\\n File \\"/authentik/blueprints/v1/tasks.py\\", line 173, in check_blueprint_v1_file\\n instance.save()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\\", line 814, in save\\n self.save_base(\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\\", line 877, in save_base\\n updated = self._save_table(\\n ^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\\", line 1020, in _save_table\\n results = self._do_insert(\\n ^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\\", line 1061, in _do_insert\\n return manager._insert(\\n ^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/manager.py\\", line 87, in manager_method\\n return getattr(self.get_queryset(), name)(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1805, in _insert\\n return query.get_compiler(using=using).execute_sql(returning_fields)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1822, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 616, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 69, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/psycopg/cursor.py\\", line 737, in execute\\n raise ex.with_traceback(None)\\ndjango.db.utils.IntegrityError: duplicate key value violates unique constraint \\"authentik_blueprints_blueprintinstance_name_404be626_uniq\\"\\nDETAIL: Key (name)=(Default - Tenant) already exists."} \N 2024-01-10 13:34:47.947721+00 {} 2025-01-09 13:34:47.947069+00 t {"pk": "9a0465281f674272822bef895fae1b75", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +359e7883-75a9-4840-a51a-37e75a921b8b system_task_exception authentik.events.monitored_tasks {"message": "Task blueprints_discovery encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 477, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 275, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 60, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 270, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 760, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/blueprints/v1/tasks.py\\", line 145, in blueprints_discovery\\n check_blueprint_v1_file(blueprint)\\n File \\"/authentik/blueprints/v1/tasks.py\\", line 173, in check_blueprint_v1_file\\n instance.save()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\\", line 814, in save\\n self.save_base(\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\\", line 877, in save_base\\n updated = self._save_table(\\n ^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\\", line 1020, in _save_table\\n results = self._do_insert(\\n ^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\\", line 1061, in _do_insert\\n return manager._insert(\\n ^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/manager.py\\", line 87, in manager_method\\n return getattr(self.get_queryset(), name)(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1805, in _insert\\n return query.get_compiler(using=using).execute_sql(returning_fields)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1822, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 616, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 69, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/psycopg/cursor.py\\", line 737, in execute\\n raise ex.with_traceback(None)\\ndjango.db.utils.IntegrityError: duplicate key value violates unique constraint \\"authentik_blueprints_blueprintinstance_name_path_982f03b6_uniq\\"\\nDETAIL: Key (name, path)=(Default - Source pre-authentication flow, default/flow-default-source-pre-authentication.yaml) already exists."} \N 2024-01-10 13:34:48.686741+00 {} 2025-01-09 13:34:48.686124+00 t {"pk": "9a0465281f674272822bef895fae1b75", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +d1f42ba6-00e0-446b-b170-9b822c4df6d8 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"next": "/if/admin/#/administration/overview"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}, "auth_method_args": {}} 10.89.0.4 2024-01-10 13:37:34.122453+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2025-01-09 13:37:34.121905+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +f3afa096-3cea-422d-8bc7-0b2117edde32 model_updated authentik.events.middleware {"model": {"pk": 1, "app": "authentik_core", "name": "authentik Default Admin", "model_name": "user"}, "http_request": {"args": {"next": "/if/admin/#/administration/overview"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 10.89.0.4 2024-01-10 13:37:34.136251+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2025-01-09 13:37:34.135644+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +b5999b08-6c2a-4c7b-9356-263fd74f7b5c model_deleted authentik.events.middleware {"model": {"pk": "f0a78f88adc247e682c1d49e9e159329", "app": "authentik_crypto", "name": "authentik Self-signed Certificate_2", "model_name": "certificatekeypair"}, "http_request": {"args": {}, "path": "/api/v3/crypto/certificatekeypairs/f0a78f88-adc2-47e6-82c1-d49e9e159329/", "method": "DELETE", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 172.20.0.1 2024-01-11 22:06:53.231803+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2025-01-10 22:06:53.231151+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +8d921b9a-8cfe-4402-8949-7e73d53a931c model_updated authentik.events.middleware {"model": {"pk": 6, "app": "authentik_core", "name": "ldapservice", "model_name": "user"}, "http_request": {"args": {"goauthentik.io/outpost/ldap": "true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET", "user_agent": "goauthentik.io/outpost/2023.10.6"}} 172.20.0.8 2024-01-11 22:11:15.858579+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2025-01-10 22:11:15.85419+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +e6b62e94-cac4-4ab7-8cb1-d010fb1a1fd5 model_deleted authentik.events.middleware {"model": {"pk": "fd8c40c1e49148d1a26502ef85ea9a12", "app": "authentik_crypto", "name": "authentik Self-signed Certificate_3", "model_name": "certificatekeypair"}, "http_request": {"args": {}, "path": "/api/v3/crypto/certificatekeypairs/fd8c40c1-e491-48d1-a265-02ef85ea9a12/", "method": "DELETE", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 172.20.0.1 2024-01-11 22:06:59.939328+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2025-01-10 22:06:59.936003+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +a1d710c2-239e-400e-bad7-c53d6b3eb7aa model_deleted authentik.events.middleware {"model": {"pk": "6304c99590034fc49ba23d32016fb04e", "app": "authentik_crypto", "name": "authentik Self-signed Certificate-old", "model_name": "certificatekeypair"}, "http_request": {"args": {}, "path": "/api/v3/crypto/certificatekeypairs/6304c995-9003-4fc4-9ba2-3d32016fb04e/", "method": "DELETE", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 172.20.0.1 2024-01-11 22:10:04.13061+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2025-01-10 22:10:04.130083+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +5504bc47-2819-442f-b589-fbcba17e325c model_updated authentik.events.middleware {"model": {"pk": 8, "app": "authentik_core", "name": "authentik-editor", "model_name": "user"}, "http_request": {"args": {"next": "/application/o/authorize/?client_id=43e8d2746fe2e508325a23cdf816d6ddd12e94f1&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Flogin%2Fgeneric_oauth&response_type=code&scope=openid+email+profile&state=BT8hDLepiB6WQKgDYSIbOMG4bN3mam2JhqoQCA08LxU%3D"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "POST", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 172.20.0.1 2024-01-11 22:10:53.973197+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2025-01-10 22:10:53.971822+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +4305fdab-10dd-4d90-8f00-6ef86b4b2e2a model_updated authentik.events.middleware {"model": {"pk": 5, "app": "authentik_core", "name": "authentik-admin", "model_name": "user"}, "http_request": {"args": {"goauthentik.io/outpost/ldap": "true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "POST", "user_agent": "goauthentik.io/outpost/2023.10.6"}} 172.20.0.8 2024-01-11 22:11:16.787611+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2025-01-10 22:11:16.78303+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +47643d1d-1747-47c8-b588-8afb16426f56 model_updated authentik.events.middleware {"model": {"pk": "6304c99590034fc49ba23d32016fb04e", "app": "authentik_crypto", "name": "authentik Self-signed Certificate-old", "model_name": "certificatekeypair"}, "http_request": {"args": {}, "path": "/api/v3/crypto/certificatekeypairs/6304c995-9003-4fc4-9ba2-3d32016fb04e/", "method": "PATCH", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 172.20.0.1 2024-01-11 22:07:21.528806+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2025-01-10 22:07:21.528218+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +114e2a99-98b7-45fd-9625-96d8805161f4 model_updated authentik.events.middleware {"model": {"pk": 7, "app": "authentik_core", "name": "authentik-viewer", "model_name": "user"}, "http_request": {"args": {"next": "/application/o/authorize/?client_id=43e8d2746fe2e508325a23cdf816d6ddd12e94f1&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Flogin%2Fgeneric_oauth&response_type=code&scope=openid+email+profile&state=CgTPaX9JYavq4yJ5EWmgXQ9UEPhAp6TCumANg1b1jmw%3D"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "POST", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 172.20.0.1 2024-01-11 22:10:27.787705+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2025-01-10 22:10:27.7848+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +edd940c9-a07b-402b-9a70-87e5c4c31f74 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"next": "/application/o/authorize/?client_id=43e8d2746fe2e508325a23cdf816d6ddd12e94f1&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Flogin%2Fgeneric_oauth&response_type=code&scope=openid+email+profile&state=BT8hDLepiB6WQKgDYSIbOMG4bN3mam2JhqoQCA08LxU%3D"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}, "auth_method_args": {}} 172.20.0.1 2024-01-11 22:10:54.076153+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2025-01-10 22:10:54.075325+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +95d31a52-acd7-48d6-afb9-ff48c48aef43 model_updated authentik.events.middleware {"model": {"pk": 8, "app": "authentik_core", "name": "authentik-editor", "model_name": "user"}, "http_request": {"args": {"next": "/application/o/authorize/?client_id=43e8d2746fe2e508325a23cdf816d6ddd12e94f1&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Flogin%2Fgeneric_oauth&response_type=code&scope=openid+email+profile&state=BT8hDLepiB6WQKgDYSIbOMG4bN3mam2JhqoQCA08LxU%3D"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 172.20.0.1 2024-01-11 22:10:54.08931+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2025-01-10 22:10:54.088632+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +6315b883-7b38-46cf-a91e-14ef04761a1b login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"goauthentik.io/outpost/ldap": "true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET", "user_agent": "goauthentik.io/outpost/2023.10.6"}, "auth_method_args": {}} 172.20.0.8 2024-01-11 22:11:16.851466+00 {"pk": 5, "email": "authentik-admin@localhost", "username": "authentik-admin"} 2025-01-10 22:11:16.847575+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +5884597f-5ece-4a83-8171-d14b38f27227 model_updated authentik.events.middleware {"model": {"pk": 5, "app": "authentik_core", "name": "authentik-admin", "model_name": "user"}, "http_request": {"args": {"goauthentik.io/outpost/ldap": "true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET", "user_agent": "goauthentik.io/outpost/2023.10.6"}} 172.20.0.8 2024-01-11 22:11:16.869188+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2025-01-10 22:11:16.865921+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +c3258783-f555-4fd6-acb7-6a0a5768b37c model_created authentik.events.middleware {"model": {"pk": "3fcd5d6c3e4043bcb916c7cd3675d0f1", "app": "authentik_crypto", "name": "authentik Self-signed Certificate", "model_name": "certificatekeypair"}, "http_request": {"args": {}, "path": "/api/v3/crypto/certificatekeypairs/generate/", "method": "POST", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 172.20.0.1 2024-01-11 22:07:32.558046+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2025-01-10 22:07:32.557502+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +e5080aed-28b1-4c28-ac1d-e663d7de0062 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"next": "/application/o/authorize/?client_id=43e8d2746fe2e508325a23cdf816d6ddd12e94f1&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Flogin%2Fgeneric_oauth&response_type=code&scope=openid+email+profile&state=CgTPaX9JYavq4yJ5EWmgXQ9UEPhAp6TCumANg1b1jmw%3D"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}, "auth_method_args": {}} 172.20.0.1 2024-01-11 22:10:28.148148+00 {"pk": 7, "email": "authentik-viewer@localhost", "username": "authentik-viewer"} 2025-01-10 22:10:28.145662+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +46c5aafd-ad92-45ed-ba31-d8de54fbdf04 model_updated authentik.events.middleware {"model": {"pk": 7, "app": "authentik_core", "name": "authentik-viewer", "model_name": "user"}, "http_request": {"args": {"next": "/application/o/authorize/?client_id=43e8d2746fe2e508325a23cdf816d6ddd12e94f1&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Flogin%2Fgeneric_oauth&response_type=code&scope=openid+email+profile&state=CgTPaX9JYavq4yJ5EWmgXQ9UEPhAp6TCumANg1b1jmw%3D"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 172.20.0.1 2024-01-11 22:10:28.20553+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2025-01-10 22:10:28.202421+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +cbbc715b-9c98-472c-be6f-5859f99f4156 authorize_application authentik.providers.oauth2.views.authorize {"flow": "a7ef54bb79594559979d9345c022e086", "scopes": "openid email profile", "http_request": {"args": {"scope": "openid email profile", "state": "BT8hDLepiB6WQKgDYSIbOMG4bN3mam2JhqoQCA08LxU=", "client_id": "43e8d2746fe2e508325a23cdf816d6ddd12e94f1", "redirect_uri": "http://localhost:3000/login/generic_oauth", "response_type": "code"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}, "authorized_application": {"pk": "d7dfa1d658cb4bfc94c538a2e507e290", "app": "authentik_core", "name": "Grafana OIDC", "model_name": "application"}} 172.20.0.1 2024-01-11 22:10:54.310719+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2025-01-10 22:10:54.310134+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +ebc788aa-027b-4d78-94bc-d87d6fc1cfe6 model_updated authentik.events.middleware {"model": {"pk": 3, "app": "authentik_providers_oauth2", "name": "grafana-oidc", "model_name": "oauth2provider"}, "http_request": {"args": {}, "path": "/api/v3/providers/oauth2/3/", "method": "PUT", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 172.20.0.1 2024-01-11 22:08:00.123074+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2025-01-10 22:08:00.122462+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +161c7b5f-88fe-4930-9f0b-be5e4184a184 authorize_application authentik.providers.oauth2.views.authorize {"flow": "a7ef54bb79594559979d9345c022e086", "scopes": "openid email profile", "http_request": {"args": {"scope": "openid email profile", "state": "CgTPaX9JYavq4yJ5EWmgXQ9UEPhAp6TCumANg1b1jmw=", "client_id": "43e8d2746fe2e508325a23cdf816d6ddd12e94f1", "redirect_uri": "http://localhost:3000/login/generic_oauth", "response_type": "code"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}, "authorized_application": {"pk": "d7dfa1d658cb4bfc94c538a2e507e290", "app": "authentik_core", "name": "Grafana OIDC", "model_name": "application"}} 172.20.0.1 2024-01-11 22:10:30.227099+00 {"pk": 7, "email": "authentik-viewer@localhost", "username": "authentik-viewer"} 2025-01-10 22:10:30.220684+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +f3cdd7de-c03d-49f4-be44-2e5d0d982faa logout authentik.events.signals {"http_request": {"args": {}, "path": "/api/v3/flows/executor/default-invalidation-flow/", "method": "GET", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 172.20.0.1 2024-01-11 22:11:00.005003+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2025-01-10 22:11:00.004272+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +1b2835c2-f1ae-4c30-8b34-252a286b3ac9 model_updated authentik.events.middleware {"model": {"pk": 2, "app": "authentik_providers_saml", "name": "grafana-saml", "model_name": "samlprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/saml/2/", "method": "PUT", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 172.20.0.1 2024-01-11 22:08:27.768122+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2025-01-10 22:08:27.767604+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +302baacc-6574-4fc7-b476-a77456c33492 logout authentik.events.signals {"http_request": {"args": {}, "path": "/api/v3/flows/executor/default-invalidation-flow/", "method": "GET", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}} 172.20.0.1 2024-01-11 22:10:36.768574+00 {"pk": 7, "email": "authentik-viewer@localhost", "username": "authentik-viewer"} 2025-01-10 22:10:36.768045+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +2d580ab2-8337-4cbe-9700-dda14b3ea05f model_updated authentik.events.middleware {"model": {"pk": 6, "app": "authentik_core", "name": "ldapservice", "model_name": "user"}, "http_request": {"args": {"goauthentik.io/outpost/ldap": "true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "POST", "user_agent": "goauthentik.io/outpost/2023.10.6"}} 172.20.0.8 2024-01-11 22:11:15.749495+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2025-01-10 22:11:15.739789+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} \. @@ -3008,7 +3208,6 @@ a934eccb-bc35-45d4-8e2a-87eaca050a30 system_exception authentik.root.celery {"me -- COPY public.authentik_events_notification (uuid, severity, body, created, seen, event_id, user_id) FROM stdin; -b124e245-e4fc-457d-9171-329220ca358f alert Failed to verify signature 2023-01-02 16:20:28.230329+00 f aa49c5e8-b508-4046-907e-cfdca67edf75 1 \. @@ -3060,20 +3259,20 @@ COPY public.authentik_events_notificationwebhookmapping (propertymapping_ptr_id) -- COPY public.authentik_flows_flow (flow_uuid, name, slug, designation, policybindingmodel_ptr_id, title, background, compatibility_mode, layout, denied_action, authentication) FROM stdin; -c6e83269-3b5e-4f2a-8014-f198578240c1 Welcome to authentik! Please select a username. default-source-enrollment enrollment 63e07f88-3fd7-4180-807f-470bb3209bac Welcome to authentik! Please select a username. f stacked message_continue none -7c801f5d-8952-4b95-9f6c-385af22e798d default-oobe-setup initial-setup stage_configuration db71b00d-8d55-4ce6-a1a4-8fa8be93e810 Welcome to authentik! f stacked message_continue none -4ca3e92c-7f33-4d2f-bb5e-1efa4c6c902a Welcome to authentik! default-source-authentication authentication 181928f0-b530-4858-bee9-376597ac63ed Welcome to authentik! f stacked message_continue none -4b14409d-da92-4b6c-91e8-bad06d0966c2 Change Password default-password-change stage_configuration 65c208d9-e145-4259-bb87-deecf97c3643 Change password f stacked message_continue none -c4257191-cb7a-4120-9566-a38ba8a50248 Welcome to authentik! default-authentication-flow authentication 5be1e1aa-8051-417e-b03a-1a0e87cd8101 Welcome to authentik! f stacked message_continue none -1d2dd494-c62d-438a-8d0b-f864084f883c User settings default-user-settings-flow stage_configuration 71205979-10a2-41db-9e08-c05f1644f732 Update your info f stacked message_continue none 87ca9599-5323-451c-8603-2f5bee7a0c12 ldap-authentication-flow ldap-authentication-flow authentication 105415a2-7753-4a7f-bdf5-ed9841420289 ldap-authentication-flow f stacked message_continue none +4b14409d-da92-4b6c-91e8-bad06d0966c2 Change Password default-password-change stage_configuration 65c208d9-e145-4259-bb87-deecf97c3643 Change password f stacked message_continue require_authenticated +c4257191-cb7a-4120-9566-a38ba8a50248 Welcome to authentik! default-authentication-flow authentication 5be1e1aa-8051-417e-b03a-1a0e87cd8101 Welcome to authentik! f stacked message_continue none +2287d235-72aa-4d23-80a2-44278d7c7839 Logout default-invalidation-flow invalidation 7c8e66c0-7a12-42bd-901f-a88fcd742a5e Default Invalidation Flow f stacked message_continue none 35537410-5840-48ee-ba54-76f2a7d42617 default-authenticator-totp-setup default-authenticator-totp-setup stage_configuration 62e82cc0-d670-4f23-8d7b-14675757dd8c Setup Two-Factor authentication f stacked message_continue require_authenticated +1d2dd494-c62d-438a-8d0b-f864084f883c User settings default-user-settings-flow stage_configuration 71205979-10a2-41db-9e08-c05f1644f732 Update your info f stacked message_continue require_authenticated 0bcbad7c-01fc-4ed0-b3f1-a1671683d6b3 default-authenticator-static-setup default-authenticator-static-setup stage_configuration c4f758ad-0e74-4b1a-a1bc-32ae3a370b69 Setup Static OTP Tokens f stacked message_continue require_authenticated 611b3458-aadd-47c1-b37e-1940bc72ede7 default-authenticator-webauthn-setup default-authenticator-webauthn-setup stage_configuration 3d7a1eb4-72c2-44dd-bdf7-741750024ce2 Setup WebAuthn f stacked message_continue require_authenticated a7ef54bb-7959-4559-979d-9345c022e086 Authorize Application default-provider-authorization-implicit-consent authorization cba52268-0d9a-40bd-ae7f-b723f5e05671 Redirecting to %(app)s f stacked message_continue require_authenticated -3b01d5c4-0d46-4bfe-b37f-553a7b4d051c Authorize Application default-provider-authorization-explicit-consent authorization ab6b7aa3-82da-4972-9158-7b7fc70ab973 Redirecting to %(app)s f stacked message_continue require_authenticated +4ca3e92c-7f33-4d2f-bb5e-1efa4c6c902a Welcome to authentik! default-source-authentication authentication 181928f0-b530-4858-bee9-376597ac63ed Welcome to authentik! f stacked message_continue require_unauthenticated 7bd42149-dc52-445a-bd1e-4513c50d01dd Pre-Authentication default-source-pre-authentication stage_configuration 081ce9e5-201f-48e9-af60-7c10076f0857 Pre-authentication f stacked message_continue none -2287d235-72aa-4d23-80a2-44278d7c7839 Logout default-invalidation-flow invalidation 7c8e66c0-7a12-42bd-901f-a88fcd742a5e Default Invalidation Flow f stacked message_continue none +c6e83269-3b5e-4f2a-8014-f198578240c1 Welcome to authentik! Please select a username. default-source-enrollment enrollment 63e07f88-3fd7-4180-807f-470bb3209bac Welcome to authentik! Please select a username. f stacked message_continue none +7c801f5d-8952-4b95-9f6c-385af22e798d default-oobe-setup initial-setup stage_configuration db71b00d-8d55-4ce6-a1a4-8fa8be93e810 Welcome to authentik! f stacked message_continue require_superuser +3b01d5c4-0d46-4bfe-b37f-553a7b4d051c Authorize Application default-provider-authorization-explicit-consent authorization ab6b7aa3-82da-4972-9158-7b7fc70ab973 Redirecting to %(app)s f stacked message_continue require_authenticated \. @@ -3082,28 +3281,28 @@ a7ef54bb-7959-4559-979d-9345c022e086 Authorize Application default-provider-auth -- COPY public.authentik_flows_flowstagebinding (policybindingmodel_ptr_id, fsb_uuid, re_evaluate_policies, "order", target_id, stage_id, evaluate_on_plan, invalid_response_action) FROM stdin; -88ddedff-15ef-4b45-86cf-0aebf0e55b25 bae6a178-c8fc-4041-b2f0-a1e44f83259f f 0 4ca3e92c-7f33-4d2f-bb5e-1efa4c6c902a 2e18f37d-528d-4c12-b9ea-d7dbf67b56a7 t retry -6f6c5b88-ae7e-44ae-bdae-432893a9e4b6 534d4ed8-ca6e-4140-8a2b-77c546c67d07 t 0 c6e83269-3b5e-4f2a-8014-f198578240c1 89176b0f-7a9c-41eb-8897-6c532db04b96 t retry -417e795d-6832-40b6-b083-4462357471cb 9735981f-6ff9-4207-8093-47b15ba0b678 f 1 c6e83269-3b5e-4f2a-8014-f198578240c1 dfc93c1c-c398-4e8f-aa34-fdc21b6accfb t retry +e4c83e8e-69f4-4993-a0c2-f99552fd76d0 585626b6-72d8-4f0f-9b4e-085d6a3c2ee0 f 10 87ca9599-5323-451c-8603-2f5bee7a0c12 f4abcb7d-5f92-4890-8760-afb9effda665 t retry +9fdfd009-537e-4b36-8cc8-98f62620f410 1e25b2d4-d52b-4f19-8b9e-65960d3a64a8 f 30 87ca9599-5323-451c-8603-2f5bee7a0c12 8a432e54-5bb4-4199-add9-53e198eca1dc t retry +3cb69a8b-fd96-415c-95e6-f094934905d0 f7804829-283b-4e98-adc2-186ef7f2fc09 f 0 611b3458-aadd-47c1-b37e-1940bc72ede7 7dac33d8-ebb1-421c-b9d4-13aba2c28a3c t retry c0792518-ed7b-4d0f-a373-5f20c253de11 aa44b8e7-908e-466f-9e5b-467c8b380ed6 f 0 4b14409d-da92-4b6c-91e8-bad06d0966c2 366481d2-b22d-4993-9502-d367fb8ae7f1 t retry dfabc06a-e2f8-401d-92c4-01e3185f7dc1 b695f5b6-73e4-4f4e-a25f-6eba4715ec1d f 1 4b14409d-da92-4b6c-91e8-bad06d0966c2 e87982c6-2f31-4dc5-bdce-2f680601c023 t retry 7321fbe5-2c34-41b6-8682-6ab794e00096 dbcef3a3-9fd3-4392-87e6-7722de38c458 f 10 c4257191-cb7a-4120-9566-a38ba8a50248 44b8d668-3efe-4e44-aa7f-74849414f977 t retry -0a3c97a9-ac46-45cb-8718-a2984fff154a cffd43dd-d238-4eda-8b40-31562f94b2b0 f 2 c6e83269-3b5e-4f2a-8014-f198578240c1 03fc4a51-f2e0-4844-b58b-b421ea235f34 t retry -b696e261-9362-4cbe-b864-eee1f3c04afe b4a7322f-e68d-4512-a10d-69b95bceefec f 20 c4257191-cb7a-4120-9566-a38ba8a50248 02b4a829-f9ab-45d0-adcc-11e3c165f1c4 t retry +b696e261-9362-4cbe-b864-eee1f3c04afe b4a7322f-e68d-4512-a10d-69b95bceefec t 20 c4257191-cb7a-4120-9566-a38ba8a50248 02b4a829-f9ab-45d0-adcc-11e3c165f1c4 t retry +4f206f06-1d5e-4725-8206-c58d48f5be6c 21bf872d-1b1b-44ee-a737-727e072d5680 f 0 35537410-5840-48ee-ba54-76f2a7d42617 0d0f2722-298b-4212-9307-640a205253bd t retry 07e871ad-dc36-48ea-abf8-397cd2a612b7 60731f11-952f-4c2f-bd4c-f35310d51e84 f 30 c4257191-cb7a-4120-9566-a38ba8a50248 b461e46b-7c2f-4188-b4a7-7a4df1c2c142 t retry cd0bdadb-3a40-458a-bced-d62f12dcb5aa 73c108f5-720c-46b6-922f-2aa1c9d6bf89 f 100 c4257191-cb7a-4120-9566-a38ba8a50248 58a4b17a-a21a-4c29-a3fd-6797bd7260cc t retry +a67caf05-5165-441b-8e62-6f37fa9c2a0d d8ab26bb-8bd3-4bc8-8e58-9179a5805d29 f 0 2287d235-72aa-4d23-80a2-44278d7c7839 6fce99da-2643-4784-928c-94c1b2a3ab16 t retry 1f1353d5-b69c-438e-822c-c13f75fdb18a 737c6465-10a1-4e8d-8fce-ab209f9b6d61 f 20 1d2dd494-c62d-438a-8d0b-f864084f883c fa87ed01-29a6-457d-936d-4667077bba44 t retry cd98a539-1b50-4d59-b4b9-4a66b98b20fe 5672aba5-f29a-412b-b0fe-15a7ab162ec8 f 100 1d2dd494-c62d-438a-8d0b-f864084f883c 9934f0fc-b4b4-44e0-a90d-7587844ac68b t retry +303b1296-cc7f-4887-92fd-0ea0550fc6d4 6dbcdc89-8ac7-4159-8cda-529cabea5f58 f 0 0bcbad7c-01fc-4ed0-b3f1-a1671683d6b3 4c0a51c3-ed6a-40d6-8889-3a3e8ac13546 t retry +65398796-09e1-494b-af85-8bed8b491c62 2bd6d69e-1b08-4c42-bf8c-adaa4ca284ce f 0 3b01d5c4-0d46-4bfe-b37f-553a7b4d051c d9149797-1c7d-4b62-b193-2e745f9dbb9c t retry +88ddedff-15ef-4b45-86cf-0aebf0e55b25 bae6a178-c8fc-4041-b2f0-a1e44f83259f f 0 4ca3e92c-7f33-4d2f-bb5e-1efa4c6c902a 2e18f37d-528d-4c12-b9ea-d7dbf67b56a7 t retry +6f6c5b88-ae7e-44ae-bdae-432893a9e4b6 534d4ed8-ca6e-4140-8a2b-77c546c67d07 t 0 c6e83269-3b5e-4f2a-8014-f198578240c1 89176b0f-7a9c-41eb-8897-6c532db04b96 t retry +417e795d-6832-40b6-b083-4462357471cb 9735981f-6ff9-4207-8093-47b15ba0b678 f 1 c6e83269-3b5e-4f2a-8014-f198578240c1 dfc93c1c-c398-4e8f-aa34-fdc21b6accfb t retry +0a3c97a9-ac46-45cb-8718-a2984fff154a cffd43dd-d238-4eda-8b40-31562f94b2b0 f 2 c6e83269-3b5e-4f2a-8014-f198578240c1 03fc4a51-f2e0-4844-b58b-b421ea235f34 t retry bc36ea75-31be-4dd6-b2cf-11f2e7ca7a33 744e08bc-bb8e-42f6-875a-bdf583d6a5e8 f 10 7c801f5d-8952-4b95-9f6c-385af22e798d 4b3bfdf2-31ed-4b1f-8de4-1752ef0ece92 t retry 563837f0-8633-46c5-8cd2-f744cb5f3591 aaa3e596-6bd8-4326-9ece-81f586cac391 t 20 7c801f5d-8952-4b95-9f6c-385af22e798d e87982c6-2f31-4dc5-bdce-2f680601c023 f retry 49f5f048-9c0b-4d92-a103-e5eec6ab1ed2 dbd6f009-ee18-4461-8757-8bd99925792c f 100 7c801f5d-8952-4b95-9f6c-385af22e798d 58a4b17a-a21a-4c29-a3fd-6797bd7260cc t retry -e4c83e8e-69f4-4993-a0c2-f99552fd76d0 585626b6-72d8-4f0f-9b4e-085d6a3c2ee0 f 10 87ca9599-5323-451c-8603-2f5bee7a0c12 f4abcb7d-5f92-4890-8760-afb9effda665 t retry -9fdfd009-537e-4b36-8cc8-98f62620f410 1e25b2d4-d52b-4f19-8b9e-65960d3a64a8 f 30 87ca9599-5323-451c-8603-2f5bee7a0c12 8a432e54-5bb4-4199-add9-53e198eca1dc t retry -a67caf05-5165-441b-8e62-6f37fa9c2a0d d8ab26bb-8bd3-4bc8-8e58-9179a5805d29 f 0 2287d235-72aa-4d23-80a2-44278d7c7839 6fce99da-2643-4784-928c-94c1b2a3ab16 t retry -4f206f06-1d5e-4725-8206-c58d48f5be6c 21bf872d-1b1b-44ee-a737-727e072d5680 f 0 35537410-5840-48ee-ba54-76f2a7d42617 0d0f2722-298b-4212-9307-640a205253bd t retry -303b1296-cc7f-4887-92fd-0ea0550fc6d4 6dbcdc89-8ac7-4159-8cda-529cabea5f58 f 0 0bcbad7c-01fc-4ed0-b3f1-a1671683d6b3 4c0a51c3-ed6a-40d6-8889-3a3e8ac13546 t retry -3cb69a8b-fd96-415c-95e6-f094934905d0 f7804829-283b-4e98-adc2-186ef7f2fc09 f 0 611b3458-aadd-47c1-b37e-1940bc72ede7 7dac33d8-ebb1-421c-b9d4-13aba2c28a3c t retry -65398796-09e1-494b-af85-8bed8b491c62 2bd6d69e-1b08-4c42-bf8c-adaa4ca284ce f 0 3b01d5c4-0d46-4bfe-b37f-553a7b4d051c d9149797-1c7d-4b62-b193-2e745f9dbb9c t retry \. @@ -3120,27 +3319,36 @@ COPY public.authentik_flows_flowtoken (token_ptr_id, _plan, flow_id) FROM stdin; -- COPY public.authentik_flows_stage (stage_uuid, name) FROM stdin; +95715d75-025b-4e5e-9d23-96826479906d ldap-authentication-password +8a432e54-5bb4-4199-add9-53e198eca1dc ldap-authentication-login +f4abcb7d-5f92-4890-8760-afb9effda665 ldap-identification-stage +7dac33d8-ebb1-421c-b9d4-13aba2c28a3c default-authenticator-webauthn-setup 366481d2-b22d-4993-9502-d367fb8ae7f1 default-password-change-prompt 02b4a829-f9ab-45d0-adcc-11e3c165f1c4 default-authentication-password b461e46b-7c2f-4188-b4a7-7a4df1c2c142 default-authentication-mfa-validation 44b8d668-3efe-4e44-aa7f-74849414f977 default-authentication-identification -58a4b17a-a21a-4c29-a3fd-6797bd7260cc default-authentication-login +6fce99da-2643-4784-928c-94c1b2a3ab16 default-invalidation-logout +4c0a51c3-ed6a-40d6-8889-3a3e8ac13546 default-authenticator-static-setup +9934f0fc-b4b4-44e0-a90d-7587844ac68b default-user-settings-write fa87ed01-29a6-457d-936d-4667077bba44 default-user-settings +0d0f2722-298b-4212-9307-640a205253bd default-authenticator-totp-setup +d9149797-1c7d-4b62-b193-2e745f9dbb9c default-provider-authorization-consent 2e18f37d-528d-4c12-b9ea-d7dbf67b56a7 default-source-authentication-login 03fc4a51-f2e0-4844-b58b-b421ea235f34 default-source-enrollment-login 89176b0f-7a9c-41eb-8897-6c532db04b96 default-source-enrollment-prompt +dfc93c1c-c398-4e8f-aa34-fdc21b6accfb default-source-enrollment-write 4b3bfdf2-31ed-4b1f-8de4-1752ef0ece92 stage-default-oobe-password -95715d75-025b-4e5e-9d23-96826479906d ldap-authentication-password -8a432e54-5bb4-4199-add9-53e198eca1dc ldap-authentication-login -f4abcb7d-5f92-4890-8760-afb9effda665 ldap-identification-stage +58a4b17a-a21a-4c29-a3fd-6797bd7260cc default-authentication-login e87982c6-2f31-4dc5-bdce-2f680601c023 default-password-change-write -9934f0fc-b4b4-44e0-a90d-7587844ac68b default-user-settings-write -dfc93c1c-c398-4e8f-aa34-fdc21b6accfb default-source-enrollment-write -6fce99da-2643-4784-928c-94c1b2a3ab16 default-invalidation-logout -0d0f2722-298b-4212-9307-640a205253bd default-authenticator-totp-setup -4c0a51c3-ed6a-40d6-8889-3a3e8ac13546 default-authenticator-static-setup -7dac33d8-ebb1-421c-b9d4-13aba2c28a3c default-authenticator-webauthn-setup -d9149797-1c7d-4b62-b193-2e745f9dbb9c default-provider-authorization-consent +\. + + +-- +-- Data for Name: authentik_install_id; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_install_id (id) FROM stdin; +FA8GANUqMJwFg0drDlurF+ZQK2A6ohSjc4MGksUqN+A36yIA \. @@ -3199,11 +3407,11 @@ COPY public.authentik_policies_dummy_dummypolicy (policy_ptr_id, result, wait_mi -- Data for Name: authentik_policies_event_matcher_eventmatcherpolicy; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_policies_event_matcher_eventmatcherpolicy (policy_ptr_id, action, client_ip, app) FROM stdin; -70803949-828d-4c91-b717-71ad944e8e48 configuration_error -590a74ec-ff58-42b2-b9ba-1bc560c6724f update_available -db70f174-c06b-4716-a063-67fc36823307 policy_exception -7168d9b3-2c2c-48d3-9c6f-7f5ea85e4408 property_mapping_exception +COPY public.authentik_policies_event_matcher_eventmatcherpolicy (policy_ptr_id, action, client_ip, app, model) FROM stdin; +70803949-828d-4c91-b717-71ad944e8e48 configuration_error \N \N \N +590a74ec-ff58-42b2-b9ba-1bc560c6724f update_available \N \N \N +db70f174-c06b-4716-a063-67fc36823307 policy_exception \N \N \N +7168d9b3-2c2c-48d3-9c6f-7f5ea85e4408 property_mapping_exception \N \N \N \. @@ -3220,12 +3428,14 @@ COPY public.authentik_policies_expiry_passwordexpirypolicy (policy_ptr_id, deny_ -- COPY public.authentik_policies_expression_expressionpolicy (policy_ptr_id, expression) FROM stdin; -ac669155-b876-42a0-b998-7bfae5c3d11c # Check if we''ve not been given a username by the external IdP\n# and trigger the enrollment flow\nreturn 'username' not in context.get('prompt_data', {}) -8721edd2-c6a9-42d8-bd81-c85d528ba9d8 # This policy ensures that this flow can only be used when the user\n# is in a SSO Flow (meaning they come from an external IdP)\nreturn ak_is_sso_flow -515a8421-2f61-40ad-ab94-c9997612788b from authentik.lib.config import CONFIG\nfrom authentik.core.models import (\n USER_ATTRIBUTE_CHANGE_EMAIL,\n USER_ATTRIBUTE_CHANGE_NAME,\n USER_ATTRIBUTE_CHANGE_USERNAME\n)\nprompt_data = request.context.get("prompt_data")\n\nif not request.user.group_attributes(request.http_request).get(\n USER_ATTRIBUTE_CHANGE_EMAIL, CONFIG.y_bool("default_user_change_email", True)\n):\n if prompt_data.get("email") != request.user.email:\n ak_message("Not allowed to change email address.")\n return False\n\nif not request.user.group_attributes(request.http_request).get(\n USER_ATTRIBUTE_CHANGE_NAME, CONFIG.y_bool("default_user_change_name", True)\n):\n if prompt_data.get("name") != request.user.name:\n ak_message("Not allowed to change name.")\n return False\n\nif not request.user.group_attributes(request.http_request).get(\n USER_ATTRIBUTE_CHANGE_USERNAME, CONFIG.y_bool("default_user_change_username", True)\n):\n if prompt_data.get("username") != request.user.username:\n ak_message("Not allowed to change username.")\n return False\n\nreturn True -d892bf8e-8fde-4851-95db-c8bf8b277fe8 # This policy ensures that this flow can only be used when the user\n# is in a SSO Flow (meaning they come from an external IdP)\nreturn ak_is_sso_flow +9588cdbe-226b-4c5a-9547-3fe684ee8260 flow_plan = request.context.get("flow_plan")\nif not flow_plan:\n return True\n# If the user does not have a backend attached to it, they haven't\n# been authenticated yet and we need the password stage\nreturn not hasattr(flow_plan.context.get("pending_user"), "backend") +515a8421-2f61-40ad-ab94-c9997612788b from authentik.lib.config import CONFIG\nfrom authentik.core.models import (\n USER_ATTRIBUTE_CHANGE_EMAIL,\n USER_ATTRIBUTE_CHANGE_NAME,\n USER_ATTRIBUTE_CHANGE_USERNAME\n)\nprompt_data = request.context.get("prompt_data")\n\nif not request.user.group_attributes(request.http_request).get(\n USER_ATTRIBUTE_CHANGE_EMAIL, CONFIG.get_bool("default_user_change_email", True)\n):\n if prompt_data.get("email") != request.user.email:\n ak_message("Not allowed to change email address.")\n return False\n\nif not request.user.group_attributes(request.http_request).get(\n USER_ATTRIBUTE_CHANGE_NAME, CONFIG.get_bool("default_user_change_name", True)\n):\n if prompt_data.get("name") != request.user.name:\n ak_message("Not allowed to change name.")\n return False\n\nif not request.user.group_attributes(request.http_request).get(\n USER_ATTRIBUTE_CHANGE_USERNAME, CONFIG.get_bool("default_user_change_username", True)\n):\n if prompt_data.get("username") != request.user.username:\n ak_message("Not allowed to change username.")\n return False\n\nreturn True 83952542-88c4-404d-b62f-ff22889a5047 # This policy sets the user for the currently running flow\n# by injecting "pending_user"\nakadmin = ak_user_by(username="akadmin")\ncontext["flow_plan"].context["pending_user"] = akadmin\nreturn True fd5bfceb-8270-41f7-abef-84a47841d0e8 # This policy ensures that the setup flow can only be\n# executed when the admin user doesn''t have a password set\nakadmin = ak_user_by(username="akadmin")\nreturn not akadmin.has_usable_password() +fd3f6a6c-6623-489d-9d45-868df08c3b75 # This policy ensures that the setup flow can only be\n# used one time\nfrom authentik.flows.models import Flow, FlowAuthenticationRequirement\nFlow.objects.filter(slug="initial-setup").update(\n authentication=FlowAuthenticationRequirement.REQUIRE_SUPERUSER,\n)\nreturn True +d892bf8e-8fde-4851-95db-c8bf8b277fe8 # This policy ensures that this flow can only be used when the user\n# is in a SSO Flow (meaning they come from an external IdP)\nreturn ak_is_sso_flow +ac669155-b876-42a0-b998-7bfae5c3d11c # Check if we''ve not been given a username by the external IdP\n# and trigger the enrollment flow\nreturn 'username' not in context.get('prompt_data', {}) +8721edd2-c6a9-42d8-bd81-c85d528ba9d8 # This policy ensures that this flow can only be used when the user\n# is in a SSO Flow (meaning they come from an external IdP)\nreturn ak_is_sso_flow \. @@ -3242,16 +3452,18 @@ COPY public.authentik_policies_password_passwordpolicy (policy_ptr_id, amount_up -- COPY public.authentik_policies_policy (created, last_updated, policy_uuid, name, execution_logging) FROM stdin; -2022-10-25 09:09:08.800329+00 2022-10-25 09:10:09.573205+00 d892bf8e-8fde-4851-95db-c8bf8b277fe8 default-source-authentication-if-sso f -2022-10-25 09:09:10.070001+00 2022-10-25 09:10:12.104261+00 ac669155-b876-42a0-b998-7bfae5c3d11c default-source-enrollment-if-username f -2022-10-25 09:09:10.076908+00 2022-10-25 09:10:12.118457+00 8721edd2-c6a9-42d8-bd81-c85d528ba9d8 default-source-enrollment-if-sso f -2022-10-25 09:09:12.352255+00 2022-10-25 09:10:14.622156+00 70803949-828d-4c91-b717-71ad944e8e48 default-match-configuration-error f -2022-10-25 09:09:13.006949+00 2022-10-25 09:10:14.6496+00 590a74ec-ff58-42b2-b9ba-1bc560c6724f default-match-update f -2022-10-25 09:09:13.724566+00 2022-10-25 09:10:14.67473+00 db70f174-c06b-4716-a063-67fc36823307 default-match-policy-exception f -2022-10-25 09:09:13.728881+00 2022-10-25 09:10:14.683346+00 7168d9b3-2c2c-48d3-9c6f-7f5ea85e4408 default-match-property-mapping-exception f -2022-10-25 09:09:28.773441+00 2022-10-25 09:10:16.553121+00 83952542-88c4-404d-b62f-ff22889a5047 default-oobe-prefill-user f -2022-10-25 09:09:28.779052+00 2022-10-25 09:10:16.560446+00 fd5bfceb-8270-41f7-abef-84a47841d0e8 default-oobe-password-usable f -2022-10-25 09:09:08.5634+00 2022-10-25 09:10:17.954438+00 515a8421-2f61-40ad-ab94-c9997612788b default-user-settings-authorization f +2022-10-25 09:09:12.352255+00 2024-01-10 13:34:52.611461+00 70803949-828d-4c91-b717-71ad944e8e48 default-match-configuration-error f +2022-10-25 09:09:13.006949+00 2024-01-10 13:34:52.633986+00 590a74ec-ff58-42b2-b9ba-1bc560c6724f default-match-update f +2022-10-25 09:09:13.724566+00 2024-01-10 13:34:52.656067+00 db70f174-c06b-4716-a063-67fc36823307 default-match-policy-exception f +2022-10-25 09:09:13.728881+00 2024-01-10 13:34:52.659921+00 7168d9b3-2c2c-48d3-9c6f-7f5ea85e4408 default-match-property-mapping-exception f +2024-01-10 13:34:53.197968+00 2024-01-10 13:34:54.279244+00 9588cdbe-226b-4c5a-9547-3fe684ee8260 default-authentication-flow-password-stage f +2022-10-25 09:09:08.5634+00 2024-01-10 13:34:54.427456+00 515a8421-2f61-40ad-ab94-c9997612788b default-user-settings-authorization f +2022-10-25 09:09:10.076908+00 2024-01-10 13:36:28.483735+00 8721edd2-c6a9-42d8-bd81-c85d528ba9d8 default-source-enrollment-if-sso f +2022-10-25 09:09:28.773441+00 2024-01-10 13:36:28.635412+00 83952542-88c4-404d-b62f-ff22889a5047 default-oobe-prefill-user f +2022-10-25 09:09:28.779052+00 2024-01-10 13:36:28.638387+00 fd5bfceb-8270-41f7-abef-84a47841d0e8 default-oobe-password-usable f +2024-01-10 13:36:26.752962+00 2024-01-10 13:36:28.641341+00 fd3f6a6c-6623-489d-9d45-868df08c3b75 default-oobe-flow-set-authentication f +2022-10-25 09:09:08.800329+00 2024-01-10 13:36:28.419593+00 d892bf8e-8fde-4851-95db-c8bf8b277fe8 default-source-authentication-if-sso f +2022-10-25 09:09:10.070001+00 2024-01-10 13:36:28.480406+00 ac669155-b876-42a0-b998-7bfae5c3d11c default-source-enrollment-if-username f \. @@ -3259,16 +3471,18 @@ COPY public.authentik_policies_policy (created, last_updated, policy_uuid, name, -- Data for Name: authentik_policies_policybinding; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_policies_policybinding (policy_binding_uuid, enabled, "order", policy_id, target_id, negate, timeout, group_id, user_id) FROM stdin; -8bfc6195-0957-4be5-abb6-dcd9816a3c24 t 0 70803949-828d-4c91-b717-71ad944e8e48 1ed3e589-5391-4e46-a947-c764191091cd f 30 \N \N -486d3ed0-3097-434c-8f22-da01f1938775 t 0 590a74ec-ff58-42b2-b9ba-1bc560c6724f 5d0ae86a-0f92-4329-a141-4df745aa532d f 30 \N \N -c4525029-87a5-448a-bdf9-583b7c122fa5 t 0 db70f174-c06b-4716-a063-67fc36823307 2edcbba8-4015-494a-b14e-f86dfffcd52c f 30 \N \N -36b5a264-eea9-4d7e-b11c-36be3efaf92e t 1 7168d9b3-2c2c-48d3-9c6f-7f5ea85e4408 2edcbba8-4015-494a-b14e-f86dfffcd52c f 30 \N \N -b69908c9-bcba-4cc8-a2e6-e7d2b8e71584 t 0 fd5bfceb-8270-41f7-abef-84a47841d0e8 db71b00d-8d55-4ce6-a1a4-8fa8be93e810 f 30 \N \N -0bf4412d-93f2-4e15-b747-f6b6a5c578bc t 0 83952542-88c4-404d-b62f-ff22889a5047 563837f0-8633-46c5-8cd2-f744cb5f3591 f 30 \N \N -329669b7-205e-4ee0-a548-cd3376bd09ad t 0 d892bf8e-8fde-4851-95db-c8bf8b277fe8 181928f0-b530-4858-bee9-376597ac63ed f 30 \N \N -ffc7c71f-eba8-4535-bc55-1ab18fa165ef t 0 8721edd2-c6a9-42d8-bd81-c85d528ba9d8 63e07f88-3fd7-4180-807f-470bb3209bac f 30 \N \N -492fe6be-936e-4dc4-bca8-72a845fe3b08 t 0 ac669155-b876-42a0-b998-7bfae5c3d11c 6f6c5b88-ae7e-44ae-bdae-432893a9e4b6 f 30 \N \N +COPY public.authentik_policies_policybinding (policy_binding_uuid, enabled, "order", policy_id, target_id, negate, timeout, group_id, user_id, failure_result) FROM stdin; +8bfc6195-0957-4be5-abb6-dcd9816a3c24 t 0 70803949-828d-4c91-b717-71ad944e8e48 1ed3e589-5391-4e46-a947-c764191091cd f 30 \N \N f +486d3ed0-3097-434c-8f22-da01f1938775 t 0 590a74ec-ff58-42b2-b9ba-1bc560c6724f 5d0ae86a-0f92-4329-a141-4df745aa532d f 30 \N \N f +c4525029-87a5-448a-bdf9-583b7c122fa5 t 0 db70f174-c06b-4716-a063-67fc36823307 2edcbba8-4015-494a-b14e-f86dfffcd52c f 30 \N \N f +36b5a264-eea9-4d7e-b11c-36be3efaf92e t 1 7168d9b3-2c2c-48d3-9c6f-7f5ea85e4408 2edcbba8-4015-494a-b14e-f86dfffcd52c f 30 \N \N f +b5e045e7-4c90-4feb-8e4b-7604085119ad t 10 9588cdbe-226b-4c5a-9547-3fe684ee8260 b696e261-9362-4cbe-b864-eee1f3c04afe f 30 \N \N f +ffc7c71f-eba8-4535-bc55-1ab18fa165ef t 0 8721edd2-c6a9-42d8-bd81-c85d528ba9d8 63e07f88-3fd7-4180-807f-470bb3209bac f 30 \N \N f +492fe6be-936e-4dc4-bca8-72a845fe3b08 t 0 ac669155-b876-42a0-b998-7bfae5c3d11c 6f6c5b88-ae7e-44ae-bdae-432893a9e4b6 f 30 \N \N f +b69908c9-bcba-4cc8-a2e6-e7d2b8e71584 t 0 fd5bfceb-8270-41f7-abef-84a47841d0e8 db71b00d-8d55-4ce6-a1a4-8fa8be93e810 f 30 \N \N f +0bf4412d-93f2-4e15-b747-f6b6a5c578bc t 0 83952542-88c4-404d-b62f-ff22889a5047 563837f0-8633-46c5-8cd2-f744cb5f3591 f 30 \N \N f +8e567620-a250-4e98-b095-ffb0bef7af40 t 0 fd3f6a6c-6623-489d-9d45-868df08c3b75 49f5f048-9c0b-4d92-a103-e5eec6ab1ed2 f 30 \N \N f +329669b7-205e-4ee0-a548-cd3376bd09ad t 0 d892bf8e-8fde-4851-95db-c8bf8b277fe8 181928f0-b530-4858-bee9-376597ac63ed f 30 \N \N f \. @@ -3278,14 +3492,17 @@ ffc7c71f-eba8-4535-bc55-1ab18fa165ef t 0 8721edd2-c6a9-42d8-bd81-c85d528ba9d8 63 COPY public.authentik_policies_policybindingmodel (pbm_uuid, policy_engine_mode) FROM stdin; 77d294b5-8a50-4d6d-8edd-5b15e5871826 any +105415a2-7753-4a7f-bdf5-ed9841420289 any +e4c83e8e-69f4-4993-a0c2-f99552fd76d0 any +9fdfd009-537e-4b36-8cc8-98f62620f410 any +506b1180-4069-4dda-9405-e185f355c34d any +0e32dc99-655c-42f4-aca4-f3f271e010fd any +d7dfa1d6-58cb-4bfc-94c5-38a2e507e290 any +3d7a1eb4-72c2-44dd-bdf7-741750024ce2 any +3cb69a8b-fd96-415c-95e6-f094934905d0 any 1ed3e589-5391-4e46-a947-c764191091cd any 5d0ae86a-0f92-4329-a141-4df745aa532d any 2edcbba8-4015-494a-b14e-f86dfffcd52c any -db71b00d-8d55-4ce6-a1a4-8fa8be93e810 any -bc36ea75-31be-4dd6-b2cf-11f2e7ca7a33 any -563837f0-8633-46c5-8cd2-f744cb5f3591 any -49f5f048-9c0b-4d92-a103-e5eec6ab1ed2 any -65c208d9-e145-4259-bb87-deecf97c3643 any c0792518-ed7b-4d0f-a373-5f20c253de11 any dfabc06a-e2f8-401d-92c4-01e3185f7dc1 any 5be1e1aa-8051-417e-b03a-1a0e87cd8101 any @@ -3293,33 +3510,30 @@ dfabc06a-e2f8-401d-92c4-01e3185f7dc1 any b696e261-9362-4cbe-b864-eee1f3c04afe any 07e871ad-dc36-48ea-abf8-397cd2a612b7 any cd0bdadb-3a40-458a-bced-d62f12dcb5aa any +7c8e66c0-7a12-42bd-901f-a88fcd742a5e any +a67caf05-5165-441b-8e62-6f37fa9c2a0d any 71205979-10a2-41db-9e08-c05f1644f732 any 1f1353d5-b69c-438e-822c-c13f75fdb18a any cd98a539-1b50-4d59-b4b9-4a66b98b20fe any +c4f758ad-0e74-4b1a-a1bc-32ae3a370b69 any +303b1296-cc7f-4887-92fd-0ea0550fc6d4 any +62e82cc0-d670-4f23-8d7b-14675757dd8c any +4f206f06-1d5e-4725-8206-c58d48f5be6c any +65c208d9-e145-4259-bb87-deecf97c3643 any +ab6b7aa3-82da-4972-9158-7b7fc70ab973 any +65398796-09e1-494b-af85-8bed8b491c62 any +cba52268-0d9a-40bd-ae7f-b723f5e05671 any 181928f0-b530-4858-bee9-376597ac63ed any 88ddedff-15ef-4b45-86cf-0aebf0e55b25 any +081ce9e5-201f-48e9-af60-7c10076f0857 any 63e07f88-3fd7-4180-807f-470bb3209bac any 6f6c5b88-ae7e-44ae-bdae-432893a9e4b6 any 417e795d-6832-40b6-b083-4462357471cb any 0a3c97a9-ac46-45cb-8718-a2984fff154a any -105415a2-7753-4a7f-bdf5-ed9841420289 any -e4c83e8e-69f4-4993-a0c2-f99552fd76d0 any -9fdfd009-537e-4b36-8cc8-98f62620f410 any -506b1180-4069-4dda-9405-e185f355c34d any -0e32dc99-655c-42f4-aca4-f3f271e010fd any -7c8e66c0-7a12-42bd-901f-a88fcd742a5e any -a67caf05-5165-441b-8e62-6f37fa9c2a0d any -d7dfa1d6-58cb-4bfc-94c5-38a2e507e290 any -62e82cc0-d670-4f23-8d7b-14675757dd8c any -4f206f06-1d5e-4725-8206-c58d48f5be6c any -c4f758ad-0e74-4b1a-a1bc-32ae3a370b69 any -303b1296-cc7f-4887-92fd-0ea0550fc6d4 any -3d7a1eb4-72c2-44dd-bdf7-741750024ce2 any -3cb69a8b-fd96-415c-95e6-f094934905d0 any -cba52268-0d9a-40bd-ae7f-b723f5e05671 any -ab6b7aa3-82da-4972-9158-7b7fc70ab973 any -65398796-09e1-494b-af85-8bed8b491c62 any -081ce9e5-201f-48e9-af60-7c10076f0857 any +db71b00d-8d55-4ce6-a1a4-8fa8be93e810 any +bc36ea75-31be-4dd6-b2cf-11f2e7ca7a33 any +563837f0-8633-46c5-8cd2-f744cb5f3591 any +49f5f048-9c0b-4d92-a103-e5eec6ab1ed2 any \. @@ -3327,18 +3541,12 @@ ab6b7aa3-82da-4972-9158-7b7fc70ab973 any -- Data for Name: authentik_policies_reputation_reputation; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_policies_reputation_reputation (reputation_uuid, identifier, ip, ip_geo_data, score, updated) FROM stdin; -6fad70f3-701f-4811-a177-08a0f2f8706f admin 192.168.32.1 {} -1 2022-10-25 09:10:21.819657+00 -869cd538-3c10-477a-a152-e412430288c9 akadmin 192.168.32.1 {} 1 2022-10-25 09:10:21.829882+00 -d36ccca8-c986-4517-8110-761eac3d8be0 akadmin 192.168.48.1 {} -2 2022-10-25 09:17:04.253267+00 -f433dfcb-3aa4-4d93-8abc-6fe2c4a77f77 ldapservice 192.168.48.1 {} 5 2022-10-25 09:53:31.155505+00 -2f00817d-e5f1-4e9d-bc4e-8210b2ca2258 authentik-admin 192.168.48.1 {} 1 2022-10-25 09:54:01.492491+00 -85999073-85b3-4f12-93b8-a98b770daa41 akadmin 172.24.0.1 {} 1 2023-01-02 14:16:56.149781+00 -0eb5ae80-8ca7-4431-bac6-2032e2e5ef97 authentik-admin 172.24.0.1 {} 1 2023-01-02 16:38:23.763498+00 -774c5225-53f8-4c7e-81f5-0c604fc2a68b authentik-editor 172.21.0.1 {} 1 2023-03-13 09:22:01.579092+00 -11631826-9f70-42c7-91d1-dc7b9fee5522 ldapservice 172.21.0.1 {} 3 2023-03-13 09:21:07.539614+00 -706276b1-28cc-44db-8d47-e36acca22b2c admin 172.21.0.1 {} -1 2023-03-13 09:19:23.126928+00 -16d6956d-4d9c-429d-a135-91d5dca763e0 akadmin 172.21.0.1 {} 1 2023-03-13 09:20:07.469678+00 +COPY public.authentik_policies_reputation_reputation (reputation_uuid, identifier, ip, ip_geo_data, score, updated, expires, expiring) FROM stdin; +12dd4686-a03a-4094-984a-7df6e32666e3 akadmin 172.20.0.1 {} 1 2024-01-11 22:06:44.922067+00 2024-01-12 22:06:44.921204+00 t +c0783b41-a22c-4093-ab63-9038ad174bbb authentik-viewer 172.20.0.1 {} 1 2024-01-11 22:10:28.507575+00 2024-01-12 22:10:28.498415+00 t +318b3a5e-5b2f-4082-8b67-e1481d731d32 authentik-editor 172.20.0.1 {} 1 2024-01-11 22:10:54.126894+00 2024-01-12 22:10:54.126667+00 t +72c0af40-7d86-4724-ac14-94e405580960 ldapservice 172.20.0.8 {} 1 2024-01-11 22:11:16.091562+00 2024-01-12 22:11:16.09075+00 t +3d6a52ef-80aa-4774-a88f-67db06dd6933 authentik-admin 172.20.0.8 {} 1 2024-01-11 22:11:16.910702+00 2024-01-12 22:11:16.910258+00 t \. @@ -3354,8 +3562,8 @@ COPY public.authentik_policies_reputation_reputationpolicy (policy_ptr_id, check -- Data for Name: authentik_providers_ldap_ldapprovider; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_providers_ldap_ldapprovider (provider_ptr_id, base_dn, search_group_id, certificate_id, tls_server_name, gid_start_number, uid_start_number, search_mode, bind_mode) FROM stdin; -1 DC=ldap,DC=goauthentik,DC=io a9c6327c-cfca-4d5b-a0af-421645e43c31 \N 4000 2000 direct direct +COPY public.authentik_providers_ldap_ldapprovider (provider_ptr_id, base_dn, search_group_id, certificate_id, tls_server_name, gid_start_number, uid_start_number, search_mode, bind_mode, mfa_support) FROM stdin; +1 DC=ldap,DC=goauthentik,DC=io a9c6327c-cfca-4d5b-a0af-421645e43c31 \N 4000 2000 direct direct t \. @@ -3363,8 +3571,9 @@ COPY public.authentik_providers_ldap_ldapprovider (provider_ptr_id, base_dn, sea -- Data for Name: authentik_providers_oauth2_accesstoken; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_providers_oauth2_accesstoken (id, expires, expiring, revoked, _scope, token, _id_token, provider_id, user_id) FROM stdin; -1 2023-03-13 12:41:32.048979+00 t f openid email profile eyJhbGciOiJSUzI1NiIsImtpZCI6ImE1NmE2NjVjMGJhMTQ1MDdmY2Q0ZGU3NmZhZDdlYmNlIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjkwMDAvYXBwbGljYXRpb24vby9ncmFmYW5hLW9pZGMvIiwic3ViIjoiN2YzODgwM2NmZDM4ODVkZDU3OGUxMDZiYTU4OTg1OWVlOTk3YjQyNjhlNjcyM2VlNWYwZDA1NWQxMTU2MzAwNSIsImF1ZCI6IjQzZThkMjc0NmZlMmU1MDgzMjVhMjNjZGY4MTZkNmRkZDEyZTk0ZjEiLCJleHAiOjE2Nzg3MTEyOTIsImlhdCI6MTY3ODcxMDk5MiwiYWNyIjoiZ29hdXRoZW50aWsuaW8vcHJvdmlkZXJzL29hdXRoMi9kZWZhdWx0IiwiZW1haWwiOiJhdXRoZW50aWstZWRpdG9yQGxvY2FsaG9zdCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiYXV0aGVudGlrLWVkaXRvciIsImdpdmVuX25hbWUiOiJhdXRoZW50aWstZWRpdG9yIiwiZmFtaWx5X25hbWUiOiIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhdXRoZW50aWstZWRpdG9yIiwibmlja25hbWUiOiJhdXRoZW50aWstZWRpdG9yIiwiZ3JvdXBzIjpbImVkaXRvciIsImV4dHJhLWdyb3VwIl0sImF6cCI6IjQzZThkMjc0NmZlMmU1MDgzMjVhMjNjZGY4MTZkNmRkZDEyZTk0ZjEiLCJ1aWQiOiJXRkFwc1FpZ00wbGt1blZYazNCbVJTR3VhZXlPT0N5MjB6Q25ER3FBIn0.XMvIFaDw_xTJZYWiH76hZn-v9ClX9OU1zjRy7hCP6a3aPWcGkK7bVoLUvtG4EwZl5BlY7h2Ajut3mfWXbzGUJEwA0pXBb-cOgIEa9Mq_y9nQUH2kYs4Gfi9kyiU2CiCXQKtquIuoH5RjevPjaupICiZQ0PvLlT9mGR6QD6gAnVhK-PAObFOvy4_X6B0i8PM_nKTx8cr5KW4YwnORTc_VDcGia8iZICBb8ZzyBeHWUmXpDy5G4MoPDgyWWGQaURDEXZN_v-FH0sR3Iu2Mx_by4SkAIIYO-lFtlW51tbjPBItQdZQdXwzcsB_dKtrZXMFKwcyFSlvHStn5Hd3kyP7oR0EPlHCY1G3NA48i38IitpgokW8om8LLqtuYuv7HqbR0VsQOYNOSFw2y3SuUD4FYj966bYwiCF5HXWr6DDhpxYq1liRszwlM3DVfb1Mi5Cnopsqjn2vF2tCeEWJ3cTmiDQvV_MEovsBFerj89GxbnVbbWhNQ9qgr91tQNEFaSW61E7eXOKQfoU79JlCe6eMmNEEQ5YRK4gWfraeHwi_Fhmbtok_Lrhy-hv5hEq_mMN--3axi6_NVuL3JuRELuKBIpyU9y8LVSlcnvZnBhf_UfL1EQmv_u4-mROw06o96FxNNWaIBgUG3Qr9fVl01eI10Dgc8zVAlu-xLnvVwdVBuCpQ {"iss": "http://localhost:9000/application/o/grafana-oidc/", "sub": "7f38803cfd3885dd578e106ba589859ee997b4268e6723ee5f0d055d11563005", "aud": "43e8d2746fe2e508325a23cdf816d6ddd12e94f1", "exp": 1678711292, "iat": 1678710992, "acr": "goauthentik.io/providers/oauth2/default", "email": "authentik-editor@localhost", "email_verified": true, "name": "authentik-editor", "given_name": "authentik-editor", "family_name": "", "preferred_username": "authentik-editor", "nickname": "authentik-editor", "groups": ["editor", "extra-group"]} 3 8 +COPY public.authentik_providers_oauth2_accesstoken (id, expires, expiring, revoked, _scope, token, _id_token, provider_id, user_id, auth_time, session_id) FROM stdin; +2 2024-01-11 22:15:30.794629+00 t f openid email profile eyJhbGciOiJSUzI1NiIsImtpZCI6IjRlM2MzZDFhYjJkMmU4Y2IyMTQyZGNmNDBhOTE4OTIyIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vc3VwcG9ydC5sYWI6OTAwMC9hcHBsaWNhdGlvbi9vL2dyYWZhbmEtb2lkYy8iLCJzdWIiOiI5ZmMxOTgyODQ0MmMzODg3MzE5YjY4ZDI0OTZjYWNiMjhlOTUwY2I2MTE3ODY3MjFkMDdkMWZiNTc5ZjM5MTk5IiwiYXVkIjoiNDNlOGQyNzQ2ZmUyZTUwODMyNWEyM2NkZjgxNmQ2ZGRkMTJlOTRmMSIsImV4cCI6MTcwNTAxMTMzMCwiaWF0IjoxNzA1MDExMDMwLCJhdXRoX3RpbWUiOjE3MDUwMTEwMjgsImFjciI6ImdvYXV0aGVudGlrLmlvL3Byb3ZpZGVycy9vYXV0aDIvZGVmYXVsdCIsImVtYWlsIjoiYXV0aGVudGlrLXZpZXdlckBsb2NhbGhvc3QiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6ImF1dGhlbnRpay12aWV3ZXIiLCJnaXZlbl9uYW1lIjoiYXV0aGVudGlrLXZpZXdlciIsInByZWZlcnJlZF91c2VybmFtZSI6ImF1dGhlbnRpay12aWV3ZXIiLCJuaWNrbmFtZSI6ImF1dGhlbnRpay12aWV3ZXIiLCJncm91cHMiOlsidmlld2VyIl0sImF6cCI6IjQzZThkMjc0NmZlMmU1MDgzMjVhMjNjZGY4MTZkNmRkZDEyZTk0ZjEiLCJ1aWQiOiI3cGpvSVQwamxTZ1VXcHBKRkFXZ0pZem5ibDNjUWIyYU9VOWIwUGhBIn0.UtMubrWVhHvjwn6eRnIfTw08t_ay7HnKnilSKmmh9J7NE2mya7CWA8tQvwn2f70B6AvkAKOVbgxIcCmVfW7skixNQsK_aBONwanepBgPHqPXA7vS_9G18ITa5vLvgHKzWptGrMqa1PeJQzVbB4N_xXjYMF0iQPNgwZP9_Ikrod62QVuDylHFmQhr6wCiGEbcZ6WkkwZg2_j-O7ocVpOlcLlXOZkKV1eYkSMY21imk7PQE95AhEb1Zo4xdFCm7wckYpd_KtqkIcEvBwFotSQKkLfDECkdgMVCJbaP6HJUW3tIQ_vIAm0-B591SZcVCm4F6Jbe-edjfT-RIpHIlY9yAraei1k-HE3QwXKp7LzuOZSQq8TT1_x2F_U7ZePdk93gQ3BtomZ622eL24s2OfQKPYVFc80hNwAuk3LqFhMT4BeMtge33Hx46IXOJX-kOFU9I8jdIMPjfIdUJ53Ma-g8aSUdZqOP2SP6GJajWBMrMh-yyHy8D9nsUqZhWGNffwhcwa_ZDiMjrl9KBIMtdvW3IFwhVh9Ga2QQRGJsw_IN-s5tBz8neOcpQfs4y-bL2Ipb3GHMcr6vIhQvNE_Juf1lwOOL03K7Ofy4JVENIixF-hp7jGpSng-YV74eMtj3FqjafpCt-BkP7sus8bezVGDNomrQzDrp_NaKc1gqaqd2Ogk {"iss": "http://support.lab:9000/application/o/grafana-oidc/", "sub": "9fc19828442c3887319b68d2496cacb28e950cb611786721d07d1fb579f39199", "aud": "43e8d2746fe2e508325a23cdf816d6ddd12e94f1", "exp": 1705011330, "iat": 1705011030, "auth_time": 1705011028, "acr": "goauthentik.io/providers/oauth2/default", "amr": null, "c_hash": null, "nonce": null, "at_hash": null, "claims": {"email": "authentik-viewer@localhost", "email_verified": true, "name": "authentik-viewer", "given_name": "authentik-viewer", "preferred_username": "authentik-viewer", "nickname": "authentik-viewer", "groups": ["viewer"]}} 3 7 2024-01-11 22:10:28.148148+00 0164b59fd260313483e48a466d2a652797f7e2683b98e357c4ae595e9249414e +3 2024-01-11 22:15:54.393285+00 t f openid email profile eyJhbGciOiJSUzI1NiIsImtpZCI6IjRlM2MzZDFhYjJkMmU4Y2IyMTQyZGNmNDBhOTE4OTIyIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vc3VwcG9ydC5sYWI6OTAwMC9hcHBsaWNhdGlvbi9vL2dyYWZhbmEtb2lkYy8iLCJzdWIiOiI3ZjM4ODAzY2ZkMzg4NWRkNTc4ZTEwNmJhNTg5ODU5ZWU5OTdiNDI2OGU2NzIzZWU1ZjBkMDU1ZDExNTYzMDA1IiwiYXVkIjoiNDNlOGQyNzQ2ZmUyZTUwODMyNWEyM2NkZjgxNmQ2ZGRkMTJlOTRmMSIsImV4cCI6MTcwNTAxMTM1NCwiaWF0IjoxNzA1MDExMDU0LCJhdXRoX3RpbWUiOjE3MDUwMTEwNTQsImFjciI6ImdvYXV0aGVudGlrLmlvL3Byb3ZpZGVycy9vYXV0aDIvZGVmYXVsdCIsImVtYWlsIjoiYXV0aGVudGlrLWVkaXRvckBsb2NhbGhvc3QiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6ImF1dGhlbnRpay1lZGl0b3IiLCJnaXZlbl9uYW1lIjoiYXV0aGVudGlrLWVkaXRvciIsInByZWZlcnJlZF91c2VybmFtZSI6ImF1dGhlbnRpay1lZGl0b3IiLCJuaWNrbmFtZSI6ImF1dGhlbnRpay1lZGl0b3IiLCJncm91cHMiOlsiZWRpdG9yIiwiZXh0cmEtZ3JvdXAiXSwiYXpwIjoiNDNlOGQyNzQ2ZmUyZTUwODMyNWEyM2NkZjgxNmQ2ZGRkMTJlOTRmMSIsInVpZCI6Im12aE9YYTFISEk0TlVGdTlhcm9CVE9KSmh6RzQzUU1QS0JGa20xbTMifQ.azZ4QLiKWU05Gg4pGIVqKuPQE-cZwvLvM2kOlHqOGiIlPyro4h4R9WROd42plv9Onn7IGGsb8KNmfBehwX0tGR_0HTh046UBcv3AYU8HAJwGwLG2Bdz6L2Y7UloLhe-oRRvuAA_hd_CLV2YVeU_5539UAuJUIMd7WxFjBSE4jrEx0_KD8Ht8IjAlkuVpEprenLagmFz9XAsGCu-23xA7CoJeCMR9TXdLo_vP8uxQlntEoVPLomwLCdCkQxC3xo3evbiB-rjBj4pmjPXOMtrOsB5JdATKQarVNPcQE88IZ6K2kr7GuN102UOBequPEWwO_DtEC1nbXpFtTOwCrCmLkMDhz4bOxTsF0885piQxM7QkqozjhoSv1IxlHH6EPPCiwNdXmERrejNJ6yTjxXRr0zuJm2HYfEx3-2pue5b2uTjjWyh804S8Rh6Pxk1y7DbbifRV01QLMja2K8HX5mTKzRhDfHj5_i_3G1r57R2ybIzHwoVoKTL2gzSly5UJx3LhllxTByaBb_Edow7WXFy4qrTL6MeSYWZjDnajbQ2fbBH8gH1GmbABrr92SBNNhR_sj6lkytvVOIhLfcsukjjXx9-gOgNB4cpPuUXOvhCQhxEK5vnTKes8OhyBv2PBjPQgIPN_ke_QK3bZIMDqcAU8UFg8eVdfixNtrHtsqV9zy28 {"iss": "http://support.lab:9000/application/o/grafana-oidc/", "sub": "7f38803cfd3885dd578e106ba589859ee997b4268e6723ee5f0d055d11563005", "aud": "43e8d2746fe2e508325a23cdf816d6ddd12e94f1", "exp": 1705011354, "iat": 1705011054, "auth_time": 1705011054, "acr": "goauthentik.io/providers/oauth2/default", "amr": null, "c_hash": null, "nonce": null, "at_hash": null, "claims": {"email": "authentik-editor@localhost", "email_verified": true, "name": "authentik-editor", "given_name": "authentik-editor", "preferred_username": "authentik-editor", "nickname": "authentik-editor", "groups": ["editor", "extra-group"]}} 3 8 2024-01-11 22:10:54.076153+00 dcc4d376a787547e44300d834a6ca2a6c734d5beec7a995b55acc555207461dd \. @@ -3372,7 +3581,7 @@ COPY public.authentik_providers_oauth2_accesstoken (id, expires, expiring, revok -- Data for Name: authentik_providers_oauth2_authorizationcode; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_providers_oauth2_authorizationcode (id, expires, expiring, _scope, code, nonce, code_challenge, code_challenge_method, provider_id, user_id, revoked) FROM stdin; +COPY public.authentik_providers_oauth2_authorizationcode (id, expires, expiring, _scope, code, nonce, code_challenge, code_challenge_method, provider_id, user_id, revoked, auth_time, session_id) FROM stdin; \. @@ -3389,7 +3598,7 @@ COPY public.authentik_providers_oauth2_devicetoken (id, expires, expiring, devic -- COPY public.authentik_providers_oauth2_oauth2provider (provider_ptr_id, client_type, client_id, client_secret, redirect_uris, include_claims_in_id_token, refresh_token_validity, signing_key_id, sub_mode, issuer_mode, access_code_validity, access_token_validity) FROM stdin; -3 confidential 43e8d2746fe2e508325a23cdf816d6ddd12e94f1 e50440f14a010fd69dfed85bc6c071653f22c73e2c6c8d7ba96a936937d92040936b7e5a4bcc1bf40d5cf1dc019b1db327a1a00e2183c53471fb7530d4a09d7e .* t days=30 6304c995-9003-4fc4-9ba2-3d32016fb04e hashed_user_id per_provider minutes=1 minutes=5 +3 confidential 43e8d2746fe2e508325a23cdf816d6ddd12e94f1 e50440f14a010fd69dfed85bc6c071653f22c73e2c6c8d7ba96a936937d92040936b7e5a4bcc1bf40d5cf1dc019b1db327a1a00e2183c53471fb7530d4a09d7e .* t days=30 3fcd5d6c-3e40-43bc-b916-c7cd3675d0f1 hashed_user_id per_provider minutes=1 minutes=5 \. @@ -3405,8 +3614,9 @@ COPY public.authentik_providers_oauth2_oauth2provider_jwks_sources (id, oauth2pr -- Data for Name: authentik_providers_oauth2_refreshtoken; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_providers_oauth2_refreshtoken (id, expires, expiring, _scope, _id_token, provider_id, user_id, revoked, token) FROM stdin; -1 2023-04-12 12:36:32.048979+00 t openid email profile {"iss": "http://localhost:9000/application/o/grafana-oidc/", "sub": "7f38803cfd3885dd578e106ba589859ee997b4268e6723ee5f0d055d11563005", "aud": "43e8d2746fe2e508325a23cdf816d6ddd12e94f1", "exp": 1681302992, "iat": 1678710992, "acr": "goauthentik.io/providers/oauth2/default", "at_hash": "sbPtd6pSOzPd1Tryh_o9_w", "email": "authentik-editor@localhost", "email_verified": true, "name": "authentik-editor", "given_name": "authentik-editor", "family_name": "", "preferred_username": "authentik-editor", "nickname": "authentik-editor", "groups": ["editor", "extra-group"]} 3 8 f PyGk`BA`6ZVUI_]I/\\I`w&j@NyY~cP%>&a'TV1nz_^>2g[H1.d{f0+En=bVZ5I.y)YO9q{)^Fnf6KT09;5_s$oq="@Af/qi,/r0 +COPY public.authentik_providers_oauth2_refreshtoken (id, expires, expiring, _scope, _id_token, provider_id, user_id, revoked, token, auth_time, session_id) FROM stdin; +2 2024-02-10 22:10:30.794629+00 t openid email profile {"iss": "http://support.lab:9000/application/o/grafana-oidc/", "sub": "9fc19828442c3887319b68d2496cacb28e950cb611786721d07d1fb579f39199", "aud": "43e8d2746fe2e508325a23cdf816d6ddd12e94f1", "exp": 1707603030, "iat": 1705011031, "auth_time": 1705011028, "acr": "goauthentik.io/providers/oauth2/default", "amr": null, "c_hash": null, "nonce": null, "at_hash": "mGFSh_jKOLwb-sZBngObVw", "claims": {"email": "authentik-viewer@localhost", "email_verified": true, "name": "authentik-viewer", "given_name": "authentik-viewer", "preferred_username": "authentik-viewer", "nickname": "authentik-viewer", "groups": ["viewer"]}} 3 7 f qEy5NMin86Yonih6sBtXgK4mFdzu4owN5DHXllqESCEGxaT96jsc2utPJrpvdbf5hlSf00Ffc3Uve6SAQtLh06P9Ycv3yBIzpTFvDi6bGcLXZPO8W9cYcfI7fsqHIXq3 2024-01-11 22:10:28.148148+00 0164b59fd260313483e48a466d2a652797f7e2683b98e357c4ae595e9249414e +3 2024-02-10 22:10:54.393285+00 t openid email profile {"iss": "http://support.lab:9000/application/o/grafana-oidc/", "sub": "7f38803cfd3885dd578e106ba589859ee997b4268e6723ee5f0d055d11563005", "aud": "43e8d2746fe2e508325a23cdf816d6ddd12e94f1", "exp": 1707603054, "iat": 1705011054, "auth_time": 1705011054, "acr": "goauthentik.io/providers/oauth2/default", "amr": null, "c_hash": null, "nonce": null, "at_hash": "YdMhObdt58ReC4t7A_3USg", "claims": {"email": "authentik-editor@localhost", "email_verified": true, "name": "authentik-editor", "given_name": "authentik-editor", "preferred_username": "authentik-editor", "nickname": "authentik-editor", "groups": ["editor", "extra-group"]}} 3 8 f QaLmuHsYcDVmmoJdfZlw2ZsI1iVypVy8sZOVt8V9RErRYWGKgAGSD56yYfrTQrLv2oseM0S2pmdR8w2fK4CIUwWKYZVimfyZpsMOteeQda7XgNLQXI9zEKooou4kRttM 2024-01-11 22:10:54.076153+00 dcc4d376a787547e44300d834a6ca2a6c734d5beec7a995b55acc555207461dd \. @@ -3415,10 +3625,10 @@ COPY public.authentik_providers_oauth2_refreshtoken (id, expires, expiring, _sco -- COPY public.authentik_providers_oauth2_scopemapping (propertymapping_ptr_id, scope_name, description) FROM stdin; +d3406e7e-2c6d-4d72-acdd-dda5513b1396 ak_proxy authentik Proxy - User information 9c13a34a-6007-4846-8c28-11d6dbd235c7 openid a4825145-a8d1-4fbf-b88c-70d8cc801a4a email Email address 7446364c-faec-4cab-9191-beb2889d47b7 profile General Profile Information -d3406e7e-2c6d-4d72-acdd-dda5513b1396 ak_proxy authentik Proxy - User information \. @@ -3430,6 +3640,14 @@ COPY public.authentik_providers_proxy_proxyprovider (oauth2provider_ptr_id, inte \. +-- +-- Data for Name: authentik_providers_radius_radiusprovider; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_providers_radius_radiusprovider (provider_ptr_id, shared_secret, client_networks, mfa_support) FROM stdin; +\. + + -- -- Data for Name: authentik_providers_saml_samlpropertymapping; Type: TABLE DATA; Schema: public; Owner: authentik -- @@ -3449,8 +3667,58 @@ c5d93ce6-8cda-42fa-9c19-3837ba67788a http://schemas.xmlsoap.org/claims/Group \N -- Data for Name: authentik_providers_saml_samlprovider; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_providers_saml_samlprovider (provider_ptr_id, acs_url, audience, issuer, assertion_valid_not_before, assertion_valid_not_on_or_after, session_valid_not_on_or_after, digest_algorithm, signature_algorithm, signing_kp_id, sp_binding, verification_kp_id, name_id_mapping_id) FROM stdin; -2 http://localhost:3000/saml/acs http://localhost:3000/saml/metadata minutes=-5 minutes=5 minutes=86400 http://www.w3.org/2001/04/xmlenc#sha256 http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 6304c995-9003-4fc4-9ba2-3d32016fb04e post \N 38ac59c3-e754-44e7-9790-5108a2cd027c +COPY public.authentik_providers_saml_samlprovider (provider_ptr_id, acs_url, audience, issuer, assertion_valid_not_before, assertion_valid_not_on_or_after, session_valid_not_on_or_after, digest_algorithm, signature_algorithm, signing_kp_id, sp_binding, verification_kp_id, name_id_mapping_id, default_relay_state) FROM stdin; +2 http://localhost:3000/saml/acs http://localhost:3000/saml/metadata minutes=-5 minutes=5 minutes=86400 http://www.w3.org/2001/04/xmlenc#sha256 http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 3fcd5d6c-3e40-43bc-b916-c7cd3675d0f1 post \N 38ac59c3-e754-44e7-9790-5108a2cd027c +\. + + +-- +-- Data for Name: authentik_providers_scim_scimgroup; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_providers_scim_scimgroup (id, group_id, provider_id) FROM stdin; +\. + + +-- +-- Data for Name: authentik_providers_scim_scimmapping; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_providers_scim_scimmapping (propertymapping_ptr_id) FROM stdin; +83a19cb8-acab-44e1-884f-a0a279ae4d2d +252edb40-34ee-4f55-8ca4-4bf0a7fb445f +\. + + +-- +-- Data for Name: authentik_providers_scim_scimprovider; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_providers_scim_scimprovider (provider_ptr_id, url, token, exclude_users_service_account, filter_group_id) FROM stdin; +\. + + +-- +-- Data for Name: authentik_providers_scim_scimprovider_property_mappings_group; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_providers_scim_scimprovider_property_mappings_group (id, scimprovider_id, propertymapping_id) FROM stdin; +\. + + +-- +-- Data for Name: authentik_providers_scim_scimuser; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_providers_scim_scimuser (id, provider_id, user_id) FROM stdin; +\. + + +-- +-- Data for Name: authentik_rbac_role; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_rbac_role (uuid, name, group_id) FROM stdin; \. @@ -3459,6 +3727,7 @@ COPY public.authentik_providers_saml_samlprovider (provider_ptr_id, acs_url, aud -- COPY public.authentik_sources_ldap_ldappropertymapping (propertymapping_ptr_id, object_field) FROM stdin; +200af9d0-7476-43e1-a0fb-b7a7a68dd277 path 353b9d65-66ce-4fea-814b-e12c6e45a277 name a58eb3a5-c68d-406d-a5ff-688a6a047575 email a75310af-c0cf-4709-a66c-963d8c27e662 username @@ -3474,7 +3743,7 @@ e8809202-4ff0-4086-b078-196e6152e826 name -- Data for Name: authentik_sources_ldap_ldapsource; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_sources_ldap_ldapsource (source_ptr_id, server_uri, bind_cn, bind_password, start_tls, base_dn, additional_user_dn, additional_group_dn, user_object_filter, group_object_filter, object_uniqueness_field, sync_groups, sync_parent_group_id, sync_users, sync_users_password, group_membership_field, peer_certificate_id) FROM stdin; +COPY public.authentik_sources_ldap_ldapsource (source_ptr_id, server_uri, bind_cn, bind_password, start_tls, base_dn, additional_user_dn, additional_group_dn, user_object_filter, group_object_filter, object_uniqueness_field, sync_groups, sync_parent_group_id, sync_users, sync_users_password, group_membership_field, peer_certificate_id, client_certificate_id, sni) FROM stdin; \. @@ -3522,7 +3791,7 @@ COPY public.authentik_sources_plex_plexsourceconnection (usersourceconnection_pt -- Data for Name: authentik_sources_saml_samlsource; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_sources_saml_samlsource (source_ptr_id, issuer, sso_url, slo_url, signing_kp_id, binding_type, temporary_user_delete_after, name_id_policy, allow_idp_initiated, digest_algorithm, signature_algorithm, pre_authentication_flow_id) FROM stdin; +COPY public.authentik_sources_saml_samlsource (source_ptr_id, issuer, sso_url, slo_url, signing_kp_id, binding_type, temporary_user_delete_after, name_id_policy, allow_idp_initiated, digest_algorithm, signature_algorithm, pre_authentication_flow_id, verification_kp_id) FROM stdin; \. @@ -3538,7 +3807,7 @@ COPY public.authentik_sources_saml_usersamlsourceconnection (usersourceconnectio -- Data for Name: authentik_stages_authenticator_duo_authenticatorduostage; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_authenticator_duo_authenticatorduostage (stage_ptr_id, client_id, client_secret, api_hostname, configure_flow_id, admin_integration_key, admin_secret_key) FROM stdin; +COPY public.authentik_stages_authenticator_duo_authenticatorduostage (stage_ptr_id, client_id, client_secret, api_hostname, configure_flow_id, admin_integration_key, admin_secret_key, friendly_name) FROM stdin; \. @@ -3554,7 +3823,7 @@ COPY public.authentik_stages_authenticator_duo_duodevice (id, name, confirmed, d -- Data for Name: authentik_stages_authenticator_sms_authenticatorsmsstage; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_authenticator_sms_authenticatorsmsstage (stage_ptr_id, provider, account_sid, auth, configure_flow_id, from_number, auth_password, auth_type, verify_only, mapping_id) FROM stdin; +COPY public.authentik_stages_authenticator_sms_authenticatorsmsstage (stage_ptr_id, provider, account_sid, auth, configure_flow_id, from_number, auth_password, auth_type, verify_only, mapping_id, friendly_name) FROM stdin; \. @@ -3570,8 +3839,24 @@ COPY public.authentik_stages_authenticator_sms_smsdevice (id, name, confirmed, t -- Data for Name: authentik_stages_authenticator_static_authenticatorstaticstage; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_authenticator_static_authenticatorstaticstage (stage_ptr_id, token_count, configure_flow_id) FROM stdin; -4c0a51c3-ed6a-40d6-8889-3a3e8ac13546 6 0bcbad7c-01fc-4ed0-b3f1-a1671683d6b3 +COPY public.authentik_stages_authenticator_static_authenticatorstaticstage (stage_ptr_id, token_count, configure_flow_id, friendly_name, token_length) FROM stdin; +4c0a51c3-ed6a-40d6-8889-3a3e8ac13546 6 0bcbad7c-01fc-4ed0-b3f1-a1671683d6b3 \N 12 +\. + + +-- +-- Data for Name: authentik_stages_authenticator_static_staticdevice; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_stages_authenticator_static_staticdevice (id, name, confirmed, user_id, throttling_failure_count, throttling_failure_timestamp) FROM stdin; +\. + + +-- +-- Data for Name: authentik_stages_authenticator_static_statictoken; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_stages_authenticator_static_statictoken (id, token, device_id) FROM stdin; \. @@ -3579,8 +3864,16 @@ COPY public.authentik_stages_authenticator_static_authenticatorstaticstage (stag -- Data for Name: authentik_stages_authenticator_totp_authenticatortotpstage; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_authenticator_totp_authenticatortotpstage (stage_ptr_id, digits, configure_flow_id) FROM stdin; -0d0f2722-298b-4212-9307-640a205253bd 6 35537410-5840-48ee-ba54-76f2a7d42617 +COPY public.authentik_stages_authenticator_totp_authenticatortotpstage (stage_ptr_id, digits, configure_flow_id, friendly_name) FROM stdin; +0d0f2722-298b-4212-9307-640a205253bd 6 35537410-5840-48ee-ba54-76f2a7d42617 \N +\. + + +-- +-- Data for Name: authentik_stages_authenticator_totp_totpdevice; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_stages_authenticator_totp_totpdevice (id, name, confirmed, key, step, t0, digits, tolerance, drift, last_t, user_id, throttling_failure_count, throttling_failure_timestamp) FROM stdin; \. @@ -3605,8 +3898,8 @@ b461e46b-7c2f-4188-b4a7-7a4df1c2c142 skip {static,totp,webauthn,duo,sms} seconds -- Data for Name: authentik_stages_authenticator_webauthn_authenticatewebauth4bbe; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_authenticator_webauthn_authenticatewebauth4bbe (stage_ptr_id, configure_flow_id, user_verification, authenticator_attachment, resident_key_requirement) FROM stdin; -7dac33d8-ebb1-421c-b9d4-13aba2c28a3c 611b3458-aadd-47c1-b37e-1940bc72ede7 preferred \N preferred +COPY public.authentik_stages_authenticator_webauthn_authenticatewebauth4bbe (stage_ptr_id, configure_flow_id, user_verification, authenticator_attachment, resident_key_requirement, friendly_name) FROM stdin; +7dac33d8-ebb1-421c-b9d4-13aba2c28a3c 611b3458-aadd-47c1-b37e-1940bc72ede7 preferred \N preferred \N \. @@ -3647,7 +3940,7 @@ COPY public.authentik_stages_consent_userconsent (id, expires, expiring, applica -- Data for Name: authentik_stages_deny_denystage; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_deny_denystage (stage_ptr_id) FROM stdin; +COPY public.authentik_stages_deny_denystage (stage_ptr_id, deny_message) FROM stdin; \. @@ -3672,8 +3965,8 @@ COPY public.authentik_stages_email_emailstage (stage_ptr_id, host, port, usernam -- COPY public.authentik_stages_identification_identificationstage (stage_ptr_id, user_fields, enrollment_flow_id, recovery_flow_id, case_insensitive_matching, show_matched_user, password_stage_id, show_source_labels, passwordless_flow_id) FROM stdin; -44b8d668-3efe-4e44-aa7f-74849414f977 {email,username} \N \N t t \N f \N f4abcb7d-5f92-4890-8760-afb9effda665 {username,email} \N \N t t 95715d75-025b-4e5e-9d23-96826479906d f \N +44b8d668-3efe-4e44-aa7f-74849414f977 {email,username} \N \N t t \N f \N \. @@ -3707,8 +4000,8 @@ COPY public.authentik_stages_invitation_invitationstage (stage_ptr_id, continue_ -- COPY public.authentik_stages_password_passwordstage (stage_ptr_id, backends, configure_flow_id, failed_attempts_before_cancel) FROM stdin; -02b4a829-f9ab-45d0-adcc-11e3c165f1c4 {authentik.core.auth.InbuiltBackend,authentik.sources.ldap.auth.LDAPBackend,authentik.core.auth.TokenBackend} 4b14409d-da92-4b6c-91e8-bad06d0966c2 5 95715d75-025b-4e5e-9d23-96826479906d {authentik.core.auth.InbuiltBackend,authentik.core.auth.TokenBackend,authentik.sources.ldap.auth.LDAPBackend} 4b14409d-da92-4b6c-91e8-bad06d0966c2 5 +02b4a829-f9ab-45d0-adcc-11e3c165f1c4 {authentik.core.auth.InbuiltBackend,authentik.sources.ldap.auth.LDAPBackend,authentik.core.auth.TokenBackend} 4b14409d-da92-4b6c-91e8-bad06d0966c2 5 \. @@ -3716,14 +4009,18 @@ COPY public.authentik_stages_password_passwordstage (stage_ptr_id, backends, con -- Data for Name: authentik_stages_prompt_prompt; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_prompt_prompt (prompt_uuid, field_key, label, type, required, placeholder, "order", sub_text, placeholder_expression, name) FROM stdin; -8cbc609d-e3f5-43e6-9134-078ac015b0e6 oobe-header-text oobe-header-text static t Welcome to authentik! Please set a password for the default admin user, akadmin. 100 f oobe-header-text_stage-default-oobe-password -75430f27-c76f-4a41-863a-ca2603ed855d password Password password t Password 300 f password_default-password-change-prompt -c75f2e96-7892-43c0-94b8-815962250d00 password_repeat Password (repeat) password t Password (repeat) 301 f password_repeat_default-password-change-prompt -bb10dc15-c00c-4d51-9605-9f72be503eb3 username Username text t try:\n return user.username\nexcept:\n return '' 200 t username_default-source-enrollment-prompt -daf4b9e8-80df-4d6e-95be-bae1e4c6e9b9 name Name text t try:\n return user.name\nexcept:\n return '' 201 t name_default-user-settings -640c00a0-c1cf-437f-b3a0-4eaa689b11be email Email email t try:\n return user.email\nexcept:\n return '' 202 t email_default-user-settings -a576e417-3082-451a-8311-4149d8362889 attributes.settings.locale Locale ak-locale t try:\n return user.attributes.get("settings", {}).get("locale", "")\nexcept:\n return '' 203 t attributes.settings.locale_default-user-settings +COPY public.authentik_stages_prompt_prompt (prompt_uuid, field_key, label, type, required, placeholder, "order", sub_text, placeholder_expression, name, initial_value, initial_value_expression) FROM stdin; +53bf385b-f5b5-46b1-bae2-52fa7febccbd username Username text t Username 200 f default-user-settings-field-username try:\n return user.username\nexcept:\n return '' t +67a03d10-9859-4252-a92b-6a95210cedf5 name Name text t Name 201 f default-user-settings-field-name try:\n return user.name\nexcept:\n return '' t +e28c6f05-63c5-490e-9270-6d3eaef00007 email Email email t Email 202 f default-user-settings-field-email try:\n return user.email\nexcept:\n return '' t +d5c18367-0f00-480a-9678-c5142ed2c11f attributes.settings.locale Locale ak-locale t Locale 203 f default-user-settings-field-locale try:\n return user.attributes.get("settings", {}).get("locale", "")\nexcept:\n return '' t +5d802ff7-2a30-453f-a624-95f0fbc7bb5b password Password password t Password 300 f default-password-change-field-password f +456af4e0-d665-4cfd-9d26-95b003aa7b0c password_repeat Password (repeat) password t Password (repeat) 301 f default-password-change-field-password-repeat f +9342773a-b3f5-4f5a-9b76-91fff8fbbc21 username Username text t Username 100 f default-source-enrollment-field-username f +84314c23-a6e1-42a1-80f4-064e029ca290 oobe-header-text oobe-header-text static t Welcome to authentik! Please set a password for the default admin user, akadmin. 100 f initial-setup-field-header f +9f75ae41-6a0b-496b-8b0d-316b024317ea email Email email t Admin email 101 f initial-setup-field-email f +a59dd42c-bf08-4c14-9951-91dcc68cdd80 password Password password t Password 300 f initial-setup-field-password f +7fbf7e70-a561-42fe-8b17-12603c8971b0 password_repeat Password (repeat) password t Password (repeat) 301 f initial-setup-field-password-repeat f \. @@ -3744,17 +4041,17 @@ fa87ed01-29a6-457d-936d-4667077bba44 -- COPY public.authentik_stages_prompt_promptstage_fields (id, promptstage_id, prompt_id) FROM stdin; -3 366481d2-b22d-4993-9502-d367fb8ae7f1 c75f2e96-7892-43c0-94b8-815962250d00 -4 366481d2-b22d-4993-9502-d367fb8ae7f1 75430f27-c76f-4a41-863a-ca2603ed855d -10 fa87ed01-29a6-457d-936d-4667077bba44 640c00a0-c1cf-437f-b3a0-4eaa689b11be -11 fa87ed01-29a6-457d-936d-4667077bba44 daf4b9e8-80df-4d6e-95be-bae1e4c6e9b9 -12 fa87ed01-29a6-457d-936d-4667077bba44 a576e417-3082-451a-8311-4149d8362889 -13 fa87ed01-29a6-457d-936d-4667077bba44 bb10dc15-c00c-4d51-9605-9f72be503eb3 -14 89176b0f-7a9c-41eb-8897-6c532db04b96 bb10dc15-c00c-4d51-9605-9f72be503eb3 -19 4b3bfdf2-31ed-4b1f-8de4-1752ef0ece92 c75f2e96-7892-43c0-94b8-815962250d00 -20 4b3bfdf2-31ed-4b1f-8de4-1752ef0ece92 640c00a0-c1cf-437f-b3a0-4eaa689b11be -21 4b3bfdf2-31ed-4b1f-8de4-1752ef0ece92 8cbc609d-e3f5-43e6-9134-078ac015b0e6 -22 4b3bfdf2-31ed-4b1f-8de4-1752ef0ece92 75430f27-c76f-4a41-863a-ca2603ed855d +45 366481d2-b22d-4993-9502-d367fb8ae7f1 456af4e0-d665-4cfd-9d26-95b003aa7b0c +46 366481d2-b22d-4993-9502-d367fb8ae7f1 5d802ff7-2a30-453f-a624-95f0fbc7bb5b +51 fa87ed01-29a6-457d-936d-4667077bba44 d5c18367-0f00-480a-9678-c5142ed2c11f +52 fa87ed01-29a6-457d-936d-4667077bba44 e28c6f05-63c5-490e-9270-6d3eaef00007 +53 fa87ed01-29a6-457d-936d-4667077bba44 67a03d10-9859-4252-a92b-6a95210cedf5 +54 fa87ed01-29a6-457d-936d-4667077bba44 53bf385b-f5b5-46b1-bae2-52fa7febccbd +56 89176b0f-7a9c-41eb-8897-6c532db04b96 9342773a-b3f5-4f5a-9b76-91fff8fbbc21 +65 4b3bfdf2-31ed-4b1f-8de4-1752ef0ece92 a59dd42c-bf08-4c14-9951-91dcc68cdd80 +66 4b3bfdf2-31ed-4b1f-8de4-1752ef0ece92 7fbf7e70-a561-42fe-8b17-12603c8971b0 +67 4b3bfdf2-31ed-4b1f-8de4-1752ef0ece92 84314c23-a6e1-42a1-80f4-064e029ca290 +68 4b3bfdf2-31ed-4b1f-8de4-1752ef0ece92 9f75ae41-6a0b-496b-8b0d-316b024317ea \. @@ -3779,11 +4076,11 @@ COPY public.authentik_stages_user_delete_userdeletestage (stage_ptr_id) FROM std -- Data for Name: authentik_stages_user_login_userloginstage; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_user_login_userloginstage (stage_ptr_id, session_duration) FROM stdin; -2e18f37d-528d-4c12-b9ea-d7dbf67b56a7 seconds=0 -03fc4a51-f2e0-4844-b58b-b421ea235f34 seconds=0 -58a4b17a-a21a-4c29-a3fd-6797bd7260cc seconds=0 -8a432e54-5bb4-4199-add9-53e198eca1dc seconds=0 +COPY public.authentik_stages_user_login_userloginstage (stage_ptr_id, session_duration, terminate_other_sessions, remember_me_offset) FROM stdin; +8a432e54-5bb4-4199-add9-53e198eca1dc seconds=0 f seconds=0 +2e18f37d-528d-4c12-b9ea-d7dbf67b56a7 seconds=0 f seconds=0 +03fc4a51-f2e0-4844-b58b-b421ea235f34 seconds=0 f seconds=0 +58a4b17a-a21a-4c29-a3fd-6797bd7260cc seconds=0 f seconds=0 \. @@ -3800,10 +4097,10 @@ COPY public.authentik_stages_user_logout_userlogoutstage (stage_ptr_id) FROM std -- Data for Name: authentik_stages_user_write_userwritestage; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_user_write_userwritestage (stage_ptr_id, create_users_as_inactive, create_users_group_id, user_path_template, user_creation_mode) FROM stdin; -e87982c6-2f31-4dc5-bdce-2f680601c023 f \N create_when_required -9934f0fc-b4b4-44e0-a90d-7587844ac68b f \N create_when_required -dfc93c1c-c398-4e8f-aa34-fdc21b6accfb f \N create_when_required +COPY public.authentik_stages_user_write_userwritestage (stage_ptr_id, create_users_as_inactive, create_users_group_id, user_path_template, user_creation_mode, user_type) FROM stdin; +9934f0fc-b4b4-44e0-a90d-7587844ac68b f \N never_create external +dfc93c1c-c398-4e8f-aa34-fdc21b6accfb f \N always_create external +e87982c6-2f31-4dc5-bdce-2f680601c023 f \N never_create external \. @@ -3909,6 +4206,18 @@ COPY public.django_content_type (id, app_label, model) FROM stdin; 86 authentik_core application 87 authentik_core authenticatedsession 88 authentik_providers_oauth2 accesstoken +89 authentik_providers_radius radiusprovider +90 authentik_providers_scim scimmapping +91 authentik_providers_scim scimprovider +92 authentik_providers_scim scimuser +93 authentik_providers_scim scimgroup +94 authentik_enterprise license +95 authentik_enterprise licenseusage +96 authentik_rbac role +97 authentik_rbac systempermission +98 authentik_stages_authenticator_static staticdevice +99 authentik_stages_authenticator_static statictoken +100 authentik_stages_authenticator_totp totpdevice \. @@ -4272,10 +4581,6 @@ COPY public.django_migrations (id, app, name, applied) FROM stdin; 356 authentik_tenants 0004_tenant_flow_device_code 2022-10-25 09:01:02.570998+00 357 guardian 0001_initial 2022-10-25 09:01:02.818376+00 358 guardian 0002_generic_permissions_index 2022-10-25 09:01:02.845895+00 -359 otp_static 0001_initial 2022-10-25 09:01:02.937653+00 -360 otp_static 0002_throttling 2022-10-25 09:01:02.96972+00 -361 otp_totp 0001_initial 2022-10-25 09:01:03.019116+00 -362 otp_totp 0002_auto_20190420_0723 2022-10-25 09:01:03.049858+00 363 sessions 0001_initial 2022-10-25 09:01:03.062934+00 364 authentik_events 0001_squashed_0019_alter_notificationtransport_webhook_url 2022-10-25 09:01:03.068999+00 365 authentik_flows 0001_squashed_0007_auto_20200703_2059 2022-10-25 09:01:03.072173+00 @@ -4312,6 +4617,64 @@ COPY public.django_migrations (id, app, name, applied) FROM stdin; 396 authentik_stages_prompt 0009_prompt_name 2023-03-13 09:18:49.706828+00 397 authentik_stages_user_write 0006_userwritestage_can_create_users 2023-03-13 09:18:49.730647+00 398 authentik_stages_user_write 0007_remove_userwritestage_can_create_users_and_more 2023-03-13 09:18:49.820103+00 +399 authentik_blueprints 0003_alter_blueprintinstance_name 2024-01-10 13:34:39.219213+00 +400 authentik_flows 0025_alter_flowstagebinding_evaluate_on_plan_and_more 2024-01-10 13:34:39.299234+00 +401 authentik_core 0025_alter_provider_authorization_flow 2024-01-10 13:34:39.346809+00 +402 authentik_providers_scim 0001_initial 2024-01-10 13:34:39.633321+00 +403 authentik_providers_scim 0002_scimuser 2024-01-10 13:34:39.643609+00 +404 authentik_providers_scim 0003_scimgroup 2024-01-10 13:34:39.651202+00 +405 authentik_providers_scim 0004_scimprovider_property_mappings_group 2024-01-10 13:34:39.657027+00 +406 authentik_providers_scim 0005_scimprovider_exclude_users_service_account_and_more 2024-01-10 13:34:39.661818+00 +407 authentik_providers_scim 0006_rename_parent_group_scimprovider_filter_group 2024-01-10 13:34:39.666202+00 +408 authentik_core 0026_alter_propertymapping_name_alter_provider_name 2024-01-10 13:34:39.853588+00 +409 authentik_core 0027_alter_user_uuid 2024-01-10 13:34:39.887946+00 +410 authentik_core 0028_provider_authentication_flow 2024-01-10 13:34:39.936054+00 +411 authentik_core 0029_provider_backchannel_applications_and_more 2024-01-10 13:34:40.231447+00 +412 authentik_core 0030_user_type 2024-01-10 13:34:40.310035+00 +413 authentik_core 0031_alter_user_type 2024-01-10 13:34:40.38953+00 +414 authentik_crypto 0004_alter_certificatekeypair_name 2024-01-10 13:34:40.462454+00 +415 authentik_enterprise 0001_initial 2024-01-10 13:34:40.481606+00 +416 authentik_enterprise 0002_rename_users_license_internal_users_and_more 2024-01-10 13:34:40.498701+00 +417 authentik_outposts 0019_alter_outpost_name_and_more 2024-01-10 13:34:40.59884+00 +418 authentik_outposts 0020_alter_outpost_type 2024-01-10 13:34:40.620184+00 +419 authentik_policies 0010_alter_policy_name 2024-01-10 13:34:40.802184+00 +420 authentik_policies_event_matcher 0022_eventmatcherpolicy_model 2024-01-10 13:34:40.814569+00 +421 authentik_policies_event_matcher 0023_alter_eventmatcherpolicy_action_and_more 2024-01-10 13:34:40.88434+00 +422 authentik_providers_ldap 0003_ldapprovider_mfa_support_and_more 2024-01-10 13:34:40.929103+00 +423 authentik_providers_oauth2 0015_accesstoken_auth_time_authorizationcode_auth_time_and_more 2024-01-10 13:34:41.000612+00 +424 authentik_providers_oauth2 0016_alter_refreshtoken_token 2024-01-10 13:34:41.036692+00 +425 authentik_providers_radius 0001_initial 2024-01-10 13:34:41.082262+00 +426 authentik_sources_ldap 0003_ldapsource_client_certificate_ldapsource_sni_and_more 2024-01-10 13:34:41.287946+00 +427 authentik_sources_saml 0013_samlsource_verification_kp_and_more 2024-01-10 13:34:41.407493+00 +428 authentik_stages_authenticator_duo 0005_authenticatorduostage_friendly_name 2024-01-10 13:34:41.430002+00 +429 authentik_stages_authenticator_sms 0006_authenticatorsmsstage_friendly_name 2024-01-10 13:34:41.453801+00 +430 authentik_stages_authenticator_static 0006_authenticatorstaticstage_friendly_name 2024-01-10 13:34:41.476862+00 +431 authentik_stages_authenticator_static 0007_authenticatorstaticstage_token_length_and_more 2024-01-10 13:34:41.511476+00 +432 authentik_stages_authenticator_totp 0007_authenticatortotpstage_friendly_name 2024-01-10 13:34:41.532451+00 +433 authentik_stages_authenticator_webauthn 0008_alter_webauthndevice_credential_id 2024-01-10 13:34:41.551282+00 +434 authentik_stages_authenticator_webauthn 0009_authenticatewebauthnstage_friendly_name 2024-01-10 13:34:41.570976+00 +435 authentik_stages_prompt 0010_alter_prompt_placeholder_alter_prompt_type 2024-01-10 13:34:41.646021+00 +436 authentik_stages_prompt 0011_prompt_initial_value_prompt_initial_value_expression_and_more 2024-01-10 13:34:41.8418+00 +437 authentik_stages_user_login 0004_userloginstage_terminate_other_sessions 2024-01-10 13:34:41.858913+00 +438 authentik_stages_user_login 0005_userloginstage_remember_me_offset 2024-01-10 13:34:41.875539+00 +439 authentik_providers_scim 0001_squashed_0006_rename_parent_group_scimprovider_filter_group 2024-01-10 13:34:41.885818+00 +359 authentik_stages_authenticator_static 0008_initial 2022-10-25 09:01:02.937653+00 +360 authentik_stages_authenticator_static 0009_throttling 2022-10-25 09:01:02.96972+00 +361 authentik_stages_authenticator_totp 0008_initial 2022-10-25 09:01:03.019116+00 +362 authentik_stages_authenticator_totp 0009_auto_20190420_0723 2022-10-25 09:01:03.049858+00 +440 authentik_rbac 0001_initial 2024-01-10 13:36:11.884953+00 +441 authentik_core 0032_group_roles 2024-01-10 13:36:12.058845+00 +442 authentik_flows 0026_alter_flow_options 2024-01-10 13:36:12.080204+00 +443 authentik_flows 0027_auto_20231028_1424 2024-01-10 13:36:12.12669+00 +444 authentik_policies 0011_policybinding_failure_result_and_more 2024-01-10 13:36:12.194152+00 +445 authentik_policies_reputation 0005_reputation_expires_reputation_expiring 2024-01-10 13:36:12.207094+00 +446 authentik_providers_oauth2 0017_accesstoken_session_id_authorizationcode_session_id_and_more 2024-01-10 13:36:12.26718+00 +447 authentik_providers_radius 0002_radiusprovider_mfa_support 2024-01-10 13:36:12.281068+00 +448 authentik_providers_saml 0013_samlprovider_default_relay_state 2024-01-10 13:36:12.302128+00 +449 authentik_rbac 0002_systempermission 2024-01-10 13:36:12.308847+00 +450 authentik_stages_authenticator_totp 0010_alter_totpdevice_key 2024-01-10 13:36:12.353573+00 +451 authentik_stages_deny 0002_denystage_deny_message 2024-01-10 13:36:12.375379+00 +452 authentik_stages_user_write 0008_userwritestage_user_type 2024-01-10 13:36:12.400547+00 \. @@ -4336,33 +4699,9 @@ COPY public.guardian_groupobjectpermission (id, object_pk, content_type_id, grou -- COPY public.guardian_userobjectpermission (id, object_pk, content_type_id, permission_id, user_id) FROM stdin; -22 efe635b9-2ce7-4de4-977f-9f25b9f36d97 15 63 4 -23 1 30 125 4 -24 0c24aadc-f97e-4720-a70f-72a190b0cafc 15 63 3 -\. - - --- --- Data for Name: otp_static_staticdevice; Type: TABLE DATA; Schema: public; Owner: authentik --- - -COPY public.otp_static_staticdevice (id, name, confirmed, user_id, throttling_failure_count, throttling_failure_timestamp) FROM stdin; -\. - - --- --- Data for Name: otp_static_statictoken; Type: TABLE DATA; Schema: public; Owner: authentik --- - -COPY public.otp_static_statictoken (id, token, device_id) FROM stdin; -\. - - --- --- Data for Name: otp_totp_totpdevice; Type: TABLE DATA; Schema: public; Owner: authentik --- - -COPY public.otp_totp_totpdevice (id, name, confirmed, key, step, t0, digits, tolerance, drift, last_t, user_id, throttling_failure_count, throttling_failure_timestamp) FROM stdin; +27 efe635b9-2ce7-4de4-977f-9f25b9f36d97 15 63 4 +28 1 30 125 4 +29 0c24aadc-f97e-4720-a70f-72a190b0cafc 15 63 3 \. @@ -4384,7 +4723,14 @@ SELECT pg_catalog.setval('public.auth_group_permissions_id_seq', 1, false); -- Name: auth_permission_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.auth_permission_id_seq', 360, true); +SELECT pg_catalog.setval('public.auth_permission_id_seq', 413, true); + + +-- +-- Name: authentik_core_group_roles_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik +-- + +SELECT pg_catalog.setval('public.authentik_core_group_roles_id_seq', 1, false); -- @@ -4433,7 +4779,7 @@ SELECT pg_catalog.setval('public.authentik_core_user_pb_groups_id_seq', 7, true) -- Name: authentik_core_user_user_permissions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.authentik_core_user_user_permissions_id_seq', 34, true); +SELECT pg_catalog.setval('public.authentik_core_user_user_permissions_id_seq', 41, true); -- @@ -4461,14 +4807,14 @@ SELECT pg_catalog.setval('public.authentik_outposts_outpost_providers_id_seq', 1 -- Name: authentik_providers_oauth2_accesstoken_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.authentik_providers_oauth2_accesstoken_id_seq', 1, true); +SELECT pg_catalog.setval('public.authentik_providers_oauth2_accesstoken_id_seq', 3, true); -- -- Name: authentik_providers_oauth2_authorizationcode_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.authentik_providers_oauth2_authorizationcode_id_seq', 1, true); +SELECT pg_catalog.setval('public.authentik_providers_oauth2_authorizationcode_id_seq', 3, true); -- @@ -4489,7 +4835,14 @@ SELECT pg_catalog.setval('public.authentik_providers_oauth2_oauth2provider_jwks_ -- Name: authentik_providers_oauth2_refreshtoken_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.authentik_providers_oauth2_refreshtoken_id_seq', 1, true); +SELECT pg_catalog.setval('public.authentik_providers_oauth2_refreshtoken_id_seq', 3, true); + + +-- +-- Name: authentik_providers_scim_scimprovider_property_mappings__id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik +-- + +SELECT pg_catalog.setval('public.authentik_providers_scim_scimprovider_property_mappings__id_seq', 1, false); -- @@ -4513,6 +4866,27 @@ SELECT pg_catalog.setval('public.authentik_stages_authenticator_duo_duodevice_id SELECT pg_catalog.setval('public.authentik_stages_authenticator_sms_smsdevice_id_seq', 1, false); +-- +-- Name: authentik_stages_authenticator_static_staticdevice_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik +-- + +SELECT pg_catalog.setval('public.authentik_stages_authenticator_static_staticdevice_id_seq', 1, false); + + +-- +-- Name: authentik_stages_authenticator_static_statictoken_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik +-- + +SELECT pg_catalog.setval('public.authentik_stages_authenticator_static_statictoken_id_seq', 1, false); + + +-- +-- Name: authentik_stages_authenticator_totp_totpdevice_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik +-- + +SELECT pg_catalog.setval('public.authentik_stages_authenticator_totp_totpdevice_id_seq', 1, false); + + -- -- Name: authentik_stages_authenticator_validate_authenticatorval_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- @@ -4545,7 +4919,7 @@ SELECT pg_catalog.setval('public.authentik_stages_identification_identifications -- Name: authentik_stages_prompt_promptstage_fields_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.authentik_stages_prompt_promptstage_fields_id_seq', 22, true); +SELECT pg_catalog.setval('public.authentik_stages_prompt_promptstage_fields_id_seq', 68, true); -- @@ -4559,14 +4933,14 @@ SELECT pg_catalog.setval('public.authentik_stages_prompt_promptstage_validation_ -- Name: django_content_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.django_content_type_id_seq', 88, true); +SELECT pg_catalog.setval('public.django_content_type_id_seq', 100, true); -- -- Name: django_migrations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.django_migrations_id_seq', 398, true); +SELECT pg_catalog.setval('public.django_migrations_id_seq', 452, true); -- @@ -4580,28 +4954,7 @@ SELECT pg_catalog.setval('public.guardian_groupobjectpermission_id_seq', 1, fals -- Name: guardian_userobjectpermission_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.guardian_userobjectpermission_id_seq', 24, true); - - --- --- Name: otp_static_staticdevice_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik --- - -SELECT pg_catalog.setval('public.otp_static_staticdevice_id_seq', 1, false); - - --- --- Name: otp_static_statictoken_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik --- - -SELECT pg_catalog.setval('public.otp_static_statictoken_id_seq', 1, false); - - --- --- Name: otp_totp_totpdevice_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik --- - -SELECT pg_catalog.setval('public.otp_totp_totpdevice_id_seq', 1, false); +SELECT pg_catalog.setval('public.guardian_userobjectpermission_id_seq', 29, true); -- @@ -4660,6 +5013,14 @@ ALTER TABLE ONLY public.authentik_blueprints_blueprintinstance ADD CONSTRAINT authentik_blueprints_blueprintinstance_managed_key UNIQUE (managed); +-- +-- Name: authentik_blueprints_blueprintinstance authentik_blueprints_blueprintinstance_name_404be626_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_blueprints_blueprintinstance + ADD CONSTRAINT authentik_blueprints_blueprintinstance_name_404be626_uniq UNIQUE (name); + + -- -- Name: authentik_blueprints_blueprintinstance authentik_blueprints_blueprintinstance_name_path_982f03b6_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik -- @@ -4724,6 +5085,22 @@ ALTER TABLE ONLY public.authentik_core_group ADD CONSTRAINT authentik_core_group_pkey PRIMARY KEY (group_uuid); +-- +-- Name: authentik_core_group_roles authentik_core_group_roles_group_id_role_id_f2df9be5_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_core_group_roles + ADD CONSTRAINT authentik_core_group_roles_group_id_role_id_f2df9be5_uniq UNIQUE (group_id, role_id); + + +-- +-- Name: authentik_core_group_roles authentik_core_group_roles_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_core_group_roles + ADD CONSTRAINT authentik_core_group_roles_pkey PRIMARY KEY (id); + + -- -- Name: authentik_core_propertymapping authentik_core_propertymapping_managed_key; Type: CONSTRAINT; Schema: public; Owner: authentik -- @@ -4732,6 +5109,14 @@ ALTER TABLE ONLY public.authentik_core_propertymapping ADD CONSTRAINT authentik_core_propertymapping_managed_key UNIQUE (managed); +-- +-- Name: authentik_core_propertymapping authentik_core_propertymapping_name_a457d137_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_core_propertymapping + ADD CONSTRAINT authentik_core_propertymapping_name_a457d137_uniq UNIQUE (name); + + -- -- Name: authentik_core_propertymapping authentik_core_propertymapping_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- @@ -4748,6 +5133,14 @@ ALTER TABLE ONLY public.authentik_core_provider_property_mappings ADD CONSTRAINT authentik_core_provider__provider_id_propertymapp_cf242fa9_uniq UNIQUE (provider_id, propertymapping_id); +-- +-- Name: authentik_core_provider authentik_core_provider_name_66fc4ef4_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_core_provider + ADD CONSTRAINT authentik_core_provider_name_66fc4ef4_uniq UNIQUE (name); + + -- -- Name: authentik_core_provider authentik_core_provider_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- @@ -4892,6 +5285,14 @@ ALTER TABLE ONLY public.authentik_core_user ADD CONSTRAINT authentik_core_user_username_key UNIQUE (username); +-- +-- Name: authentik_core_user authentik_core_user_uuid_c7a047d9_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_core_user + ADD CONSTRAINT authentik_core_user_uuid_c7a047d9_uniq UNIQUE (uuid); + + -- -- Name: authentik_core_usersourceconnection authentik_core_usersourc_user_id_source_id_ad1f5aa7_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik -- @@ -4916,6 +5317,14 @@ ALTER TABLE ONLY public.authentik_crypto_certificatekeypair ADD CONSTRAINT authentik_crypto_certificatekeypair_managed_key UNIQUE (managed); +-- +-- Name: authentik_crypto_certificatekeypair authentik_crypto_certificatekeypair_name_719603a4_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_crypto_certificatekeypair + ADD CONSTRAINT authentik_crypto_certificatekeypair_name_719603a4_uniq UNIQUE (name); + + -- -- Name: authentik_crypto_certificatekeypair authentik_crypto_certificatekeypair_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- @@ -4924,6 +5333,22 @@ ALTER TABLE ONLY public.authentik_crypto_certificatekeypair ADD CONSTRAINT authentik_crypto_certificatekeypair_pkey PRIMARY KEY (kp_uuid); +-- +-- Name: authentik_enterprise_license authentik_enterprise_license_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_enterprise_license + ADD CONSTRAINT authentik_enterprise_license_pkey PRIMARY KEY (license_uuid); + + +-- +-- Name: authentik_enterprise_licenseusage authentik_enterprise_licenseusage_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_enterprise_licenseusage + ADD CONSTRAINT authentik_enterprise_licenseusage_pkey PRIMARY KEY (usage_uuid); + + -- -- Name: authentik_events_event authentik_events_event_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- @@ -5100,6 +5525,14 @@ ALTER TABLE ONLY public.authentik_outposts_outpost ADD CONSTRAINT authentik_outposts_outpost_managed_key UNIQUE (managed); +-- +-- Name: authentik_outposts_outpost authentik_outposts_outpost_name_b07e0428_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_outposts_outpost + ADD CONSTRAINT authentik_outposts_outpost_name_b07e0428_uniq UNIQUE (name); + + -- -- Name: authentik_outposts_outpost authentik_outposts_outpost_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- @@ -5116,6 +5549,14 @@ ALTER TABLE ONLY public.authentik_outposts_outpost_providers ADD CONSTRAINT authentik_outposts_outpost_providers_pkey PRIMARY KEY (id); +-- +-- Name: authentik_outposts_outpostserviceconnection authentik_outposts_outpostserviceconnection_name_ec30b5ea_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_outposts_outpostserviceconnection + ADD CONSTRAINT authentik_outposts_outpostserviceconnection_name_ec30b5ea_uniq UNIQUE (name); + + -- -- Name: authentik_outposts_outpostserviceconnection authentik_outposts_outpostserviceconnection_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- @@ -5172,6 +5613,14 @@ ALTER TABLE ONLY public.authentik_policies_policybinding ADD CONSTRAINT authentik_policies_polic_policy_id_target_id_orde_0a6ac3bd_uniq UNIQUE (policy_id, target_id, "order"); +-- +-- Name: authentik_policies_policy authentik_policies_policy_name_48caa747_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_policies_policy + ADD CONSTRAINT authentik_policies_policy_name_48caa747_uniq UNIQUE (name); + + -- -- Name: authentik_policies_policy authentik_policies_policy_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- @@ -5216,120 +5665,216 @@ ALTER TABLE ONLY public.authentik_policies_reputation_reputation -- Name: authentik_policies_reputation_reputationpolicy authentik_policies_reputation_reputationpolicy_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_policies_reputation_reputationpolicy - ADD CONSTRAINT authentik_policies_reputation_reputationpolicy_pkey PRIMARY KEY (policy_ptr_id); +ALTER TABLE ONLY public.authentik_policies_reputation_reputationpolicy + ADD CONSTRAINT authentik_policies_reputation_reputationpolicy_pkey PRIMARY KEY (policy_ptr_id); + + +-- +-- Name: authentik_providers_ldap_ldapprovider authentik_providers_ldap_ldapprovider_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_ldap_ldapprovider + ADD CONSTRAINT authentik_providers_ldap_ldapprovider_pkey PRIMARY KEY (provider_ptr_id); + + +-- +-- Name: authentik_providers_oauth2_oauth2provider_jwks_sources authentik_providers_oaut_oauth2provider_id_oauths_5151c4b7_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_oauth2_oauth2provider_jwks_sources + ADD CONSTRAINT authentik_providers_oaut_oauth2provider_id_oauths_5151c4b7_uniq UNIQUE (oauth2provider_id, oauthsource_id); + + +-- +-- Name: authentik_providers_oauth2_accesstoken authentik_providers_oauth2_accesstoken_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_oauth2_accesstoken + ADD CONSTRAINT authentik_providers_oauth2_accesstoken_pkey PRIMARY KEY (id); + + +-- +-- Name: authentik_providers_oauth2_authorizationcode authentik_providers_oauth2_authorizationcode_code_key; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_oauth2_authorizationcode + ADD CONSTRAINT authentik_providers_oauth2_authorizationcode_code_key UNIQUE (code); + + +-- +-- Name: authentik_providers_oauth2_authorizationcode authentik_providers_oauth2_authorizationcode_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_oauth2_authorizationcode + ADD CONSTRAINT authentik_providers_oauth2_authorizationcode_pkey PRIMARY KEY (id); + + +-- +-- Name: authentik_providers_oauth2_devicetoken authentik_providers_oauth2_devicetoken_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_oauth2_devicetoken + ADD CONSTRAINT authentik_providers_oauth2_devicetoken_pkey PRIMARY KEY (id); + + +-- +-- Name: authentik_providers_oauth2_oauth2provider authentik_providers_oauth2_oauth2provider_client_id_key; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_oauth2_oauth2provider + ADD CONSTRAINT authentik_providers_oauth2_oauth2provider_client_id_key UNIQUE (client_id); + + +-- +-- Name: authentik_providers_oauth2_oauth2provider_jwks_sources authentik_providers_oauth2_oauth2provider_jwks_sources_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_oauth2_oauth2provider_jwks_sources + ADD CONSTRAINT authentik_providers_oauth2_oauth2provider_jwks_sources_pkey PRIMARY KEY (id); + + +-- +-- Name: authentik_providers_oauth2_oauth2provider authentik_providers_oauth2_oauth2provider_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_oauth2_oauth2provider + ADD CONSTRAINT authentik_providers_oauth2_oauth2provider_pkey PRIMARY KEY (provider_ptr_id); + + +-- +-- Name: authentik_providers_oauth2_refreshtoken authentik_providers_oauth2_refreshtoken_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_oauth2_refreshtoken + ADD CONSTRAINT authentik_providers_oauth2_refreshtoken_pkey PRIMARY KEY (id); + + +-- +-- Name: authentik_providers_oauth2_scopemapping authentik_providers_oauth2_scopemapping_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_oauth2_scopemapping + ADD CONSTRAINT authentik_providers_oauth2_scopemapping_pkey PRIMARY KEY (propertymapping_ptr_id); + + +-- +-- Name: authentik_providers_proxy_proxyprovider authentik_providers_proxy_proxyprovider_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_proxy_proxyprovider + ADD CONSTRAINT authentik_providers_proxy_proxyprovider_pkey PRIMARY KEY (oauth2provider_ptr_id); -- --- Name: authentik_providers_ldap_ldapprovider authentik_providers_ldap_ldapprovider_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_providers_radius_radiusprovider authentik_providers_radius_radiusprovider_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_providers_ldap_ldapprovider - ADD CONSTRAINT authentik_providers_ldap_ldapprovider_pkey PRIMARY KEY (provider_ptr_id); +ALTER TABLE ONLY public.authentik_providers_radius_radiusprovider + ADD CONSTRAINT authentik_providers_radius_radiusprovider_pkey PRIMARY KEY (provider_ptr_id); -- --- Name: authentik_providers_oauth2_oauth2provider_jwks_sources authentik_providers_oaut_oauth2provider_id_oauths_5151c4b7_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_providers_saml_samlpropertymapping authentik_providers_saml_samlpropertymapping_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_providers_oauth2_oauth2provider_jwks_sources - ADD CONSTRAINT authentik_providers_oaut_oauth2provider_id_oauths_5151c4b7_uniq UNIQUE (oauth2provider_id, oauthsource_id); +ALTER TABLE ONLY public.authentik_providers_saml_samlpropertymapping + ADD CONSTRAINT authentik_providers_saml_samlpropertymapping_pkey PRIMARY KEY (propertymapping_ptr_id); -- --- Name: authentik_providers_oauth2_accesstoken authentik_providers_oauth2_accesstoken_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_providers_saml_samlprovider authentik_providers_saml_samlprovider_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_providers_oauth2_accesstoken - ADD CONSTRAINT authentik_providers_oauth2_accesstoken_pkey PRIMARY KEY (id); +ALTER TABLE ONLY public.authentik_providers_saml_samlprovider + ADD CONSTRAINT authentik_providers_saml_samlprovider_pkey PRIMARY KEY (provider_ptr_id); -- --- Name: authentik_providers_oauth2_authorizationcode authentik_providers_oauth2_authorizationcode_code_key; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_providers_scim_scimgroup authentik_providers_scim_id_group_id_provider_id_9d50d292_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_providers_oauth2_authorizationcode - ADD CONSTRAINT authentik_providers_oauth2_authorizationcode_code_key UNIQUE (code); +ALTER TABLE ONLY public.authentik_providers_scim_scimgroup + ADD CONSTRAINT authentik_providers_scim_id_group_id_provider_id_9d50d292_uniq UNIQUE (id, group_id, provider_id); -- --- Name: authentik_providers_oauth2_authorizationcode authentik_providers_oauth2_authorizationcode_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_providers_scim_scimuser authentik_providers_scim_id_user_id_provider_id_d664a1b5_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_providers_oauth2_authorizationcode - ADD CONSTRAINT authentik_providers_oauth2_authorizationcode_pkey PRIMARY KEY (id); +ALTER TABLE ONLY public.authentik_providers_scim_scimuser + ADD CONSTRAINT authentik_providers_scim_id_user_id_provider_id_d664a1b5_uniq UNIQUE (id, user_id, provider_id); -- --- Name: authentik_providers_oauth2_devicetoken authentik_providers_oauth2_devicetoken_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_providers_scim_scimgroup authentik_providers_scim_scimgroup_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_providers_oauth2_devicetoken - ADD CONSTRAINT authentik_providers_oauth2_devicetoken_pkey PRIMARY KEY (id); +ALTER TABLE ONLY public.authentik_providers_scim_scimgroup + ADD CONSTRAINT authentik_providers_scim_scimgroup_pkey PRIMARY KEY (id); -- --- Name: authentik_providers_oauth2_oauth2provider authentik_providers_oauth2_oauth2provider_client_id_key; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_providers_scim_scimmapping authentik_providers_scim_scimmapping_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_providers_oauth2_oauth2provider - ADD CONSTRAINT authentik_providers_oauth2_oauth2provider_client_id_key UNIQUE (client_id); +ALTER TABLE ONLY public.authentik_providers_scim_scimmapping + ADD CONSTRAINT authentik_providers_scim_scimmapping_pkey PRIMARY KEY (propertymapping_ptr_id); -- --- Name: authentik_providers_oauth2_oauth2provider_jwks_sources authentik_providers_oauth2_oauth2provider_jwks_sources_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_providers_scim_scimprovider_property_mappings_group authentik_providers_scim_scimprovider_id_property_32317bb5_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_providers_oauth2_oauth2provider_jwks_sources - ADD CONSTRAINT authentik_providers_oauth2_oauth2provider_jwks_sources_pkey PRIMARY KEY (id); +ALTER TABLE ONLY public.authentik_providers_scim_scimprovider_property_mappings_group + ADD CONSTRAINT authentik_providers_scim_scimprovider_id_property_32317bb5_uniq UNIQUE (scimprovider_id, propertymapping_id); -- --- Name: authentik_providers_oauth2_oauth2provider authentik_providers_oauth2_oauth2provider_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_providers_scim_scimprovider authentik_providers_scim_scimprovider_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_providers_oauth2_oauth2provider - ADD CONSTRAINT authentik_providers_oauth2_oauth2provider_pkey PRIMARY KEY (provider_ptr_id); +ALTER TABLE ONLY public.authentik_providers_scim_scimprovider + ADD CONSTRAINT authentik_providers_scim_scimprovider_pkey PRIMARY KEY (provider_ptr_id); -- --- Name: authentik_providers_oauth2_refreshtoken authentik_providers_oauth2_refreshtoken_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_providers_scim_scimprovider_property_mappings_group authentik_providers_scim_scimprovider_property_mappings_gr_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_providers_oauth2_refreshtoken - ADD CONSTRAINT authentik_providers_oauth2_refreshtoken_pkey PRIMARY KEY (id); +ALTER TABLE ONLY public.authentik_providers_scim_scimprovider_property_mappings_group + ADD CONSTRAINT authentik_providers_scim_scimprovider_property_mappings_gr_pkey PRIMARY KEY (id); -- --- Name: authentik_providers_oauth2_scopemapping authentik_providers_oauth2_scopemapping_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_providers_scim_scimuser authentik_providers_scim_scimuser_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_providers_oauth2_scopemapping - ADD CONSTRAINT authentik_providers_oauth2_scopemapping_pkey PRIMARY KEY (propertymapping_ptr_id); +ALTER TABLE ONLY public.authentik_providers_scim_scimuser + ADD CONSTRAINT authentik_providers_scim_scimuser_pkey PRIMARY KEY (id); -- --- Name: authentik_providers_proxy_proxyprovider authentik_providers_proxy_proxyprovider_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_rbac_role authentik_rbac_role_group_id_key; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_providers_proxy_proxyprovider - ADD CONSTRAINT authentik_providers_proxy_proxyprovider_pkey PRIMARY KEY (oauth2provider_ptr_id); +ALTER TABLE ONLY public.authentik_rbac_role + ADD CONSTRAINT authentik_rbac_role_group_id_key UNIQUE (group_id); -- --- Name: authentik_providers_saml_samlpropertymapping authentik_providers_saml_samlpropertymapping_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_rbac_role authentik_rbac_role_name_key; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_providers_saml_samlpropertymapping - ADD CONSTRAINT authentik_providers_saml_samlpropertymapping_pkey PRIMARY KEY (propertymapping_ptr_id); +ALTER TABLE ONLY public.authentik_rbac_role + ADD CONSTRAINT authentik_rbac_role_name_key UNIQUE (name); -- --- Name: authentik_providers_saml_samlprovider authentik_providers_saml_samlprovider_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_rbac_role authentik_rbac_role_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.authentik_providers_saml_samlprovider - ADD CONSTRAINT authentik_providers_saml_samlprovider_pkey PRIMARY KEY (provider_ptr_id); +ALTER TABLE ONLY public.authentik_rbac_role + ADD CONSTRAINT authentik_rbac_role_pkey PRIMARY KEY (uuid); -- @@ -5781,26 +6326,26 @@ ALTER TABLE ONLY public.guardian_userobjectpermission -- --- Name: otp_static_staticdevice otp_static_staticdevice_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_stages_authenticator_static_staticdevice otp_static_staticdevice_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.otp_static_staticdevice +ALTER TABLE ONLY public.authentik_stages_authenticator_static_staticdevice ADD CONSTRAINT otp_static_staticdevice_pkey PRIMARY KEY (id); -- --- Name: otp_static_statictoken otp_static_statictoken_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_stages_authenticator_static_statictoken otp_static_statictoken_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.otp_static_statictoken +ALTER TABLE ONLY public.authentik_stages_authenticator_static_statictoken ADD CONSTRAINT otp_static_statictoken_pkey PRIMARY KEY (id); -- --- Name: otp_totp_totpdevice otp_totp_totpdevice_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_stages_authenticator_totp_totpdevice otp_totp_totpdevice_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.otp_totp_totpdevice +ALTER TABLE ONLY public.authentik_stages_authenticator_totp_totpdevice ADD CONSTRAINT otp_totp_totpdevice_pkey PRIMARY KEY (id); @@ -5839,6 +6384,13 @@ CREATE INDEX auth_permission_content_type_id_2f476e4b ON public.auth_permission CREATE INDEX authentik_blueprints_blueprintinstance_managed_a2959093_like ON public.authentik_blueprints_blueprintinstance USING btree (managed text_pattern_ops); +-- +-- Name: authentik_blueprints_blueprintinstance_name_404be626_like; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_blueprints_blueprintinstance_name_404be626_like ON public.authentik_blueprints_blueprintinstance USING btree (name text_pattern_ops); + + -- -- Name: authentik_c_identif_d9d032_idx; Type: INDEX; Schema: public; Owner: authentik -- @@ -5888,6 +6440,20 @@ CREATE INDEX authentik_core_authenticatedsession_user_id_5055b6cf ON public.auth CREATE INDEX authentik_core_group_parent_id_c2cd3508 ON public.authentik_core_group USING btree (parent_id); +-- +-- Name: authentik_core_group_roles_group_id_43a283e0; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_core_group_roles_group_id_43a283e0 ON public.authentik_core_group_roles USING btree (group_id); + + +-- +-- Name: authentik_core_group_roles_role_id_5b9a84fe; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_core_group_roles_role_id_5b9a84fe ON public.authentik_core_group_roles USING btree (role_id); + + -- -- Name: authentik_core_propertymapping_managed_e1718652_like; Type: INDEX; Schema: public; Owner: authentik -- @@ -5895,6 +6461,20 @@ CREATE INDEX authentik_core_group_parent_id_c2cd3508 ON public.authentik_core_gr CREATE INDEX authentik_core_propertymapping_managed_e1718652_like ON public.authentik_core_propertymapping USING btree (managed text_pattern_ops); +-- +-- Name: authentik_core_propertymapping_name_a457d137_like; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_core_propertymapping_name_a457d137_like ON public.authentik_core_propertymapping USING btree (name text_pattern_ops); + + +-- +-- Name: authentik_core_provider_authentication_flow_id_49dea03c; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_core_provider_authentication_flow_id_49dea03c ON public.authentik_core_provider USING btree (authentication_flow_id); + + -- -- Name: authentik_core_provider_authorization_flow_id_1482437b; Type: INDEX; Schema: public; Owner: authentik -- @@ -5902,6 +6482,20 @@ CREATE INDEX authentik_core_propertymapping_managed_e1718652_like ON public.auth CREATE INDEX authentik_core_provider_authorization_flow_id_1482437b ON public.authentik_core_provider USING btree (authorization_flow_id); +-- +-- Name: authentik_core_provider_backchannel_application_id_a972ebd6; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_core_provider_backchannel_application_id_a972ebd6 ON public.authentik_core_provider USING btree (backchannel_application_id); + + +-- +-- Name: authentik_core_provider_name_66fc4ef4_like; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_core_provider_name_66fc4ef4_like ON public.authentik_core_provider USING btree (name text_pattern_ops); + + -- -- Name: authentik_core_provider_pr_propertymapping_id_7d1de2b7; Type: INDEX; Schema: public; Owner: authentik -- @@ -6049,6 +6643,20 @@ CREATE INDEX authentik_core_usersourceconnection_user_id_7f305d6f ON public.auth CREATE INDEX authentik_crypto_certificatekeypair_managed_a997712a_like ON public.authentik_crypto_certificatekeypair USING btree (managed text_pattern_ops); +-- +-- Name: authentik_crypto_certificatekeypair_name_719603a4_like; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_crypto_certificatekeypair_name_719603a4_like ON public.authentik_crypto_certificatekeypair USING btree (name text_pattern_ops); + + +-- +-- Name: authentik_e_key_523e13_hash; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_e_key_523e13_hash ON public.authentik_enterprise_license USING hash (key); + + -- -- Name: authentik_events_notificat_notificationrule_id_eccbe1d6; Type: INDEX; Schema: public; Owner: authentik -- @@ -6161,6 +6769,13 @@ CREATE INDEX authentik_outposts_dockers_tls_verification_id_769fac22 ON public.a CREATE INDEX authentik_outposts_outpost_managed_e03db044_like ON public.authentik_outposts_outpost USING btree (managed text_pattern_ops); +-- +-- Name: authentik_outposts_outpost_name_b07e0428_like; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_outposts_outpost_name_b07e0428_like ON public.authentik_outposts_outpost USING btree (name text_pattern_ops); + + -- -- Name: authentik_outposts_outpost_providers_outpost_id_eaaf025b; Type: INDEX; Schema: public; Owner: authentik -- @@ -6182,6 +6797,13 @@ CREATE INDEX authentik_outposts_outpost_providers_provider_id_7c5cb603 ON public CREATE INDEX authentik_outposts_outpost_service_connection_id_3eafd830 ON public.authentik_outposts_outpost USING btree (service_connection_id); +-- +-- Name: authentik_outposts_outpostserviceconnection_name_ec30b5ea_like; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_outposts_outpostserviceconnection_name_ec30b5ea_like ON public.authentik_outposts_outpostserviceconnection USING btree (name text_pattern_ops); + + -- -- Name: authentik_p_group_i_5d2d24_idx; Type: INDEX; Schema: public; Owner: authentik -- @@ -6252,6 +6874,13 @@ CREATE INDEX authentik_p_target__2e4d50_idx ON public.authentik_policies_policyb CREATE INDEX authentik_p_user_id_603323_idx ON public.authentik_policies_policybinding USING btree (user_id); +-- +-- Name: authentik_policies_policy_name_48caa747_like; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_policies_policy_name_48caa747_like ON public.authentik_policies_policy USING btree (name text_pattern_ops); + + -- -- Name: authentik_policies_policybinding_group_id_2afb13ee; Type: INDEX; Schema: public; Owner: authentik -- @@ -6413,6 +7042,83 @@ CREATE INDEX authentik_providers_saml_s_verification_kp_id_7b0fbd80 ON public.au CREATE INDEX authentik_providers_saml_samlprovider_signing_kp_id_f1bce700 ON public.authentik_providers_saml_samlprovider USING btree (signing_kp_id); +-- +-- Name: authentik_providers_scim_s_propertymapping_id_7ea3950a; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_providers_scim_s_propertymapping_id_7ea3950a ON public.authentik_providers_scim_scimprovider_property_mappings_group USING btree (propertymapping_id); + + +-- +-- Name: authentik_providers_scim_s_scimprovider_id_c3c41ae0; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_providers_scim_s_scimprovider_id_c3c41ae0 ON public.authentik_providers_scim_scimprovider_property_mappings_group USING btree (scimprovider_id); + + +-- +-- Name: authentik_providers_scim_scimgroup_group_id_071f6834; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_providers_scim_scimgroup_group_id_071f6834 ON public.authentik_providers_scim_scimgroup USING btree (group_id); + + +-- +-- Name: authentik_providers_scim_scimgroup_id_96ae7587_like; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_providers_scim_scimgroup_id_96ae7587_like ON public.authentik_providers_scim_scimgroup USING btree (id text_pattern_ops); + + +-- +-- Name: authentik_providers_scim_scimgroup_provider_id_29f58417; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_providers_scim_scimgroup_provider_id_29f58417 ON public.authentik_providers_scim_scimgroup USING btree (provider_id); + + +-- +-- Name: authentik_providers_scim_scimprovider_filter_group_id_1aca1276; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_providers_scim_scimprovider_filter_group_id_1aca1276 ON public.authentik_providers_scim_scimprovider USING btree (filter_group_id); + + +-- +-- Name: authentik_providers_scim_scimuser_id_64507c6f_like; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_providers_scim_scimuser_id_64507c6f_like ON public.authentik_providers_scim_scimuser USING btree (id text_pattern_ops); + + +-- +-- Name: authentik_providers_scim_scimuser_provider_id_08127ac7; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_providers_scim_scimuser_provider_id_08127ac7 ON public.authentik_providers_scim_scimuser USING btree (provider_id); + + +-- +-- Name: authentik_providers_scim_scimuser_user_id_63e0ca83; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_providers_scim_scimuser_user_id_63e0ca83 ON public.authentik_providers_scim_scimuser USING btree (user_id); + + +-- +-- Name: authentik_rbac_role_name_94e9e999_like; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_rbac_role_name_94e9e999_like ON public.authentik_rbac_role USING btree (name text_pattern_ops); + + +-- +-- Name: authentik_sources_ldap_lda_client_certificate_id_937bc1c9; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_sources_ldap_lda_client_certificate_id_937bc1c9 ON public.authentik_sources_ldap_ldapsource USING btree (client_certificate_id); + + -- -- Name: authentik_sources_ldap_lda_ldapsource_id_4eff95ce; Type: INDEX; Schema: public; Owner: authentik -- @@ -6456,10 +7162,10 @@ CREATE INDEX authentik_sources_saml_samlsource_signing_kp_id_faae605c ON public. -- --- Name: authentik_stages_authent_credential_id_4260aaee_like; Type: INDEX; Schema: public; Owner: authentik +-- Name: authentik_sources_saml_samlsource_verification_kp_id_f76620d9; Type: INDEX; Schema: public; Owner: authentik -- -CREATE INDEX authentik_stages_authent_credential_id_4260aaee_like ON public.authentik_stages_authenticator_webauthn_webauthndevice USING btree (credential_id varchar_pattern_ops); +CREATE INDEX authentik_sources_saml_samlsource_verification_kp_id_f76620d9 ON public.authentik_sources_saml_samlsource USING btree (verification_kp_id); -- @@ -6809,35 +7515,35 @@ CREATE INDEX guardian_userobjectpermission_user_id_d5c1e964 ON public.guardian_u -- Name: otp_static_staticdevice_user_id_7f9cff2b; Type: INDEX; Schema: public; Owner: authentik -- -CREATE INDEX otp_static_staticdevice_user_id_7f9cff2b ON public.otp_static_staticdevice USING btree (user_id); +CREATE INDEX otp_static_staticdevice_user_id_7f9cff2b ON public.authentik_stages_authenticator_static_staticdevice USING btree (user_id); -- -- Name: otp_static_statictoken_device_id_74b7c7d1; Type: INDEX; Schema: public; Owner: authentik -- -CREATE INDEX otp_static_statictoken_device_id_74b7c7d1 ON public.otp_static_statictoken USING btree (device_id); +CREATE INDEX otp_static_statictoken_device_id_74b7c7d1 ON public.authentik_stages_authenticator_static_statictoken USING btree (device_id); -- -- Name: otp_static_statictoken_token_d0a51866; Type: INDEX; Schema: public; Owner: authentik -- -CREATE INDEX otp_static_statictoken_token_d0a51866 ON public.otp_static_statictoken USING btree (token); +CREATE INDEX otp_static_statictoken_token_d0a51866 ON public.authentik_stages_authenticator_static_statictoken USING btree (token); -- -- Name: otp_static_statictoken_token_d0a51866_like; Type: INDEX; Schema: public; Owner: authentik -- -CREATE INDEX otp_static_statictoken_token_d0a51866_like ON public.otp_static_statictoken USING btree (token varchar_pattern_ops); +CREATE INDEX otp_static_statictoken_token_d0a51866_like ON public.authentik_stages_authenticator_static_statictoken USING btree (token varchar_pattern_ops); -- -- Name: otp_totp_totpdevice_user_id_0fb18292; Type: INDEX; Schema: public; Owner: authentik -- -CREATE INDEX otp_totp_totpdevice_user_id_0fb18292 ON public.otp_totp_totpdevice USING btree (user_id); +CREATE INDEX otp_totp_totpdevice_user_id_0fb18292 ON public.authentik_stages_authenticator_totp_totpdevice USING btree (user_id); -- @@ -6888,6 +7594,14 @@ ALTER TABLE ONLY public.authentik_core_authenticatedsession ADD CONSTRAINT authentik_core_authe_user_id_5055b6cf_fk_authentik FOREIGN KEY (user_id) REFERENCES public.authentik_core_user(id) DEFERRABLE INITIALLY DEFERRED; +-- +-- Name: authentik_core_group_roles authentik_core_group_group_id_43a283e0_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_core_group_roles + ADD CONSTRAINT authentik_core_group_group_id_43a283e0_fk_authentik FOREIGN KEY (group_id) REFERENCES public.authentik_core_group(group_uuid) DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: authentik_core_group authentik_core_group_parent_id_c2cd3508_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- @@ -6896,6 +7610,22 @@ ALTER TABLE ONLY public.authentik_core_group ADD CONSTRAINT authentik_core_group_parent_id_c2cd3508_fk_authentik FOREIGN KEY (parent_id) REFERENCES public.authentik_core_group(group_uuid) DEFERRABLE INITIALLY DEFERRED; +-- +-- Name: authentik_core_group_roles authentik_core_group_role_id_5b9a84fe_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_core_group_roles + ADD CONSTRAINT authentik_core_group_role_id_5b9a84fe_fk_authentik FOREIGN KEY (role_id) REFERENCES public.authentik_rbac_role(uuid) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: authentik_core_provider authentik_core_provi_authentication_flow__49dea03c_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_core_provider + ADD CONSTRAINT authentik_core_provi_authentication_flow__49dea03c_fk_authentik FOREIGN KEY (authentication_flow_id) REFERENCES public.authentik_flows_flow(flow_uuid) DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: authentik_core_provider authentik_core_provi_authorization_flow_i_1482437b_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- @@ -6904,6 +7634,14 @@ ALTER TABLE ONLY public.authentik_core_provider ADD CONSTRAINT authentik_core_provi_authorization_flow_i_1482437b_fk_authentik FOREIGN KEY (authorization_flow_id) REFERENCES public.authentik_flows_flow(flow_uuid) DEFERRABLE INITIALLY DEFERRED; +-- +-- Name: authentik_core_provider authentik_core_provi_backchannel_applicat_a972ebd6_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_core_provider + ADD CONSTRAINT authentik_core_provi_backchannel_applicat_a972ebd6_fk_authentik FOREIGN KEY (backchannel_application_id) REFERENCES public.authentik_core_application(policybindingmodel_ptr_id) DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: authentik_core_provider_property_mappings authentik_core_provi_propertymapping_id_7d1de2b7_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- @@ -7296,6 +8034,22 @@ ALTER TABLE ONLY public.authentik_providers_proxy_proxyprovider ADD CONSTRAINT authentik_providers__certificate_id_b1e0c422_fk_authentik FOREIGN KEY (certificate_id) REFERENCES public.authentik_crypto_certificatekeypair(kp_uuid) DEFERRABLE INITIALLY DEFERRED; +-- +-- Name: authentik_providers_scim_scimprovider authentik_providers__filter_group_id_1aca1276_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_scim_scimprovider + ADD CONSTRAINT authentik_providers__filter_group_id_1aca1276_fk_authentik FOREIGN KEY (filter_group_id) REFERENCES public.authentik_core_group(group_uuid) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: authentik_providers_scim_scimgroup authentik_providers__group_id_071f6834_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_scim_scimgroup + ADD CONSTRAINT authentik_providers__group_id_071f6834_fk_authentik FOREIGN KEY (group_id) REFERENCES public.authentik_core_group(group_uuid) DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: authentik_providers_saml_samlprovider authentik_providers__name_id_mapping_id_5d45f77f_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- @@ -7328,6 +8082,14 @@ ALTER TABLE ONLY public.authentik_providers_oauth2_oauth2provider_jwks_sources ADD CONSTRAINT authentik_providers__oauthsource_id_41457c33_fk_authentik FOREIGN KEY (oauthsource_id) REFERENCES public.authentik_sources_oauth_oauthsource(source_ptr_id) DEFERRABLE INITIALLY DEFERRED; +-- +-- Name: authentik_providers_scim_scimprovider_property_mappings_group authentik_providers__propertymapping_id_7ea3950a_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_scim_scimprovider_property_mappings_group + ADD CONSTRAINT authentik_providers__propertymapping_id_7ea3950a_fk_authentik FOREIGN KEY (propertymapping_id) REFERENCES public.authentik_core_propertymapping(pm_uuid) DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: authentik_providers_oauth2_scopemapping authentik_providers__propertymapping_ptr__37f1d926_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- @@ -7344,6 +8106,30 @@ ALTER TABLE ONLY public.authentik_providers_saml_samlpropertymapping ADD CONSTRAINT authentik_providers__propertymapping_ptr__812e8cfb_fk_authentik FOREIGN KEY (propertymapping_ptr_id) REFERENCES public.authentik_core_propertymapping(pm_uuid) DEFERRABLE INITIALLY DEFERRED; +-- +-- Name: authentik_providers_scim_scimmapping authentik_providers__propertymapping_ptr__bd79ae32_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_scim_scimmapping + ADD CONSTRAINT authentik_providers__propertymapping_ptr__bd79ae32_fk_authentik FOREIGN KEY (propertymapping_ptr_id) REFERENCES public.authentik_core_propertymapping(pm_uuid) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: authentik_providers_scim_scimuser authentik_providers__provider_id_08127ac7_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_scim_scimuser + ADD CONSTRAINT authentik_providers__provider_id_08127ac7_fk_authentik FOREIGN KEY (provider_id) REFERENCES public.authentik_providers_scim_scimprovider(provider_ptr_id) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: authentik_providers_scim_scimgroup authentik_providers__provider_id_29f58417_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_scim_scimgroup + ADD CONSTRAINT authentik_providers__provider_id_29f58417_fk_authentik FOREIGN KEY (provider_id) REFERENCES public.authentik_providers_scim_scimprovider(provider_ptr_id) DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: authentik_providers_oauth2_accesstoken authentik_providers__provider_id_40ef5d24_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- @@ -7392,6 +8178,22 @@ ALTER TABLE ONLY public.authentik_providers_oauth2_oauth2provider ADD CONSTRAINT authentik_providers__provider_ptr_id_76903270_fk_authentik FOREIGN KEY (provider_ptr_id) REFERENCES public.authentik_core_provider(id) DEFERRABLE INITIALLY DEFERRED; +-- +-- Name: authentik_providers_scim_scimprovider authentik_providers__provider_ptr_id_77bcf9bd_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_scim_scimprovider + ADD CONSTRAINT authentik_providers__provider_ptr_id_77bcf9bd_fk_authentik FOREIGN KEY (provider_ptr_id) REFERENCES public.authentik_core_provider(id) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: authentik_providers_radius_radiusprovider authentik_providers__provider_ptr_id_908e5d8a_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_radius_radiusprovider + ADD CONSTRAINT authentik_providers__provider_ptr_id_908e5d8a_fk_authentik FOREIGN KEY (provider_ptr_id) REFERENCES public.authentik_core_provider(id) DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: authentik_providers_ldap_ldapprovider authentik_providers__provider_ptr_id_deae38fd_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- @@ -7400,6 +8202,14 @@ ALTER TABLE ONLY public.authentik_providers_ldap_ldapprovider ADD CONSTRAINT authentik_providers__provider_ptr_id_deae38fd_fk_authentik FOREIGN KEY (provider_ptr_id) REFERENCES public.authentik_core_provider(id) DEFERRABLE INITIALLY DEFERRED; +-- +-- Name: authentik_providers_scim_scimprovider_property_mappings_group authentik_providers__scimprovider_id_c3c41ae0_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_scim_scimprovider_property_mappings_group + ADD CONSTRAINT authentik_providers__scimprovider_id_c3c41ae0_fk_authentik FOREIGN KEY (scimprovider_id) REFERENCES public.authentik_providers_scim_scimprovider(provider_ptr_id) DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: authentik_providers_ldap_ldapprovider authentik_providers__search_group_id_64713cfa_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- @@ -7432,6 +8242,14 @@ ALTER TABLE ONLY public.authentik_providers_oauth2_devicetoken ADD CONSTRAINT authentik_providers__user_id_17317b6d_fk_authentik FOREIGN KEY (user_id) REFERENCES public.authentik_core_user(id) DEFERRABLE INITIALLY DEFERRED; +-- +-- Name: authentik_providers_scim_scimuser authentik_providers__user_id_63e0ca83_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_scim_scimuser + ADD CONSTRAINT authentik_providers__user_id_63e0ca83_fk_authentik FOREIGN KEY (user_id) REFERENCES public.authentik_core_user(id) DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: authentik_providers_oauth2_accesstoken authentik_providers__user_id_7261588f_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- @@ -7464,6 +8282,22 @@ ALTER TABLE ONLY public.authentik_providers_saml_samlprovider ADD CONSTRAINT authentik_providers__verification_kp_id_7b0fbd80_fk_authentik FOREIGN KEY (verification_kp_id) REFERENCES public.authentik_crypto_certificatekeypair(kp_uuid) DEFERRABLE INITIALLY DEFERRED; +-- +-- Name: authentik_rbac_role authentik_rbac_role_group_id_d8509027_fk_auth_group_id; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_rbac_role + ADD CONSTRAINT authentik_rbac_role_group_id_d8509027_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES public.auth_group(id) DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: authentik_sources_ldap_ldapsource authentik_sources_ld_client_certificate_i_937bc1c9_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_sources_ldap_ldapsource + ADD CONSTRAINT authentik_sources_ld_client_certificate_i_937bc1c9_fk_authentik FOREIGN KEY (client_certificate_id) REFERENCES public.authentik_crypto_certificatekeypair(kp_uuid) DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: authentik_sources_ldap_ldapsource_property_mappings_group authentik_sources_ld_ldapsource_id_4eff95ce_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- @@ -7576,6 +8410,14 @@ ALTER TABLE ONLY public.authentik_sources_saml_usersamlsourceconnection ADD CONSTRAINT authentik_sources_sa_usersourceconnection_b6d9dcfe_fk_authentik FOREIGN KEY (usersourceconnection_ptr_id) REFERENCES public.authentik_core_usersourceconnection(id) DEFERRABLE INITIALLY DEFERRED; +-- +-- Name: authentik_sources_saml_samlsource authentik_sources_sa_verification_kp_id_f76620d9_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_sources_saml_samlsource + ADD CONSTRAINT authentik_sources_sa_verification_kp_id_f76620d9_fk_authentik FOREIGN KEY (verification_kp_id) REFERENCES public.authentik_crypto_certificatekeypair(kp_uuid) DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: authentik_stages_authenticator_validate_authenticatorvalida3e25 authentik_stages_aut_authenticatorvalidat_aff63c61_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- @@ -8065,26 +8907,26 @@ ALTER TABLE ONLY public.guardian_userobjectpermission -- --- Name: otp_static_staticdevice otp_static_staticdev_user_id_7f9cff2b_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_stages_authenticator_static_staticdevice otp_static_staticdev_user_id_7f9cff2b_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.otp_static_staticdevice +ALTER TABLE ONLY public.authentik_stages_authenticator_static_staticdevice ADD CONSTRAINT otp_static_staticdev_user_id_7f9cff2b_fk_authentik FOREIGN KEY (user_id) REFERENCES public.authentik_core_user(id) DEFERRABLE INITIALLY DEFERRED; -- --- Name: otp_static_statictoken otp_static_statictok_device_id_74b7c7d1_fk_otp_stati; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_stages_authenticator_static_statictoken otp_static_statictok_device_id_74b7c7d1_fk_otp_stati; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.otp_static_statictoken - ADD CONSTRAINT otp_static_statictok_device_id_74b7c7d1_fk_otp_stati FOREIGN KEY (device_id) REFERENCES public.otp_static_staticdevice(id) DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE ONLY public.authentik_stages_authenticator_static_statictoken + ADD CONSTRAINT otp_static_statictok_device_id_74b7c7d1_fk_otp_stati FOREIGN KEY (device_id) REFERENCES public.authentik_stages_authenticator_static_staticdevice(id) DEFERRABLE INITIALLY DEFERRED; -- --- Name: otp_totp_totpdevice otp_totp_totpdevice_user_id_0fb18292_fk_authentik_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- Name: authentik_stages_authenticator_totp_totpdevice otp_totp_totpdevice_user_id_0fb18292_fk_authentik_core_user_id; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- -ALTER TABLE ONLY public.otp_totp_totpdevice +ALTER TABLE ONLY public.authentik_stages_authenticator_totp_totpdevice ADD CONSTRAINT otp_totp_totpdevice_user_id_0fb18292_fk_authentik_core_user_id FOREIGN KEY (user_id) REFERENCES public.authentik_core_user(id) DEFERRABLE INITIALLY DEFERRED; diff --git a/devenv/docker/blocks/auth/authentik/docker-compose.yaml b/devenv/docker/blocks/auth/authentik/docker-compose.yaml index 997652afd9325..5457ed51460dd 100644 --- a/devenv/docker/blocks/auth/authentik/docker-compose.yaml +++ b/devenv/docker/blocks/auth/authentik/docker-compose.yaml @@ -39,7 +39,7 @@ - "authentik:authentik" authentik: - image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.10.4} + image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.10.6} restart: unless-stopped container_name: authentik command: server @@ -66,7 +66,7 @@ - "authentikredis:authentikredis" authentik-worker: - image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.10.4} + image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.10.6} restart: unless-stopped container_name: authentik-worker command: worker diff --git a/devenv/docker/blocks/auth/jwt_proxy/cloak.sql b/devenv/docker/blocks/auth/jwt_proxy/cloak.sql index 653caaa1e2223..ec1c6f005a5b7 100644 --- a/devenv/docker/blocks/auth/jwt_proxy/cloak.sql +++ b/devenv/docker/blocks/auth/jwt_proxy/cloak.sql @@ -2,8 +2,8 @@ -- PostgreSQL database dump -- --- Dumped from database version 12.2 (Debian 12.2-2.pgdg100+1) --- Dumped by pg_dump version 12.2 (Debian 12.2-2.pgdg100+1) +-- Dumped from database version 16.1 +-- Dumped by pg_dump version 16.1 SET statement_timeout = 0; SET lock_timeout = 0; @@ -386,7 +386,7 @@ CREATE TABLE public.component_config ( id character varying(36) NOT NULL, component_id character varying(36) NOT NULL, name character varying(255) NOT NULL, - value character varying(4000) + value text ); @@ -488,7 +488,8 @@ CREATE TABLE public.event_entity ( session_id character varying(255), event_time bigint, type character varying(255), - user_id character varying(255) + user_id character varying(255), + details_json_long_value text ); @@ -1097,7 +1098,7 @@ ALTER TABLE public.resource_scope OWNER TO keycloak; CREATE TABLE public.resource_server ( id character varying(36) NOT NULL, allow_rs_remote_mgmt boolean DEFAULT false NOT NULL, - policy_enforce_mode character varying(15) NOT NULL, + policy_enforce_mode smallint NOT NULL, decision_strategy smallint DEFAULT 1 NOT NULL ); @@ -1132,8 +1133,8 @@ CREATE TABLE public.resource_server_policy ( name character varying(255) NOT NULL, description character varying(255), type character varying(255) NOT NULL, - decision_strategy character varying(20), - logic character varying(20), + decision_strategy smallint, + logic smallint, resource_server_id character varying(36) NOT NULL, owner character varying(255) ); @@ -1484,7 +1485,6 @@ bfbcc1e9-f129-4336-a0cd-b6960a811bd9 \N direct-grant-validate-password master 5f 5a2470c4-3136-4cf0-8383-e74a413ccd48 \N direct-grant-validate-otp master 99865746-4232-46f0-84b5-20952fe9eb51 0 20 f \N \N 47c96943-ad68-4d93-afff-ff54fc86eb0b \N registration-page-form master 1695e7d2-ad80-4502-8479-8121a6e2a2f0 0 10 t 8fb96669-d28d-4173-a8f4-dc24d41c7d27 \N a6678624-1bd4-4793-bfac-68551cf0ac7c \N registration-user-creation master 8fb96669-d28d-4173-a8f4-dc24d41c7d27 0 20 f \N \N -5b45827d-5dfd-4152-a99e-373cb975ef87 \N registration-profile-action master 8fb96669-d28d-4173-a8f4-dc24d41c7d27 0 40 f \N \N 5a2fb70d-63ae-4604-b37c-ae043d6a900d \N registration-password-action master 8fb96669-d28d-4173-a8f4-dc24d41c7d27 0 50 f \N \N 0b06a30e-daa7-498a-9fdb-899abbf36450 \N registration-recaptcha-action master 8fb96669-d28d-4173-a8f4-dc24d41c7d27 3 60 f \N \N b6ab0b5d-8184-4609-bb81-da8413dfb858 \N reset-credentials-choose-user master 954b046d-2b24-405e-84ee-c44ffe603df2 0 10 f \N \N @@ -1511,11 +1511,6 @@ d600bb67-e258-44be-8f69-f1bae9c35a0f \N idp-username-password-form master ca3a36 90cc39a9-cddb-49bd-b9f5-d64d03341333 \N auth-otp-form master a7d23655-efbb-4950-8ab6-50dbc85681a0 0 20 f \N \N b0634301-594e-42db-9736-6c90ebbeb8b2 \N http-basic-authenticator master 57c56583-d91c-4399-bd15-05a1a17d48c1 0 10 f \N \N 34fa4d44-716b-4b2a-b98e-aa9748154292 \N docker-http-basic-authenticator master 032b05cf-0007-44da-a370-b42039f6b762 0 10 f \N \N -4838277a-46ea-4d95-bd86-d8dc6fdce352 \N no-cookie-redirect master 1c7af06b-3085-46c3-849c-34c67f581b9e 0 10 f \N \N -59a349ee-20ce-42d8-b20b-8f902c09742d \N \N master 1c7af06b-3085-46c3-849c-34c67f581b9e 0 20 t 85c00992-77dd-4262-8744-a9dd8521e98e \N -d9b5fa46-6595-4406-9841-2c0720dbf644 \N basic-auth master 85c00992-77dd-4262-8744-a9dd8521e98e 0 10 f \N \N -3a4ee6f1-1528-47c7-aeda-f317248b3b93 \N basic-auth-otp master 85c00992-77dd-4262-8744-a9dd8521e98e 3 20 f \N \N -014847fc-06df-4ddf-a8f2-deeb0f1eb59a \N auth-spnego master 85c00992-77dd-4262-8744-a9dd8521e98e 3 30 f \N \N b46bc4f6-2fe5-44d5-b47f-36880742cf50 \N auth-cookie grafana a38aeb47-f27e-4e68-82ff-7cc7371a47a7 2 10 f \N \N 6cec48cc-066a-4e3e-8158-85351bfa4c27 \N auth-spnego grafana a38aeb47-f27e-4e68-82ff-7cc7371a47a7 3 20 f \N \N 63c55c5a-ad11-4f83-9d6e-d8ca2efcaf66 \N identity-provider-redirector grafana a38aeb47-f27e-4e68-82ff-7cc7371a47a7 2 25 f \N \N @@ -1530,7 +1525,6 @@ b46bc4f6-2fe5-44d5-b47f-36880742cf50 \N auth-cookie grafana a38aeb47-f27e-4e68-8 d87abeef-9f1d-46f5-9f36-acd7eaf21a72 \N direct-grant-validate-otp grafana b3491338-0630-4232-97e7-a518c254b248 0 20 f \N \N 4f204bab-0311-44b4-80b6-37d23fd0fd5a \N registration-page-form grafana 9d02badd-cb1c-4655-bf5e-f888861433ff 0 10 t c3ed2ad1-cfb4-49fa-8c75-cf5047527c68 \N 2d4ee446-623c-42a0-8d4a-9f6c4f7f28ec \N registration-user-creation grafana c3ed2ad1-cfb4-49fa-8c75-cf5047527c68 0 20 f \N \N -d806effc-dd17-4468-9a98-4e1c2f9e799d \N registration-profile-action grafana c3ed2ad1-cfb4-49fa-8c75-cf5047527c68 0 40 f \N \N 306fa749-c191-43c6-bf04-0eb6d3d02732 \N registration-password-action grafana c3ed2ad1-cfb4-49fa-8c75-cf5047527c68 0 50 f \N \N 7de9bbee-eb3d-4f3e-a134-e7e8d4a6df25 \N registration-recaptcha-action grafana c3ed2ad1-cfb4-49fa-8c75-cf5047527c68 3 60 f \N \N 8a31d18e-1622-4eac-8eff-9434fa9cade3 \N reset-credentials-choose-user grafana 3085fb68-fc1f-4e1c-a8be-33fb45194b04 0 10 f \N \N @@ -1557,11 +1551,6 @@ b8ce6905-73eb-493b-9ce1-408ec55e3c46 \N conditional-user-configured grafana 21fb 54d7692d-c0e3-40ef-9ef9-d9e8227d618d \N auth-otp-form grafana 21fbd70a-286f-431a-abc4-fbf6590fcdc3 0 20 f \N \N 3722f24d-6ffb-4b20-a481-1fd8a17afdf6 \N http-basic-authenticator grafana ba53abf5-9a64-4371-810b-67378eb3d781 0 10 f \N \N a700b05f-a61d-4eeb-ad75-1a3df05ed429 \N docker-http-basic-authenticator grafana 95e02703-f5bc-4e04-8bef-f6adc2d8173f 0 10 f \N \N -035c4f94-03a6-4101-a729-f3c01ee4c490 \N no-cookie-redirect grafana f397495e-d073-4ef1-babf-569a338db596 0 10 f \N \N -29f310db-b302-44b2-9182-4b91648cbabf \N \N grafana f397495e-d073-4ef1-babf-569a338db596 0 20 t 56c40f89-4d69-46fd-bb18-d6c01808d2af \N -4e7d257c-e013-4597-a44d-b186a85606af \N basic-auth grafana 56c40f89-4d69-46fd-bb18-d6c01808d2af 0 10 f \N \N -2ba05817-a59f-4e72-a565-f3b4591390dc \N basic-auth-otp grafana 56c40f89-4d69-46fd-bb18-d6c01808d2af 3 20 f \N \N -5db9c781-6718-4674-a833-9a4ac3e8212e \N auth-spnego grafana 56c40f89-4d69-46fd-bb18-d6c01808d2af 3 30 f \N \N 5f032dbb-bd37-425b-af1e-ba555c7a8245 \N \N grafana b478ecfb-db7e-4797-a245-8fc3b4dec884 1 30 t b3491338-0630-4232-97e7-a518c254b248 \N \. @@ -1589,8 +1578,6 @@ ca3a3600-552c-4849-9a9d-826c8aa3e646 Verify Existing Account by Re-authenticatio a7d23655-efbb-4950-8ab6-50dbc85681a0 First broker login - Conditional OTP Flow to determine if the OTP is required for the authentication master basic-flow f t 57c56583-d91c-4399-bd15-05a1a17d48c1 saml ecp SAML ECP Profile Authentication Flow master basic-flow t t 032b05cf-0007-44da-a370-b42039f6b762 docker auth Used by Docker clients to authenticate against the IDP master basic-flow t t -1c7af06b-3085-46c3-849c-34c67f581b9e http challenge An authentication flow based on challenge-response HTTP Authentication Schemes master basic-flow t t -85c00992-77dd-4262-8744-a9dd8521e98e Authentication Options Authentication options. master basic-flow f t a38aeb47-f27e-4e68-82ff-7cc7371a47a7 browser browser based authentication grafana basic-flow t t c53e357f-e276-43aa-b36c-46366a7ffd35 forms Username, password, otp and other auth forms. grafana basic-flow f t cf4831e9-3e1d-452e-984e-e6d4d9eeafb5 Browser - Conditional OTP Flow to determine if the OTP is required for the authentication grafana basic-flow f t @@ -1609,8 +1596,6 @@ df86516c-dcb1-41a8-877e-eb8805bcac8c User creation or linking Flow for the exist 21fbd70a-286f-431a-abc4-fbf6590fcdc3 First broker login - Conditional OTP Flow to determine if the OTP is required for the authentication grafana basic-flow f t ba53abf5-9a64-4371-810b-67378eb3d781 saml ecp SAML ECP Profile Authentication Flow grafana basic-flow t t 95e02703-f5bc-4e04-8bef-f6adc2d8173f docker auth Used by Docker clients to authenticate against the IDP grafana basic-flow t t -f397495e-d073-4ef1-babf-569a338db596 http challenge An authentication flow based on challenge-response HTTP Authentication Schemes grafana basic-flow t t -56c40f89-4d69-46fd-bb18-d6c01808d2af Authentication Options Authentication options. grafana basic-flow f t \. @@ -1840,6 +1825,7 @@ d30340a8-630b-416e-8c93-3ccf932d34f3 false display.on.consent.screen d30340a8-630b-416e-8c93-3ccf932d34f3 false include.in.token.scope a96603aa-e6db-4b3e-8baa-679c75ccfc8f false display.on.consent.screen a96603aa-e6db-4b3e-8baa-679c75ccfc8f false include.in.token.scope +c61f5b19-c17e-49a1-91b8-a0296411b928 gui.order \. @@ -1979,6 +1965,7 @@ a8698f4f-5fa1-4baa-be05-87d03052af49 c61f5b19-c17e-49a1-91b8-a0296411b928 f 169f1dea-80f0-4a99-8509-9abb70ab0a5c a5bb3a5f-fd26-4be6-9557-26e20a03d33d f 169f1dea-80f0-4a99-8509-9abb70ab0a5c d6ffe9fc-a03c-4496-85dc-dbb5e7754587 f 169f1dea-80f0-4a99-8509-9abb70ab0a5c c61f5b19-c17e-49a1-91b8-a0296411b928 f +09b79548-8426-4c0e-8e0b-7488467532c7 c61f5b19-c17e-49a1-91b8-a0296411b928 t \. @@ -2086,6 +2073,7 @@ d47557df-07ff-4cae-bedd-b584c0697852 f95566ed-b955-4668-88fc-e7413fd98615 allowe 2ae4acc4-c6d6-4d2f-92c6-3a222a7d078a 28d2466c-5af6-4786-a8a2-c25d6cb4833f allowed-protocol-mapper-types oidc-sha256-pairwise-sub-mapper 880a35e4-65a1-4697-836d-fbc46641d676 28d2466c-5af6-4786-a8a2-c25d6cb4833f allowed-protocol-mapper-types oidc-full-name-mapper b087e631-754f-4c03-8cfc-354c7e7456fe 28d2466c-5af6-4786-a8a2-c25d6cb4833f allowed-protocol-mapper-types oidc-usermodel-property-mapper +258b8704-0587-4208-996f-96627992e370 80af2f23-4a51-498a-a011-732cf9cfa8f8 priority 100 079e63d4-0862-4e63-a62f-1a168cbbc25c 28d2466c-5af6-4786-a8a2-c25d6cb4833f allowed-protocol-mapper-types saml-user-property-mapper da61fbc2-7533-4bc1-b0c4-357db9f108e4 28d2466c-5af6-4786-a8a2-c25d6cb4833f allowed-protocol-mapper-types oidc-address-mapper 37a4be58-26b0-4d4a-9c41-a89b27fc25f6 28d2466c-5af6-4786-a8a2-c25d6cb4833f allowed-protocol-mapper-types saml-user-attribute-mapper @@ -2112,7 +2100,6 @@ bb8c28ca-bb74-4a07-82c3-8293354517be 9877acf2-e1cc-4038-a3c2-75db29b432e0 secret 64ea89c8-a2ce-4d2d-896d-aa49e7ca9fcc 9877acf2-e1cc-4038-a3c2-75db29b432e0 kid 7d80efc5-222b-4b6d-9b99-c3b516a59733 bec1483f-75e7-46e8-916c-102db4cbefb5 80af2f23-4a51-498a-a011-732cf9cfa8f8 certificate MIICnTCCAYUCBgF+u1ir8jANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdncmFmYW5hMB4XDTIyMDIwMjE2NDkxN1oXDTMyMDIwMjE2NTA1N1owEjEQMA4GA1UEAwwHZ3JhZmFuYTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKg5kB303DkDs5jSW1b7b7kvKfxIJorHD+7wPz2TcisfTu7rchrqAJiR/HtsPICyAw1h5ef8fGgCJf/k0z00osl/COvK8iHUdvGUnubuKUXaVwlbyaTnnyjSMUAkx+67OCrkY9B2drtZrtVc+fwnggqCsCkpoXg97tcUyfPlcUJnanxsYbirZ5KH+/e+x1jlsuBiwxascmB4IoT/zJknk5l1IVXmSOiDgqhzKRfHhVlRijOlfKyCn/EDtiv7wyQTP9wvd97zGPJqkkF2yNxueMftJsgGkF6+CZMY71BioOWAt2V8OwI32b/1v30DhtBmKdoUNGpEeCjSk91zzZqTFZUCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEABlW64QxuREB81VMGsyhj4Q5RykFaVuD5O8YlwUpmVfAVLzb0Drf54Kn4bnpnckKyYV+T+HsN4QXt81UE41xH0Aai2H3vrGH+PJf6aLPCDE+jpMqtN3n6IgImJXJPL8upMfhhWDv4nkM4uynEwWupzmrKi4oJuTETSMktJby4o6//XWnCzCVMoAGFJU4gtjBUzOMLW26zD+yc+BuUtfR3HzItVHSZKQSNSFO0kVS68RgrER8qJw07z3BOJ2bPpPM0PYyEngGMaowz/T6lI32ymGMWYMAnslthS1KAW9xcTBwnrW1nMhe5a0LPxIktys/wJtxIHZLc5sOddGT4xYklLg== 48e8b904-1393-43a4-aaa1-30e2d9634b36 80af2f23-4a51-498a-a011-732cf9cfa8f8 privateKey MIIEowIBAAKCAQEAqDmQHfTcOQOzmNJbVvtvuS8p/EgmiscP7vA/PZNyKx9O7utyGuoAmJH8e2w8gLIDDWHl5/x8aAIl/+TTPTSiyX8I68ryIdR28ZSe5u4pRdpXCVvJpOefKNIxQCTH7rs4KuRj0HZ2u1mu1Vz5/CeCCoKwKSmheD3u1xTJ8+VxQmdqfGxhuKtnkof7977HWOWy4GLDFqxyYHgihP/MmSeTmXUhVeZI6IOCqHMpF8eFWVGKM6V8rIKf8QO2K/vDJBM/3C933vMY8mqSQXbI3G54x+0myAaQXr4JkxjvUGKg5YC3ZXw7AjfZv/W/fQOG0GYp2hQ0akR4KNKT3XPNmpMVlQIDAQABAoIBAF3kEt3FZoyj1j97WOOJXmf7PPHDy081n1z61jEl9FjBFqse2gbPiBmfkU3JsVMbB70WYN1D/KOIX3EdZBELKbhQoMgJ826SSPi4vJ+jWYHVRTLB+h+B70E3X6mvXa+O6uB1rIgTNl2Gxp/rTtM/scLwAiZXR/n2hzGgNr9b1gT7D7kyCUIKDiJsQed2pA6ZbSDNTQQDE2qeN/Rr/+VV4XRuIIdBXn+Brap8ihjx4Gnn/SDBKM3MZoacwgS+9CZNhLjs8Ou4xD+KyitbbGGY4ZK/ZW2eSAH4ra8vVGTDK6bJrMTAE/73A23Evp/sKtRkFqcNumJ3rCykcAJorDUK48ECgYEA0TpkTwK6f2a72ncmw7Xzy4zdu+FdkI9PzWmS4IrbYOYRwsRMQLowsUPIdtU0EMrs7PRl1dSQa3/kAnw5J8wogkqVf4dJ3/lb/N5qtsjHP87N35QMXnMdE/BC6o7t5e+iRoHMloAuSBonGC9uBn1UeHWrNeLCB8+upJoSEBKbEQ0CgYEAzdSoKL4CJo31gVEqoJFPzPemsYGmV6Zl1Vj8mqMbQd8wcJoSJWbNV/3sfpIqdvOJOXQrzm+LYIbhhUnS3ZlGBmFsqUtC7dw3AqLg53msCyJLxmCIib0m/ONCY9qczV4OkUM6HVAdgzmMqqhk5ZB70IdUyStn2meqXKXLGFlLJKkCgYEAuizHTTcUVIFJ7x/PMp8ZjKqQM7pZ02Rykkm7FGr6wsJ2U2TwpTgIU/QI0RTt+3NWV5MxepBm4gEvFrcK9MrJ0QYk+RGdPttYay5Ors8B3Vlb//Jw/ypXWYKVSLpeHhiZwTuGnPT6OdZrqy2pLcUgAQBTlONt3B2FPZqLMBoeOZECgYBuCwm0bpF7x13AO4LMwaOmc6jdMfGa3s2G2MKEcjt6ZjbhnJ2i/Wk/Z/RuXvrxCZcN7nwVLDGZ88LSnftsmiuD8cZEZIZt4NRQRoBzgOtoMHfOoYGeElCr11yBQjme2nBzXTvOvCxrIfOAsfLvgOWRQSklPF2TuOSuD72bUPIJsQKBgBbeb8rIXKRRFC3A0IkKm8C51gG8mMgPdxZMKKuVhpb6D8B5aPh+WW44yNOpn7LInYI4jzf3Kv+kcj0PNH3nFaplnyCGFfmUIg27SAsRcrJcTlXtIKooZw6oPU+dQfAo11suArVAVD6OQc/7z99VoIpLN0cUHfS/g0H1dx/r/32o -258b8704-0587-4208-996f-96627992e370 80af2f23-4a51-498a-a011-732cf9cfa8f8 priority 100 12cd94c5-bd7e-4a5c-95e2-256b0bcf14bd 261e38de-3e1f-40a3-9200-f5aac1975701 allowed-protocol-mapper-types oidc-address-mapper f33b34f1-3793-4786-a281-b286fce52f45 261e38de-3e1f-40a3-9200-f5aac1975701 allowed-protocol-mapper-types saml-role-list-mapper d056c1de-9aa1-46a0-a644-fafb33088967 261e38de-3e1f-40a3-9200-f5aac1975701 allowed-protocol-mapper-types saml-user-property-mapper @@ -2226,11 +2213,11 @@ b4c89bc8-3945-4963-80b5-3da62e8c54ad 18a7066b-fe71-410e-9581-69f78347ec29 -- COPY public.credential (id, salt, type, user_id, created_date, user_label, secret_data, credential_data, priority) FROM stdin; -d4b2c483-1dd3-47f6-86bf-42548009918d \N password 74e29604-ff35-42bb-a26d-4d0b81ef0917 1643820449817 \N {"value":"Hou7HlbGvohOx6II0VSCP4BIGI4Cyzy+BcXbPUQe/kaMQzNU77kH2pOKZ236UPfkiCyOLe7A3oS0afExA+ymAQ==","salt":"urXvCw0KdWf9s74km4G+lA==","additionalParameters":{}} {"hashIterations":27500,"algorithm":"pbkdf2-sha256","additionalParameters":{}} 10 cb2bd4ed-94b8-4259-bcaa-9250c3fb28d3 \N password 6db3c5e5-b84b-4f9d-a7a8-8d05b03c929d 1657026827644 \N {"value":"q3Z59Nh/5bdezDEpCwEbMPu8d+VgJ5WetafXkR8l0FlsTTkSDQgW+j6GaM3seJR93p3/jCxyfsvZl062d1pq7w==","salt":"ohuHnjLnwF9dBZ38DRJJWg==","additionalParameters":{}} {"hashIterations":27500,"algorithm":"pbkdf2-sha256","additionalParameters":{}} 10 -b58e1964-6466-40b2-879c-982b724d7f9c \N password 88692d07-bb9a-46cf-844c-7ff5c529cd04 1657026904515 \N {"value":"+/0zWjiJyE3+dCOEf0SO6G3n1/LsFAVoDAZREKTfN4vQ5xJH8srJoCjxcgb+bI1crMr8gknDlFyGRy7CpYn2VQ==","salt":"v/2okNt3wGOZz+x4DjOCDQ==","additionalParameters":{}} {"hashIterations":27500,"algorithm":"pbkdf2-sha256","additionalParameters":{}} 10 -3ff7dd8f-a299-4b51-bf5d-99665ccfd313 \N password 8f58cbec-6e40-4bab-bff0-1c5ff899fe2e 1657026943075 \N {"value":"nMYodMJMiq/J8g9vRPktGc7WSWnOKr6leMDZX4p9K9KgAUYeXFDSu+d29PWWn0rFn93dL0PNdIdHWNQhfkIDMg==","salt":"rmi9WLHgarmIXGukecSIig==","additionalParameters":{}} {"hashIterations":27500,"algorithm":"pbkdf2-sha256","additionalParameters":{}} 10 c9582964-cfdd-49a1-99fb-847604b0c78c \N password 1a85b7e0-4baa-420b-89f8-1cea43a540dd 1662480997923 \N {"value":"ViNTHbpBUNdtH1qGSlip7WFI8Z9lvcGQdbL8Yw48zUgB46jVFbD1eNrOw68p3ovDwfDCIJKm34EFNbw9/uzHSg==","salt":"Z9P8RfnrQwCn0xUTpWC2DQ==","additionalParameters":{}} {"hashIterations":27500,"algorithm":"pbkdf2-sha256","additionalParameters":{}} 10 +b58e1964-6466-40b2-879c-982b724d7f9c \N password 88692d07-bb9a-46cf-844c-7ff5c529cd04 1657026904515 \N {"value":"L/GNO2HAU90A/ajXqyZyujncf+GfJiLWzNVTIDAVj1k=","salt":"L6WsIapZ+hKo0809G6c6SA==","additionalParameters":{}} {"hashIterations":27500,"algorithm":"pbkdf2-sha256","additionalParameters":{}} 10 +d4b2c483-1dd3-47f6-86bf-42548009918d \N password 74e29604-ff35-42bb-a26d-4d0b81ef0917 1643820449817 \N {"value":"GweNaTEq3+hCqr5bBhnfqUd0oAiv8G4eUBkQUqtqiTI=","salt":"z64RYF8zRJz9ko0KDrIPxw==","additionalParameters":{}} {"hashIterations":27500,"algorithm":"pbkdf2-sha256","additionalParameters":{}} 10 +3ff7dd8f-a299-4b51-bf5d-99665ccfd313 \N password 8f58cbec-6e40-4bab-bff0-1c5ff899fe2e 1657026943075 \N {"value":"81KWe14rtsbn3SS6YbWzBy2SvBQhmH+0MDHkK7aXCbo=","salt":"CnzQUkkAMD1tPk1KFDDm1w==","additionalParameters":{}} {"hashIterations":27500,"algorithm":"pbkdf2-sha256","additionalParameters":{}} 10 \. @@ -2239,118 +2226,125 @@ c9582964-cfdd-49a1-99fb-847604b0c78c \N password 1a85b7e0-4baa-420b-89f8-1cea43a -- COPY public.databasechangelog (id, author, filename, dateexecuted, orderexecuted, exectype, md5sum, description, comments, tag, liquibase, contexts, labels, deployment_id) FROM stdin; -authn-3.4.0.CR1-refresh-token-max-reuse glavoie@gmail.com META-INF/jpa-changelog-authz-3.4.0.CR1.xml 2022-02-02 16:47:26.706593 49 EXECUTED \N addColumn tableName=REALM \N 3.5.4 \N \N 3820445829 -1.0.0.Final-KEYCLOAK-5461 sthorger@redhat.com META-INF/jpa-changelog-1.0.0.Final.xml 2022-02-02 16:47:26.017844 1 EXECUTED \N createTable tableName=APPLICATION_DEFAULT_ROLES; createTable tableName=CLIENT; createTable tableName=CLIENT_SESSION; createTable tableName=CLIENT_SESSION_ROLE; createTable tableName=COMPOSITE_ROLE; createTable tableName=CREDENTIAL; createTable tab... \N 3.5.4 \N \N 3820445829 -1.0.0.Final-KEYCLOAK-5461 sthorger@redhat.com META-INF/db2-jpa-changelog-1.0.0.Final.xml 2022-02-02 16:47:26.03122 2 MARK_RAN \N createTable tableName=APPLICATION_DEFAULT_ROLES; createTable tableName=CLIENT; createTable tableName=CLIENT_SESSION; createTable tableName=CLIENT_SESSION_ROLE; createTable tableName=COMPOSITE_ROLE; createTable tableName=CREDENTIAL; createTable tab... \N 3.5.4 \N \N 3820445829 -1.1.0.Beta1 sthorger@redhat.com META-INF/jpa-changelog-1.1.0.Beta1.xml 2022-02-02 16:47:26.06085 3 EXECUTED \N delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION; createTable tableName=CLIENT_ATTRIBUTES; createTable tableName=CLIENT_SESSION_NOTE; createTable tableName=APP_NODE_REGISTRATIONS; addColumn table... \N 3.5.4 \N \N 3820445829 -1.1.0.Final sthorger@redhat.com META-INF/jpa-changelog-1.1.0.Final.xml 2022-02-02 16:47:26.065284 4 EXECUTED \N renameColumn newColumnName=EVENT_TIME, oldColumnName=TIME, tableName=EVENT_ENTITY \N 3.5.4 \N \N 3820445829 -4.8.0-KEYCLOAK-8835 sguilhen@redhat.com META-INF/jpa-changelog-4.8.0.xml 2022-02-02 16:47:26.928034 70 EXECUTED \N addNotNullConstraint columnName=SSO_MAX_LIFESPAN_REMEMBER_ME, tableName=REALM; addNotNullConstraint columnName=SSO_IDLE_TIMEOUT_REMEMBER_ME, tableName=REALM \N 3.5.4 \N \N 3820445829 -1.2.0.Beta1 psilva@redhat.com META-INF/jpa-changelog-1.2.0.Beta1.xml 2022-02-02 16:47:26.130908 5 EXECUTED \N delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION; createTable tableName=PROTOCOL_MAPPER; createTable tableName=PROTOCOL_MAPPER_CONFIG; createTable tableName=... \N 3.5.4 \N \N 3820445829 -1.2.0.Beta1 psilva@redhat.com META-INF/db2-jpa-changelog-1.2.0.Beta1.xml 2022-02-02 16:47:26.133863 6 MARK_RAN \N delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION; createTable tableName=PROTOCOL_MAPPER; createTable tableName=PROTOCOL_MAPPER_CONFIG; createTable tableName=... \N 3.5.4 \N \N 3820445829 -1.2.0.RC1 bburke@redhat.com META-INF/jpa-changelog-1.2.0.CR1.xml 2022-02-02 16:47:26.183318 7 EXECUTED \N delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION_NOTE; delete tableName=USER_SESSION; createTable tableName=MIGRATION_MODEL; createTable tableName=IDENTITY_P... \N 3.5.4 \N \N 3820445829 -1.2.0.RC1 bburke@redhat.com META-INF/db2-jpa-changelog-1.2.0.CR1.xml 2022-02-02 16:47:26.186858 8 MARK_RAN \N delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION_NOTE; delete tableName=USER_SESSION; createTable tableName=MIGRATION_MODEL; createTable tableName=IDENTITY_P... \N 3.5.4 \N \N 3820445829 -1.2.0.Final keycloak META-INF/jpa-changelog-1.2.0.Final.xml 2022-02-02 16:47:26.19172 9 EXECUTED \N update tableName=CLIENT; update tableName=CLIENT; update tableName=CLIENT \N 3.5.4 \N \N 3820445829 -1.3.0 bburke@redhat.com META-INF/jpa-changelog-1.3.0.xml 2022-02-02 16:47:26.242162 10 EXECUTED \N delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_PROT_MAPPER; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION_NOTE; delete tableName=USER_SESSION; createTable tableName=ADMI... \N 3.5.4 \N \N 3820445829 -1.4.0 bburke@redhat.com META-INF/jpa-changelog-1.4.0.xml 2022-02-02 16:47:26.275929 11 EXECUTED \N delete tableName=CLIENT_SESSION_AUTH_STATUS; delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_PROT_MAPPER; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION_NOTE; delete table... \N 3.5.4 \N \N 3820445829 -1.4.0 bburke@redhat.com META-INF/db2-jpa-changelog-1.4.0.xml 2022-02-02 16:47:26.278548 12 MARK_RAN \N delete tableName=CLIENT_SESSION_AUTH_STATUS; delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_PROT_MAPPER; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION_NOTE; delete table... \N 3.5.4 \N \N 3820445829 -1.5.0 bburke@redhat.com META-INF/jpa-changelog-1.5.0.xml 2022-02-02 16:47:26.287616 13 EXECUTED \N delete tableName=CLIENT_SESSION_AUTH_STATUS; delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_PROT_MAPPER; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION_NOTE; delete table... \N 3.5.4 \N \N 3820445829 -1.6.1_from15 mposolda@redhat.com META-INF/jpa-changelog-1.6.1.xml 2022-02-02 16:47:26.299798 14 EXECUTED \N addColumn tableName=REALM; addColumn tableName=KEYCLOAK_ROLE; addColumn tableName=CLIENT; createTable tableName=OFFLINE_USER_SESSION; createTable tableName=OFFLINE_CLIENT_SESSION; addPrimaryKey constraintName=CONSTRAINT_OFFL_US_SES_PK2, tableName=... \N 3.5.4 \N \N 3820445829 -1.6.1_from16-pre mposolda@redhat.com META-INF/jpa-changelog-1.6.1.xml 2022-02-02 16:47:26.302088 15 MARK_RAN \N delete tableName=OFFLINE_CLIENT_SESSION; delete tableName=OFFLINE_USER_SESSION \N 3.5.4 \N \N 3820445829 -1.6.1_from16 mposolda@redhat.com META-INF/jpa-changelog-1.6.1.xml 2022-02-02 16:47:26.303889 16 MARK_RAN \N dropPrimaryKey constraintName=CONSTRAINT_OFFLINE_US_SES_PK, tableName=OFFLINE_USER_SESSION; dropPrimaryKey constraintName=CONSTRAINT_OFFLINE_CL_SES_PK, tableName=OFFLINE_CLIENT_SESSION; addColumn tableName=OFFLINE_USER_SESSION; update tableName=OF... \N 3.5.4 \N \N 3820445829 -1.6.1 mposolda@redhat.com META-INF/jpa-changelog-1.6.1.xml 2022-02-02 16:47:26.306641 17 EXECUTED \N empty \N 3.5.4 \N \N 3820445829 -1.7.0 bburke@redhat.com META-INF/jpa-changelog-1.7.0.xml 2022-02-02 16:47:26.338791 18 EXECUTED \N createTable tableName=KEYCLOAK_GROUP; createTable tableName=GROUP_ROLE_MAPPING; createTable tableName=GROUP_ATTRIBUTE; createTable tableName=USER_GROUP_MEMBERSHIP; createTable tableName=REALM_DEFAULT_GROUPS; addColumn tableName=IDENTITY_PROVIDER; ... \N 3.5.4 \N \N 3820445829 -1.8.0 mposolda@redhat.com META-INF/jpa-changelog-1.8.0.xml 2022-02-02 16:47:26.381463 19 EXECUTED \N addColumn tableName=IDENTITY_PROVIDER; createTable tableName=CLIENT_TEMPLATE; createTable tableName=CLIENT_TEMPLATE_ATTRIBUTES; createTable tableName=TEMPLATE_SCOPE_MAPPING; dropNotNullConstraint columnName=CLIENT_ID, tableName=PROTOCOL_MAPPER; ad... \N 3.5.4 \N \N 3820445829 -1.8.0-2 keycloak META-INF/jpa-changelog-1.8.0.xml 2022-02-02 16:47:26.390165 20 EXECUTED \N dropDefaultValue columnName=ALGORITHM, tableName=CREDENTIAL; update tableName=CREDENTIAL \N 3.5.4 \N \N 3820445829 -authz-3.4.0.CR1-resource-server-pk-change-part1 glavoie@gmail.com META-INF/jpa-changelog-authz-3.4.0.CR1.xml 2022-02-02 16:47:26.679075 45 EXECUTED \N addColumn tableName=RESOURCE_SERVER_POLICY; addColumn tableName=RESOURCE_SERVER_RESOURCE; addColumn tableName=RESOURCE_SERVER_SCOPE \N 3.5.4 \N \N 3820445829 -1.8.0 mposolda@redhat.com META-INF/db2-jpa-changelog-1.8.0.xml 2022-02-02 16:47:26.392862 21 MARK_RAN \N addColumn tableName=IDENTITY_PROVIDER; createTable tableName=CLIENT_TEMPLATE; createTable tableName=CLIENT_TEMPLATE_ATTRIBUTES; createTable tableName=TEMPLATE_SCOPE_MAPPING; dropNotNullConstraint columnName=CLIENT_ID, tableName=PROTOCOL_MAPPER; ad... \N 3.5.4 \N \N 3820445829 -1.8.0-2 keycloak META-INF/db2-jpa-changelog-1.8.0.xml 2022-02-02 16:47:26.395652 22 MARK_RAN \N dropDefaultValue columnName=ALGORITHM, tableName=CREDENTIAL; update tableName=CREDENTIAL \N 3.5.4 \N \N 3820445829 -1.9.0 mposolda@redhat.com META-INF/jpa-changelog-1.9.0.xml 2022-02-02 16:47:26.40969 23 EXECUTED \N update tableName=REALM; update tableName=REALM; update tableName=REALM; update tableName=REALM; update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=REALM; update tableName=REALM; customChange; dr... \N 3.5.4 \N \N 3820445829 -1.9.1 keycloak META-INF/jpa-changelog-1.9.1.xml 2022-02-02 16:47:26.414344 24 EXECUTED \N modifyDataType columnName=PRIVATE_KEY, tableName=REALM; modifyDataType columnName=PUBLIC_KEY, tableName=REALM; modifyDataType columnName=CERTIFICATE, tableName=REALM \N 3.5.4 \N \N 3820445829 -1.9.1 keycloak META-INF/db2-jpa-changelog-1.9.1.xml 2022-02-02 16:47:26.416193 25 MARK_RAN \N modifyDataType columnName=PRIVATE_KEY, tableName=REALM; modifyDataType columnName=CERTIFICATE, tableName=REALM \N 3.5.4 \N \N 3820445829 -1.9.2 keycloak META-INF/jpa-changelog-1.9.2.xml 2022-02-02 16:47:26.437367 26 EXECUTED \N createIndex indexName=IDX_USER_EMAIL, tableName=USER_ENTITY; createIndex indexName=IDX_USER_ROLE_MAPPING, tableName=USER_ROLE_MAPPING; createIndex indexName=IDX_USER_GROUP_MAPPING, tableName=USER_GROUP_MEMBERSHIP; createIndex indexName=IDX_USER_CO... \N 3.5.4 \N \N 3820445829 -9.0.1-KEYCLOAK-12579-recreate-constraints keycloak META-INF/jpa-changelog-9.0.1.xml 2022-02-02 16:47:26.981645 84 MARK_RAN \N addUniqueConstraint constraintName=SIBLING_NAMES, tableName=KEYCLOAK_GROUP \N 3.5.4 \N \N 3820445829 -authz-2.0.0 psilva@redhat.com META-INF/jpa-changelog-authz-2.0.0.xml 2022-02-02 16:47:26.481647 27 EXECUTED \N createTable tableName=RESOURCE_SERVER; addPrimaryKey constraintName=CONSTRAINT_FARS, tableName=RESOURCE_SERVER; addUniqueConstraint constraintName=UK_AU8TT6T700S9V50BU18WS5HA6, tableName=RESOURCE_SERVER; createTable tableName=RESOURCE_SERVER_RESOU... \N 3.5.4 \N \N 3820445829 -authz-2.5.1 psilva@redhat.com META-INF/jpa-changelog-authz-2.5.1.xml 2022-02-02 16:47:26.484459 28 EXECUTED \N update tableName=RESOURCE_SERVER_POLICY \N 3.5.4 \N \N 3820445829 -2.1.0-KEYCLOAK-5461 bburke@redhat.com META-INF/jpa-changelog-2.1.0.xml 2022-02-02 16:47:26.523006 29 EXECUTED \N createTable tableName=BROKER_LINK; createTable tableName=FED_USER_ATTRIBUTE; createTable tableName=FED_USER_CONSENT; createTable tableName=FED_USER_CONSENT_ROLE; createTable tableName=FED_USER_CONSENT_PROT_MAPPER; createTable tableName=FED_USER_CR... \N 3.5.4 \N \N 3820445829 -2.2.0 bburke@redhat.com META-INF/jpa-changelog-2.2.0.xml 2022-02-02 16:47:26.532066 30 EXECUTED \N addColumn tableName=ADMIN_EVENT_ENTITY; createTable tableName=CREDENTIAL_ATTRIBUTE; createTable tableName=FED_CREDENTIAL_ATTRIBUTE; modifyDataType columnName=VALUE, tableName=CREDENTIAL; addForeignKeyConstraint baseTableName=FED_CREDENTIAL_ATTRIBU... \N 3.5.4 \N \N 3820445829 -2.3.0 bburke@redhat.com META-INF/jpa-changelog-2.3.0.xml 2022-02-02 16:47:26.541837 31 EXECUTED \N createTable tableName=FEDERATED_USER; addPrimaryKey constraintName=CONSTR_FEDERATED_USER, tableName=FEDERATED_USER; dropDefaultValue columnName=TOTP, tableName=USER_ENTITY; dropColumn columnName=TOTP, tableName=USER_ENTITY; addColumn tableName=IDE... \N 3.5.4 \N \N 3820445829 -2.4.0 bburke@redhat.com META-INF/jpa-changelog-2.4.0.xml 2022-02-02 16:47:26.545809 32 EXECUTED \N customChange \N 3.5.4 \N \N 3820445829 -2.5.0 bburke@redhat.com META-INF/jpa-changelog-2.5.0.xml 2022-02-02 16:47:26.549823 33 EXECUTED \N customChange; modifyDataType columnName=USER_ID, tableName=OFFLINE_USER_SESSION \N 3.5.4 \N \N 3820445829 -2.5.0-unicode-oracle hmlnarik@redhat.com META-INF/jpa-changelog-2.5.0.xml 2022-02-02 16:47:26.55176 34 MARK_RAN \N modifyDataType columnName=DESCRIPTION, tableName=AUTHENTICATION_FLOW; modifyDataType columnName=DESCRIPTION, tableName=CLIENT_TEMPLATE; modifyDataType columnName=DESCRIPTION, tableName=RESOURCE_SERVER_POLICY; modifyDataType columnName=DESCRIPTION,... \N 3.5.4 \N \N 3820445829 -2.5.0-unicode-other-dbs hmlnarik@redhat.com META-INF/jpa-changelog-2.5.0.xml 2022-02-02 16:47:26.567305 35 EXECUTED \N modifyDataType columnName=DESCRIPTION, tableName=AUTHENTICATION_FLOW; modifyDataType columnName=DESCRIPTION, tableName=CLIENT_TEMPLATE; modifyDataType columnName=DESCRIPTION, tableName=RESOURCE_SERVER_POLICY; modifyDataType columnName=DESCRIPTION,... \N 3.5.4 \N \N 3820445829 -2.5.0-duplicate-email-support slawomir@dabek.name META-INF/jpa-changelog-2.5.0.xml 2022-02-02 16:47:26.570727 36 EXECUTED \N addColumn tableName=REALM \N 3.5.4 \N \N 3820445829 -2.5.0-unique-group-names hmlnarik@redhat.com META-INF/jpa-changelog-2.5.0.xml 2022-02-02 16:47:26.578396 37 EXECUTED \N addUniqueConstraint constraintName=SIBLING_NAMES, tableName=KEYCLOAK_GROUP \N 3.5.4 \N \N 3820445829 -2.5.1 bburke@redhat.com META-INF/jpa-changelog-2.5.1.xml 2022-02-02 16:47:26.581391 38 EXECUTED \N addColumn tableName=FED_USER_CONSENT \N 3.5.4 \N \N 3820445829 -3.0.0 bburke@redhat.com META-INF/jpa-changelog-3.0.0.xml 2022-02-02 16:47:26.584204 39 EXECUTED \N addColumn tableName=IDENTITY_PROVIDER \N 3.5.4 \N \N 3820445829 -3.2.0-fix keycloak META-INF/jpa-changelog-3.2.0.xml 2022-02-02 16:47:26.585877 40 MARK_RAN \N addNotNullConstraint columnName=REALM_ID, tableName=CLIENT_INITIAL_ACCESS \N 3.5.4 \N \N 3820445829 -3.2.0-fix-with-keycloak-5416 keycloak META-INF/jpa-changelog-3.2.0.xml 2022-02-02 16:47:26.587657 41 MARK_RAN \N dropIndex indexName=IDX_CLIENT_INIT_ACC_REALM, tableName=CLIENT_INITIAL_ACCESS; addNotNullConstraint columnName=REALM_ID, tableName=CLIENT_INITIAL_ACCESS; createIndex indexName=IDX_CLIENT_INIT_ACC_REALM, tableName=CLIENT_INITIAL_ACCESS \N 3.5.4 \N \N 3820445829 -3.2.0-fix-offline-sessions hmlnarik META-INF/jpa-changelog-3.2.0.xml 2022-02-02 16:47:26.591561 42 EXECUTED \N customChange \N 3.5.4 \N \N 3820445829 -3.2.0-fixed keycloak META-INF/jpa-changelog-3.2.0.xml 2022-02-02 16:47:26.669981 43 EXECUTED \N addColumn tableName=REALM; dropPrimaryKey constraintName=CONSTRAINT_OFFL_CL_SES_PK2, tableName=OFFLINE_CLIENT_SESSION; dropColumn columnName=CLIENT_SESSION_ID, tableName=OFFLINE_CLIENT_SESSION; addPrimaryKey constraintName=CONSTRAINT_OFFL_CL_SES_P... \N 3.5.4 \N \N 3820445829 -3.3.0 keycloak META-INF/jpa-changelog-3.3.0.xml 2022-02-02 16:47:26.673701 44 EXECUTED \N addColumn tableName=USER_ENTITY \N 3.5.4 \N \N 3820445829 -authz-3.4.0.CR1-resource-server-pk-change-part2-KEYCLOAK-6095 hmlnarik@redhat.com META-INF/jpa-changelog-authz-3.4.0.CR1.xml 2022-02-02 16:47:26.681987 46 EXECUTED \N customChange \N 3.5.4 \N \N 3820445829 -authz-3.4.0.CR1-resource-server-pk-change-part3-fixed glavoie@gmail.com META-INF/jpa-changelog-authz-3.4.0.CR1.xml 2022-02-02 16:47:26.683661 47 MARK_RAN \N dropIndex indexName=IDX_RES_SERV_POL_RES_SERV, tableName=RESOURCE_SERVER_POLICY; dropIndex indexName=IDX_RES_SRV_RES_RES_SRV, tableName=RESOURCE_SERVER_RESOURCE; dropIndex indexName=IDX_RES_SRV_SCOPE_RES_SRV, tableName=RESOURCE_SERVER_SCOPE \N 3.5.4 \N \N 3820445829 -authz-3.4.0.CR1-resource-server-pk-change-part3-fixed-nodropindex glavoie@gmail.com META-INF/jpa-changelog-authz-3.4.0.CR1.xml 2022-02-02 16:47:26.702743 48 EXECUTED \N addNotNullConstraint columnName=RESOURCE_SERVER_CLIENT_ID, tableName=RESOURCE_SERVER_POLICY; addNotNullConstraint columnName=RESOURCE_SERVER_CLIENT_ID, tableName=RESOURCE_SERVER_RESOURCE; addNotNullConstraint columnName=RESOURCE_SERVER_CLIENT_ID, ... \N 3.5.4 \N \N 3820445829 -3.4.0 keycloak META-INF/jpa-changelog-3.4.0.xml 2022-02-02 16:47:26.734467 50 EXECUTED \N addPrimaryKey constraintName=CONSTRAINT_REALM_DEFAULT_ROLES, tableName=REALM_DEFAULT_ROLES; addPrimaryKey constraintName=CONSTRAINT_COMPOSITE_ROLE, tableName=COMPOSITE_ROLE; addPrimaryKey constraintName=CONSTR_REALM_DEFAULT_GROUPS, tableName=REALM... \N 3.5.4 \N \N 3820445829 -3.4.0-KEYCLOAK-5230 hmlnarik@redhat.com META-INF/jpa-changelog-3.4.0.xml 2022-02-02 16:47:26.78037 51 EXECUTED \N createIndex indexName=IDX_FU_ATTRIBUTE, tableName=FED_USER_ATTRIBUTE; createIndex indexName=IDX_FU_CONSENT, tableName=FED_USER_CONSENT; createIndex indexName=IDX_FU_CONSENT_RU, tableName=FED_USER_CONSENT; createIndex indexName=IDX_FU_CREDENTIAL, t... \N 3.5.4 \N \N 3820445829 -3.4.1 psilva@redhat.com META-INF/jpa-changelog-3.4.1.xml 2022-02-02 16:47:26.783989 52 EXECUTED \N modifyDataType columnName=VALUE, tableName=CLIENT_ATTRIBUTES \N 3.5.4 \N \N 3820445829 -3.4.2 keycloak META-INF/jpa-changelog-3.4.2.xml 2022-02-02 16:47:26.786619 53 EXECUTED \N update tableName=REALM \N 3.5.4 \N \N 3820445829 -3.4.2-KEYCLOAK-5172 mkanis@redhat.com META-INF/jpa-changelog-3.4.2.xml 2022-02-02 16:47:26.788788 54 EXECUTED \N update tableName=CLIENT \N 3.5.4 \N \N 3820445829 -4.0.0-KEYCLOAK-6335 bburke@redhat.com META-INF/jpa-changelog-4.0.0.xml 2022-02-02 16:47:26.794881 55 EXECUTED \N createTable tableName=CLIENT_AUTH_FLOW_BINDINGS; addPrimaryKey constraintName=C_CLI_FLOW_BIND, tableName=CLIENT_AUTH_FLOW_BINDINGS \N 3.5.4 \N \N 3820445829 -4.0.0-CLEANUP-UNUSED-TABLE bburke@redhat.com META-INF/jpa-changelog-4.0.0.xml 2022-02-02 16:47:26.799493 56 EXECUTED \N dropTable tableName=CLIENT_IDENTITY_PROV_MAPPING \N 3.5.4 \N \N 3820445829 -4.0.0-KEYCLOAK-6228 bburke@redhat.com META-INF/jpa-changelog-4.0.0.xml 2022-02-02 16:47:26.810686 57 EXECUTED \N dropUniqueConstraint constraintName=UK_JKUWUVD56ONTGSUHOGM8UEWRT, tableName=USER_CONSENT; dropNotNullConstraint columnName=CLIENT_ID, tableName=USER_CONSENT; addColumn tableName=USER_CONSENT; addUniqueConstraint constraintName=UK_JKUWUVD56ONTGSUHO... \N 3.5.4 \N \N 3820445829 -4.0.0-KEYCLOAK-5579-fixed mposolda@redhat.com META-INF/jpa-changelog-4.0.0.xml 2022-02-02 16:47:26.861332 58 EXECUTED \N dropForeignKeyConstraint baseTableName=CLIENT_TEMPLATE_ATTRIBUTES, constraintName=FK_CL_TEMPL_ATTR_TEMPL; renameTable newTableName=CLIENT_SCOPE_ATTRIBUTES, oldTableName=CLIENT_TEMPLATE_ATTRIBUTES; renameColumn newColumnName=SCOPE_ID, oldColumnName... \N 3.5.4 \N \N 3820445829 -authz-4.0.0.CR1 psilva@redhat.com META-INF/jpa-changelog-authz-4.0.0.CR1.xml 2022-02-02 16:47:26.877018 59 EXECUTED \N createTable tableName=RESOURCE_SERVER_PERM_TICKET; addPrimaryKey constraintName=CONSTRAINT_FAPMT, tableName=RESOURCE_SERVER_PERM_TICKET; addForeignKeyConstraint baseTableName=RESOURCE_SERVER_PERM_TICKET, constraintName=FK_FRSRHO213XCX4WNKOG82SSPMT... \N 3.5.4 \N \N 3820445829 -authz-4.0.0.Beta3 psilva@redhat.com META-INF/jpa-changelog-authz-4.0.0.Beta3.xml 2022-02-02 16:47:26.881203 60 EXECUTED \N addColumn tableName=RESOURCE_SERVER_POLICY; addColumn tableName=RESOURCE_SERVER_PERM_TICKET; addForeignKeyConstraint baseTableName=RESOURCE_SERVER_PERM_TICKET, constraintName=FK_FRSRPO2128CX4WNKOG82SSRFY, referencedTableName=RESOURCE_SERVER_POLICY \N 3.5.4 \N \N 3820445829 -authz-4.2.0.Final mhajas@redhat.com META-INF/jpa-changelog-authz-4.2.0.Final.xml 2022-02-02 16:47:26.886177 61 EXECUTED \N createTable tableName=RESOURCE_URIS; addForeignKeyConstraint baseTableName=RESOURCE_URIS, constraintName=FK_RESOURCE_SERVER_URIS, referencedTableName=RESOURCE_SERVER_RESOURCE; customChange; dropColumn columnName=URI, tableName=RESOURCE_SERVER_RESO... \N 3.5.4 \N \N 3820445829 -authz-4.2.0.Final-KEYCLOAK-9944 hmlnarik@redhat.com META-INF/jpa-changelog-authz-4.2.0.Final.xml 2022-02-02 16:47:26.890482 62 EXECUTED \N addPrimaryKey constraintName=CONSTRAINT_RESOUR_URIS_PK, tableName=RESOURCE_URIS \N 3.5.4 \N \N 3820445829 -4.2.0-KEYCLOAK-6313 wadahiro@gmail.com META-INF/jpa-changelog-4.2.0.xml 2022-02-02 16:47:26.893518 63 EXECUTED \N addColumn tableName=REQUIRED_ACTION_PROVIDER \N 3.5.4 \N \N 3820445829 -4.3.0-KEYCLOAK-7984 wadahiro@gmail.com META-INF/jpa-changelog-4.3.0.xml 2022-02-02 16:47:26.895621 64 EXECUTED \N update tableName=REQUIRED_ACTION_PROVIDER \N 3.5.4 \N \N 3820445829 -4.6.0-KEYCLOAK-7950 psilva@redhat.com META-INF/jpa-changelog-4.6.0.xml 2022-02-02 16:47:26.89756 65 EXECUTED \N update tableName=RESOURCE_SERVER_RESOURCE \N 3.5.4 \N \N 3820445829 -4.6.0-KEYCLOAK-8377 keycloak META-INF/jpa-changelog-4.6.0.xml 2022-02-02 16:47:26.908059 66 EXECUTED \N createTable tableName=ROLE_ATTRIBUTE; addPrimaryKey constraintName=CONSTRAINT_ROLE_ATTRIBUTE_PK, tableName=ROLE_ATTRIBUTE; addForeignKeyConstraint baseTableName=ROLE_ATTRIBUTE, constraintName=FK_ROLE_ATTRIBUTE_ID, referencedTableName=KEYCLOAK_ROLE... \N 3.5.4 \N \N 3820445829 -4.6.0-KEYCLOAK-8555 gideonray@gmail.com META-INF/jpa-changelog-4.6.0.xml 2022-02-02 16:47:26.912693 67 EXECUTED \N createIndex indexName=IDX_COMPONENT_PROVIDER_TYPE, tableName=COMPONENT \N 3.5.4 \N \N 3820445829 -4.7.0-KEYCLOAK-1267 sguilhen@redhat.com META-INF/jpa-changelog-4.7.0.xml 2022-02-02 16:47:26.915771 68 EXECUTED \N addColumn tableName=REALM \N 3.5.4 \N \N 3820445829 -4.7.0-KEYCLOAK-7275 keycloak META-INF/jpa-changelog-4.7.0.xml 2022-02-02 16:47:26.924465 69 EXECUTED \N renameColumn newColumnName=CREATED_ON, oldColumnName=LAST_SESSION_REFRESH, tableName=OFFLINE_USER_SESSION; addNotNullConstraint columnName=CREATED_ON, tableName=OFFLINE_USER_SESSION; addColumn tableName=OFFLINE_USER_SESSION; customChange; createIn... \N 3.5.4 \N \N 3820445829 -authz-7.0.0-KEYCLOAK-10443 psilva@redhat.com META-INF/jpa-changelog-authz-7.0.0.xml 2022-02-02 16:47:26.93061 71 EXECUTED \N addColumn tableName=RESOURCE_SERVER \N 3.5.4 \N \N 3820445829 -8.0.0-adding-credential-columns keycloak META-INF/jpa-changelog-8.0.0.xml 2022-02-02 16:47:26.933771 72 EXECUTED \N addColumn tableName=CREDENTIAL; addColumn tableName=FED_USER_CREDENTIAL \N 3.5.4 \N \N 3820445829 +1.6.1 mposolda@redhat.com META-INF/jpa-changelog-1.6.1.xml 2022-02-02 16:47:26.306641 17 EXECUTED 9:d41d8cd98f00b204e9800998ecf8427e empty \N 3.5.4 \N \N 3820445829 +authz-2.5.1 psilva@redhat.com META-INF/jpa-changelog-authz-2.5.1.xml 2022-02-02 16:47:26.484459 28 EXECUTED 9:44bae577f551b3738740281eceb4ea70 update tableName=RESOURCE_SERVER_POLICY \N 3.5.4 \N \N 3820445829 8.0.0-updating-credential-data-not-oracle keycloak META-INF/jpa-changelog-8.0.0.xml 2022-02-02 16:47:26.937673 73 EXECUTED \N update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=FED_USER_CREDENTIAL; update tableName=FED_USER_CREDENTIAL; update tableName=FED_USER_CREDENTIAL \N 3.5.4 \N \N 3820445829 8.0.0-updating-credential-data-oracle keycloak META-INF/jpa-changelog-8.0.0.xml 2022-02-02 16:47:26.939218 74 MARK_RAN \N update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=FED_USER_CREDENTIAL; update tableName=FED_USER_CREDENTIAL; update tableName=FED_USER_CREDENTIAL \N 3.5.4 \N \N 3820445829 -8.0.0-credential-cleanup-fixed keycloak META-INF/jpa-changelog-8.0.0.xml 2022-02-02 16:47:26.945819 75 EXECUTED \N dropDefaultValue columnName=COUNTER, tableName=CREDENTIAL; dropDefaultValue columnName=DIGITS, tableName=CREDENTIAL; dropDefaultValue columnName=PERIOD, tableName=CREDENTIAL; dropDefaultValue columnName=ALGORITHM, tableName=CREDENTIAL; dropColumn ... \N 3.5.4 \N \N 3820445829 -8.0.0-resource-tag-support keycloak META-INF/jpa-changelog-8.0.0.xml 2022-02-02 16:47:26.950255 76 EXECUTED \N addColumn tableName=MIGRATION_MODEL; createIndex indexName=IDX_UPDATE_TIME, tableName=MIGRATION_MODEL \N 3.5.4 \N \N 3820445829 -9.0.0-always-display-client keycloak META-INF/jpa-changelog-9.0.0.xml 2022-02-02 16:47:26.955505 77 EXECUTED \N addColumn tableName=CLIENT \N 3.5.4 \N \N 3820445829 -9.0.0-drop-constraints-for-column-increase keycloak META-INF/jpa-changelog-9.0.0.xml 2022-02-02 16:47:26.957216 78 MARK_RAN \N dropUniqueConstraint constraintName=UK_FRSR6T700S9V50BU18WS5PMT, tableName=RESOURCE_SERVER_PERM_TICKET; dropUniqueConstraint constraintName=UK_FRSR6T700S9V50BU18WS5HA6, tableName=RESOURCE_SERVER_RESOURCE; dropPrimaryKey constraintName=CONSTRAINT_O... \N 3.5.4 \N \N 3820445829 -9.0.0-increase-column-size-federated-fk keycloak META-INF/jpa-changelog-9.0.0.xml 2022-02-02 16:47:26.966746 79 EXECUTED \N modifyDataType columnName=CLIENT_ID, tableName=FED_USER_CONSENT; modifyDataType columnName=CLIENT_REALM_CONSTRAINT, tableName=KEYCLOAK_ROLE; modifyDataType columnName=OWNER, tableName=RESOURCE_SERVER_POLICY; modifyDataType columnName=CLIENT_ID, ta... \N 3.5.4 \N \N 3820445829 -9.0.0-recreate-constraints-after-column-increase keycloak META-INF/jpa-changelog-9.0.0.xml 2022-02-02 16:47:26.969643 80 MARK_RAN \N addNotNullConstraint columnName=CLIENT_ID, tableName=OFFLINE_CLIENT_SESSION; addNotNullConstraint columnName=OWNER, tableName=RESOURCE_SERVER_PERM_TICKET; addNotNullConstraint columnName=REQUESTER, tableName=RESOURCE_SERVER_PERM_TICKET; addNotNull... \N 3.5.4 \N \N 3820445829 -9.0.1-add-index-to-client.client_id keycloak META-INF/jpa-changelog-9.0.1.xml 2022-02-02 16:47:26.975764 81 EXECUTED \N createIndex indexName=IDX_CLIENT_ID, tableName=CLIENT \N 3.5.4 \N \N 3820445829 -9.0.1-KEYCLOAK-12579-drop-constraints keycloak META-INF/jpa-changelog-9.0.1.xml 2022-02-02 16:47:26.977227 82 MARK_RAN \N dropUniqueConstraint constraintName=SIBLING_NAMES, tableName=KEYCLOAK_GROUP \N 3.5.4 \N \N 3820445829 -9.0.1-KEYCLOAK-12579-add-not-null-constraint keycloak META-INF/jpa-changelog-9.0.1.xml 2022-02-02 16:47:26.980058 83 EXECUTED \N addNotNullConstraint columnName=PARENT_GROUP, tableName=KEYCLOAK_GROUP \N 3.5.4 \N \N 3820445829 -9.0.1-add-index-to-events keycloak META-INF/jpa-changelog-9.0.1.xml 2022-02-02 16:47:26.985465 85 EXECUTED \N createIndex indexName=IDX_EVENT_TIME, tableName=EVENT_ENTITY \N 3.5.4 \N \N 3820445829 -map-remove-ri keycloak META-INF/jpa-changelog-11.0.0.xml 2022-02-02 16:47:26.98869 86 EXECUTED \N dropForeignKeyConstraint baseTableName=REALM, constraintName=FK_TRAF444KK6QRKMS7N56AIWQ5Y; dropForeignKeyConstraint baseTableName=KEYCLOAK_ROLE, constraintName=FK_KJHO5LE2C0RAL09FL8CM9WFW9 \N 3.5.4 \N \N 3820445829 -map-remove-ri keycloak META-INF/jpa-changelog-12.0.0.xml 2022-02-02 16:47:26.992854 87 EXECUTED \N dropForeignKeyConstraint baseTableName=REALM_DEFAULT_GROUPS, constraintName=FK_DEF_GROUPS_GROUP; dropForeignKeyConstraint baseTableName=REALM_DEFAULT_ROLES, constraintName=FK_H4WPD7W4HSOOLNI3H0SW7BTJE; dropForeignKeyConstraint baseTableName=CLIENT... \N 3.5.4 \N \N 3820445829 -12.1.0-add-realm-localization-table keycloak META-INF/jpa-changelog-12.0.0.xml 2022-02-02 16:47:26.999694 88 EXECUTED \N createTable tableName=REALM_LOCALIZATIONS; addPrimaryKey tableName=REALM_LOCALIZATIONS \N 3.5.4 \N \N 3820445829 -8.0.0-updating-credential-data-not-oracle-fixed keycloak META-INF/jpa-changelog-8.0.0.xml 2023-01-09 14:34:23.080082 89 MARK_RAN 8:83f7a671792ca98b3cbd3a1a34862d3d update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=FED_USER_CREDENTIAL; update tableName=FED_USER_CREDENTIAL; update tableName=FED_USER_CREDENTIAL \N 4.8.0 \N \N 3274862955 -8.0.0-updating-credential-data-oracle-fixed keycloak META-INF/jpa-changelog-8.0.0.xml 2023-01-09 14:34:23.099857 90 MARK_RAN 8:f58ad148698cf30707a6efbdf8061aa7 update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=FED_USER_CREDENTIAL; update tableName=FED_USER_CREDENTIAL; update tableName=FED_USER_CREDENTIAL \N 4.8.0 \N \N 3274862955 -default-roles keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.144776 91 EXECUTED 8:72d03345fda8e2f17093d08801947773 addColumn tableName=REALM; customChange \N 4.8.0 \N \N 3274862955 -default-roles-cleanup keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.155298 92 EXECUTED 8:61c9233951bd96ffecd9ba75f7d978a4 dropTable tableName=REALM_DEFAULT_ROLES; dropTable tableName=CLIENT_DEFAULT_ROLES \N 4.8.0 \N \N 3274862955 -13.0.0-KEYCLOAK-16844 keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.162911 93 EXECUTED 8:ea82e6ad945cec250af6372767b25525 createIndex indexName=IDX_OFFLINE_USS_PRELOAD, tableName=OFFLINE_USER_SESSION \N 4.8.0 \N \N 3274862955 -map-remove-ri-13.0.0 keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.17617 94 EXECUTED 8:d3f4a33f41d960ddacd7e2ef30d126b3 dropForeignKeyConstraint baseTableName=DEFAULT_CLIENT_SCOPE, constraintName=FK_R_DEF_CLI_SCOPE_SCOPE; dropForeignKeyConstraint baseTableName=CLIENT_SCOPE_CLIENT, constraintName=FK_C_CLI_SCOPE_SCOPE; dropForeignKeyConstraint baseTableName=CLIENT_SC... \N 4.8.0 \N \N 3274862955 -13.0.0-KEYCLOAK-17992-drop-constraints keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.1803 95 MARK_RAN 8:1284a27fbd049d65831cb6fc07c8a783 dropPrimaryKey constraintName=C_CLI_SCOPE_BIND, tableName=CLIENT_SCOPE_CLIENT; dropIndex indexName=IDX_CLSCOPE_CL, tableName=CLIENT_SCOPE_CLIENT; dropIndex indexName=IDX_CL_CLSCOPE, tableName=CLIENT_SCOPE_CLIENT \N 4.8.0 \N \N 3274862955 -13.0.0-increase-column-size-federated keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.190613 96 EXECUTED 8:9d11b619db2ae27c25853b8a37cd0dea modifyDataType columnName=CLIENT_ID, tableName=CLIENT_SCOPE_CLIENT; modifyDataType columnName=SCOPE_ID, tableName=CLIENT_SCOPE_CLIENT \N 4.8.0 \N \N 3274862955 -13.0.0-KEYCLOAK-17992-recreate-constraints keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.193934 97 MARK_RAN 8:3002bb3997451bb9e8bac5c5cd8d6327 addNotNullConstraint columnName=CLIENT_ID, tableName=CLIENT_SCOPE_CLIENT; addNotNullConstraint columnName=SCOPE_ID, tableName=CLIENT_SCOPE_CLIENT; addPrimaryKey constraintName=C_CLI_SCOPE_BIND, tableName=CLIENT_SCOPE_CLIENT; createIndex indexName=... \N 4.8.0 \N \N 3274862955 -json-string-accomodation-fixed keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.202965 98 EXECUTED 8:dfbee0d6237a23ef4ccbb7a4e063c163 addColumn tableName=REALM_ATTRIBUTE; update tableName=REALM_ATTRIBUTE; dropColumn columnName=VALUE, tableName=REALM_ATTRIBUTE; renameColumn newColumnName=VALUE, oldColumnName=VALUE_NEW, tableName=REALM_ATTRIBUTE \N 4.8.0 \N \N 3274862955 -14.0.0-KEYCLOAK-11019 keycloak META-INF/jpa-changelog-14.0.0.xml 2023-01-09 14:34:23.212244 99 EXECUTED 8:75f3e372df18d38c62734eebb986b960 createIndex indexName=IDX_OFFLINE_CSS_PRELOAD, tableName=OFFLINE_CLIENT_SESSION; createIndex indexName=IDX_OFFLINE_USS_BY_USER, tableName=OFFLINE_USER_SESSION; createIndex indexName=IDX_OFFLINE_USS_BY_USERSESS, tableName=OFFLINE_USER_SESSION \N 4.8.0 \N \N 3274862955 -14.0.0-KEYCLOAK-18286 keycloak META-INF/jpa-changelog-14.0.0.xml 2023-01-09 14:34:23.2164 100 MARK_RAN 8:7fee73eddf84a6035691512c85637eef createIndex indexName=IDX_CLIENT_ATT_BY_NAME_VALUE, tableName=CLIENT_ATTRIBUTES \N 4.8.0 \N \N 3274862955 -14.0.0-KEYCLOAK-18286-revert keycloak META-INF/jpa-changelog-14.0.0.xml 2023-01-09 14:34:23.227895 101 MARK_RAN 8:7a11134ab12820f999fbf3bb13c3adc8 dropIndex indexName=IDX_CLIENT_ATT_BY_NAME_VALUE, tableName=CLIENT_ATTRIBUTES \N 4.8.0 \N \N 3274862955 -14.0.0-KEYCLOAK-18286-supported-dbs keycloak META-INF/jpa-changelog-14.0.0.xml 2023-01-09 14:34:23.235491 102 EXECUTED 8:c0f6eaac1f3be773ffe54cb5b8482b70 createIndex indexName=IDX_CLIENT_ATT_BY_NAME_VALUE, tableName=CLIENT_ATTRIBUTES \N 4.8.0 \N \N 3274862955 -14.0.0-KEYCLOAK-18286-unsupported-dbs keycloak META-INF/jpa-changelog-14.0.0.xml 2023-01-09 14:34:23.238498 103 MARK_RAN 8:18186f0008b86e0f0f49b0c4d0e842ac createIndex indexName=IDX_CLIENT_ATT_BY_NAME_VALUE, tableName=CLIENT_ATTRIBUTES \N 4.8.0 \N \N 3274862955 -KEYCLOAK-17267-add-index-to-user-attributes keycloak META-INF/jpa-changelog-14.0.0.xml 2023-01-09 14:34:23.24435 104 EXECUTED 8:09c2780bcb23b310a7019d217dc7b433 createIndex indexName=IDX_USER_ATTRIBUTE_NAME, tableName=USER_ATTRIBUTE \N 4.8.0 \N \N 3274862955 -KEYCLOAK-18146-add-saml-art-binding-identifier keycloak META-INF/jpa-changelog-14.0.0.xml 2023-01-09 14:34:23.250444 105 EXECUTED 8:276a44955eab693c970a42880197fff2 customChange \N 4.8.0 \N \N 3274862955 -15.0.0-KEYCLOAK-18467 keycloak META-INF/jpa-changelog-15.0.0.xml 2023-01-09 14:34:23.261701 106 EXECUTED 8:ba8ee3b694d043f2bfc1a1079d0760d7 addColumn tableName=REALM_LOCALIZATIONS; update tableName=REALM_LOCALIZATIONS; dropColumn columnName=TEXTS, tableName=REALM_LOCALIZATIONS; renameColumn newColumnName=TEXTS, oldColumnName=TEXTS_NEW, tableName=REALM_LOCALIZATIONS; addNotNullConstrai... \N 4.8.0 \N \N 3274862955 -17.0.0-9562 keycloak META-INF/jpa-changelog-17.0.0.xml 2023-01-09 14:34:23.269577 107 EXECUTED 8:5e06b1d75f5d17685485e610c2851b17 createIndex indexName=IDX_USER_SERVICE_ACCOUNT, tableName=USER_ENTITY \N 4.8.0 \N \N 3274862955 -18.0.0-10625-IDX_ADMIN_EVENT_TIME keycloak META-INF/jpa-changelog-18.0.0.xml 2023-01-09 14:34:23.276738 108 EXECUTED 8:4b80546c1dc550ac552ee7b24a4ab7c0 createIndex indexName=IDX_ADMIN_EVENT_TIME, tableName=ADMIN_EVENT_ENTITY \N 4.8.0 \N \N 3274862955 -19.0.0-10135 keycloak META-INF/jpa-changelog-19.0.0.xml 2023-01-09 14:34:23.297485 109 EXECUTED 8:af510cd1bb2ab6339c45372f3e491696 customChange \N 4.8.0 \N \N 3274862955 -20.0.0-12964-supported-dbs keycloak META-INF/jpa-changelog-20.0.0.xml 2023-01-09 14:34:23.305463 110 EXECUTED 8:05c99fc610845ef66ee812b7921af0ef createIndex indexName=IDX_GROUP_ATT_BY_NAME_VALUE, tableName=GROUP_ATTRIBUTE \N 4.8.0 \N \N 3274862955 -20.0.0-12964-unsupported-dbs keycloak META-INF/jpa-changelog-20.0.0.xml 2023-01-09 14:34:23.309005 111 MARK_RAN 8:314e803baf2f1ec315b3464e398b8247 createIndex indexName=IDX_GROUP_ATT_BY_NAME_VALUE, tableName=GROUP_ATTRIBUTE \N 4.8.0 \N \N 3274862955 -client-attributes-string-accomodation-fixed keycloak META-INF/jpa-changelog-20.0.0.xml 2023-01-09 14:34:23.318788 112 EXECUTED 8:56e4677e7e12556f70b604c573840100 addColumn tableName=CLIENT_ATTRIBUTES; update tableName=CLIENT_ATTRIBUTES; dropColumn columnName=VALUE, tableName=CLIENT_ATTRIBUTES; renameColumn newColumnName=VALUE, oldColumnName=VALUE_NEW, tableName=CLIENT_ATTRIBUTES \N 4.8.0 \N \N 3274862955 +3.4.2 keycloak META-INF/jpa-changelog-3.4.2.xml 2022-02-02 16:47:26.786619 53 EXECUTED 9:8f23e334dbc59f82e0a328373ca6ced0 update tableName=REALM \N 3.5.4 \N \N 3820445829 +1.0.0.Final-KEYCLOAK-5461 sthorger@redhat.com META-INF/jpa-changelog-1.0.0.Final.xml 2022-02-02 16:47:26.017844 1 EXECUTED 9:6f1016664e21e16d26517a4418f5e3df createTable tableName=APPLICATION_DEFAULT_ROLES; createTable tableName=CLIENT; createTable tableName=CLIENT_SESSION; createTable tableName=CLIENT_SESSION_ROLE; createTable tableName=COMPOSITE_ROLE; createTable tableName=CREDENTIAL; createTable tab... \N 3.5.4 \N \N 3820445829 +1.0.0.Final-KEYCLOAK-5461 sthorger@redhat.com META-INF/db2-jpa-changelog-1.0.0.Final.xml 2022-02-02 16:47:26.03122 2 MARK_RAN 9:828775b1596a07d1200ba1d49e5e3941 createTable tableName=APPLICATION_DEFAULT_ROLES; createTable tableName=CLIENT; createTable tableName=CLIENT_SESSION; createTable tableName=CLIENT_SESSION_ROLE; createTable tableName=COMPOSITE_ROLE; createTable tableName=CREDENTIAL; createTable tab... \N 3.5.4 \N \N 3820445829 +1.1.0.Beta1 sthorger@redhat.com META-INF/jpa-changelog-1.1.0.Beta1.xml 2022-02-02 16:47:26.06085 3 EXECUTED 9:5f090e44a7d595883c1fb61f4b41fd38 delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION; createTable tableName=CLIENT_ATTRIBUTES; createTable tableName=CLIENT_SESSION_NOTE; createTable tableName=APP_NODE_REGISTRATIONS; addColumn table... \N 3.5.4 \N \N 3820445829 +1.1.0.Final sthorger@redhat.com META-INF/jpa-changelog-1.1.0.Final.xml 2022-02-02 16:47:26.065284 4 EXECUTED 9:c07e577387a3d2c04d1adc9aaad8730e renameColumn newColumnName=EVENT_TIME, oldColumnName=TIME, tableName=EVENT_ENTITY \N 3.5.4 \N \N 3820445829 +1.2.0.Beta1 psilva@redhat.com META-INF/jpa-changelog-1.2.0.Beta1.xml 2022-02-02 16:47:26.130908 5 EXECUTED 9:b68ce996c655922dbcd2fe6b6ae72686 delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION; createTable tableName=PROTOCOL_MAPPER; createTable tableName=PROTOCOL_MAPPER_CONFIG; createTable tableName=... \N 3.5.4 \N \N 3820445829 +1.2.0.Beta1 psilva@redhat.com META-INF/db2-jpa-changelog-1.2.0.Beta1.xml 2022-02-02 16:47:26.133863 6 MARK_RAN 9:543b5c9989f024fe35c6f6c5a97de88e delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION; createTable tableName=PROTOCOL_MAPPER; createTable tableName=PROTOCOL_MAPPER_CONFIG; createTable tableName=... \N 3.5.4 \N \N 3820445829 +1.2.0.RC1 bburke@redhat.com META-INF/jpa-changelog-1.2.0.CR1.xml 2022-02-02 16:47:26.183318 7 EXECUTED 9:765afebbe21cf5bbca048e632df38336 delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION_NOTE; delete tableName=USER_SESSION; createTable tableName=MIGRATION_MODEL; createTable tableName=IDENTITY_P... \N 3.5.4 \N \N 3820445829 +1.2.0.RC1 bburke@redhat.com META-INF/db2-jpa-changelog-1.2.0.CR1.xml 2022-02-02 16:47:26.186858 8 MARK_RAN 9:db4a145ba11a6fdaefb397f6dbf829a1 delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION_NOTE; delete tableName=USER_SESSION; createTable tableName=MIGRATION_MODEL; createTable tableName=IDENTITY_P... \N 3.5.4 \N \N 3820445829 +1.2.0.Final keycloak META-INF/jpa-changelog-1.2.0.Final.xml 2022-02-02 16:47:26.19172 9 EXECUTED 9:9d05c7be10cdb873f8bcb41bc3a8ab23 update tableName=CLIENT; update tableName=CLIENT; update tableName=CLIENT \N 3.5.4 \N \N 3820445829 +1.3.0 bburke@redhat.com META-INF/jpa-changelog-1.3.0.xml 2022-02-02 16:47:26.242162 10 EXECUTED 9:18593702353128d53111f9b1ff0b82b8 delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_PROT_MAPPER; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION_NOTE; delete tableName=USER_SESSION; createTable tableName=ADMI... \N 3.5.4 \N \N 3820445829 +1.4.0 bburke@redhat.com META-INF/jpa-changelog-1.4.0.xml 2022-02-02 16:47:26.275929 11 EXECUTED 9:6122efe5f090e41a85c0f1c9e52cbb62 delete tableName=CLIENT_SESSION_AUTH_STATUS; delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_PROT_MAPPER; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION_NOTE; delete table... \N 3.5.4 \N \N 3820445829 +1.4.0 bburke@redhat.com META-INF/db2-jpa-changelog-1.4.0.xml 2022-02-02 16:47:26.278548 12 MARK_RAN 9:e1ff28bf7568451453f844c5d54bb0b5 delete tableName=CLIENT_SESSION_AUTH_STATUS; delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_PROT_MAPPER; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION_NOTE; delete table... \N 3.5.4 \N \N 3820445829 +1.5.0 bburke@redhat.com META-INF/jpa-changelog-1.5.0.xml 2022-02-02 16:47:26.287616 13 EXECUTED 9:7af32cd8957fbc069f796b61217483fd delete tableName=CLIENT_SESSION_AUTH_STATUS; delete tableName=CLIENT_SESSION_ROLE; delete tableName=CLIENT_SESSION_PROT_MAPPER; delete tableName=CLIENT_SESSION_NOTE; delete tableName=CLIENT_SESSION; delete tableName=USER_SESSION_NOTE; delete table... \N 3.5.4 \N \N 3820445829 +1.6.1_from15 mposolda@redhat.com META-INF/jpa-changelog-1.6.1.xml 2022-02-02 16:47:26.299798 14 EXECUTED 9:6005e15e84714cd83226bf7879f54190 addColumn tableName=REALM; addColumn tableName=KEYCLOAK_ROLE; addColumn tableName=CLIENT; createTable tableName=OFFLINE_USER_SESSION; createTable tableName=OFFLINE_CLIENT_SESSION; addPrimaryKey constraintName=CONSTRAINT_OFFL_US_SES_PK2, tableName=... \N 3.5.4 \N \N 3820445829 +1.6.1_from16-pre mposolda@redhat.com META-INF/jpa-changelog-1.6.1.xml 2022-02-02 16:47:26.302088 15 MARK_RAN 9:bf656f5a2b055d07f314431cae76f06c delete tableName=OFFLINE_CLIENT_SESSION; delete tableName=OFFLINE_USER_SESSION \N 3.5.4 \N \N 3820445829 +1.6.1_from16 mposolda@redhat.com META-INF/jpa-changelog-1.6.1.xml 2022-02-02 16:47:26.303889 16 MARK_RAN 9:f8dadc9284440469dcf71e25ca6ab99b dropPrimaryKey constraintName=CONSTRAINT_OFFLINE_US_SES_PK, tableName=OFFLINE_USER_SESSION; dropPrimaryKey constraintName=CONSTRAINT_OFFLINE_CL_SES_PK, tableName=OFFLINE_CLIENT_SESSION; addColumn tableName=OFFLINE_USER_SESSION; update tableName=OF... \N 3.5.4 \N \N 3820445829 +1.7.0 bburke@redhat.com META-INF/jpa-changelog-1.7.0.xml 2022-02-02 16:47:26.338791 18 EXECUTED 9:3368ff0be4c2855ee2dd9ca813b38d8e createTable tableName=KEYCLOAK_GROUP; createTable tableName=GROUP_ROLE_MAPPING; createTable tableName=GROUP_ATTRIBUTE; createTable tableName=USER_GROUP_MEMBERSHIP; createTable tableName=REALM_DEFAULT_GROUPS; addColumn tableName=IDENTITY_PROVIDER; ... \N 3.5.4 \N \N 3820445829 +1.8.0 mposolda@redhat.com META-INF/jpa-changelog-1.8.0.xml 2022-02-02 16:47:26.381463 19 EXECUTED 9:8ac2fb5dd030b24c0570a763ed75ed20 addColumn tableName=IDENTITY_PROVIDER; createTable tableName=CLIENT_TEMPLATE; createTable tableName=CLIENT_TEMPLATE_ATTRIBUTES; createTable tableName=TEMPLATE_SCOPE_MAPPING; dropNotNullConstraint columnName=CLIENT_ID, tableName=PROTOCOL_MAPPER; ad... \N 3.5.4 \N \N 3820445829 +1.8.0-2 keycloak META-INF/jpa-changelog-1.8.0.xml 2022-02-02 16:47:26.390165 20 EXECUTED 9:f91ddca9b19743db60e3057679810e6c dropDefaultValue columnName=ALGORITHM, tableName=CREDENTIAL; update tableName=CREDENTIAL \N 3.5.4 \N \N 3820445829 +1.8.0 mposolda@redhat.com META-INF/db2-jpa-changelog-1.8.0.xml 2022-02-02 16:47:26.392862 21 MARK_RAN 9:831e82914316dc8a57dc09d755f23c51 addColumn tableName=IDENTITY_PROVIDER; createTable tableName=CLIENT_TEMPLATE; createTable tableName=CLIENT_TEMPLATE_ATTRIBUTES; createTable tableName=TEMPLATE_SCOPE_MAPPING; dropNotNullConstraint columnName=CLIENT_ID, tableName=PROTOCOL_MAPPER; ad... \N 3.5.4 \N \N 3820445829 +1.8.0-2 keycloak META-INF/db2-jpa-changelog-1.8.0.xml 2022-02-02 16:47:26.395652 22 MARK_RAN 9:f91ddca9b19743db60e3057679810e6c dropDefaultValue columnName=ALGORITHM, tableName=CREDENTIAL; update tableName=CREDENTIAL \N 3.5.4 \N \N 3820445829 +1.9.0 mposolda@redhat.com META-INF/jpa-changelog-1.9.0.xml 2022-02-02 16:47:26.40969 23 EXECUTED 9:bc3d0f9e823a69dc21e23e94c7a94bb1 update tableName=REALM; update tableName=REALM; update tableName=REALM; update tableName=REALM; update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=REALM; update tableName=REALM; customChange; dr... \N 3.5.4 \N \N 3820445829 +1.9.1 keycloak META-INF/jpa-changelog-1.9.1.xml 2022-02-02 16:47:26.414344 24 EXECUTED 9:c9999da42f543575ab790e76439a2679 modifyDataType columnName=PRIVATE_KEY, tableName=REALM; modifyDataType columnName=PUBLIC_KEY, tableName=REALM; modifyDataType columnName=CERTIFICATE, tableName=REALM \N 3.5.4 \N \N 3820445829 +1.9.1 keycloak META-INF/db2-jpa-changelog-1.9.1.xml 2022-02-02 16:47:26.416193 25 MARK_RAN 9:0d6c65c6f58732d81569e77b10ba301d modifyDataType columnName=PRIVATE_KEY, tableName=REALM; modifyDataType columnName=CERTIFICATE, tableName=REALM \N 3.5.4 \N \N 3820445829 +1.9.2 keycloak META-INF/jpa-changelog-1.9.2.xml 2022-02-02 16:47:26.437367 26 EXECUTED 9:fc576660fc016ae53d2d4778d84d86d0 createIndex indexName=IDX_USER_EMAIL, tableName=USER_ENTITY; createIndex indexName=IDX_USER_ROLE_MAPPING, tableName=USER_ROLE_MAPPING; createIndex indexName=IDX_USER_GROUP_MAPPING, tableName=USER_GROUP_MEMBERSHIP; createIndex indexName=IDX_USER_CO... \N 3.5.4 \N \N 3820445829 +authz-2.0.0 psilva@redhat.com META-INF/jpa-changelog-authz-2.0.0.xml 2022-02-02 16:47:26.481647 27 EXECUTED 9:43ed6b0da89ff77206289e87eaa9c024 createTable tableName=RESOURCE_SERVER; addPrimaryKey constraintName=CONSTRAINT_FARS, tableName=RESOURCE_SERVER; addUniqueConstraint constraintName=UK_AU8TT6T700S9V50BU18WS5HA6, tableName=RESOURCE_SERVER; createTable tableName=RESOURCE_SERVER_RESOU... \N 3.5.4 \N \N 3820445829 +2.1.0-KEYCLOAK-5461 bburke@redhat.com META-INF/jpa-changelog-2.1.0.xml 2022-02-02 16:47:26.523006 29 EXECUTED 9:bd88e1f833df0420b01e114533aee5e8 createTable tableName=BROKER_LINK; createTable tableName=FED_USER_ATTRIBUTE; createTable tableName=FED_USER_CONSENT; createTable tableName=FED_USER_CONSENT_ROLE; createTable tableName=FED_USER_CONSENT_PROT_MAPPER; createTable tableName=FED_USER_CR... \N 3.5.4 \N \N 3820445829 +2.2.0 bburke@redhat.com META-INF/jpa-changelog-2.2.0.xml 2022-02-02 16:47:26.532066 30 EXECUTED 9:a7022af5267f019d020edfe316ef4371 addColumn tableName=ADMIN_EVENT_ENTITY; createTable tableName=CREDENTIAL_ATTRIBUTE; createTable tableName=FED_CREDENTIAL_ATTRIBUTE; modifyDataType columnName=VALUE, tableName=CREDENTIAL; addForeignKeyConstraint baseTableName=FED_CREDENTIAL_ATTRIBU... \N 3.5.4 \N \N 3820445829 +2.3.0 bburke@redhat.com META-INF/jpa-changelog-2.3.0.xml 2022-02-02 16:47:26.541837 31 EXECUTED 9:fc155c394040654d6a79227e56f5e25a createTable tableName=FEDERATED_USER; addPrimaryKey constraintName=CONSTR_FEDERATED_USER, tableName=FEDERATED_USER; dropDefaultValue columnName=TOTP, tableName=USER_ENTITY; dropColumn columnName=TOTP, tableName=USER_ENTITY; addColumn tableName=IDE... \N 3.5.4 \N \N 3820445829 +2.4.0 bburke@redhat.com META-INF/jpa-changelog-2.4.0.xml 2022-02-02 16:47:26.545809 32 EXECUTED 9:eac4ffb2a14795e5dc7b426063e54d88 customChange \N 3.5.4 \N \N 3820445829 +2.5.0 bburke@redhat.com META-INF/jpa-changelog-2.5.0.xml 2022-02-02 16:47:26.549823 33 EXECUTED 9:54937c05672568c4c64fc9524c1e9462 customChange; modifyDataType columnName=USER_ID, tableName=OFFLINE_USER_SESSION \N 3.5.4 \N \N 3820445829 +2.5.0-unicode-oracle hmlnarik@redhat.com META-INF/jpa-changelog-2.5.0.xml 2022-02-02 16:47:26.55176 34 MARK_RAN 9:3a32bace77c84d7678d035a7f5a8084e modifyDataType columnName=DESCRIPTION, tableName=AUTHENTICATION_FLOW; modifyDataType columnName=DESCRIPTION, tableName=CLIENT_TEMPLATE; modifyDataType columnName=DESCRIPTION, tableName=RESOURCE_SERVER_POLICY; modifyDataType columnName=DESCRIPTION,... \N 3.5.4 \N \N 3820445829 +2.5.0-unicode-other-dbs hmlnarik@redhat.com META-INF/jpa-changelog-2.5.0.xml 2022-02-02 16:47:26.567305 35 EXECUTED 9:33d72168746f81f98ae3a1e8e0ca3554 modifyDataType columnName=DESCRIPTION, tableName=AUTHENTICATION_FLOW; modifyDataType columnName=DESCRIPTION, tableName=CLIENT_TEMPLATE; modifyDataType columnName=DESCRIPTION, tableName=RESOURCE_SERVER_POLICY; modifyDataType columnName=DESCRIPTION,... \N 3.5.4 \N \N 3820445829 +2.5.0-duplicate-email-support slawomir@dabek.name META-INF/jpa-changelog-2.5.0.xml 2022-02-02 16:47:26.570727 36 EXECUTED 9:61b6d3d7a4c0e0024b0c839da283da0c addColumn tableName=REALM \N 3.5.4 \N \N 3820445829 +2.5.0-unique-group-names hmlnarik@redhat.com META-INF/jpa-changelog-2.5.0.xml 2022-02-02 16:47:26.578396 37 EXECUTED 9:8dcac7bdf7378e7d823cdfddebf72fda addUniqueConstraint constraintName=SIBLING_NAMES, tableName=KEYCLOAK_GROUP \N 3.5.4 \N \N 3820445829 +2.5.1 bburke@redhat.com META-INF/jpa-changelog-2.5.1.xml 2022-02-02 16:47:26.581391 38 EXECUTED 9:a2b870802540cb3faa72098db5388af3 addColumn tableName=FED_USER_CONSENT \N 3.5.4 \N \N 3820445829 +3.0.0 bburke@redhat.com META-INF/jpa-changelog-3.0.0.xml 2022-02-02 16:47:26.584204 39 EXECUTED 9:132a67499ba24bcc54fb5cbdcfe7e4c0 addColumn tableName=IDENTITY_PROVIDER \N 3.5.4 \N \N 3820445829 +3.2.0-fix keycloak META-INF/jpa-changelog-3.2.0.xml 2022-02-02 16:47:26.585877 40 MARK_RAN 9:938f894c032f5430f2b0fafb1a243462 addNotNullConstraint columnName=REALM_ID, tableName=CLIENT_INITIAL_ACCESS \N 3.5.4 \N \N 3820445829 +3.2.0-fix-with-keycloak-5416 keycloak META-INF/jpa-changelog-3.2.0.xml 2022-02-02 16:47:26.587657 41 MARK_RAN 9:845c332ff1874dc5d35974b0babf3006 dropIndex indexName=IDX_CLIENT_INIT_ACC_REALM, tableName=CLIENT_INITIAL_ACCESS; addNotNullConstraint columnName=REALM_ID, tableName=CLIENT_INITIAL_ACCESS; createIndex indexName=IDX_CLIENT_INIT_ACC_REALM, tableName=CLIENT_INITIAL_ACCESS \N 3.5.4 \N \N 3820445829 +3.2.0-fix-offline-sessions hmlnarik META-INF/jpa-changelog-3.2.0.xml 2022-02-02 16:47:26.591561 42 EXECUTED 9:fc86359c079781adc577c5a217e4d04c customChange \N 3.5.4 \N \N 3820445829 +3.2.0-fixed keycloak META-INF/jpa-changelog-3.2.0.xml 2022-02-02 16:47:26.669981 43 EXECUTED 9:59a64800e3c0d09b825f8a3b444fa8f4 addColumn tableName=REALM; dropPrimaryKey constraintName=CONSTRAINT_OFFL_CL_SES_PK2, tableName=OFFLINE_CLIENT_SESSION; dropColumn columnName=CLIENT_SESSION_ID, tableName=OFFLINE_CLIENT_SESSION; addPrimaryKey constraintName=CONSTRAINT_OFFL_CL_SES_P... \N 3.5.4 \N \N 3820445829 +3.3.0 keycloak META-INF/jpa-changelog-3.3.0.xml 2022-02-02 16:47:26.673701 44 EXECUTED 9:d48d6da5c6ccf667807f633fe489ce88 addColumn tableName=USER_ENTITY \N 3.5.4 \N \N 3820445829 +authz-3.4.0.CR1-resource-server-pk-change-part1 glavoie@gmail.com META-INF/jpa-changelog-authz-3.4.0.CR1.xml 2022-02-02 16:47:26.679075 45 EXECUTED 9:dde36f7973e80d71fceee683bc5d2951 addColumn tableName=RESOURCE_SERVER_POLICY; addColumn tableName=RESOURCE_SERVER_RESOURCE; addColumn tableName=RESOURCE_SERVER_SCOPE \N 3.5.4 \N \N 3820445829 +authz-3.4.0.CR1-resource-server-pk-change-part2-KEYCLOAK-6095 hmlnarik@redhat.com META-INF/jpa-changelog-authz-3.4.0.CR1.xml 2022-02-02 16:47:26.681987 46 EXECUTED 9:b855e9b0a406b34fa323235a0cf4f640 customChange \N 3.5.4 \N \N 3820445829 +authz-3.4.0.CR1-resource-server-pk-change-part3-fixed glavoie@gmail.com META-INF/jpa-changelog-authz-3.4.0.CR1.xml 2022-02-02 16:47:26.683661 47 MARK_RAN 9:51abbacd7b416c50c4421a8cabf7927e dropIndex indexName=IDX_RES_SERV_POL_RES_SERV, tableName=RESOURCE_SERVER_POLICY; dropIndex indexName=IDX_RES_SRV_RES_RES_SRV, tableName=RESOURCE_SERVER_RESOURCE; dropIndex indexName=IDX_RES_SRV_SCOPE_RES_SRV, tableName=RESOURCE_SERVER_SCOPE \N 3.5.4 \N \N 3820445829 +authz-3.4.0.CR1-resource-server-pk-change-part3-fixed-nodropindex glavoie@gmail.com META-INF/jpa-changelog-authz-3.4.0.CR1.xml 2022-02-02 16:47:26.702743 48 EXECUTED 9:bdc99e567b3398bac83263d375aad143 addNotNullConstraint columnName=RESOURCE_SERVER_CLIENT_ID, tableName=RESOURCE_SERVER_POLICY; addNotNullConstraint columnName=RESOURCE_SERVER_CLIENT_ID, tableName=RESOURCE_SERVER_RESOURCE; addNotNullConstraint columnName=RESOURCE_SERVER_CLIENT_ID, ... \N 3.5.4 \N \N 3820445829 +authn-3.4.0.CR1-refresh-token-max-reuse glavoie@gmail.com META-INF/jpa-changelog-authz-3.4.0.CR1.xml 2022-02-02 16:47:26.706593 49 EXECUTED 9:d198654156881c46bfba39abd7769e69 addColumn tableName=REALM \N 3.5.4 \N \N 3820445829 +3.4.0 keycloak META-INF/jpa-changelog-3.4.0.xml 2022-02-02 16:47:26.734467 50 EXECUTED 9:cfdd8736332ccdd72c5256ccb42335db addPrimaryKey constraintName=CONSTRAINT_REALM_DEFAULT_ROLES, tableName=REALM_DEFAULT_ROLES; addPrimaryKey constraintName=CONSTRAINT_COMPOSITE_ROLE, tableName=COMPOSITE_ROLE; addPrimaryKey constraintName=CONSTR_REALM_DEFAULT_GROUPS, tableName=REALM... \N 3.5.4 \N \N 3820445829 +3.4.0-KEYCLOAK-5230 hmlnarik@redhat.com META-INF/jpa-changelog-3.4.0.xml 2022-02-02 16:47:26.78037 51 EXECUTED 9:7c84de3d9bd84d7f077607c1a4dcb714 createIndex indexName=IDX_FU_ATTRIBUTE, tableName=FED_USER_ATTRIBUTE; createIndex indexName=IDX_FU_CONSENT, tableName=FED_USER_CONSENT; createIndex indexName=IDX_FU_CONSENT_RU, tableName=FED_USER_CONSENT; createIndex indexName=IDX_FU_CREDENTIAL, t... \N 3.5.4 \N \N 3820445829 +3.4.1 psilva@redhat.com META-INF/jpa-changelog-3.4.1.xml 2022-02-02 16:47:26.783989 52 EXECUTED 9:5a6bb36cbefb6a9d6928452c0852af2d modifyDataType columnName=VALUE, tableName=CLIENT_ATTRIBUTES \N 3.5.4 \N \N 3820445829 +3.4.2-KEYCLOAK-5172 mkanis@redhat.com META-INF/jpa-changelog-3.4.2.xml 2022-02-02 16:47:26.788788 54 EXECUTED 9:9156214268f09d970cdf0e1564d866af update tableName=CLIENT \N 3.5.4 \N \N 3820445829 +4.0.0-KEYCLOAK-6335 bburke@redhat.com META-INF/jpa-changelog-4.0.0.xml 2022-02-02 16:47:26.794881 55 EXECUTED 9:db806613b1ed154826c02610b7dbdf74 createTable tableName=CLIENT_AUTH_FLOW_BINDINGS; addPrimaryKey constraintName=C_CLI_FLOW_BIND, tableName=CLIENT_AUTH_FLOW_BINDINGS \N 3.5.4 \N \N 3820445829 +4.0.0-CLEANUP-UNUSED-TABLE bburke@redhat.com META-INF/jpa-changelog-4.0.0.xml 2022-02-02 16:47:26.799493 56 EXECUTED 9:229a041fb72d5beac76bb94a5fa709de dropTable tableName=CLIENT_IDENTITY_PROV_MAPPING \N 3.5.4 \N \N 3820445829 +4.0.0-KEYCLOAK-6228 bburke@redhat.com META-INF/jpa-changelog-4.0.0.xml 2022-02-02 16:47:26.810686 57 EXECUTED 9:079899dade9c1e683f26b2aa9ca6ff04 dropUniqueConstraint constraintName=UK_JKUWUVD56ONTGSUHOGM8UEWRT, tableName=USER_CONSENT; dropNotNullConstraint columnName=CLIENT_ID, tableName=USER_CONSENT; addColumn tableName=USER_CONSENT; addUniqueConstraint constraintName=UK_JKUWUVD56ONTGSUHO... \N 3.5.4 \N \N 3820445829 +4.0.0-KEYCLOAK-5579-fixed mposolda@redhat.com META-INF/jpa-changelog-4.0.0.xml 2022-02-02 16:47:26.861332 58 EXECUTED 9:139b79bcbbfe903bb1c2d2a4dbf001d9 dropForeignKeyConstraint baseTableName=CLIENT_TEMPLATE_ATTRIBUTES, constraintName=FK_CL_TEMPL_ATTR_TEMPL; renameTable newTableName=CLIENT_SCOPE_ATTRIBUTES, oldTableName=CLIENT_TEMPLATE_ATTRIBUTES; renameColumn newColumnName=SCOPE_ID, oldColumnName... \N 3.5.4 \N \N 3820445829 +authz-4.0.0.CR1 psilva@redhat.com META-INF/jpa-changelog-authz-4.0.0.CR1.xml 2022-02-02 16:47:26.877018 59 EXECUTED 9:b55738ad889860c625ba2bf483495a04 createTable tableName=RESOURCE_SERVER_PERM_TICKET; addPrimaryKey constraintName=CONSTRAINT_FAPMT, tableName=RESOURCE_SERVER_PERM_TICKET; addForeignKeyConstraint baseTableName=RESOURCE_SERVER_PERM_TICKET, constraintName=FK_FRSRHO213XCX4WNKOG82SSPMT... \N 3.5.4 \N \N 3820445829 +authz-4.0.0.Beta3 psilva@redhat.com META-INF/jpa-changelog-authz-4.0.0.Beta3.xml 2022-02-02 16:47:26.881203 60 EXECUTED 9:e0057eac39aa8fc8e09ac6cfa4ae15fe addColumn tableName=RESOURCE_SERVER_POLICY; addColumn tableName=RESOURCE_SERVER_PERM_TICKET; addForeignKeyConstraint baseTableName=RESOURCE_SERVER_PERM_TICKET, constraintName=FK_FRSRPO2128CX4WNKOG82SSRFY, referencedTableName=RESOURCE_SERVER_POLICY \N 3.5.4 \N \N 3820445829 +authz-4.2.0.Final mhajas@redhat.com META-INF/jpa-changelog-authz-4.2.0.Final.xml 2022-02-02 16:47:26.886177 61 EXECUTED 9:42a33806f3a0443fe0e7feeec821326c createTable tableName=RESOURCE_URIS; addForeignKeyConstraint baseTableName=RESOURCE_URIS, constraintName=FK_RESOURCE_SERVER_URIS, referencedTableName=RESOURCE_SERVER_RESOURCE; customChange; dropColumn columnName=URI, tableName=RESOURCE_SERVER_RESO... \N 3.5.4 \N \N 3820445829 +authz-4.2.0.Final-KEYCLOAK-9944 hmlnarik@redhat.com META-INF/jpa-changelog-authz-4.2.0.Final.xml 2022-02-02 16:47:26.890482 62 EXECUTED 9:9968206fca46eecc1f51db9c024bfe56 addPrimaryKey constraintName=CONSTRAINT_RESOUR_URIS_PK, tableName=RESOURCE_URIS \N 3.5.4 \N \N 3820445829 +4.2.0-KEYCLOAK-6313 wadahiro@gmail.com META-INF/jpa-changelog-4.2.0.xml 2022-02-02 16:47:26.893518 63 EXECUTED 9:92143a6daea0a3f3b8f598c97ce55c3d addColumn tableName=REQUIRED_ACTION_PROVIDER \N 3.5.4 \N \N 3820445829 +4.3.0-KEYCLOAK-7984 wadahiro@gmail.com META-INF/jpa-changelog-4.3.0.xml 2022-02-02 16:47:26.895621 64 EXECUTED 9:82bab26a27195d889fb0429003b18f40 update tableName=REQUIRED_ACTION_PROVIDER \N 3.5.4 \N \N 3820445829 +4.6.0-KEYCLOAK-7950 psilva@redhat.com META-INF/jpa-changelog-4.6.0.xml 2022-02-02 16:47:26.89756 65 EXECUTED 9:e590c88ddc0b38b0ae4249bbfcb5abc3 update tableName=RESOURCE_SERVER_RESOURCE \N 3.5.4 \N \N 3820445829 +4.6.0-KEYCLOAK-8377 keycloak META-INF/jpa-changelog-4.6.0.xml 2022-02-02 16:47:26.908059 66 EXECUTED 9:5c1f475536118dbdc38d5d7977950cc0 createTable tableName=ROLE_ATTRIBUTE; addPrimaryKey constraintName=CONSTRAINT_ROLE_ATTRIBUTE_PK, tableName=ROLE_ATTRIBUTE; addForeignKeyConstraint baseTableName=ROLE_ATTRIBUTE, constraintName=FK_ROLE_ATTRIBUTE_ID, referencedTableName=KEYCLOAK_ROLE... \N 3.5.4 \N \N 3820445829 +4.6.0-KEYCLOAK-8555 gideonray@gmail.com META-INF/jpa-changelog-4.6.0.xml 2022-02-02 16:47:26.912693 67 EXECUTED 9:e7c9f5f9c4d67ccbbcc215440c718a17 createIndex indexName=IDX_COMPONENT_PROVIDER_TYPE, tableName=COMPONENT \N 3.5.4 \N \N 3820445829 +4.7.0-KEYCLOAK-1267 sguilhen@redhat.com META-INF/jpa-changelog-4.7.0.xml 2022-02-02 16:47:26.915771 68 EXECUTED 9:88e0bfdda924690d6f4e430c53447dd5 addColumn tableName=REALM \N 3.5.4 \N \N 3820445829 +4.7.0-KEYCLOAK-7275 keycloak META-INF/jpa-changelog-4.7.0.xml 2022-02-02 16:47:26.924465 69 EXECUTED 9:f53177f137e1c46b6a88c59ec1cb5218 renameColumn newColumnName=CREATED_ON, oldColumnName=LAST_SESSION_REFRESH, tableName=OFFLINE_USER_SESSION; addNotNullConstraint columnName=CREATED_ON, tableName=OFFLINE_USER_SESSION; addColumn tableName=OFFLINE_USER_SESSION; customChange; createIn... \N 3.5.4 \N \N 3820445829 +4.8.0-KEYCLOAK-8835 sguilhen@redhat.com META-INF/jpa-changelog-4.8.0.xml 2022-02-02 16:47:26.928034 70 EXECUTED 9:a74d33da4dc42a37ec27121580d1459f addNotNullConstraint columnName=SSO_MAX_LIFESPAN_REMEMBER_ME, tableName=REALM; addNotNullConstraint columnName=SSO_IDLE_TIMEOUT_REMEMBER_ME, tableName=REALM \N 3.5.4 \N \N 3820445829 +authz-7.0.0-KEYCLOAK-10443 psilva@redhat.com META-INF/jpa-changelog-authz-7.0.0.xml 2022-02-02 16:47:26.93061 71 EXECUTED 9:fd4ade7b90c3b67fae0bfcfcb42dfb5f addColumn tableName=RESOURCE_SERVER \N 3.5.4 \N \N 3820445829 +8.0.0-adding-credential-columns keycloak META-INF/jpa-changelog-8.0.0.xml 2022-02-02 16:47:26.933771 72 EXECUTED 9:aa072ad090bbba210d8f18781b8cebf4 addColumn tableName=CREDENTIAL; addColumn tableName=FED_USER_CREDENTIAL \N 3.5.4 \N \N 3820445829 +8.0.0-credential-cleanup-fixed keycloak META-INF/jpa-changelog-8.0.0.xml 2022-02-02 16:47:26.945819 75 EXECUTED 9:2b9cc12779be32c5b40e2e67711a218b dropDefaultValue columnName=COUNTER, tableName=CREDENTIAL; dropDefaultValue columnName=DIGITS, tableName=CREDENTIAL; dropDefaultValue columnName=PERIOD, tableName=CREDENTIAL; dropDefaultValue columnName=ALGORITHM, tableName=CREDENTIAL; dropColumn ... \N 3.5.4 \N \N 3820445829 +8.0.0-resource-tag-support keycloak META-INF/jpa-changelog-8.0.0.xml 2022-02-02 16:47:26.950255 76 EXECUTED 9:91fa186ce7a5af127a2d7a91ee083cc5 addColumn tableName=MIGRATION_MODEL; createIndex indexName=IDX_UPDATE_TIME, tableName=MIGRATION_MODEL \N 3.5.4 \N \N 3820445829 +9.0.0-always-display-client keycloak META-INF/jpa-changelog-9.0.0.xml 2022-02-02 16:47:26.955505 77 EXECUTED 9:6335e5c94e83a2639ccd68dd24e2e5ad addColumn tableName=CLIENT \N 3.5.4 \N \N 3820445829 +9.0.0-drop-constraints-for-column-increase keycloak META-INF/jpa-changelog-9.0.0.xml 2022-02-02 16:47:26.957216 78 MARK_RAN 9:6bdb5658951e028bfe16fa0a8228b530 dropUniqueConstraint constraintName=UK_FRSR6T700S9V50BU18WS5PMT, tableName=RESOURCE_SERVER_PERM_TICKET; dropUniqueConstraint constraintName=UK_FRSR6T700S9V50BU18WS5HA6, tableName=RESOURCE_SERVER_RESOURCE; dropPrimaryKey constraintName=CONSTRAINT_O... \N 3.5.4 \N \N 3820445829 +9.0.0-increase-column-size-federated-fk keycloak META-INF/jpa-changelog-9.0.0.xml 2022-02-02 16:47:26.966746 79 EXECUTED 9:d5bc15a64117ccad481ce8792d4c608f modifyDataType columnName=CLIENT_ID, tableName=FED_USER_CONSENT; modifyDataType columnName=CLIENT_REALM_CONSTRAINT, tableName=KEYCLOAK_ROLE; modifyDataType columnName=OWNER, tableName=RESOURCE_SERVER_POLICY; modifyDataType columnName=CLIENT_ID, ta... \N 3.5.4 \N \N 3820445829 +9.0.0-recreate-constraints-after-column-increase keycloak META-INF/jpa-changelog-9.0.0.xml 2022-02-02 16:47:26.969643 80 MARK_RAN 9:077cba51999515f4d3e7ad5619ab592c addNotNullConstraint columnName=CLIENT_ID, tableName=OFFLINE_CLIENT_SESSION; addNotNullConstraint columnName=OWNER, tableName=RESOURCE_SERVER_PERM_TICKET; addNotNullConstraint columnName=REQUESTER, tableName=RESOURCE_SERVER_PERM_TICKET; addNotNull... \N 3.5.4 \N \N 3820445829 +9.0.1-add-index-to-client.client_id keycloak META-INF/jpa-changelog-9.0.1.xml 2022-02-02 16:47:26.975764 81 EXECUTED 9:be969f08a163bf47c6b9e9ead8ac2afb createIndex indexName=IDX_CLIENT_ID, tableName=CLIENT \N 3.5.4 \N \N 3820445829 +9.0.1-KEYCLOAK-12579-drop-constraints keycloak META-INF/jpa-changelog-9.0.1.xml 2022-02-02 16:47:26.977227 82 MARK_RAN 9:6d3bb4408ba5a72f39bd8a0b301ec6e3 dropUniqueConstraint constraintName=SIBLING_NAMES, tableName=KEYCLOAK_GROUP \N 3.5.4 \N \N 3820445829 +9.0.1-KEYCLOAK-12579-add-not-null-constraint keycloak META-INF/jpa-changelog-9.0.1.xml 2022-02-02 16:47:26.980058 83 EXECUTED 9:966bda61e46bebf3cc39518fbed52fa7 addNotNullConstraint columnName=PARENT_GROUP, tableName=KEYCLOAK_GROUP \N 3.5.4 \N \N 3820445829 +9.0.1-KEYCLOAK-12579-recreate-constraints keycloak META-INF/jpa-changelog-9.0.1.xml 2022-02-02 16:47:26.981645 84 MARK_RAN 9:8dcac7bdf7378e7d823cdfddebf72fda addUniqueConstraint constraintName=SIBLING_NAMES, tableName=KEYCLOAK_GROUP \N 3.5.4 \N \N 3820445829 +9.0.1-add-index-to-events keycloak META-INF/jpa-changelog-9.0.1.xml 2022-02-02 16:47:26.985465 85 EXECUTED 9:7d93d602352a30c0c317e6a609b56599 createIndex indexName=IDX_EVENT_TIME, tableName=EVENT_ENTITY \N 3.5.4 \N \N 3820445829 +map-remove-ri keycloak META-INF/jpa-changelog-11.0.0.xml 2022-02-02 16:47:26.98869 86 EXECUTED 9:71c5969e6cdd8d7b6f47cebc86d37627 dropForeignKeyConstraint baseTableName=REALM, constraintName=FK_TRAF444KK6QRKMS7N56AIWQ5Y; dropForeignKeyConstraint baseTableName=KEYCLOAK_ROLE, constraintName=FK_KJHO5LE2C0RAL09FL8CM9WFW9 \N 3.5.4 \N \N 3820445829 +map-remove-ri keycloak META-INF/jpa-changelog-12.0.0.xml 2022-02-02 16:47:26.992854 87 EXECUTED 9:a9ba7d47f065f041b7da856a81762021 dropForeignKeyConstraint baseTableName=REALM_DEFAULT_GROUPS, constraintName=FK_DEF_GROUPS_GROUP; dropForeignKeyConstraint baseTableName=REALM_DEFAULT_ROLES, constraintName=FK_H4WPD7W4HSOOLNI3H0SW7BTJE; dropForeignKeyConstraint baseTableName=CLIENT... \N 3.5.4 \N \N 3820445829 +12.1.0-add-realm-localization-table keycloak META-INF/jpa-changelog-12.0.0.xml 2022-02-02 16:47:26.999694 88 EXECUTED 9:fffabce2bc01e1a8f5110d5278500065 createTable tableName=REALM_LOCALIZATIONS; addPrimaryKey tableName=REALM_LOCALIZATIONS \N 3.5.4 \N \N 3820445829 +8.0.0-updating-credential-data-not-oracle-fixed keycloak META-INF/jpa-changelog-8.0.0.xml 2023-01-09 14:34:23.080082 89 MARK_RAN 9:1ae6be29bab7c2aa376f6983b932be37 update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=FED_USER_CREDENTIAL; update tableName=FED_USER_CREDENTIAL; update tableName=FED_USER_CREDENTIAL \N 4.8.0 \N \N 3274862955 +8.0.0-updating-credential-data-oracle-fixed keycloak META-INF/jpa-changelog-8.0.0.xml 2023-01-09 14:34:23.099857 90 MARK_RAN 9:14706f286953fc9a25286dbd8fb30d97 update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=CREDENTIAL; update tableName=FED_USER_CREDENTIAL; update tableName=FED_USER_CREDENTIAL; update tableName=FED_USER_CREDENTIAL \N 4.8.0 \N \N 3274862955 +default-roles keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.144776 91 EXECUTED 9:fa8a5b5445e3857f4b010bafb5009957 addColumn tableName=REALM; customChange \N 4.8.0 \N \N 3274862955 +default-roles-cleanup keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.155298 92 EXECUTED 9:67ac3241df9a8582d591c5ed87125f39 dropTable tableName=REALM_DEFAULT_ROLES; dropTable tableName=CLIENT_DEFAULT_ROLES \N 4.8.0 \N \N 3274862955 +13.0.0-KEYCLOAK-16844 keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.162911 93 EXECUTED 9:ad1194d66c937e3ffc82386c050ba089 createIndex indexName=IDX_OFFLINE_USS_PRELOAD, tableName=OFFLINE_USER_SESSION \N 4.8.0 \N \N 3274862955 +map-remove-ri-13.0.0 keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.17617 94 EXECUTED 9:d9be619d94af5a2f5d07b9f003543b91 dropForeignKeyConstraint baseTableName=DEFAULT_CLIENT_SCOPE, constraintName=FK_R_DEF_CLI_SCOPE_SCOPE; dropForeignKeyConstraint baseTableName=CLIENT_SCOPE_CLIENT, constraintName=FK_C_CLI_SCOPE_SCOPE; dropForeignKeyConstraint baseTableName=CLIENT_SC... \N 4.8.0 \N \N 3274862955 +13.0.0-KEYCLOAK-17992-drop-constraints keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.1803 95 MARK_RAN 9:544d201116a0fcc5a5da0925fbbc3bde dropPrimaryKey constraintName=C_CLI_SCOPE_BIND, tableName=CLIENT_SCOPE_CLIENT; dropIndex indexName=IDX_CLSCOPE_CL, tableName=CLIENT_SCOPE_CLIENT; dropIndex indexName=IDX_CL_CLSCOPE, tableName=CLIENT_SCOPE_CLIENT \N 4.8.0 \N \N 3274862955 +13.0.0-increase-column-size-federated keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.190613 96 EXECUTED 9:43c0c1055b6761b4b3e89de76d612ccf modifyDataType columnName=CLIENT_ID, tableName=CLIENT_SCOPE_CLIENT; modifyDataType columnName=SCOPE_ID, tableName=CLIENT_SCOPE_CLIENT \N 4.8.0 \N \N 3274862955 +13.0.0-KEYCLOAK-17992-recreate-constraints keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.193934 97 MARK_RAN 9:8bd711fd0330f4fe980494ca43ab1139 addNotNullConstraint columnName=CLIENT_ID, tableName=CLIENT_SCOPE_CLIENT; addNotNullConstraint columnName=SCOPE_ID, tableName=CLIENT_SCOPE_CLIENT; addPrimaryKey constraintName=C_CLI_SCOPE_BIND, tableName=CLIENT_SCOPE_CLIENT; createIndex indexName=... \N 4.8.0 \N \N 3274862955 +json-string-accomodation-fixed keycloak META-INF/jpa-changelog-13.0.0.xml 2023-01-09 14:34:23.202965 98 EXECUTED 9:e07d2bc0970c348bb06fb63b1f82ddbf addColumn tableName=REALM_ATTRIBUTE; update tableName=REALM_ATTRIBUTE; dropColumn columnName=VALUE, tableName=REALM_ATTRIBUTE; renameColumn newColumnName=VALUE, oldColumnName=VALUE_NEW, tableName=REALM_ATTRIBUTE \N 4.8.0 \N \N 3274862955 +14.0.0-KEYCLOAK-11019 keycloak META-INF/jpa-changelog-14.0.0.xml 2023-01-09 14:34:23.212244 99 EXECUTED 9:24fb8611e97f29989bea412aa38d12b7 createIndex indexName=IDX_OFFLINE_CSS_PRELOAD, tableName=OFFLINE_CLIENT_SESSION; createIndex indexName=IDX_OFFLINE_USS_BY_USER, tableName=OFFLINE_USER_SESSION; createIndex indexName=IDX_OFFLINE_USS_BY_USERSESS, tableName=OFFLINE_USER_SESSION \N 4.8.0 \N \N 3274862955 +14.0.0-KEYCLOAK-18286 keycloak META-INF/jpa-changelog-14.0.0.xml 2023-01-09 14:34:23.2164 100 MARK_RAN 9:259f89014ce2506ee84740cbf7163aa7 createIndex indexName=IDX_CLIENT_ATT_BY_NAME_VALUE, tableName=CLIENT_ATTRIBUTES \N 4.8.0 \N \N 3274862955 +14.0.0-KEYCLOAK-18286-revert keycloak META-INF/jpa-changelog-14.0.0.xml 2023-01-09 14:34:23.227895 101 MARK_RAN 9:04baaf56c116ed19951cbc2cca584022 dropIndex indexName=IDX_CLIENT_ATT_BY_NAME_VALUE, tableName=CLIENT_ATTRIBUTES \N 4.8.0 \N \N 3274862955 +14.0.0-KEYCLOAK-18286-supported-dbs keycloak META-INF/jpa-changelog-14.0.0.xml 2023-01-09 14:34:23.235491 102 EXECUTED 9:60ca84a0f8c94ec8c3504a5a3bc88ee8 createIndex indexName=IDX_CLIENT_ATT_BY_NAME_VALUE, tableName=CLIENT_ATTRIBUTES \N 4.8.0 \N \N 3274862955 +14.0.0-KEYCLOAK-18286-unsupported-dbs keycloak META-INF/jpa-changelog-14.0.0.xml 2023-01-09 14:34:23.238498 103 MARK_RAN 9:d3d977031d431db16e2c181ce49d73e9 createIndex indexName=IDX_CLIENT_ATT_BY_NAME_VALUE, tableName=CLIENT_ATTRIBUTES \N 4.8.0 \N \N 3274862955 +KEYCLOAK-17267-add-index-to-user-attributes keycloak META-INF/jpa-changelog-14.0.0.xml 2023-01-09 14:34:23.24435 104 EXECUTED 9:0b305d8d1277f3a89a0a53a659ad274c createIndex indexName=IDX_USER_ATTRIBUTE_NAME, tableName=USER_ATTRIBUTE \N 4.8.0 \N \N 3274862955 +KEYCLOAK-18146-add-saml-art-binding-identifier keycloak META-INF/jpa-changelog-14.0.0.xml 2023-01-09 14:34:23.250444 105 EXECUTED 9:2c374ad2cdfe20e2905a84c8fac48460 customChange \N 4.8.0 \N \N 3274862955 +15.0.0-KEYCLOAK-18467 keycloak META-INF/jpa-changelog-15.0.0.xml 2023-01-09 14:34:23.261701 106 EXECUTED 9:47a760639ac597360a8219f5b768b4de addColumn tableName=REALM_LOCALIZATIONS; update tableName=REALM_LOCALIZATIONS; dropColumn columnName=TEXTS, tableName=REALM_LOCALIZATIONS; renameColumn newColumnName=TEXTS, oldColumnName=TEXTS_NEW, tableName=REALM_LOCALIZATIONS; addNotNullConstrai... \N 4.8.0 \N \N 3274862955 +17.0.0-9562 keycloak META-INF/jpa-changelog-17.0.0.xml 2023-01-09 14:34:23.269577 107 EXECUTED 9:a6272f0576727dd8cad2522335f5d99e createIndex indexName=IDX_USER_SERVICE_ACCOUNT, tableName=USER_ENTITY \N 4.8.0 \N \N 3274862955 +18.0.0-10625-IDX_ADMIN_EVENT_TIME keycloak META-INF/jpa-changelog-18.0.0.xml 2023-01-09 14:34:23.276738 108 EXECUTED 9:015479dbd691d9cc8669282f4828c41d createIndex indexName=IDX_ADMIN_EVENT_TIME, tableName=ADMIN_EVENT_ENTITY \N 4.8.0 \N \N 3274862955 +19.0.0-10135 keycloak META-INF/jpa-changelog-19.0.0.xml 2023-01-09 14:34:23.297485 109 EXECUTED 9:9518e495fdd22f78ad6425cc30630221 customChange \N 4.8.0 \N \N 3274862955 +20.0.0-12964-supported-dbs keycloak META-INF/jpa-changelog-20.0.0.xml 2023-01-09 14:34:23.305463 110 EXECUTED 9:e5f243877199fd96bcc842f27a1656ac createIndex indexName=IDX_GROUP_ATT_BY_NAME_VALUE, tableName=GROUP_ATTRIBUTE \N 4.8.0 \N \N 3274862955 +20.0.0-12964-unsupported-dbs keycloak META-INF/jpa-changelog-20.0.0.xml 2023-01-09 14:34:23.309005 111 MARK_RAN 9:1a6fcaa85e20bdeae0a9ce49b41946a5 createIndex indexName=IDX_GROUP_ATT_BY_NAME_VALUE, tableName=GROUP_ATTRIBUTE \N 4.8.0 \N \N 3274862955 +client-attributes-string-accomodation-fixed keycloak META-INF/jpa-changelog-20.0.0.xml 2023-01-09 14:34:23.318788 112 EXECUTED 9:3f332e13e90739ed0c35b0b25b7822ca addColumn tableName=CLIENT_ATTRIBUTES; update tableName=CLIENT_ATTRIBUTES; dropColumn columnName=VALUE, tableName=CLIENT_ATTRIBUTES; renameColumn newColumnName=VALUE, oldColumnName=VALUE_NEW, tableName=CLIENT_ATTRIBUTES \N 4.8.0 \N \N 3274862955 +21.0.2-17277 keycloak META-INF/jpa-changelog-21.0.2.xml 2024-02-14 09:01:09.307684 113 EXECUTED 9:7ee1f7a3fb8f5588f171fb9a6ab623c0 customChange \N 4.23.2 \N \N 7901269232 +21.1.0-19404 keycloak META-INF/jpa-changelog-21.1.0.xml 2024-02-14 09:01:09.324282 114 EXECUTED 9:3d7e830b52f33676b9d64f7f2b2ea634 modifyDataType columnName=DECISION_STRATEGY, tableName=RESOURCE_SERVER_POLICY; modifyDataType columnName=LOGIC, tableName=RESOURCE_SERVER_POLICY; modifyDataType columnName=POLICY_ENFORCE_MODE, tableName=RESOURCE_SERVER \N 4.23.2 \N \N 7901269232 +21.1.0-19404-2 keycloak META-INF/jpa-changelog-21.1.0.xml 2024-02-14 09:01:09.327044 115 MARK_RAN 9:627d032e3ef2c06c0e1f73d2ae25c26c addColumn tableName=RESOURCE_SERVER_POLICY; update tableName=RESOURCE_SERVER_POLICY; dropColumn columnName=DECISION_STRATEGY, tableName=RESOURCE_SERVER_POLICY; renameColumn newColumnName=DECISION_STRATEGY, oldColumnName=DECISION_STRATEGY_NEW, tabl... \N 4.23.2 \N \N 7901269232 +22.0.0-17484-updated keycloak META-INF/jpa-changelog-22.0.0.xml 2024-02-14 09:01:09.332189 116 EXECUTED 9:90af0bfd30cafc17b9f4d6eccd92b8b3 customChange \N 4.23.2 \N \N 7901269232 +22.0.5-24031 keycloak META-INF/jpa-changelog-22.0.0.xml 2024-02-14 09:01:09.333603 117 MARK_RAN 9:a60d2d7b315ec2d3eba9e2f145f9df28 customChange \N 4.23.2 \N \N 7901269232 +23.0.0-12062 keycloak META-INF/jpa-changelog-23.0.0.xml 2024-02-14 09:01:09.340927 118 EXECUTED 9:2168fbe728fec46ae9baf15bf80927b8 addColumn tableName=COMPONENT_CONFIG; update tableName=COMPONENT_CONFIG; dropColumn columnName=VALUE, tableName=COMPONENT_CONFIG; renameColumn newColumnName=VALUE, oldColumnName=VALUE_NEW, tableName=COMPONENT_CONFIG \N 4.23.2 \N \N 7901269232 +23.0.0-17258 keycloak META-INF/jpa-changelog-23.0.0.xml 2024-02-14 09:01:09.343484 119 EXECUTED 9:36506d679a83bbfda85a27ea1864dca8 addColumn tableName=EVENT_ENTITY \N 4.23.2 \N \N 7901269232 \. @@ -2385,9 +2379,9 @@ grafana a5bb3a5f-fd26-4be6-9557-26e20a03d33d f grafana d6ffe9fc-a03c-4496-85dc-dbb5e7754587 f grafana d6077ed7-b265-4f82-9336-24614967bd5d t grafana 699671ab-e7c1-4fcf-beb8-ea54f1471fc1 t -grafana c61f5b19-c17e-49a1-91b8-a0296411b928 f grafana d30340a8-630b-416e-8c93-3ccf932d34f3 t master a96603aa-e6db-4b3e-8baa-679c75ccfc8f t +grafana c61f5b19-c17e-49a1-91b8-a0296411b928 t \. @@ -2395,7 +2389,7 @@ master a96603aa-e6db-4b3e-8baa-679c75ccfc8f t -- Data for Name: event_entity; Type: TABLE DATA; Schema: public; Owner: keycloak -- -COPY public.event_entity (id, client_id, details_json, error, ip_address, realm_id, session_id, event_time, type, user_id) FROM stdin; +COPY public.event_entity (id, client_id, details_json, error, ip_address, realm_id, session_id, event_time, type, user_id, details_json_long_value) FROM stdin; \. @@ -2524,6 +2518,9 @@ COPY public.idp_mapper_config (idp_mapper_id, value, name) FROM stdin; -- COPY public.keycloak_group (id, name, parent_group, realm_id) FROM stdin; +f1975bf4-6e92-479a-923c-d7d5b65d684c First grafana +fe974984-8b18-4925-beef-37b6cfb6af7b Second grafana +4cc0bd0f-9071-42a9-b282-be22515156ba Third grafana \. @@ -2628,6 +2625,7 @@ c9a895d1-c901-46b0-91cf-2c67902b4a93 a5a8fed6-0bca-4646-9946-2fe84175353b t ${ro COPY public.migration_model (id, version, update_time) FROM stdin; g5slr 12.0.1 1643820448 wupxt 20.0.2 1673274863 +y2nke 23.0.1 1707901269 \. @@ -2710,13 +2708,13 @@ b4854867-3bfb-409b-92a8-6ec37db17f99 phone number verified openid-connect oidc-u 1fc8999a-04d9-421b-8557-e417a3750358 realm roles openid-connect oidc-usermodel-realm-role-mapper \N d6077ed7-b265-4f82-9336-24614967bd5d 384e97dd-36ad-4b0e-af63-d0cb3a2153d4 allowed web origins openid-connect oidc-allowed-origins-mapper \N 699671ab-e7c1-4fcf-beb8-ea54f1471fc1 f03cac68-3f0e-4068-9adf-ee64567689a7 upn openid-connect oidc-usermodel-property-mapper \N c61f5b19-c17e-49a1-91b8-a0296411b928 -04183ee1-b558-4f63-839f-922d30b34a9e groups openid-connect oidc-usermodel-realm-role-mapper \N c61f5b19-c17e-49a1-91b8-a0296411b928 df78645e-c32b-4160-b79f-42e622d71982 locale openid-connect oidc-usermodel-attribute-mapper 805aebc8-9d01-42b6-bcce-6ce48ca63ef0 \N 0108b99f-2f31-4e73-9597-cb29e0e8c486 username openid-connect oidc-usermodel-property-mapper \N f619a55a-d565-4cc0-8bf4-4dbaab5382fe 70b0a264-a7c3-43ff-b24f-14ca4f5f118e login openid-connect oidc-usermodel-property-mapper \N 0a7c7dde-23d7-4a93-bdee-4a8963aee9a4 2f8ee9af-b6dd-4790-9e7b-cce83a603566 name openid-connect oidc-full-name-mapper \N d4723cd4-f717-44b7-a9b0-6c32c5ecd23f 854a81a5-8e06-4257-98ec-0e3087356223 acr loa level openid-connect oidc-acr-mapper \N d30340a8-630b-416e-8c93-3ccf932d34f3 53832401-d27c-489e-801f-9807cdaa4b08 acr loa level openid-connect oidc-acr-mapper \N a96603aa-e6db-4b3e-8baa-679c75ccfc8f +6814ca6a-2d7d-495d-87ad-53e12b561808 groups openid-connect oidc-group-membership-mapper \N c61f5b19-c17e-49a1-91b8-a0296411b928 \. @@ -2991,12 +2989,6 @@ f03cac68-3f0e-4068-9adf-ee64567689a7 true id.token.claim f03cac68-3f0e-4068-9adf-ee64567689a7 true access.token.claim f03cac68-3f0e-4068-9adf-ee64567689a7 upn claim.name f03cac68-3f0e-4068-9adf-ee64567689a7 String jsonType.label -04183ee1-b558-4f63-839f-922d30b34a9e true multivalued -04183ee1-b558-4f63-839f-922d30b34a9e foo user.attribute -04183ee1-b558-4f63-839f-922d30b34a9e true id.token.claim -04183ee1-b558-4f63-839f-922d30b34a9e true access.token.claim -04183ee1-b558-4f63-839f-922d30b34a9e groups claim.name -04183ee1-b558-4f63-839f-922d30b34a9e String jsonType.label df78645e-c32b-4160-b79f-42e622d71982 true userinfo.token.claim df78645e-c32b-4160-b79f-42e622d71982 locale user.attribute df78645e-c32b-4160-b79f-42e622d71982 true id.token.claim @@ -3025,6 +3017,13 @@ df78645e-c32b-4160-b79f-42e622d71982 String jsonType.label 854a81a5-8e06-4257-98ec-0e3087356223 true access.token.claim 53832401-d27c-489e-801f-9807cdaa4b08 true id.token.claim 53832401-d27c-489e-801f-9807cdaa4b08 true access.token.claim +6814ca6a-2d7d-495d-87ad-53e12b561808 true introspection.token.claim +6814ca6a-2d7d-495d-87ad-53e12b561808 true userinfo.token.claim +6814ca6a-2d7d-495d-87ad-53e12b561808 true id.token.claim +6814ca6a-2d7d-495d-87ad-53e12b561808 true access.token.claim +6814ca6a-2d7d-495d-87ad-53e12b561808 groups claim.name +6814ca6a-2d7d-495d-87ad-53e12b561808 false full.path +6814ca6a-2d7d-495d-87ad-53e12b561808 true multivalued \. @@ -3199,16 +3198,16 @@ ad4dfd2c-307a-4563-b93a-0bb726b4ccaa VERIFY_EMAIL Verify Email master t f VERIFY 2c7fffa4-ff20-4015-9a97-cc6a19e698ba UPDATE_PROFILE Update Profile master t f UPDATE_PROFILE 40 c76d17f4-eacf-497a-ab5a-f78936bbc50e CONFIGURE_TOTP Configure OTP master t f CONFIGURE_TOTP 10 83de9f97-43df-4265-982c-5414a2b19985 UPDATE_PASSWORD Update Password master t f UPDATE_PASSWORD 30 -9f538737-770e-4731-abd9-e98172a85d2f terms_and_conditions Terms and Conditions master f f terms_and_conditions 20 306fc47e-d8ae-4bb1-b2bc-53608a44536c update_user_locale Update User Locale master t f update_user_locale 1000 f158f7d8-8b7f-414c-b1bd-0dde83c91133 delete_account Delete Account master f f delete_account 60 969a57d1-c906-4f49-87d6-3cbba2f3898a VERIFY_EMAIL Verify Email grafana t f VERIFY_EMAIL 50 233d5b8e-6f36-450f-bffd-43b82e27295c UPDATE_PROFILE Update Profile grafana t f UPDATE_PROFILE 40 ab3a9aa7-3d1b-4fb1-93ad-9412142deed3 CONFIGURE_TOTP Configure OTP grafana t f CONFIGURE_TOTP 10 988d8e0d-35ef-4e6a-8b48-821cca56acf2 UPDATE_PASSWORD Update Password grafana t f UPDATE_PASSWORD 30 -0e2b6144-5c2c-4dcb-92d8-00529b19a7a5 terms_and_conditions Terms and Conditions grafana f f terms_and_conditions 20 94993a02-f883-4f8a-a549-d48f95aabed2 update_user_locale Update User Locale grafana t f update_user_locale 1000 72d09b7f-acde-4b90-af9a-ea3c642a2f6d delete_account Delete Account grafana f f delete_account 60 +9f538737-770e-4731-abd9-e98172a85d2f TERMS_AND_CONDITIONS Terms and Conditions master f f TERMS_AND_CONDITIONS 20 +0e2b6144-5c2c-4dcb-92d8-00529b19a7a5 TERMS_AND_CONDITIONS Terms and Conditions grafana f f TERMS_AND_CONDITIONS 20 \. @@ -3386,6 +3385,11 @@ COPY public.user_federation_provider (id, changed_sync_period, display_name, ful -- COPY public.user_group_membership (group_id, user_id) FROM stdin; +f1975bf4-6e92-479a-923c-d7d5b65d684c 88692d07-bb9a-46cf-844c-7ff5c529cd04 +f1975bf4-6e92-479a-923c-d7d5b65d684c 8f58cbec-6e40-4bab-bff0-1c5ff899fe2e +fe974984-8b18-4925-beef-37b6cfb6af7b 88692d07-bb9a-46cf-844c-7ff5c529cd04 +4cc0bd0f-9071-42a9-b282-be22515156ba 6db3c5e5-b84b-4f9d-a7a8-8d05b03c929d +4cc0bd0f-9071-42a9-b282-be22515156ba 1a85b7e0-4baa-420b-89f8-1cea43a540dd \. diff --git a/devenv/docker/blocks/auth/jwt_proxy/readme.md b/devenv/docker/blocks/auth/jwt_proxy/readme.md index f3e32d147c49c..823287f54e35d 100644 --- a/devenv/docker/blocks/auth/jwt_proxy/readme.md +++ b/devenv/docker/blocks/auth/jwt_proxy/readme.md @@ -24,6 +24,7 @@ expect_claims = {"iss": "http://env.grafana.local:8087/realms/grafana", "azp": " auto_sign_up = true role_attribute_path = contains(roles[*], 'grafanaadmin') && 'GrafanaAdmin' || contains(roles[*], 'admin') && 'Admin' || contains(roles[*], 'editor') && 'Editor' || 'Viewer' role_attribute_strict = false +groups_attribute_path = groups[] allow_assign_grafana_admin = true ``` diff --git a/devenv/docker/blocks/mimir_backend/docker-compose.yaml b/devenv/docker/blocks/mimir_backend/docker-compose.yaml index 8666ab093cce5..058a0d8608599 100644 --- a/devenv/docker/blocks/mimir_backend/docker-compose.yaml +++ b/devenv/docker/blocks/mimir_backend/docker-compose.yaml @@ -1,8 +1,9 @@ mimir_backend: - image: grafana/mimir + image: grafana/mimir:r274-1780c50 container_name: mimir_backend command: - -target=backend + - -alertmanager.grafana-alertmanager-compatibility-enabled nginx: environment: - NGINX_ENVSUBST_OUTPUT_DIR=/etc/nginx diff --git a/devenv/docker/blocks/tempo/tempo.yaml b/devenv/docker/blocks/tempo/tempo.yaml index e8378e9b9a68c..f94d4ca96e715 100644 --- a/devenv/docker/blocks/tempo/tempo.yaml +++ b/devenv/docker/blocks/tempo/tempo.yaml @@ -43,7 +43,6 @@ storage: bloom_filter_false_positive: .05 # bloom filter false positive rate. lower values create larger filters but fewer false positives v2_index_downsample_bytes: 1000 # number of bytes per index record v2_encoding: zstd # block encoding/compression. options: none, gzip, lz4-64k, lz4-256k, lz4-1M, lz4, snappy, zstd, s2 - version: vParquet wal: path: /tmp/tempo/wal # where to store the the wal locally v2_encoding: snappy # wal encoding/compression. options: none, gzip, lz4-64k, lz4-256k, lz4-1M, lz4, snappy, zstd, s2 @@ -51,6 +50,8 @@ storage: path: /tmp/tempo/blocks overrides: - metrics_generator_processors: [local-blocks, service-graphs, span-metrics] + defaults: + metrics_generator: + processors: [local-blocks, service-graphs, span-metrics] stream_over_http_enabled: true diff --git a/devenv/docker/ha-test-unified-alerting/grafana/provisioning/alerts.jsonnet b/devenv/docker/ha-test-unified-alerting/grafana/provisioning/alerts.jsonnet deleted file mode 100644 index f3db6a51a569f..0000000000000 --- a/devenv/docker/ha-test-unified-alerting/grafana/provisioning/alerts.jsonnet +++ /dev/null @@ -1,202 +0,0 @@ -local numAlerts = std.extVar('alerts'); -local condition = std.extVar('condition'); -local arr = std.range(1, numAlerts); - -local alertDashboardTemplate = { - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "id": null, - "links": [], - "panels": [ - { - "alert": { - "conditions": [ - { - "evaluator": { - "params": [ - 65 - ], - "type": "gt" - }, - "operator": { - "type": "and" - }, - "query": { - "params": [ - "A", - "5m", - "now" - ] - }, - "reducer": { - "params": [], - "type": "avg" - }, - "type": "query" - } - ], - "executionErrorState": "alerting", - "frequency": "10s", - "handler": 1, - "for": "1m", - "name": "bulk alerting", - "noDataState": "no_data", - "notifications": [ - { - "id": 2 - } - ] - }, - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "Prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 0 - }, - "id": 2, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "$$hashKey": "object:117", - "expr": "go_goroutines", - "format": "time_series", - "intervalFactor": 1, - "refId": "A" - } - ], - "thresholds": [ - { - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "value": 50 - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Panel Title", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ] - } - ], - "schemaVersion": 16, - "tags": [], - "templating": { - "list": [] - }, - "time": { - "from": "now-6h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "", - "title": "New dashboard", - "uid": null, - "version": 0 -}; - - -{ - ['alert-' + std.toString(x) + '.json']: - alertDashboardTemplate + { - panels: [ - alertDashboardTemplate.panels[0] + - { - alert+: { - name: 'Alert rule ' + x, - conditions: [ - alertDashboardTemplate.panels[0].alert.conditions[0] + - { - evaluator+: { - params: [condition] - } - }, - ], - }, - }, - ], - uid: 'alert-' + x, - title: 'Alert ' + x - }, - for x in arr -} \ No newline at end of file diff --git a/devenv/docker/ha_test/alerts.sh b/devenv/docker/ha_test/alerts.sh index f2e7b4aec6cad..0b35f0d811870 100755 --- a/devenv/docker/ha_test/alerts.sh +++ b/devenv/docker/ha_test/alerts.sh @@ -84,27 +84,6 @@ slack() { http://admin:admin@grafana.loc/api/alert-notifications/2 } -provision() { - alerts=1 - condition=65 - while getopts ":a:c:" o; do - case "${o}" in - a) - alerts=${OPTARG} - ;; - c) - condition=${OPTARG} - ;; - esac - done - shift $((OPTIND-1)) - - requiresJsonnet - - find grafana/provisioning/dashboards/alerts -maxdepth 1 -name 'alert*.json' -delete - jsonnet -m grafana/provisioning/dashboards/alerts grafana/provisioning/alerts.jsonnet --ext-code alerts=$alerts --ext-code condition=$condition -} - pause() { curl -H "Content-Type: application/json" \ -d '{"paused":true}' \ @@ -126,9 +105,6 @@ usage() { echo -e " [-u]\t\t\t url" echo -e " [-r]\t\t\t send reminders" echo -e " [-e ]\t\t default 10m\n" - echo -e " provision\t provision alerts" - echo -e " [-a ]\t default 1" - echo -e " [-c ]\t default 65\n" echo -e " pause\t\t pause all alerts" echo -e " unpause\t unpause all alerts" } @@ -140,8 +116,6 @@ main() { setup elif [[ $cmd == "slack" ]]; then slack "${@:2}" - elif [[ $cmd == "provision" ]]; then - provision "${@:2}" elif [[ $cmd == "pause" ]]; then pause elif [[ $cmd == "unpause" ]]; then diff --git a/devenv/docker/ha_test/grafana/provisioning/alerts.jsonnet b/devenv/docker/ha_test/grafana/provisioning/alerts.jsonnet deleted file mode 100644 index f3db6a51a569f..0000000000000 --- a/devenv/docker/ha_test/grafana/provisioning/alerts.jsonnet +++ /dev/null @@ -1,202 +0,0 @@ -local numAlerts = std.extVar('alerts'); -local condition = std.extVar('condition'); -local arr = std.range(1, numAlerts); - -local alertDashboardTemplate = { - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "id": null, - "links": [], - "panels": [ - { - "alert": { - "conditions": [ - { - "evaluator": { - "params": [ - 65 - ], - "type": "gt" - }, - "operator": { - "type": "and" - }, - "query": { - "params": [ - "A", - "5m", - "now" - ] - }, - "reducer": { - "params": [], - "type": "avg" - }, - "type": "query" - } - ], - "executionErrorState": "alerting", - "frequency": "10s", - "handler": 1, - "for": "1m", - "name": "bulk alerting", - "noDataState": "no_data", - "notifications": [ - { - "id": 2 - } - ] - }, - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "Prometheus", - "fill": 1, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 0 - }, - "id": 2, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "$$hashKey": "object:117", - "expr": "go_goroutines", - "format": "time_series", - "intervalFactor": 1, - "refId": "A" - } - ], - "thresholds": [ - { - "colorMode": "critical", - "fill": true, - "line": true, - "op": "gt", - "value": 50 - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Panel Title", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ] - } - ], - "schemaVersion": 16, - "tags": [], - "templating": { - "list": [] - }, - "time": { - "from": "now-6h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "5s", - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "", - "title": "New dashboard", - "uid": null, - "version": 0 -}; - - -{ - ['alert-' + std.toString(x) + '.json']: - alertDashboardTemplate + { - panels: [ - alertDashboardTemplate.panels[0] + - { - alert+: { - name: 'Alert rule ' + x, - conditions: [ - alertDashboardTemplate.panels[0].alert.conditions[0] + - { - evaluator+: { - params: [condition] - } - }, - ], - }, - }, - ], - uid: 'alert-' + x, - title: 'Alert ' + x - }, - for x in arr -} \ No newline at end of file diff --git a/devenv/jsonnet/dev-dashboards.libsonnet b/devenv/jsonnet/dev-dashboards.libsonnet index 07726f41723f0..391e684fca41e 100644 --- a/devenv/jsonnet/dev-dashboards.libsonnet +++ b/devenv/jsonnet/dev-dashboards.libsonnet @@ -21,6 +21,7 @@ "barchart-tooltips-legends": (import '../dev-dashboards/panel-barchart/barchart-tooltips-legends.json'), "candlestick": (import '../dev-dashboards/panel-candlestick/candlestick.json'), "canvas-connection-examples": (import '../dev-dashboards/panel-canvas/canvas-connection-examples.json'), + "canvas-datalinks": (import '../dev-dashboards/panel-canvas/canvas-datalinks.json'), "canvas-examples": (import '../dev-dashboards/panel-canvas/canvas-examples.json'), "color_modes": (import '../dev-dashboards/panel-common/color_modes.json'), "config-from-query": (import '../dev-dashboards/transforms/config-from-query.json'), @@ -58,6 +59,7 @@ "join-by-labels": (import '../dev-dashboards/transforms/join-by-labels.json'), "lazy_loading": (import '../dev-dashboards/panel-common/lazy_loading.json'), "linked-viz": (import '../dev-dashboards/panel-common/linked-viz.json'), + "live-publish": (import '../dev-dashboards/live/live-publish.json'), "loki_fakedata": (import '../dev-dashboards/datasource-loki/loki_fakedata.json'), "loki_query_splitting": (import '../dev-dashboards/datasource-loki/loki_query_splitting.json'), "migrations": (import '../dev-dashboards/migrations/migrations.json'), @@ -90,6 +92,7 @@ "table_sparkline_cell": (import '../dev-dashboards/panel-table/table_sparkline_cell.json'), "table_tests": (import '../dev-dashboards/panel-table/table_tests.json'), "table_tests_new": (import '../dev-dashboards/panel-table/table_tests_new.json'), + "tall_dashboard": (import '../dev-dashboards/scenarios/tall_dashboard.json'), "templating-dashboard-links-and-variables": (import '../dev-dashboards/feature-templating/templating-dashboard-links-and-variables.json'), "templating-repeating-panels": (import '../dev-dashboards/feature-templating/templating-repeating-panels.json'), "templating-repeating-rows": (import '../dev-dashboards/feature-templating/templating-repeating-rows.json'), @@ -100,9 +103,10 @@ "testdata-test-variable-output": (import '../dev-dashboards/feature-templating/testdata-test-variable-output.json'), "testdata-variables-textbox": (import '../dev-dashboards/feature-templating/testdata-variables-textbox.json'), "testdata-variables-that-update-on-time-c": (import '../dev-dashboards/feature-templating/testdata-variables-that-update-on-time-change.json'), - "testdata_alerts": (import '../dev-dashboards/alerting/testdata_alerts.json'), "text-options": (import '../dev-dashboards/panel-text/text-options.json'), "time_zone_support": (import '../dev-dashboards/scenarios/time_zone_support.json'), + "timeline-align-endtime": (import '../dev-dashboards/panel-timeline/timeline-align-endtime.json'), + "timeline-align-nulls-retain": (import '../dev-dashboards/panel-timeline/timeline-align-nulls-retain.json'), "timeline-demo": (import '../dev-dashboards/panel-timeline/timeline-demo.json'), "timeline-modes": (import '../dev-dashboards/panel-timeline/timeline-modes.json'), "timeline-thresholds-mappings": (import '../dev-dashboards/panel-timeline/timeline-thresholds-mappings.json'), @@ -124,5 +128,6 @@ "timeseries-yaxis-ticks": (import '../dev-dashboards/panel-timeseries/timeseries-yaxis-ticks.json'), "trend_example": (import '../dev-dashboards/panel-trend/trend_example.json'), "xychart-example": (import '../dev-dashboards/panel-xychart/xychart-example.json'), + "xychart-tooltip-color-test": (import '../dev-dashboards/panel-xychart/xychart-tooltip-color-test.json'), }, } diff --git a/devenv/setup.sh b/devenv/setup.sh index 906f160182788..ec1b8ea65a672 100755 --- a/devenv/setup.sh +++ b/devenv/setup.sh @@ -14,27 +14,6 @@ bulkDashboard() { ln -s -f ../../../devenv/bulk-dashboards/bulk-dashboards.yaml ../conf/provisioning/dashboards/custom.yaml } -bulkAlertingDashboard() { - - requiresJsonnet - - jsonnet -o "bulk_alerting_dashboards/bulk_alerting_datasources.yaml" ./bulk_alerting_dashboards/datasources.jsonnet - - COUNTER=1 - DS=1 - MAX=1000 - while [ $COUNTER -lt $MAX ]; do - jsonnet -o "bulk_alerting_dashboards/alerting_dashboard${COUNTER}.json" \ - -e "local bulkDash = import 'bulk_alerting_dashboards/dashboard.libsonnet'; bulkDash.alertingDashboard(${COUNTER}, ${DS})" - let COUNTER=COUNTER+1 - let DS=COUNTER/10 - let DS=DS+1 - done - - ln -s -f ../../../devenv/bulk_alerting_dashboards/bulk_alerting_dashboards.yaml ../conf/provisioning/dashboards/custom.yaml - ln -s -f ../../../devenv/bulk_alerting_dashboards/bulk_alerting_datasources.yaml ../conf/provisioning/datasources/custom.yaml -} - bulkFolders() { ./bulk-folders/bulk-folders.sh "$1" ln -s -f ../../../devenv/bulk-folders/bulk-folders.yaml ../conf/provisioning/dashboards/bulk-folders.yaml @@ -70,12 +49,6 @@ undev() { rm -rf bulk-folders/Bulk\ Folder* echo -e " \xE2\x9C\x94 Reverting bulk-folders provisioning" - - # Removing generated dashboard and datasource files from bulk-alerting-dashboards - rm -f bulk_alerting_dashboards/alerting_dashboard*.json - rm -f "bulk_alerting_dashboards/bulk_alerting_datasources.yaml" - echo -e " \xE2\x9C\x94 Reverting bulk-alerting-dashboards provisioning" - # Removing the symlinks rm -f ../conf/provisioning/dashboards/custom.yaml rm -f ../conf/provisioning/dashboards/bulk-folders.yaml @@ -88,7 +61,6 @@ usage() { echo -e "\n" echo "Usage:" echo " bulk-dashboards - provision 400 dashboards" - echo " bulk-alerting-dashboards - provision 400 dashboards with alerts" echo " bulk-folders [folders] [dashboards] - provision many folders with dashboards" echo " bulk-folders - provision 200 folders with 3 dashboards in each" echo " no args - provision core datasources and dev dashboards" @@ -104,9 +76,7 @@ main() { local cmd=$1 local arg1=$2 - if [[ $cmd == "bulk-alerting-dashboards" ]]; then - bulkAlertingDashboard - elif [[ $cmd == "bulk-dashboards" ]]; then + if [[ $cmd == "bulk-dashboards" ]]; then bulkDashboard elif [[ $cmd == "bulk-folders" ]]; then bulkFolders "$arg1" diff --git a/.codespellignore b/docs/.codespellignore similarity index 100% rename from .codespellignore rename to docs/.codespellignore diff --git a/docs/Makefile b/docs/Makefile index 38997200b0de9..36b7e4f41be64 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -9,7 +9,6 @@ include docs.mk .PHONY: sources/panels-visualizations/query-transform-data/transform-data/index.md sources/panels-visualizations/query-transform-data/transform-data/index.md: ## Generate the Transform Data page source. -sources/panels-visualizations/query-transform-data/transform-data/index.md: cd $(CURDIR)/.. && npx tsc ./scripts/docs/generate-transformations.ts && \ - node ./scripts/docs/generate-transformations.js > $(CURDIR)/$@ && \ + node -e "require('./scripts/docs/generate-transformations').buildMarkdownContent()" && \ npx prettier -w $(CURDIR)/$@ diff --git a/docs/make-docs b/docs/make-docs index 25176a37f0519..43efdb5faad3a 100755 --- a/docs/make-docs +++ b/docs/make-docs @@ -6,7 +6,44 @@ # [Semantic versioning](https://semver.org/) is used to help the reader identify the significance of changes. # Changes are relevant to this script and the support docs.mk GNU Make interface. # - +# ## 6.0.1 (2024-02-28) +# +# ### Added +# +# - Suppress new errors relating to absent content introduced in https://github.com/grafana/website/pull/17561. +# +# ## 6.0.0 (2024-02-16) +# +# ### Changed +# +# - Require `jq` for human readable `make doc-validator` output. +# +# ## 5.4.0 (2024-02-12) +# +# ### Changed +# +# - Set `WEBSITE_MOUNTS=true` when a user includes the `website` project. +# +# Ensures consistent behavior across repositories. +# To disable website mounts, add `export WEBSITE_MOUNTS := false` to your `variables.mk` or `variables.mk.local` file. +# - Use website mounts and container volumes also when a user includes the `grafana-cloud` project. +# +# ## 5.3.0 (2024-02-08) +# +# ### Changed +# +# - Updated support for plugins monorepo now that multiple projects have been moved into it. +# - Use `printf` instead of `echo` for better portability of output. +# +# https://www.in-ulm.de/~mascheck/various/echo+printf/ +# +# ## 5.2.0 (2024-01-18) +# +# ### Changed +# +# - Updated `make vale` to use latest Vale style and configuration. +# - Updated `make vale` to use platform appropriate image. +# # ## 5.1.2 (2023-11-08) # # ### Added @@ -191,8 +228,6 @@ readonly DOC_VALIDATOR_SKIP_CHECKS="${DOC_VALIDATOR_SKIP_CHECKS:-^image-}" readonly HUGO_REFLINKSERRORLEVEL="${HUGO_REFLINKSERRORLEVEL:-WARNING}" readonly VALE_MINALERTLEVEL="${VALE_MINALERTLEVEL:-error}" readonly WEBSITE_EXEC="${WEBSITE_EXEC:-make server-docs}" -# If set, the docs-base image will run a prebuild script that sets up Hugo mounts. -readonly WEBSITE_MOUNTS="${WEBSITE_MOUNTS:-}" PODMAN="$(if command -v podman >/dev/null 2>&1; then echo podman; else echo docker; fi)" @@ -264,10 +299,7 @@ SOURCES_helm_charts_mimir_distributed='mimir' SOURCES_helm_charts_tempo_distributed='tempo' SOURCES_opentelemetry='opentelemetry-docs' SOURCES_plugins_grafana_datadog_datasource='datadog-datasource' -SOURCES_plugins_grafana_jira_datasource='jira-datasource' -SOURCES_plugins_grafana_mongodb_datasource='mongodb-datasource' SOURCES_plugins_grafana_oracle_datasource='oracle-datasource' -SOURCES_plugins_grafana_splunk_datasource='splunk-datasource' VERSIONS_as_code='UNVERSIONED' VERSIONS_grafana_cloud='UNVERSIONED' @@ -278,10 +310,7 @@ VERSIONS_grafana_cloud_data_configuration_integrations='UNVERSIONED' VERSIONS_grafana_cloud_frontend_observability_faro_web_sdk='UNVERSIONED' VERSIONS_opentelemetry='UNVERSIONED' VERSIONS_plugins_grafana_datadog_datasource='latest' -VERSIONS_plugins_grafana_jira_datasource='latest' -VERSIONS_plugins_grafana_mongodb_datasource='latest' VERSIONS_plugins_grafana_oracle_datasource='latest' -VERSIONS_plugins_grafana_splunk_datasource='latest' VERSIONS_technical_documentation='UNVERSIONED' VERSIONS_website='UNVERSIONED' VERSIONS_writers_toolkit='UNVERSIONED' @@ -291,10 +320,7 @@ PATHS_helm_charts_mimir_distributed='docs/sources/helm-charts/mimir-distributed' PATHS_helm_charts_tempo_distributed='docs/sources/helm-charts/tempo-distributed' PATHS_mimir='docs/sources/mimir' PATHS_plugins_grafana_datadog_datasource='docs/sources' -PATHS_plugins_grafana_jira_datasource='docs/sources' -PATHS_plugins_grafana_mongodb_datasource='docs/sources' PATHS_plugins_grafana_oracle_datasource='docs/sources' -PATHS_plugins_grafana_splunk_datasource='docs/sources' PATHS_tempo='docs/sources/tempo' PATHS_website='content' @@ -418,7 +444,7 @@ proj_url() { $1 POSIX_HERESTRING - if [ "${_project}" = 'website' ]; then + if [ "${_project}" = website ]; then echo "http://localhost:${DOCS_HOST_PORT}/docs/" unset _project _version @@ -452,7 +478,7 @@ proj_dst() { $1 POSIX_HERESTRING - if [ "${_project}" = 'website' ]; then + if [ "${_project}" = website ]; then echo '/hugo/content' unset _project _version @@ -511,7 +537,7 @@ proj_canonical() { $1 POSIX_HERESTRING - if [ "${_project}" = 'website' ]; then + if [ "${_project}" = website ]; then echo '/docs' unset _project _version @@ -580,12 +606,11 @@ await_build() { while [ "${i}" -ne "${max}" ] do sleep 1 - debg "Retrying request to webserver assuming the process is still starting up." + debg "Retrying request to web server assuming the process is still starting up." i=$((i + 1)) if ${req} "${url}"; then - echo - echo "View documentation locally:" + printf '\r\nView documentation locally:\r\n' for x in ${url_src_dst_vers}; do IFS='^' read -r url _ _ <&2 + printf 'DEBG: %s\r\n' "$1" >&2 fi } errr() { - echo "ERRR: $1" >&2 + printf 'ERRR: %s\r\n' "$1" >&2 } note() { - echo "NOTE: $1" >&2 + printf 'NOTE: %s\r\n' "$1" >&2 } url_src_dst_vers="$(url_src_dst_vers "$@")" @@ -635,9 +659,16 @@ for arg in "$@"; do IFS=: read -r _project _ _repo _ </dev/null 2>&1; then + errr '`jq` must be installed for the `doc-validator` target to work.' + note 'To install `jq`, refer to https://jqlang.github.io/jq/download/,' + + exit 1 + fi + proj="$(new_proj "$1")" - echo + printf '\r\n' "${PODMAN}" run \ --init \ --interactive \ @@ -695,23 +733,25 @@ case "${image}" in "${DOCS_IMAGE}" \ "--include=${DOC_VALIDATOR_INCLUDE}" \ "--skip-checks=${DOC_VALIDATOR_SKIP_CHECKS}" \ - /hugo/content/docs \ - "$(proj_canonical "${proj}")" | sed "s#$(proj_dst "${proj}")#sources#" + "/hugo/content$(proj_canonical "${proj}")" \ + "$(proj_canonical "${proj}")" \ + | sed "s#$(proj_dst "${proj}")#sources#" \ + | jq -r '"ERROR: \(.location.path):\(.location.range.start.line // 1):\(.location.range.start.column // 1): \(.message)" + if .suggestions[0].text then "\nSuggestion: \(.suggestions[0].text)" else "" end' ;; 'grafana/vale') proj="$(new_proj "$1")" - echo + printf '\r\n' "${PODMAN}" run \ --init \ --interactive \ - --platform linux/amd64 \ --rm \ + --workdir /etc/vale \ --tty \ ${volumes} \ "${DOCS_IMAGE}" \ "--minAlertLevel=${VALE_MINALERTLEVEL}" \ - --config=/etc/vale/.vale.ini \ - --output=line \ + '--glob=*.md' \ + --output=/etc/vale/rdjsonl.tmpl \ /hugo/content/docs | sed "s#$(proj_dst "${proj}")#sources#" ;; *) @@ -788,7 +828,8 @@ EOF -e '/rm -rf dist*/ d' \ -e '/Press Ctrl+C to stop/ d' \ -e '/make/ d' \ - -e '/WARNING: The manual_mount source directory/ d' + -e '/WARNING: The manual_mount source directory/ d' \ + -e '/docs\/_index.md .* not found/ d' fi ;; esac diff --git a/docs/sources/_index.md b/docs/sources/_index.md index 46dcc4fa1380d..2ef3f960b46b0 100644 --- a/docs/sources/_index.md +++ b/docs/sources/_index.md @@ -15,6 +15,7 @@ labels: - oss cascade: TEMPO_VERSION: latest + PYROSCOPE_VERSION: latest title: Grafana open source documentation --- @@ -42,6 +43,10 @@ title: Grafana open source documentation
Run Docker image
+ }}" class="nav-cards__item nav-cards__item--install"> + +
Run on Kubernetes
+
@@ -77,8 +82,8 @@ title: Grafana open source documentation

Provisioning

Learn how to automate your Grafana configuration.

- }}" class="nav-cards__item nav-cards__item--guide"> -

What's new in v10.2

+
}}" class="nav-cards__item nav-cards__item--guide"> +

What's new in v10.4

Explore the features and enhancements in the latest release.

diff --git a/docs/sources/administration/api-keys/index.md b/docs/sources/administration/api-keys/index.md index 6ea118897244c..bc4a5b6cd0db7 100644 --- a/docs/sources/administration/api-keys/index.md +++ b/docs/sources/administration/api-keys/index.md @@ -17,6 +17,10 @@ weight: 700 # API keys +{{% admonition type="note" %}} +Deprecated: [Service accounts]({{< relref "../service-accounts/" >}}) have replaced API keys as the primary way to authenticate applications that interact with Grafana. +{{% /admonition %}} + An API key is a randomly generated string that external systems use to interact with Grafana HTTP APIs. When you create an API key, you specify a **Role** that determines the permissions associated with the API key. Role permissions control that actions the API key can perform on Grafana resources. diff --git a/docs/sources/administration/correlations/_index.md b/docs/sources/administration/correlations/_index.md index 6a8b332c5a8a3..977849d294860 100644 --- a/docs/sources/administration/correlations/_index.md +++ b/docs/sources/administration/correlations/_index.md @@ -30,11 +30,6 @@ Explore visualizations that currently support showing links based on correlation You can configure correlations using [provisioning]({{< relref "../provisioning" >}}), the **Administration > Plugins and data > Correlations** page in Grafana or directly in [Explore]({{< relref "../../explore/correlations-editor-in-explore" >}}). -{{% admonition type="note" %}} -Correlations are available in Grafana 10.0+ as an opt-in beta feature. -Modify the Grafana [configuration file]({{< relref "../../setup-grafana/configure-grafana#configuration-file-location" >}}) to enable the `correlations` [feature toggle]({{< relref "../../setup-grafana/configure-grafana#feature_toggles" >}}) to use it. -{{% /admonition %}} - ## Example of how links work in Explore once set up {{< figure src="/static/img/docs/correlations/correlations-in-explore-10-0.gif" alt="Demonstration of following a correlation link in Grafana Explore" caption="Correlations links in Explore" >}} diff --git a/docs/sources/administration/data-source-management/_index.md b/docs/sources/administration/data-source-management/_index.md new file mode 100644 index 0000000000000..b57424f245ede --- /dev/null +++ b/docs/sources/administration/data-source-management/_index.md @@ -0,0 +1,168 @@ +--- +aliases: + - ../datasources/add-a-data-source/ + - ../datasources/datasource_permissions/ + - ../enterprise/datasource_permissions/ + - ../enterprise/query-caching/ + - ../features/datasources/add-a-data-source/ + - ../permissions/datasource_permissions/ +description: Data source management information for Grafana administrators +labels: + products: + - enterprise + - cloud +title: Data source management +weight: 100 +--- + +# Data source management + +Grafana supports many different storage backends for your time series data (data source). +Refer to [data sources]({{< relref "../../datasources" >}}) for more information about using data sources in Grafana. +Only users with the organization admin role can add data sources. + +For links to data source-specific documentation, see [Data sources]({{< relref "../../datasources" >}}). + +## Data source permissions + +You can configure data source permissions to allow or deny certain users the ability to query, edit, or administrate a data source. Each data source’s configuration includes a Permissions tab where you can restrict data source permissions to specific users, service accounts, teams, or roles. + +- The `query` permission allows users to query the data source. +- The `edit` permission allows users to query the data source, edit the data source’s configuration and delete the data source. +- The `admin` permission allows users to query and edit the data source, change permissions on the data source and enable or disable query caching for the data source. + +{{% admonition type="note" %}} +Available in [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud](/docs/grafana-cloud). +{{% /admonition %}} + +By default, data sources in an organization can be queried by any user in that organization. For example, a user with the `Viewer` role can issue any possible query to a data source, not just queries that exist on dashboards to which they have access. Additionally, by default, data sources can be edited by the user who created the data source, as well as users with the `Admin` role. + +
+ +### Assign data source permissions to users, service accounts, teams, or roles + +You can assign data source permissions to users, service accounts, teams, and roles which will allow access to query, edit, or administrate the data source. + +1. Click **Connections** in the left-side menu. +1. Under Your connections, click **Data sources**. +1. Select the data source to which you want to assign permissions. +1. On the Permissions tab, click **Add a permission**. +1. Select **User**, **Service Account**, **Team**, or **Role**. +1. Select the entity for which you want to modify permissions. +1. Select the **Query**, **Edit**, or **Admin** permission. +1. Click **Save**. + +
+ +### Edit data source permissions for users, service accounts, teams, or roles + +1. Click **Connections** in the left-side menu. +1. Under Your connections, click **Data sources**. +1. Select the data source for which you want to edit permissions. +1. On the Permissions tab, find the **User**, **Service Account**, **Team**, or **Role** permission you want to update. +1. Select a different option in the **Permission** dropdown. + +
+ +### Remove data source permissions for users, service accounts, teams, or roles + +1. Click **Connections** in the left-side menu. +1. Under Your connections, click **Data sources**. +1. Select the data source from which you want to remove permissions. +1. On the Permissions tab, find the **User**, **Service Account**, **Team**, or **Role** permission you want to remove. +1. Click the **X** next to the permission. + +
+ +## Query and resource caching + +When you enable query and resource caching, Grafana temporarily stores the results of data source queries and resource requests. When you or another user submit the same query or resource request again, the results will come back from the cache instead of from the data source. + +When using Grafana, a query pertains to a request for data frames to be modified or displayed. A resource relates to any HTTP requests made by a plugin, such as the Amazon Timestream plugin requesting a list of available databases from AWS. For more information on data source queries and resources, please see the developers page on [backend plugins](/developers/plugin-tools/introduction/backend-plugins). + +The caching feature works for **all** backend data sources. You can enable the cache globally in Grafana's [configuration]({{< relref "../../setup-grafana/configure-grafana/enterprise-configuration/#caching" >}}), and configure a cache duration (also called Time to Live, or TTL) for each data source individually. + +{{% admonition type="note" %}} +Available in [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud](/docs/grafana-cloud/). +{{% /admonition %}} + +The following cache backend options are available: in-memory, Redis, and Memcached. + +{{% admonition type="note" %}} +Storing cached queries in-memory can increase Grafana's memory footprint. In production environments, a Redis or Memcached backend is highly recommended. +{{% /admonition %}} + +When a panel queries a data source with cached data, it will either fetch fresh data or use cached data depending on the panel's **interval.** The interval is used to round the query time range to a nearby cached time range, increasing the likelihood of cache hits. Therefore, wider panels and dashboards with shorter time ranges fetch new data more often than narrower panels and dashboards with longer time ranges. + +A panel's interval is visible in the [query options]({{< relref "../../panels-visualizations/query-transform-data/" >}}). It is calculated as follows: `time range / max data points`. Max data points are calculated based on the width of the panel. For example, a wide panel with `1000 data points` on a dashboard with a time range of `last 7 days` will retrieve fresh data every 10 minutes: `7d / 1000 = 10m`. In this example, cached data for this panel will be served for up to 10 minutes before Grafana needs to query the data source again for new data. + +You can configure a panel to retrieve data more often by increasing the **Max data points** setting in the panel's [query options]({{< relref "../../panels-visualizations/query-transform-data/" >}}). + +### Caching benefits + +By reducing the number of queries and requests sent to data sources, caching can provide the following benefits: + +- Faster dashboard load times, especially for popular dashboards. +- Reduced API costs. +- Reduced likelihood that APIs will rate-limit or throttle requests. + +### Data sources that work with query caching + +Query caching works for Grafana's [built-in data sources]({{< relref "../../datasources/#built-in-core-data-sources" >}}), and [backend data source plugins](https://grafana.com/grafana/plugins/?type=datasource) that extend the `DataSourceWithBackend` class in the plugins SDK. + +To verify that a data source works with query caching, follow the [instructions below](#enable-and-configure-query-caching) to **Enable and Configure query caching**. If caching is enabled in Grafana but the Caching tab is not visible for the given data source, then query caching is not available for that data source. + +{{% admonition type="note" %}} +Some data sources, such as Elasticsearch, Prometheus, and Loki, cache queries themselves, so Grafana _query_ caching does not significantly improve performance. However, _resource_ caching may help. See the developers page on [plugin resources](/developers/plugin-tools/introduction/backend-plugins) for details. +{{% /admonition %}} + +### Enable and configure query caching + +You must be an Org admin or Grafana admin to enable query caching for a data source. For more information on Grafana roles and permissions, refer to [About users and permissions]({{< relref "../roles-and-permissions/" >}}). + +By default, data source queries are not cached. To enable query caching for a single data source: + +1. Click **Connections** in the left-side menu. +1. Under Your Connections, click **Data sources**. +1. In the data source list, click the data source that you want to turn on caching for. +1. Go to the Cache tab. +1. Click **Enable**. +1. (Optional) Choose custom TTLs for the data source's queries and resources caching. If you skip this step, then Grafana uses the default TTL. + +You can optionally override a data source's configured TTL for individual dashboard panels. This can be useful when you have queries whose results change more or less often than the configured TTL. In the Edit Panel view, select the caching-enabled data source, expand the Query options, and enter your the TTL in milliseconds. + +{{< figure max-width="500px" src="/media/docs/grafana/per-panel-cache-ttl-9-4.png" caption="Set Cache TTL for a single panel" >}} + +{{% admonition type="note" %}} +If query caching is enabled and the Cache tab is not visible in a data source's settings, then query caching is not available for that data source. +{{% /admonition %}} + +To configure global settings for query caching, refer to the `caching` section of [Configure Grafana Enterprise]({{< relref "../../setup-grafana/configure-grafana/enterprise-configuration/#caching" >}}). + +### Disable query caching + +To disable query caching for a single data source: + +1. Click **Connections** in the left-side menu. +1. Under Your Connections, click **Data sources**. +1. In the data source list, click the data source that you want to turn off caching for. +1. On the Cache tab, click **Disable**. + +To disable query caching for an entire Grafana instance, set the `enabled` flag to `false` in the `caching` section of [Configure Grafana Enterprise]({{< relref "../../setup-grafana/configure-grafana/enterprise-configuration/#caching" >}}). You will no longer see the Cache tab on any data sources, and no data source queries will be cached. + +### Clear cache + +If you experience performance issues or repeated queries become slower to execute, consider clearing your cache. + +{{% admonition type="note" %}} +This action impacts all cache-enabled data sources. If you are using Memcached, the system clears all data from the Memcached instance. +{{% /admonition %}} + +1. Click **Connections** in the left-side menu. +1. Under Your Connections, click **Data sources**. +1. In the data source list, click the data source that you want to clear the cache for. +1. In the Cache tab, click **Clear cache**. + +### Sending a request without cache + +If a data source query request contains an `X-Cache-Skip` header, then Grafana skips the caching middleware, and does not search the cache for a response. This can be particularly useful when debugging data source queries using cURL. diff --git a/docs/sources/administration/data-source-management/index.md b/docs/sources/administration/data-source-management/index.md deleted file mode 100644 index f4a9be6f23b45..0000000000000 --- a/docs/sources/administration/data-source-management/index.md +++ /dev/null @@ -1,199 +0,0 @@ ---- -aliases: - - ../datasources/add-a-data-source/ - - ../datasources/datasource_permissions/ - - ../enterprise/datasource_permissions/ - - ../enterprise/query-caching/ - - ../features/datasources/add-a-data-source/ - - ../permissions/datasource_permissions/ -description: Data source management information for Grafana administrators -labels: - products: - - enterprise - - oss -title: Data source management -weight: 100 ---- - -# Data source management - -Grafana supports many different storage backends for your time series data (data source). -Refer to [data sources]({{< relref "../../datasources" >}}) for more information about using data sources in Grafana. -Only users with the organization admin role can add data sources. - -## Add a data source - -Before you can create your first dashboard, you need to add your data source. - -{{% admonition type="note" %}} -Only users with the organization admin role can add data sources. -{{% /admonition %}} - -**To add a data source:** - -1. Click **Connections** in the left-side menu. -1. Enter the name of a specific data source in the search dialog. You can filter by **Data source** to only see data sources. -1. Click the data source you want to add. -1. Configure the data source following instructions specific to that data source. - -For links to data source-specific documentation, see [Data sources]({{< relref "../../datasources" >}}). - -## Data source permissions - -You can configure data source permissions to allow or deny certain users the ability to query, edit, or administrate a data source. Each data source’s configuration includes a Permissions tab where you can restrict data source permissions to specific users, service accounts, teams, or roles. -Query permission allows users to query the data source. Edit permission allows users to query the data source, edit the data source’s configuration and delete the data source. Admin permission allows users to query and edit the data source, change permissions on the data source and enable or disable query caching for the data source. - -{{% admonition type="note" %}} -Available in [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud](/docs/grafana-cloud). -{{% /admonition %}} - -By default, data sources in an organization can be queried by any user in that organization. For example, a user with the `Viewer` role can issue any possible query to a data source, not just queries that exist on dashboards to which they have access. Additionally, by default, data sources can be edited by the user who created the data source, as well as users with the `Admin` role. - -
- -### Assign data source permissions to users, service accounts, teams, or roles - -You can assign data source permissions to users, service accounts, teams, and roles which will allow access to query, edit, or administrate the data source. - -1. Click **Connections** in the left-side menu. -1. Under Your connections, click **Data sources**. -1. Select the data source to which you want to assign permissions. -1. On the Permissions tab, click **Add a permission**. -1. Select **User**, **Service Account**, **Team**, or **Role**. -1. Select the entity for which you want to modify permissions. -1. Select the **Query**, **Edit**, or **Admin** permission. -1. Click **Save**. - -
- -### Edit data source permissions for users, service accounts, teams, or roles - -1. Click **Connections** in the left-side menu. -1. Under Your connections, click **Data sources**. -1. Select the data source for which you want to edit permissions. -1. On the Permissions tab, find the user, service account, team, or role permission you want to update. -1. Select a different option in the **Permission** dropdown. - -
- -### Remove data source permissions for users, service accounts, teams, or roles - -1. Click **Connections** in the left-side menu. -1. Under Your connections, click **Data sources**. -1. Select the data source from which you want to remove permissions. -1. On the Permissions tab, find the user, service account, team, or role permission you want to remove. -1. Click the **X** next to the permission. - -
- -## Query and resource caching - -When you enable query and resource caching, Grafana temporarily stores the results of data source queries and resource requests. When you or another user submit the same query or resource request again, the results will come back from the cache instead of from the data source. - -When using Grafana, a query pertains to a request for data frames to be modified or displayed. A resource relates to any HTTP requests made by a plugin, such as the Amazon Timestream plugin requesting a list of available databases from AWS. For more information on data source queries and resources, please see the developers page on [backend plugins](/developers/plugin-tools/introduction/backend-plugins). - -The caching feature works for **all** backend data sources. You can enable the cache globally in Grafana's [configuration]({{< relref "../../setup-grafana/configure-grafana/enterprise-configuration/#caching" >}}), and configure a cache duration (also called Time to Live, or TTL) for each data source individually. - -{{% admonition type="note" %}} -Available in [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud](/docs/grafana-cloud/). -{{% /admonition %}} - -The following cache backend options are available: in-memory, Redis, and Memcached. - -{{% admonition type="note" %}} -Storing cached queries in-memory can increase Grafana's memory footprint. In production environments, a Redis or Memcached backend is highly recommended. -{{% /admonition %}} - -When a panel queries a data source with cached data, it will either fetch fresh data or use cached data depending on the panel's **interval.** The interval is used to round the query time range to a nearby cached time range, increasing the likelihood of cache hits. Therefore, wider panels and dashboards with shorter time ranges fetch new data more often than narrower panels and dashboards with longer time ranges. - -A panel's interval is visible in the [query options]({{< relref "../../panels-visualizations/query-transform-data/" >}}). It is calculated as follows: `time range / max data points`. Max data points are calculated based on the width of the panel. For example, a wide panel with `1000 data points` on a dashboard with a time range of `last 7 days` will retrieve fresh data every 10 minutes: `7d / 1000 = 10m`. In this example, cached data for this panel will be served for up to 10 minutes before Grafana needs to query the data source again for new data. - -You can configure a panel to retrieve data more often by increasing the **Max data points** setting in the panel's [query options]({{< relref "../../panels-visualizations/query-transform-data/" >}}). - -### Caching benefits - -By reducing the number of queries and requests sent to data sources, caching can provide the following benefits: - -- Faster dashboard load times, especially for popular dashboards. -- Reduced API costs. -- Reduced likelihood that APIs will rate-limit or throttle requests. - -### Data sources that work with query caching - -Query caching works for Grafana's [built-in data sources]({{< relref "../../datasources/#built-in-core-data-sources" >}}), and [backend data source plugins](https://grafana.com/grafana/plugins/?type=datasource) that extend the `DataSourceWithBackend` class in the plugins SDK. - -To verify that a data source works with query caching, follow the [instructions below](#enable-and-configure-query-caching) to **Enable and Configure query caching**. If caching is enabled in Grafana but the Caching tab is not visible for the given data source, then query caching is not available for that data source. - -{{% admonition type="note" %}} -Some data sources, such as Elasticsearch, Prometheus, and Loki, cache queries themselves, so Grafana _query_ caching does not significantly improve performance. However, _resource_ caching may help. See the developers page on [plugin resources](/developers/plugin-tools/introduction/backend-plugins) for details. -{{% /admonition %}} - -### Enable and configure query caching - -You must be an Org admin or Grafana admin to enable query caching for a data source. For more information on Grafana roles and permissions, refer to [About users and permissions]({{< relref "../roles-and-permissions/" >}}). - -By default, data source queries are not cached. To enable query caching for a single data source: - -1. Click **Connections** in the left-side menu. -1. Under Your Connections, click **Data sources**. -1. In the data source list, click the data source that you want to turn on caching for. -1. Go to the Cache tab. -1. Click **Enable**. -1. (Optional) Choose custom TTLs for the data source's queries and resources caching. If you skip this step, then Grafana uses the default TTL. - -You can optionally override a data source's configured TTL for individual dashboard panels. This can be useful when you have queries whose results change more or less often than the configured TTL. In the Edit Panel view, select the caching-enabled data source, expand the Query options, and enter your the TTL in milliseconds. - -{{< figure max-width="500px" src="/media/docs/grafana/per-panel-cache-ttl-9-4.png" caption="Set Cache TTL for a single panel" >}} - -{{% admonition type="note" %}} -If query caching is enabled and the Cache tab is not visible in a data source's settings, then query caching is not available for that data source. -{{% /admonition %}} - -To configure global settings for query caching, refer to the `caching` section of [Configure Grafana Enterprise]({{< relref "../../setup-grafana/configure-grafana/enterprise-configuration/#caching" >}}). - -### Disable query caching - -To disable query caching for a single data source: - -1. Click **Connections** in the left-side menu. -1. Under Your Connections, click **Data sources**. -1. In the data source list, click the data source that you want to turn off caching for. -1. On the Cache tab, click **Disable**. - -To disable query caching for an entire Grafana instance, set the `enabled` flag to `false` in the `caching` section of [Configure Grafana Enterprise]({{< relref "../../setup-grafana/configure-grafana/enterprise-configuration/#caching" >}}). You will no longer see the Cache tab on any data sources, and no data source queries will be cached. - -### Clear cache - -If you experience performance issues or repeated queries become slower to execute, consider clearing your cache. - -{{% admonition type="note" %}} -This action impacts all cache-enabled data sources. If you are using Memcached, the system clears all data from the Memcached instance. -{{% /admonition %}} - -1. Click **Connections** in the left-side menu. -1. Under Your Connections, click **Data sources**. -1. In the data source list, click the data source that you want to clear the cache for. -1. In the Cache tab, click **Clear cache**. - -### Sending a request without cache - -If a data source query request contains an `X-Cache-Skip` header, then Grafana skips the caching middleware, and does not search the cache for a response. This can be particularly useful when debugging data source queries using cURL. - -## Add data source plugins - -Grafana ships with several [built-in data sources]({{< relref "../../datasources#built-in-core-data-sources" >}}). -You can add additional data sources as plugins, which you can install or create yourself. - -### Find data source plugins in the plugin catalog - -To view available data source plugins, go to the [plugin catalog](/grafana/plugins/?type=datasource) and select the "Data sources" filter. -For details about the plugin catalog, refer to [Plugin management]({{< relref "../../administration/plugin-management/" >}}). - -You can further filter the plugin catalog's results for data sources provided by the Grafana community, Grafana Labs, and partners. -If you use [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}), you can also filter by Enterprise-supported plugins. - -For more documentation on a specific data source plugin's features, including its query language and editor, refer to its plugin catalog page. - -### Create a data source plugin - -To build your own data source plugin, refer to the ["Build a data source plugin"](/developers/plugin-tools/tutorials/build-a-data-source-plugin) tutorial and our documentation about [building a plugin](/developers/plugin-tools). diff --git a/docs/sources/administration/data-source-management/teamlbac/_index.md b/docs/sources/administration/data-source-management/teamlbac/_index.md new file mode 100644 index 0000000000000..1d87bdbb06d3d --- /dev/null +++ b/docs/sources/administration/data-source-management/teamlbac/_index.md @@ -0,0 +1,68 @@ +--- +description: Label based data access for Loki given Teams +keywords: + - grafana + - loki + - lbac +labels: + products: + - enterprise + - cloud +title: Team LBAC +weight: 100 +--- + +# Team LBAC + +Team Label Based Access Control (LBAC) simplifies and streamlines data source access management based on team memberships. + +{{< admonition type="note" >}} +Creating Team LBAC rules is available for preview for logs with Loki in Grafana Cloud. +Report any unexpected behavior to the Grafana Support team. +{{< /admonition >}} + +You can configure user access based upon team memberships using LogQL. +Team LBAC controls access to logs depending on the rules set for each team. + +This feature addresses two common challenges faced by Grafana users: + +1. Having a high number of Grafana Cloud data sources. + Team LBAC lets Grafana administrators reduce the total number of data sources per instance from hundreds, to one. +1. Using the same dashboard across multiple teams. + Team LBAC lets Grafana Teams use the same dashboard with different access control rules. + +To set up Team LBAC for a Loki data source, refer to [Configure Team LBAC](https://grafana.com/docs/grafana//administration/data-source-management/teamlbac/configure-teamlbac-for-loki/). + +## Limitations + +- If there are no Team LBAC rules for a user's team, that user can query all logs. +- If an administrator is part of a team with Team LBAC rules, those rules are applied to the administrator requests. +- Cloud Access Policies (CAP) LBAC rules override Team LBAC rules. + Cloud Access Policies are the access controls from Grafana Cloud. + If there are any CAP LBAC rules configured for the same data source, then only the CAP LBAC rules are applied. + + You must remove any label selectors from your Cloud Access Policies to use Team LBAC. + For more information about CAP label selectors, refer to [Use label-based access control (LBAC) with access policies](https://grafana.com/docs/grafana-cloud/account-management/authentication-and-permissions/access-policies/label-access-policies/). + +## Data source permissions + +Data source permissions allow the users access to query the data source. +Administrators set the permissions at the data source level. +All the teams and users that are part of the data source inherit those permissions. + +## Recommended setup + +It's recommended that you create a single Loki data source for using Team LBAC rules so you have a clear separation of data sources using Team LBAC and those that aren't. +All teams should have with only teams having `query` permission. +You should create another Loki data source configured without Team LBAC for full access to the logs. + +## Team LBAC rules + +Grafana adds Team LBAC rules to the HTTP request via the Loki data source. + +If you configure multiple rules for a team, each rule is evaluated separately. +Query results include lines that match any of the rules. + +Only users with data source `Admin` permissions can edit Team LBAC rules in the **Data source permissions** tab because changing LBAC rules requires the same access level as editing data source permissions. + +To set up Team LBAC for a Loki data source, refer to [Configure Team LBAC](https://grafana.com/docs/grafana//administration/data-source-management/teamlbac/configure-teamlbac-for-loki/). diff --git a/docs/sources/administration/data-source-management/teamlbac/configure-teamlbac-for-loki/index.md b/docs/sources/administration/data-source-management/teamlbac/configure-teamlbac-for-loki/index.md new file mode 100644 index 0000000000000..bb1ab192d74fb --- /dev/null +++ b/docs/sources/administration/data-source-management/teamlbac/configure-teamlbac-for-loki/index.md @@ -0,0 +1,45 @@ +--- +description: Configure Team LBAC for Loki data source on Grafana Cloud +keywords: + - loki + - datasource + - team +labels: + products: + - cloud +title: Configure Team LBAC for Loki +weight: 250 +--- + +# Configure Team LBAC for Loki data source on Grafana Cloud + +Team LBAC is available in private preview on Grafana Cloud for Loki created with basic authentication. Loki datasources for Team LBAC can only be created, provisioning is currently not available. + +## Before you begin + +To be able to use Team LBAC rules, you need to enable the feature toggle `teamHTTPHeaders` on your Grafana instance. Contact support to enable the feature toggle for you. + +- Be sure that you have the permission setup to create a loki tenant in Grafana Cloud +- Be sure that you have admin data source permissions for Grafana. + +### Permissions + +We recommend that you remove all permissions for roles and teams that are not required to access the data source. This will help to ensure that only the required teams have access to the data source. The recommended permissions are `Admin` permission and only add the teams `Query` permissions that you want to add Team LBAC rules for. + +## Task 1: Configure Team LBAC for a new Loki data source + +1. Access Loki data sources details for your stack through grafana.com +1. Copy Loki Details and Create a CAP + - Copy the details of your Loki setup. + - Create a Cloud Access Policy (CAP) for the Loki data source in grafana.com. + - Ensure the CAP includes `logs:read` permissions. + - Ensure the CAP does not include `labels` rules. +1. Create a New Loki Data Source + - In Grafana, proceed to add a new data source and select Loki as the type. +1. Navigate back to the Loki data source + - Set up the Loki data source using basic authentication. Use the userID as the username. Use the generated CAP token as the password. + - Save and connect. +1. Navigate to Data Source Permissions + - Go to the permissions tab of the newly created Loki data source. Here, you'll find the Team LBAC rules section. + +For more information on how to setup Team LBAC rules for a Loki data source, [Add Team LBAC rules]({{< relref "./../create-teamlbac-rules/" >}}). diff --git a/docs/sources/administration/data-source-management/teamlbac/create-teamlbac-rules/index.md b/docs/sources/administration/data-source-management/teamlbac/create-teamlbac-rules/index.md new file mode 100644 index 0000000000000..f19fa06ec0f5c --- /dev/null +++ b/docs/sources/administration/data-source-management/teamlbac/create-teamlbac-rules/index.md @@ -0,0 +1,125 @@ +--- +description: Learn how to create Team LBAC rules for the Loki data source. +keywords: + - loki + - lbac + - team +labels: + products: + - enterprise + - cloud +title: Create Team LBAC rules for the Loki data source +weight: 250 +--- + +# Create Team LBAC rules for the Loki data source + +Team LBAC is available on Cloud for data sources created with basic authentication. Any managed Loki data source can **NOT** be configured with Team LBAC rules. + +## Before you begin + +- Be sure that you have admin data source permissions for Grafana. +- Be sure that you have a team setup in Grafana. + +### Create a Team LBAC Rule for a team + +1. Navigate to your Loki datasource +1. Navigate to the permissions tab + - Here, you'll find the Team LBAC rules section. +1. Add a Team LBAC Rule + - Add a new rule for the team in the Team LBAC rules section. +1. Define Label Selector for the Rule + - Add a label selector to the rule. Refer to Loki query documentation for guidance on the types of log selections you can specify. + +### LBAC rule + +A LBAC rule is a `logql` query that runs as a query to the loki instance for your logs. Each rule is it's own filtering operating independently from the other rules within a team. For example, you can create a label policy that includes all log lines with the label. + +One rule `{namespace="dev", cluster="us-west-0"}` created with multiple namespaces will be seen as `namespace="dev"` **AND** `cluster="us-west-0"`. +Two rules `{namespace="dev"}`, `{cluster="us-west-0"}` created for a team will be seen as `namespace="dev"` **OR** `cluster="us-west-0"`. + +#### Best practices + +We recommend you only add `query` permissions for teams that should use the data source and only `Admin` have `Admin` permissions. + +We recommend for a first setup, setting up as few rules as possible for each team and make them additive for simplicity. + +For validating the rules, we recommend testing the rules in the Loki Explore view. This will allow you to see the logs that would be returned for the rule. + +#### Tasks + +### Task 1: One rule setup for each team + +One common use case for creating an LBAC policy is to have specific access to logs that have a specific label. For example, you can create a label policy that includes all log lines with the label. + +We have two teams, Team A and Team B with `Query` permissions. Loki access is setup with `Admin` roles to have `Admin` permission only. + +- Team A has a rule `namespace="dev"`. + +- Team B has a rule `namespace="prod"`. + +A user that is part of Team A will have access to logs that match `namespace="dev"`. + +A user that is part of Team B will have access to logs that match `namespace="prod"`. + +A user that is part of Team A and Team B will have access to logs that match `namespace="dev"` OR `namespace="prod"`. + +### Task 2: One rule setup for a team Exclude a label + +One common use case for creating an LBAC policy is to exclude logs that have a specific label. For example, you can create a label policy that excludes all log lines with the label secret=true by adding a selector with `secret!="true"` when you create an access policy: + +We have one team, Team A `Query` permissions. Loki access is setup with `Admin` roles to have `Admin` permission only. + +- Team A has a rule `secret!="true"`. + +A user that is part of Team A will **NOT** have access to logs that match `secret!="true"`. + +### Task 3: Multiple rules setup for one team + +We have two teams, Team A and Team B with `Query` permissions. Loki access is setup with `Admin` roles having `Admin` permission. + +- Team A has rule `cluster="us-west-0", namespace=~"dev|prod"` configured. + +- Team B has rule `cluster="us-west-0", namespace="staging"` configured. + +A user that is only part of Team A will have access to logs that match `cluster="us-west-0" AND (namespace="dev" OR namespace="prod")`. + +A user that is only part of Team B will have access to logs that match `cluster="us-west-0" AND namespace="staging"`. + +A user in Team A has access to logs in cluster us-west-0 with namespaces `dev` and `prod`. A user in Team B has access to to everything in cluster us-west-0, except namespace prod. So basically, user who is member of both team A and team B has access to everything in cluster us-west-0. + +A user that is **not** part of any Team with `Editor/Viewer` role will not have access to query any logs. + +**Important** + +A `Admin` user that is part of a Team with will only have access to that teams logs + +A `Admin` user that is not part of any Team with `Admin` role will have access to all logs + +### Task 4: Rules that overlap + +We have two teams, Team A and Team B. + +- Team A has a rule `namespace="dev"`. + +- Team B has a rule `namespace!="dev"`. + +A user in Team A will have access to logs that match `namespace="dev"`. + +A user in Team B will have access to logs that match `namespace!="dev"`. + +> _NOTE:_ A user that is part of Team A and Team B will have access to all logs that match `namespace="dev"` `OR` `namespace!="dev"`. + +### Task 5: One rule setup for a Team + +We have two teams, Team A and Team B. Loki access is setup with `Editor`, `Viewer` roles to have `Query` permission. + +- Team A has a rule `namespace="dev"` configured. + +- Team B does not have a rule configured for it. + +A user that is part of Team A will have access to logs that match `namespace="dev"`. + +A user that is part of Team A and part of Team B will have access to logs that match `namespace="dev"`. + +A user that is not part of Team A and part of Team B, that is `Editor` or `Viewer` will have access to all logs (due to the query permission for the user). diff --git a/docs/sources/administration/enterprise-licensing/_index.md b/docs/sources/administration/enterprise-licensing/_index.md index 6dd8c9e2f70cc..5d7930976844f 100644 --- a/docs/sources/administration/enterprise-licensing/_index.md +++ b/docs/sources/administration/enterprise-licensing/_index.md @@ -196,6 +196,13 @@ The active users limit is turned off immediately. Settings updates at runtime are not affected by an expired license. +#### Email sharing + +External users can't access dashboards shared via email anymore. +These dashboards are now private but you can make them public and accessible to everyone if you want to. + +Grafana keeps your sharing configurations and restores them after you update your license. + ## Grafana Enterprise license restrictions When you become a Grafana Enterprise customer, you receive a license that governs your use of Grafana Enterprise. diff --git a/docs/sources/administration/organization-preferences/index.md b/docs/sources/administration/organization-preferences/index.md index 913f6ca8345f4..590370bf27f17 100644 --- a/docs/sources/administration/organization-preferences/index.md +++ b/docs/sources/administration/organization-preferences/index.md @@ -188,7 +188,7 @@ Users with the Grafana Server Admin flag on their account or access to the confi #### [Optional] Convert an existing dashboard into a JSON file 1. Navigate to the page of the dashboard you want to use as the home dashboard. -1. Click the **Share dashboard** icon next to the dashboard title. +1. Click the **Share** button at the top right of the screen. 1. In the Export tab, click **Save to file**. Grafana converts the dashboard to a JSON file and saves it locally. #### Use a JSON file as the home dashboard diff --git a/docs/sources/administration/provisioning/index.md b/docs/sources/administration/provisioning/index.md index 3a96f6e31117b..7c98942d581f2 100644 --- a/docs/sources/administration/provisioning/index.md +++ b/docs/sources/administration/provisioning/index.md @@ -419,82 +419,14 @@ providers: To provision dashboards to the root level, store them in the root of your `path`. {{% /admonition %}} +{{< admonition type="note" >}} +This feature doesn't currently allow you to create nested folder structures, that is, where you have folders within folders. +{{< /admonition >}} + ## Alerting For information on provisioning Grafana Alerting, refer to [Provision Grafana Alerting resources]({{< relref "../../alerting/set-up/provision-alerting-resources/" >}}). -## Alert Notification Channels - -{{% admonition type="note" %}} -Alert Notification Channels are part of legacy alerting, which is deprecated and will be removed in Grafana 10. Use the Provision contact points section in [Create and manage alerting resources using file provisioning]({{< relref "../../alerting/set-up/provision-alerting-resources/file-provisioning" >}}). -{{% /admonition %}} - -Alert Notification Channels can be provisioned by adding one or more YAML config files in the [`provisioning/notifiers`](/administration/configuration/#provisioning) directory. - -Each config file can contain the following top-level fields: - -- `notifiers`, a list of alert notifications that will be added or updated during start up. If the notification channel already exists, Grafana will update it to match the configuration file. -- `delete_notifiers`, a list of alert notifications to be deleted before inserting/updating those in the `notifiers` list. - -Provisioning looks up alert notifications by uid, and will update any existing notification with the provided uid. - -By default, exporting a dashboard as JSON will use a sequential identifier to refer to alert notifications. The field `uid` can be optionally specified to specify a string identifier for the alert name. - -```json -{ - ... - "alert": { - ..., - "conditions": [...], - "frequency": "24h", - "noDataState": "ok", - "notifications": [ - {"uid": "notifier1"}, - {"uid": "notifier2"}, - ] - } - ... -} -``` - -### Example Alert Notification Channels Config File - -```yaml -notifiers: - - name: notification-channel-1 - type: slack - uid: notifier1 - # either - org_id: 2 - # or - org_name: Main Org. - is_default: true - send_reminder: true - frequency: 1h - disable_resolve_message: false - # See `Supported Settings` section for settings supported for each - # alert notification type. - settings: - recipient: 'XXX' - uploadImage: true - token: 'xoxb' # legacy setting since Grafana v7.2 (stored non-encrypted) - url: https://slack.com # legacy setting since Grafana v7.2 (stored non-encrypted) - # Secure settings that will be encrypted in the database (supported since Grafana v7.2). See `Supported Settings` section for secure settings supported for each notifier. - secure_settings: - token: 'xoxb' - url: https://slack.com - -delete_notifiers: - - name: notification-channel-1 - uid: notifier1 - # either - org_id: 2 - # or - org_name: Main Org. - - name: notification-channel-2 - # default org_id: 1 -``` - ### Supported Settings The following sections detail the supported settings and secure settings for each alert notification type. Secure settings are stored encrypted in the database and you add them to `secure_settings` in the YAML file instead of `settings`. diff --git a/docs/sources/administration/roles-and-permissions/access-control/_index.md b/docs/sources/administration/roles-and-permissions/access-control/_index.md index 75d41e2fa89e1..10c8bad4054c3 100644 --- a/docs/sources/administration/roles-and-permissions/access-control/_index.md +++ b/docs/sources/administration/roles-and-permissions/access-control/_index.md @@ -93,6 +93,7 @@ Assign fixed roles when the basic roles do not meet your permission requirements - [Feature Toggles]({{< relref "../../feature-toggles/" >}}) - [Folders]({{< relref "../../../dashboards/manage-dashboards/#create-a-dashboard-folder" >}}) - [LDAP]({{< relref "../../../setup-grafana/configure-security/configure-authentication/ldap/" >}}) +- [Library panels]({{< relref "../../../dashboards/build-dashboards/manage-library-panels" >}}) - [Licenses]({{< relref "../../stats-and-license/" >}}) - [Organizations]({{< relref "../../organization-management/" >}}) - [Provisioning]({{< relref "../../provisioning/" >}}) diff --git a/docs/sources/administration/roles-and-permissions/access-control/configure-rbac/index.md b/docs/sources/administration/roles-and-permissions/access-control/configure-rbac/index.md index ab8a5eaf47bf3..c5e22b1f79e5a 100644 --- a/docs/sources/administration/roles-and-permissions/access-control/configure-rbac/index.md +++ b/docs/sources/administration/roles-and-permissions/access-control/configure-rbac/index.md @@ -22,7 +22,7 @@ The table below describes all RBAC configuration options. Like any other Grafana | Setting | Required | Description | Default | | ------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | | `permission_cache` | No | Enable to use in memory cache for loading and evaluating users' permissions. | `true` | -| `permission_validation_enabled` | No | Grafana enforces validation for permissions when a user creates or updates a role. The system checks the internal list of scopes and actions for each permission to determine they are valid. By default, if a scope or action is not recognized, Grafana logs a warning message. When set to `true`, Grafana returns an error. | `false` | +| `permission_validation_enabled` | No | Grafana enforces validation for permissions when a user creates or updates a role. The system checks the internal list of scopes and actions for each permission to determine they are valid. By default, if a scope or action is not recognized, Grafana logs a warning message. When set to `true`, Grafana returns an error. | `true` | | `reset_basic_roles` | No | Reset Grafana's basic roles' (Viewer, Editor, Admin, Grafana Admin) permissions to their default. Warning, if this configuration option is left to `true` this will be done on every reboot. | `true` | ## Example RBAC configuration diff --git a/docs/sources/administration/roles-and-permissions/access-control/custom-role-actions-scopes/index.md b/docs/sources/administration/roles-and-permissions/access-control/custom-role-actions-scopes/index.md index 9efe67b5fa5ba..3d2751e4009cd 100644 --- a/docs/sources/administration/roles-and-permissions/access-control/custom-role-actions-scopes/index.md +++ b/docs/sources/administration/roles-and-permissions/access-control/custom-role-actions-scopes/index.md @@ -29,136 +29,140 @@ To learn more about the Grafana resources to which you can apply RBAC, refer to The following list contains role-based access control actions. -| Action | Applicable scope | Description | -| ------------------------------------ | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `alert.instances.external:read` | `datasources:*`
`datasources:uid:*` | Read alerts and silences in data sources that support alerting. | -| `alert.instances.external:write` | `datasources:*`
`datasources:uid:*` | Manage alerts and silences in data sources that support alerting. | -| `alert.instances:create` | n/a | Create silences in the current organization. | -| `alert.instances:read` | n/a | Read alerts and silences in the current organization. | -| `alert.instances:write` | n/a | Update and expire silences in the current organization. | -| `alert.notifications.external:read` | `datasources:*`
`datasources:uid:*` | Read templates, contact points, notification policies, and mute timings in data sources that support alerting. | -| `alert.notifications.external:write` | `datasources:*`
`datasources:uid:*` | Manage templates, contact points, notification policies, and mute timings in data sources that support alerting. | -| `alert.notifications:write` | n/a | Manage templates, contact points, notification policies, and mute timings in the current organization. | -| `alert.notifications:read` | n/a | Read all templates, contact points, notification policies, and mute timings in the current organization. | -| `alert.rules.external:read` | `datasources:*`
`datasources:uid:*` | Read alert rules in data sources that support alerting (Prometheus, Mimir, and Loki) | -| `alert.rules.external:write` | `datasources:*`
`datasources:uid:*` | Create, update, and delete alert rules in data sources that support alerting (Mimir and Loki). | -| `alert.rules:create` | `folders:*`
`folders:uid:*` | Create Grafana alert rules in a folder and its subfolders. Combine this permission with `folders:read` in a scope that includes the folder and `datasources:query` in the scope of data sources the user can query. | -| `alert.rules:delete` | `folders:*`
`folders:uid:*` | Delete Grafana alert rules in a folder and its subfolders. Combine this permission with `folders:read` in a scope that includes the folder and `datasources:query` in the scope of data sources the user can query. | -| `alert.rules:read` | `folders:*`
`folders:uid:*` | Read Grafana alert rules in a folder and its subfolders. Combine this permission with `folders:read` in a scope that includes the folder and `datasources:query` in the scope of data sources the user can query. | -| `alert.rules:write` | `folders:*`
`folders:uid:*` | Update Grafana alert rules in a folder and its subfolders. Combine this permission with `folders:read` in a scope that includes the folder and `datasources:query` in the scope of data sources the user can query. | -| `alert.provisioning:read` | n/a | Read all Grafana alert rules, notification policies, etc via provisioning API. Permissions to folders and datasource are not required. | -| `alert.provisioning.secrets:read` | n/a | Same as `alert.provisioning:read` plus ability to export resources with decrypted secrets. | -| `alert.provisioning:write` | n/a | Update all Grafana alert rules, notification policies, etc via provisioning API. Permissions to folders and datasource are not required. | -| `annotations:create` | `annotations:*`
`annotations:type:*` | Create annotations. | -| `annotations:delete` | `annotations:*`
`annotations:type:*` | Delete annotations. | -| `annotations:read` | `annotations:*`
`annotations:type:*` | Read annotations and annotation tags. | -| `annotations:write` | `annotations:*`
`annotations:type:*` | Update annotations. | -| `apikeys:create` | n/a | Create API keys. | -| `apikeys:read` | `apikeys:*`
`apikeys:id:*` | Read API keys. | -| `apikeys:delete` | `apikeys:*`
`apikeys:id:*` | Delete API keys. | -| `dashboards:create` | `folders:*`
`folders:uid:*` | Create dashboards in one or more folders and their subfolders. | -| `dashboards:delete` | `dashboards:*`
`dashboards:uid:*`
`folders:*`
`folders:uid:*` | Delete one or more dashboards. | -| `dashboards.insights:read` | n/a | Read dashboard insights data and see presence indicators. | -| `dashboards.permissions:read` | `dashboards:*`
`dashboards:uid:*`
`folders:*`
`folders:uid:*` | Read permissions for one or more dashboards. | -| `dashboards.permissions:write` | `dashboards:*`
`dashboards:uid:*`
`folders:*`
`folders:uid:*` | Update permissions for one or more dashboards. | -| `dashboards:read` | `dashboards:*`
`dashboards:uid:*`
`folders:*`
`folders:uid:*` | Read one or more dashboards. | -| `dashboards:write` | `dashboards:*`
`dashboards:uid:*`
`folders:*`
`folders:uid:*` | Update one or more dashboards. | -| `dashboards.public:write` | `dashboards:*`
`dashboards:uid:*` | Write public dashboard configuration. | -| `datasources.caching:read` | `datasources:*`
`datasources:uid:*` | Read data source query caching settings. | -| `datasources.caching:write` | `datasources:*`
`datasources:uid:*` | Update data source query caching settings. | -| `datasources:create` | n/a | Create data sources. | -| `datasources:delete` | `datasources:*`
`datasources:uid:*` | Delete data sources. | -| `datasources:explore` | n/a | Enable access to the **Explore** tab. | -| `datasources.id:read` | `datasources:*`
`datasources:uid:*` | Read data source IDs. | -| `datasources.insights:read` | n/a | Read data sources insights data. | -| `datasources.permissions:read` | `datasources:*`
`datasources:uid:*` | List data source permissions. | -| `datasources.permissions:write` | `datasources:*`
`datasources:uid:*` | Update data source permissions. | -| `datasources:query` | `datasources:*`
`datasources:uid:*` | Query data sources. | -| `datasources:read` | `datasources:*`
`datasources:uid:*` | List data sources. | -| `datasources:write` | `datasources:*`
`datasources:uid:*` | Update data sources. | -| `featuremgmt.read` | n/a | Read feature toggles. | -| `featuremgmt.write` | n/a | Write feature toggles. | -| `folders.permissions:read` | `folders:*`
`folders:uid:*` | Read permissions for one or more folders and their subfolders. | -| `folders.permissions:write` | `folders:*`
`folders:uid:*` | Update permissions for one or more folders and their subfolders. | -| `folders:create` | n/a | Create folders in the root level. If granted together with `folders:write`, also allows creating subfolders under all folders that the user can update. | -| `folders:delete` | `folders:*`
`folders:uid:*` | Delete one or more folders and their subfolders. | -| `folders:read` | `folders:*`
`folders:uid:*` | Read one or more folders and their subfolders. | -| `folders:write` | `folders:*`
`folders:uid:*` | Update one or more folders and their subfolders. If granted together with `folders:create` permission, also allows creating subfolders under these folders. | -| `ldap.config:reload` | n/a | Reload the LDAP configuration. | -| `ldap.status:read` | n/a | Verify the availability of the LDAP server or servers. | -| `ldap.user:read` | n/a | Read users via LDAP. | -| `ldap.user:sync` | n/a | Sync users via LDAP. | -| `licensing.reports:read` | n/a | Get custom permission reports. | -| `licensing:delete` | n/a | Delete the license token. | -| `licensing:read` | n/a | Read licensing information. | -| `licensing:write` | n/a | Update the license token. | -| `org.users:write` | `users:*`
`users:id:*` | Update the organization role (`Viewer`, `Editor`, or `Admin`) of a user. | -| `org.users:add` | `users:*`
`users:id:*` | Add a user to an organization or invite a new user to an organization. | -| `org.users:read` | `users:*`
`users:id:*` | Get user profiles within an organization. | -| `org.users:remove` | `users:*`
`users:id:*` | Remove a user from an organization. | -| `orgs.preferences:read` | n/a | Read organization preferences. | -| `orgs.preferences:write` | n/a | Update organization preferences. | -| `orgs.quotas:read` | n/a | Read organization quotas. | -| `orgs.quotas:write` | n/a | Update organization quotas. | -| `orgs:create` | n/a | Create an organization. | -| `orgs:delete` | n/a | Delete one or more organizations. | -| `orgs:read` | n/a | Read one or more organizations. | -| `orgs:write` | n/a | Update one or more organizations. | -| `plugins.app:access` | `plugins:*`
`plugins:id:*` | Access one or more application plugins (still enforcing the organization role) | -| `plugins:install` | n/a | Install and uninstall plugins. | -| `plugins:write` | `plugins:*`
`plugins:id:*` | Edit settings for one or more plugins. | -| `provisioning:reload` | `provisioners:*` | Reload provisioning files. To find the exact scope for specific provisioner, see [Scope definitions]({{< relref "#scope-definitions" >}}). | -| `reports:create` | n/a | Create reports. | -| `reports:write` | `reports:*`
`reports:id:*` | Update reports. | -| `reports.settings:read` | n/a | Read report settings. | -| `reports.settings:write` | n/a | Update report settings. | -| `reports:delete` | `reports:*`
`reports:id:*` | Delete reports. | -| `reports:read` | `reports:*`
`reports:id:*` | List all available reports or get a specific report. | -| `reports:send` | `reports:*`
`reports:id:*` | Send a report email. | -| `roles:delete` | `permissions:type:delegate` | Delete a custom role. | -| `roles:read` | `roles:*`
`roles:uid:*` | List roles and read a specific with its permissions. | -| `roles:write` | `permissions:type:delegate` | Create or update a custom role. | -| `roles:write` | `permissions:type:escalate` | Reset basic roles to their default permissions. | -| `server.stats:read` | n/a | Read Grafana instance statistics. | -| `server.usagestats.report:read` | n/a | View usage statistics report. | -| `serviceaccounts:write` | `serviceaccounts:*` | Create Grafana service accounts. | -| `serviceaccounts:create` | n/a | Update Grafana service accounts. | -| `serviceaccounts:delete` | `serviceaccounts:*`
`serviceaccounts:id:*` | Delete Grafana service accounts. | -| `serviceaccounts:read` | `serviceaccounts:*`
`serviceaccounts:id:*` | Read Grafana service accounts. | -| `serviceaccounts.permissions:write` | `serviceaccounts:*`
`serviceaccounts:id:*` | Update Grafana service account permissions to control who can do what with the service account. | -| `serviceaccounts.permissions:read` | `serviceaccounts:*`
`serviceaccounts:id:*` | Read Grafana service account permissions to see who can do what with the service account. | -| `settings:read` | `settings:*`
`settings:auth.saml:*`
`settings:auth.saml:enabled` (property level) | Read the [Grafana configuration settings]({{< relref "../../../../setup-grafana/configure-grafana/" >}}) | -| `settings:write` | `settings:*`
`settings:auth.saml:*`
`settings:auth.saml:enabled` (property level) | Update any Grafana configuration settings that can be [updated at runtime]({{< relref "../../../../setup-grafana/configure-grafana/settings-updates-at-runtime" >}}). | -| `support.bundles:create` | n/a | Create support bundles. | -| `support.bundles:delete` | n/a | Delete support bundles. | -| `support.bundles:read` | n/a | List and download support bundles. | -| `status:accesscontrol` | `services:accesscontrol` | Get access-control enabled status. | -| `teams.permissions:read` | `teams:*`
`teams:id:*` | Read members and Team Sync setup for teams. | -| `teams.permissions:write` | `teams:*`
`teams:id:*` | Add, remove and update members and manage Team Sync setup for teams. | -| `teams.roles:add` | `permissions:type:delegate` | Assign a role to a team. | -| `teams.roles:read` | `teams:*`
`teams:id:*` | List roles assigned directly to a team. | -| `teams.roles:remove` | `permissions:type:delegate` | Unassign a role from a team. | -| `teams:create` | n/a | Create teams. | -| `teams:delete` | `teams:*`
`teams:id:*` | Delete one or more teams. | -| `teams:read` | `teams:*`
`teams:id:*` | Read one or more teams and team preferences. | -| `teams:write` | `teams:*`
`teams:id:*` | Update one or more teams and team preferences. | -| `users.authtoken:read` | `global.users:*`
`global.users:id:*` | List authentication tokens that are assigned to a user. | -| `users.authtoken:write` | `global.users:*`
`global.users:id:*` | Update authentication tokens that are assigned to a user. | -| `users.password:write` | `global.users:*`
`global.users:id:*` | Update a user’s password. | -| `users.permissions:read` | `users:*` | List permissions of a user. | -| `users.permissions:write` | `global.users:*`
`global.users:id:*` | Update a user’s organization-level permissions. | -| `users.quotas:read` | `global.users:*`
`global.users:id:*` | List a user’s quotas. | -| `users.quotas:write` | `global.users:*`
`global.users:id:*` | Update a user’s quotas. | -| `users.roles:add` | `permissions:type:delegate` | Assign a role to a user or a service account. | -| `users.roles:read` | `users:*` | List roles assigned directly to a user or a service account. | -| `users.roles:remove` | `permissions:type:delegate` | Unassign a role from a user or a service account. | -| `users:create` | n/a | Create a user. | -| `users:delete` | `global.users:*`
`global.users:id:*` | Delete a user. | -| `users:disable` | `global.users:*`
`global.users:id:*` | Disable a user. | -| `users:enable` | `global.users:*`
`global.users:id:*` | Enable a user. | -| `users:logout` | `global.users:*`
`global.users:id:*` | Sign out a user. | -| `users:read` | `global.users:*` | Read or search user profiles. | -| `users:write` | `global.users:*`
`global.users:id:*` | Update a user’s profile. | +| Action | Applicable scope | Description | +| ------------------------------------ | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `alert.instances.external:read` | `datasources:*`
`datasources:uid:*` | Read alerts and silences in data sources that support alerting. | +| `alert.instances.external:write` | `datasources:*`
`datasources:uid:*` | Manage alerts and silences in data sources that support alerting. | +| `alert.instances:create` | n/a | Create silences in the current organization. | +| `alert.instances:read` | n/a | Read alerts and silences in the current organization. | +| `alert.instances:write` | n/a | Update and expire silences in the current organization. | +| `alert.notifications.external:read` | `datasources:*`
`datasources:uid:*` | Read templates, contact points, notification policies, and mute timings in data sources that support alerting. | +| `alert.notifications.external:write` | `datasources:*`
`datasources:uid:*` | Manage templates, contact points, notification policies, and mute timings in data sources that support alerting. | +| `alert.notifications:write` | n/a | Manage templates, contact points, notification policies, and mute timings in the current organization. | +| `alert.notifications:read` | n/a | Read all templates, contact points, notification policies, and mute timings in the current organization. | +| `alert.rules.external:read` | `datasources:*`
`datasources:uid:*` | Read alert rules in data sources that support alerting (Prometheus, Mimir, and Loki) | +| `alert.rules.external:write` | `datasources:*`
`datasources:uid:*` | Create, update, and delete alert rules in data sources that support alerting (Mimir and Loki). | +| `alert.rules:create` | `folders:*`
`folders:uid:*` | Create Grafana alert rules in a folder and its subfolders. Combine this permission with `folders:read` in a scope that includes the folder and `datasources:query` in the scope of data sources the user can query. | +| `alert.rules:delete` | `folders:*`
`folders:uid:*` | Delete Grafana alert rules in a folder and its subfolders. Combine this permission with `folders:read` in a scope that includes the folder and `datasources:query` in the scope of data sources the user can query. | +| `alert.rules:read` | `folders:*`
`folders:uid:*` | Read Grafana alert rules in a folder and its subfolders. Combine this permission with `folders:read` in a scope that includes the folder and `datasources:query` in the scope of data sources the user can query. | +| `alert.rules:write` | `folders:*`
`folders:uid:*` | Update Grafana alert rules in a folder and its subfolders. Combine this permission with `folders:read` in a scope that includes the folder and `datasources:query` in the scope of data sources the user can query. | +| `alert.provisioning:read` | n/a | Read all Grafana alert rules, notification policies, etc via provisioning API. Permissions to folders and datasource are not required. | +| `alert.provisioning.secrets:read` | n/a | Same as `alert.provisioning:read` plus ability to export resources with decrypted secrets. | +| `alert.provisioning:write` | n/a | Update all Grafana alert rules, notification policies, etc via provisioning API. Permissions to folders and datasource are not required. | +| `annotations:create` | `annotations:*`
`annotations:type:*` | Create annotations. | +| `annotations:delete` | `annotations:*`
`annotations:type:*` | Delete annotations. | +| `annotations:read` | `annotations:*`
`annotations:type:*` | Read annotations and annotation tags. | +| `annotations:write` | `annotations:*`
`annotations:type:*` | Update annotations. | +| `apikeys:create` | n/a | Create API keys. | +| `apikeys:read` | `apikeys:*`
`apikeys:id:*` | Read API keys. | +| `apikeys:delete` | `apikeys:*`
`apikeys:id:*` | Delete API keys. | +| `dashboards:create` | `folders:*`
`folders:uid:*` | Create dashboards in one or more folders and their subfolders. | +| `dashboards:delete` | `dashboards:*`
`dashboards:uid:*`
`folders:*`
`folders:uid:*` | Delete one or more dashboards. | +| `dashboards.insights:read` | n/a | Read dashboard insights data and see presence indicators. | +| `dashboards.permissions:read` | `dashboards:*`
`dashboards:uid:*`
`folders:*`
`folders:uid:*` | Read permissions for one or more dashboards. | +| `dashboards.permissions:write` | `dashboards:*`
`dashboards:uid:*`
`folders:*`
`folders:uid:*` | Update permissions for one or more dashboards. | +| `dashboards:read` | `dashboards:*`
`dashboards:uid:*`
`folders:*`
`folders:uid:*` | Read one or more dashboards. | +| `dashboards:write` | `dashboards:*`
`dashboards:uid:*`
`folders:*`
`folders:uid:*` | Update one or more dashboards. | +| `dashboards.public:write` | `dashboards:*`
`dashboards:uid:*` | Write public dashboard configuration. | +| `datasources.caching:read` | `datasources:*`
`datasources:uid:*` | Read data source query caching settings. | +| `datasources.caching:write` | `datasources:*`
`datasources:uid:*` | Update data source query caching settings. | +| `datasources:create` | n/a | Create data sources. | +| `datasources:delete` | `datasources:*`
`datasources:uid:*` | Delete data sources. | +| `datasources:explore` | n/a | Enable access to the **Explore** tab. | +| `datasources.id:read` | `datasources:*`
`datasources:uid:*` | Read data source IDs. | +| `datasources.insights:read` | n/a | Read data sources insights data. | +| `datasources.permissions:read` | `datasources:*`
`datasources:uid:*` | List data source permissions. | +| `datasources.permissions:write` | `datasources:*`
`datasources:uid:*` | Update data source permissions. | +| `datasources:query` | `datasources:*`
`datasources:uid:*` | Query data sources. | +| `datasources:read` | `datasources:*`
`datasources:uid:*` | List data sources. | +| `datasources:write` | `datasources:*`
`datasources:uid:*` | Update data sources. | +| `featuremgmt.read` | n/a | Read feature toggles. | +| `featuremgmt.write` | n/a | Write feature toggles. | +| `folders.permissions:read` | `folders:*`
`folders:uid:*` | Read permissions for one or more folders and their subfolders. | +| `folders.permissions:write` | `folders:*`
`folders:uid:*` | Update permissions for one or more folders and their subfolders. | +| `folders:create` | n/a | Create folders in the root level. If granted together with `folders:write`, also allows creating subfolders under all folders that the user can update. | +| `folders:delete` | `folders:*`
`folders:uid:*` | Delete one or more folders and their subfolders. | +| `folders:read` | `folders:*`
`folders:uid:*` | Read one or more folders and their subfolders. | +| `folders:write` | `folders:*`
`folders:uid:*` | Update one or more folders and their subfolders. If granted together with `folders:create` permission, also allows creating subfolders under these folders. | +| `ldap.config:reload` | n/a | Reload the LDAP configuration. | +| `ldap.status:read` | n/a | Verify the availability of the LDAP server or servers. | +| `ldap.user:read` | n/a | Read users via LDAP. | +| `ldap.user:sync` | n/a | Sync users via LDAP. | +| `library.panels:create` | `folders:*`
`folders:uid:*` | Create a library panel in one or more folders and their subfolders. | +| `library.panels:read` | `folders:*`
`folders:uid:*`
`library.panels:*`
`library.panels:uid:*` | Read one or more library panels. | +| `library.panels:write` | `folders:*`
`folders:uid:*`
`library.panels:*`
`library.panels:uid:*` | Update one or more library panels. | +| `library.panels:delete` | `folders:*`
`folders:uid:*`
`library.panels:*`
`library.panels:uid:*` | Delete one or more library panels. | +| `licensing.reports:read` | n/a | Get custom permission reports. | +| `licensing:delete` | n/a | Delete the license token. | +| `licensing:read` | n/a | Read licensing information. | +| `licensing:write` | n/a | Update the license token. | +| `org.users:write` | `users:*`
`users:id:*` | Update the organization role (`Viewer`, `Editor`, or `Admin`) of a user. | +| `org.users:add` | `users:*`
`users:id:*` | Add a user to an organization or invite a new user to an organization. | +| `org.users:read` | `users:*`
`users:id:*` | Get user profiles within an organization. | +| `org.users:remove` | `users:*`
`users:id:*` | Remove a user from an organization. | +| `orgs.preferences:read` | n/a | Read organization preferences. | +| `orgs.preferences:write` | n/a | Update organization preferences. | +| `orgs.quotas:read` | n/a | Read organization quotas. | +| `orgs.quotas:write` | n/a | Update organization quotas. | +| `orgs:create` | n/a | Create an organization. | +| `orgs:delete` | n/a | Delete one or more organizations. | +| `orgs:read` | n/a | Read one or more organizations. | +| `orgs:write` | n/a | Update one or more organizations. | +| `plugins.app:access` | `plugins:*`
`plugins:id:*` | Access one or more application plugins (still enforcing the organization role) | +| `plugins:install` | n/a | Install and uninstall plugins. | +| `plugins:write` | `plugins:*`
`plugins:id:*` | Edit settings for one or more plugins. | +| `provisioning:reload` | `provisioners:*` | Reload provisioning files. To find the exact scope for specific provisioner, see [Scope definitions]({{< relref "#scope-definitions" >}}). | +| `reports:create` | n/a | Create reports. | +| `reports:write` | `reports:*`
`reports:id:*` | Update reports. | +| `reports.settings:read` | n/a | Read report settings. | +| `reports.settings:write` | n/a | Update report settings. | +| `reports:delete` | `reports:*`
`reports:id:*` | Delete reports. | +| `reports:read` | `reports:*`
`reports:id:*` | List all available reports or get a specific report. | +| `reports:send` | `reports:*`
`reports:id:*` | Send a report email. | +| `roles:delete` | `permissions:type:delegate` | Delete a custom role. | +| `roles:read` | `roles:*`
`roles:uid:*` | List roles and read a specific role with its permissions. | +| `roles:write` | `permissions:type:delegate` | Create or update a custom role. | +| `roles:write` | `permissions:type:escalate` | Reset basic roles to their default permissions. | +| `server.stats:read` | n/a | Read Grafana instance statistics. | +| `server.usagestats.report:read` | n/a | View usage statistics report. | +| `serviceaccounts:write` | `serviceaccounts:*` | Create Grafana service accounts. | +| `serviceaccounts:create` | n/a | Update Grafana service accounts. | +| `serviceaccounts:delete` | `serviceaccounts:*`
`serviceaccounts:id:*` | Delete Grafana service accounts. | +| `serviceaccounts:read` | `serviceaccounts:*`
`serviceaccounts:id:*` | Read Grafana service accounts. | +| `serviceaccounts.permissions:write` | `serviceaccounts:*`
`serviceaccounts:id:*` | Update Grafana service account permissions to control who can do what with the service account. | +| `serviceaccounts.permissions:read` | `serviceaccounts:*`
`serviceaccounts:id:*` | Read Grafana service account permissions to see who can do what with the service account. | +| `settings:read` | `settings:*`
`settings:auth.saml:*`
`settings:auth.saml:enabled` (property level) | Read the [Grafana configuration settings]({{< relref "../../../../setup-grafana/configure-grafana/" >}}) | +| `settings:write` | `settings:*`
`settings:auth.saml:*`
`settings:auth.saml:enabled` (property level) | Update any Grafana configuration settings that can be [updated at runtime]({{< relref "../../../../setup-grafana/configure-grafana/settings-updates-at-runtime" >}}). | +| `support.bundles:create` | n/a | Create support bundles. | +| `support.bundles:delete` | n/a | Delete support bundles. | +| `support.bundles:read` | n/a | List and download support bundles. | +| `status:accesscontrol` | `services:accesscontrol` | Get access-control enabled status. | +| `teams.permissions:read` | `teams:*`
`teams:id:*` | Read members and Team Sync setup for teams. | +| `teams.permissions:write` | `teams:*`
`teams:id:*` | Add, remove and update members and manage Team Sync setup for teams. | +| `teams.roles:add` | `permissions:type:delegate` | Assign a role to a team. | +| `teams.roles:read` | `teams:*`
`teams:id:*` | List roles assigned directly to a team. | +| `teams.roles:remove` | `permissions:type:delegate` | Unassign a role from a team. | +| `teams:create` | n/a | Create teams. | +| `teams:delete` | `teams:*`
`teams:id:*` | Delete one or more teams. | +| `teams:read` | `teams:*`
`teams:id:*` | Read one or more teams and team preferences. To list teams through the UI one of the following permissions is required in addition to `teams:read`: `teams:write`, `teams.permissions:read` or `teams.permissions:write`. | +| `teams:write` | `teams:*`
`teams:id:*` | Update one or more teams and team preferences. | +| `users.authtoken:read` | `global.users:*`
`global.users:id:*` | List authentication tokens that are assigned to a user. | +| `users.authtoken:write` | `global.users:*`
`global.users:id:*` | Update authentication tokens that are assigned to a user. | +| `users.password:write` | `global.users:*`
`global.users:id:*` | Update a user’s password. | +| `users.permissions:read` | `users:*` | List permissions of a user. | +| `users.permissions:write` | `global.users:*`
`global.users:id:*` | Update a user’s organization-level permissions. | +| `users.quotas:read` | `global.users:*`
`global.users:id:*` | List a user’s quotas. | +| `users.quotas:write` | `global.users:*`
`global.users:id:*` | Update a user’s quotas. | +| `users.roles:add` | `permissions:type:delegate` | Assign a role to a user or a service account. | +| `users.roles:read` | `users:*` | List roles assigned directly to a user or a service account. | +| `users.roles:remove` | `permissions:type:delegate` | Unassign a role from a user or a service account. | +| `users:create` | n/a | Create a user. | +| `users:delete` | `global.users:*`
`global.users:id:*` | Delete a user. | +| `users:disable` | `global.users:*`
`global.users:id:*` | Disable a user. | +| `users:enable` | `global.users:*`
`global.users:id:*` | Enable a user. | +| `users:logout` | `global.users:*`
`global.users:id:*` | Sign out a user. | +| `users:read` | `global.users:*` | Read or search user profiles. | +| `users:write` | `global.users:*`
`global.users:id:*` | Update a user’s profile. | ### Grafana OnCall action definitions (beta) @@ -209,6 +213,7 @@ The following list contains role-based access control scopes. | `datasources:*`
`datasources:uid:*` | Restrict an action to a set of data sources. For example, `datasources:*` matches any data source, and `datasources:uid:1` matches the data source whose UID is `1`. | | `folders:*`
`folders:uid:*` | Restrict an action to a set of folders. For example, `folders:*` matches any folder, and `folders:uid:1` matches the folder whose UID is `1`. Note that permissions granted to a folder cascade down to subfolders located under it | | `global.users:*`
`global.users:id:*` | Restrict an action to a set of global users. For example, `global.users:*` matches any user and `global.users:id:1` matches the user whose ID is `1`. | +| `library.panels:*`
`library.panels:uid:*` | Restrict an action to a set of library panels. For example, `library.panels:*` matches any library panel, and `library.panel:uid:1` matches the library panel whose UID is `1`. | | `orgs:*`
`orgs:id:*` | Restrict an action to a set of organizations. For example, `orgs:*` matches any organization and `orgs:id:1` matches the organization whose ID is `1`. | | `permissions:type:delegate` | The scope is only applicable for roles associated with the Access Control itself and indicates that you can delegate your permissions only, or a subset of it, by creating a new role or making an assignment. | | `permissions:type:escalate` | The scope is required to trigger the reset of basic roles permissions. It indicates that users might acquire additional permissions they did not previously have. | diff --git a/docs/sources/administration/roles-and-permissions/access-control/rbac-fixed-basic-role-definitions/index.md b/docs/sources/administration/roles-and-permissions/access-control/rbac-fixed-basic-role-definitions/index.md index ed3aa9cd33c37..05d1235169ea5 100644 --- a/docs/sources/administration/roles-and-permissions/access-control/rbac-fixed-basic-role-definitions/index.md +++ b/docs/sources/administration/roles-and-permissions/access-control/rbac-fixed-basic-role-definitions/index.md @@ -23,13 +23,13 @@ The following tables list permissions associated with basic and fixed roles. ## Basic role assignments -| Basic role | Associated fixed roles | Description | -| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| Grafana Admin | `fixed:roles:reader`
`fixed:roles:writer`
`fixed:users:reader`
`fixed:users:writer`
`fixed:org.users:reader`
`fixed:org.users:writer`
`fixed:ldap:reader`
`fixed:ldap:writer`
`fixed:stats:reader`
`fixed:settings:reader`
`fixed:settings:writer`
`fixed:provisioning:writer`
`fixed:organization:reader`
`fixed:organization:maintainer`
`fixed:licensing:reader`
`fixed:licensing:writer`
`fixed:datasources.caching:reader`
`fixed:datasources.caching:writer`
`fixed:dashboards.insights:reader`
`fixed:datasources.insights:reader`
`fixed:plugins:maintainer`
`fixed:authentication.config:writer` | Default [Grafana server administrator]({{< relref "../../#grafana-server-administrators" >}}) assignments. | -| Admin | `fixed:reports:reader`
`fixed:reports:writer`
`fixed:datasources:reader`
`fixed:datasources:writer`
`fixed:organization:writer`
`fixed:datasources.permissions:reader`
`fixed:datasources.permissions:writer`
`fixed:teams:writer`
`fixed:dashboards:reader`
`fixed:dashboards:writer`
`fixed:dashboards.permissions:reader`
`fixed:dashboards.permissions:writer`
`fixed:dashboards.public:writer`
`fixed:folders:reader`
`fixed:folders:writer`
`fixed:folders.permissions:reader`
`fixed:folders.permissions:writer`
`fixed:alerting:writer`
`fixed:apikeys:reader`
`fixed:apikeys:writer`
`fixed:alerting.provisioning.secrets:reader`
`fixed:alerting.provisioning:writer`
`fixed:datasources.caching:reader`
`fixed:datasources.caching:writer`
`fixed:dashboards.insights:reader`
`fixed:datasources.insights:reader`
`fixed:plugins:writer` | Default [Grafana organization administrator]({{< relref "../#basic-roles" >}}) assignments. | -| Editor | `fixed:datasources:explorer`
`fixed:dashboards:creator`
`fixed:folders:creator`
`fixed:annotations:writer`
`fixed:teams:creator` if the `editors_can_admin` configuration flag is enabled
`fixed:alerting:writer`
`fixed:dashboards.insights:reader`
`fixed:datasources.insights:reader` | Default [Editor]({{< relref "../#basic-roles" >}}) assignments. | -| Viewer | `fixed:datasources:id:reader`
`fixed:organization:reader`
`fixed:annotations:reader`
`fixed:annotations.dashboard:writer`
`fixed:alerting:reader`
`fixed:plugins.app:reader`
`fixed:dashboards.insights:reader`
`fixed:datasources.insights:reader` | Default [Viewer]({{< relref "../#basic-roles" >}}) assignments. | -| No Basic Role | | Default [No Basic Role]({{< relref "../#basic-roles" >}}) | +| Basic role | Associated fixed roles | Description | +| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| Grafana Admin | `fixed:roles:reader`
`fixed:roles:writer`
`fixed:users:reader`
`fixed:users:writer`
`fixed:org.users:reader`
`fixed:org.users:writer`
`fixed:ldap:reader`
`fixed:ldap:writer`
`fixed:stats:reader`
`fixed:settings:reader`
`fixed:settings:writer`
`fixed:provisioning:writer`
`fixed:organization:reader`
`fixed:organization:maintainer`
`fixed:licensing:reader`
`fixed:licensing:writer`
`fixed:datasources.caching:reader`
`fixed:datasources.caching:writer`
`fixed:dashboards.insights:reader`
`fixed:datasources.insights:reader`
`fixed:plugins:maintainer`
`fixed:authentication.config:writer`
`fixed:library.panels:creator`
`fixed:library.panels:reader`
`fixed:library.panels:general.reader`
`fixed:library.panels:writer`
`fixed:library.panels:general.writer` | Default [Grafana server administrator]({{< relref "../../#grafana-server-administrators" >}}) assignments. | +| Admin | `fixed:reports:reader`
`fixed:reports:writer`
`fixed:datasources:reader`
`fixed:datasources:writer`
`fixed:organization:writer`
`fixed:datasources.permissions:reader`
`fixed:datasources.permissions:writer`
`fixed:teams:writer`
`fixed:dashboards:reader`
`fixed:dashboards:writer`
`fixed:dashboards.permissions:reader`
`fixed:dashboards.permissions:writer`
`fixed:dashboards.public:writer`
`fixed:folders:reader`
`fixed:folders:writer`
`fixed:folders.permissions:reader`
`fixed:folders.permissions:writer`
`fixed:alerting:writer`
`fixed:apikeys:reader`
`fixed:apikeys:writer`
`fixed:alerting.provisioning.secrets:reader`
`fixed:alerting.provisioning:writer`
`fixed:datasources.caching:reader`
`fixed:datasources.caching:writer`
`fixed:dashboards.insights:reader`
`fixed:datasources.insights:reader`
`fixed:plugins:writer`
`fixed:library.panels:creator`
`fixed:library.panels:reader`
`fixed:library.panels:general.reader`
`fixed:library.panels:writer`
`fixed:library.panels:general.writer` | Default [Grafana organization administrator]({{< relref "../#basic-roles" >}}) assignments. | +| Editor | `fixed:datasources:explorer`
`fixed:dashboards:creator`
`fixed:folders:creator`
`fixed:annotations:writer`
`fixed:teams:creator` if the `editors_can_admin` configuration flag is enabled
`fixed:alerting:writer`
`fixed:dashboards.insights:reader`
`fixed:datasources.insights:reader`
`fixed:library.panels:creator`
`fixed:library.panels:general.reader`
`fixed:library.panels:general.writer` | Default [Editor]({{< relref "../#basic-roles" >}}) assignments. | +| Viewer | `fixed:datasources.id:reader`
`fixed:organization:reader`
`fixed:annotations:reader`
`fixed:annotations.dashboard:writer`
`fixed:alerting:reader`
`fixed:plugins.app:reader`
`fixed:dashboards.insights:reader`
`fixed:datasources.insights:reader`
`fixed:library.panels:general.reader` | Default [Viewer]({{< relref "../#basic-roles" >}}) assignments. | +| No Basic Role | | Default [No Basic Role]({{< relref "../#basic-roles" >}}) | ## Fixed role definitions @@ -61,7 +61,7 @@ The following tables list permissions associated with basic and fixed roles. | `fixed:datasources.caching:reader` | `datasources.caching:read` | Read data source query caching settings. | | `fixed:datasources.caching:writer` | `datasources.caching:read`
`datasources.caching:write` | Enable, disable, or update query caching settings. | | `fixed:datasources:explorer` | `datasources:explore` | Enable the Explore feature. Data source permissions still apply, you can only query data sources for which you have query permissions. | -| `fixed:datasources:id:reader` | `datasources.id:read` | Read the ID of a data source based on its name. | +| `fixed:datasources.id:reader` | `datasources.id:read` | Read the ID of a data source based on its name. | | `fixed:datasources.insights:reader` | `datasources.insights:read` | Read data source insights data. | | `fixed:datasources.permissions:reader` | `datasources.permissions:read` | Read data source permissions. | | `fixed:datasources.permissions:writer` | All permissions from `fixed:datasources.permissions:reader` and
`datasources.permissions:write` | Create, read, or delete permissions of a data source. | @@ -75,6 +75,11 @@ The following tables list permissions associated with basic and fixed roles. | `fixed:folders:writer` | All permissions from `fixed:dashboards:writer` and
`folders:read`
`folders:write`
`folders:create`
`folders:delete`
`folders.permissions:read`
`folders.permissions:write` | Read, create, update, and delete all folders and dashboards. If granted together with `fixed:folders:creator`, allows creating subfolders under all folders. | | `fixed:ldap:reader` | `ldap.user:read`
`ldap.status:read` | Read the LDAP configuration and LDAP status information. | | `fixed:ldap:writer` | All permissions from `fixed:ldap:reader` and
`ldap.user:sync`
`ldap.config:reload` | Read and update the LDAP configuration, and read LDAP status information. | +| `fixed:library.panels:creator` | `library.panels:create`
`folders:read` | Create library panel at the root level. | +| `fixed:library.panels:reader` | `library.panels:read` | Read all library panels. | +| `fixed:library.panels:general.reader` | `library.panels:read` | Read all library panels at the root level. | +| `fixed:library.panels:writer` | All permissions from `fixed:library.panels:reader` plus
`library.panels:create`
`library.panels:delete`
`library.panels:write` | Create, read, write or delete all library panels and their permissions. | +| `fixed:library.panels:general.writer` | All permissions from `fixed:library.panels:general.reader` plus
`library.panels:create`
`library.panels:delete`
`library.panels:write` | Create, read, write or delete all library panels and their permissions at the root level. | | `fixed:licensing:reader` | `licensing:read`
`licensing.reports:read` | Read licensing information and licensing reports. | | `fixed:licensing:writer` | All permissions from `fixed:licensing:viewer` and
`licensing:write`
`licensing:delete` | Read licensing information and licensing reports, update and delete the license token. | | `fixed:org.users:reader` | `org.users:read` | Read users within a single organization. | @@ -105,7 +110,7 @@ The following tables list permissions associated with basic and fixed roles. ### Alerting roles -If alerting is [enabled]({{< relref "../../../../alerting/set-up/migrating-alerts" >}}), you can use predefined roles to manage user access to alert rules, alert instances, and alert notification settings and create custom roles to limit user access to alert rules in a folder. +You can use predefined roles to manage user access to alert rules, alert instances, and alert notification settings and create custom roles to limit user access to alert rules in a folder. Access to Grafana alert rules is an intersection of many permissions: @@ -128,37 +133,7 @@ You can enable feature toggles through configuration file or environment variabl {{% /admonition %}} If you are using [Grafana OnCall](https://grafana.com/docs/oncall/latest/get-started/), you can try out the integration between Grafana OnCall and RBAC. -This will allow you to control access to different OnCall features using the following RBAC roles: - -| Fixed role | Permissions | Description | -| --------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `plugins:grafana-oncall-app:reader` | `plugins.app:access`
`grafana-oncall-app.alert-groups:read`
`grafana-oncall-app.integrations:read`
`grafana-oncall-app.escalation-chains:read`
`grafana-oncall-app.schedules:read`
`grafana-oncall-app.chatops:read`
`grafana-oncall-app.outgoing-webhooks:read`
`grafana-oncall-app.maintenance:read`
`grafana-oncall-app.notification-settings:read`
`grafana-oncall-app.user-settings:read`
`grafana-oncall-app.other-settings:read` | Read everything in OnCall. | -| `plugins:grafana-oncall-app:oncaller` | All permissions from `plugins:grafana-oncall-app:reader` and `grafana-oncall-app.alert-groups:write`
`grafana-oncall-app.schedules:write` | Read everything in OnCall and edit alert groups and schedules. | -| `plugins:grafana-oncall-app:editor` | All permissions from `plugins:grafana-oncall-app:oncaller` and `grafana-oncall-app.notifications:read`
`grafana-oncall-app.integrations:test`
`grafana-oncall-app.schedules:export`
`grafana-oncall-app.chatops:write`
`grafana-oncall-app.maintenance:write`
`grafana-oncall-app.notification-settings:write`
`grafana-oncall-app.user-settings:write` | Read everything in OnCall and edit alert groups, schedules, ChatOps, maintenance, notification settings, and user's own settings. | -| `plugins:grafana-oncall-app:admin` | All permissions from `plugins:grafana-oncall-app:editor` and `grafana-oncall-app.integrations:write`
`grafana-oncall-app.escalation-chains:write`
`grafana-oncall-app.chatops:update-settings:write`
`grafana-oncall-app.outgoing-webhooks:write`
`grafana-oncall-app.api-keys:write`
`grafana-oncall-app.user-settings:admin`
`grafana-oncall-app.other-settings:write` | Read and edit everything in OnCall. | -| `plugins:grafana-oncall-app:alert-groups-reader` | `plugins.app:access`
`grafana-oncall-app.alert-groups:read` | Read OnCall alert groups. | -| `plugins:grafana-oncall-app:alert-groups-editor` | `plugins.app:access`
`grafana-oncall-app.alert-groups:read`
`grafana-oncall-app.alert-groups:write` | Create, read, update and delete OnCall alert groups. | -| `plugins:grafana-oncall-app:integrations-reader` | `plugins.app:access`
`grafana-oncall-app.integrations:read` | Read OnCall integrations. | -| `plugins:grafana-oncall-app:integrations-editor` | `plugins.app:access`
`grafana-oncall-app.integrations:read`
`grafana-oncall-app.integrations:write`
`grafana-oncall-app.integrations:test` | Create, read, update and delete OnCall integrations. | -| `plugins:grafana-oncall-app:escalation-chains-reader` | `plugins.app:access`
`grafana-oncall-app.escalation-chains:read` | Read OnCall escalation chains. | -| `plugins:grafana-oncall-app:escalation-chains-editor` | `plugins.app:access`
`grafana-oncall-app.escalation-chains:read`
`grafana-oncall-app.escalation-chains:write` | Create, read, update and delete OnCall escalation chains. | -| `plugins:grafana-oncall-app:schedules-reader` | `plugins.app:access`
`grafana-oncall-app.schedules:read` | Read OnCall schedules. | -| `plugins:grafana-oncall-app:schedules-editor` | `plugins.app:access`
`grafana-oncall-app.schedules:read`
`grafana-oncall-app.schedules:write`
`grafana-oncall-app.schedules:export` | Create, read, update and delete OnCall schedules. | -| `plugins:grafana-oncall-app:chatops-reader` | `plugins.app:access`
`grafana-oncall-app.chatops:read` | Read OnCall ChatOps. | -| `plugins:grafana-oncall-app:chatops-editor` | `plugins.app:access`
`grafana-oncall-app.chatops:read`
`grafana-oncall-app.chatops:write`
`grafana-oncall-app.chatops:update-settings` | Read and update OnCall ChatOps. | -| `plugins:grafana-oncall-app:outgoing-webhooks-reader` | `plugins.app:access`
`grafana-oncall-app.outgoing-webhooks:read` | Read OnCall outgoing webhooks. | -| `plugins:grafana-oncall-app:outgoing-webhooks-editor` | `plugins.app:access`
`grafana-oncall-app.outgoing-webhooks:read`
`grafana-oncall-app.outgoing-webhooks:write` | Create, read, update and delete OnCall outgoing webhooks. | -| `plugins:grafana-oncall-app:maintenance-reader` | `plugins.app:access`
`grafana-oncall-app.maintenance:read` | Read OnCall maintenance. | -| `plugins:grafana-oncall-app:maintenance-editor` | `plugins.app:access`
`grafana-oncall-app.maintenance:read`
`grafana-oncall-app.maintenance:write` | Read and update OnCall maintenance. | -| `plugins:grafana-oncall-app:api-keys-reader` | `plugins.app:access`
`grafana-oncall-app.api-keys:read` | Read OnCall API keys. | -| `plugins:grafana-oncall-app:api-keys-editor` | `plugins.app:access`
`grafana-oncall-app.api-keys:read`
`grafana-oncall-app.api-keys:write` | Create, read, update and delete OnCall API keys. Also grants access to be able to consume the OnCall API. | -| `plugins:grafana-oncall-app:notification-settings-reader` | `plugins.app:access`
`grafana-oncall-app.notification-settings:read` | Read OnCall notification settings. | -| `plugins:grafana-oncall-app:notification-settings-editor` | `plugins.app:access`
`grafana-oncall-app.notification-settings:read`
`grafana-oncall-app.notification-settings:write` | Read and update OnCall notification settings. | -| `plugins:grafana-oncall-app:user-settings-reader` | `plugins.app:access`
`grafana-oncall-app.user-settings:read` | Read user's own OnCall user settings. | -| `plugins:grafana-oncall-app:user-settings-editor` | `plugins.app:access`
`grafana-oncall-app.user-settings:read`
`grafana-oncall-app.user-settings:write` | Read and update user's own OnCall user settings. | -| `plugins:grafana-oncall-app:user-settings-admin` | `plugins.app:access`
`grafana-oncall-app.user-settings:read`
`grafana-oncall-app.user-settings:write`
`grafana-oncall-app.user-settings:admin` | Read and update OnCall user settings for all users. | -| `plugins:grafana-oncall-app:settings-reader` | `plugins.app:access`
`grafana-oncall-app.other-settings:read` | Read OnCall settings. | -| `plugins:grafana-oncall-app:settings-editor` | `plugins.app:access`
`grafana-oncall-app.other-settings:read`
`grafana-oncall-app.other-settings:write` | Read and update OnCall settings. | +For a detailed list of the available OnCall RBAC roles, refer to the table in [Available Grafana OnCall RBAC roles and granted actions](https://grafana.com/docs/oncall/latest/user-and-team-management/#available-grafana-oncall-rbac-roles--granted-actions). The following table lists the default RBAC OnCall role assignments to the basic roles: diff --git a/docs/sources/administration/service-accounts/index.md b/docs/sources/administration/service-accounts/index.md index b22b4b440d259..4c3e71f63f3cf 100644 --- a/docs/sources/administration/service-accounts/index.md +++ b/docs/sources/administration/service-accounts/index.md @@ -22,7 +22,7 @@ weight: 800 You can use a service account to run automated workloads in Grafana, such as dashboard provisioning, configuration, or report generation. Create service accounts and tokens to authenticate applications, such as Terraform, with the Grafana API. {{% admonition type="note" %}} -Service accounts will eventually replace [API keys]({{< relref "../api-keys/" >}}) as the primary way to authenticate applications that interact with Grafana. +Service accounts replace [API keys]({{< relref "../api-keys/" >}}) as the primary way to authenticate applications that interact with Grafana. {{% /admonition %}} A common use case for creating a service account is to perform operations on automated or triggered tasks. You can use service accounts to: diff --git a/docs/sources/alerting/_index.md b/docs/sources/alerting/_index.md index b51a15f8ddb0f..0d341c0afe53d 100644 --- a/docs/sources/alerting/_index.md +++ b/docs/sources/alerting/_index.md @@ -1,8 +1,8 @@ --- aliases: - - about-alerting/ - - ./unified-alerting/alerting/ - - ./alerting/unified-alerting/ + - about-alerting/ # /docs/grafana//about-alerting + - ./unified-alerting/alerting/ # /docs/grafana//unified-alerting/alerting/ + - ./alerting/unified-alerting/ # /docs/grafana//alerting/unified-alerting/ canonical: https://grafana.com/docs/grafana/latest/alerting/ description: Learn about the key benefits and features of Grafana Alerting labels: @@ -10,91 +10,57 @@ labels: - cloud - enterprise - oss -title: Alerting +menuTitle: Alerting +title: Grafana Alerting weight: 114 +hero: + title: Grafana Alerting + level: 1 + image: /media/docs/grafana-cloud/alerting-and-irm/grafana-icon-alerting.svg + width: 100 + height: 100 + description: Grafana Alerting allows you to learn about problems in your systems moments after they occur. +cards: + title_class: pt-0 lh-1 + items: + - title: Introduction + href: ./fundamentals/ + description: Learn more about the fundamentals and available features that help you create, manage, and respond to alerts; and improve your team’s ability to resolve issues quickly. + height: 24 + - title: Set up + href: ./set-up/ + description: Set up your implementation of Grafana Alerting. + height: 24 + - title: Configure alert rules + href: ./alerting-rules/ + description: Create, manage, view, and adjust alert rules to alert on your metrics data or log entries from multiple data sources — no matter where your data is stored. + height: 24 + - title: Configure notifications + href: ./configure-notifications/ + description: Choose how, when, and where to send your alert notifications. + height: 24 + - title: Detect and respond + href: ./manage-notifications/ + description: Monitor, respond to, and triage issues within your services. + height: 24 + - title: Monitor + href: ./monitor/ + description: Monitor your alerting metrics to ensure you identify potential issues before they become critical. + height: 24 --- -# Alerting +{{< docs/hero-simple key="hero" >}} -Grafana Alerting allows you to learn about problems in your systems moments after they occur. +--- + +## Overview -Monitor your incoming metrics data or log entries and set up your Alerting system to watch for specific events or circumstances and then send notifications when those things are found. +Monitor your incoming metrics data or log entries and set up your Grafana Alerting system to watch for specific events or circumstances. In this way, you eliminate the need for manual monitoring and provide a first line of defense against system outages or changes that could turn into major incidents. Using Grafana Alerting, you create queries and expressions from multiple data sources — no matter where your data is stored — giving you the flexibility to combine your data and alert on your metrics and logs in new and unique ways. You can then create, manage, and take action on your alerts from a single, consolidated view, and improve your team’s ability to identify and resolve issues quickly. -Grafana Alerting is available for Grafana OSS, Grafana Enterprise, or Grafana Cloud. With Mimir and Loki alert rules you can run alert expressions closer to your data and at massive scale, all managed by the Grafana UI you are already familiar with. - -Watch this video to learn more about Grafana Alerting: {{< vimeo 720001629 >}} - -_Refer to [Manage your alert rules][alerting-rules] for current instructions._ - -## Key features and benefits - -**One page for all alerts** - -A single Grafana Alerting page consolidates both Grafana-managed alerts and alerts that reside in your Prometheus-compatible data source in one single place. - -**Multi-dimensional alerts** - -Alert rules can create multiple individual alert instances per alert rule, known as multi-dimensional alerts, giving you the power and flexibility to gain visibility into your entire system with just a single alert rule. You do this by adding labels to your query to specify which component is being monitored and generate multiple alert instances for a single alert rule. For example, if you want to monitor each server in a cluster, a multi-dimensional alert will alert on each CPU, whereas a standard alert will alert on the overall server. - -**Route alerts** - -Route each alert instance to a specific contact point based on labels you define. Notification policies are the set of rules for where, when, and how the alerts are routed to contact points. - -**Silence alerts** - -Silences stop notifications from getting created and last for only a specified window of time. -Silences allow you to stop receiving persistent notifications from one or more alert rules. You can also partially pause an alert based on certain criteria. Silences have their own dedicated section for better organization and visibility, so that you can scan your paused alert rules without cluttering the main alerting view. - -**Mute timings** - -A mute timing is a recurring interval of time when no new notifications for a policy are generated or sent. Use them to prevent alerts from firing a specific and reoccurring period, for example, a regular maintenance period. - -Similar to silences, mute timings do not prevent alert rules from being evaluated, nor do they stop alert instances from being shown in the user interface. They only prevent notifications from being created. - -## Design your Alerting system - -Monitoring complex IT systems and understanding whether everything is up and running correctly is a difficult task. Setting up an effective alert management system is therefore essential to inform you when things are going wrong before they start to impact your business outcomes. - -Designing and configuring an alert management set up that works takes time. - -Here are some tips on how to create an effective alert management set up for your business: - -**Which are the key metrics for your business that you want to monitor and alert on?** - -- Find events that are important to know about and not so trivial or frequent that recipients ignore them. - -- Alerts should only be created for big events that require immediate attention or intervention. - -- Consider quality over quantity. - -**Which type of Alerting do you want to use?** - -- Choose between Grafana-managed Alerting or Grafana Mimir or Loki-managed Alerting; or both. - -**How do you want to organize your alerts and notifications?** - -- Be selective about who you set to receive alerts. Consider sending them to whoever is on call or a specific Slack channel. -- Automate as far as possible using the Alerting API or alerts as code (Terraform). - -**How can you reduce alert fatigue?** - -- Avoid noisy, unnecessary alerts by using silences, mute timings, or pausing alert rule evaluation. -- Continually tune your alert rules to review effectiveness. Remove alert rules to avoid duplication or ineffective alerts. -- Think carefully about priority and severity levels. -- Continually review your thresholds and evaluation rules. - -## Useful links - -- [Introduction to Alerting][fundamentals] - -{{% docs/reference %}} -[alerting-rules]: "/docs/grafana/ -> /docs/grafana//alerting/alerting-rules" -[alerting-rules]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/alerting-rules" +## Explore -[fundamentals]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals" -[fundamentals]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals" -{{% /docs/reference %}} +{{< card-grid key="cards" type="simple" >}} diff --git a/docs/sources/alerting/alerting-rules/_index.md b/docs/sources/alerting/alerting-rules/_index.md index ac9a03150f5a7..d4ab108d9e1e6 100644 --- a/docs/sources/alerting/alerting-rules/_index.md +++ b/docs/sources/alerting/alerting-rules/_index.md @@ -1,58 +1,48 @@ --- aliases: - - old-alerting/create-alerts/ - - rules/ - - unified-alerting/alerting-rules/ - - ./create-alerts/ + - rules/ # /docs/grafana//alerting/rules/ + - unified-alerting/alerting-rules/ # /docs/grafana//alerting/unified-alerting/alerting-rules/ + - ./create-alerts/ # /docs/grafana//alerting/create-alerts/ canonical: https://grafana.com/docs/grafana/latest/alerting/alerting-rules/ -description: Configure the features and integrations you need to create and manage your alerts +description: Configure alert rules labels: products: - cloud - enterprise - oss -menuTitle: Configure -title: Configure Alerting +title: Configure alert rules weight: 120 --- -# Configure Alerting +# Configure alert rules -Configure the features and integrations that you need to create and manage your alerts. +An alert rule consists of one or more queries and expressions that select the data you want to measure. It also contains a condition, which is the threshold that an alert rule must meet or exceed in order to fire. -**Configure alert rules** +Create, manage, view, and adjust alert rules to alert on your metrics data or log entries from multiple data sources — no matter where your data is stored. -[Configure Grafana-managed alert rules][create-grafana-managed-rule]. +The main parts of alert rule creation are: -[Configure data source-managed alert rules][create-mimir-loki-managed-rule] +1. Select your data source +1. Query your data +1. Normalize your data +1. Set your threshold -**Configure recording rules** +**Query, expressions, and alert condition** -_Recording rules are only available for compatible Prometheus or Loki data sources._ +What are you monitoring? How are you measuring it? -For more information, see [Configure recording rules][create-mimir-loki-managed-recording-rule]. +{{< admonition type="note" >}} +Expressions can only be used for Grafana-managed alert rules. +{{< /admonition >}} -**Configure contact points** +**Evaluation** -For information on how to configure contact points, see [Configure contact points][manage-contact-points]. +How do you want your alert to be evaluated? -**Configure notification policies** +**Labels and notifications** -For information on how to configure notification policies, see [Configure notification policies][create-notification-policy]. +How do you want to route your alert? What kind of additional labels could you add to annotate your alert rules and ease searching? -{{% docs/reference %}} -[create-mimir-loki-managed-rule]: "/docs/grafana/ -> /docs/grafana//alerting/alerting-rules/create-mimir-loki-managed-rule" -[create-mimir-loki-managed-rule]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/alerting-rules/create-mimir-loki-managed-rule" +**Annotations** -[create-mimir-loki-managed-recording-rule]: "/docs/grafana/ -> /docs/grafana//alerting/alerting-rules/create-mimir-loki-managed-recording-rule" -[create-mimir-loki-managed-recording-rule]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/alerting-rules/create-mimir-loki-managed-recording-rule" - -[create-grafana-managed-rule]: "/docs/grafana/ -> /docs/grafana//alerting/alerting-rules/create-grafana-managed-rule" -[create-grafana-managed-rule]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/alerting-rules/create-grafana-managed-rule" - -[manage-contact-points]: "/docs/grafana/ -> /docs/grafana//alerting/alerting-rules/manage-contact-points" -[manage-contact-points]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/alerting-rules/manage-contact-points" - -[create-notification-policy]: "/docs/grafana/ -> /docs/grafana//alerting/alerting-rules/create-notification-policy" -[create-notification-policy]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/alerting-rules/create-notification-policy" -{{% /docs/reference %}} +Do you want to add more context on the alert in your notification messages, for example, what caused the alert to fire? Which server did it happen on? diff --git a/docs/sources/alerting/alerting-rules/create-grafana-managed-rule.md b/docs/sources/alerting/alerting-rules/create-grafana-managed-rule.md index c320b76bb37b1..d5712ba87e41b 100644 --- a/docs/sources/alerting/alerting-rules/create-grafana-managed-rule.md +++ b/docs/sources/alerting/alerting-rules/create-grafana-managed-rule.md @@ -1,6 +1,6 @@ --- aliases: - - ../unified-alerting/alerting-rules/create-grafana-managed-rule/ + - ../unified-alerting/alerting-rules/create-grafana-managed-rule/ # /docs/grafana//alerting/unified-alerting/alerting-rules/create-grafana-managed-rule/ canonical: https://grafana.com/docs/grafana/latest/alerting/alerting-rules/create-grafana-managed-rule/ description: Configure Grafana-managed alert rules to create alerts that can act on data from any of our supported data sources keywords: @@ -38,8 +38,6 @@ Grafana managed alert rules can only be edited or deleted by users with Edit per If you delete an alerting resource created in the UI, you can no longer retrieve it. To make a backup of your configuration and to be able to restore deleted alerting resources, create your alerting resources using file provisioning, Terraform, or the Alerting API. -Watch this video to learn more about creating alert rules: {{< vimeo 720001934 >}} - In the following sections, we’ll guide you through the process of creating your Grafana-managed alert rules. To create a Grafana-managed alert rule, use the in-product alert creation flow and follow these steps to help you. @@ -71,6 +69,7 @@ Define a query to get the data you want to measure and a condition that needs to All alert rules are managed by Grafana by default. If you want to switch to a data source-managed alert rule, click **Switch to data source-managed alert rule**. 1. Add one or more [expressions][expression-queries]. + a. For each expression, select either **Classic condition** to create a single alert rule, or choose from the **Math**, **Reduce**, and **Resample** options to generate separate alert for each series. {{% admonition type="note" %}} @@ -79,6 +78,10 @@ Define a query to get the data you want to measure and a condition that needs to b. Click **Preview** to verify that the expression is successful. +1. To add a recovery threshold, turn the **Custom recovery threshold** toggle on and fill in a value for when your alert rule should stop firing. + + You can only add one recovery threshold in a query and it must be the alert condition. + 1. Click **Set as alert condition** on the query or expression you want to set as your alert condition. ## Set alert evaluation behavior @@ -102,56 +105,109 @@ To do this, you need to make sure that your alert rule is in the right evaluatio 1. Turn on pause alert notifications, if required. - **Note**: - - Pause alert rule evaluation to prevent noisy alerting while tuning your alerts. Pausing stops alert rule evaluation and does not create any alert instances. This is different to mute timings, which stop notifications from being delivered, but still allow for alert rule evaluation and the creation of alert instances. - - You can pause alert rule evaluation to prevent noisy alerting while tuning your alerts. Pausing stops alert rule evaluation and does not create any alert instances. This is different to mute timings, which stop notifications from being delivered, but still allow for alert rule evaluation and the creation of alert instances. + {{< admonition type="note" >}} + You can pause alert rule evaluation to prevent noisy alerting while tuning your alerts. + Pausing stops alert rule evaluation and doesn't create any alert instances. + This is different to mute timings, which stop notifications from being delivered, but still allows for alert rule evaluation and the creation of alert instances. + {{< /admonition >}} 1. In **Configure no data and error handling**, configure alerting behavior in the absence of data. Use the guidelines in [No data and error handling](#configure-no-data-and-error-handling). -## Add annotations +## Configure notifications -Add [annotations][annotation-label]. to provide more context on the alert in your alert notifications. +{{< admonition type="note" >}} +To try out a simplified version of routing your alerts, enable the alertingSimplifiedRouting feature toggle and refer to the following section Configure notifications (simplified). +{{< /admonition >}} -Annotations add metadata to provide more information on the alert in your alert notifications. For example, add a **Summary** annotation to tell you which value caused the alert to fire or which server it happened on. +1. Add labels to your alert rules to set which notification policy should handle your firing alert instances. -1. [Optional] Add a summary. + All alert rules and instances, irrespective of their labels, match the default notification policy. If there are no nested policies, or no nested policies match the labels in the alert rule or alert instance, then the default notification policy is the matching policy. - Short summary of what happened and why. + Add labels if you want to change the way your notifications are routed. -2. [Optional] Add a description. + Add custom labels by selecting existing key-value pairs from the drop down, or add new labels by entering the new key or value. - Description of what the alert rule does. +1. Preview your alert instance routing set up. -3. [Optional] Add a Runbook URL. + Based on the labels added, alert instances are routed to the following notification policies displayed. - Webpage where you keep your runbook for the alert + Expand each notification policy below to view more details. -4. [Optional] Add a custom annotation -5. [Optional] Add a dashboard and panel link. +1. Click See details to view alert routing details and an email preview. - Links alerts to panels in a dashboard. +1. Click **Save rule**. -## Configure notifications +## Configure notifications (simplified) + +{{< admonition type="note" >}} +To try this out, enable the alertingSimplifiedRouting feature toggle. -Add labels to your alert rules to set which notification policy should handle your firing alert instances. +This feature is currently not available for Grafana Cloud. +{{< /admonition >}} -All alert rules and instances, irrespective of their labels, match the default notification policy. If there are no nested policies, or no nested policies match the labels in the alert rule or alert instance, then the default notification policy is the matching policy. +In the **Labels** section, you can optionally choose whether to add labels to organize your alert rules, make searching easier, as well as set which notification policy should handle your firing alert instance. -1. Add labels if you want to change the way your notifications are routed. +In the **Configure notifications** section, you can choose to select a contact point directly from the alert rule form or choose to use notification policy routing as well as set up mute timings and groupings. + +Complete the following steps to set up labels and notifications. + +1. Add labels, if required. Add custom labels by selecting existing key-value pairs from the drop down, or add new labels by entering the new key or value. -1. Preview your alert instance routing set up. +2. Configure who receives a notification when an alert rule fires by either choosing **Select contact point** or **Use notification policy**. - Based on the labels added, alert instances are routed to the following notification policies displayed. + **Select contact point** - Expand each notification policy below to view more details. + 1. Choose this option to select an existing contact point. + + All notifications for this alert rule are sent to this contact point automatically and notification policies are not used. -1. Click **See details** to view alert routing details and an email preview. + 2. You can also optionally select a mute timing as well as groupings and timings to define when not to send notifications. + + {{< admonition type="note" >}} + An auto-generated notification policy is generated. Only admins can view these auto-generated policies from the **Notification policies** list view. Any changes have to be made in the alert rules form. {{< /admonition >}} + + **Use notification policy** + + 3. Choose this option to use the notification policy tree to direct your notifications. + + {{< admonition type="note" >}} + All alert rules and instances, irrespective of their labels, match the default notification policy. If there are no nested policies, or no nested policies match the labels in the alert rule or alert instance, then the default notification policy is the matching policy. + {{< /admonition >}} + + 4. Preview your alert instance routing set up. + + Based on the labels added, alert instances are routed to the following notification policies displayed. + + 5. Expand each notification policy below to view more details. + + 6. Click **See details** to view alert routing details and an email preview. + +## Add annotations + +Add [annotations][annotation-label]. to provide more context on the alert in your alert notification message. + +Annotations add metadata to provide more information on the alert in your alert notification message. For example, add a **Summary** annotation to tell you which value caused the alert to fire or which server it happened on. + +1. [Optional] Add a summary. + + Short summary of what happened and why. + +1. [Optional] Add a description. + + Description of what the alert rule does. + +1. [Optional] Add a Runbook URL. + + Webpage where you keep your runbook for the alert + +1. [Optional] Add a custom annotation +1. [Optional] Add a dashboard and panel link. + + Links alerts to panels in a dashboard. 1. Click **Save rule**. @@ -169,7 +225,7 @@ For more information, see [expressions documentation][expression-queries]. To generate a separate alert for each series, create a multi-dimensional rule. Use `Math`, `Reduce`, or `Resample` expressions to create a multi-dimensional rule. For example: -- Add a `Reduce` expression for each query to aggregate values in the selected time range into a single value. (Not needed for [rules using numeric data][alerting-on-numeric-data]. +- Add a `Reduce` expression for each query to aggregate values in the selected time range into a single value. (Not needed for [rules using numeric data][alerting-on-numeric-data]). - Add a `Math` expression with the condition for the rule. Not needed in case a query or a reduce expression already returns 0 if rule should not fire, or a positive number if it should fire. Some examples: `$B > 70` if it should fire in case value of B query/expression is more than 70. `$B < $C * 100` in case it should fire if value of B is less than value of C multiplied by 100. If queries being compared have multiple series in their results, series from different queries are matched if they have the same labels or one is a subset of the other. ![Query section multi dimensional](/static/img/docs/alerting/unified/rule-edit-multi-8-0.png 'Query section multi dimensional screenshot') @@ -215,21 +271,21 @@ Create alerts from any panel type. This means you can reuse the queries in the p This will open the alert rule form, allowing you to configure and create your alert based on the current panel's query. {{% docs/reference %}} -[add-a-query]: "/docs/grafana/ -> /docs/grafana//panels-visualizations/query-transform-data#add-a-query" -[add-a-query]: "/docs/grafana-cloud/ -> /docs/grafana//panels-visualizations/query-transform-data#add-a-query" +[add-a-query]: "/docs/grafana/ -> /docs/grafana//panels-visualizations/query-transform-data#add-a-query" +[add-a-query]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/panels-visualizations/query-transform-data#add-a-query" -[alerting-on-numeric-data]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/evaluate-grafana-alerts#alerting-on-numeric-data-1" -[alerting-on-numeric-data]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/evaluate-grafana-alerts#alerting-on-numeric-data-1" +[alerting-on-numeric-data]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/alert-rules/queries-conditions#alert-on-numeric-data" +[alerting-on-numeric-data]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alert-rules/queries-conditions#alert-on-numeric-data" -[annotation-label]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/annotation-label" -[annotation-label]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/annotation-label" +[annotation-label]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/alert-rules/annotation-label" +[annotation-label]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alert-rules/annotation-label" -[expression-queries]: "/docs/grafana/ -> /docs/grafana//panels-visualizations/query-transform-data/expression-queries" -[expression-queries]: "/docs/grafana-cloud/ -> /docs/grafana//panels-visualizations/query-transform-data/expression-queries" +[expression-queries]: "/docs/grafana/ -> /docs/grafana//panels-visualizations/query-transform-data/expression-queries" +[expression-queries]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/panels-visualizations/query-transform-data/expression-queries" -[fundamentals]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals" +[fundamentals]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals" [fundamentals]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals" -[time-units-and-relative-ranges]: "/docs/grafana/ -> /docs/grafana//dashboards/use-dashboards#time-units-and-relative-ranges" -[time-units-and-relative-ranges]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/use-dashboards#time-units-and-relative-ranges" +[time-units-and-relative-ranges]: "/docs/grafana/ -> /docs/grafana//dashboards/use-dashboards#time-units-and-relative-ranges" +[time-units-and-relative-ranges]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/use-dashboards#time-units-and-relative-ranges" {{% /docs/reference %}} diff --git a/docs/sources/alerting/alerting-rules/create-mimir-loki-managed-recording-rule.md b/docs/sources/alerting/alerting-rules/create-mimir-loki-managed-recording-rule.md index 77d206f8e61ea..494f92edda015 100644 --- a/docs/sources/alerting/alerting-rules/create-mimir-loki-managed-recording-rule.md +++ b/docs/sources/alerting/alerting-rules/create-mimir-loki-managed-recording-rule.md @@ -1,9 +1,9 @@ --- aliases: - - ../unified-alerting/alerting-rules/create-cortex-loki-managed-recording-rule/ - - ../unified-alerting/alerting-rules/create-mimir-loki-managed-recording-rule/ + - ../unified-alerting/alerting-rules/create-cortex-loki-managed-recording-rule/ # /docs/grafana//alerting/unified-alerting/alerting-rules/create-cortex-loki-managed-recording-rule/ + - ../unified-alerting/alerting-rules/create-mimir-loki-managed-recording-rule/ # /docs/grafana//alerting/unified-alerting/alerting-rules/create-mimir-loki-managed-recording-rule/ canonical: https://grafana.com/docs/grafana/latest/alerting/alerting-rules/create-mimir-loki-managed-recording-rule/ -description: Configure recording rules for an external Grafana Mimir or Loki instance +description: Create recording rules for an external Grafana Mimir or Loki instance keywords: - grafana - alerting @@ -16,13 +16,16 @@ labels: - cloud - enterprise - oss -title: Configure recording rules +title: Create recording rules weight: 300 --- -# Configure recording rules +# Create recording rules -You can create and manage recording rules for an external Grafana Mimir or Loki instance. Recording rules calculate frequently needed expressions or computationally expensive expressions in advance and save the result as a new set of time series. Querying this new time series is faster, especially for dashboards since they query the same expression every time the dashboards refresh. +You can create and manage recording rules for an external Grafana Mimir or Loki instance. +Recording rules calculate frequently needed expressions or computationally expensive expressions in advance and save the result as a new set of time series. Querying this new time series is faster, especially for dashboards since they query the same expression every time the dashboards refresh. + +For more information on recording rules in Prometheus, refer to [Defining recording rules in Prometheus](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/). **Note:** @@ -48,13 +51,14 @@ To create recording rules, follow these steps. 1. Click **Alerts & IRM** -> **Alerting** -> **Alert rules**. -1. Click the **More** dropdown and then **New recording rule**. +1. Select **Rule type** -> **Recording**. +1. Click **+New recording rule**. -1. Set rule name. +1. Enter recording rule name. The recording rule name must be a Prometheus metric name and contain no whitespace. -1. Define query. +1. Define recording rule. - Select your Loki or Prometheus data source. - Enter a query. 1. Add namespace and group. @@ -65,9 +69,8 @@ To create recording rules, follow these steps. 1. Click **Save rule** to save the rule or **Save rule and exit** to save the rule and go back to the Alerting page. {{% docs/reference %}} -[annotation-label]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/annotation-label" -[annotation-label]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/annotation-label" +[annotation-label]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/alert-rules/annotation-label" +[annotation-label]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alert-rules/annotation-label" -[configure-grafana]: "/docs/grafana/ -> /docs/grafana//setup-grafana/configure-grafana" -[configure-grafana]: "/docs/grafana-cloud/ -> /docs/grafana//setup-grafana/configure-grafana" +[configure-grafana]: "/docs/ -> /docs/grafana//setup-grafana/configure-grafana" {{% /docs/reference %}} diff --git a/docs/sources/alerting/alerting-rules/create-mimir-loki-managed-rule.md b/docs/sources/alerting/alerting-rules/create-mimir-loki-managed-rule.md index 496f96728cadb..0abd6c5550bab 100644 --- a/docs/sources/alerting/alerting-rules/create-mimir-loki-managed-rule.md +++ b/docs/sources/alerting/alerting-rules/create-mimir-loki-managed-rule.md @@ -1,8 +1,8 @@ --- aliases: - - ../unified-alerting/alerting-rules/create-cortex-loki-managed-recording-rule/ - - ../unified-alerting/alerting-rules/create-mimir-loki-managed-recording-rule/ - - ../unified-alerting/alerting-rules/create-mimir-loki-managed-rule/ + - ../unified-alerting/alerting-rules/create-cortex-loki-managed-recording-rule/ # /docs/grafana//alerting/unified-alerting/alerting-rules/create-cortex-loki-managed-recording-rule/ + - ../unified-alerting/alerting-rules/create-mimir-loki-managed-recording-rule/ # /docs/grafana//alerting/unified-alerting/alerting-rules/create-mimir-loki-managed-recording-rule/ + - ../unified-alerting/alerting-rules/create-mimir-loki-managed-rule/ # /docs/grafana//alerting/unified-alerting/alerting-rules/create-mimir-loki-managed-rule/ canonical: https://grafana.com/docs/grafana/latest/alerting/alerting-rules/create-mimir-loki-managed-rule/ description: Configure data source-managed alert rules alert for an external Grafana Mimir or Loki instance keywords: @@ -90,6 +90,16 @@ Use alert rule evaluation to determine how frequently an alert rule should be ev Once a condition is met, the alert goes into the **Pending** state. If the condition remains active for the duration specified, the alert transitions to the **Firing** state, else it reverts to the **Normal** state. +## Configure notifications + +Add labels to your alert rules to set which notification policy should handle your firing alert instances. + +All alert rules and instances, irrespective of their labels, match the default notification policy. If there are no nested policies, or no nested policies match the labels in the alert rule or alert instance, then the default notification policy is the matching policy. + +1. Add labels if you want to change the way your notifications are routed. + + Add custom labels by selecting existing key-value pairs from the drop down, or add new labels by entering the new key or value. + ## Add annotations Add [annotations][annotation-label]. to provide more context on the alert in your alert notifications. @@ -100,35 +110,25 @@ Annotations add metadata to provide more information on the alert in your alert Short summary of what happened and why. -2. [Optional] Add a description. +1. [Optional] Add a description. Description of what the alert rule does. -3. [Optional] Add a Runbook URL. +1. [Optional] Add a Runbook URL. Webpage where you keep your runbook for the alert -4. [Optional] Add a custom annotation -5. [Optional] Add a dashboard and panel link. +1. [Optional] Add a custom annotation +1. [Optional] Add a dashboard and panel link. Links alerts to panels in a dashboard. -## Configure notifications - -Add labels to your alert rules to set which notification policy should handle your firing alert instances. - -All alert rules and instances, irrespective of their labels, match the default notification policy. If there are no nested policies, or no nested policies match the labels in the alert rule or alert instance, then the default notification policy is the matching policy. - -1. Add labels if you want to change the way your notifications are routed. - - Add custom labels by selecting existing key-value pairs from the drop down, or add new labels by entering the new key or value. - 1. Click **Save rule**. {{% docs/reference %}} -[alerting]: "/docs/grafana/ -> /docs/grafana//alerting" +[alerting]: "/docs/grafana/ -> /docs/grafana//alerting" [alerting]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting" -[annotation-label]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/annotation-label" -[annotation-label]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/annotation-label" +[annotation-label]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/alert-rules/annotation-label" +[annotation-label]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alert-rules/annotation-label" {{% /docs/reference %}} diff --git a/docs/sources/alerting/alerting-rules/manage-contact-points/_index.md b/docs/sources/alerting/alerting-rules/manage-contact-points/_index.md deleted file mode 100644 index 186c487914b5a..0000000000000 --- a/docs/sources/alerting/alerting-rules/manage-contact-points/_index.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -aliases: - - ../contact-points/ # /docs/grafana//alerting/contact-points/ - - ../contact-points/create-contact-point/ # /docs/grafana//alerting/contact-points/create-contact-point/ - - ../contact-points/delete-contact-point/ # /docs/grafana//alerting/contact-points/delete-contact-point/ - - ../contact-points/edit-contact-point/ # /docs/grafana//alerting/contact-points/edit-contact-point/ - - ../contact-points/test-contact-point/ # /docs/grafana//alerting/contact-points/test-contact-point/ - - ../manage-notifications/manage-contact-points/ # /docs/grafana//alerting/manage-notifications/manage-contact-points/ - - create-contact-point/ # /docs/grafana//alerting/alerting-rules/create-contact-point/ -canonical: https://grafana.com/docs/grafana/latest/alerting/alerting-rules/manage-contact-points/ -description: Configure contact points to define how your contacts are notified when an alert rule fires -keywords: - - grafana - - alerting - - guide - - contact point - - templating -labels: - products: - - cloud - - enterprise - - oss -title: Configure contact points -weight: 410 ---- - -# Configure contact points - -Use contact points to define how your contacts are notified when an alert rule fires. You can add, edit, delete, and test a contact point. - -## Add a contact point - -Complete the following steps to add a contact point. - -1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. -1. Click **Contact points**. -1. From the **Choose Alertmanager** dropdown, select an Alertmanager. By default, **Grafana Alertmanager** is selected. -1. On the **Contact Points** tab, click **+ Add contact point**. -1. Enter a descriptive name for the contact point. -1. From **Integration**, select a type and fill out mandatory fields. For example, if you choose email, enter the email addresses. Or if you choose Slack, enter the Slack channel(s) and users who should be contacted. -1. Some contact point integrations, like email or webhook, have optional settings. In **Optional settings**, specify additional settings for the selected contact point integration. -1. In Notification settings, optionally select **Disable resolved message** if you do not want to be notified when an alert resolves. -1. To add another contact point integration, click **Add contact point integration** and repeat steps 6 through 8. -1. Save your changes. - -## Edit a contact point - -Complete the following steps to edit a contact point. - -1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. -1. Click **Contact points** to view a list of existing contact points. -1. On the **Contact Points** tab, find the contact point you want to edit, and then click **Edit**. -1. Update the contact point and save your changes. - -## Delete a contact point - -Complete the following steps to delete a contact point. - -1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. -1. Click **Contact points** to view a list of existing contact points. -1. On the **Contact Points** tab, find the contact point you want to delete, and then click **More** -> **Delete**. -1. In the confirmation dialog, click **Yes, delete**. - -{{% admonition type="note" %}} -You cannot delete contact points that are in use by a notification policy. Either delete the notification policy or update it to use another contact point. -{{% /admonition %}} - -## Test a contact point - -Complete the following steps to test a contact point. - -1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. -1. Click **Contact points** to view a list of existing contact points. -1. On the **Contact Points** tab, find the contact point you want to test, then click **Edit**. You can also create a new contact point if needed. -1. Click **Test** to open the contact point testing modal. -1. Choose whether to send a predefined test notification or choose custom to add your own custom annotations and labels to include in the notification. -1. Click **Send test notification** to fire the alert. diff --git a/docs/sources/alerting/alerting-rules/manage-contact-points/integrations/_index.md b/docs/sources/alerting/alerting-rules/manage-contact-points/integrations/_index.md deleted file mode 100644 index dfd1efd3c6dd0..0000000000000 --- a/docs/sources/alerting/alerting-rules/manage-contact-points/integrations/_index.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -aliases: - - alerting/manage-notifications/manage-contact-points/configure-integrations/ -canonical: https://grafana.com/docs/grafana/latest/alerting/alerting-rules/manage-contact-points/integrations/ -description: Configure contact point integrations to select your preferred communication channels for receiving notifications of firing alerts. -keywords: - - Grafana - - alerting - - guide - - notifications - - integrations - - contact points -labels: - products: - - cloud - - enterprise - - oss -title: Configure contact point integrations -weight: 100 ---- - -# Configure contact point integrations - -Configure contact point integrations in Grafana to select your preferred communication channel for receiving notifications when your alert rules are firing. Each integration has its own configuration options and setup process. In most cases, this involves providing an API key or a Webhook URL. - -Once configured, you can use integrations as part of your contact points to receive notifications whenever your alert changes its state. In this section, we'll cover the basic steps to configure your integrations, so you can start receiving real-time alerts and stay on top of your monitoring data. - -## List of supported integrations - -| Name | Type | -| ----------------------- | ------------------------- | -| DingDing | `dingding` | -| Discord | `discord` | -| Email | `email` | -| Google Chat | `googlechat` | -| Hipchat | `hipchat` | -| Kafka | `kafka` | -| Line | `line` | -| Microsoft Teams | `teams` | -| Opsgenie | `opsgenie` | -| Pagerduty | `pagerduty` | -| Prometheus Alertmanager | `prometheus-alertmanager` | -| Pushover | `pushover` | -| Sensu | `sensu` | -| Sensu Go | `sensugo` | -| Slack | `slack` | -| Telegram | `telegram` | -| Threema | `threema` | -| VictorOps | `victorops` | -| Webhook | `webhook` | diff --git a/docs/sources/alerting/alerting-rules/templating-labels-annotations.md b/docs/sources/alerting/alerting-rules/templating-labels-annotations.md new file mode 100644 index 0000000000000..008cefecd8659 --- /dev/null +++ b/docs/sources/alerting/alerting-rules/templating-labels-annotations.md @@ -0,0 +1,453 @@ +--- +aliases: + - ../fundamentals/annotation-label/variables-label-annotation/ # /docs/grafana//alerting/fundamentals/annotation-label/variables-label-annotation/ +canonical: https://grafana.com/docs/grafana/latest/alerting/alerting-rules/templating-labels-annotations/ +description: Learn about how to template labels and annotations +keywords: + - grafana + - alerting + - templating + - labels + - annotations +labels: + products: + - cloud + - enterprise + - oss +title: Templating labels and annotations +weight: 500 +--- + +# Templating labels and annotations + +You can use templates to include data from queries and expressions in labels and annotations. For example, you might want to set the severity label for an alert based on the value of the query, or use the instance label from the query in a summary annotation so you know which server is experiencing high CPU usage. + +When using custom labels with templates it is important to make sure that the label value does not change between consecutive evaluations of the alert rule as this will end up creating large numbers of distinct alerts. However, it is OK for the template to produce different label values for different alerts. For example, do not put the value of the query in a custom label as this will end up creating a new set of alerts each time the value changes. Instead use annotations. + +All templates should be written in [text/template](https://pkg.go.dev/text/template). Regardless of whether you are templating a label or an annotation, you should write each template inline inside the label or annotation that you are templating. This means you cannot share templates between labels and annotations, and instead you will need to copy templates wherever you want to use them. + +Each template is evaluated whenever the alert rule is evaluated, and is evaluated for every alert separately. For example, if your alert rule has a templated summary annotation, and the alert rule has 10 firing alerts, then the template will be executed 10 times, once for each alert. You should try to avoid doing expensive computations in your templates as much as possible. + +## Examples + +Rather than write a complete tutorial on text/template, the following examples attempt to show the most common use-cases we have seen for templates. You can use these examples verbatim, or adapt them as necessary for your use case. For more information on how to write text/template refer to the [text/template](https://pkg.go.dev/text/template) documentation. + +### Print all labels, comma separated + +To print all labels, comma separated, print the `$labels` variable: + +``` +{{ $labels }} +``` + +For example, given an alert with the labels `alertname=High CPU usage`, `grafana_folder=CPU alerts` and `instance=server1`, this would print: + +``` +alertname=High CPU usage, grafana_folder=CPU alerts, instance=server1 +``` + +> If you are using classic conditions then `$labels` will not contain any labels from the query. Refer to [the $labels variable](#the-labels-variable) for more information. + +### Print all labels, one per line + +To print all labels, one per line, use a `range` to iterate over each key/value pair and print them individually. Here `$k` refers to the name and `$v` refers to the value of the current label: + +``` +{{ range $k, $v := $labels -}} +{{ $k }}={{ $v }} +{{ end }} +``` + +For example, given an alert with the labels `alertname=High CPU usage`, `grafana_folder=CPU alerts` and `instance=server1`, this would print: + +``` +alertname=High CPU usage +grafana_folder=CPU alerts +instance=server1 +``` + +> If you are using classic conditions then `$labels` will not contain any labels from the query. Refer to [the $labels variable](#the-labels-variable) for more information. + +### Print an individual label + +To print an individual label use the `index` function with the `$labels` variable: + +``` +The host {{ index $labels "instance" }} has exceeded 80% CPU usage for the last 5 minutes +``` + +For example, given an alert with the labels `instance=server1`, this would print: + +``` +The host server1 has exceeded 80% CPU usage for the last 5 minutes +``` + +> If you are using classic conditions then `$labels` will not contain any labels from the query. Refer to [the $labels variable](#the-labels-variable) for more information. + +### Print the value of a query + +To print the value of an instant query you can print its Ref ID using the `index` function and the `$values` variable: + +``` +{{ index $values "A" }} +``` + +For example, given an instant query that returns the value 81.2345, this will print: + +``` +81.2345 +``` + +To print the value of a range query you must first reduce it from a time series to an instant vector with a reduce expression. You can then print the result of the reduce expression by using its Ref ID instead. For example, if the reduce expression takes the average of A and has the Ref ID B you would write: + +``` +{{ index $values "B" }} +``` + +### Print the humanized value of a query + +To print the humanized value of an instant query use the `humanize` function: + +``` +{{ humanize (index $values "A").Value }} +``` + +For example, given an instant query that returns the value 81.2345, this will print: + +``` +81.234 +``` + +To print the humanized value of a range query you must first reduce it from a time series to an instant vector with a reduce expression. You can then print the result of the reduce expression by using its Ref ID instead. For example, if the reduce expression takes the average of A and has the Ref ID B you would write: + +``` +{{ humanize (index $values "B").Value }} +``` + +### Print the value of a query as a percentage + +To print the value of an instant query as a percentage use the `humanizePercentage` function: + +``` +{{ humanizePercentage (index $values "A").Value }} +``` + +This function expects the value to be a decimal number between 0 and 1. If the value is instead a decimal number between 0 and 100 you can either divide it by 100 in your query or using a math expression. If the query is a range query you must first reduce it from a time series to an instant vector with a reduce expression. + +### Set a severity from the value of a query + +To set a severity label from the value of a query use an if statement and the greater than comparison function. Make sure to use decimals (`80.0`, `50.0`, `0.0`, etc) when doing comparisons against `$values` as text/template does not support type coercion. You can find a list of all the supported comparison functions [here](https://pkg.go.dev/text/template#hdr-Functions). + +``` +{{ if (gt $values.A.Value 80.0) -}} +high +{{ else if (gt $values.A.Value 50.0) -}} +medium +{{ else -}} +low +{{- end }} +``` + +### Print all labels from a classic condition + +You cannot use `$labels` to print labels from the query if you are using classic conditions, and must use `$values` instead. The reason for this is classic conditions discard these labels to enforce uni-dimensional behavior (at most one alert per alert rule). If classic conditions didn't discard these labels, then queries that returned many time series would cause alerts to flap between firing and resolved constantly as the labels would change every time the alert rule was evaluated. + +Instead, the `$values` variable contains the reduced values of all time series for all conditions that are firing. For example, if you have an alert rule with a query A that returns two time series, and a classic condition B with two conditions, then `$values` would contain `B0`, `B1`, `B2` and `B3`. If the classic condition B had just one condition, then `$values` would contain just `B0` and `B1`. + +To print all labels of all firing time series use the following template (make sure to replace `B` in the regular expression with the Ref ID of the classic condition if it's different): + +``` +{{ range $k, $v := $values -}} +{{ if (match "B[0-9]+" $k) -}} +{{ $k }}: {{ $v.Labels }}{{ end }} +{{ end }} +``` + +For example, a classic condition for two time series exceeding a single condition would print: + +``` +B0: instance=server1 +B1: instance=server2 +``` + +If the classic condition has two or more conditions, and a time series exceeds multiple conditions at the same time, then its labels will be duplicated for each condition that is exceeded: + +``` +B0: instance=server1 +B1: instance=server2 +B2: instance=server1 +B3: instance=server2 +``` + +If you need to print unique labels you should consider changing your alert rules from uni-dimensional to multi-dimensional instead. You can do this by replacing your classic condition with reduce and math expressions. + +### Print all values from a classic condition + +To print all values from a classic condition take the previous example and replace `$v.Labels` with `$v.Value`: + +``` +{{ range $k, $v := $values -}} +{{ if (match "B[0-9]+" $k) -}} +{{ $k }}: {{ $v.Value }}{{ end }} +{{ end }} +``` + +For example, a classic condition for two time series exceeding a single condition would print: + +``` +B0: 81.2345 +B1: 84.5678 +``` + +If the classic condition has two or more conditions, and a time series exceeds multiple conditions at the same time, then `$values` will contain the values of all conditions: + +``` +B0: 81.2345 +B1: 92.3456 +B2: 84.5678 +B3: 95.6789 +``` + +## Variables + +The following variables are available to you when templating labels and annotations: + +### The labels variable + +The `$labels` variable contains all labels from the query. For example, suppose you have a query that returns CPU usage for all of your servers, and you have an alert rule that fires when any of your servers have exceeded 80% CPU usage for the last 5 minutes. You want to add a summary annotation to the alert that tells you which server is experiencing high CPU usage. With the `$labels` variable you can write a template that prints a human-readable sentence such as: + +``` +CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes +``` + +> If you are using a classic condition then `$labels` will not contain any labels from the query. Classic conditions discard these labels in order to enforce uni-dimensional behavior (at most one alert per alert rule). If you want to use labels from the query in your template then use the example [here](#print-all-labels-from-a-classic-condition). + +### The value variable + +The `$value` variable is a string containing the labels and values of all instant queries; threshold, reduce and math expressions, and classic conditions in the alert rule. It does not contain the results of range queries, as these can return anywhere from 10s to 10,000s of rows or metrics. If it did, for especially large queries a single alert could use 10s of MBs of memory and Grafana would run out of memory very quickly. + +To print the `$value` variable in the summary you would write something like this: + +``` +CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ $value }} +``` + +And would look something like this: + +``` +CPU usage for instance1 has exceeded 80% for the last 5 minutes: [ var='A' labels={instance=instance1} value=81.234 ] +``` + +Here `var='A'` refers to the instant query with Ref ID A, `labels={instance=instance1}` refers to the labels, and `value=81.234` refers to the average CPU usage over the last 5 minutes. + +If you want to print just some of the string instead of the full string then use the `$values` variable. It contains the same information as `$value`, but in a structured table, and is much easier to use then writing a regular expression to match just the text you want. + +### The values variable + +The `$values` variable is a table containing the labels and floating point values of all instant queries and expressions, indexed by their Ref IDs. + +To print the value of the instant query with Ref ID A: + +``` +CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ index $values "A" }} +``` + +For example, given an alert with the labels `instance=server1` and an instant query with the value `81.2345`, this would print: + +``` +CPU usage for instance1 has exceeded 80% for the last 5 minutes: 81.2345 +``` + +If the query in Ref ID A is a range query rather than an instant query then add a reduce expression with Ref ID B and replace `(index $values "A")` with `(index $values "B")`: + +``` +CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ index $values "B" }} +``` + +## Functions + +The following functions are available to you when templating labels and annotations: + +### args + +The `args` function translates a list of objects to a map with keys arg0, arg1 etc. This is intended to allow multiple arguments to be passed to templates: + +``` +{{define "x"}}{{.arg0}} {{.arg1}}{{end}}{{template "x" (args 1 "2")}} +``` + +``` +1 2 +``` + +### externalURL + +The `externalURL` function returns the external URL of the Grafana server as configured in the ini file(s): + +``` +{{ externalURL }} +``` + +``` +https://example.com/grafana +``` + +### graphLink + +The `graphLink` function returns the path to the graphical view in [Explore][explore] for the given expression and data source: + +``` +{{ graphLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }} +``` + +``` +/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":false,"range":true}] +``` + +### humanize + +The `humanize` function humanizes decimal numbers: + +``` +{{ humanize 1000.0 }} +``` + +``` +1k +``` + +### humanize1024 + +The `humanize1024` works similar to `humanize` but but uses 1024 as the base rather than 1000: + +``` +{{ humanize1024 1024.0 }} +``` + +``` +1ki +``` + +### humanizeDuration + +The `humanizeDuration` function humanizes a duration in seconds: + +``` +{{ humanizeDuration 60.0 }} +``` + +``` +1m 0s +``` + +### humanizePercentage + +The `humanizePercentage` function humanizes a ratio value to a percentage: + +``` +{{ humanizePercentage 0.2 }} +``` + +``` +20% +``` + +### humanizeTimestamp + +The `humanizeTimestamp` function humanizes a Unix timestamp: + +``` +{{ humanizeTimestamp 1577836800.0 }} +``` + +``` +2020-01-01 00:00:00 +0000 UTC +``` + +### match + +The `match` function matches the text against a regular expression pattern: + +``` +{{ match "a.*" "abc" }} +``` + +``` +true +``` + +### pathPrefix + +The `pathPrefix` function returns the path of the Grafana server as configured in the ini file(s): + +``` +{{ pathPrefix }} +``` + +``` +/grafana +``` + +### tableLink + +The `tableLink` function returns the path to the tabular view in [Explore][explore] for the given expression and data source: + +``` +{{ tableLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }} +``` + +``` +/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":true,"range":false}] +``` + +### title + +The `title` function capitalizes the first character of each word: + +``` +{{ title "hello, world!" }} +``` + +``` +Hello, World! +``` + +### toLower + +The `toLower` function returns all text in lowercase: + +``` +{{ toLower "Hello, world!" }} +``` + +``` +hello, world! +``` + +### toUpper + +The `toUpper` function returns all text in uppercase: + +``` +{{ toUpper "Hello, world!" }} +``` + +``` +HELLO, WORLD! +``` + +### reReplaceAll + +The `reReplaceAll` function replaces text matching the regular expression: + +``` +{{ reReplaceAll "localhost:(.*)" "example.com:$1" "localhost:8080" }} +``` + +``` +example.com:8080 +``` + +{{% docs/reference %}} +[explore]: "/docs/ -> /docs/grafana//explore" +{{% /docs/reference %}} diff --git a/docs/sources/alerting/configure-notifications/_index.md b/docs/sources/alerting/configure-notifications/_index.md new file mode 100644 index 0000000000000..f709efed8fa25 --- /dev/null +++ b/docs/sources/alerting/configure-notifications/_index.md @@ -0,0 +1,26 @@ +--- +canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications +description: Configure how, when, and where to send your alert notifications +keywords: + - grafana + - alert + - notifications +labels: + products: + - cloud + - enterprise + - oss +menuTitle: Configure notifications +title: Configure notifications +weight: 125 +--- + +# Configure notifications + +Choose how, when, and where to send your alert notifications. + +As a first step, define your contact points; where to send your alert notifications to. A contact point is a set of one or more integrations that are used to deliver notifications. + +Next, create a notification policy which is a set of rules for where, when and how your alerts are routed to contact points. In a notification policy, you define where to send your alert notifications by choosing one of the contact points you created. + +Optionally, you can add notification templates to contact points for reuse and consistent messaging in your notifications. diff --git a/docs/sources/alerting/alerting-rules/create-notification-policy.md b/docs/sources/alerting/configure-notifications/create-notification-policy.md similarity index 89% rename from docs/sources/alerting/alerting-rules/create-notification-policy.md rename to docs/sources/alerting/configure-notifications/create-notification-policy.md index 8e0d09b1e0123..bcd9d8a80642e 100644 --- a/docs/sources/alerting/alerting-rules/create-notification-policy.md +++ b/docs/sources/alerting/configure-notifications/create-notification-policy.md @@ -1,9 +1,10 @@ --- aliases: - - ../notifications/ - - ../old-alerting/notifications/ - - ../unified-alerting/notifications/ -canonical: https://grafana.com/docs/grafana/latest/alerting/alerting-rules/create-notification-policy/ + - ../notifications/ # /docs/grafana//alerting/notifications/ + - ../unified-alerting/notifications/ # /docs/grafana//alerting/unified-alerting/notifications/ + - ../alerting-rules/create-notification-policy/ # /docs/grafana//alerting/alerting-rules/create-notification-policy/ + - ../manage-notifications/create-notification-policy/ # /docs/grafana//alerting/manage-notifications/create-notification-policy/ +canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications/create-notification-policy/ description: Configure notification policies to determine how alerts are routed to contact points keywords: - grafana @@ -36,10 +37,6 @@ For more information on notification policies, see [fundamentals of Notification ## Edit default notification policy -{{% admonition type="note" %}} -Before Grafana v8.2, the configuration of the embedded Alertmanager was shared across organizations. Users of Grafana 8.0 and 8.1 are advised to use the new Grafana 8 Alerts only if they have one organization. Otherwise, silences for the Grafana managed alerts will be visible by all organizations. -{{% /admonition %}} - 1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. 1. Click **Notification policies**. 1. From the **Choose Alertmanager** dropdown, select an external Alertmanager. By default, the **Grafana Alertmanager** is selected. @@ -111,6 +108,6 @@ An example of an alert configuration. - Create specific routes for particular teams that handle their own on-call rotations. {{% docs/reference %}} -[notification-policies]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/notification-policies" -[notification-policies]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/notification-policies" +[notification-policies]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/notifications/notification-policies" +[notification-policies]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/notifications/notification-policies" {{% /docs/reference %}} diff --git a/docs/sources/alerting/configure-notifications/create-silence.md b/docs/sources/alerting/configure-notifications/create-silence.md new file mode 100644 index 0000000000000..01d9062ea221a --- /dev/null +++ b/docs/sources/alerting/configure-notifications/create-silence.md @@ -0,0 +1,79 @@ +--- +aliases: + - ../silences/create-silence/ # /docs/grafana//alerting/silences/create-silence/ + - ../silences/edit-silence/ # /docs/grafana//alerting/silences/edit-silence/ + - ../silences/linking-to-silence-form/ # /docs/grafana//alerting/silences/linking-to-silence-form/ + - ../silences/remove-silence/ # /docs/grafana//alerting/silences/remove-silence/ + - ../unified-alerting/silences/ # /docs/grafana//alerting/unified-alerting/silences/ + - ../silences/ # /docs/grafana//alerting/silences/ + - ../manage-notifications/create-silence/ # /docs/grafana//alerting/manage-notifications/create-silence/ +canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications/create-silence/ +description: Create silences to stop notifications from getting created for a specified window of time +keywords: + - grafana + - alerting + - silence + - mute +labels: + products: + - cloud + - enterprise + - oss +title: Configure silences +weight: 440 +--- + +# Configure silences + +Silences stop notifications from getting created and last for only a specified window of time. + +{{< admonition type="note" >}} + +- Inhibition rules are not supported in the Grafana Alertmanager. +- The preview of silenced alerts only applies to alerts in firing state. + {{< /admonition >}} + +## Add silences + +To add a silence, complete the following steps. + +1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. +1. Click **Silences**. +1. From the **Alertmanager** dropdown, select an external Alertmanager to create and manage silences for the external data source. Otherwise, keep the default option of Grafana. +1. Click **Create silence** to open the Create silence page. +1. In **Silence start and end**, select the start and end date to indicate when the silence should go into effect and expire. +1. Optionally, in **Duration**, specify how long the silence is enforced. This automatically updates the end time in the **Silence start and end** field. +1. In the **Label** and **Value** fields, enter one or more _Matching Labels_. Matchers determine which rules the silence will apply to. Any matching alerts (in firing state) will show in the **Affected alert instances** field +1. In **Comment**, add details about the silence. +1. Click **Submit**. + +## Edit silences + +To edit a silence, complete the following steps. + +1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. +1. Click **Silences** to view the list of existing silences. +1. Find the silence you want to edit, then click **Edit** (pen icon). +1. Make the desired changes, then click **Submit** to save your changes. + +## Create a URL to link to a silence form + +When linking to a silence form, provide the default matching labels and comment via `matcher` and `comment` query parameters. The `matcher` parameter should be in the following format `[label][operator][value]` where the `operator` parameter can be one of the following: `=` (equals, not regex), `!=` (not equals, not regex), `=~` (equals, regex), `!~` (not equals, regex). +The URL can contain many query parameters with the key `matcher`. +For example, to link to silence form with matching labels `severity=critical` & `cluster!~europe-.*` and comment `Silence critical EU alerts`, create a URL `https://mygrafana/alerting/silence/new?matcher=severity%3Dcritical&matcher=cluster!~europe-*&comment=Silence%20critical%20EU%20alert`. + +To link to a new silence page for an external Alertmanager, add a `alertmanager` query parameter with the Alertmanager data source name. + +## Remove silences + +To remove a silence, complete the following steps. + +1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. +1. Click **Silences** to view the list of existing silences. +1. Select the silence you want to end, then click **Unsilence**. + +> **Note:** You cannot remove a silence manually. Silences that have ended are retained and listed for five days. + +## Useful links + +[Aggregation operators](https://prometheus.io/docs/prometheus/latest/querying/operators/#aggregation-operators) diff --git a/docs/sources/alerting/configure-notifications/manage-contact-points/_index.md b/docs/sources/alerting/configure-notifications/manage-contact-points/_index.md new file mode 100644 index 0000000000000..0bb2064e0a829 --- /dev/null +++ b/docs/sources/alerting/configure-notifications/manage-contact-points/_index.md @@ -0,0 +1,144 @@ +--- +aliases: + - ../contact-points/create-contact-point/ # /docs/grafana//alerting/contact-points/create-contact-point/ + - ../contact-points/delete-contact-point/ # /docs/grafana//alerting/contact-points/delete-contact-point/ + - ../contact-points/edit-contact-point/ # /docs/grafana//alerting/contact-points/edit-contact-point/ + - ../contact-points/test-contact-point/ # /docs/grafana//alerting/contact-points/test-contact-point/ + - ../manage-notifications/manage-contact-points/ # /docs/grafana//alerting/manage-notifications/manage-contact-points/ + - ../alerting-rules/create-contact-point/ # /docs/grafana//alerting/alerting-rules/create-contact-point/ + - ../alerting-rules/manage-contact-points/ # /docs/grafana//alerting/alerting-rules/manage-contact-points/ + - ../alerting-rules/create-notification-policy/ # /docs/grafana//alerting/alerting-rules/create-notification-policy/ + - ../alerting-rules/manage-contact-points/integrations/ # /docs/grafana//alerting/alerting-rules/manage-contact-points/integrations/ + - ../manage-notifications/manage-contact-points/ # /docs/grafana//alerting/manage-notifications/manage-contact-points/ +canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications/manage-contact-points/ +description: Configure contact points to define how your contacts are notified when an alert rule fires +keywords: + - grafana + - alerting + - guide + - contact point + - templating +labels: + products: + - cloud + - enterprise + - oss +title: Configure contact points +weight: 410 +--- + +# Configure contact points + +Use contact points to define how your contacts are notified when an alert rule fires. You can add, edit, delete, and test a contact point. + +Configure contact point integrations in Grafana to select your preferred communication channel for receiving notifications when your alert rules are firing. + +## Add a contact point + +Complete the following steps to add a contact point. + +1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. +1. Click **Contact points**. +1. From the **Choose Alertmanager** dropdown, select an Alertmanager. By default, **Grafana Alertmanager** is selected. +1. On the **Contact Points** tab, click **+ Add contact point**. +1. Enter a descriptive name for the contact point. +1. From **Integration**, select a type and fill out mandatory fields. For example, if you choose email, enter the email addresses. Or if you choose Slack, enter the Slack channel(s) and users who should be contacted. +1. Some contact point integrations, like email or webhook, have optional settings. In **Optional settings**, specify additional settings for the selected contact point integration. +1. In Notification settings, optionally select **Disable resolved message** if you do not want to be notified when an alert resolves. +1. To add another contact point integration, click **Add contact point integration** and repeat steps 6 through 8. +1. Save your changes. + +## Edit a contact point + +Complete the following steps to edit a contact point. + +1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. +1. Click **Contact points** to view a list of existing contact points. +1. On the **Contact Points** tab, find the contact point you want to edit, and then click **Edit**. +1. Update the contact point and save your changes. + +## Delete a contact point + +Complete the following steps to delete a contact point. + +1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. +1. Click **Contact points** to view a list of existing contact points. +1. On the **Contact Points** tab, find the contact point you want to delete, and then click **More** -> **Delete**. +1. In the confirmation dialog, click **Yes, delete**. + +{{% admonition type="note" %}} +You cannot delete contact points that are in use by a notification policy. Either delete the notification policy or update it to use another contact point. +{{% /admonition %}} + +## Test a contact point + +Complete the following steps to test a contact point. + +1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. +1. Click **Contact points** to view a list of existing contact points. +1. On the **Contact Points** tab, find the contact point you want to test, then click **Edit**. You can also create a new contact point if needed. +1. Click **Test** to open the contact point testing modal. +1. Choose whether to send a predefined test notification or choose custom to add your own custom annotations and labels to include in the notification. +1. Click **Send test notification** to fire the alert. + +## Manage contact points + +The Contact points list view lists all existing contact points and notification templates. + +On the **Contact Points** tab, you can: + +- Search for name and type of contact points and integrations +- View all existing contact points and integrations +- View how many notification policies each contact point is being used for and navigate directly to the linked notification policies +- View the status of notification deliveries +- Export individual contact points or all contact points in JSON, YAML, or Terraform format +- Delete contact points that are not in use by a notification policy + +On the **Notification templates** tab, you can: + +- View, edit, copy or delete existing notification templates + +## Configure contact point integrations + +Each contact point integration has its own configuration options and setup process. In most cases, this involves providing an API key or a Webhook URL. + +Once configured, you can use integrations as part of your contact points to receive notifications whenever your alert changes its state. In this section, we'll cover the basic steps to configure your integrations, so you can start receiving real-time alerts and stay on top of your monitoring data. + +## List of supported integrations + +| Name | Type | +| ------------------------ | ------------------------- | +| DingDing | `dingding` | +| Discord | `discord` | +| Email | `email` | +| Google Chat | `googlechat` | +| [Grafana Oncall][oncall] | `oncall` | +| Hipchat | `hipchat` | +| Kafka | `kafka` | +| Line | `line` | +| Microsoft Teams | `teams` | +| Opsgenie | `opsgenie` | +| [Pagerduty][pagerduty] | `pagerduty` | +| Prometheus Alertmanager | `prometheus-alertmanager` | +| Pushover | `pushover` | +| Sensu | `sensu` | +| Sensu Go | `sensugo` | +| [Slack][slack] | `slack` | +| Telegram | `telegram` | +| Threema | `threema` | +| VictorOps | `victorops` | +| [Webhook][webhook] | `webhook` | + +{{% docs/reference %}} +[pagerduty]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/manage-contact-points/integrations/pager-duty" +[pagerduty]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/manage-contact-points/integrations/pager-duty" + +[oncall]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/manage-contact-points/integrations/configure-oncall" +[oncall]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/manage-contact-points/integrations/configure-oncall" + +[slack]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/manage-contact-points/integrations/configure-slack" +[slack]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/manage-contact-points/integrations/configure-slack" + +[webhook]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/manage-contact-points/integrations/webhook-notifier" +[webhook]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/manage-contact-points/integrations/webhook-notifier" +{{% /docs/reference %}} diff --git a/docs/sources/alerting/alerting-rules/manage-contact-points/integrations/configure-oncall.md b/docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-oncall.md similarity index 77% rename from docs/sources/alerting/alerting-rules/manage-contact-points/integrations/configure-oncall.md rename to docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-oncall.md index 093e78b5cad2d..e55761ad318fc 100644 --- a/docs/sources/alerting/alerting-rules/manage-contact-points/integrations/configure-oncall.md +++ b/docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-oncall.md @@ -1,5 +1,8 @@ --- -canonical: https://grafana.com/docs/grafana/latest/alerting/alerting-rules/manage-contact-points/integrations/configure-oncall/ +aliases: + - ../../../alerting-rules/manage-contact-points/configure-oncall/ # /docs/grafana//alerting/alerting-rules/manage-contact-points/configure-oncall/ + - ../../../alerting-rules/manage-contact-points/integrations/configure-oncall/ # /docs/grafana//alerting/alerting-rules/manage-contact-points/integrations/configure-oncall/ +canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications/manage-contact-points/integrations/configure-oncall/ description: Configure the Alerting - Grafana OnCall integration to connect alerts generated by Grafana Alerting with Grafana OnCall keywords: - grafana @@ -7,7 +10,7 @@ keywords: - oncall - integration aliases: - - ../configure-oncall/ # /docs/grafana/latest/alerting/alerting-rules/manage-contact-points/configure-oncall/ + - ../configure-oncall/ # /docs/grafana//alerting/alerting-rules/manage-contact-points/configure-oncall/ labels: products: - cloud @@ -63,12 +66,12 @@ To set up the Grafana OnCall integration using the Grafana Alerting application, This redirects you to the Grafana OnCall integration page in the Grafana OnCall application. From there, you can add [routes and escalation chains][escalation-chain]. {{% docs/reference %}} -[create-notification-policy]: "/docs/grafana/ -> /docs/grafana//alerting/alerting-rules/create-notification-policy" -[create-notification-policy]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/alerting-rules/create-notification-policy" +[create-notification-policy]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/create-notification-policy" +[create-notification-policy]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/create-notification-policy" [oncall-integration]: "/docs/grafana/ -> /docs/oncall/latest/integrations/grafana-alerting" [oncall-integration]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/oncall/integrations/grafana-alerting" -[escalation-chain]: "/docs/grafana/ -> /docs/oncall/latest/escalation-chains-and-routes" -[escalation-chain]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/oncall/escalation-chains-and-routes" +[escalation-chain]: "/docs/grafana/ -> /docs/oncall/latest/configure/escalation-chains-and-routes" +[escalation-chain]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/oncall/configure/escalation-chains-and-routes" {{% /docs/reference %}} diff --git a/docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-slack.md b/docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-slack.md new file mode 100644 index 0000000000000..f08ab60fdaac7 --- /dev/null +++ b/docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-slack.md @@ -0,0 +1,93 @@ +--- +canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications/manage-contact-points/integrations/configure-slack/ +description: Configure the Slack integration to connect alerts generated by Grafana Alerting +keywords: + - grafana + - alerting + - slack + - integration +labels: + products: + - cloud + - enterprise + - oss +menuTitle: Slack +title: Configure Slack for Alerting +weight: 300 +--- + +## Configure Slack for Alerting + +Use the Grafana Alerting - Slack integration to send Slack notifications when your alerts are firing. + +There are two ways of integrating Slack into Grafana Alerting. + +1. Use a [Slack API token](https://api.slack.com/authentication/token-types) + + Enable your app to access the Slack API. If, for example, you are interested in more granular control over permissions, or your project is expected to regularly scale, resulting in new channels being created, this is the best option. + +1. Use a [Webhook URL](https://api.slack.com/messaging/webhooks) + + Webhooks is the simpler way to post messages into Slack. Slack automatically creates a bot user with all the necessary permissions to post messages to one particular channel of your choice. + +{{< admonition type="note" >}} +Grafana Alerting only allows one Slack channel per contact point. +{{< /admonition >}} + +## Before you begin + +### Slack API Token + +If you are using a Slack API Token, complete the following steps. + +1. Follow steps 1 and 2 of the [Slack API Quickstart](https://api.slack.com/start/quickstart). +1. Add the [chat:write.public](https://api.slack.com/scopes/chat:write.public) scope to give your app the ability to post in all public channels without joining. +1. In OAuth Tokens for Your Workspace, copy the Bot User OAuth Token. +1. Open your Slack workplace. +1. Right click the channel you want to receive notifications in. +1. Click View channel details. +1. Scroll down and copy the Channel ID. + {{< admonition type="note" >}} + While going through these steps, Slack may prompt you to Reinstall your app in order for the changes to take effect. + {{< /admonition >}} + +### Webhook URL + +If you are using a Webhook URL, follow steps 1 and 5 in the [Slack API Quickstart](https://api.slack.com/start/quickstart). + +{{< admonition type="note" >}} +Make sure you copy the Slack app Webhook URL. You will need this when setting up your contact point integration in Grafana Alerting. +{{< /admonition >}} + +## Procedure + +To create your Slack integration in Grafana Alerting, complete the following steps. + +1. Navigate to **Alerts & IRM** -> **Alerting** -> **Contact points**. +1. Click **+ Add contact point**. +1. Enter a contact point name. +1. From the Integration list, select Slack. +1. If you are using a Slack API token: + - In the **Recipient** field, copy in the channel ID. + - In the **Token** field, copy in the Bot User OAuth Token that starts with “xoxb-”. +1. If you are using a Webhook URL, in the **Webhook** field, copy in your Slack app Webhook URL. +1. Click **Test** to check that your integration works. +1. Click **Save contact point**. + +## Next steps + +To add the contact point and integration you created to your default notification policy, complete the following steps. + +1. Navigate to **Alerts & IRM** -> **Alerting** -> **Notification policies**. +1. In the **Default policy**, click the ellipsis icon (…) and then **Edit**, +1. Change the default policy to the contact point you created. +1. Click **Update default policy**. + +**Note:** +If you have more than one contact point, add a new notification policy rather than edit the default one, so you can route specific alerts to Slack. For more information, refer to [Notification policies][nested-policy]. + +{{% docs/reference %}} +[nested-policy]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/create-notification-policy#add-new-nested-policy" + +[nested-policy]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/create-notification-policy#add-new-nested-policy" +{{% /docs/reference %}} diff --git a/docs/sources/alerting/alerting-rules/manage-contact-points/integrations/pager-duty.md b/docs/sources/alerting/configure-notifications/manage-contact-points/integrations/pager-duty.md similarity index 79% rename from docs/sources/alerting/alerting-rules/manage-contact-points/integrations/pager-duty.md rename to docs/sources/alerting/configure-notifications/manage-contact-points/integrations/pager-duty.md index da79c613ebbe2..7a55e0734247a 100644 --- a/docs/sources/alerting/alerting-rules/manage-contact-points/integrations/pager-duty.md +++ b/docs/sources/alerting/configure-notifications/manage-contact-points/integrations/pager-duty.md @@ -1,5 +1,7 @@ --- -canonical: https://grafana.com/docs/grafana/latest/alerting/alerting-rules/manage-contact-points/integrations/pager-duty/ +aliases: + - ../../../alerting-rules/manage-contact-points/integrations/pager-duty/ # /docs/grafana//alerting/alerting-rules/manage-contact-points/integrations/pager-duty/ +canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications/manage-contact-points/integrations/pager-duty/ description: Configure the PagerDuty integration for Alerting keywords: - grafana diff --git a/docs/sources/alerting/alerting-rules/manage-contact-points/integrations/webhook-notifier.md b/docs/sources/alerting/configure-notifications/manage-contact-points/integrations/webhook-notifier.md similarity index 91% rename from docs/sources/alerting/alerting-rules/manage-contact-points/integrations/webhook-notifier.md rename to docs/sources/alerting/configure-notifications/manage-contact-points/integrations/webhook-notifier.md index 77004bc92056f..769297b6d3e17 100644 --- a/docs/sources/alerting/alerting-rules/manage-contact-points/integrations/webhook-notifier.md +++ b/docs/sources/alerting/configure-notifications/manage-contact-points/integrations/webhook-notifier.md @@ -1,9 +1,12 @@ --- aliases: - - ../contact-points/notifiers/webhook-notifier/ - - ../fundamentals/contact-points/webhook-notifier/ + - ../../../fundamentals/contact-points/notifiers/webhook-notifier/ # /docs/grafana//alerting/fundamentals/contact-points/notifiers/webhook-notifier/ + - ../../../fundamentals/contact-points/webhook-notifier/ # /docs/grafana//alerting/fundamentals/contact-points/webhook-notifier/ + - ../../../manage-notifications/manage-contact-points/webhook-notifier/ # /docs/grafana//alerting/manage-notifications/manage-contact-points/webhook-notifier/ - alerting/manage-notifications/manage-contact-points/webhook-notifier/ -canonical: https://grafana.com/docs/grafana/latest/alerting/alerting-rules/manage-contact-points/integrations/webhook-notifier/ + - ../../../alerting-rules/manage-contact-points/integrations/webhook-notifier/ # /docs/grafana//alerting/alerting-rules/manage-contact-points/integrations/webhook-notifier/ + +canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications/manage-contact-points/integrations/webhook-notifier/ description: Configure the webhook notifier integration for Alerting keywords: - grafana diff --git a/docs/sources/alerting/manage-notifications/mute-timings.md b/docs/sources/alerting/configure-notifications/mute-timings.md similarity index 82% rename from docs/sources/alerting/manage-notifications/mute-timings.md rename to docs/sources/alerting/configure-notifications/mute-timings.md index 678ea5b7f2a60..9e2efeef2b840 100644 --- a/docs/sources/alerting/manage-notifications/mute-timings.md +++ b/docs/sources/alerting/configure-notifications/mute-timings.md @@ -1,8 +1,9 @@ --- aliases: - - ../notifications/mute-timings/ - - ../unified-alerting/notifications/mute-timings/ -canonical: https://grafana.com/docs/grafana/latest/alerting/manage-notifications/mute-timings/ + - ../notifications/mute-timings/ # /docs/grafana//alerting/notifications/mute-timings/ + - ../unified-alerting/notifications/mute-timings/ # /docs/grafana//alerting/unified-alerting/notifications/mute-timings/ + - ../manage-notifications/mute-timings/ # /docs/grafana//alerting/manage-notifications/mute-timings/ +canonical: /docs/grafana/latest/alerting/configure-notifications/mute-timings/ description: Create mute timings to prevent alerts from firing during a specific and reoccurring period of time keywords: - grafana @@ -16,17 +17,17 @@ labels: - cloud - enterprise - oss -title: Create mute timings -weight: 420 +title: Configure mute timings +weight: 450 --- -# Create mute timings +# Configure mute timings A mute timing is a recurring interval of time when no new notifications for a policy are generated or sent. Use them to prevent alerts from firing a specific and reoccurring period, for example, a regular maintenance period. Similar to silences, mute timings do not prevent alert rules from being evaluated, nor do they stop alert instances from being shown in the user interface. They only prevent notifications from being created. -You can configure Grafana managed mute timings as well as mute timings for an [external Alertmanager data source][datasources/alertmanager]. For more information, refer to [Alertmanager documentation][fundamentals/alertmanager]. +You can configure Grafana managed mute timings as well as mute timings for an [external Alertmanager data source][datasources/alertmanager]. For more information, refer to [Alertmanager documentation][intro-alertmanager]. ## Mute timings vs silences @@ -81,9 +82,9 @@ If you want to specify an exact duration, specify all the options. For example, - Days of the month: `1:7` {{% docs/reference %}} -[datasources/alertmanager]: "/docs/grafana/ -> /docs/grafana//datasources/alertmanager" -[datasources/alertmanager]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/alertmanager" +[datasources/alertmanager]: "/docs/grafana/ -> /docs/grafana//datasources/alertmanager" +[datasources/alertmanager]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/connect-externally-hosted/data-sources/alertmanager" -[fundamentals/alertmanager]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/alertmanager" -[fundamentals/alertmanager]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alertmanager" +[intro-alertmanager]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/notifications/alertmanager" +[intro-alertmanager]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/notifications/alertmanager" {{% /docs/reference %}} diff --git a/docs/sources/alerting/configure-notifications/template-notifications/_index.md b/docs/sources/alerting/configure-notifications/template-notifications/_index.md new file mode 100644 index 0000000000000..745f3fc86006e --- /dev/null +++ b/docs/sources/alerting/configure-notifications/template-notifications/_index.md @@ -0,0 +1,65 @@ +--- +aliases: + - ../manage-notifications/template-notifications/ # /docs/grafana//alerting/manage-notifications/template-notifications/ +canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications/template-notifications/ +description: Customize your notifications using notification templates +keywords: + - grafana + - alerting + - notifications + - templates +labels: + products: + - cloud + - enterprise + - oss +title: Configure notification messages +weight: 430 +--- + +# Configure notification messages + +Customize the content of your notifications with notifications templates. + +You can use notification templates to change the title, message, and format of the message in your notifications. + +Notification templates are not tied to specific contact point integrations, such as email or Slack. However, you can choose to create separate notification templates for different contact point integrations. + +You can use notification templates to: + +- Customize the subject of an email or the title of a message. +- Add, change or remove text in notifications. For example, to select or omit certain labels, annotations and links. +- Format text in bold and italic, and add or remove line breaks. + +You cannot use notification templates to: + +- Add HTML and CSS to email notifications to change their visual appearance. +- Change the design of notifications in instant messaging services such as Slack and Microsoft Teams. For example, to add or remove custom blocks with Slack Block Kit or adaptive cards with Microsoft Teams. +- Choose the number and size of images, or where in the notification images are shown. +- Customize the data in webhooks, including the fields or structure of the JSON data or send the data in other formats such as XML. +- Add or remove HTTP headers in webhooks other than those in the contact point configuration. + +[Using Go's templating language][using-go-templating-language] + +Learn how to write the content of your notification templates in Go’s templating language. + +Create reusable notification templates for your contact points. + +[Use notification templates][use-notification-templates] + +Use notification templates to send notifications to your contact points. + +[Reference][reference] + +Data that is available when writing templates. + +{{% docs/reference %}} +[reference]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/template-notifications/reference" +[reference]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/template-notifications/reference" + +[use-notification-templates]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/template-notifications/use-notification-templates" +[use-notification-templates]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/template-notifications/use-notification-templates" + +[using-go-templating-language]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/template-notifications/using-go-templating-language" +[using-go-templating-language]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/template-notifications/using-go-templating-language" +{{% /docs/reference %}} diff --git a/docs/sources/alerting/manage-notifications/template-notifications/create-notification-templates.md b/docs/sources/alerting/configure-notifications/template-notifications/create-notification-templates.md similarity index 96% rename from docs/sources/alerting/manage-notifications/template-notifications/create-notification-templates.md rename to docs/sources/alerting/configure-notifications/template-notifications/create-notification-templates.md index 947556e4e2324..19f7f3a465990 100644 --- a/docs/sources/alerting/manage-notifications/template-notifications/create-notification-templates.md +++ b/docs/sources/alerting/configure-notifications/template-notifications/create-notification-templates.md @@ -1,5 +1,7 @@ --- -canonical: https://grafana.com/docs/grafana/latest/alerting/manage-notifications/template-notifications/create-notification-templates/ +aliases: + - ../../manage-notifications/template-notifications/create-notification-templates/ # /docs/grafana//alerting/manage-notifications/template-notifications/create-notification-templates/ +canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications/template-notifications/create-notification-templates/ description: Create notification templates to sent to your contact points keywords: - grafana diff --git a/docs/sources/alerting/manage-notifications/images-in-notifications.md b/docs/sources/alerting/configure-notifications/template-notifications/images-in-notifications.md similarity index 91% rename from docs/sources/alerting/manage-notifications/images-in-notifications.md rename to docs/sources/alerting/configure-notifications/template-notifications/images-in-notifications.md index 7155814c59c5d..6bd1260213625 100644 --- a/docs/sources/alerting/manage-notifications/images-in-notifications.md +++ b/docs/sources/alerting/configure-notifications/template-notifications/images-in-notifications.md @@ -1,5 +1,7 @@ --- -canonical: https://grafana.com/docs/grafana/latest/alerting/manage-notifications/images-in-notifications/ +aliases: + - ../manage-notifications/images-in-notifications/ # /docs/grafana//alerting/manage-notifications/images-in-notifications/ +canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications/template-notifications/images-in-notifications/ description: Use images in notifications to help users better understand why alerts are firing or have been resolved keywords: - grafana @@ -12,7 +14,7 @@ labels: - enterprise - oss title: Use images in notifications -weight: 405 +weight: 500 --- # Use images in notifications @@ -33,19 +35,19 @@ Refer to the table at the end of this page for a list of contact points and thei ## Requirements -1. To use images in notifications, Grafana must be set up to use [image rendering][image-rendering]. You can either install the image rendering plugin or run it as a remote rendering service. +1. To use images in notifications, Grafana must be set up to use image rendering. You can either install the image rendering plugin or run it as a remote rendering service. 2. When a screenshot is taken it is saved to the [data][paths] folder, even if Grafana is configured to upload screenshots to a cloud storage service. Grafana must have write-access to this folder otherwise screenshots cannot be saved to disk and an error will be logged for each failed screenshot attempt. 3. You should use a cloud storage service unless sending alerts to Discord, Email, Pushover, Slack or Telegram. These integrations support either embedding screenshots in the email or attaching screenshots to the notification, while other integrations must link screenshots uploaded to a cloud storage bucket. If a cloud storage service has been configured then integrations that support both will link screenshots from the cloud storage bucket instead of embedding or attaching screenshots to the notification. -4. If uploading screenshots to a cloud storage service such as Amazon S3, Azure Blob Storage or Google Cloud Storage; and accessing screenshots in the bucket requires authentication, logging into a VPN or corporate network; then image previews might not work in all instant messaging and communication platforms as some services rewrite URLs to use their CDN. If this happens we recommend using [integrations which support uploading images]({{< relref "#supported-contact-points" >}}) or [disabling images in notifications]({{< relref "#configuration" >}}) altogether. +4. If uploading screenshots to a cloud storage service such as Amazon S3, Azure Blob Storage or Google Cloud Storage; and accessing screenshots in the bucket requires authentication, logging into a VPN or corporate network; then image previews might not work in all instant messaging and communication platforms as some services rewrite URLs to use their CDN. If this happens we recommend using [integrations which support uploading images](#supported-contact-points) or [disabling images in notifications](#configuration) altogether. 5. When uploading screenshots to a cloud storage service Grafana uses a random 20 character (30 characters for Azure Blob Storage) filename for each image. This makes URLs hard to guess but not impossible. 6. Grafana does not delete screenshots from cloud storage. We recommend configuring a retention policy with your cloud storage service to delete screenshots older than 1 month. -7. If Grafana is configured to upload screenshots to its internal web server, and accessing Grafana requires logging into a VPN or corporate network; image previews might not work in all instant messaging and communication platforms as some services rewrite URLs to use their CDN. If this happens we recommend using [integrations which support uploading images]({{< relref "#supported-contact-points" >}}) or [disabling images in notifications]({{< relref "#configuration" >}}) altogether. +7. If Grafana is configured to upload screenshots to its internal web server, and accessing Grafana requires logging into a VPN or corporate network; image previews might not work in all instant messaging and communication platforms as some services rewrite URLs to use their CDN. If this happens we recommend using [integrations which support uploading images](#supported-contact-points) or [disabling images in notifications](#configuration) altogether. 8. Grafana does not delete screenshots uploaded to its internal web server. To delete screenshots from `static_root_path/images/attachments` after a certain amount of time we recommend setting up a CRON job. @@ -69,8 +71,6 @@ If screenshots should be uploaded to cloud storage then `upload_external_image_s # will be persisted to disk for up to temp_data_lifetime. upload_external_image_storage = false -For more information on image rendering, refer to [image rendering][image-rendering]. - Restart Grafana for the changes to take effect. ## Advanced configuration @@ -137,11 +137,3 @@ For example, if a screenshot could not be taken within the expected time (10 sec - `grafana_screenshot_successes_total` - `grafana_screenshot_upload_failures_total` - `grafana_screenshot_upload_successes_total` - -{{% docs/reference %}} -[image-rendering]: "/docs/grafana/ -> /docs/grafana//setup-grafana/image-rendering" -[image-rendering]: "/docs/grafana-cloud/ -> /docs/grafana//setup-grafana/image-rendering" - -[paths]: "/docs/grafana/ -> /docs/grafana//setup-grafana/configure-grafana#paths" -[paths]: "/docs/grafana-cloud/ -> /docs/grafana//setup-grafana/configure-grafana#paths" -{{% /docs/reference %}} diff --git a/docs/sources/alerting/manage-notifications/template-notifications/reference.md b/docs/sources/alerting/configure-notifications/template-notifications/reference.md similarity index 95% rename from docs/sources/alerting/manage-notifications/template-notifications/reference.md rename to docs/sources/alerting/configure-notifications/template-notifications/reference.md index 16c26acc6d517..d38e517a4d2c9 100644 --- a/docs/sources/alerting/manage-notifications/template-notifications/reference.md +++ b/docs/sources/alerting/configure-notifications/template-notifications/reference.md @@ -1,5 +1,7 @@ --- -canonical: https://grafana.com/docs/grafana/latest/alerting/manage-notifications/template-notifications/reference/ +aliases: + - ../../manage-notifications/template-notifications/reference/ # /docs/grafana//alerting/manage-notifications/template-notifications/reference/ +canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications/template-notifications/reference/ description: Learn about templating notifications options keywords: - grafana diff --git a/docs/sources/alerting/configure-notifications/template-notifications/use-notification-templates.md b/docs/sources/alerting/configure-notifications/template-notifications/use-notification-templates.md new file mode 100644 index 0000000000000..6dcc4ac35ff9e --- /dev/null +++ b/docs/sources/alerting/configure-notifications/template-notifications/use-notification-templates.md @@ -0,0 +1,45 @@ +--- +aliases: + - ../../manage-notifications/template-notifications/use-notification-templates/ # /docs/grafana//alerting/manage-notifications/template-notifications/use-notification-templates/ +canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications/template-notifications/use-notification-templates/ +description: Use notification templates in contact points to customize your notifications +keywords: + - grafana + - alerting + - notifications + - templates + - use templates +labels: + products: + - cloud + - enterprise + - oss +title: Use notification templates +weight: 300 +--- + +# Use notification templates + +Use templates in contact points to customize your notifications. + +In the Contact points tab, you can see a list of your contact points. + +1. To create a new contact point, click New. + + **Note:** You can edit an existing contact by clicking the Edit icon. + +1. Execute a template from one or more fields such as Message and Subject: + + {{< figure max-width="940px" src="/static/img/docs/alerting/unified/use-notification-template-9-4.png" caption="Use notification template" >}} + + For more information on how to write and execute templates, refer to [Using Go's templating language][using-go-templating-language] and [Create notification templates][create-notification-templates]. + +1. Click **Save contact point**. + +{{% docs/reference %}} +[create-notification-templates]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/template-notifications/create-notification-templates" +[create-notification-templates]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/template-notifications/create-notification-templates" + +[using-go-templating-language]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/template-notifications/using-go-templating-language" +[using-go-templating-language]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/template-notifications/using-go-templating-language" +{{% /docs/reference %}} diff --git a/docs/sources/alerting/manage-notifications/template-notifications/using-go-templating-language.md b/docs/sources/alerting/configure-notifications/template-notifications/using-go-templating-language.md similarity index 88% rename from docs/sources/alerting/manage-notifications/template-notifications/using-go-templating-language.md rename to docs/sources/alerting/configure-notifications/template-notifications/using-go-templating-language.md index 7919b32170e83..8bb0bad2c3e86 100644 --- a/docs/sources/alerting/manage-notifications/template-notifications/using-go-templating-language.md +++ b/docs/sources/alerting/configure-notifications/template-notifications/using-go-templating-language.md @@ -1,5 +1,7 @@ --- -canonical: https://grafana.com/docs/grafana/latest/alerting/manage-notifications/template-notifications/using-go-templating-language/ +aliases: + - ../../manage-notifications/template-notifications/using-go-templating-language/ # /docs/grafana//alerting/manage-notifications/template-notifications/using-go-templating-language/ +canonical: https://grafana.com/docs/grafana/latest/alerting/configure-notifications/template-notifications/using-go-templating-language/ description: Use Go's templating language to create your own notification templates keywords: - grafana @@ -32,7 +34,7 @@ In text/template, templates start with `{{` and end with `}}` irrespective of wh ## Print -To print the value of something use `{{` and `}}`. You can print the value of dot, a field of dot, the result of a function, and the value of a [variable]({{< relref "#variables" >}}). For example, to print the `Alerts` field where dot refers to `ExtendedData` you would write the following: +To print the value of something use `{{` and `}}`. You can print the value of dot, a field of dot, the result of a function, and the value of a [variable](#variables). For example, to print the `Alerts` field where dot refers to `ExtendedData` you would write the following: ``` {{ .Alerts }} @@ -280,12 +282,12 @@ grafana_folder = "Test alerts" ``` {{% docs/reference %}} -[create-notification-templates]: "/docs/grafana/ -> /docs/grafana//alerting/manage-notifications/template-notifications/create-notification-templates" -[create-notification-templates]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/manage-notifications/template-notifications/create-notification-templates" +[create-notification-templates]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/template-notifications/create-notification-templates" +[create-notification-templates]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/template-notifications/create-notification-templates" -[extendeddata]: "/docs/grafana/ -> /docs/grafana//alerting/manage-notifications/template-notifications/reference#extendeddata" -[extendeddata]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/manage-notifications/template-notifications/reference#extendeddata" +[extendeddata]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/template-notifications/reference#extendeddata" +[extendeddata]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/template-notifications/reference#extendeddata" -[reference]: "/docs/grafana/ -> /docs/grafana//alerting/manage-notifications/template-notifications/reference" -[reference]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/manage-notifications/template-notifications/reference" +[reference]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/template-notifications/reference" +[reference]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/template-notifications/reference" {{% /docs/reference %}} diff --git a/docs/sources/alerting/difference-old-new.md b/docs/sources/alerting/difference-old-new.md deleted file mode 100644 index 779a6566c2f5a..0000000000000 --- a/docs/sources/alerting/difference-old-new.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -_build: - list: false -aliases: - - ./unified-alerting/difference-old-new/ # /docs/grafana//alerting/unified-alerting/difference-old-new/ -canonical: https://grafana.com/docs/grafana/latest/alerting/difference-old-new/ -description: Learn about how Grafana Alerting compares to legacy alerting -keywords: - - grafana - - alerting - - guide -labels: - products: - - cloud - - enterprise - - oss -title: Grafana Alerting vs Legacy dashboard alerting -weight: 108 ---- - -# Grafana Alerting vs Legacy dashboard alerting - -Introduced in Grafana 8.0, and the only system since Grafana 10.0, Grafana Alerting has several enhancements over legacy dashboard alerting. - -## Multi-dimensional alerting - -You can now create alerts that give you system-wide visibility with a single alerting rule. Generate multiple alert instances from a single alert rule. For example, you can create a rule to monitor the disk usage of multiple mount points on a single host. The evaluation engine returns multiple time series from a single query, with each time series identified by its label set. - -## Create alerts outside of Dashboards - -Unlike legacy dashboard alerts, Grafana alerts allow you to create queries and expressions that combine data from multiple sources in unique ways. You can still link dashboards and panels to alerting rules using their ID and quickly troubleshoot the system under observation. - -Since unified alerts are no longer directly tied to panel queries, they do not include images or query values in the notification email. You can use customized notification templates to view query values. - -## Create Loki and Grafana Mimir alerting rules - -In Grafana Alerting, you can manage Loki and Grafana Mimir alerting rules using the same UI and API as your Grafana managed alerts. - -## View and search for alerts from Prometheus compatible data sources - -Alerts for Prometheus compatible data sources are now listed under the Grafana alerts section. You can search for labels across multiple data sources to quickly find relevant alerts. - -## Special alerts for alert state NoData and Error - -Grafana Alerting introduced a new concept of the alert states. When evaluation of an alerting rule produces state NoData or Error, Grafana Alerting will generate special alerts that will have the following labels: - -- `alertname` with value DatasourceNoData or DatasourceError depending on the state. -- `rulename` name of the alert rule the special alert belongs to. -- `datasource_uid` will have the UID of the data source that caused the state. -- all labels and annotations of the original alert rule - -You can handle these alerts the same way as regular alerts by adding a silence, route to a contact point, and so on. - -> **Note:** If the rule uses many data sources and one or many returns no data, the special alert will be created for each data source that caused the alert state. diff --git a/docs/sources/alerting/fundamentals/_index.md b/docs/sources/alerting/fundamentals/_index.md index eb228673e6dee..32c1c7cdc8397 100644 --- a/docs/sources/alerting/fundamentals/_index.md +++ b/docs/sources/alerting/fundamentals/_index.md @@ -1,7 +1,7 @@ --- aliases: - - metrics/ - - unified-alerting/fundamentals/ + - ./metrics/ # /docs/grafana//alerting/metrics/ + - ./unified-alerting/fundamentals/ # /docs/grafana//alerting/unified-alerting/fundamentals/ canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/ description: Learn about the fundamentals of Grafana Alerting as well as the key features it offers labels: @@ -18,33 +18,42 @@ weight: 100 Whether you’re just starting out or you're a more experienced user of Grafana Alerting, learn more about the fundamentals and available features that help you create, manage, and respond to alerts; and improve your team’s ability to resolve issues quickly. -## Principles - -In Prometheus-based alerting systems, you have an alert generator that creates alerts and an alert receiver that receives alerts. For example, Prometheus is an alert generator and is responsible for evaluating alert rules, while Alertmanager is an alert receiver and is responsible for grouping, inhibiting, silencing, and sending notifications about firing and resolved alerts. - -Grafana Alerting is built on the Prometheus model of designing alerting systems. It has an internal alert generator responsible for scheduling and evaluating alert rules, as well as an internal alert receiver responsible for grouping, inhibiting, silencing, and sending notifications. Grafana doesn’t use Prometheus as its alert generator because Grafana Alerting needs to work with many other data sources in addition to Prometheus. However, it does use Alertmanager as its alert receiver. - -Alerts are sent to the alert receiver where they are routed, grouped, inhibited, silenced and notified. In Grafana Alerting, the default alert receiver is the Alertmanager embedded inside Grafana, and is referred to as the Grafana Alertmanager. However, you can use other Alertmanagers too, and these are referred to as [External Alertmanagers][external-alertmanagers]. - The following diagram gives you an overview of Grafana Alerting and introduces you to some of the fundamental features that are the principles of how Grafana Alerting works. {{< figure src="/media/docs/alerting/how-alerting-works.png" max-width="750px" caption="How Alerting works" >}} +## How it works at a glance + +- Grafana alerting periodically queries data sources and evaluates the condition defined in the alert rule +- If the condition is breached, an alert instance fires +- Firing instances are routed to notification policies based on matching labels +- Notifications are sent out to the contact points specified in the notification policy + ## Fundamentals +The following concepts are key to your understanding of how Grafana Alerting works. + ### Alert rules -An alert rule is a set of criteria that determine when an alert should fire. It consists of one or more queries and expressions, a condition which needs to be met, an interval which determines how often the alert rule is evaluated, and a duration over which the condition must be met for an alert to fire. +An alert rule consists of one or more queries and expressions that select the data you want to measure. It also contains a condition, which is the threshold that an alert rule must meet or exceed in order to fire. + +Add annotations to your alert rule to provide additional information about the alert rule and add labels to uniquely identify your alert rule and configure alert routing. Labels link alert rules to notification policies, so you can easily manage which policy should handle which alerts and who gets notified. + +Once alert rules are created, they go through various states and transitions. An alert rule can produce multiple alert instances - one alert instance for each time series. -Alert rules are evaluated over their interval, and each alert rule can have zero, one, or any number of alerts firing at a time. The state of the alert rule is determined by its most "severe" alert, which can be one of Normal, Pending, or Firing. For example, if at least one of an alert rule's alerts are firing then the alert rule is also firing. The health of an alert rule is determined by the status of its most recent evaluation. These can be OK, Error, and NoData. +The alert rule state is determined by the “worst case” state of the alert instances produced and the states can be Normal, Pending, or Firing. For example, if one alert instance is firing, the alert rule state will also be firing. -A very important feature of alert rules is that they support custom annotations and labels. These allow you to instrument alerts with additional metadata such as summaries and descriptions, and add additional labels to route alerts to specific notification policies. +The alert rule health is determined by the status of the evaluation of the alert rule, which can be Ok, Error, and NoData. -### Alerts +### Labels and states -Alerts are uniquely identified by sets of key/value pairs called Labels. Each key is a label name and each value is a label value. For example, one alert might have the labels `foo=bar` and another alert might have the labels `foo=baz`. An alert can have many labels such as `foo=bar,bar=baz` but it cannot have the same label twice such as `foo=bar,foo=baz`. Two alerts cannot have the same labels either, and if two alerts have the same labels such as `foo=bar,bar=baz` and `foo=bar,bar=baz` then one of the alerts will be discarded. Alerts are resolved when the condition in the alert rule is no longer met, or the alert rule is deleted. +Alert rules are uniquely identified by sets of key/value pairs called labels. Each key is a label name and each value is a label value. For example, one alert might have the labels `foo=bar` and another alert rule might have the labels `foo=baz`. An alert rule can have many labels such as `foo=bar,bar=baz`, but it cannot have the same label twice such as `foo=bar,foo=baz`. Two alert rules cannot have the same labels either, and if two alert rules have the same labels such as `foo=bar,bar=baz` and `foo=bar,bar=baz` then one of the alerts will be discarded. Firing alerts are resolved when the condition in the alert rule is no longer met, or the alert rule is deleted. -In Grafana Managed Alerts, alerts can be in Normal, Pending, Alerting, No Data or Error states. In Datasource Managed Alerts, such as Mimir and Loki, alerts can be in Normal, Pending and Alerting, but not NoData or Error. +In Grafana-managed alert rules, alert rules can be in Normal, Pending, Alerting, No Data or Error states. In datasource-managed alert rules, such as Mimir and Loki, alert rules can be in Normal, Pending and Alerting, but not NoData or Error. + +### Alert instances + +For Grafana-managed alert rules, multiple alert instances can be created as a result of one alert rule (also known as a multi-dimensional alerting) and they can be in Normal, Pending, Alerting, No Data, Error states. For Mimir or Loki-managed alert rules, alert instances are only created when the threshold condition defined in an alert rule is breached. ### Contact points @@ -68,9 +77,74 @@ Silences and mute timings allow you to pause notifications for specific alerts o You can create your alerting resources (alert rules, notification policies, and so on) in the Grafana UI; configmaps, files and configuration management systems using file-based provisioning; and in Terraform using API-based provisioning. +## Key features and benefits + +**One page for all alerts** + +A single Grafana Alerting page consolidates both Grafana-managed alerts and alerts that reside in your Prometheus-compatible data source in one single place. + +**Multi-dimensional alerts** + +Alert rules can create multiple individual alert instances per alert rule, known as multi-dimensional alerts, giving you the power and flexibility to gain visibility into your entire system with just a single alert rule. You do this by adding labels to your query to specify which component is being monitored and generate multiple alert instances for a single alert rule. For example, if you want to monitor each server in a cluster, a multi-dimensional alert will alert on each CPU, whereas a standard alert will alert on the overall server. + +**Route alerts** + +Route each alert instance to a specific contact point based on labels you define. Notification policies are the set of rules for where, when, and how the alerts are routed to contact points. + +**Silence alerts** + +Silences stop notifications from getting created and last for only a specified window of time. +Silences allow you to stop receiving persistent notifications from one or more alert rules. You can also partially pause an alert based on certain criteria. Silences have their own dedicated section for better organization and visibility, so that you can scan your paused alert rules without cluttering the main alerting view. + +**Mute timings** + +A mute timing is a recurring interval of time when no new notifications for a policy are generated or sent. Use them to prevent alerts from firing a specific and reoccurring period, for example, a regular maintenance period. + +Similar to silences, mute timings do not prevent alert rules from being evaluated, nor do they stop alert instances from being shown in the user interface. They only prevent notifications from being created. + +## Design your Alerting system + +Monitoring complex IT systems and understanding whether everything is up and running correctly is a difficult task. Setting up an effective alert management system is therefore essential to inform you when things are going wrong before they start to impact your business outcomes. + +Designing and configuring an alert management set up that works takes time. + +Here are some tips on how to create an effective alert management set up for your business: + +**Which are the key metrics for your business that you want to monitor and alert on?** + +- Find events that are important to know about and not so trivial or frequent that recipients ignore them. + +- Alerts should only be created for big events that require immediate attention or intervention. + +- Consider quality over quantity. + +**Which type of Alerting do you want to use?** + +- Choose between Grafana-managed Alerting or Grafana Mimir or Loki-managed Alerting; or both. + +**How do you want to organize your alerts and notifications?** + +- Be selective about who you set to receive alerts. Consider sending them to whoever is on call or a specific Slack channel. +- Automate as far as possible using the Alerting API or alerts as code (Terraform). + +**How can you reduce alert fatigue?** + +- Avoid noisy, unnecessary alerts by using silences, mute timings, or pausing alert rule evaluation. +- Continually tune your alert rules to review effectiveness. Remove alert rules to avoid duplication or ineffective alerts. +- Think carefully about priority and severity levels. +- Continually review your thresholds and evaluation rules. + +## Principles + +In Prometheus-based alerting systems, you have an alert generator that creates alerts and an alert receiver that receives alerts. For example, Prometheus is an alert generator and is responsible for evaluating alert rules, while Alertmanager is an alert receiver and is responsible for grouping, inhibiting, silencing, and sending notifications about firing and resolved alerts. + +Grafana Alerting is built on the Prometheus model of designing alerting systems. It has an internal alert generator responsible for scheduling and evaluating alert rules, as well as an internal alert receiver responsible for grouping, inhibiting, silencing, and sending notifications. Grafana doesn’t use Prometheus as its alert generator because Grafana Alerting needs to work with many other data sources in addition to Prometheus. However, it does use Alertmanager as its alert receiver. + +Alerts are sent to the alert receiver where they are routed, grouped, inhibited, silenced and notified. In Grafana Alerting, the default alert receiver is the Alertmanager embedded inside Grafana, and is referred to as the Grafana Alertmanager. However, you can use other Alertmanagers too, and these are referred to as [External Alertmanagers][external-alertmanagers]. + {{% docs/reference %}} -[external-alertmanagers]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/configure-alertmanager" +[external-alertmanagers]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/configure-alertmanager" [external-alertmanagers]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/configure-alertmanager" -[notification-policies]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/notification-policies" -[notification-policies]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/notification-policies" +[notification-policies]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/notifications/notification-policies" +[notification-policies]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/notifications/notification-policies" {{% /docs/reference %}} diff --git a/docs/sources/alerting/fundamentals/alert-rules/_index.md b/docs/sources/alerting/fundamentals/alert-rules/_index.md index ed350a9e98c41..aefd84dd05357 100644 --- a/docs/sources/alerting/fundamentals/alert-rules/_index.md +++ b/docs/sources/alerting/fundamentals/alert-rules/_index.md @@ -1,4 +1,9 @@ --- +aliases: + - ../fundamentals/data-source-alerting/ # /docs/grafana//alerting/fundamentals/data-source-alerting/ + - ../fundamentals/alert-rules/alert-instances/ # /docs/grafana//alerting/fundamentals/alert-rules/alert-instances/ + - ../fundamentals/alert-rules/recording-rules/ # /docs/grafana//alerting/fundamentals/alert-rules/recording-rules/ + - ../fundamentals/alert-rules/alert-rule-types/ # /docs/grafana//alerting/fundamentals/alert-rules/alert-rule-types/ canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/alert-rules/ description: Learn about alert rules keywords: @@ -11,32 +16,115 @@ labels: - enterprise - oss title: Alert rules -weight: 130 +weight: 100 --- # Alert rules -An alert rule is a set of evaluation criteria for when an alert rule should fire. An alert rule consists of one or more queries and expressions, a condition, and the duration over which the condition needs to be met to start firing. +An alert rule is a set of evaluation criteria for when an alert rule should fire. An alert rule consists of one or more [queries and expressions, a condition][queries-and-conditions], and the duration over which the condition needs to be met to start firing. While queries and expressions select the data set to evaluate, a condition sets the threshold that an alert must meet or exceed to create an alert. -An interval specifies how frequently an alerting rule is evaluated. Duration, when configured, indicates how long a condition must be met. The alert rules can also define alerting behavior in the absence of data. +An interval specifies how frequently an [alert rule is evaluated][alert-rule-evaluation]. Duration, when configured, indicates how long a condition must be met. The alert rules can also define alerting behavior in the absence of data. -- [Alert rule types][alert-rule-types] -- [Alert instances][alert-instances] -- [Organising alert rules][organising-alerts] -- [Annotation and labels][annotation-label] +Grafana supports two different alert rule types: [Grafana-managed alert rules](#grafana-managed-alert-rules) and [Data source-managed alert rules](#data-source-managed-alert-rules). + +## Grafana-managed alert rules + +Grafana-managed alert rules are the most flexible alert rule type. They allow you to create alerts that can act on data from any of our supported data sources. + +In addition to supporting multiple data sources, you can also add expressions to transform your data and set alert conditions. Using images in alert notifications is also supported. This is the only type of rule that allows alerting from multiple data sources in a single rule definition. + +The following diagram shows how Grafana-managed alerting works. + +{{< figure src="/media/docs/alerting/grafana-managed-rule.png" max-width="750px" caption="Grafana-managed alerting" >}} + +1. Alert rules are created within Grafana based on one or more data sources. + +1. Alert rules are evaluated by the Alert Rule Evaluation Engine from within Grafana. + +1. Alerts are delivered using the internal Grafana Alertmanager. + + Note that you can also configure alerts to be delivered using an external Alertmanager; or use both internal and external alertmanagers. + +### Supported data sources + +Grafana-managed alert rules can query backend data sources if Grafana Alerting enabled by specifying `{"backend": true, "alerting": true}` in the [plugin.json](/developers/plugin-tools/reference-plugin-json). + +The following data sources are supported: + +- [Enterprise data source plugins](/grafana/plugins/data-source-plugins/?enterprise=1) and others maintained by Grafana such as [AWS Athena](/grafana/plugins/grafana-athena-datasource/), [AWS X-Ray](/grafana/plugins/grafana-x-ray-datasource/), [AWS Redshift](/grafana/plugins/grafana-redshift-datasource/), [AWS Timestream](/grafana/plugins/grafana-timestream-datasource/), [AWS IoT SiteWise](/grafana/plugins/grafana-iot-sitewise-datasource/), [Azure Data Explorer](/grafana/plugins/grafana-azure-data-explorer-datasource/), [Azure Monitor](/grafana/plugins/grafana-azure-monitor-datasource/), [ClickHouse](/grafana/plugins/grafana-clickhouse-datasource/), [Cloudwatch](/grafana/plugins/cloudwatch/), [CSV](/grafana/plugins/marcusolsson-csv-datasource/), [Elasticsearch](/grafana/plugins/elasticsearch/), [Falcon LogScale](/grafana/plugins/grafana-falconlogscale-datasource/), [GitHub](/grafana/plugins/grafana-github-datasource/), [Google BigQuery](/grafana/plugins/grafana-bigquery-datasource/), [Google Cloud Monitoring](/grafana/plugins/stackdriver/), [Graphite](/grafana/plugins/graphite/), [Loki](/grafana/plugins/loki/), [InfluxDB](/grafana/plugins/influxdb/), [Infinity](/grafana/plugins/yesoreyeram-infinity-datasource/), [MSSQL](/grafana/plugins/mssql/), [MySQL](/grafana/plugins/mysql/), [OpenSearch](/grafana/plugins/grafana-opensearch-datasource/), [OpenTSDB](/grafana/plugins/opentsdb/), [Oracle](/grafana/plugins/grafana-oracle-datasource/), [Orbit](/grafana/plugins/grafana-orbit-datasource/), [PostgreSQL](/grafana/plugins/postgres/), [Prometheus](/grafana/plugins/prometheus/), [Sentry](/grafana/plugins/grafana-sentry-datasource/), [SurrealDB](/grafana/plugins/grafana-surrealdb-datasource/), and [TestData](/grafana/plugins/grafana-testdata-datasource/). +- Backend data sources maintained by the [community](/grafana/plugins/data-source-plugins/?signature=community) and [partners](/grafana/plugins/data-source-plugins/?signature=commercial) that enable alerting. + +### Multi-dimensional alerts + +Grafana-managed alerting supports multi-dimensional alerting. Each alert rule can create multiple alert instances. This is exceptionally powerful if you are observing multiple series in a single expression. + +Consider the following PromQL expression: + +```promql +sum by(cpu) ( + rate(node_cpu_seconds_total{mode!="idle"}[1m]) +) +``` + +A rule using this expression will create as many alert instances as the amount of CPUs we are observing after the first evaluation, allowing a single rule to report the status of each CPU. + +{{< figure src="/static/img/docs/alerting/unified/multi-dimensional-alert.png" caption="A multi-dimensional Grafana managed alert rule" >}} + +## Data source-managed alert rules + +To create data source-managed alert rules, you must have a compatible Prometheus or Loki data source. + +You can check if your data source supports rule creation via Grafana by testing the data source and observing if the Ruler API is supported. + +For more information on the Ruler API, refer to [Ruler API](/docs/loki/latest/api/#ruler). + +The following diagram shows how data source-managed alerting works. + +{{< figure src="/media/docs/alerting/loki-mimir-rule.png" max-width="750px" caption="Grafana Mimir/Loki-managed alerting" >}} + +1. Alert rules are created and stored within the data source itself. +1. Alert rules can only be created based on Prometheus data. +1. Alert rule evaluation and delivery is distributed across multiple nodes for high availability and fault tolerance. + +### Recording rules + +A recording rule allows you to pre-compute frequently needed or computationally expensive expressions and save their result as a new set of time series. This is useful if you want to run alerts on aggregated data or if you have dashboards that query computationally expensive expressions repeatedly. + +Querying this new time series is faster, especially for dashboards since they query the same expression every time the dashboards refresh. + +Grafana Enterprise offers an alternative to recorded rules in the form of recorded queries that can be executed against any data source. + +For more information on recording rules, refer to [Create recording rules][create-recording-rules]. + +## Comparison between alert rule types + +When choosing which alert rule type to use, consider the following comparison between Grafana-managed and data source-managed alert rules. + +|
Feature
|
Grafana-managed alert rule
|
Data source-managed alert rule | +| ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Create alert rules based on data from any of our supported data sources | Yes | No: You can only create alert rules that are based on Prometheus data. The data source must have the Ruler API enabled. | +| Mix and match data sources | Yes | No | +| Includes support for recording rules | No | Yes | +| Add expressions to transform your data and set alert conditions | Yes | No | +| Use images in alert notifications | Yes | No | +| Scaling | More resource intensive, depend on the database, and are likely to suffer from transient errors. They only scale vertically. | Store alert rules within the data source itself and allow for “infinite” scaling. Generate and send alert notifications from the location of your data. | +| Alert rule evaluation and delivery | Alert rule evaluation and delivery is done from within Grafana, using an external Alertmanager; or both. | Alert rule evaluation and alert delivery is distributed, meaning there is no single point of failure. | + +**Note:** + +If you are using non-Prometheus data, we recommend choosing Grafana-managed alert rules. Otherwise, choose Grafana Mimir or Grafana Loki alert rules where possible. {{% docs/reference %}} -[alert-instances]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/alert-rules/alert-instances" -[alert-instances]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alert-rules/alert-instances" -[alert-rule-types]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/alert-rules/alert-rule-types" -[alert-rule-types]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alert-rules/alert-rule-types" +[create-recording-rules]: "/docs/grafana/ -> /docs/grafana//alerting/alerting-rules/create-mimir-loki-managed-recording-rule" +[create-recording-rules]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/alerting-rules/create-mimir-loki-managed-recording-rule" + +[alert-rule-evaluation]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/alert-rules/rule-evaluation" +[alert-rule-evaluation]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alert-rules/rule-evaluation" -[annotation-label]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/annotation-label" -[annotation-label]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/annotation-label" +[queries-and-conditions]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/alert-rules/queries-conditions" +[queries-and-conditions]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alert-rules/queries-conditions" -[organising-alerts]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/alert-rules/organising-alerts" -[organising-alerts]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alert-rules/organising-alerts" {{% /docs/reference %}} diff --git a/docs/sources/alerting/fundamentals/alert-rules/alert-instances.md b/docs/sources/alerting/fundamentals/alert-rules/alert-instances.md deleted file mode 100644 index f7a3793c1d476..0000000000000 --- a/docs/sources/alerting/fundamentals/alert-rules/alert-instances.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/alert-rules/alert-instances/ -description: Learn about alert instances -keywords: - - grafana - - alerting - - instances -labels: - products: - - cloud - - enterprise - - oss -title: Alert instances -weight: 105 ---- - -# Alert instances - -Grafana managed alerts support multi-dimensional alerting. Each alert rule can create multiple alert instances. This is exceptionally powerful if you are observing multiple series in a single expression. - -Consider the following PromQL expression: - -```promql -sum by(cpu) ( - rate(node_cpu_seconds_total{mode!="idle"}[1m]) -) -``` - -A rule using this expression will create as many alert instances as the amount of CPUs we are observing after the first evaluation, allowing a single rule to report the status of each CPU. - -{{< figure src="/static/img/docs/alerting/unified/multi-dimensional-alert.png" caption="A multi-dimensional Grafana managed alert rule" >}} diff --git a/docs/sources/alerting/fundamentals/alert-rules/alert-rule-types.md b/docs/sources/alerting/fundamentals/alert-rules/alert-rule-types.md deleted file mode 100644 index dd25109c20d8c..0000000000000 --- a/docs/sources/alerting/fundamentals/alert-rules/alert-rule-types.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/alert-rules/alert-rule-types/ -description: Learn about the different alert rule types that Grafana Alerting supports -keywords: - - grafana - - alerting - - rule types -labels: - products: - - cloud - - enterprise - - oss -title: Alert rule types -weight: 102 ---- - -# Alert rule types - -Grafana supports two different alert rule types. Learn more about each of the alert rule types, how they work, and decide which one is best for your use case. - -## Grafana-managed alert rules - -Grafana-managed alert rules are the most flexible alert rule type. They allow you to create alerts that can act on data from any of our supported data sources. - -In addition to supporting multiple data sources, you can also add expressions to transform your data and set alert conditions. Using images in alert notifications is also supported. This is the only type of rule that allows alerting from multiple data sources in a single rule definition. - -The following diagram shows how Grafana-managed alerting works. - -{{< figure src="/media/docs/alerting/grafana-managed-rule.png" max-width="750px" caption="Grafana-managed alerting" >}} - -1. Alert rules are created within Grafana based on one or more data sources. - -1. Alert rules are evaluated by the Alert Rule Evaluation Engine from within Grafana. - -1. Alerts are delivered using the internal Grafana Alertmanager. - -**Note:** - -You can also configure alerts to be delivered using an external Alertmanager; or use both internal and external alertmanagers. -For more information, see Add an external Alertmanager. - -## Data source-managed alert rules - -To create data source-managed alert rules, you must have a compatible Prometheus or Loki data source. - -You can check if your data source supports rule creation via Grafana by testing the data source and observing if the Ruler API is supported. - -For more information on the Ruler API, refer to [Ruler API](/docs/loki/latest/api/#ruler). - -The following diagram shows how data source-managed alerting works. - -{{< figure src="/media/docs/alerting/loki-mimir-rule.png" max-width="750px" caption="Grafana Mimir/Loki-managed alerting" >}} - -1. Alert rules are created and stored within the data source itself. -1. Alert rules can only be created based on Prometheus data. -1. Alert rule evaluation and delivery is distributed across multiple nodes for high availability and fault tolerance. - -## Choose an alert rule type - -When choosing which alert rule type to use, consider the following comparison between Grafana-managed alert rules and Grafana Mimir or Loki alert rules. - -{{< responsive-table >}} -|
Feature
|
Grafana-managed alert rule
|
Loki/Mimir-managed alert rule | -| ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Create alert rules based on data from any of our supported data sources | Yes | No: You can only create alert rules that are based on Prometheus data. The data source must have the Ruler API enabled. | -| Mix and match data sources | Yes | No | -| Includes support for recording rules | No | Yes | -| Add expressions to transform your data and set alert conditions | Yes | No | -| Use images in alert notifications | Yes | No | -| Scaling | More resource intensive, depend on the database, and are likely to suffer from transient errors. They only scale vertically. | Store alert rules within the data source itself and allow for “infinite” scaling. Generate and send alert notifications from the location of your data. | -| Alert rule evaluation and delivery | Alert rule evaluation and delivery is done from within Grafana, using an external Alertmanager; or both. | Alert rule evaluation and alert delivery is distributed, meaning there is no single point of failure. | - -{{< /responsive-table >}} - -**Note:** - -If you are using non-Prometheus data, we recommend choosing Grafana-managed alert rules. Otherwise, choose Grafana Mimir or Grafana Loki alert rules where possible. diff --git a/docs/sources/alerting/fundamentals/alert-rules/annotation-label.md b/docs/sources/alerting/fundamentals/alert-rules/annotation-label.md new file mode 100644 index 0000000000000..05eeffcdf5cdf --- /dev/null +++ b/docs/sources/alerting/fundamentals/alert-rules/annotation-label.md @@ -0,0 +1,141 @@ +--- +aliases: + - ../../fundamentals/annotation-label/ # /docs/grafana//alerting/fundamentals/annotation-label/ + - ../../fundamentals/annotation-label/labels-and-label-matchers/ # /docs/grafana//alerting/fundamentals/annotation-label/labels-and-label-matchers/ + - ../../fundamentals/annotation-label/how-to-use-labels/ # /docs/grafana//alerting/fundamentals/annotation-label/how-to-use-labels/ + - ../../alerting-rules/alert-annotation-label/ # /docs/grafana//alerting/alerting-rules/alert-annotation-label/ + - ../../unified-alerting/alerting-rules/alert-annotation-label/ # /docs/grafana//alerting/unified-alerting/alerting-rules/alert-annotation-label/ +canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/alert-rules/annotation-label/ +description: Learn how to use annotations and labels to store key information about alerts +keywords: + - grafana + - alerting + - guide + - rules + - create +labels: + products: + - cloud + - enterprise + - oss +title: Labels and annotations +weight: 105 +--- + +# Labels and annotations + +Labels and annotations contain information about an alert. Labels are used to differentiate an alert from all other alerts, while annotations are used to add additional information to an existing alert. + +## Labels + +Labels contain information that identifies an alert. An example of a label might be `server=server1` or `team=backend`. Each alert can have more than one label, and the complete set of labels for an alert is called its label set. It is this label set that identifies the alert. + +For example, an alert might have the label set `{alertname="High CPU usage",server="server1"}` while another alert might have the label set `{alertname="High CPU usage",server="server2"}`. These are two separate alerts because although their `alertname` labels are the same, their `server` labels are different. + +Labels are a fundamental component of alerting: + +- The complete set of labels for an alert is what uniquely identifies an alert within Grafana alerts. +- The alerting UI shows labels for every alert instance generated during evaluation of that rule. +- Contact points can access labels to send notification messages that contain specific alert information. +- The Alertmanager uses labels to match alerts for silences and alert groups in notification policies. + +### How label matching works + +Use labels and label matchers to link alert rules to notification policies and silences. This allows for a flexible way to manage your alert instances, specify which policy should handle them, and which alerts to silence. + +A label matchers consists of 3 distinct parts, the **label**, the **value** and the **operator**. + +- The **Label** field is the name of the label to match. It must exactly match the label name. + +- The **Value** field matches against the corresponding value for the specified **Label** name. How it matches depends on the **Operator** value. + +- The **Operator** field is the operator to match against the label value. The available operators are: + + | Operator | Description | + | -------- | -------------------------------------------------- | + | `=` | Select labels that are exactly equal to the value. | + | `!=` | Select labels that are not equal to the value. | + | `=~` | Select labels that regex-match the value. | + | `!~` | Select labels that do not regex-match the value. | + +If you are using multiple label matchers, they are combined using the AND logical operator. This means that all matchers must match in order to link a rule to a policy. + +{{< collapse title="Label matching example" >}} + +If you define the following set of labels for your alert: + +`{ foo=bar, baz=qux, id=12 }` + +then: + +- A label matcher defined as `foo=bar` matches this alert rule. +- A label matcher defined as `foo!=bar` does _not_ match this alert rule. +- A label matcher defined as `id=~[0-9]+` matches this alert rule. +- A label matcher defined as `baz!~[0-9]+` matches this alert rule. +- Two label matchers defined as `foo=bar` and `id=~[0-9]+` match this alert rule. + +**Exclude labels** + +You can also write label matchers to exclude labels. + +Here is an example that shows how to exclude the label `Team`. You can choose between any of the values below to exclude labels. + +| Label | Operator | Value | +| ------ | -------- | ----- | +| `team` | `=` | `""` | +| `team` | `!~` | `.+` | +| `team` | `=~` | `^$` | + +{{< /collapse >}} + +## Label types + +An alert's label set can contain three types of labels: + +- Labels from the datasource, +- Custom labels specified in the alert rule, +- A series of reserved labels, such as `alertname` or `grafana_folder`. + +### Custom Labels + +Custom labels are additional labels configured manually in the alert rule. + +Ensure the label set for an alert does not have two or more labels with the same name. If a custom label has the same name as a label from the datasource then it will replace that label. However, should a custom label have the same name as a reserved label then the custom label will be omitted from the alert. + +{{< collapse title="Key format" >}} + +Grafana's built-in Alertmanager supports both Unicode label keys and values. If you are using an external Prometheus Alertmanager, label keys must be compatible with their [data model](https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels). +This means that label keys must only contain **ASCII letters**, **numbers**, as well as **underscores** and match the regex `[a-zA-Z_][a-zA-Z0-9_]*`. +Any invalid characters will be removed or replaced by the Grafana alerting engine before being sent to the external Alertmanager according to the following rules: + +- `Whitespace` will be removed. +- `ASCII characters` will be replaced with `_`. +- `All other characters` will be replaced with their lower-case hex representation. If this is the first character it will be prefixed with `_`. + +Example: A label key/value pair `Alert! 🔔="🔥"` will become `Alert_0x1f514="🔥"`. + +If multiple label keys are sanitized to the same value, the duplicates will have a short hash of the original label appended as a suffix. + +{{< /collapse >}} + +### Reserved labels + +Reserved labels can be used in the same way as manually configured custom labels. The current list of available reserved labels are: + +| Label | Description | +| -------------- | ----------------------------------------- | +| alert_name | The name of the alert rule. | +| grafana_folder | Title of the folder containing the alert. | + +Labels prefixed with `grafana_` are reserved by Grafana for special use. To stop Grafana Alerting from adding a reserved label, you can disable it via the `disabled_labels` option in [unified_alerting.reserved_labels](/docs/grafana//setup-grafana/configure-grafana#unified_alertingreserved_labels) configuration. + +## Annotations + +Both labels and annotations have the same structure: a set of named values; however their intended uses are different. The purpose of annotations is to add additional information to existing alerts. + +There are a number of suggested annotations in Grafana such as `description`, `summary`, `runbook_url`, `dashboardUId` and `panelId`. Like custom labels, annotations must have a name, and their value can contain a combination of text and template code that is evaluated when an alert is fired. + +{{% docs/reference %}} +[variables-label-annotation]: "/docs/grafana/ -> /docs/grafana//alerting/alerting-rules/templating-labels-annotations" +[variables-label-annotation]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/alerting-rules/templating-labels-annotations" +{{% /docs/reference %}} diff --git a/docs/sources/alerting/fundamentals/alert-rules/organising-alerts.md b/docs/sources/alerting/fundamentals/alert-rules/organising-alerts.md index 7952929c8526c..09113a1622e2c 100644 --- a/docs/sources/alerting/fundamentals/alert-rules/organising-alerts.md +++ b/docs/sources/alerting/fundamentals/alert-rules/organising-alerts.md @@ -1,7 +1,7 @@ --- aliases: - - ../unified-alerting/alerting-rules/edit-cortex-loki-namespace-group/ - - ../unified-alerting/alerting-rules/edit-mimir-loki-namespace-group/ + - ../../unified-alerting/alerting-rules/edit-cortex-loki-namespace-group/ # /docs/grafana//alerting/unified-alerting/alerting-rules/edit-cortex-loki-namespace-group/ + - ../../unified-alerting/alerting-rules/edit-mimir-loki-namespace-group/ # /docs/grafana//alerting/unified-alerting/alerting-rules/edit-mimir-loki-namespace-group/ canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/alert-rules/organising-alerts/ description: Learn about organizing alerts using namespaces, folders, and groups keywords: @@ -14,7 +14,7 @@ labels: - enterprise - oss title: Namespaces, folders, and groups -weight: 105 +weight: 107 --- ## Namespaces, folders, and groups diff --git a/docs/sources/alerting/fundamentals/alert-rules/queries-conditions.md b/docs/sources/alerting/fundamentals/alert-rules/queries-conditions.md new file mode 100644 index 0000000000000..41e0f2d2101b4 --- /dev/null +++ b/docs/sources/alerting/fundamentals/alert-rules/queries-conditions.md @@ -0,0 +1,221 @@ +--- +aliases: + - ../../fundamentals/evaluate-grafana-alerts/ # /docs/grafana//alerting/fundamentals/evaluate-grafana-alerts/ + - ../../unified-alerting/fundamentals/evaluate-grafana-alerts/ # /docs/grafana//alerting/unified-alerting/fundamentals/evaluate-grafana-alerts/ +canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/alert-rules/queries-conditions/ +description: Define queries to get the data you want to measure and conditions that need to be met before an alert rule fires +keywords: + - grafana + - alerting + - queries + - conditions +labels: + products: + - cloud + - enterprise + - oss +title: Queries and conditions +weight: 104 +--- + +# Queries and conditions + +In Grafana, queries play a vital role in fetching and transforming data from supported data sources, which include databases like MySQL and PostgreSQL, time series databases like Prometheus, InfluxDB and Graphite, and services like Elasticsearch, AWS CloudWatch, Azure Monitor and Google Cloud Monitoring. + +For more information on supported data sources, see [Data sources][data-source-alerting]. + +The process of executing a query involves defining the data source, specifying the desired data to retrieve, and applying relevant filters or transformations. Query languages or syntaxes specific to the chosen data source are utilized for constructing these queries. + +In Alerting, you define a query to get the data you want to measure and a condition that needs to be met before an alert rule fires. + +An alert rule consists of one or more queries and expressions that select the data you want to measure. + +For more information on queries and expressions, see [Query and transform data][query-transform-data]. + +## Data source queries + +Queries in Grafana can be applied in various ways, depending on the data source and query language being used. Each data source’s query editor provides a customized user interface that helps you write queries that take advantage of its unique capabilities. + +Because of the differences between query languages, each data source query editor looks and functions differently. Depending on your data source, the query editor might provide auto-completion features, metric names, variable suggestions, or a visual query-building interface. + +Some common types of query components include: + +**Metrics or data fields**: Specify the specific metrics or data fields you want to retrieve, such as CPU usage, network traffic, or sensor readings. + +**Time range**: Define the time range for which you want to fetch data, such as the last hour, a specific day, or a custom time range. + +**Filters**: Apply filters to narrow down the data based on specific criteria, such as filtering data by a specific tag, host, or application. + +**Aggregations**: Perform aggregations on the data to calculate metrics like averages, sums, or counts over a given time period. + +**Grouping**: Group the data by specific dimensions or tags to create aggregated views or breakdowns. + +**Note**: + +Grafana does not support alert queries with template variables. More information is available [here](https://community.grafana.com/t/template-variables-are-not-supported-in-alert-queries-while-setting-up-alert/2514). + +## Expression queries + +In Grafana, an expression is used to perform calculations, transformations, or aggregations on the data source queried data. It allows you to create custom metrics or modify existing metrics based on mathematical operations, functions, or logical expressions. + +By leveraging expression queries, users can perform tasks such as calculating the percentage change between two values, applying functions like logarithmic or trigonometric functions, aggregating data over specific time ranges or dimensions, and implementing conditional logic to handle different scenarios. + +In Alerting, you can only use expressions for Grafana-managed alert rules. For each expression, you can choose from the math, reduce, and resample expressions. These are called multi-dimensional rules, because they generate a separate alert for each series. + +You can also use classic condition, which creates an alert rule that triggers a single alert when its condition is met. As a result, Grafana sends only a single alert even when alert conditions are met for multiple series. + +**Note:** + +Classic conditions exist mainly for compatibility reasons and should be avoided if possible. + +**Reduce** + +Aggregates time series values in the selected time range into a single value. + +**Math** + +Performs free-form math functions/operations on time series and number data. Can be used to preprocess time series data or to define an alert condition for number data. + +**Resample** + +Realigns a time range to a new set of timestamps, this is useful when comparing time series data from different data sources where the timestamps would otherwise not align. + +**Threshold** + +Checks if any time series data matches the threshold condition. + +The threshold expression allows you to compare two single values. It returns `0` when the condition is false and `1` if the condition is true. The following threshold functions are available: + +- Is above (x > y) +- Is below (x < y) +- Is within range (x > y1 AND x < y2) +- Is outside range (x < y1 AND x > y2) + +**Classic condition** + +Checks if any time series data matches the alert condition. + +**Note**: + +Classic condition expression queries always produce one alert instance only, no matter how many time series meet the condition. +Classic conditions exist mainly for compatibility reasons and should be avoided if possible. + +## Aggregations + +Grafana Alerting provides the following aggregation functions to enable you to further refine your query. + +These functions are available for **Reduce** and **Classic condition** expressions only. + +| Function | Expression | What it does | +| ---------------- | ---------------- | ------------------------------------------------------------------------------- | +| avg | Reduce / Classic | Displays the average of the values | +| min | Reduce / Classic | Displays the lowest value | +| max | Reduce / Classic | Displays the highest value | +| sum | Reduce / Classic | Displays the sum of all values | +| count | Reduce / Classic | Counts the number of values in the result | +| last | Reduce / Classic | Displays the last value | +| median | Reduce / Classic | Displays the median value | +| diff | Classic | Displays the difference between the newest and oldest value | +| diff_abs | Classic | Displays the absolute value of diff | +| percent_diff | Classic | Displays the percentage value of the difference between newest and oldest value | +| percent_diff_abs | Classic | Displays the absolute value of percent_diff | +| count_non_null | Classic | Displays a count of values in the result set that aren't `null` | + +## Alert condition + +An alert condition is the query or expression that determines whether the alert will fire or not depending on the value it yields. There can be only one condition which will determine the triggering of the alert. + +After you have defined your queries and/or expressions, choose one of them as the alert rule condition. + +When the queried data satisfies the defined condition, Grafana triggers the associated alert, which can be configured to send notifications through various channels like email, Slack, or PagerDuty. The notifications inform you about the condition being met, allowing you to take appropriate actions or investigate the underlying issue. + +By default, the last expression added is used as the alert condition. + +## Recovery threshold + +{{% admonition type="note" %}} +The recovery threshold feature is currently only available in OSS. +{{% /admonition %}} + +To reduce the noise of flapping alerts, you can set a recovery threshold different to the alert threshold. + +Flapping alerts occur when a metric hovers around the alert threshold condition and may lead to frequent state changes, resulting in too many notifications being generated. + +Grafana-managed alert rules are evaluated for a specific interval of time. During each evaluation, the result of the query is checked against the threshold set in the alert rule. If the value of a metric is above the threshold, an alert rule fires and a notification is sent. When the value goes below the threshold and there is an active alert for this metric, the alert is resolved, and another notification is sent. + +It can be tricky to create an alert rule for a noisy metric. That is, when the value of a metric continually goes above and below a threshold. This is called flapping and results in a series of firing - resolved - firing notifications and a noisy alert state history. + +For example, if you have an alert for latency with a threshold of 1000ms and the number fluctuates around 1000 (say 980 ->1010 -> 990 -> 1020, and so on) then each of those will trigger a notification. + +To solve this problem, you can set a (custom) recovery threshold, which basically means having two thresholds instead of one. An alert is triggered when the first threshold is crossed and is resolved only when the second threshold is crossed. + +For example, you could set a threshold of 1000ms and a recovery threshold of 900ms. This way, an alert rule will only stop firing when it goes under 900ms and flapping is reduced. + +## Alert on numeric data + +Among certain data sources numeric data that is not time series can be directly alerted on, or passed into Server Side Expressions (SSE). This allows for more processing and resulting efficiency within the data source, and it can also simplify alert rules. +When alerting on numeric data instead of time series data, there is no need to reduce each labeled time series into a single number. Instead labeled numbers are returned to Grafana instead. + +### Tabular Data + +This feature is supported with backend data sources that query tabular data: + +- SQL data sources such as MySQL, Postgres, MSSQL, and Oracle. +- The Azure Kusto based services: Azure Monitor (Logs), Azure Monitor (Azure Resource Graph), and Azure Data Explorer. + +A query with Grafana managed alerts or SSE is considered numeric with these data sources, if: + +- The "Format AS" option is set to "Table" in the data source query. +- The table response returned to Grafana from the query includes only one numeric (e.g. int, double, float) column, and optionally additional string columns. + +If there are string columns then those columns become labels. The name of column becomes the label name, and the value for each row becomes the value of the corresponding label. If multiple rows are returned, then each row should be uniquely identified their labels. + +**Example** + +For a MySQL table called "DiskSpace": + +| Time | Host | Disk | PercentFree | +| ----------- | ---- | ---- | ----------- | +| 2021-June-7 | web1 | /etc | 3 | +| 2021-June-7 | web2 | /var | 4 | +| 2021-June-7 | web3 | /var | 8 | +| ... | ... | ... | ... | + +You can query the data filtering on time, but without returning the time series to Grafana. For example, an alert that would trigger per Host, Disk when there is less than 5% free space: + +```sql +SELECT Host, Disk, CASE WHEN PercentFree < 5.0 THEN PercentFree ELSE 0 END FROM ( + SELECT + Host, + Disk, + Avg(PercentFree) + FROM DiskSpace + Group By + Host, + Disk + Where __timeFilter(Time) +``` + +This query returns the following Table response to Grafana: + +| Host | Disk | PercentFree | +| ---- | ---- | ----------- | +| web1 | /etc | 3 | +| web2 | /var | 4 | +| web3 | /var | 0 | + +When this query is used as the **condition** in an alert rule, then the non-zero will be alerting. As a result, three alert instances are produced: + +| Labels | Status | +| --------------------- | -------- | +| {Host=web1,disk=/etc} | Alerting | +| {Host=web2,disk=/var} | Alerting | +| {Host=web3,disk=/var} | Normal | + +{{% docs/reference %}} +[data-source-alerting]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/alert-rules#supported-data-sources" +[data-source-alerting]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alert-rules#supported-data-sources" + +[query-transform-data]: "/docs/grafana/ -> /docs/grafana//panels-visualizations/query-transform-data" +[query-transform-data]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/panels-visualizations/query-transform-data" +{{% /docs/reference %}} diff --git a/docs/sources/alerting/fundamentals/alert-rules/queries-conditions/_index.md b/docs/sources/alerting/fundamentals/alert-rules/queries-conditions/_index.md deleted file mode 100644 index 4dc1385bf4858..0000000000000 --- a/docs/sources/alerting/fundamentals/alert-rules/queries-conditions/_index.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/alert-rules/queries-conditions/ -description: Define queries to get the data you want to measure and conditions that need to be met before an alert rule fires -keywords: - - grafana - - alerting - - queries - - conditions -labels: - products: - - cloud - - enterprise - - oss -title: Queries and conditions -weight: 104 ---- - -# Queries and conditions - -In Grafana, queries play a vital role in fetching and transforming data from supported data sources, which include databases like MySQL and PostgreSQL, time series databases like Prometheus, InfluxDB and Graphite, and services like Elasticsearch, AWS CloudWatch, Azure Monitor and Google Cloud Monitoring. - -For more information on supported data sources, see [Data sources][data-source-alerting]. - -The process of executing a query involves defining the data source, specifying the desired data to retrieve, and applying relevant filters or transformations. Query languages or syntaxes specific to the chosen data source are utilized for constructing these queries. - -In Alerting, you define a query to get the data you want to measure and a condition that needs to be met before an alert rule fires. - -An alert rule consists of one or more queries and expressions that select the data you want to measure. - -For more information on queries and expressions, see [Query and transform data][query-transform-data]. - -## Data source queries - -Queries in Grafana can be applied in various ways, depending on the data source and query language being used. Each data source’s query editor provides a customized user interface that helps you write queries that take advantage of its unique capabilities. - -Because of the differences between query languages, each data source query editor looks and functions differently. Depending on your data source, the query editor might provide auto-completion features, metric names, variable suggestions, or a visual query-building interface. - -Some common types of query components include: - -**Metrics or data fields**: Specify the specific metrics or data fields you want to retrieve, such as CPU usage, network traffic, or sensor readings. - -**Time range**: Define the time range for which you want to fetch data, such as the last hour, a specific day, or a custom time range. - -**Filters**: Apply filters to narrow down the data based on specific criteria, such as filtering data by a specific tag, host, or application. - -**Aggregations**: Perform aggregations on the data to calculate metrics like averages, sums, or counts over a given time period. - -**Grouping**: Group the data by specific dimensions or tags to create aggregated views or breakdowns. - -**Note**: - -Grafana does not support alert queries with template variables. More information is available [here](https://community.grafana.com/t/template-variables-are-not-supported-in-alert-queries-while-setting-up-alert/2514). - -## Expression queries - -In Grafana, an expression is used to perform calculations, transformations, or aggregations on the data source queried data. It allows you to create custom metrics or modify existing metrics based on mathematical operations, functions, or logical expressions. - -By leveraging expression queries, users can perform tasks such as calculating the percentage change between two values, applying functions like logarithmic or trigonometric functions, aggregating data over specific time ranges or dimensions, and implementing conditional logic to handle different scenarios. - -In Alerting, you can only use expressions for Grafana-managed alert rules. For each expression, you can choose from the math, reduce, and resample expressions. These are called multi-dimensional rules, because they generate a separate alert for each series. - -You can also use classic condition, which creates an alert rule that triggers a single alert when its condition is met. As a result, Grafana sends only a single alert even when alert conditions are met for multiple series. - -**Note:** - -Classic conditions exist mainly for compatibility reasons and should be avoided if possible. - -**Reduce** - -Aggregates time series values in the selected time range into a single value. - -**Math** - -Performs free-form math functions/operations on time series and number data. Can be used to preprocess time series data or to define an alert condition for number data. - -**Resample** - -Realigns a time range to a new set of timestamps, this is useful when comparing time series data from different data sources where the timestamps would otherwise not align. - -**Threshold** - -Checks if any time series data matches the threshold condition. - -The threshold expression allows you to compare two single values. It returns `0` when the condition is false and `1` if the condition is true. The following threshold functions are available: - -- Is above (x > y) -- Is below (x < y) -- Is within range (x > y1 AND x < y2) -- Is outside range (x < y1 AND x > y2) - -**Classic condition** - -Checks if any time series data matches the alert condition. - -**Note**: - -Classic condition expression queries always produce one alert instance only, no matter how many time series meet the condition. -Classic conditions exist mainly for compatibility reasons and should be avoided if possible. - -## Aggregations - -Grafana Alerting provides the following aggregation functions to enable you to further refine your query. - -These functions are available for **Reduce** and **Classic condition** expressions only. - -| Function | Expression | What it does | -| ---------------- | ---------------- | ------------------------------------------------------------------------------- | -| avg | Reduce / Classic | Displays the average of the values | -| min | Reduce / Classic | Displays the lowest value | -| max | Reduce / Classic | Displays the highest value | -| sum | Reduce / Classic | Displays the sum of all values | -| count | Reduce / Classic | Counts the number of values in the result | -| last | Reduce / Classic | Displays the last value | -| median | Reduce / Classic | Displays the median value | -| diff | Classic | Displays the difference between the newest and oldest value | -| diff_abs | Classic | Displays the absolute value of diff | -| percent_diff | Classic | Displays the percentage value of the difference between newest and oldest value | -| percent_diff_abs | Classic | Displays the absolute value of percent_diff | -| count_non_null | Classic | Displays a count of values in the result set that aren't `null` | - -## Alert condition - -An alert condition is the query or expression that determines whether the alert will fire or not depending on the value it yields. There can be only one condition which will determine the triggering of the alert. - -After you have defined your queries and/or expressions, choose one of them as the alert rule condition. - -When the queried data satisfies the defined condition, Grafana triggers the associated alert, which can be configured to send notifications through various channels like email, Slack, or PagerDuty. The notifications inform you about the condition being met, allowing you to take appropriate actions or investigate the underlying issue. - -By default, the last expression added is used as the alert condition. - -{{% docs/reference %}} -[data-source-alerting]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/data-source-alerting" -[data-source-alerting]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/data-source-alerting" - -[query-transform-data]: "/docs/grafana/ -> /docs/grafana//panels-visualizations/query-transform-data" -[query-transform-data]: "/docs/grafana-cloud/ -> /docs/grafana//panels-visualizations/query-transform-data" -{{% /docs/reference %}} diff --git a/docs/sources/alerting/fundamentals/alert-rules/recording-rules/_index.md b/docs/sources/alerting/fundamentals/alert-rules/recording-rules/_index.md deleted file mode 100644 index 3065ca9408664..0000000000000 --- a/docs/sources/alerting/fundamentals/alert-rules/recording-rules/_index.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/alert-rules/recording-rules/ -description: Create recording rules to pre-compute frequently needed or computationally expensive expressions and save the result as a new set of time series -keywords: - - grafana - - alerting - - recording rules -labels: - products: - - cloud - - enterprise - - oss -title: Recording rules -weight: 103 ---- - -# Recording rules - -_Recording rules are only available for compatible Prometheus or Loki data sources._ - -A recording rule allows you to pre-compute frequently needed or computationally expensive expressions and save their result as a new set of time series. This is useful if you want to run alerts on aggregated data or if you have dashboards that query computationally expensive expressions repeatedly. - -Querying this new time series is faster, especially for dashboards since they query the same expression every time the dashboards refresh. - -Grafana Enterprise offers an alternative to recorded rules in the form of recorded queries that can be executed against any data source. - -For more information on recording rules in Prometheus, refer to [recording rules](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/). diff --git a/docs/sources/alerting/fundamentals/alert-rules/rule-evaluation.md b/docs/sources/alerting/fundamentals/alert-rules/rule-evaluation.md new file mode 100644 index 0000000000000..a34a508601c7f --- /dev/null +++ b/docs/sources/alerting/fundamentals/alert-rules/rule-evaluation.md @@ -0,0 +1,72 @@ +--- +canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/alert-rules/rule-evaluation/ +description: Use alert rule evaluation to determine how frequently an alert rule should be evaluated and how quickly it should change its state +keywords: + - grafana + - alerting + - evaluation +labels: + products: + - cloud + - enterprise + - oss +title: Alert rule evaluation +weight: 108 +--- + +# Alert rule evaluation + +Use alert rule evaluation to determine how frequently an alert rule should be evaluated and how quickly it should change its state. + +To do this, you need to make sure that your alert rule is in the right evaluation group and set a pending period time that works best for your use case. + +## Evaluation group + +Every alert rule is part of an evaluation group. Each evaluation group contains an evaluation interval that determines how frequently the alert rule is checked. + +**Data-source managed** alert rules within the same group are evaluated one after the other, while alert rules in different groups can be evaluated simultaneously. This feature is especially useful when you want to ensure that recording rules are evaluated before any alert rules. + +**Grafana-managed** alert rules are evaluated at the same time, regardless of alert rule group. The default evaluation interval is set at 10 seconds, which means that Grafana-managed alert rules are evaluated every 10 seconds to the closest 10-second window on the clock, for example, 10:00:00, 10:00:10, 10:00:20, and so on. You can also configure your own evaluation interval, if required. + +**Note:** + +Evaluation groups and alerts grouping in notification policies are two separate things. Grouping in notification policies allows multiple alerts sharing the same labels to be sent in the same time message. + +## Pending period + +By setting a pending period, you can avoid unnecessary alerts for temporary problems. + +In the pending period, you select the period in which an alert rule can be in breach of the condition until it fires. + +**Example** + +Imagine you have an alert rule evaluation interval set at every 30 seconds and the pending period to 90 seconds. + +Evaluation will occur as follows: + +[00:30] First evaluation - condition not met. + +[01:00] Second evaluation - condition breached. +Pending counter starts. **Alert starts pending.** + +[01:30] Third evaluation - condition breached. Pending counter = 30s. **Pending state.** + +[02:00] Fourth evaluation - condition breached. Pending counter = 60s **Pending state.** + +[02:30] Fifth evaluation - condition breached. Pending counter = 90s. **Alert starts firing** + +If the alert rule has a condition that needs to be in breach for a certain amount of time before it takes action, then its state changes as follows: + +- When the condition is first breached, the rule goes into a "pending" state. + +- The rule stays in the "pending" state until the condition has been broken for the required amount of time - pending period. + +- Once the required time has passed, the rule goes into a "firing" state. + +- If the condition is no longer broken during the pending period, the rule goes back to its normal state. + +**Note:** + +If you want to skip the pending state, you can simply set the pending period to 0. This effectively skips the pending period and your alert rule will start firing as soon as the condition is breached. + +When an alert rule fires, alert instances are produced, which are then sent to the Alertmanager. diff --git a/docs/sources/alerting/fundamentals/alert-rules/rule-evaluation/_index.md b/docs/sources/alerting/fundamentals/alert-rules/rule-evaluation/_index.md deleted file mode 100644 index e27bdbbf79d8f..0000000000000 --- a/docs/sources/alerting/fundamentals/alert-rules/rule-evaluation/_index.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/alert-rules/rule-evaluation/ -description: Use alert rule evaluation to determine how frequently an alert rule should be evaluated and how quickly it should change its state -keywords: - - grafana - - alerting - - evaluation -labels: - products: - - cloud - - enterprise - - oss -title: Alert rule evaluation -weight: 106 ---- - -# Alert rule evaluation - -Use alert rule evaluation to determine how frequently an alert rule should be evaluated and how quickly it should change its state. - -To do this, you need to make sure that your alert rule is in the right evaluation group and set a pending period time that works best for your use case. - -## Evaluation group - -Every alert rule is part of an evaluation group. Each evaluation group contains an evaluation interval that determines how frequently the alert rule is checked. Alert rules within the same group are evaluated one after the other, while alert rules in different groups can be evaluated simultaneously. - -This feature is especially useful for Prometheus/Mimir rules when you want to ensure that recording rules are evaluated before any alert rules. - -**Note:** - -Evaluation groups and alerts grouping in notification policies are two separate things. Grouping in notification policies allows multiple alerts sharing the same labels to be sent in the same time message. - -## Pending period - -By setting a pending period, you can avoid unnecessary alerts for temporary problems. - -In the pending period, you select the period in which an alert rule can be in breach of the condition until it fires. - -**Example** - -Imagine you have an alert rule evaluation interval set at every 30 seconds and the pending period to 90 seconds. - -Evaluation will occur as follows: - -[00:30] First evaluation - condition not met. - -[01:00] Second evaluation - condition breached. -Pending counter starts. **Alert starts pending.** - -[01:30] Third evaluation - condition breached. Pending counter = 30s. **Pending state.** - -[02:00] Fourth evaluation - condition breached. Pending counter = 60s **Pending state.** - -[02:30] Fifth evaluation - condition breached. Pending counter = 90s. **Alert starts firing** - -If the alert rule has a condition that needs to be in breach for a certain amount of time before it takes action, then its state changes as follows: - -- When the condition is first breached, the rule goes into a "pending" state. - -- The rule stays in the "pending" state until the condition has been broken for the required amount of time - pending period. - -- Once the required time has passed, the rule goes into a "firing" state. - -- If the condition is no longer broken during the pending period, the rule goes back to its normal state. - -**Note:** - -If you want to skip the pending state, you can simply set the pending period to 0. This effectively skips the pending period and your alert rule will start firing as soon as the condition is breached. - -When an alert rule fires, alert instances are produced, which are then sent to the Alertmanager. diff --git a/docs/sources/alerting/fundamentals/alert-rules/state-and-health.md b/docs/sources/alerting/fundamentals/alert-rules/state-and-health.md index 1c58bcb91665f..3e067eadf0fde 100644 --- a/docs/sources/alerting/fundamentals/alert-rules/state-and-health.md +++ b/docs/sources/alerting/fundamentals/alert-rules/state-and-health.md @@ -1,6 +1,7 @@ --- aliases: - - ../unified-alerting/alerting-rules/state-and-health/ + - ../../fundamentals/state-and-health/ # /docs/grafana//alerting/fundamentals/state-and-health/ + - ../../unified-alerting/alerting-rules/state-and-health/ # /docs/grafana//alerting/unified-alerting/alerting-rules/state-and-health canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/alert-rules/state-and-health/ description: Learn about the state and health of alert rules to understand several key status indicators about your alerts keywords: @@ -13,13 +14,13 @@ labels: - cloud - enterprise - oss -title: State and health of alerting rules -weight: 405 +title: State and health of alert rules +weight: 109 --- -# State and health of alerting rules +# State and health of alert rules -The state and health of alerting rules help you understand several key status indicators about your alerts. +The state and health of alert rules help you understand several key status indicators about your alerts. There are three key components: [alert rule state](#alert-rule-state), [alert instance state](#alert-instance-state), and [alert rule health](#alert-rule-health). Although related, each component conveys subtly different information. @@ -47,7 +48,7 @@ An alert instance can be in either of the following states: | **Pending** | The state of an alert that has been active for less than the configured threshold duration. | | **Alerting** | The state of an alert that has been active for longer than the configured threshold duration. | | **NoData** | No data has been received for the configured time window. | -| **Error** | The error that occurred when attempting to evaluate an alerting rule. | +| **Error** | The error that occurred when attempting to evaluate an alert rule. | ## Alert rule health @@ -55,13 +56,13 @@ An alert rule can have one the following health statuses: | State | Description | | ---------- | ---------------------------------------------------------------------------------- | -| **Ok** | No error when evaluating an alerting rule. | -| **Error** | An error occurred when evaluating an alerting rule. | +| **Ok** | No error when evaluating an alert rule. | +| **Error** | An error occurred when evaluating an alert rule. | | **NoData** | The absence of data in at least one time series returned during a rule evaluation. | ## Special alerts for `NoData` and `Error` -When evaluation of an alerting rule produces state `NoData` or `Error`, Grafana Alerting will generate alert instances that have the following additional labels: +When evaluation of an alert rule produces state `NoData` or `Error`, Grafana Alerting will generate alert instances that have the following additional labels: | Label | Description | | ------------------ | ---------------------------------------------------------------------- | diff --git a/docs/sources/alerting/fundamentals/alertmanager.md b/docs/sources/alerting/fundamentals/alertmanager.md deleted file mode 100644 index 7d559f0ddd993..0000000000000 --- a/docs/sources/alerting/fundamentals/alertmanager.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -aliases: - - ../fundamentals/alertmanager/ - - ../metrics/ - - ../unified-alerting/fundamentals/alertmanager/ - - alerting/manage-notifications/alertmanager/ -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/alertmanager/ -description: Learn about Alertmanagers and the Alertmanager options for Grafana Alerting -labels: - products: - - cloud - - enterprise - - oss -title: Alertmanager -weight: 140 ---- - -# Alertmanager - -Alertmanager enables you to quickly and efficiently manage and respond to alerts. It receives alerts, handles silencing, inhibition, grouping, and routing by sending notifications out via your channel of choice, for example, email or Slack. - -In Grafana, you can use the Cloud Alertmanager, Grafana Alertmanager, or an external Alertmanager. You can also run multiple Alertmanagers; your decision depends on your set up and where your alerts are being generated. - -**Cloud Alertmanager** - -Cloud Alertmanager runs in Grafana Cloud and it can receive alerts from Grafana, Mimir, and Loki. - -**Grafana Alertmanager** - -Grafana Alertmanager is an internal Alertmanager that is pre-configured and available for selection by default if you run Grafana on-premises or open-source. - -The Grafana Alertmanager can receive alerts from Grafana, but it cannot receive alerts from outside Grafana, for example, from Mimir or Loki. - -**Note that inhibition rules are not supported in the Grafana Alertmanager.** - -**External Alertmanager** - -If you want to use a single Alertmanager to receive all your Grafana, Loki, Mimir, and Prometheus alerts, you can set up Grafana to use an external Alertmanager. This external Alertmanager can be configured and administered from within Grafana itself. - -Here are two examples of when you may want to configure your own external alertmanager and send your alerts there instead of the Grafana Alertmanager: - -1. You may already have Alertmanagers on-premises in your own Cloud infrastructure that you have set up and still want to use, because you have other alert generators, such as Prometheus. - -2. You want to use both Prometheus on-premises and hosted Grafana to send alerts to the same Alertmanager that runs in your Cloud infrastructure. - -Alertmanagers are visible from the drop-down menu on the Alerting Contact Points, Notification Policies, and Silences pages. - -If you are provisioning your data source, set the flag `handleGrafanaManagedAlerts` in the `jsonData` field to `true` to send Grafana-managed alerts to this Alertmanager. - -**Useful links** - -[Prometheus Alertmanager documentation](https://prometheus.io/docs/alerting/latest/alertmanager/) - -[Add an external Alertmanager][configure-alertmanager] - -{{% docs/reference %}} -[configure-alertmanager]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/configure-alertmanager" -[configure-alertmanager]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/configure-alertmanager" -{{% /docs/reference %}} diff --git a/docs/sources/alerting/fundamentals/annotation-label/_index.md b/docs/sources/alerting/fundamentals/annotation-label/_index.md deleted file mode 100644 index 2dab64ebce3ef..0000000000000 --- a/docs/sources/alerting/fundamentals/annotation-label/_index.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -aliases: - - ../alerting-rules/alert-annotation-label/ - - ../unified-alerting/alerting-rules/alert-annotation-label/ -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/annotation-label/ -description: Learn how to use annotations and labels to store key information about alerts -keywords: - - grafana - - alerting - - guide - - rules - - create -labels: - products: - - cloud - - enterprise - - oss -title: Labels and annotations -weight: 120 ---- - -# Labels and annotations - -Labels and annotations contain information about an alert. Both labels and annotations have the same structure: a set of named values; however their intended uses are different. An example of label, or the equivalent annotation, might be `alertname="test"`. - -The main difference between a label and an annotation is that labels are used to differentiate an alert from all other alerts, while annotations are used to add additional information to an existing alert. - -For example, consider two high CPU alerts: one for `server1` and another for `server2`. In such an example we might have a label called `server` where the first alert has the label `server="server1"` and the second alert has the label `server="server2"`. However, we might also want to add a description to each alert such as `"The CPU usage for server1 is above 75%."`, where `server1` and `75%` are replaced with the name and CPU usage of the server (please refer to the documentation on [templating labels and annotations][variables-label-annotation] for how to do this). This kind of description would be more suitable as an annotation. - -## Labels - -Labels contain information that identifies an alert. An example of a label might be `server=server1`. Each alert can have more than one label, and the complete set of labels for an alert is called its label set. It is this label set that identifies the alert. - -For example, an alert might have the label set `{alertname="High CPU usage",server="server1"}` while another alert might have the label set `{alertname="High CPU usage",server="server2"}`. These are two separate alerts because although their `alertname` labels are the same, their `server` labels are different. - -The label set for an alert is a combination of the labels from the datasource, custom labels from the alert rule, and a number of reserved labels such as `alertname`. - -### Custom Labels - -Custom labels are additional labels from the alert rule. Like annotations, custom labels must have a name, and their value can contain a combination of text and template code that is evaluated when an alert is fired. Documentation on how to template custom labels can be found [here][variables-label-annotation]. - -When using custom labels with templates it is important to make sure that the label value does not change between consecutive evaluations of the alert rule as this will end up creating large numbers of distinct alerts. However, it is OK for the template to produce different label values for different alerts. For example, do not put the value of the query in a custom label as this will end up creating a new set of alerts each time the value changes. Instead use annotations. - -It is also important to make sure that the label set for an alert does not have two or more labels with the same name. If a custom label has the same name as a label from the datasource then it will replace that label. However, should a custom label have the same name as a reserved label then the custom label will be omitted from the alert. - -## Annotations - -Annotations are named pairs that add additional information to existing alerts. There are a number of suggested annotations in Grafana such as `description`, `summary`, `runbook_url`, `dashboardUId` and `panelId`. Like custom labels, annotations must have a name, and their value can contain a combination of text and template code that is evaluated when an alert is fired. If an annotation contains template code, the template is evaluated once when the alert is fired. It is not re-evaluated, even when the alert is resolved. Documentation on how to template annotations can be found [here][variables-label-annotation]. - -{{% docs/reference %}} -[variables-label-annotation]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/annotation-label/variables-label-annotation" -[variables-label-annotation]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/annotation-label/variables-label-annotation" -{{% /docs/reference %}} diff --git a/docs/sources/alerting/fundamentals/annotation-label/how-to-use-labels.md b/docs/sources/alerting/fundamentals/annotation-label/how-to-use-labels.md deleted file mode 100644 index 241b047cbd214..0000000000000 --- a/docs/sources/alerting/fundamentals/annotation-label/how-to-use-labels.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/annotation-label/how-to-use-labels/ -description: Learn how to use labels to link alert rules to notification policies and silences -keywords: - - grafana - - alerting - - guide - - fundamentals -labels: - products: - - cloud - - enterprise - - oss -title: Labels in Grafana Alerting -weight: 117 ---- - -# Labels in Grafana Alerting - -This topic explains why labels are a fundamental component of alerting. - -- The complete set of labels for an alert is what uniquely identifies an alert within Grafana alerts. -- The Alertmanager uses labels to match alerts for silences and alert groups in notification policies. -- The alerting UI shows labels for every alert instance generated during evaluation of that rule. -- Contact points can access labels to dynamically generate notifications that contain information specific to the alert that is resulting in a notification. -- You can add labels to an [alerting rule][alerting-rules]. Labels are manually configurable, use template functions, and can reference other labels. Labels added to an alerting rule take precedence in the event of a collision between labels (except in the case of [Grafana reserved labels](#grafana-reserved-labels)). - -{{< figure src="/static/img/docs/alerting/unified/rule-edit-details-8-0.png" max-width="550px" caption="Alert details" >}} - -## External Alertmanager Compatibility - -Grafana's built-in Alertmanager supports both Unicode label keys and values. If you are using an external Prometheus Alertmanager, label keys must be compatible with their [data model](https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels). -This means that label keys must only contain **ASCII letters**, **numbers**, as well as **underscores** and match the regex `[a-zA-Z_][a-zA-Z0-9_]*`. -Any invalid characters will be removed or replaced by the Grafana alerting engine before being sent to the external Alertmanager according to the following rules: - -- `Whitespace` will be removed. -- `ASCII characters` will be replaced with `_`. -- `All other characters` will be replaced with their lower-case hex representation. If this is the first character it will be prefixed with `_`. - -Example: A label key/value pair `Alert! 🔔="🔥"` will become `Alert_0x1f514="🔥"`. - -**Note** If multiple label keys are sanitized to the same value, the duplicates will have a short hash of the original label appended as a suffix. - -## Grafana reserved labels - -{{% admonition type="note" %}} -Labels prefixed with `grafana_` are reserved by Grafana for special use. If a manually configured label is added beginning with `grafana_` it may be overwritten in case of collision. -To stop the Grafana Alerting engine from adding a reserved label, you can disable it via the `disabled_labels` option in [unified_alerting.reserved_labels][unified-alerting-reserved-labels] configuration. -{{% /admonition %}} - -Grafana reserved labels can be used in the same way as manually configured labels. The current list of available reserved labels are: - -| Label | Description | -| -------------- | ----------------------------------------- | -| grafana_folder | Title of the folder containing the alert. | - -{{% docs/reference %}} -[alerting-rules]: "/docs/grafana/ -> /docs/grafana//alerting/alerting-rules" -[alerting-rules]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/alerting-rules" - -[unified-alerting-reserved-labels]: "/docs/grafana/ -> /docs/grafana//setup-grafana/configure-grafana#unified_alertingreserved_labels" -[unified-alerting-reserved-labels]: "/docs/grafana-cloud/ -> /docs/grafana//setup-grafana/configure-grafana#unified_alertingreserved_labels" -{{% /docs/reference %}} diff --git a/docs/sources/alerting/fundamentals/annotation-label/labels-and-label-matchers.md b/docs/sources/alerting/fundamentals/annotation-label/labels-and-label-matchers.md deleted file mode 100644 index 44f780fb17edb..0000000000000 --- a/docs/sources/alerting/fundamentals/annotation-label/labels-and-label-matchers.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/annotation-label/labels-and-label-matchers/ -description: Learn how to use label matchers to link alert rules to notification policies and silences -keywords: - - grafana - - alerting - - guide - - fundamentals -labels: - products: - - cloud - - enterprise - - oss -menuTitle: Label matchers -title: How label matching works -weight: 117 ---- - -# How label matching works - -Use labels and label matchers to link alert rules to notification policies and silences. This allows for a very flexible way to manage your alert instances, specify which policy should handle them, and which alerts to silence. - -A label matchers consists of 3 distinct parts, the **label**, the **value** and the **operator**. - -- The **Label** field is the name of the label to match. It must exactly match the label name. - -- The **Value** field matches against the corresponding value for the specified **Label** name. How it matches depends on the **Operator** value. - -- The **Operator** field is the operator to match against the label value. The available operators are: - -| Operator | Description | -| -------- | -------------------------------------------------- | -| `=` | Select labels that are exactly equal to the value. | -| `!=` | Select labels that are not equal to the value. | -| `=~` | Select labels that regex-match the value. | -| `!~` | Select labels that do not regex-match the value. | - -If you are using multiple label matchers, they are combined using the AND logical operator. This means that all matchers must match in order to link a rule to a policy. - -## Example scenario - -If you define the following set of labels for your alert: - -`{ foo=bar, baz=qux, id=12 }` - -then: - -- A label matcher defined as `foo=bar` matches this alert rule. -- A label matcher defined as `foo!=bar` does _not_ match this alert rule. -- A label matcher defined as `id=~[0-9]+` matches this alert rule. -- A label matcher defined as `baz!~[0-9]+` matches this alert rule. -- Two label matchers defined as `foo=bar` and `id=~[0-9]+` match this alert rule. - -## Exclude labels - -You can also write label matchers to exclude labels. - -Here is an example that shows how to exclude the label `Team`. You can choose between any of the values below to exclude labels. - -| Label | Operator | Value | -| ------ | -------- | ----- | -| `team` | `=` | `""` | -| `team` | `!~` | `.+` | -| `team` | `=~` | `^$` | diff --git a/docs/sources/alerting/fundamentals/annotation-label/variables-label-annotation.md b/docs/sources/alerting/fundamentals/annotation-label/variables-label-annotation.md deleted file mode 100644 index c51bf4f4cd7a3..0000000000000 --- a/docs/sources/alerting/fundamentals/annotation-label/variables-label-annotation.md +++ /dev/null @@ -1,450 +0,0 @@ ---- -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/annotation-label/variables-label-annotation/ -description: Learn about how to template labels and annotations -keywords: - - grafana - - alerting - - templating - - labels - - annotations -labels: - products: - - cloud - - enterprise - - oss -title: Templating labels and annotations -weight: 117 ---- - -# Templating labels and annotations - -You can use templates to include data from queries and expressions in labels and annotations. For example, you might want to set the severity label for an alert based on the value of the query, or use the instance label from the query in a summary annotation so you know which server is experiencing high CPU usage. - -All templates should be written in [text/template](https://pkg.go.dev/text/template). Regardless of whether you are templating a label or an annotation, you should write each template inline inside the label or annotation that you are templating. This means you cannot share templates between labels and annotations, and instead you will need to copy templates wherever you want to use them. - -Each template is evaluated whenever the alert rule is evaluated, and is evaluated for every alert separately. For example, if your alert rule has a templated summary annotation, and the alert rule has 10 firing alerts, then the template will be executed 10 times, once for each alert. You should try to avoid doing expensive computations in your templates as much as possible. - -## Examples - -Rather than write a complete tutorial on text/template, the following examples attempt to show the most common use-cases we have seen for templates. You can use these examples verbatim, or adapt them as necessary for your use case. For more information on how to write text/template refer to the [text/template](https://pkg.go.dev/text/template) documentation. - -### Print all labels, comma separated - -To print all labels, comma separated, print the `$labels` variable: - -``` -{{ $labels }} -``` - -For example, given an alert with the labels `alertname=High CPU usage`, `grafana_folder=CPU alerts` and `instance=server1`, this would print: - -``` -alertname=High CPU usage, grafana_folder=CPU alerts, instance=server1 -``` - -> If you are using classic conditions then `$labels` will not contain any labels from the query. Refer to [the $labels variable](#the-labels-variable) for more information. - -### Print all labels, one per line - -To print all labels, one per line, use a `range` to iterate over each key/value pair and print them individually. Here `$k` refers to the name and `$v` refers to the value of the current label: - -``` -{{ range $k, $v := $labels -}} -{{ $k }}={{ $v }} -{{ end }} -``` - -For example, given an alert with the labels `alertname=High CPU usage`, `grafana_folder=CPU alerts` and `instance=server1`, this would print: - -``` -alertname=High CPU usage -grafana_folder=CPU alerts -instance=server1 -``` - -> If you are using classic conditions then `$labels` will not contain any labels from the query. Refer to [the $labels variable](#the-labels-variable) for more information. - -### Print an individual label - -To print an individual label use the `index` function with the `$labels` variable: - -``` -The host {{ index $labels "instance" }} has exceeded 80% CPU usage for the last 5 minutes -``` - -For example, given an alert with the labels `instance=server1`, this would print: - -``` -The host server1 has exceeded 80% CPU usage for the last 5 minutes -``` - -> If you are using classic conditions then `$labels` will not contain any labels from the query. Refer to [the $labels variable](#the-labels-variable) for more information. - -### Print the value of a query - -To print the value of an instant query you can print its Ref ID using the `index` function and the `$values` variable: - -``` -{{ index $values "A" }} -``` - -For example, given an instant query that returns the value 81.2345, this will print: - -``` -81.2345 -``` - -To print the value of a range query you must first reduce it from a time series to an instant vector with a reduce expression. You can then print the result of the reduce expression by using its Ref ID instead. For example, if the reduce expression takes the average of A and has the Ref ID B you would write: - -``` -{{ index $values "B" }} -``` - -### Print the humanized value of a query - -To print the humanized value of an instant query use the `humanize` function: - -``` -{{ humanize (index $values "A").Value }} -``` - -For example, given an instant query that returns the value 81.2345, this will print: - -``` -81.234 -``` - -To print the humanized value of a range query you must first reduce it from a time series to an instant vector with a reduce expression. You can then print the result of the reduce expression by using its Ref ID instead. For example, if the reduce expression takes the average of A and has the Ref ID B you would write: - -``` -{{ humanize (index $values "B").Value }} -``` - -### Print the value of a query as a percentage - -To print the value of an instant query as a percentage use the `humanizePercentage` function: - -``` -{{ humanizePercentage (index $values "A").Value }} -``` - -This function expects the value to be a decimal number between 0 and 1. If the value is instead a decimal number between 0 and 100 you can either divide it by 100 in your query or using a math expression. If the query is a range query you must first reduce it from a time series to an instant vector with a reduce expression. - -### Set a severity from the value of a query - -To set a severity label from the value of a query use an if statement and the greater than comparison function. Make sure to use decimals (`80.0`, `50.0`, `0.0`, etc) when doing comparisons against `$values` as text/template does not support type coercion. You can find a list of all the supported comparison functions [here](https://pkg.go.dev/text/template#hdr-Functions). - -``` -{{ if (gt $values.A.Value 80.0) -}} -high -{{ else if (gt $values.A.Value 50.0) -}} -medium -{{ else -}} -low -{{- end }} -``` - -### Print all labels from a classic condition - -You cannot use `$labels` to print labels from the query if you are using classic conditions, and must use `$values` instead. The reason for this is classic conditions discard these labels to enforce uni-dimensional behavior (at most one alert per alert rule). If classic conditions didn't discard these labels, then queries that returned many time series would cause alerts to flap between firing and resolved constantly as the labels would change every time the alert rule was evaluated. - -Instead, the `$values` variable contains the reduced values of all time series for all conditions that are firing. For example, if you have an alert rule with a query A that returns two time series, and a classic condition B with two conditions, then `$values` would contain `B0`, `B1`, `B2` and `B3`. If the classic condition B had just one condition, then `$values` would contain just `B0` and `B1`. - -To print all labels of all firing time series use the following template (make sure to replace `B` in the regular expression with the Ref ID of the classic condition if it's different): - -``` -{{ range $k, $v := $values -}} -{{ if (match "B[0-9]+" $k) -}} -{{ $k }}: {{ $v.Labels }}{{ end }} -{{ end }} -``` - -For example, a classic condition for two time series exceeding a single condition would print: - -``` -B0: instance=server1 -B1: instance=server2 -``` - -If the classic condition has two or more conditions, and a time series exceeds multiple conditions at the same time, then its labels will be duplicated for each condition that is exceeded: - -``` -B0: instance=server1 -B1: instance=server2 -B2: instance=server1 -B3: instance=server2 -``` - -If you need to print unique labels you should consider changing your alert rules from uni-dimensional to multi-dimensional instead. You can do this by replacing your classic condition with reduce and math expressions. - -### Print all values from a classic condition - -To print all values from a classic condition take the previous example and replace `$v.Labels` with `$v.Value`: - -``` -{{ range $k, $v := $values -}} -{{ if (match "B[0-9]+" $k) -}} -{{ $k }}: {{ $v.Value }}{{ end }} -{{ end }} -``` - -For example, a classic condition for two time series exceeding a single condition would print: - -``` -B0: 81.2345 -B1: 84.5678 -``` - -If the classic condition has two or more conditions, and a time series exceeds multiple conditions at the same time, then `$values` will contain the values of all conditions: - -``` -B0: 81.2345 -B1: 92.3456 -B2: 84.5678 -B3: 95.6789 -``` - -## Variables - -The following variables are available to you when templating labels and annotations: - -### The labels variable - -The `$labels` variable contains all labels from the query. For example, suppose you have a query that returns CPU usage for all of your servers, and you have an alert rule that fires when any of your servers have exceeded 80% CPU usage for the last 5 minutes. You want to add a summary annotation to the alert that tells you which server is experiencing high CPU usage. With the `$labels` variable you can write a template that prints a human-readable sentence such as: - -``` -CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes -``` - -> If you are using a classic condition then `$labels` will not contain any labels from the query. Classic conditions discard these labels in order to enforce uni-dimensional behavior (at most one alert per alert rule). If you want to use labels from the query in your template then use the example [here](#print-all-labels-from-a-classic-condition). - -### The value variable - -The `$value` variable is a string containing the labels and values of all instant queries; threshold, reduce and math expressions, and classic conditions in the alert rule. It does not contain the results of range queries, as these can return anywhere from 10s to 10,000s of rows or metrics. If it did, for especially large queries a single alert could use 10s of MBs of memory and Grafana would run out of memory very quickly. - -To print the `$value` variable in the summary you would write something like this: - -``` -CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ $value }}) -``` - -And would look something like this: - -``` -CPU usage for instance1 has exceeded 80% for the last 5 minutes: [ var='A' labels={instance=instance1} value=81.234 ] -``` - -Here `var='A'` refers to the instant query with Ref ID A, `labels={instance=instance1}` refers to the labels, and `value=81.234` refers to the average CPU usage over the last 5 minutes. - -If you want to print just some of the string instead of the full string then use the `$values` variable. It contains the same information as `$value`, but in a structured table, and is much easier to use then writing a regular expression to match just the text you want. - -### The values variable - -The `$values` variable is a table containing the labels and floating point values of all instant queries and expressions, indexed by their Ref IDs. - -To print the value of the instant query with Ref ID A: - -``` -CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ index $values "A" }}) -``` - -For example, given an alert with the labels `instance=server1` and an instant query with the value `81.2345`, this would print: - -``` -CPU usage for instance1 has exceeded 80% for the last 5 minutes: 81.2345 -``` - -If the query in Ref ID A is a range query rather than an instant query then add a reduce expression with Ref ID B and replace `(index $values "A")` with `(index $values "B")`: - -``` -CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ index $values "B" }}) -``` - -## Functions - -The following functions are available to you when templating labels and annotations: - -### args - -The `args` function translates a list of objects to a map with keys arg0, arg1 etc. This is intended to allow multiple arguments to be passed to templates: - -``` -{{define "x"}}{{.arg0}} {{.arg1}}{{end}}{{template "x" (args 1 "2")}} -``` - -``` -1 2 -``` - -### externalURL - -The `externalURL` function returns the external URL of the Grafana server as configured in the ini file(s): - -``` -{{ externalURL }} -``` - -``` -https://example.com/grafana -``` - -### graphLink - -The `graphLink` function returns the path to the graphical view in [Explore][explore] for the given expression and data source: - -``` -{{ graphLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }} -``` - -``` -/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":false,"range":true}] -``` - -### humanize - -The `humanize` function humanizes decimal numbers: - -``` -{{ humanize 1000.0 }} -``` - -``` -1k -``` - -### humanize1024 - -The `humanize1024` works similar to `humanize` but but uses 1024 as the base rather than 1000: - -``` -{{ humanize1024 1024.0 }} -``` - -``` -1ki -``` - -### humanizeDuration - -The `humanizeDuration` function humanizes a duration in seconds: - -``` -{{ humanizeDuration 60.0 }} -``` - -``` -1m 0s -``` - -### humanizePercentage - -The `humanizePercentage` function humanizes a ratio value to a percentage: - -``` -{{ humanizePercentage 0.2 }} -``` - -``` -20% -``` - -### humanizeTimestamp - -The `humanizeTimestamp` function humanizes a Unix timestamp: - -``` -{{ humanizeTimestamp 1577836800.0 }} -``` - -``` -2020-01-01 00:00:00 +0000 UTC -``` - -### match - -The `match` function matches the text against a regular expression pattern: - -``` -{{ match "a.*" "abc" }} -``` - -``` -true -``` - -### pathPrefix - -The `pathPrefix` function returns the path of the Grafana server as configured in the ini file(s): - -``` -{{ pathPrefix }} -``` - -``` -/grafana -``` - -### tableLink - -The `tableLink` function returns the path to the tabular view in [Explore][explore] for the given expression and data source: - -``` -{{ tableLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }} -``` - -``` -/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":true,"range":false}] -``` - -### title - -The `title` function capitalizes the first character of each word: - -``` -{{ title "hello, world!" }} -``` - -``` -Hello, World! -``` - -### toLower - -The `toLower` function returns all text in lowercase: - -``` -{{ toLower "Hello, world!" }} -``` - -``` -hello, world! -``` - -### toUpper - -The `toUpper` function returns all text in uppercase: - -``` -{{ toUpper "Hello, world!" }} -``` - -``` -HELLO, WORLD! -``` - -### reReplaceAll - -The `reReplaceAll` function replaces text matching the regular expression: - -``` -{{ reReplaceAll "localhost:(.*)" "example.com:$1" "localhost:8080" }} -``` - -``` -example.com:8080 -``` - -{{% docs/reference %}} -[explore]: "/docs/grafana/ -> /docs/grafana//explore" -[explore]: "/docs/grafana-cloud/ -> /docs/grafana//explore" -{{% /docs/reference %}} diff --git a/docs/sources/alerting/fundamentals/contact-points/index.md b/docs/sources/alerting/fundamentals/contact-points/index.md deleted file mode 100644 index 5494a9b6c0a73..0000000000000 --- a/docs/sources/alerting/fundamentals/contact-points/index.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -aliases: - - /docs/grafana/latest/alerting/contact-points/ - - /docs/grafana/latest/alerting/unified-alerting/contact-points/ - - /docs/grafana/latest/alerting/fundamentals/contact-points/contact-point-types/ -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/contact-points/ -description: Learn about contact points and the supported contact point integrations -keywords: - - grafana - - alerting - - guide - - contact point - - notification channel - - create -labels: - products: - - cloud - - enterprise - - oss -title: Contact points -weight: 150 ---- - -# Contact points - -Contact points contain the configuration for sending notifications. A contact point is a list of integrations, each of which sends a notification to a particular email address, service or URL. Contact points can have multiple integrations of the same kind, or a combination of integrations of different kinds. For example, a contact point could contain a Pagerduty integration; an email and Slack integration; or a Pagerduty integration, a Slack integration, and two email integrations. You can also configure a contact point with no integrations; in which case no notifications are sent. - -A contact point cannot send notifications until it has been added to a notification policy. A notification policy can only send alerts to one contact point, but a contact point can be added to a number of notification policies at the same time. When an alert matches a notification policy, the alert is sent to the contact point in that notification policy, which then sends a notification to each integration in its configuration. - -Contact points can be configured for the Grafana Alertmanager as well as external alertmanagers. - -You can also use notification templating to customize notification messages for contact point integrations. - -**Note:** - -If you've created an OnCall contact point in the Grafana OnCall application, you can view it in the Alerting application. - -## Supported contact point integrations - -The following table lists the contact point integrations supported by Grafana. - -| Name | Type | Grafana Alertmanager | Other Alertmanagers | -| ------------------------------------------------ | ------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------- | -| [DingDing](https://www.dingtalk.com/en) | `dingding` | Supported | N/A | -| [Discord](https://discord.com/) | `discord` | Supported | N/A | -| Email | `email` | Supported | Supported | -| [Google Chat](https://chat.google.com/) | `googlechat` | Supported | N/A | -| [Kafka](https://kafka.apache.org/) | `kafka` | Supported | N/A | -| [Line](https://line.me/en/) | `line` | Supported | N/A | -| [Microsoft Teams](https://teams.microsoft.com/) | `teams` | Supported | Supported | -| [Opsgenie](https://atlassian.com/opsgenie/) | `opsgenie` | Supported | Supported | -| [Pagerduty](https://www.pagerduty.com/) | `pagerduty` | Supported | Supported | -| [Prometheus Alertmanager](https://prometheus.io) | `prometheus-alertmanager` | Supported | N/A | -| [Pushover](https://pushover.net/) | `pushover` | Supported | Supported | -| [Sensu Go](https://docs.sensu.io/sensu-go/) | `sensugo` | Supported | N/A | -| [Slack](https://slack.com/) | `slack` | Supported | Supported | -| [Telegram](https://telegram.org/) | `telegram` | Supported | N/A | -| [Threema](https://threema.ch/) | `threema` | Supported | N/A | -| [VictorOps](https://help.victorops.com/) | `victorops` | Supported | Supported | -| Webhook | `webhook` | Supported | Supported ([different format](https://prometheus.io/docs/alerting/latest/configuration/#webhook_config)) | -| Cisco Webex Teams | `webex` | Supported | Supported | -| WeCom | `wecom` | Supported | N/A | -| [Zenduty](https://www.zenduty.com/) | `webhook` | Supported | N/A | diff --git a/docs/sources/alerting/fundamentals/data-source-alerting.md b/docs/sources/alerting/fundamentals/data-source-alerting.md deleted file mode 100644 index e2c09e1cd4658..0000000000000 --- a/docs/sources/alerting/fundamentals/data-source-alerting.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/data-source-alerting/ -description: Learn about the data sources supported by Grafana Alerting -labels: - products: - - cloud - - enterprise - - oss -title: Data sources and Grafana Alerting -weight: 100 ---- - -# Data sources and Grafana Alerting - -There are a number of data sources that are compatible with Grafana Alerting. Each data source is supported by a plugin. You can use one of the built-in data sources listed below, use [external data source plugins](/grafana/plugins/?type=datasource), or create your own data source plugin. - -If you are creating your own data source plugin, make sure it is a backend plugin as Grafana Alerting requires this in order to be able to evaluate rules using the data source. Frontend data sources are not supported, because the evaluation engine runs on the backend. - -Specifying `{ "alerting": true, “backend”: true }` in the plugin.json file indicates that the data source plugin is compatible with Grafana Alerting and includes the backend data-fetching code. For more information, refer to [Build a data source backend plugin](/tutorials/build-a-data-source-backend-plugin/). - -These are the data sources that are compatible with and supported by Grafana Alerting. - -- [AWS CloudWatch][] -- [Azure Monitor][] -- [Elasticsearch][] -- [Google Cloud Monitoring][] -- [Graphite][] -- [InfluxDB][] -- [Loki][] -- [Microsoft SQL Server (MSSQL)][] -- [MySQL][] -- [Open TSDB][] -- [PostgreSQL][] -- [Prometheus][] -- [Jaeger][] -- [Zipkin][] -- [Tempo][] -- [Testdata][] - -## Useful links - -- [Grafana data sources][] - -{{% docs/reference %}} -[Grafana data sources]: "/docs/grafana/ -> /docs/grafana//datasources" -[Grafana data sources]: "/docs/grafana-cloud/ -> /docs/grafana//datasources" - -[AWS CloudWatch]: "/docs/grafana/ -> /docs/grafana//datasources/aws-cloudwatch" -[AWS CloudWatch]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/aws-cloudwatch" - -[Azure Monitor]: "/docs/grafana/ -> /docs/grafana//datasources/azure-monitor" -[Azure Monitor]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/azure-monitor" - -[Elasticsearch]: "/docs/grafana/ -> /docs/grafana//datasources/elasticsearch" -[Elasticsearch]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/elasticsearch" - -[Google Cloud Monitoring]: "/docs/grafana/ -> /docs/grafana//datasources/google-cloud-monitoring" -[Google Cloud Monitoring]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/google-cloud-monitoring" - -[Graphite]: "/docs/grafana/ -> /docs/grafana//datasources/graphite" -[Graphite]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/graphite" - -[InfluxDB]: "/docs/grafana/ -> /docs/grafana//datasources/influxdb" -[InfluxDB]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/influxdb" - -[Loki]: "/docs/grafana/ -> /docs/grafana//datasources/loki" -[Loki]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/loki" - -[Microsoft SQL Server (MSSQL)]: "/docs/grafana/ -> /docs/grafana//datasources/mssql" -[Microsoft SQL Server (MSSQL)]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/mssql" - -[MySQL]: "/docs/grafana/ -> /docs/grafana//datasources/mysql" -[MySQL]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/mysql" - -[Open TSDB]: "/docs/grafana/ -> /docs/grafana//datasources/opentsdb" -[Open TSDB]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/opentsdb" - -[PostgreSQL]: "/docs/grafana/ -> /docs/grafana//datasources/postgres" -[PostgreSQL]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/postgres" - -[Prometheus]: "/docs/grafana/ -> /docs/grafana//datasources/prometheus" -[Prometheus]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/prometheus" - -[Jaeger]: "/docs/grafana/ -> /docs/grafana//datasources/jaeger" -[Jaeger]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/jaeger" - -[Zipkin]: "/docs/grafana/ -> /docs/grafana//datasources/zipkin" -[Zipkin]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/zipkin" - -[Tempo]: "/docs/grafana/ -> /docs/grafana//datasources/tempo" -[Tempo]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/tempo" - -[Testdata]: "/docs/grafana/ -> /docs/grafana//datasources/testdata" -[Testdata]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/testdata" -{{% /docs/reference %}} diff --git a/docs/sources/alerting/fundamentals/evaluate-grafana-alerts.md b/docs/sources/alerting/fundamentals/evaluate-grafana-alerts.md deleted file mode 100644 index aeacd684b3c8c..0000000000000 --- a/docs/sources/alerting/fundamentals/evaluate-grafana-alerts.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -aliases: - - ../metrics/ - - ../unified-alerting/fundamentals/evaluate-grafana-alerts/ -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/evaluate-grafana-alerts/ -description: Learn how how Grafana-managed alerts are evaluated by the backend engine as well as how Grafana handles alerting on numeric rather than time series data -labels: - products: - - cloud - - enterprise - - oss -title: Alerting on numeric data -weight: 110 ---- - -# Alerting on numeric data - -This topic describes how Grafana managed alerts are evaluated by the backend engine as well as how Grafana handles alerting on numeric rather than time series data. - -- [Alerting on numeric data](#alerting-on-numeric-data) - - [Alert evaluation](#alert-evaluation) - - [Metrics from the alerting engine](#metrics-from-the-alerting-engine) - - [Alerting on numeric data](#alerting-on-numeric-data-1) - - [Tabular Data](#tabular-data) - - [Example](#example) - -## Alert evaluation - -Grafana managed alerts query the following backend data sources that have alerting enabled: - -- built-in data sources or those developed and maintained by Grafana: `Graphite`, `Prometheus`, `Loki`, `InfluxDB`, `Elasticsearch`, - `Google Cloud Monitoring`, `Cloudwatch`, `Azure Monitor`, `MySQL`, `PostgreSQL`, `MSSQL`, `OpenTSDB`, `Oracle`, and `Azure Monitor` -- community developed backend data sources with alerting enabled (`backend` and `alerting` properties are set in the [plugin.json](/developers/plugin-tools/reference-plugin-json) - -### Metrics from the alerting engine - -The alerting engine publishes some internal metrics about itself. You can read more about how Grafana publishes [internal metrics][set-up-grafana-monitoring]. - -| Metric Name | Type | Description | -| ------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------- | -| `grafana_alerting_alerts` | gauge | How many alerts by state | -| `grafana_alerting_request_duration` | histogram | Histogram of requests to the Alerting API | -| `grafana_alerting_active_configurations` | gauge | The number of active, non default Alertmanager configurations for grafana managed alerts | -| `grafana_alerting_rule_evaluations_total` | counter | The total number of rule evaluations | -| `grafana_alerting_rule_evaluation_failures_total` | counter | The total number of rule evaluation failures | -| `grafana_alerting_rule_evaluation_duration` | summary | The duration for a rule to execute | -| `grafana_alerting_rule_group_rules` | gauge | The number of rules | - -## Alerting on numeric data - -Among certain data sources numeric data that is not time series can be directly alerted on, or passed into Server Side Expressions (SSE). This allows for more processing and resulting efficiency within the data source, and it can also simplify alert rules. -When alerting on numeric data instead of time series data, there is no need to reduce each labeled time series into a single number. Instead labeled numbers are returned to Grafana instead. - -### Tabular Data - -This feature is supported with backend data sources that query tabular data: - -- SQL data sources such as MySQL, Postgres, MSSQL, and Oracle. -- The Azure Kusto based services: Azure Monitor (Logs), Azure Monitor (Azure Resource Graph), and Azure Data Explorer. - -A query with Grafana managed alerts or SSE is considered numeric with these data sources, if: - -- The "Format AS" option is set to "Table" in the data source query. -- The table response returned to Grafana from the query includes only one numeric (e.g. int, double, float) column, and optionally additional string columns. - -If there are string columns then those columns become labels. The name of column becomes the label name, and the value for each row becomes the value of the corresponding label. If multiple rows are returned, then each row should be uniquely identified their labels. - -### Example - -For a MySQL table called "DiskSpace": - -| Time | Host | Disk | PercentFree | -| ----------- | ---- | ---- | ----------- | -| 2021-June-7 | web1 | /etc | 3 | -| 2021-June-7 | web2 | /var | 4 | -| 2021-June-7 | web3 | /var | 8 | -| ... | ... | ... | ... | - -You can query the data filtering on time, but without returning the time series to Grafana. For example, an alert that would trigger per Host, Disk when there is less than 5% free space: - -```sql -SELECT Host, Disk, CASE WHEN PercentFree < 5.0 THEN PercentFree ELSE 0 END FROM ( - SELECT - Host, - Disk, - Avg(PercentFree) - FROM DiskSpace - Group By - Host, - Disk - Where __timeFilter(Time) -``` - -This query returns the following Table response to Grafana: - -| Host | Disk | PercentFree | -| ---- | ---- | ----------- | -| web1 | /etc | 3 | -| web2 | /var | 4 | -| web3 | /var | 0 | - -When this query is used as the **condition** in an alert rule, then the non-zero will be alerting. As a result, three alert instances are produced: - -| Labels | Status | -| --------------------- | -------- | -| {Host=web1,disk=/etc} | Alerting | -| {Host=web2,disk=/var} | Alerting | -| {Host=web3,disk=/var} | Normal | - -{{% docs/reference %}} - -[set-up-grafana-monitoring]: "/docs/grafana/ -> /docs/grafana//setup-grafana/set-up-grafana-monitoring" -[set-up-grafana-monitoring]: "/docs/grafana-cloud/ -> /docs/grafana//setup-grafana/set-up-grafana-monitoring" -{{% /docs/reference %}} diff --git a/docs/sources/alerting/fundamentals/high-availability/_index.md b/docs/sources/alerting/fundamentals/high-availability/_index.md deleted file mode 100644 index 4e43fa4b21b31..0000000000000 --- a/docs/sources/alerting/fundamentals/high-availability/_index.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -aliases: - - ../high-availability/ - - ../unified-alerting/high-availability/ -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/high-availability/ -description: Learn about high availability in Grafana Alerting -keywords: - - grafana - - alerting - - tutorials - - ha - - high availability -labels: - products: - - cloud - - enterprise - - oss -title: Alerting high availability -weight: 170 ---- - -# Alerting high availability - -Grafana Alerting uses the Prometheus model of separating the evaluation of alert rules from the delivering of notifications. In this model the evaluation of alert rules is done in the alert generator and the delivering of notifications is done in the alert receiver. In Grafana Alerting, the alert generator is the Scheduler and the receiver is the Alertmanager. - -{{< figure src="/static/img/docs/alerting/unified/high-availability-ua.png" class="docs-image--no-shadow" max-width= "750px" caption="High availability" >}} - -When running multiple instances of Grafana, all alert rules are evaluated on all instances. You can think of the evaluation of alert rules as being duplicated. This is how Grafana Alerting makes sure that as long as at least one Grafana instance is working, alert rules will still be evaluated and notifications for alerts will still be sent. You will see this duplication in state history, and is a good way to tell if you are using high availability. - -While the alert generator evaluates all alert rules on all instances, the alert receiver makes a best-effort attempt to avoid sending duplicate notifications. Alertmanager chooses availability over consistency, which may result in occasional duplicated or out-of-order notifications. It takes the opinion that duplicate or out-of-order notifications are better than no notifications. - -The Alertmanager uses a gossip protocol to share information about notifications between Grafana instances. It also gossips silences, which means a silence created on one Grafana instance is replicated to all other Grafana instances. Both notifications and silences are persisted to the database periodically, and during graceful shut down. - -It is important to make sure that gossiping is configured and tested. You can find the documentation on how to do that [here][configure-high-availability]. - -## Useful links - -[Configure alerting high availability][configure-high-availability] - -{{% docs/reference %}} -[configure-high-availability]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/configure-high-availability" -[configure-high-availability]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/configure-high-availability" -{{% /docs/reference %}} diff --git a/docs/sources/alerting/fundamentals/notification-policies/_index.md b/docs/sources/alerting/fundamentals/notification-policies/_index.md deleted file mode 100644 index 56dc8e06bd304..0000000000000 --- a/docs/sources/alerting/fundamentals/notification-policies/_index.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/notification-policies/ -description: Learn about how notification policies work -keywords: - - grafana - - alerting - - notification policies -labels: - products: - - cloud - - enterprise - - oss -title: Notifications -weight: 160 ---- - -# Notifications - -Choosing how, when, and where to send your alert notifications is an important part of setting up your alerting system. These decisions will have a direct impact on your ability to resolve issues quickly and not miss anything important. - -As a first step, define your contact points; where to send your alert notifications to. A contact point is a set of one or more integrations that are used to deliver notifications. Add notification templates to contact points for reuse and consistent messaging in your notifications. - -Next, create a notification policy which is a set of rules for where, when and how your alerts are routed to contact points. In a notification policy, you define where to send your alert notifications by choosing one of the contact points you created. - -## Alertmanagers - -Grafana uses Alertmanagers to send notifications for firing and resolved alerts. Grafana has its own Alertmanager, referred to as "Grafana" in the user interface, but also supports sending notifications from other Alertmanagers too, such as the [Prometheus Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/). The Grafana Alertmanager uses notification policies and contact points to configure how and where a notification is sent; how often a notification should be sent; and whether alerts should all be sent in the same notification, sent in grouped notifications based on a set of labels, or as separate notifications. - -## Notification policies - -Notification policies control when and where notifications are sent. A notification policy can choose to send all alerts together in the same notification, send alerts in grouped notifications based on a set of labels, or send alerts as separate notifications. You can configure each notification policy to control how often notifications should be sent as well as having one or more mute timings to inhibit notifications at certain times of the day and on certain days of the week. - -Notification policies are organized in a tree structure where at the root of the tree there is a notification policy called the default policy. There can be only one default policy and the default policy cannot be deleted. - -Specific routing policies are children of the default policy and can be used to match either all alerts or a subset of alerts based on a set of matching labels. A notification policy matches an alert when its matching labels match the labels in the alert. - -A nested policy can have its own nested policies, which allow for additional matching of alerts. An example of a nested policy could be sending infrastructure alerts to the Ops team; while a nested policy might send high priority alerts to Pagerduty and low priority alerts as emails. - -All alerts, irrespective of their labels, match the default policy. However, when the default policy receives an alert it looks at each nested policy and sends the alert to the first nested policy that matches the alert. If the nested policy has further nested policies, then it can attempt to the match the alert against one of its nested policies. If no nested policies match the alert then the policy itself is the matching policy. If there are no nested policies, or no nested policies match the alert, then the default policy is the matching policy. - - - -## Notification templates - -You can customize notifications with templates. For example, templates can be used to change the subject and message of an email, or the title and message of notifications sent to Slack. - -Templates are not limited to an individual integration or contact point, but instead can be used in a number of integrations in the same contact point and even integrations across different contact points. For example, a Grafana user can create a template called `custom_subject_or_title` and use it for both templating subjects in emails and titles of Slack messages without having to create two separate templates. - -All notifications templates are written in [Go's templating language](https://pkg.go.dev/text/template), and are in the Contact points tab on the Alerting page. - -## Silences - -You can use silences to mute notifications from one or more firing rules. Silences do not stop alerts from firing or being resolved, or hide firing alerts in the user interface. A silence lasts as long as its duration which can be configured in minutes, hours, days, months or years. diff --git a/docs/sources/alerting/fundamentals/notification-policies/notifications.md b/docs/sources/alerting/fundamentals/notification-policies/notifications.md deleted file mode 100644 index fd98ef3961b38..0000000000000 --- a/docs/sources/alerting/fundamentals/notification-policies/notifications.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -aliases: - - ../notifications/ - - alerting/manage-notifications/create-notification-policy/ -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/notification-policies/notifications/ -description: Learn about how notification policies work and are structured -keywords: - - grafana - - alerting - - alertmanager - - notification policies - - contact points - - silences -labels: - products: - - cloud - - enterprise - - oss -title: Notification policies -weight: 410 ---- - -# Notification policies - -Notification policies provide you with a flexible way of routing alerts to various different receivers. Using label matchers, you can modify alert notification delivery without having to update every individual alert rule. - -Learn more about how notification policies work and are structured, so that you can make the most out of setting up your notification policies. - -## Policy tree - -Notification policies are _not_ a list, but rather are structured according to a [tree structure](https://en.wikipedia.org/wiki/Tree_structure). This means that each policy can have child policies, and so on. The root of the notification policy tree is called the **Default notification policy**. - -Each policy consists of a set of label matchers (0 or more) that specify which labels they are or aren't interested in handling. - -For more information on label matching, see [how label matching works][labels-and-label-matchers]. - -{{% admonition type="note" %}} -If you haven't configured any label matchers for your notification policy, your notification policy will match _all_ alert instances. This may prevent child policies from being evaluated unless you have enabled **Continue matching siblings** on the notification policy. -{{% /admonition %}} - -## Routing - -To determine which notification policy will handle which alert instances, you have to start by looking at the existing set of notification policies, starting with the default notification policy. - -If no policies other than the default policy are configured, the default policy will handle the alert instance. - -If policies other than the default policy are defined, it will inspect those notification policies in descending order. - -If a notification policy has label matchers that match the labels of the alert instance, it will descend in to its child policies and, if there are any, will continue to look for any child policies that might have label matchers that further narrow down the set of labels, and so forth until no more child policies have been found. - -If no child policies are defined in a notification policy or if none of the child policies have any label matchers that match the alert instance's labels, the default notification policy is used. - -As soon as a matching policy is found, the system does not continue to look for other matching policies. If you want to continue to look for other policies that may match, enable **Continue matching siblings** on that particular policy. - -Lastly, if none of the notification policies are selected the default notification policy is used. - -### Routing example - -Here is an example of a relatively simple notification policy tree and some alert instances. - -{{< figure src="/media/docs/alerting/notification-routing.png" max-width="750px" caption="Notification policy routing" >}} - -Here's a breakdown of how these policies are selected: - -**Pod stuck in CrashLoop** does not have a `severity` label, so none of its child policies are matched. It does have a `team=operations` label, so the first policy is matched. - -The `team=security` policy is not evaluated since we already found a match and **Continue matching siblings** was not configured for that policy. - -**Disk Usage – 80%** has both a `team` and `severity` label, and matches a child policy of the operations team. - -**Unauthorized log entry** has a `team` label but does not match the first policy (`team=operations`) since the values are not the same, so it will continue searching and match the `team=security` policy. It does not have any child policies, so the additional `severity=high` label is ignored. - -## Inheritance - -In addition to child policies being a useful concept for routing alert instances, they also inherit properties from their parent policy. This also applies to any policies that are child policies of the default notification policy. - -The following properties are inherited by child policies: - -- Contact point -- Grouping options -- Timing options -- Mute timings - -Each of these properties can be overwritten by an individual policy should you wish to override the inherited properties. - -To inherit a contact point from the parent policy, leave it blank. To override the inherited grouping options, enable **Override grouping**. To override the inherited timing options, enable **Override general timings**. - -### Inheritance example - -The example below shows how the notification policy tree from our previous example allows the child policies of the `team=operations` to inherit its contact point. - -In this way, we can avoid having to specify the same contact point multiple times for each child policy. - -{{< figure src="/media/docs/alerting/notification-inheritance.png" max-width="750px" caption="Notification policy inheritance" >}} - -## Additional configuration options - -### Grouping - -Grouping is an important feature of Grafana Alerting as it allows you to batch relevant alerts together into a smaller number of notifications. This is particularly important if notifications are delivered to first-responders, such as engineers on-call, where receiving lots of notifications in a short period of time can be overwhelming and in some cases can negatively impact a first-responders ability to respond to an incident. For example, consider a large outage where many of your systems are down. In this case, grouping can be the difference between receiving 1 phone call and 100 phone calls. - -You choose how alerts are grouped together using the Group by option in a notification policy. By default, notification policies in Grafana group alerts together by alert rule using the `alertname` and `grafana_folder` labels (since alert names are not unique across multiple folders). Should you wish to group alerts by something other than the alert rule, change the grouping to any other combination of labels. - -#### Disable grouping - -Should you wish to receive every alert as a separate notification, you can do so by grouping by a special label called `...`. This is useful when your alerts are being delivered to an automated system instead of a first-responder. - -#### A single group for all alerts - -Should you wish to receive all alerts together in a single notification, you can do so by leaving Group by empty. - -### Timing options - -The timing options decide how often notifications are sent for each group of alerts. There are three timers that you need to know about: Group wait, Group interval, and Repeat interval. - -#### Group wait - -Group wait is the amount of time Grafana waits before sending the first notification for a new group of alerts. The longer Group wait is the more time you have for other alerts to arrive. The shorter Group wait is the earlier the first notification will be sent, but at the risk of sending incomplete notifications. You should always choose a Group wait that makes the most sense for your use case. - -**Default** 30 seconds - -#### Group interval - -Once the first notification has been sent for a new group of alerts, Grafana starts the Group interval timer. This is the amount of time Grafana waits before sending notifications about changes to the group. For example, another firing alert might have just been added to the group while an existing alert might have resolved. If an alert was too late to be included in the first notification due to Group wait, it will be included in subsequent notifications after Group interval. Once Group interval has elapsed, Grafana resets the Group interval timer. This repeats until there are no more alerts in the group after which the group is deleted. - -**Default** 5 minutes - -#### Repeat interval - -Repeat interval decides how often notifications are repeated if the group has not changed since the last notification. You can think of these as reminders that some alerts are still firing. Repeat interval is closely related to Group interval, which means your Repeat interval must not only be greater than or equal to Group interval, but also must be a multiple of Group interval. If Repeat interval is not a multiple of Group interval it will be coerced into one. For example, if your Group interval is 5 minutes, and your Repeat interval is 9 minutes, the Repeat interval will be rounded up to the nearest multiple of 5 which is 10 minutes. - -**Default** 4 hours - -{{% docs/reference %}} -[labels-and-label-matchers]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/annotation-label/labels-and-label-matchers" -[labels-and-label-matchers]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/annotation-label/labels-and-label-matchers" -{{% /docs/reference %}} diff --git a/docs/sources/alerting/fundamentals/notifications/_index.md b/docs/sources/alerting/fundamentals/notifications/_index.md new file mode 100644 index 0000000000000..693c673beda4d --- /dev/null +++ b/docs/sources/alerting/fundamentals/notifications/_index.md @@ -0,0 +1,61 @@ +--- +aliases: + - ./notification-policies/ # /docs/grafana//alerting/fundamentals/notification-policies/ +canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/notifications/ +description: Learn about how notifications work +keywords: + - grafana + - alerting + - notification policies +labels: + products: + - cloud + - enterprise + - oss +title: Notifications +weight: 110 +--- + +# Notifications + +Choosing how, when, and where to send your alert notifications is an important part of setting up your alerting system. These decisions will have a direct impact on your ability to resolve issues quickly and not miss anything important. + +As a first step, define your contact points; where to send your alert notifications to. A contact point is a set of one or more integrations that are used to deliver notifications. Add notification templates to contact points for reuse and consistent messaging in your notifications. + +Next, create a notification policy which is a set of rules for where, when and how your alerts are routed to contact points. In a notification policy, you define where to send your alert notifications by choosing one of the contact points you created. + +## Alertmanagers + +Grafana uses Alertmanagers to send notifications for firing and resolved alerts. Grafana has its own Alertmanager, referred to as "Grafana" in the user interface, but also supports sending notifications from other Alertmanagers too, such as the [Prometheus Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/). The Grafana Alertmanager uses notification policies and contact points to configure how and where a notification is sent; how often a notification should be sent; and whether alerts should all be sent in the same notification, sent in grouped notifications based on a set of labels, or as separate notifications. + +## Contact points + +Contact points contain the configuration for sending alert notifications, specifying destinations like email, Slack, OnCall, webhooks, and their notification messages. They allow the customization of notification messages and the use of notification templates. + +A contact point is a list of integrations, each sending a message to a specific destination. You can configure them via notification policies or alert rules. + +## Notification policies + +Notification policies control when and where notifications are sent. A notification policy can choose to send all alerts together in the same notification, send alerts in grouped notifications based on a set of labels, or send alerts as separate notifications. You can configure each notification policy to control how often notifications should be sent as well as having one or more mute timings to inhibit notifications at certain times of the day and on certain days of the week. + +Notification policies are organized in a tree structure where at the root of the tree there is a notification policy called the default policy. There can be only one default policy and the default policy cannot be deleted. + +Specific routing policies are children of the default policy and can be used to match either all alerts or a subset of alerts based on a set of matching labels. A notification policy matches an alert when its matching labels match the labels in the alert. + +A nested policy can have its own nested policies, which allow for additional matching of alerts. An example of a nested policy could be sending infrastructure alerts to the Ops team; while a nested policy might send high priority alerts to Pagerduty and low priority alerts as emails. + +All alerts, irrespective of their labels, match the default policy. However, when the default policy receives an alert it looks at each nested policy and sends the alert to the first nested policy that matches the alert. If the nested policy has further nested policies, then it can attempt to the match the alert against one of its nested policies. If no nested policies match the alert then the policy itself is the matching policy. If there are no nested policies, or no nested policies match the alert, then the default policy is the matching policy. + + + +## Notification templates + +You can customize notifications with templates. For example, templates can be used to change the subject and message of an email, or the title and message of notifications sent to Slack. + +Templates are not limited to an individual integration or contact point, but instead can be used in a number of integrations in the same contact point and even integrations across different contact points. For example, a Grafana user can create a template called `custom_subject_or_title` and use it for both templating subjects in emails and titles of Slack messages without having to create two separate templates. + +All notifications templates are written in [Go's templating language](https://pkg.go.dev/text/template), and are in the Contact points tab on the Alerting page. + +## Silences + +You can use silences to mute notifications from one or more firing rules. Silences do not stop alerts from firing or being resolved, or hide firing alerts in the user interface. A silence lasts as long as its duration which can be configured in minutes, hours, days, months or years. diff --git a/docs/sources/alerting/fundamentals/notifications/alertmanager.md b/docs/sources/alerting/fundamentals/notifications/alertmanager.md new file mode 100644 index 0000000000000..8a744659fb09b --- /dev/null +++ b/docs/sources/alerting/fundamentals/notifications/alertmanager.md @@ -0,0 +1,46 @@ +--- +aliases: + - ../../fundamentals/alertmanager/ # /docs/grafana//alerting/fundamentals/alertmanager/ + - ../../unified-alerting/fundamentals/alertmanager/ # /docs/grafana//alerting/unified-alerting/fundamentals/alertmanager/ + - ../../manage-notifications/alertmanager/ # /docs/grafana//alerting/manage-notifications/alertmanager/ +canonical: https://grafana.com/docs/grafana/latest/alerting/notifications/alertmanager/ +description: Learn about Alertmanagers and the Alertmanager options for Grafana Alerting +labels: + products: + - cloud + - enterprise + - oss +title: Alertmanager +weight: 111 +--- + +# Alertmanager + +Grafana sends firing and resolved alerts to Alertmanagers. The Alertmanager receives alerts, handles silencing, inhibition, grouping, and routing by sending notifications out via your channel of choice, for example, email or Slack. + +Grafana has its own Alertmanager, referred to as "Grafana" in the user interface, but also supports sending alerts to other Alertmanagers too, such as the [Prometheus Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/). + +The Grafana Alertmanager uses notification policies and contact points to configure how and where a notification is sent; how often a notification should be sent; and whether alerts should all be sent in the same notification, sent in grouped notifications based on a set of labels, or as separate notifications. + +Alertmanagers are visible from the drop-down menu on the Alerting Contact Points, Notification Policies, and Silences pages. + +In Grafana, you can use the Cloud Alertmanager, Grafana Alertmanager, or an external Alertmanager. You can also run multiple Alertmanagers; your decision depends on your set up and where your alerts are being generated. + +- **Grafana Alertmanager** is an internal Alertmanager that is pre-configured and available for selection by default if you run Grafana on-premises or open-source. + + The Grafana Alertmanager can receive alerts from Grafana, but it cannot receive alerts from outside Grafana, for example, from Mimir or Loki. Note that inhibition rules are not supported. + +- **Cloud Alertmanager** runs in Grafana Cloud and it can receive alerts from Grafana, Mimir, and Loki. + +- **External Alertmanager** can receive all your Grafana, Loki, Mimir, and Prometheus alerts. External Alertmanagers can be configured and administered from within Grafana itself. + +Here are two examples of when you may want to [add your own external alertmanager][configure-alertmanager] and send your alerts there instead of the Grafana Alertmanager: + +1. You may already have Alertmanagers on-premises in your own Cloud infrastructure that you have set up and still want to use, because you have other alert generators, such as Prometheus. + +2. You want to use both Prometheus on-premises and hosted Grafana to send alerts to the same Alertmanager that runs in your Cloud infrastructure. + +{{% docs/reference %}} +[configure-alertmanager]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/configure-alertmanager" +[configure-alertmanager]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/configure-alertmanager" +{{% /docs/reference %}} diff --git a/docs/sources/alerting/fundamentals/notifications/contact-points.md b/docs/sources/alerting/fundamentals/notifications/contact-points.md new file mode 100644 index 0000000000000..98aa75a0f8c9a --- /dev/null +++ b/docs/sources/alerting/fundamentals/notifications/contact-points.md @@ -0,0 +1,64 @@ +--- +aliases: + - ../../fundamentals/contact-points/ # /docs/grafana//alerting/fundamentals/contact-points/ + - ../../fundamentals/contact-points/contact-point-types/ # /docs/grafana//alerting/fundamentals/contact-points/contact-point-types/ + - ../../contact-points/ # /docs/grafana//alerting/contact-points/ + - ../../unified-alerting/contact-points/ # /docs/grafana//alerting/unified-alerting/contact-points/ +canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/notifications/contact-points/ +description: Learn about contact points and the supported contact point integrations +keywords: + - grafana + - alerting + - guide + - contact point + - notification channel + - create +labels: + products: + - cloud + - enterprise + - oss +title: Contact points +weight: 112 +--- + +# Contact points + +Contact points contain the configuration for sending notifications. A contact point is a list of integrations, each of which sends a notification to a particular email address, service or URL. Contact points can have multiple integrations of the same kind, or a combination of integrations of different kinds. For example, a contact point could contain a Pagerduty integration; an email and Slack integration; or a Pagerduty integration, a Slack integration, and two email integrations. You can also configure a contact point with no integrations; in which case no notifications are sent. + +A contact point cannot send notifications until it has been added to a notification policy. A notification policy can only send alerts to one contact point, but a contact point can be added to a number of notification policies at the same time. When an alert matches a notification policy, the alert is sent to the contact point in that notification policy, which then sends a notification to each integration in its configuration. + +Contact points can be configured for the Grafana Alertmanager as well as external alertmanagers. + +You can also use notification templating to customize notification messages for contact point integrations. + +**Note:** + +If you've created an OnCall contact point in the Grafana OnCall application, you can view it in the Alerting application. + +## Supported contact point integrations + +The following table lists the contact point integrations supported by Grafana. + +| Name | Type | Grafana Alertmanager | Other Alertmanagers | +| ------------------------------------------------ | ------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------- | +| [DingDing](https://www.dingtalk.com/en) | `dingding` | Supported | N/A | +| [Discord](https://discord.com/) | `discord` | Supported | N/A | +| Email | `email` | Supported | Supported | +| [Google Chat](https://chat.google.com/) | `googlechat` | Supported | N/A | +| [Kafka](https://kafka.apache.org/) | `kafka` | Supported | N/A | +| [Line](https://line.me/en/) | `line` | Supported | N/A | +| [Microsoft Teams](https://teams.microsoft.com/) | `teams` | Supported | Supported | +| [Opsgenie](https://atlassian.com/opsgenie/) | `opsgenie` | Supported | Supported | +| [Pagerduty](https://www.pagerduty.com/) | `pagerduty` | Supported | Supported | +| [Prometheus Alertmanager](https://prometheus.io) | `prometheus-alertmanager` | Supported | N/A | +| [Pushover](https://pushover.net/) | `pushover` | Supported | Supported | +| [Sensu Go](https://docs.sensu.io/sensu-go/) | `sensugo` | Supported | N/A | +| [Slack](https://slack.com/) | `slack` | Supported | Supported | +| [Telegram](https://telegram.org/) | `telegram` | Supported | N/A | +| [Threema](https://threema.ch/) | `threema` | Supported | N/A | +| [VictorOps](https://help.victorops.com/) | `victorops` | Supported | Supported | +| Webhook | `webhook` | Supported | Supported ([different format](https://prometheus.io/docs/alerting/latest/configuration/#webhook_config)) | +| Cisco Webex Teams | `webex` | Supported | Supported | +| WeCom | `wecom` | Supported | N/A | +| [Zenduty](https://www.zenduty.com/) | `webhook` | Supported | N/A | diff --git a/docs/sources/alerting/fundamentals/alert-rules/message-templating.md b/docs/sources/alerting/fundamentals/notifications/message-templating.md similarity index 86% rename from docs/sources/alerting/fundamentals/alert-rules/message-templating.md rename to docs/sources/alerting/fundamentals/notifications/message-templating.md index b9aa80e72edd2..9e6d33eae91b2 100644 --- a/docs/sources/alerting/fundamentals/alert-rules/message-templating.md +++ b/docs/sources/alerting/fundamentals/notifications/message-templating.md @@ -1,9 +1,9 @@ --- aliases: - - ../../contact-points/message-templating/ - - ../../message-templating/ - - ../../unified-alerting/message-templating/ -canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/alert-rules/message-templating/ + - ../../contact-points/message-templating/ # /docs/grafana//alerting/contact-points/message-templating/ + - ../../alert-rules/message-templating/ # /docs/grafana//alerting/alert-rules/message-templating/ + - ../../unified-alerting/message-templating/ # /docs/grafana//alerting/unified-alerting/message-templating/ +canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/notifications/message-templating/ description: Learn about notification templating keywords: - grafana @@ -16,11 +16,11 @@ labels: - cloud - enterprise - oss -title: Notification templating -weight: 415 +title: Notification templates +weight: 114 --- -# Notification templating +# Notification templates Notifications sent via contact points are built using notification templates. Grafana's default templates are based on the [Go templating system](https://golang.org/pkg/text/template) where some fields are evaluated as text, while others are evaluated as HTML (which can affect escaping). diff --git a/docs/sources/alerting/fundamentals/notifications/notification-policies.md b/docs/sources/alerting/fundamentals/notifications/notification-policies.md new file mode 100644 index 0000000000000..1e4d1d2dcf68f --- /dev/null +++ b/docs/sources/alerting/fundamentals/notifications/notification-policies.md @@ -0,0 +1,136 @@ +--- +aliases: + - ../notification-policies/notifications/ # /docs/grafana//alerting/fundamentals/notification-policies/notifications/ +canonical: https://grafana.com/docs/grafana/latest/alerting/fundamentals/notifications/notification-policies/ +description: Learn about how notification policies work and are structured +keywords: + - grafana + - alerting + - alertmanager + - notification policies + - contact points + - silences +labels: + products: + - cloud + - enterprise + - oss +title: Notification policies +weight: 113 +--- + +# Notification policies + +Notification policies provide you with a flexible way of routing alerts to various different receivers. Using label matchers, you can modify alert notification delivery without having to update every individual alert rule. + +Learn more about how notification policies work and are structured, so that you can make the most out of setting up your notification policies. + +## Policy tree + +Notification policies are _not_ a list, but rather are structured according to a [tree structure](https://en.wikipedia.org/wiki/Tree_structure). This means that each policy can have child policies, and so on. The root of the notification policy tree is called the **Default notification policy**. + +Each policy consists of a set of label matchers (0 or more) that specify which labels they are or aren't interested in handling. + +For more information on label matching, see [how label matching works][labels-and-label-matchers]. + +{{% admonition type="note" %}} +If you haven't configured any label matchers for your notification policy, your notification policy will match _all_ alert instances. This may prevent child policies from being evaluated unless you have enabled **Continue matching siblings** on the notification policy. +{{% /admonition %}} + +## Routing + +To determine which notification policy will handle which alert instances, you have to start by looking at the existing set of notification policies, starting with the default notification policy. + +If no policies other than the default policy are configured, the default policy will handle the alert instance. + +If policies other than the default policy are defined, it will evaluate those notification policies in the order they are displayed. + +If a notification policy has label matchers that match the labels of the alert instance, it will descend in to its child policies and, if there are any, will continue to look for any child policies that might have label matchers that further narrow down the set of labels, and so forth until no more child policies have been found. + +If no child policies are defined in a notification policy or if none of the child policies have any label matchers that match the alert instance's labels, the default notification policy is used. + +As soon as a matching policy is found, the system does not continue to look for other matching policies. If you want to continue to look for other policies that may match, enable **Continue matching siblings** on that particular policy. + +Lastly, if none of the notification policies are selected the default notification policy is used. + +### Routing example + +Here is an example of a relatively simple notification policy tree and some alert instances. + +{{< figure src="/media/docs/alerting/notification-routing.png" max-width="750px" caption="Notification policy routing" >}} + +Here's a breakdown of how these policies are selected: + +**Pod stuck in CrashLoop** does not have a `severity` label, so none of its child policies are matched. It does have a `team=operations` label, so the first policy is matched. + +The `team=security` policy is not evaluated since we already found a match and **Continue matching siblings** was not configured for that policy. + +**Disk Usage – 80%** has both a `team` and `severity` label, and matches a child policy of the operations team. + +**Unauthorized log entry** has a `team` label but does not match the first policy (`team=operations`) since the values are not the same, so it will continue searching and match the `team=security` policy. It does not have any child policies, so the additional `severity=high` label is ignored. + +## Inheritance + +In addition to child policies being a useful concept for routing alert instances, they also inherit properties from their parent policy. This also applies to any policies that are child policies of the default notification policy. + +The following properties are inherited by child policies: + +- Contact point +- Grouping options +- Timing options +- Mute timings + +Each of these properties can be overwritten by an individual policy should you wish to override the inherited properties. + +To inherit a contact point from the parent policy, leave it blank. To override the inherited grouping options, enable **Override grouping**. To override the inherited timing options, enable **Override general timings**. + +### Inheritance example + +The example below shows how the notification policy tree from our previous example allows the child policies of the `team=operations` to inherit its contact point. + +In this way, we can avoid having to specify the same contact point multiple times for each child policy. + +{{< figure src="/media/docs/alerting/notification-inheritance.png" max-width="750px" caption="Notification policy inheritance" >}} + +## Additional configuration options + +### Grouping + +Grouping is an important feature of Grafana Alerting as it allows you to batch relevant alerts together into a smaller number of notifications. This is particularly important if notifications are delivered to first-responders, such as engineers on-call, where receiving lots of notifications in a short period of time can be overwhelming and in some cases can negatively impact a first-responders ability to respond to an incident. For example, consider a large outage where many of your systems are down. In this case, grouping can be the difference between receiving 1 phone call and 100 phone calls. + +You choose how alerts are grouped together using the Group by option in a notification policy. By default, notification policies in Grafana group alerts together by alert rule using the `alertname` and `grafana_folder` labels (since alert names are not unique across multiple folders). Should you wish to group alerts by something other than the alert rule, change the grouping to any other combination of labels. + +#### Disable grouping + +Should you wish to receive every alert as a separate notification, you can do so by grouping by a special label called `...`. This is useful when your alerts are being delivered to an automated system instead of a first-responder. + +#### A single group for all alerts + +Should you wish to receive all alerts together in a single notification, you can do so by leaving Group by empty. + +### Timing options + +The timing options decide how often notifications are sent for each group of alerts. There are three timers that you need to know about: Group wait, Group interval, and Repeat interval. + +#### Group wait + +Group wait is the amount of time Grafana waits before sending the first notification for a new group of alerts. The longer Group wait is the more time you have for other alerts to arrive. The shorter Group wait is the earlier the first notification will be sent, but at the risk of sending incomplete notifications. You should always choose a Group wait that makes the most sense for your use case. + +**Default** 30 seconds + +#### Group interval + +Once the first notification has been sent for a new group of alerts, Grafana starts the Group interval timer. This is the amount of time Grafana waits before sending notifications about changes to the group. For example, another firing alert might have just been added to the group while an existing alert might have resolved. If an alert was too late to be included in the first notification due to Group wait, it will be included in subsequent notifications after Group interval. Once Group interval has elapsed, Grafana resets the Group interval timer. This repeats until there are no more alerts in the group after which the group is deleted. + +**Default** 5 minutes + +#### Repeat interval + +Repeat interval decides how often notifications are repeated if the group has not changed since the last notification. You can think of these as reminders that some alerts are still firing. Repeat interval is closely related to Group interval, which means your Repeat interval must not only be greater than or equal to Group interval, but also must be a multiple of Group interval. If Repeat interval is not a multiple of Group interval it will be coerced into one. For example, if your Group interval is 5 minutes, and your Repeat interval is 9 minutes, the Repeat interval will be rounded up to the nearest multiple of 5 which is 10 minutes. + +**Default** 4 hours + +{{% docs/reference %}} +[labels-and-label-matchers]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/alert-rules/annotation-label#how-label-matching-works" +[labels-and-label-matchers]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alert-rules/annotation-label#how-label-matching-works" +{{% /docs/reference %}} diff --git a/docs/sources/alerting/manage-notifications/_index.md b/docs/sources/alerting/manage-notifications/_index.md index 31f9683375f08..9adb839afcce8 100644 --- a/docs/sources/alerting/manage-notifications/_index.md +++ b/docs/sources/alerting/manage-notifications/_index.md @@ -1,47 +1,22 @@ --- canonical: https://grafana.com/docs/grafana/latest/alerting/manage-notifications/ -description: Manage your alerts by creating silences, mute timings, and more +description: Detect and respond for day-to-day triage and analysis of what’s going on and action you need to take keywords: - grafana - - alert - - notifications + - detect + - respond labels: products: - cloud - enterprise - oss -menuTitle: Manage -title: Manage your alerts +menuTitle: Detect and respond +title: Detect and respond weight: 130 --- -# Manage your alerts +# Detect and respond -Once you have set up your alert rules, contact points, and notification policies, you can use Grafana Alerting to: +Use Grafana Alerting to track and generate alerts and send notifications, providing an efficient way for engineers to monitor, respond, and triage issues within their services. -[Create silences][create-silence] - -[Create mute timings][mute-timings] - -[Declare incidents from firing alerts][declare-incident-from-firing-alert] - -[View the state and health of alert rules][view-state-health] - -[View and filter alert rules][view-alert-rules] - -{{% docs/reference %}} -[create-silence]: "/docs/grafana/ -> /docs/grafana//alerting/manage-notifications/create-silence" -[create-silence]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/manage-notifications/create-silence" - -[declare-incident-from-firing-alert]: "/docs/grafana/ -> /docs/grafana//alerting/manage-notifications/declare-incident-from-alert" -[declare-incident-from-firing-alert]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/manage-notifications/declare-incident-from-alert" - -[mute-timings]: "/docs/grafana/ -> /docs/grafana//alerting/manage-notifications/mute-timings" -[mute-timings]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/manage-notifications/mute-timings" - -[view-alert-rules]: "/docs/grafana/ -> /docs/grafana//alerting/manage-notifications/view-alert-rules" -[view-alert-rules]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/manage-notifications/view-alert-rules" - -[view-state-health]: "/docs/grafana/ -> /docs/grafana//alerting/manage-notifications/view-state-health" -[view-state-health]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/manage-notifications/view-state-health" -{{% /docs/reference %}} +Alerts and alert notifications provide a lot of value as key indicators to issues during the triage process, providing engineers with the information they need to understand what is going on in their system or service. diff --git a/docs/sources/alerting/manage-notifications/create-silence.md b/docs/sources/alerting/manage-notifications/create-silence.md deleted file mode 100644 index 3b0d544360ead..0000000000000 --- a/docs/sources/alerting/manage-notifications/create-silence.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -aliases: - - ../silences/create-silence/ - - ../silences/edit-silence/ - - ../silences/linking-to-silence-form/ - - ../silences/remove-silence/ - - ../unified-alerting/silences/ - - ../silences/ -canonical: https://grafana.com/docs/grafana/latest/alerting/manage-notifications/create-silence/ -description: Create silences to stop notifications from getting created for a specified window of time -keywords: - - grafana - - alerting - - silence - - mute -labels: - products: - - cloud - - enterprise - - oss -title: Manage silences -weight: 410 ---- - -# Manage silences - -Silences stop notifications from getting created and last for only a specified window of time. - -**Note that inhibition rules are not supported in the Grafana Alertmanager.** - -## Add silences - -To add a silence, complete the following steps. - -1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. -1. Click **Silences**. -1. From the **Alertmanager** dropdown, select an external Alertmanager to create and manage silences for the external data source. Otherwise, keep the default option of Grafana. -1. Click **Create silence** to open the Create silence page. -1. In **Silence start and end**, select the start and end date to indicate when the silence should go into effect and expire. -1. Optionally, in **Duration**, specify how long the silence is enforced. This automatically updates the end time in the **Silence start and end** field. -1. In the **Label** and **Value** fields, enter one or more _Matching Labels_. Matchers determine which rules the silence will apply to. -1. In **Comment**, add details about the silence. -1. Click **Submit**. - -## Edit silences - -To edit a silence, complete the following steps. - -1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. -1. Click **Silences** to view the list of existing silences. -1. Find the silence you want to edit, then click **Edit** (pen icon). -1. Make the desired changes, then click **Submit** to save your changes. - -## Create a URL to link to a silence form - -When linking to a silence form, provide the default matching labels and comment via `matcher` and `comment` query parameters. The `matcher` parameter should be in the following format `[label][operator][value]` where the `operator` parameter can be one of the following: `=` (equals, not regex), `!=` (not equals, not regex), `=~` (equals, regex), `!~` (not equals, regex). -The URL can contain many query parameters with the key `matcher`. -For example, to link to silence form with matching labels `severity=critical` & `cluster!~europe-.*` and comment `Silence critical EU alerts`, create a URL `https://mygrafana/alerting/silence/new?matcher=severity%3Dcritical&matcher=cluster!~europe-*&comment=Silence%20critical%20EU%20alert`. - -To link to a new silence page for an external Alertmanager, add a `alertmanager` query parameter with the Alertmanager data source name. - -## Remove silences - -To remove a silence, complete the following steps. - -1. In the left-side menu, click **Alerts & IRM** and then **Alerting**. -1. Click **Silences** to view the list of existing silences. -1. Select the silence you want to end, then click **Unsilence**. - -> **Note:** You cannot remove a silence manually. Silences that have ended are retained and listed for five days. - -## Useful links - -[Aggregation operators](https://prometheus.io/docs/prometheus/latest/querying/operators/#aggregation-operators) diff --git a/docs/sources/alerting/manage-notifications/declare-incident-from-alert.md b/docs/sources/alerting/manage-notifications/declare-incident-from-alert.md index 10459fa355e68..019efae8699f8 100644 --- a/docs/sources/alerting/manage-notifications/declare-incident-from-alert.md +++ b/docs/sources/alerting/manage-notifications/declare-incident-from-alert.md @@ -1,6 +1,6 @@ --- aliases: - - alerting/alerting-rules/declare-incident-from-alert/ + - ../../alerting/alerting-rules/declare-incident-from-alert/ # /docs/grafana//alerting/alerting-rules/declare-incident-from-alert/ canonical: https://grafana.com/docs/grafana/latest/alerting/manage-notifications/declare-incident-from-alert/ description: Declare an incident from a firing alert keywords: diff --git a/docs/sources/alerting/manage-notifications/manage-contact-points.md b/docs/sources/alerting/manage-notifications/manage-contact-points.md deleted file mode 100644 index bbfd98e4b1e29..0000000000000 --- a/docs/sources/alerting/manage-notifications/manage-contact-points.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -canonical: https://grafana.com/docs/grafana/latest/alerting/manage-notifications/manage-contact-points/ -description: View, edit, copy, or delete your contact points and notification templates -keywords: - - grafana - - alerting - - contact points - - search - - export -labels: - products: - - cloud - - enterprise - - oss -title: Manage contact points -weight: 410 ---- - -# Manage contact points - -The Contact points list view lists all existing contact points and notification templates. - -On the **Contact Points** tab, you can: - -- Search for name and type of contact points and integrations -- View all existing contact points and integrations -- View how many notification policies each contact point is being used for and navigate directly to the linked notification policies -- View the status of notification deliveries -- Export individual contact points or all contact points in JSON, YAML, or Terraform format -- Delete contact points that are not in use by a notification policy - -On the **Notification templates** tab, you can: - -- View, edit, copy or delete existing notification templates diff --git a/docs/sources/alerting/manage-notifications/template-notifications/_index.md b/docs/sources/alerting/manage-notifications/template-notifications/_index.md deleted file mode 100644 index 735f1b0c874f7..0000000000000 --- a/docs/sources/alerting/manage-notifications/template-notifications/_index.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -canonical: https://grafana.com/docs/grafana/latest/alerting/manage-notifications/template-notifications/ -description: Customize your notifications using notification templates -keywords: - - grafana - - alerting - - notifications - - templates -labels: - products: - - cloud - - enterprise - - oss -title: Customize notifications -weight: 400 ---- - -# Customize notifications - -Customize your notifications with notifications templates. - -You can use notification templates to change the title, message, and format of the message in your notifications. - -Notification templates are not tied to specific contact point integrations, such as email or Slack. However, you can choose to create separate notification templates for different contact point integrations. - -You can use notification templates to: - -- Customize the subject of an email or the title of a message. -- Add, change or remove text in notifications. For example, to select or omit certain labels, annotations and links. -- Format text in bold and italic, and add or remove line breaks. - -You cannot use notification templates to: - -- Add HTML and CSS to email notifications to change their visual appearance. -- Change the design of notifications in instant messaging services such as Slack and Microsoft Teams. For example, to add or remove custom blocks with Slack Block Kit or adaptive cards with Microsoft Teams. -- Choose the number and size of images, or where in the notification images are shown. -- Customize the data in webhooks, including the fields or structure of the JSON data or send the data in other formats such as XML. -- Add or remove HTTP headers in webhooks other than those in the contact point configuration. - -[Using Go's templating language][using-go-templating-language] - -Learn how to write the content of your notification templates in Go’s templating language. - -Create reusable notification templates for your contact points. - -[Use notification templates][use-notification-templates] - -Use notification templates to send notifications to your contact points. - -[Reference][reference] - -Data that is available when writing templates. - -{{% docs/reference %}} -[reference]: "/docs/grafana/ -> /docs/grafana//alerting/manage-notifications/template-notifications/reference" -[reference]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/manage-notifications/template-notifications/reference" - -[use-notification-templates]: "/docs/grafana/ -> /docs/grafana//alerting/manage-notifications/template-notifications/use-notification-templates" -[use-notification-templates]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/manage-notifications/template-notifications/use-notification-templates" - -[using-go-templating-language]: "/docs/grafana/ -> /docs/grafana//alerting/manage-notifications/template-notifications/using-go-templating-language" -[using-go-templating-language]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/manage-notifications/template-notifications/using-go-templating-language" -{{% /docs/reference %}} diff --git a/docs/sources/alerting/manage-notifications/template-notifications/use-notification-templates.md b/docs/sources/alerting/manage-notifications/template-notifications/use-notification-templates.md deleted file mode 100644 index 78f2293b43358..0000000000000 --- a/docs/sources/alerting/manage-notifications/template-notifications/use-notification-templates.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -canonical: https://grafana.com/docs/grafana/latest/alerting/manage-notifications/template-notifications/use-notification-templates/ -description: Use notification templates in contact points to customize your notifications -keywords: - - grafana - - alerting - - notifications - - templates - - use templates -labels: - products: - - cloud - - enterprise - - oss -title: Use notification templates -weight: 300 ---- - -# Use notification templates - -Use templates in contact points to customize your notifications. - -In the Contact points tab, you can see a list of your contact points. - -1. To create a new contact point, click New. - - **Note:** You can edit an existing contact by clicking the Edit icon. - -2. Execute a template from one or more fields such as Message and Subject: - - {{< figure max-width="940px" src="/static/img/docs/alerting/unified/use-notification-template-9-4.png" caption="Use notification template" >}} - - For more information on how to write and execute templates, refer to [Using Go's templating language][using-go-templating-language] and [Create notification templates][create-notification-templates]. - -3. Click Save template. - -{{% docs/reference %}} -[create-notification-templates]: "/docs/grafana/ -> /docs/grafana//alerting/manage-notifications/template-notifications/create-notification-templates" -[create-notification-templates]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/manage-notifications/template-notifications/create-notification-templates" - -[using-go-templating-language]: "/docs/grafana/ -> /docs/grafana//alerting/manage-notifications/template-notifications/using-go-templating-language" -[using-go-templating-language]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/manage-notifications/template-notifications/using-go-templating-language" -{{% /docs/reference %}} diff --git a/docs/sources/alerting/manage-notifications/view-alert-groups.md b/docs/sources/alerting/manage-notifications/view-alert-groups.md index 105806767dd03..f050af7373fa0 100644 --- a/docs/sources/alerting/manage-notifications/view-alert-groups.md +++ b/docs/sources/alerting/manage-notifications/view-alert-groups.md @@ -1,10 +1,9 @@ --- aliases: - - -docs/grafana/latest/alerting/manage-notifications/view-alert-groups/ - - ../alert-groups/ - - ../alert-groups/filter-alerts/ - - ../alert-groups/view-alert-grouping/ - - ../unified-alerting/alert-groups/ + - ../../alerting/alert-groups/ # /docs/grafana//alerting/alert-groups/ + - ../../alerting/alert-groups/filter-alerts/ # /docs/grafana//alerting/alert-groups/filter-alerts/ + - ../../alerting/alert-groups/view-alert-grouping/ # /docs/grafana//alerting/alert-groups/view-alert-grouping/ + - ../../alerting/unified-alerting/alert-groups/ # /docs/grafana//alerting/unified-alerting/alert-groups/ canonical: https://grafana.com/docs/grafana/latest/alerting/manage-notifications/view-alert-groups/ description: Alert groups keywords: diff --git a/docs/sources/alerting/manage-notifications/view-alert-rules.md b/docs/sources/alerting/manage-notifications/view-alert-rules.md index 0306c707d9130..824c4a69ce7a4 100644 --- a/docs/sources/alerting/manage-notifications/view-alert-rules.md +++ b/docs/sources/alerting/manage-notifications/view-alert-rules.md @@ -1,8 +1,8 @@ --- aliases: - - ../unified-alerting/alerting-rules/rule-list/ - - ../view-alert-rules/ - - rule-list/ + - ../../alerting/unified-alerting/alerting-rules/rule-list/ # /docs/grafana//alerting/unified-alerting/alerting-rules/rule-list + - ../../alerting/alerting-rules/view-alert-rules/ # /docs/grafana//alerting/alerting-rules/view-alert-rules + - ../../alerting/alerting-rules/rule-list/ # /docs/grafana//alerting/alerting-rules/rule-list canonical: https://grafana.com/docs/grafana/latest/alerting/manage-notifications/view-alert-rules/ description: View and filter by alert rules keywords: @@ -52,7 +52,7 @@ From the Alert list page, you can also make copies of alert rules to help you re Click the **Export rule group** icon next to each alert rule group to export to YAML, JSON, or Terraform. -Click **More** -> **Export all Grafana-managed rules** to export all Grafana-managed alert rules to YAML, JSON, or Terraform. +Click **Export rules** to export all Grafana-managed alert rules to YAML, JSON, or Terraform. Click **More** -> **Modify export** next to each individual alert rule within a group to edit provisioned alert rules and export a modified version. diff --git a/docs/sources/alerting/manage-notifications/view-state-health.md b/docs/sources/alerting/manage-notifications/view-state-health.md index 0ebed5afd1182..96f4b3275699a 100644 --- a/docs/sources/alerting/manage-notifications/view-state-health.md +++ b/docs/sources/alerting/manage-notifications/view-state-health.md @@ -1,8 +1,6 @@ --- aliases: - - ../fundamentals/state-and-health/ - - ../unified-alerting/alerting-rules/state-and-health/ - - ../view-state-health/ + - ../../alerting/alerting-rules/view-state-health/ # /docs/grafana//alerting/alerting-rules/view-state-health canonical: https://grafana.com/docs/grafana/latest/alerting/manage-notifications/view-state-health/ description: View the state and health of alert rules keywords: diff --git a/docs/sources/alerting/set-up/_index.md b/docs/sources/alerting/set-up/_index.md index 761a2be32228b..e07d33b08be7d 100644 --- a/docs/sources/alerting/set-up/_index.md +++ b/docs/sources/alerting/set-up/_index.md @@ -1,6 +1,6 @@ --- aliases: - - unified-alerting/set-up/ + - unified-alerting/set-up/ # /docs/grafana//alerting/unified-alerting/set-up/ canonical: https://grafana.com/docs/grafana/latest/alerting/set-up/ description: Set up or upgrade your implementation of Grafana Alerting labels: @@ -60,21 +60,19 @@ The following topics provide you with advanced configuration options for Grafana - [Configure high availability][configure-high-availability] {{% docs/reference %}} -[configure-alertmanager]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/configure-alertmanager" +[configure-alertmanager]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/configure-alertmanager" [configure-alertmanager]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/configure-alertmanager" -[configure-high-availability]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/configure-high-availability" +[configure-high-availability]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/configure-high-availability" [configure-high-availability]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/configure-high-availability" -[data-source-alerting]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/data-source-alerting" -[data-source-alerting]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/data-source-alerting" +[data-source-alerting]: "/docs/grafana/ -> /docs/grafana//alerting/fundamentals/alert-rules#supported-data-sources" +[data-source-alerting]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/fundamentals/alert-rules#supported-data-sources" -[data-source-management]: "/docs/grafana/ -> /docs/grafana//administration/data-source-management" -[data-source-management]: "/docs/grafana-cloud/ -> /docs/grafana//administration/data-source-management" +[data-source-management]: "/docs/ -> /docs/grafana//administration/data-source-management" -[file-provisioning]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/file-provisioning" -[file-provisioning]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/file-provisioning" +[file-provisioning]: "/docs/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/file-provisioning" -[terraform-provisioning]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/terraform-provisioning" +[terraform-provisioning]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/terraform-provisioning" [terraform-provisioning]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/terraform-provisioning" {{% /docs/reference %}} diff --git a/docs/sources/alerting/set-up/configure-alert-state-history/index.md b/docs/sources/alerting/set-up/configure-alert-state-history/index.md index 1f82d29778799..a9892dc716b3b 100644 --- a/docs/sources/alerting/set-up/configure-alert-state-history/index.md +++ b/docs/sources/alerting/set-up/configure-alert-state-history/index.md @@ -9,12 +9,12 @@ keywords: - alert state history labels: products: - - cloud -title: Configure Alert State History -weight: 600 + - oss +title: Configure alert state history +weight: 250 --- -# Configure Alert State History +# Configure alert state history Starting with Grafana 10, Alerting can record all alert rule state changes for your Grafana managed alert rules in a Loki instance. diff --git a/docs/sources/alerting/set-up/configure-alertmanager/index.md b/docs/sources/alerting/set-up/configure-alertmanager/index.md index 3b6d24a6d8a32..d2d9c3148c819 100644 --- a/docs/sources/alerting/set-up/configure-alertmanager/index.md +++ b/docs/sources/alerting/set-up/configure-alertmanager/index.md @@ -1,6 +1,6 @@ --- aliases: - - ../configure-alertmanager/ + - ../configure-alertmanager/ # /docs/grafana//configure-alertmanager/ canonical: https://grafana.com/docs/grafana/latest/alerting/set-up/configure-alertmanager/ description: Configure an Alertmanager to receive all of your alerts keywords: @@ -27,11 +27,7 @@ Grafana Alerting does not support sending alerts to the AWS Managed Service for Once you have added the Alertmanager, you can use the Grafana Alerting UI to manage silences, contact points, and notification policies. A drop-down option in these pages allows you to switch between alertmanagers. -{{% admonition type="note" %}} -Starting with Grafana 9.2, the URL configuration of external alertmanagers from the Admin tab on the Alerting page is deprecated. It will be removed in a future release. -{{% /admonition %}} - -External alertmanagers should now be configured as data sources using Grafana Configuration from the main Grafana navigation menu. This enables you to manage the contact points and notification policies of external alertmanagers from within Grafana and also encrypts HTTP basic authentication credentials that were previously visible when configuring external alertmanagers by URL. +External alertmanagers should now be configured as data sources using Grafana Configuration from the main Grafana navigation menu. This enables you to manage the contact points and notification policies of external alertmanagers from within Grafana and also encrypts HTTP basic authentication credentials. To add an external Alertmanager, complete the following steps. diff --git a/docs/sources/alerting/set-up/configure-high-availability/_index.md b/docs/sources/alerting/set-up/configure-high-availability/_index.md index d71926d9d9ae0..4992fbbe9ebc1 100644 --- a/docs/sources/alerting/set-up/configure-high-availability/_index.md +++ b/docs/sources/alerting/set-up/configure-high-availability/_index.md @@ -1,9 +1,11 @@ --- aliases: - - ../high-availability/enable-alerting-ha/ - - ../unified-alerting/high-availability/ + - ../unified-alerting/high-availability/ # /docs/grafana//alerting/unified-alerting/high-availability + - ../high-availability/enable-alerting-ha/ # /docs/grafana//alerting/high-availability/enable-alerting-ha/ + - ../high-availability/ # /docs/grafana//alerting/high-availability + - ../fundamentals/high-availability/ # /docs/grafana//alerting/fundamentals/high-availability canonical: https://grafana.com/docs/grafana/latest/alerting/set-up/configure-high-availability/ -description: Enable alerting high availability +description: Configure High Availability keywords: - grafana - alerting @@ -14,14 +16,23 @@ labels: products: - enterprise - oss -title: Enable alerting high availability -weight: 400 +title: Configure high availability +weight: 600 --- -# Enable alerting high availability +# Configure high availability -You can enable alerting high availability support by updating the Grafana configuration file. If you run Grafana in a Kubernetes cluster, additional steps are required. Both options are described below. -Please note that the deduplication is done for the notification, but the alert will still be evaluated on every Grafana instance. This means that events in alerting state history will be duplicated by the number of Grafana instances running. +Grafana Alerting uses the Prometheus model of separating the evaluation of alert rules from the delivering of notifications. In this model, the evaluation of alert rules is done in the alert generator and the delivering of notifications is done in the alert receiver. In Grafana Alerting, the alert generator is the Scheduler and the receiver is the Alertmanager. + +{{< figure src="/static/img/docs/alerting/unified/high-availability-ua.png" class="docs-image--no-shadow" max-width= "750px" caption="High availability" >}} + +When running multiple instances of Grafana, all alert rules are evaluated on all instances. You can think of the evaluation of alert rules as being duplicated by the number of running Grafana instances. This is how Grafana Alerting makes sure that as long as at least one Grafana instance is working, alert rules will still be evaluated and notifications for alerts will still be sent. + +You can find this duplication in state history and it is a good way to confirm if you are using high availability. + +While the alert generator evaluates all alert rules on all instances, the alert receiver makes a best-effort attempt to avoid sending duplicate notifications. Alertmanager chooses availability over consistency, which may result in occasional duplicated or out-of-order notifications. It takes the opinion that duplicate or out-of-order notifications are better than no notifications. + +The Alertmanager uses a gossip protocol to share information about notifications between Grafana instances. It also gossips silences, which means a silence created on one Grafana instance is replicated to all other Grafana instances. Both notifications and silences are persisted to the database periodically, and during graceful shut down. {{% admonition type="note" %}} @@ -30,31 +41,31 @@ This is because the HA settings (`ha_peers`, etc), only apply to the alert notif {{% /admonition %}} -## Enable alerting high availability in Grafana using Memberlist +## Enable alerting high availability using Memberlist -### Before you begin +**Before you begin** Since gossiping of notifications and silences uses both TCP and UDP port `9094`, ensure that each Grafana instance is able to accept incoming connections on these ports. **To enable high availability support:** 1. In your custom configuration file ($WORKING_DIR/conf/custom.ini), go to the `[unified_alerting]` section. -2. Set `[ha_peers]` to the number of hosts for each Grafana instance in the cluster (using a format of host:port), for example, `ha_peers=10.0.0.5:9094,10.0.0.6:9094,10.0.0.7:9094`. +1. Set `[ha_peers]` to the number of hosts for each Grafana instance in the cluster (using a format of host:port), for example, `ha_peers=10.0.0.5:9094,10.0.0.6:9094,10.0.0.7:9094`. You must have at least one (1) Grafana instance added to the `ha_peers` section. -3. Set `[ha_listen_address]` to the instance IP address using a format of `host:port` (or the [Pod's](https://kubernetes.io/docs/concepts/workloads/pods/) IP in the case of using Kubernetes). +1. Set `[ha_listen_address]` to the instance IP address using a format of `host:port` (or the [Pod's](https://kubernetes.io/docs/concepts/workloads/pods/) IP in the case of using Kubernetes). By default, it is set to listen to all interfaces (`0.0.0.0`). -4. Set `[ha_peer_timeout]` in the `[unified_alerting]` section of the custom.ini to specify the time to wait for an instance to send a notification via the Alertmanager. The default value is 15s, but it may increase if Grafana servers are located in different geographic regions or if the network latency between them is high. +1. Set `[ha_peer_timeout]` in the `[unified_alerting]` section of the custom.ini to specify the time to wait for an instance to send a notification via the Alertmanager. The default value is 15s, but it may increase if Grafana servers are located in different geographic regions or if the network latency between them is high. -## Enable alerting high availability in Grafana using Redis +## Enable alerting high availability using Redis As an alternative to Memberlist, you can use Redis for high availability. This is useful if you want to have a central database for HA and cannot support the meshing of all Grafana servers. 1. Make sure you have a redis server that supports pub/sub. If you use a proxy in front of your redis cluster, make sure the proxy supports pub/sub. -2. In your custom configuration file ($WORKING_DIR/conf/custom.ini), go to the [unified_alerting] section. -3. Set `ha_redis_address` to the redis server address Grafana should connect to. -4. [Optional] Set the username and password if authentication is enabled on the redis server using `ha_redis_username` and `ha_redis_password`. -5. [Optional] Set `ha_redis_prefix` to something unique if you plan to share the redis server with multiple Grafana instances. +1. In your custom configuration file ($WORKING_DIR/conf/custom.ini), go to the [unified_alerting] section. +1. Set `ha_redis_address` to the redis server address Grafana should connect to. +1. [Optional] Set the username and password if authentication is enabled on the redis server using `ha_redis_username` and `ha_redis_password`. +1. [Optional] Set `ha_redis_prefix` to something unique if you plan to share the redis server with multiple Grafana instances. The following metrics can be used for meta monitoring, exposed by Grafana's `/metrics` endpoint: @@ -72,67 +83,67 @@ The following metrics can be used for meta monitoring, exposed by Grafana's `/me ## Enable alerting high availability using Kubernetes -If you are using Kubernetes, you can expose the pod IP [through an environment variable](https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/) via the container definition. +1. You can expose the pod IP [through an environment variable](https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/) via the container definition. -```yaml -env: - - name: POD_IP - valueFrom: - fieldRef: - fieldPath: status.podIP -``` + ```yaml + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + ``` 1. Add the port 9094 to the Grafana deployment: -```yaml -ports: - - containerPort: 3000 - name: http-grafana - protocol: TCP - - containerPort: 9094 - name: grafana-alert - protocol: TCP -``` - -2. Add the environment variables to the Grafana deployment: - -```yaml -env: - - name: POD_IP - valueFrom: - fieldRef: - fieldPath: status.podIP -``` - -3. Create a headless service that returns the pod IP instead of the service IP, which is what the `ha_peers` need: - -```yaml -apiVersion: v1 -kind: Service -metadata: - name: grafana-alerting - namespace: grafana - labels: - app.kubernetes.io/name: grafana-alerting - app.kubernetes.io/part-of: grafana -spec: - type: ClusterIP - clusterIP: 'None' - ports: - - port: 9094 - selector: - app: grafana -``` - -4. Make sure your grafana deployment has the label matching the selector, e.g. `app:grafana`: - -5. Add in the grafana.ini: - -```bash -[unified_alerting] -enabled = true -ha_listen_address = "${POD_IP}:9094" -ha_peers = "grafana-alerting.grafana:9094" -ha_advertise_address = "${POD_IP}:9094" -ha_peer_timeout = 15s -``` + ```yaml + ports: + - containerPort: 3000 + name: http-grafana + protocol: TCP + - containerPort: 9094 + name: grafana-alert + protocol: TCP + ``` + +1. Add the environment variables to the Grafana deployment: + + ```yaml + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + ``` + +1. Create a headless service that returns the pod IP instead of the service IP, which is what the `ha_peers` need: + + ```yaml + apiVersion: v1 + kind: Service + metadata: + name: grafana-alerting + namespace: grafana + labels: + app.kubernetes.io/name: grafana-alerting + app.kubernetes.io/part-of: grafana + spec: + type: ClusterIP + clusterIP: 'None' + ports: + - port: 9094 + selector: + app: grafana + ``` + +1. Make sure your grafana deployment has the label matching the selector, e.g. `app:grafana`: + +1. Add in the grafana.ini: + + ```bash + [unified_alerting] + enabled = true + ha_listen_address = "${POD_IP}:9094" + ha_peers = "grafana-alerting.grafana:9094" + ha_advertise_address = "${POD_IP}:9094" + ha_peer_timeout = 15s + ``` diff --git a/docs/sources/alerting/set-up/migrating-alerts/_index.md b/docs/sources/alerting/set-up/migrating-alerts/_index.md deleted file mode 100644 index 078f172dd0dca..0000000000000 --- a/docs/sources/alerting/set-up/migrating-alerts/_index.md +++ /dev/null @@ -1,161 +0,0 @@ ---- -aliases: - - ../migrating-alerts/ # /docs/grafana//alerting/migrating-alerts/ -canonical: https://grafana.com/docs/grafana/latest/alerting/set-up/migrating-alerts/ -description: Upgrade to Grafana Alerting -labels: - products: - - enterprise - - oss -title: Upgrade Alerting -weight: 150 ---- - -# Upgrade Alerting - -Grafana Alerting is enabled by default for new installations or existing installations whether or not legacy alerting is configured. - -{{% admonition type="note" %}} -When upgrading, your dashboard alerts are migrated to a new format. This migration can be rolled back easily by opting out. If you have any questions regarding this migration, please contact us. -{{% /admonition %}} - -Existing installations that do not use legacy alerting will have Grafana Alerting enabled by default unless alerting is disabled in the configuration. - -Likewise, existing installations that use legacy alerting will be automatically upgraded to Grafana Alerting unless you have opted out of Grafana Alerting before migration takes place. During the upgrade, legacy alerts are migrated to the new alerts type and no alerts or alerting data are lost. - -Once the upgrade has taken place, you still have the option to roll back to legacy alerting. However, we do not recommend choosing this option. If you do choose to roll back, Grafana will restore your alerts to the alerts you had at the point in time when the upgrade took place. - -{{% admonition type="note" %}} -Cloud customers, who do not want to upgrade to Grafana Alerting, should contact customer support. -{{% /admonition %}} - -If you have opted out or rolled back, you can always choose to opt in to Grafana Alerting at a later point in time. - -The following table provides details on the upgrade for Cloud, Enterprise, and OSS installations and the new Grafana Alerting UI. - -| Grafana instance upgraded to 9.0 | | -| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Cloud | Existing Cloud installations with legacy dashboard alerting will have two alerting icons in the left navigation panel - the old alerting plugin icon and the new Grafana Alerting icon. During upgrade, existing alerts from the Cloud alerting plugin are migrated to Grafana Alerting. Once migration is complete, you can access and manage the older alerts from the new alerting Grafana Alerting icon in the navigation panel. The (older) Cloud alerting plugin is uninstalled from your cloud instance. Contact customer support if you **do not wish** to migrate to Grafana Alerting for your Cloud stack. If you choose to use legacy alerting, use the You will see the new Grafana Alerting icon as well as the old Cloud alerting plugin in the left navigation panel. | -| Enterprise | Existing Enterprise instances using legacy alerting will have both the old (marked as legacy) and the new alerting icons in the navigation panel. During upgrade, existing legacy alerts are migrated to Grafana Alerting. If you wish, you can opt out of Grafana Alerting and roll back to legacy alerting. In that case, you can manage your legacy alerts from the alerting icon marked as legacy. | -| OSS | Existing OSS installations with legacy dashboard alerting will have two alerting icons in the left navigation panel - the old alerting icon (marked as legacy) and the new Grafana Alerting icon. During upgrade, existing legacy alerts are migrated to Grafana Alerting. If you wish, you can opt out of Grafana Alerting and roll back to legacy alerting. In that case, you can manage your legacy alerts from the alerting icon marked as legacy. | - -> **Note:** Starting with v9.0, legacy alerting is deprecated and will be removed in a future release. - -## Opt out - -You can opt out of Grafana Alerting at any time and switch to using legacy alerting. Alternatively, you can opt out of using alerting in its entirety. - -## Stay on legacy alerting - -When upgrading to Grafana > 9.0, existing installations that use legacy alerting are automatically upgraded to Grafana Alerting unless you have opted-out of Grafana Alerting before migration takes place. During the upgrade, legacy alerts are migrated to the new alerts type and no alerts or alerting data are lost. To keep using legacy alerting and deactivate Grafana Alerting: - -1. Go to your custom configuration file ($WORKING_DIR/conf/custom.ini). -2. Enter the following in your configuration: - -```toml -[alerting] -enabled = true - -[unified_alerting] -enabled = false -``` - -Installations that have been migrated to Grafana Alerting can roll back to legacy alerting at any time. - -{{% admonition type="note" %}} -This topic is only relevant for OSS and Enterprise customers. Contact customer support to enable or disable Grafana Alerting for your Grafana Cloud stack. -{{% /admonition %}} - -The `ngalert` toggle previously used to enable or disable Grafana Alerting is no longer available. - -## Deactivate alerting - -You can deactivate both Grafana Alerting and legacy alerting in Grafana. - -1. Go to your custom configuration file ($WORKING_DIR/conf/custom.ini). -1. Enter the following in your configuration: - -```toml -[alerting] -enabled = false - -[unified_alerting] -enabled = false -``` - -3. Restart Grafana for the configuration changes to take effect. - -If you want to turn alerting back on, you can remove both flags to enable Grafana Alerting. - -## Roll back - -Once the upgrade has taken place, you still have the option to roll back to legacy alerting. If you choose to roll back, Grafana will restore your alerts to the alerts you had at the point in time when the upgrade took place. - -To roll back to legacy alerting, enter the following in your configuration: - -```toml -[alerting] -enabled = true - -[unified_alerting] -enabled = false -``` - -> **Note**: The next time you upgrade to Grafana Alerting, Grafana will restore your Grafana Alerting alerts and configuration to those you had before rolling back. - -If, after rolling back, you wish to delete any existing Grafana Alerting configuration and upgrade your legacy alerting configuration again from scratch, you can enable the `clean_upgrade` option: - -```toml -[unified_alerting.upgrade] -clean_upgrade = true -``` - -## Opt in - -If you have previously disabled alerting in Grafana, or opted out of Grafana Alerting and have decided that you would now like to use Grafana Alerting, you can choose to opt in at any time. - -If you have been using legacy alerting up until now your existing alerts will be migrated to the new alerts type and no alerts or alerting data are lost. Even if you choose to opt in to Grafana Alerting, you can roll back to legacy alerting at any time. - -To opt in to Grafana Alerting, enter the following in your configuration: - -```toml -[alerting] -enabled = false - -[unified_alerting] -enabled = true -``` - -## Differences and limitations - -There are some differences between Grafana Alerting and legacy dashboard alerts, and a number of features that are no -longer supported. - -**Differences** - -1. When Grafana Alerting is enabled or upgraded to Grafana 9.0 or later, existing legacy dashboard alerts migrate in a format compatible with the Grafana Alerting. In the Alerting page of your Grafana instance, you can view the migrated alerts alongside any new alerts. - This topic explains how legacy dashboard alerts are migrated and some limitations of the migration. - -1. Read and write access to legacy dashboard alerts and Grafana alerts are governed by the permissions of the folders storing them. During migration, legacy dashboard alert permissions are matched to the new rules permissions as follows: - - - If there are dashboard permissions, a folder named `Migrated {"dashboardUid": "UID", "panelId": 1, "alertId": 1}` is created to match the permissions of the dashboard (including the inherited permissions from the folder). - - If there are no dashboard permissions and the dashboard is in a folder, then the rule is linked to this folder and inherits its permissions. - - If there are no dashboard permissions and the dashboard is in the General folder, then the rule is linked to the `General Alerting` folder and the rule inherits the default permissions. - -1. `NoData` and `Error` settings are migrated as is to the corresponding settings in Grafana Alerting, except in two situations: - - 3.1. As there is no `Keep Last State` option in Grafana Alerting, this option becomes either [`NoData` or `Error`](/docs/sources/alerting/alerting-rules/create-grafana-managed-rule/#configure-no-data-and-error-handling). To match the behavior of the `Keep Last State` as closely as possible during the migration Grafana automatically creates a silence for each alert rule with a duration of 1 year. If the alert evaluation returns no data or fails (error or timeout), then it creates a [special alert](/docs/sources/alerting/fundamentals/alert-rules/state-and-health/#special-alerts-for-nodata-and-error), which will be silenced by the silence created during the migration. - - 3.2. Due to lack of validation, legacy alert rules imported via JSON or provisioned along with dashboards can contain arbitrary values for [`NoData` or `Error`](/docs/sources/alerting/alerting-rules/create-grafana-managed-rule/#configure-no-data-and-error-handling). In this situation, Grafana will use the default setting: `NoData` for No data, and `Error` for Error. - -1. Notification channels are migrated to an Alertmanager configuration with the appropriate routes and receivers. Default notification channels are added as contact points to the default route. Notification channels not associated with any Dashboard alert go to the `autogen-unlinked-channel-recv` route. - -1. Unlike legacy dashboard alerts where images in notifications are enabled per contact point, images in notifications for Grafana Alerting must be enabled in the Grafana configuration, either in the configuration file or environment variables, and are enabled for either all or no contact points. - -1. The JSON format for webhook notifications has changed in Grafana Alerting and uses the format from [Prometheus Alertmanager](https://prometheus.io/docs/alerting/latest/configuration/#webhook_config). - -1. Alerting on Prometheus `Both` type queries is not supported in Grafana Alerting. Existing legacy alerts with `Both` type queries are migrated to Grafana Alerting as alerts with `Range` type queries. - -**Limitations** - -1. Since `Hipchat` and `Sensu` notification channels are no longer supported, legacy alerts associated with these channels are not automatically migrated to Grafana Alerting. Assign the legacy alerts to a supported notification channel so that you continue to receive notifications for those alerts. diff --git a/docs/sources/alerting/set-up/migrating-alerts/legacy-alerting-deprecation.md b/docs/sources/alerting/set-up/migrating-alerts/legacy-alerting-deprecation.md deleted file mode 100644 index 8c165e4b6b60d..0000000000000 --- a/docs/sources/alerting/set-up/migrating-alerts/legacy-alerting-deprecation.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -aliases: - - alerting/legacy-alerting-deprecation/ -canonical: https://grafana.com/docs/grafana/latest/alerting/set-up/migrating-alerts/legacy-alerting-deprecation/ -description: Learn about legacy alerting deprecation -keywords: - - grafana - - alerting -labels: - products: - - enterprise - - oss -title: Legacy alerting deprecation -weight: 109 ---- - -# Legacy alerting deprecation - -Starting with Grafana v9.0.0, legacy alerting is deprecated, meaning that it is no longer actively maintained or supported by Grafana. As of Grafana v10.0.0, we do not contribute or accept external contributions to the codebase apart from CVE fixes. - -Legacy alerting refers to the old alerting system that was used prior to the introduction of Grafana Alerting; the new alerting system in Grafana. - -The decision to deprecate legacy alerting was made to encourage users to migrate to the new alerting system, which offers a more powerful and flexible alerting experience based on Prometheus Alertmanager. - -Users who are still using legacy alerting are encouraged to migrate their alerts to the new system as soon as possible to ensure that they continue to receive new features, bug fixes, and support. - -However, we will still patch CVEs until legacy alerting is completely removed in Grafana 11; honoring our commitment to building and distributing secure software. - -We have provided [instructions][migrating-alerts] on how to migrate to the new alerting system, making the process as easy as possible for users. - -## Why are we deprecating legacy alerting? - -The new Grafana alerting system is more powerful and flexible than the legacy alerting feature. - -The new system is based on Prometheus Alertmanager, which offers a more comprehensive set of features for defining and managing alerts. With the new alerting system, users can create alerts based on complex queries, configure alert notifications via various integrations, and set up sophisticated alerting rules with support for conditional expressions, aggregation, and grouping. - -Overall, the new alerting system in Grafana is a major improvement over the legacy alerting feature, providing users with a more powerful and flexible alerting experience. - -Additionally, legacy alerting still requires Angular to function and we are [planning to remove support for it][angular_deprecation] in Grafana 11. - -## When will we remove legacy alerting completely? - -Legacy alerting will be removed from the code-base in Grafana 11, following the same timeline as the [Angular deprecation][angular_deprecation]. - -## How do I migrate to the new Grafana alerting? - -Refer to our [upgrade instructions][migrating-alerts]. - -### Useful links - -- [Upgrade Alerting][migrating-alerts] -- [Angular support deprecation][angular_deprecation] - -{{% docs/reference %}} -[angular_deprecation]: "/docs/grafana/ -> /docs/grafana//developers/angular_deprecation" -[angular_deprecation]: "/docs/grafana-cloud/ -> /docs/grafana//developers/angular_deprecation" - -[migrating-alerts]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/migrating-alerts" -[migrating-alerts]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/migrating-alerts" -{{% /docs/reference %}} diff --git a/docs/sources/alerting/set-up/performance-limitations/index.md b/docs/sources/alerting/set-up/performance-limitations/index.md index 882174d4e6743..5cd9a89446210 100644 --- a/docs/sources/alerting/set-up/performance-limitations/index.md +++ b/docs/sources/alerting/set-up/performance-limitations/index.md @@ -1,7 +1,7 @@ --- aliases: - - alerting-limitations/ - - alerting/performance-limitations/ + - ./alerting-limitations/ # /docs/grafana//alerting/set-up/alerting-limitations/ + - ../../alerting/performance-limitations/ # /docs/grafana//alerting/performance-limitations/ canonical: https://grafana.com/docs/grafana/latest/alerting/set-up/performance-limitations/ description: Learn about performance considerations and limitations keywords: @@ -54,4 +54,16 @@ Grafana cannot be used to receive external alerts. You can only send alerts to t You have the option to send Grafana managed alerts to an external Alertmanager, you can find this option in the admin tab on the Alerting page. -For more information, refer to [this GitHub discussion](https://github.com/grafana/grafana/discussions/45773). +For more information, refer to [this GitHub issue](https://github.com/grafana/grafana/issues/73447). + +## High load on database caused by a high number of alert instances + +If you have a high number of alert instances, it can happen that the load on the database gets very high, as each state +transition of an alert instance will be saved in the database. + +This can be prevented by writing to the database periodically. For this the feature flag `alertingSaveStatePeriodic` needs +to be enabled. By default it will save the states every 5 minutes to the database and on each shutdown. The periodic interval +can also be configured using the `state_periodic_save_interval` configuration flag. + +The time it takes to write to the database periodically can be monitored using the `state_full_sync_duration_seconds` metric +that is exposed by Grafana. diff --git a/docs/sources/alerting/set-up/provision-alerting-resources/_index.md b/docs/sources/alerting/set-up/provision-alerting-resources/_index.md index b64985632fdad..518450be1a509 100644 --- a/docs/sources/alerting/set-up/provision-alerting-resources/_index.md +++ b/docs/sources/alerting/set-up/provision-alerting-resources/_index.md @@ -1,6 +1,4 @@ --- -aliases: - - ../provision-alerting-resources/ canonical: https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/ description: Provision alerting resources keywords: @@ -14,44 +12,68 @@ labels: - cloud - enterprise - oss -title: Provision Grafana Alerting resources +title: Provision Alerting resources weight: 300 --- -# Provision Grafana Alerting resources +# Provision Alerting resources -Alerting infrastructure is often complex, with many pieces of the pipeline that often live in different places. Scaling this across multiple teams and organizations is an especially challenging task. Grafana Alerting provisioning makes this process easier by enabling you to create, manage, and maintain your alerting data in a way that best suits your organization. +Alerting infrastructure is often complex, with many pieces of the pipeline that often live in different places. Scaling this across multiple teams and organizations is an especially challenging task. Importing and exporting (or provisioning) your alerting resources in Grafana Alerting makes this process easier by enabling you to create, manage, and maintain your alerting data in a way that best suits your organization. -Provisioning for Grafana Alerting supports alert rules, contact points, notification policies, mute timings, and templates. +You can import alert rules, contact points, notification policies, mute timings, and templates. -You cannot edit provisioned alerting resources in the Grafana UI in the same way as unprovisioned alerting resources. You can only edit provisioned contact points, notification policies, templates, and mute timings in the source where they were created. For example, if you provision your alerting resources using files from disk, you cannot edit the data in Terraform or from within Grafana. +You cannot edit imported alerting resources in the Grafana UI in the same way as alerting resources that were not imported. You can only edit imported contact points, notification policies, templates, and mute timings in the source where they were created. For example, if you manage your alerting resources using files from disk, you cannot edit the data in Terraform or from within Grafana. -To modify provisioned alert rules, you can use the **Modify export** feature to edit and then export. +## Import alerting resources -Choose from the options below to provision your Grafana Alerting resources. +Choose from the options below to import (or provision) your Grafana Alerting resources. -1. Use file provisioning to provision your Grafana Alerting resources, such as alert rules and contact points, through files on disk. +1. [Use configuration files to provision your alerting resources][alerting_file_provisioning], such as alert rules and contact points, through files on disk. - {{% admonition type="note" %}} - File provisioning is not available in Grafana Cloud instances. - {{% /admonition %}} + {{< admonition type="note" >}} -2. Use the Alerting Provisioning HTTP API. + - You cannot edit provisioned resources from files in the Grafana UI. + - Provisioning with configuration files is not available in Grafana Cloud. + {{< /admonition >}} - For more information on the Alerting Provisioning HTTP API, refer to [Alerting provisioning HTTP API][alerting_provisioning]. +1. Use [Terraform to provision alerting resources][alerting_tf_provisioning]. -3. Use [Terraform](https://www.terraform.io/). +1. Use the [Alerting provisioning HTTP API][alerting_http_provisioning] to manage alerting resources. -**Useful Links:** + {{< admonition type="note" >}} + The JSON output from the majority of Alerting HTTP endpoints isn't compatible for provisioning via configuration files. -[Grafana provisioning][provisioning] + If you need the alerting resources for file provisioning, use [Export Alerting endpoints](/docs/grafana//alerting/set-up/provision-alerting-resources/export-alerting-resources#export-api-endpoints) to return or download them in provisioning format. + {{< /admonition >}} -[Grafana Alerting provisioning API][alerting_provisioning] +## Export alerting resources + +You can export both manually created and provisioned alerting resources. You can also edit and export an alert rule without applying the changes. + +For detailed instructions on the various export options, refer to [Export alerting resources][alerting_export]. + +## View provisioned alerting resources + +To view your provisioned resources in Grafana, complete the following steps. + +1. Open your Grafana instance. +1. Navigate to Alerting. +1. Click an alerting resource folder, for example, Alert rules. + +Provisioned resources are labeled **Provisioned**, so that it is clear that they were not created manually. {{% docs/reference %}} -[alerting_provisioning]: "/docs/grafana/ -> /docs/grafana//developers/http_api/alerting_provisioning" -[alerting_provisioning]: "/docs/grafana-cloud/ -> /docs/grafana//developers/http_api/alerting_provisioning" +[alerting_tf_provisioning]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/terraform-provisioning" +[alerting_tf_provisioning]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/terraform-provisioning" +[alerting_http_provisioning]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning" +[alerting_http_provisioning]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/http-api-provisioning" +[alerting_export]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/export-alerting-resources" +[alerting_export]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/export-alerting-resources" + +[alerting_export_http]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/export-alerting-resources#export-api-endpoints" +[alerting_export_http]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/export-alerting-resources#export-api-endpoints" + +[alerting_file_provisioning]: "/docs/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/file-provisioning" -[provisioning]: "/docs/grafana/ -> /docs/grafana//administration/provisioning" -[provisioning]: "/docs/grafana-cloud/ -> /docs/grafana//administration/provisioning" +[provisioning]: "/docs/ -> /docs/grafana//administration/provisioning" {{% /docs/reference %}} diff --git a/docs/sources/alerting/set-up/provision-alerting-resources/export-alerting-resources/index.md b/docs/sources/alerting/set-up/provision-alerting-resources/export-alerting-resources/index.md new file mode 100644 index 0000000000000..1663d4474b54c --- /dev/null +++ b/docs/sources/alerting/set-up/provision-alerting-resources/export-alerting-resources/index.md @@ -0,0 +1,213 @@ +--- +aliases: + - ../../provision-alerting-resources/view-provisioned-resources/ # /docs/grafana//alerting/set-up/provision-alerting-resources/view-provisioned-resources/ +canonical: https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/export-alerting-resources/ +description: Export alerting resources in Grafana +keywords: + - grafana + - alerting + - alerting resources + - provisioning +labels: + products: + - cloud + - enterprise + - oss +title: Export alerting resources +weight: 300 +--- + +# Export alerting resources + +Export your alerting resources, such as alert rules, contact points, and notification policies for provisioning, automatically importing single folders and single groups. + +There are distinct methods to export your alerting resources: + +- [Grafana UI](#export-from-the-grafana-ui) exports in Terraform format and YAML or JSON formats for file provisioning. +- [HTTP Alerting API](#http-alerting-api) exports in JSON API format used by the HTTP Alerting API. +- [HTTP Alerting API - Export endpoints](#export-api-endpoints) exports in YAML or JSON formats for file provisioning. + +{{< admonition type="note" >}} +Alerting resources imported through [file provisioning](/docs/grafana//alerting/set-up/provision-alerting-resources/file-provisioning) cannot be edited in the Grafana UI. This prevents changes made in the UI from being overridden by file provisioning during Grafana restarts. + +If you need to modify provisioned alerting resources in Grafana, refer to [edit HTTP API alerting resources in the Grafana UI](/docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#edit-resources-in-the-grafana-ui) or to [edit Terraform alerting resources in the Grafana UI](/docs/grafana//alerting/set-up/provision-alerting-resources/terraform-provisioning#enable-editing-resources-in-the-grafana-ui). +{{< /admonition >}} + +## Export from the Grafana UI + +The export options listed below enable you to download resources in YAML, JSON, or Terraform format, facilitating their provisioning through [configuration files][alerting_file_provisioning] or [Terraform][alerting_tf_provisioning]. + +### Export alert rules + +To export alert rules from the Grafana UI, complete the following steps. + +1. Click **Alerts & IRM** -> **Alert rules**. +1. To export all Grafana-managed rules, click **Export rules**. +1. To export a folder, change the **View as** to **List**. +1. Select the folder you want to export and click the **Export rules folder** icon. +1. To export a group, change the **View as** to **Grouped**. +1. Find the group you want to export and click the **Export rule group** icon. +1. Choose the format to export in. + + The exported alert rule data appears in different formats - YAML, JSON, Terraform. + +1. Click **Copy Code** or **Download**. + +### Modify alert rule and export rule group without saving changes + +{{% admonition type="note" %}} This feature is for Grafana-managed alert rules only. It is available to Admin, Viewer, and Editor roles. {{% /admonition %}} + +Use the **Modify export** mode to edit and export an alert rule without updating it. The exported data includes all alert rules within the same alert group. + +To export a modified alert rule without saving the modifications, complete the following steps from the Grafana UI. + +1. Click **Alerts & IRM** -> **Alert rules**. +1. Locate the alert rule you want to edit and click **More** -> **Modify Export** to open the Alert Rule form. +1. From the Alert Rule form, edit the fields you want to change. Changes made are not applied to the alert rule. +1. Click **Export**. +1. Choose the format to export in. + + The exported alert rule group appears in different formats - YAML, JSON, Terraform. + +1. Click **Copy Code** or **Download**. + +### Export contact points + +To export contact points from the Grafana UI, complete the following steps. + +1. Click **Alerts & IRM** -> **Contact points**. +1. Find the contact point you want to export and click **More** -> **Export**. +1. Choose the format to export in. + + The exported contact point appears in different formats - YAML, JSON, Terraform. + +1. Click **Copy Code** or **Download**. + +### Export templates + +Grafana currently doesn't offer an Export UI or [Export endpoint](#export-api-endpoints) for notification templates, unlike other Alerting resources presented in this documentation. + +However, you can export it by manually copying the content template and title directly from the Grafana UI. + +1. Click **Alerts & IRM** -> **Contact points** -> **Notification templates** tab. +1. Find the template you want to export. +1. Copy the content and title. +1. Adjust it for the [file provisioning format][alerting_file_provisioning_template] or [Terraform resource][alerting_tf_provisioning_template]. + +### Export the notification policy tree + +All notification policies are provisioned through a single resource: the root of the notification policy tree. + +{{% admonition type="warning" %}} + +Since the policy tree is a single resource, provisioning it will overwrite a policy tree created through any other means. + +{{< /admonition >}} + +To export the notification policy tree from the Grafana UI, complete the following steps. + +1. Click **Alerts & IRM** -> **Notification policies**. +1. In the **Default notification policy** section, click **...** -> **Export**. +1. Choose the format to export in. + + The exported contact point appears in different formats - YAML, JSON, Terraform. + +1. Click **Copy Code** or **Download**. + +### Export mute timings + +To export mute timings from the Grafana UI, complete the following steps. + +1. Click **Alerts & IRM** -> **Notification policies**, and then the **Mute timings** tab. +1. Find the mute timing you want to export and click **Export**. +1. Choose the format to export in. + + The exported contact point appears in different formats - YAML, JSON, Terraform. + +1. Click **Copy Code** or **Download**. + +## HTTP Alerting API + +You can use the [Alerting HTTP API][alerting_http_provisioning] to return existing alerting resources in JSON and import them to another Grafana instance using the same endpoint. + +| Resource | URI | +| -------------------------------------------------------------- | ----------------------------------- | +| [Alert rules][alerting_http_alertrules] | /api/v1/provisioning/alert-rules | +| [Contact points][alerting_http_contactpoints] | /api/v1/provisioning/contact-points | +| [Notification policy tree][alerting_http_notificationpolicies] | /api/v1/provisioning/policies | +| [Mute timings][alerting_http_mutetimings] | /api/v1/provisioning/mute-timings | +| [Templates][alerting_http_templates] | /api/v1/provisioning/templates | + +However, note the standard endpoints return a JSON format that is not compatible for provisioning through configuration files or Terraform, except the `/export` endpoints listed below. + +### Export API endpoints + +The **Alerting HTTP API** provides specific endpoints for exporting alerting resources in YAML or JSON formats, facilitating [provisioning via configuration files][alerting_file_provisioning]. Currently, Terraform format is not supported. + +| Resource | Method / URI | Summary | +| ------------------------ | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| Alert rules | GET /api/v1/provisioning/alert-rules/export | [Export all alert rules in provisioning file format.][export_rules] | +| Alert rules | GET /api/v1/provisioning/folder/:folderUid/rule-groups/:group/export | [Export an alert rule group in provisioning file format.][export_rule_group] | +| Alert rules | GET /api/v1/provisioning/alert-rules/:uid/export | [Export an alert rule in provisioning file format.][export_rule] | +| Contact points | GET /api/v1/provisioning/contact-points/export | [Export all contact points in provisioning file format.][export_contacts] | +| Notification policy tree | GET /api/v1/provisioning/policies/export | [Export the notification policy tree in provisioning file format.][export_notifications] | +| Mute timings | GET /api/v1/provisioning/mute-timings/export | [Export all mute timings in provisioning file format.][export_mute_timings] | +| Mute timings | GET /api/v1/provisioning/mute-timings/:name/export | [Export a mute timing in provisioning file format.][export_mute_timing] | + +These endpoints accept a `download` parameter to download a file containing the exported resources. + + + +{{% docs/reference %}} + +[alerting_http_alertrules]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#alert-rules" +[alerting_http_alertrules]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/http-api-provisioning#alert-rules" + +[alerting_http_contactpoints]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#contact-points" +[alerting_http_contactpoints]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/http-api-provisioning#contact-points" + +[alerting_http_notificationpolicies]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#notification-policies" +[alerting_http_notificationpolicies]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/http-api-provisioning#notification-policies" + +[alerting_http_mutetimings]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#mute-timings" +[alerting_http_mutetimings]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/http-api-provisioning#mute-timings" + +[alerting_http_templates]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#templates" +[alerting_http_templates]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/http-api-provisioning#templates" + +[alerting_tf_provisioning]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/terraform-provisioning" +[alerting_tf_provisioning]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/terraform-provisioning" + +[alerting_tf_provisioning_template]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/terraform-provisioning#import-contact-points-and-templates" +[alerting_tf_provisioning_template]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/terraform-provisioning#import-contact-points-and-templates" + +[alerting_http_provisioning]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning" +[alerting_http_provisioning]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/http-api-provisioning" + +[alerting_file_provisioning]: "/docs/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/file-provisioning" + +[alerting_file_provisioning_template]: "/docs/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/file-provisioning#import-templates" + +[export_rule]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#span-idroute-get-alert-rule-exportspan-export-an-alert-rule-in-provisioning-file-format-_routegetalertruleexport_" +[export_rule]: "/docs/grafana-cloud/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#span-idroute-get-alert-rule-exportspan-export-an-alert-rule-in-provisioning-file-format-_routegetalertruleexport_" + +[export_rule_group]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#span-idroute-get-alert-rule-group-exportspan-export-an-alert-rule-group-in-provisioning-file-format-_routegetalertrulegroupexport_" +[export_rule_group]: "/docs/grafana-cloud/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#span-idroute-get-alert-rule-group-exportspan-export-an-alert-rule-group-in-provisioning-file-format-_routegetalertrulegroupexport_" + +[export_rules]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#span-idroute-get-alert-rules-exportspan-export-all-alert-rules-in-provisioning-file-format-_routegetalertrulesexport_" +[export_rules]: "/docs/grafana-cloud/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#span-idroute-get-alert-rules-exportspan-export-all-alert-rules-in-provisioning-file-format-_routegetalertrulesexport_" + +[export_contacts]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#span-idroute-get-contactpoints-exportspan-export-all-contact-points-in-provisioning-file-format-_routegetcontactpointsexport_" +[export_contacts]: "/docs/grafana-cloud/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#span-idroute-get-contactpoints-exportspan-export-all-contact-points-in-provisioning-file-format-_routegetcontactpointsexport_" + +[export_mute_timing]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#span-idroute-get-mute-timing-exportspan-export-a-mute-timing-in-provisioning-file-format-_routegetmutetimingexport_" +[export_mute_timing]: "/docs/grafana-cloud/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#span-idroute-get-mute-timing-exportspan-export-a-mute-timing-in-provisioning-file-format-_routegetmutetimingexport_" + +[export_mute_timings]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#span-idroute-get-mute-timings-exportspan-export-all-mute-timings-in-provisioning-file-format-_routegetmutetimingsexport_" +[export_mute_timings]: "/docs/grafana-cloud/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#span-idroute-get-mute-timings-exportspan-export-all-mute-timings-in-provisioning-file-format-_routegetmutetimingsexport_" + +[export_notifications]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#span-idroute-get-policy-tree-exportspan-export-the-notification-policy-tree-in-provisioning-file-format-_routegetpolicytreeexport_" +[export_notifications]: "/docs/grafana-cloud/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning#span-idroute-get-policy-tree-exportspan-export-the-notification-policy-tree-in-provisioning-file-format-_routegetpolicytreeexport_" +{{% /docs/reference %}} + + diff --git a/docs/sources/alerting/set-up/provision-alerting-resources/file-provisioning/index.md b/docs/sources/alerting/set-up/provision-alerting-resources/file-provisioning/index.md index 1ac14176febbb..245376f6efb8a 100644 --- a/docs/sources/alerting/set-up/provision-alerting-resources/file-provisioning/index.md +++ b/docs/sources/alerting/set-up/provision-alerting-resources/file-provisioning/index.md @@ -1,6 +1,4 @@ --- -aliases: - - ../../provision-alerting-resources/file-provisioning/ canonical: https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/file-provisioning/ description: Create and manage resources using file provisioning keywords: @@ -11,41 +9,43 @@ keywords: - provisioning labels: products: - - cloud - enterprise - oss -title: Create and manage alerting resources using file provisioning +menuTitle: Use configuration files to provision +title: Use configuration files to provision alerting resources weight: 100 --- -## Create and manage alerting resources using file provisioning +# Use configuration files to provision alerting resources -Provision your alerting resources using files from disk. When you start Grafana, the data from these files is created in your Grafana system. Grafana adds any new resources you created, updates any that you changed, and deletes old ones. +Manage your alerting resources using configuration files that can be version controlled. When Grafana starts, it provisions the resources defined in your configuration files. [Provisioning][provisioning] can create, update, or delete existing resources in your Grafana instance. -Arrange your files in a directory in a way that best suits your use case. For example, you can choose a team-based layout where every team has its own file, you can have one big file for all your teams; or you can have one file per resource type. +This guide outlines the steps and references to provision alerting resources using YAML files. For a practical demo, you can clone and try [this example using Grafana OSS and Docker Compose](https://github.com/grafana/provisioning-alerting-examples/tree/main/config-files). -Details on how to set up the files and which fields are required for each object are listed below depending on which resource you are provisioning. +{{< admonition type="note" >}} + +- [Provisioning Grafana](/docs/grafana//administration/provisioning) with configuration files is not available in Grafana Cloud. -**Note:** +- You cannot edit provisioned resources from files in Grafana. You can only change the resource properties by changing the provisioning file and restarting Grafana or carrying out a hot reload. This prevents changes being made to the resource that would be overwritten if a file is provisioned again or a hot reload is carried out. -Provisioning takes place during the initial set up of your Grafana system, but you can re-run it at any time using the [Grafana Admin API][reload-provisioning-configurations]. +- Provisioning using configuration files takes place during the initial set up of your Grafana system, but you can re-run it at any time using the [Grafana Admin API](/docs/grafana//developers/http_api/admin#reload-provisioning-configurations). -### Provision alert rules +- Importing an existing alerting resource results in a conflict. First, when present, remove the resources you plan to import. + {{< /admonition >}} -Create or delete alert rules in your Grafana instance(s). +Details on how to set up the files and which fields are required for each object are listed below depending on which resource you are provisioning. -1. Create alert rules in Grafana. -1. Use the [Alerting provisioning API][alerting_provisioning] export endpoints to download a provisioning file for your alert rules. -1. Copy the contents into a YAML or JSON configuration file in the default provisioning directory or in your configured directory. +## Import alert rules - Example configuration files can be found below. +Create or delete alert rules using provisioning files in your Grafana instance(s). -1. Ensure that your files are in the right directory on the node running the Grafana server, so that they deploy alongside your Grafana instance(s). -1. Delete the alert rules in Grafana that will be provisioned. +1. Find the alert rule group in Grafana. +1. [Export][export_alert_rules] and download a provisioning file for your alert rules. +1. Copy the contents into a YAML or JSON configuration file and add it to the `provisioning/alerting` directory of the Grafana instance you want to import the alerting resources to. - **Note:** + Example configuration files can be found below. - If you do not delete the alert rule, it will clash with the provisioned alert rule once uploaded. +1. Restart your Grafana instance (or reload the provisioned files using the Admin API). Here is an example of a configuration file for creating alert rules. @@ -108,6 +108,7 @@ groups: # the state the alert rule will have when the query execution # failed - possible values: "Error", "Alerting", "OK" # default = Alerting + execErrState: Alerting # for how long should the alert fire before alerting for: 60s # > a map of strings to pass around any data @@ -133,17 +134,17 @@ deleteRules: uid: my_id_1 ``` -### Provision contact points +## Import contact points -Create or delete contact points in your Grafana instance(s). +Create or delete contact points using provisioning files in your Grafana instance(s). -1. Create a contact point in Grafana. -1. Use the [Alerting provisioning API][alerting_provisioning] export endpoints to download a provisioning file for your contact point. -1. Copy the contents into a YAML or JSON configuration file in the default provisioning directory or in your configured directory. +1. Find the contact point in Grafana. +1. [Export][export_contact_points] and download a provisioning file for your contact point. +1. Copy the contents into a YAML or JSON configuration file and add it to the `provisioning/alerting` directory of the Grafana instance you want to import the alerting resources to. Example configuration files can be found below. -1. Ensure that your files are in the right directory on the node running the Grafana server, so that they deploy alongside your Grafana instance(s). +1. Restart your Grafana instance (or reload the provisioned files using the Admin API). Here is an example of a configuration file for creating contact points. @@ -183,12 +184,14 @@ deleteContactPoints: uid: first_uid ``` -#### Settings +### Settings Here are some examples of settings you can use for the different contact point integrations. -##### Alertmanager +{{< collapse title="Alertmanager" >}} + +#### Alertmanager ```yaml type: prometheus-alertmanager @@ -201,7 +204,11 @@ settings: basicAuthPassword: abc123 ``` -##### DingDing +{{< /collapse >}} + +{{< collapse title="DingDing" >}} + +#### DingDing ```yaml type: dingding @@ -215,7 +222,11 @@ settings: {{ template "default.message" . }} ``` -##### Discord +{{< /collapse >}} + +{{< collapse title="Discord" >}} + +#### Discord ```yaml type: discord @@ -231,7 +242,11 @@ settings: {{ template "default.message" . }} ``` -##### E-Mail +{{< /collapse >}} + +{{< collapse title="E-Mail" >}} + +#### E-Mail ```yaml type: email @@ -247,7 +262,11 @@ settings: {{ template "default.title" . }} ``` -##### Google Chat +{{< /collapse >}} + +{{< collapse title="Google Chat" >}} + +#### Google Chat ```yaml type: googlechat @@ -259,7 +278,11 @@ settings: {{ template "default.message" . }} ``` -##### Kafka +{{< /collapse >}} + +{{< collapse title="Kafka" >}} + +#### Kafka ```yaml type: kafka @@ -270,7 +293,11 @@ settings: kafkaTopic: topic1 ``` -##### LINE +{{< /collapse >}} + +{{< collapse title="LINE" >}} + +#### LINE ```yaml type: line @@ -279,7 +306,11 @@ settings: token: xxx ``` -##### Microsoft Teams +{{< /collapse >}} + +{{< collapse title="Microsoft Teams" >}} + +#### Microsoft Teams ```yaml type: teams @@ -296,7 +327,11 @@ settings: {{ template "default.message" . }} ``` -##### OpsGenie +{{< /collapse >}} + +{{< collapse title="OpsGenie" >}} + +#### OpsGenie ```yaml type: opsgenie @@ -318,7 +353,11 @@ settings: sendTagsAs: both ``` -##### PagerDuty +{{< /collapse >}} + +{{< collapse title="PagerDuty" >}} + +#### PagerDuty ```yaml type: pagerduty @@ -338,7 +377,11 @@ settings: {{ template "default.message" . }} ``` -##### Pushover +{{< /collapse >}} + +{{< collapse title="Pushover" >}} + +#### Pushover ```yaml type: pushover @@ -355,6 +398,8 @@ settings: retry: '30' # expire: '120' + # the number of seconds before a message expires and is deleted automatically. Examples: 10s, 5m30s, 8h. + ttl: # sound: siren # @@ -364,7 +409,11 @@ settings: {{ template "default.message" . }} ``` -##### Slack +{{< /collapse >}} + +{{< collapse title="Slack" >}} + +#### Slack ```yaml type: slack @@ -396,7 +445,11 @@ settings: {{ template "slack.default.text" . }} ``` -##### Sensu Go +{{< /collapse >}} + +{{< collapse title="Sensu Go" >}} + +#### Sensu Go ```yaml type: sensugo @@ -418,7 +471,11 @@ settings: {{ template "default.message" . }} ``` -##### Telegram +{{< /collapse >}} + +{{< collapse title="Telegram" >}} + +#### Telegram ```yaml type: telegram @@ -432,7 +489,11 @@ settings: {{ template "default.message" . }} ``` -##### Threema Gateway +{{< /collapse >}} + +{{< collapse title="Threema Gateway" >}} + +#### Threema Gateway ```yaml type: threema @@ -445,7 +506,11 @@ settings: recipient_id: A9R4KL4S ``` -##### VictorOps +{{< /collapse >}} + +{{< collapse title="VictorOps" >}} + +#### VictorOps ```yaml type: victorops @@ -456,7 +521,11 @@ settings: messageType: CRITICAL ``` -##### Webhook +{{< /collapse >}} + +{{< collapse title="Webhook" >}} + +#### Webhook ```yaml type: webhook @@ -477,7 +546,11 @@ settings: maxAlerts: '10' ``` -##### WeCom +{{< /collapse >}} + +{{< collapse title="WeCom" >}} + +#### WeCom ```yaml type: wecom @@ -492,17 +565,72 @@ settings: {{ template "default.title" . }} ``` -### Provision notification policies +{{< /collapse >}} + +## Import templates + +Create or delete templates using provisioning files in your Grafana instance(s). + +1. Find the notification template in Grafana. +1. [Export][export_templates] a template by copying the template content and title. +1. Copy the contents into a YAML or JSON configuration file and add it to the `provisioning/alerting` directory of the Grafana instance you want to import the alerting resources to. + + Example configuration files can be found below. + +1. Restart your Grafana instance (or reload the provisioned files using the Admin API). + +Here is an example of a configuration file for creating templates. + +```yaml +# config file version +apiVersion: 1 + +# List of templates to import or update +templates: + # organization ID, default = 1 + - orgId: 1 + # name of the template, must be unique + name: my_first_template + # content of the template + template: | + {{ define "my_first_template" }} + Custom notification message + {{ end }} +``` + +Here is an example of a configuration file for deleting templates. + +```yaml +# config file version +apiVersion: 1 + +# List of alert rule UIDs that should be deleted +deleteTemplates: + # organization ID, default = 1 + - orgId: 1 + # name of the template, must be unique + name: my_first_template +``` + +## Import notification policies + +Create or reset the notification policy tree using provisioning files in your Grafana instance(s). + +In Grafana, the entire notification policy tree is considered a single, large resource. Add new specific policies as sub-policies under the root policy. Since specific policies may depend on each other, you cannot provision subsets of the policy tree; the entire tree must be defined in a single place. + +{{% admonition type="warning" %}} -Create or reset the notification policy tree in your Grafana instance(s). +Since the policy tree is a single resource, provisioning it will overwrite a policy tree created through any other means. -1. Create a notification policy in Grafana. -1. Use the [Alerting provisioning API][alerting_provisioning] export endpoints to download a provisioning file for your notification policy. -1. Copy the contents into a YAML or JSON configuration file in the default provisioning directory or in your configured directory. +{{< /admonition >}} + +1. Find the notification policy tree in Grafana. +1. [Export][export_policies] and download a provisioning file for your notification policy tree. +1. Copy the contents into a YAML or JSON configuration file and add it to the `provisioning/alerting` directory of the Grafana instance you want to import the alerting resources to. Example configuration files can be found below. -1. Ensure that your files are in the right directory on the node running the Grafana server, so that they deploy alongside your Grafana instance(s). +1. Restart your Grafana instance (or reload the provisioned files using the Admin API). Here is an example of a configuration file for creating notification policies. @@ -578,61 +706,17 @@ resetPolicies: - 1 ``` -**Note:** - -In Grafana, the entire notification policy tree is considered a single, large resource. Add new specific policies as sub-policies under the root policy. Since specific policies may depend on each other, you cannot provision subsets of the policy tree; the entire tree must be defined in a single place. - -Since the policy tree is a single resource, applying it will overwrite a policy tree created through any other means. +## Import mute timings -### Provision templates +Create or delete mute timings via provisioning files using provisioning files in your Grafana instance(s). -Create or delete templates in your Grafana instance(s). - -1. Create a YAML or JSON configuration file. +1. Find the mute timing in Grafana. +1. [Export][export_mute_timings] and download a provisioning file for your mute timing. +1. Copy the contents into a YAML or JSON configuration file and add it to the `provisioning/alerting` directory of the Grafana instance you want to import the alerting resources to. Example configuration files can be found below. -2. Add the file(s) to your GitOps workflow, so that they deploy alongside your Grafana instance(s). - -Here is an example of a configuration file for creating templates. - -```yaml -# config file version -apiVersion: 1 - -# List of templates to import or update -templates: - # organization ID, default = 1 - - orgID: 1 - # name of the template, must be unique - name: my_first_template - # content of the the template - template: Alerting with a custom text template -``` - -Here is an example of a configuration file for deleting templates. - -```yaml -# config file version -apiVersion: 1 - -# List of alert rule UIDs that should be deleted -deleteTemplates: - # organization ID, default = 1 - - orgId: 1 - # name of the template, must be unique - name: my_first_template -``` - -### Provision mute timings - -Create or delete mute timings in your Grafana instance(s). - -1. Create a YAML or JSON configuration file. - - Example configuration files can be found below. - -1. Add the file(s) to your GitOps workflow, so that they deploy alongside your Grafana instance(s). +1. Restart your Grafana instance (or reload the provisioned files using the Admin API). Here is an example of a configuration file for creating mute timings. @@ -673,65 +757,33 @@ deleteMuteTimes: name: mti_1 ``` -### File provisioning using Kubernetes +## More examples -If you are a Kubernetes user, you can leverage file provisioning using Kubernetes configuration maps. +For more examples on the concept of this guide: -1. Create one or more configuration maps as follows. +- Try provisioning alerting resources in Grafana OSS with YAML files through a demo project using [Docker Compose](https://github.com/grafana/provisioning-alerting-examples/tree/main/config-files) or [Kubernetes deployments](https://github.com/grafana/provisioning-alerting-examples/tree/main/kubernetes). +- Review the distinct options about how Grafana provisions resources in the [Provision Grafana documentation][provisioning]. +- For Helm support, review the examples provisioning alerting resources in the [Grafana Helm Chart documentation](https://github.com/grafana/helm-charts/blob/main/charts/grafana/README.md). -```yaml -apiVersion: v1 -kind: ConfigMap -metadata: - name: grafana-alerting -data: - provisioning.yaml: | - templates: - - name: my_first_template - template: the content for my template -``` +{{% docs/reference %}} -2. Add the file(s) to your GitOps workflow, so that they deploy alongside your Grafana instance(s). +[export_alert_rules]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/export-alerting-resources#export-alert-rules" +[export_alert_rules]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/export-alerting-resources#export-alert-rules" -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: grafana -spec: - replicas: 1 - selector: - matchLabels: - app: grafana - template: - metadata: - name: grafana - labels: - app: grafana - spec: - containers: - - name: grafana - image: grafana/grafana:latest - ports: - - name: grafana - containerPort: 3000 - volumeMounts: - - mountPath: /etc/grafana/provisioning/alerting - name: grafana-alerting - readOnly: false - volumes: - - name: grafana-alerting - configMap: - defaultMode: 420 - name: grafana-alerting -``` +[export_contact_points]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/export-alerting-resources#export-contact-points" +[export_contact_points]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/export-alerting-resources#export-contact-points" -This eliminates the need for a persistent database to use Grafana Alerting in Kubernetes; all your provisioned resources appear after each restart or re-deployment. Grafana still requires a database for normal operation, you do not need to persist the contents of the database between restarts if all objects are provisioned using files. +[export_templates]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/export-alerting-resources#export-templates" +[export_templates]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/export-alerting-resources#export-templates" -{{% docs/reference %}} -[alerting_provisioning]: "/docs/grafana/ -> /docs/grafana//developers/http_api/alerting_provisioning" -[alerting_provisioning]: "/docs/grafana-cloud/ -> /docs/grafana//developers/http_api/alerting_provisioning" +[export_policies]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/export-alerting-resources#export-the-notification-policy-tree" +[export_policies]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/export-alerting-resources#export-the-notification-policy-tree" + +[export_mute_timings]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/export-alerting-resources#export-mute-timings" +[export_mute_timings]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/export-alerting-resources#export-mute-timings" + +[provisioning]: "/docs/ -> /docs/grafana//administration/provisioning" + +[reload-provisioning-configurations]: "/docs/ -> /docs/grafana//developers/http_api/admin#reload-provisioning-configurations" -[reload-provisioning-configurations]: "/docs/grafana/ -> /docs/grafana//developers/http_api/admin#reload-provisioning-configurations" -[reload-provisioning-configurations]: "/docs/grafana-cloud/ -> /docs/grafana//developers/http_api/admin#reload-provisioning-configurations" {{% /docs/reference %}} diff --git a/docs/sources/alerting/set-up/provision-alerting-resources/http-api-provisioning/_index.md b/docs/sources/alerting/set-up/provision-alerting-resources/http-api-provisioning/_index.md new file mode 100644 index 0000000000000..4c1f460657110 --- /dev/null +++ b/docs/sources/alerting/set-up/provision-alerting-resources/http-api-provisioning/_index.md @@ -0,0 +1,20 @@ +--- +canonical: https://grafana.com/docs/grafana/latest/developers/http_api/alerting_provisioning/ +description: Create and manage alerting resources using the HTTP API +keywords: + - grafana + - alerting + - alerting resources + - provisioning +labels: + products: + - cloud + - enterprise + - oss +title: Use the HTTP API to manage alerting resources +weight: 400 +--- + +# Use the HTTP API to manage alerting resources + +{{< docs/shared lookup="alerts/alerting_provisioning.md" source="grafana" version="latest" >}} diff --git a/docs/sources/alerting/set-up/provision-alerting-resources/terraform-provisioning/index.md b/docs/sources/alerting/set-up/provision-alerting-resources/terraform-provisioning/index.md index 00da792044447..b3bef7ffc7a39 100644 --- a/docs/sources/alerting/set-up/provision-alerting-resources/terraform-provisioning/index.md +++ b/docs/sources/alerting/set-up/provision-alerting-resources/terraform-provisioning/index.md @@ -1,6 +1,4 @@ --- -aliases: - - ../../provision-alerting-resources/terraform-provisioning/ canonical: https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/terraform-provisioning/ description: Create and manage alerting resources using Terraform keywords: @@ -11,357 +9,415 @@ keywords: - Terraform labels: products: + - cloud - enterprise - oss -title: Create and manage alerting resources using Terraform +menuTitle: Use Terraform to provision +title: Use Terraform to provision alerting resources weight: 200 --- -# Create and manage alerting resources using Terraform +# Use Terraform to provision alerting resources Use Terraform’s Grafana Provider to manage your alerting resources and provision them into your Grafana system. Terraform provider support for Grafana Alerting makes it easy to create, manage, and maintain your entire Grafana Alerting stack as code. -For more information on managing your alerting resources using Terraform, refer to the [Grafana Provider](https://registry.terraform.io/providers/grafana/grafana/latest/docs) documentation. +This guide outlines the steps and references to provision alerting resources with Terraform. For a practical demo, you can clone and try this [example using Grafana OSS and Docker Compose](https://github.com/grafana/provisioning-alerting-examples/tree/main/terraform). -Complete the following tasks to create and manage your alerting resources using Terraform. +To create and manage your alerting resources using Terraform, you have to complete the following tasks. -1. Create an API key for provisioning. -1. Configure the Terraform provider. -1. Define your alerting resources in Terraform. +1. Create an API key to configure the Terraform provider. +1. Create your alerting resources in Terraform format by + - [exporting configured alerting resources][alerting_export] + - or writing the [Terraform Alerting schemas](https://registry.terraform.io/providers/grafana/grafana/latest/docs). + > By default, you cannot edit provisioned resources. Enable [`disable_provenance` in the Terraform resource](#enable-editing-resources-in-the-grafana-ui) to allow changes in the Grafana UI. 1. Run `terraform apply` to provision your alerting resources. -## Before you begin +Before you begin, you should have available a Grafana instance and [Terraform installed](https://www.terraform.io/downloads) on your machine. -- Ensure you have the grafana/grafana [Terraform provider](https://registry.terraform.io/providers/grafana/grafana/1.28.0) 1.27.0 or higher. +## Create an API key and configure the Terraform provider -- Ensure you are using Grafana 9.1 or higher. +You can create a [service account token][service-accounts] to authenticate Terraform with Grafana. To create an API key for provisioning alerting resources, complete the following steps. -## Create an API key for provisioning - -You can [create a normal Grafana API key][api-keys] to authenticate Terraform with Grafana. Most existing tooling using API keys should automatically work with the new Grafana Alerting support. - -There are also dedicated RBAC roles for alerting provisioning. This lets you easily authenticate as a [service account][service-accounts] with the minimum permissions needed to provision your Alerting infrastructure. - -To create an API key for provisioning, complete the following steps. - -1. Create a new service account for your CI pipeline. -1. Assign the role “Access the alert rules Provisioning API.” +1. Create a new service account. +1. Assign the role or permission to access the [Alerting provisioning API][alerting_http_provisioning]. 1. Create a new service account token. 1. Name and save the token for use in Terraform. -Alternatively, you can use basic authentication. To view all the supported authentication formats, see [here](https://registry.terraform.io/providers/grafana/grafana/latest/docs#authentication). +You can now move to the working directory for your Terraform configurations, and create a file named `main.tf` like: -## Configure the Terraform provider - -Grafana Alerting support is included as part of the [Grafana Terraform provider](https://registry.terraform.io/providers/grafana/grafana/latest/docs). - -The following is an example you can use to configure the Terraform provider. - -```HCL +```main.tf terraform { required_providers { grafana = { source = "grafana/grafana" - version = ">= 1.28.2" + version = ">= 2.9.0" } } } provider "grafana" { - url = - auth = + url = + auth = } ``` -## Provision contact points and templates +Replace the following values: + +- `` with the URL of the Grafana instance. +- `` with the API token previously created. + +This Terraform configuration installs the [Grafana Terraform provider](https://registry.terraform.io/providers/grafana/grafana/latest/docs) and authenticates against your Grafana instance using an API token. For other authentication alternatives including basic authentication, refer to the [`auth` option documentation](https://registry.terraform.io/providers/grafana/grafana/latest/docs#authentication). + +For Grafana Cloud, refer to the [instructions to manage a Grafana Cloud stack with Terraform][provision-cloud-with-terraform]. For role-based access control, refer to [Provisioning RBAC with Terraform][rbac-terraform-provisioning] and the [alerting provisioning roles (`fixed:alerting.provisioning.*`)][rbac-role-definitions]. + +## Create Terraform configurations for alerting resources + +[Grafana Terraform provider](https://registry.terraform.io/providers/grafana/grafana/latest/docs) enables you to manage the following alerting resources. + +| Alerting resource | Terraform resource | +| ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| [Alert rules][alerting-rules] | [grafana_rule_group](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/rule_group) | +| [Contact points][contact-points] | [grafana_contact_point](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/contact_point) | +| [Notification templates][notification-template] | [grafana_message_template](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/message_template) | +| [Notification policy tree][notification-policy] | [grafana_notification_policy](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/notification_policy) | +| [Mute timings][mute-timings] | [grafana_mute_timing](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/mute_timing) | + +In this section, we'll create Terraform configurations for each alerting resource and demonstrate how to link them together. + +### Add alert rules + +[Alert rules][alerting-rules] enable you to receive alerts by querying any backend Grafana data sources. + +1. First, create a data source to query and a folder to store your rules in. + + In this example, the [TestData][testdata] data source is used. + + ```terraform + resource "grafana_data_source" "" { + name = "TestData" + type = "testdata" + } -Contact points connect an alerting stack to the outside world. They tell Grafana how to connect to your external systems and where to deliver notifications. There are over fifteen different [integrations](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/contact_point#optional) to choose from. + resource "grafana_folder" "" { + title = "My Rule Folder" + } + ``` -To provision contact points and templates, complete the following steps. + Replace the following field values: -1. Copy this code block into a .tf file on your local machine. + - `` with the terraform name of the data source. + - `` with the terraform name of the folder. -This example creates a contact point that sends alert notifications to Slack. +1. Create or find an alert rule you want to import in Grafana. -```HCL -resource "grafana_contact_point" "my_slack_contact_point" { - name = "Send to My Slack Channel" +1. [Export][alerting_export] the alert rule group in Terraform format. This exports the alert rule group as [`grafana_rule_group` Terraform resource](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/rule_group). - slack { - url = - text = <" { + name = "My Alert Rules" + folder_uid = grafana_folder..uid + interval_seconds = 60 + org_id = 1 -You can create multiple external integrations in a single contact point. Notifications routed to this contact point will be sent to all integrations. This example shows multiple integrations in the same Terraform resource. + rule { + name = "My Random Walk Alert" + condition = "C" + for = "0s" -``` -resource "grafana_contact_point" "my_multi_contact_point" { - name = "Send to Many Places" + // Query the datasource. + data { + ref_id = "A" + relative_time_range { + from = 600 + to = 0 + } + datasource_uid = grafana_data_source..uid + // `model` is a JSON blob that sends datasource-specific data. + // It's different for every datasource. The alert's query is defined here. + model = jsonencode({ + intervalMs = 1000 + maxDataPoints = 43200 + refId = "A" + }) + } - slack { - url = "webhook1" - ... - } - slack { - url = "webhook2" - ... - } - teams { - ... - } - email { - ... + // The query was configured to obtain data from the last 60 seconds. Let's alert on the average value of that series using a Reduce stage. + data { + datasource_uid = "__expr__" + // You can also create a rule in the UI, then GET that rule to obtain the JSON. + // This can be helpful when using more complex reduce expressions. + model = <` with the name of the alert rule group. + + Note that the distinct Grafana resources are connected through `uid` values in their Terraform configurations. The `uid` value will be randomly generated when provisioning. + + To link the alert rule group with its respective data source and folder in this example, replace the following field values: + + - `` with the terraform name of the previously defined data source. + - `` with the terraform name of the the previously defined folder. + +1. Continue to add more Grafana resources or [use the Terraform CLI for provisioning](#provision-grafana-resources-with-terraform). + +### Add contact points + +[Contact points][contact-points] are the receivers of alert notifications. + +1. Create or find the contact points you want to import in Grafana. Alternatively, consider writing the resource in code as demonstrated in the example below. + +1. [Export][alerting_export] the contact point in Terraform format. This exports the contact point as [`grafana_contact_point` Terraform resource](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/contact_point)—edit it if necessary. + +1. In this example, notifications are muted on weekends. + + ```terraform + resource "grafana_contact_point" "" { + name = "My contact point email" + + email { + addresses = [""] + } } -} -``` + ``` -2. Enter text for your notification in the text field. + Replace the following field values: -The `text` field supports [Go-style templating](https://pkg.go.dev/text/template). This enables you to manage your Grafana Alerting notification templates directly in Terraform. + - `` with the terraform name of the contact point. It will be used to reference the contact point in other Terraform resources. + - `` with the email to receive alert notifications. -3. Run the command ‘terraform apply’. +1. Continue to add more Grafana resources or [use the Terraform CLI for provisioning](#provision-grafana-resources-with-terraform). -4. Go to the Grafana UI and check the details of your contact point. +### Add and enable templates -By default, you cannot edit resources provisioned via Terraform from the UI. This ensures that your alerting stack always stays in sync with your code. +[Notification templates][notification-template] allow customization of alert notifications across multiple contact points. -5. Click **Test** to verify that the contact point works correctly. +1. Create or find the notification template you want to import in Grafana. Alternatively, consider writing the resource in code as demonstrated in the example below. -**Note:** +1. [Export][alerting_export] the template as [`grafana_message_template` Terraform resource](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/message_template). -You can reuse the same templates across many contact points. In the example above, a shared template ie embedded using the statement `{{ template “Alert Instance Template” . }}` + This example is a simple demo template defined as `custom_email.message`. -This fragment can then be managed separately in Terraform: + ```terraform + resource "grafana_message_template" "" { + name = "custom_email.message" -```HCL -resource "grafana_message_template" "my_alert_template" { - name = "Alert Instance Template" + template = <" { + name = "My contact point email" -Notification policies tell Grafana how to route alert instances to your contact points. They connect firing alerts to your previously defined contact points using a system of labels and matchers. + email { + addresses = [""] + message = "{{ template \"custom_email.message\" .}}" + } + } + ``` -To provision notification policies and routing, complete the following steps. +1. Continue to add more Grafana resources or [use the Terraform CLI for provisioning](#provision-grafana-resources-with-terraform). -1. Copy this code block into a .tf file on your local machine. +### Add mute timings -In this example, the alerts are grouped by `alertname`, which means that any notifications coming from alerts which share the same name, are grouped into the same Slack message. You can provide any set of label keys here, or you can use the special label `"..."` to route by all label keys, sending each alert in a separate notification. +[Mute timings][mute-timings] pause alert notifications during predetermined intervals. -If you want to route specific notifications differently, you can add sub-policies. Sub-policies allow you to apply routing to different alerts based on label matching. In this example, we apply a mute timing to all alerts with the label a=b. +1. Create or find the mute timings you want to import in Grafana. Alternatively, consider writing the resource in code as demonstrated in the example below. -```HCL -resource "grafana_notification_policy" "my_policy" { - group_by = ["alertname"] - contact_point = grafana_contact_point.my_slack_contact_point.name +1. [Export][alerting_export] the mute timing in Terraform format. This exports the mute timing as [`grafana_mute_timing` Terraform resource](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/mute_timing)—edit it if necessary. - group_wait = "45s" - group_interval = "6m" - repeat_interval = "3h" +1. This example turns off notifications on weekends. - policy { - matcher { - label = "a" - match = "=" - value = "b" - } - group_by = ["..."] - contact_point = grafana_contact_point.a_different_contact_point.name - mute_timings = [grafana_mute_timing.my_mute_timing.name] - - policy { - matcher { - label = "sublabel" - match = "=" - value = "subvalue" - } - contact_point = grafana_contact_point.a_third_contact_point.name - group_by = ["..."] + ```terraform + resource "grafana_mute_timing" "" { + name = "No weekends" + + intervals { + weekdays = ["saturday", "sunday"] } } -} -``` + ``` -2. In the mute_timings field, link a mute timing to your notification policy. + Replace the following field values: -3. Run the command ‘terraform apply’. + - `` with the name of the Terraform resource. It will be used to reference the mute timing in the Terraform notification policy tree. -4. Go to the Grafana UI and check the details of your notification policy. +1. Continue to add more Grafana resources or [use the Terraform CLI for provisioning](#provision-grafana-resources-with-terraform). -**Note:** +### Add the notification policy tree -Since the policy tree is a single resource, applying it will overwrite a policy tree created through any other means. +[Notification policies][notification-policy] defines how to route alert instances to your contact points. -By default, you cannot edit resources provisioned from Terraform from the UI. This ensures that your alerting stack always stays in sync with your code. +{{% admonition type="warning" %}} -5. Click **Test** to verify that the notification point is working correctly. +Since the policy tree is a single resource, provisioning the `grafana_notification_policy` resource will overwrite a policy tree created through any other means. -## Provision mute timings +{{< /admonition >}} -Mute timings provide the ability to mute alert notifications for defined time periods. +1. Find the default notification policy tree. Alternatively, consider writing the resource in code as demonstrated in the example below. -To provision mute timings, complete the following steps. +1. [Export][alerting_export] the notification policy tree in Terraform format. This exports it as [`grafana_notification_policy` Terraform resource](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/notification_policy)—edit it if necessary. -1. Copy this code block into a .tf file on your local machine. + ```terraform + resource "grafana_notification_policy" "my_policy_tree" { + contact_point = grafana_contact_point..name + ... -In this example, alert notifications are muted on weekends. + policy { + contact_point = grafana_contact_point..name -```HCL -resource "grafana_mute_timing" "my_mute_timing" { - name = "My Mute Timing" + matcher {...} - intervals { - times { - start = "04:56" - end = "14:17" - } - weekdays = ["saturday", "sunday", "tuesday:thursday"] - months = ["january:march", "12"] - years = ["2025:2027"] - } + mute_timings = [grafana_mute_timing..name] + } + } + ``` + + To configure the mute timing and contact point previously created in the notification policy tree, replace the following field values: + + - `` with the terraform name of the previously defined contact point. + - `` with the terraform name of the the previously defined mute timing. + +1. Continue to add more Grafana resources or [use the Terraform CLI for provisioning](#provision-grafana-resources-with-terraform). + +### Enable editing resources in the Grafana UI + +By default, you cannot edit resources provisioned via Terraform in Grafana. This ensures that your alerting stack always stays in sync with your Terraform code. + +To make provisioned resources editable in the Grafana UI, enable the `disable_provenance` attribute on alerting resources. + +```terraform +resource "grafana_contact_point" "my_contact_point" { + name = "My Contact Point" + + disable_provenance = true } -``` -2. Run the command ‘terraform apply’. -3. Go to the Grafana UI and check the details of your mute timing. -4. Reference your newly created mute timing in a notification policy using the `mute_timings` field. - This will apply your mute timing to some or all of your notifications. +resource "grafana_message_template" "my_template" { + name = "My Reusable Template" + template = "{{define \"My Reusable Template\" }}\n template content\n{{ end }}" -**Note:** + disable_provenance = true +} +... +``` -By default, you cannot edit resources provisioned from Terraform from the UI. This ensures that your alerting stack always stays in sync with your code. +Note that `disable_provenance` is not supported for [grafana_mute_timing](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/mute_timing). -5. Click **Test** to verify that the mute timing is working correctly. +## Provision Grafana resources with Terraform -## Provision alert rules +To create the previous alerting resources in Grafana with the Terraform CLI, complete the following steps. -[Alert rules][alerting-rules] enable you to alert against any Grafana data source. This can be a data source that you already have configured, or you can [define your data sources in Terraform](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/data_source) alongside your alert rules. +1. Initialize the working directory containing the Terraform configuration files. -To provision alert rules, complete the following steps. + ```shell + terraform init + ``` -1. Create a data source to query and a folder to store your rules in. + This command initializes the Terraform directory, installing the Grafana Terraform provider configured in the `main.tf` file. -In this example, the [TestData][testdata] data source is used. +1. Apply the Terraform configuration files to provision the resources. -Alerts can be defined against any backend datasource in Grafana. + ```shell + terraform apply + ``` -```HCL -resource "grafana_data_source" "testdata_datasource" { - name = "TestData" - type = "testdata" -} + Before applying any changes to Grafana, Terraform displays the execution plan and requests your approval. -resource "grafana_folder" "rule_folder" { - title = "My Rule Folder" -} -``` + ```shell + Plan: 4 to add, 0 to change, 0 to destroy. -2. Define an alert rule. - -For more information on alert rules, refer to [how to create Grafana-managed alerts](/blog/2022/08/01/grafana-alerting-video-how-to-create-alerts-in-grafana-9/). - -3. Create a rule group containing one or more rules. - -In this example, the `grafana_rule_group` resource group is used. - -```HCL -resource "grafana_rule_group" "my_rule_group" { - name = "My Alert Rules" - folder_uid = grafana_folder.rule_folder.uid - interval_seconds = 60 - org_id = 1 - - rule { - name = "My Random Walk Alert" - condition = "C" - for = "0s" - - // Query the datasource. - data { - ref_id = "A" - relative_time_range { - from = 600 - to = 0 - } - datasource_uid = grafana_data_source.testdata_datasource.uid - // `model` is a JSON blob that sends datasource-specific data. - // It's different for every datasource. The alert's query is defined here. - model = jsonencode({ - intervalMs = 1000 - maxDataPoints = 43200 - refId = "A" - }) - } + Do you want to perform these actions? + Terraform will perform the actions described above. + Only 'yes' will be accepted to approve. - // The query was configured to obtain data from the last 60 seconds. Let's alert on the average value of that series using a Reduce stage. - data { - datasource_uid = "__expr__" - // You can also create a rule in the UI, then GET that rule to obtain the JSON. - // This can be helpful when using more complex reduce expressions. - model = < /docs/grafana//alerting/alerting-rules" + +[alerting-rules]: "/docs/grafana/ -> /docs/grafana//alerting/alerting-rules" [alerting-rules]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/alerting-rules" -[api-keys]: "/docs/grafana/ -> /docs/grafana//administration/api-keys" -[api-keys]: "/docs/grafana-cloud/ -> /docs/grafana//administration/api-keys" +[contact-points]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/manage-contact-points" +[contact-points]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/manage-contact-points" + +[mute-timings]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/mute-timings" +[mute-timings]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/mute-timings" + +[notification-policy]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/create-notification-policy" +[notification-policy]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/create-notification-policy" + +[notification-template]: "/docs/grafana/ -> /docs/grafana//alerting/configure-notifications/template-notifications" +[notification-template]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/template-notifications" + +[alerting_export]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/export-alerting-resources" +[alerting_export]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/export-alerting-resources" + +[alerting_http_provisioning]: "/docs/grafana/ -> /docs/grafana//alerting/set-up/provision-alerting-resources/http-api-provisioning" +[alerting_http_provisioning]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/alerting/set-up/provision-alerting-resources/http-api-provisioning" + +[service-accounts]: "/docs/ -> /docs/grafana//administration/service-accounts" + +[testdata]: "/docs/grafana/ -> /docs/grafana//datasources/testdata" +[testdata]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/connect-externally-hosted/data-sources/testdata" + +[provision-cloud-with-terraform]: "/docs/ -> /docs/grafana-cloud/developer-resources/infrastructure-as-code/terraform/terraform-cloud-stack" + +[rbac-role-definitions]: "/docs/ -> /docs/grafana//administration/roles-and-permissions/access-control/rbac-fixed-basic-role-definitions" -[service-accounts]: "/docs/grafana/ -> /docs/grafana//administration/service-accounts" -[service-accounts]: "/docs/grafana-cloud/ -> /docs/grafana//administration/service-accounts" +[rbac-terraform-provisioning]: "/docs/ -> /docs/grafana//administration/roles-and-permissions/access-control/rbac-terraform-provisioning" -[testdata]: "/docs/grafana/ -> /docs/grafana//datasources/testdata" -[testdata]: "/docs/grafana-cloud/ -> /docs/grafana//datasources/testdata" {{% /docs/reference %}} diff --git a/docs/sources/alerting/set-up/provision-alerting-resources/view-provisioned-resources/index.md b/docs/sources/alerting/set-up/provision-alerting-resources/view-provisioned-resources/index.md deleted file mode 100644 index 5edb960bffce4..0000000000000 --- a/docs/sources/alerting/set-up/provision-alerting-resources/view-provisioned-resources/index.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -aliases: - - ../../provision-alerting-resources/view-provisioned-resources/ -canonical: https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/view-provisioned-resources/ -description: Manage provisioned alerting resources in Grafana -keywords: - - grafana - - alerting - - alerting resources - - provisioning -labels: - products: - - cloud - - enterprise - - oss -menuTitle: Manage provisioned resources in Grafana -title: Manage provisioned alerting resources in Grafana -weight: 300 ---- - -# Manage provisioned alerting resources in Grafana - -Verify that your alerting resources were created in Grafana, as well as edit or export your provisioned alerting resources. - -## View provisioned alerting resoureces - -To view your provisioned resources in Grafana, complete the following steps. - -1. Open your Grafana instance. -1. Navigate to Alerting. -1. Click an alerting resource folder, for example, Alert rules. - -Provisioned resources are labeled **Provisioned**, so that it is clear that they were not created manually. - -## Export provisioned alerting resources - -Export your alerting resources, such as alert rules, contact points, and notification policies in JSON, YAML, or Terraform format. You can export all Grafana-managed alert rules, single folders, and single groups. - -To export provisioned alerting resources from the Grafana UI, complete the following steps. - -1. Click **Alerts & IRM** -> **Alert rules**. -1. To export all Grafana-managed rules, click **More v** -> **Export all Grafana-managed rules**. -1. To export a folder, change the **View as** to **List**. -1. Select the folder you want to export and click the **Export rules folder** icon. -1. To export a group, change the **View as** to **Grouped**. -1. Find the group you want to export and click the **Export rule group** icon. -1. Choose the format to export in. - - Note that formats JSON and YAML are suitable only for file provisioning. To get rule definition in provisioning API format, use the provisioning GET API. - -1. Click **Copy Code** or **Download**. -1. Choose **Copy Code** to go to an existing file and paste in the code. -1. Choose **Download** to download a file with the exported data. - -## Edit provisioned alert rules - -Use the **Modify export** mode for alert rules to edit provisioned alert rules and export a modified version. - -{{% admonition type="note" %}} This feature is for Grafana-managed alert rules only. It is available to Admin, Viewer, and Editor roles. {{% /admonition %}} - -To edit provisioned alerting alert rules from the Grafana UI, complete the following steps. - -1. Click **Alerts & IRM** -> **Alert rules**. -1. Locate the alert rule you want to edit and click **More** -> **Modify Export** to open the Alert Rule form. -1. From the Alert Rule form, edit the fields you want to change. -1. Click **Export** to export all alert rules within the group. - - You can only export groups of rules; not single rules. - The exported rule data appears in different formats - HTML, JSON, Terraform. - -1. Choose the format to export in. -1. Click **Copy Code** or **Download**. - - a. Choose **Copy Code** to go to an existing file and paste in the code. - - b. Choose **Download** to download a file with the exported data. - -## Edit API-provisioned alerting resources - -To enable editing of API-provisioned resources in the Grafana UI, add the `X-Disable-Provenance` header to the following requests in the API: - -- `POST /api/v1/provisioning/alert-rules` -- `PUT /api/v1/provisioning/folder/{FolderUID}/rule-groups/{Group}` (calling this endpoint will change provenance for all alert rules within the alert group) -- `POST /api/v1/provisioning/contact-points` -- `POST /api/v1/provisioning/mute-timings` -- `PUT /api/v1/provisioning/policies` -- `PUT /api/v1/provisioning/templates/{name}` - -To reset the notification policy tree to the default and unlock it for editing in the Grafana UI, use the `DELETE /api/v1/provisioning/policies` endpoint. - -To pass the `X-Disable-Provenance` header from Terraform, add it to the `http_headers` field on the provider object: - -``` -provider "grafana" { - url = "http://grafana.example.com/" - auth = var.grafana_auth - http_headers = { - "X-Disable-Provenance" = "true" - } -} -``` - -**Note:** - -You cannot edit provisioned resources from files in Grafana. You can only change the resource properties by changing the provisioning file and restarting Grafana or carrying out a hot reload. This prevents changes being made to the resource that would be overwritten if a file is provisioned again or a hot reload is carried out. diff --git a/docs/sources/breaking-changes/breaking-changes-v10-0.md b/docs/sources/breaking-changes/breaking-changes-v10-0.md index 1135ccad11bbb..8c0dd3f29e22b 100644 --- a/docs/sources/breaking-changes/breaking-changes-v10-0.md +++ b/docs/sources/breaking-changes/breaking-changes-v10-0.md @@ -81,7 +81,7 @@ Grafana legacy alerting (dashboard alerts) has been deprecated since Grafana v9. #### Migration path -The new Grafana Alerting was introduced in Grafana 8 and is a superset of legacy alerting. Learn how to migrate your alerts in the [Upgrade Alerting documentation]({{< relref "../alerting/set-up/migrating-alerts/" >}}). +The new Grafana Alerting was introduced in Grafana 8 and is a superset of legacy alerting. Learn how to migrate your alerts in the [Upgrade Alerting documentation]({{< relref "./v10.4/alerting/set-up/migrating-alerts/" >}}). ### API keys are migrating to service accounts diff --git a/docs/sources/breaking-changes/breaking-changes-v10-3.md b/docs/sources/breaking-changes/breaking-changes-v10-3.md new file mode 100644 index 0000000000000..cbb0a37a77caa --- /dev/null +++ b/docs/sources/breaking-changes/breaking-changes-v10-3.md @@ -0,0 +1,77 @@ +--- +description: Breaking changes for Grafana v10.3 +keywords: + - grafana + - breaking changes + - documentation + - '10.3' + - '10.2.3' + - release notes +labels: + products: + - cloud + - enterprise + - oss +title: Breaking changes in Grafana v10.3 +weight: -2 +--- + +# Breaking changes in Grafana v10.3 + +Following are breaking changes that you should be aware of when upgrading to Grafana v10.3. Breaking changes that were introduced in release 10.2.3 are also included here and are marked with an asterisk. + +For our purposes, a breaking change is any change that requires users or operators to do something. This includes: + +- Changes in one part of the system that could cause other components to fail +- Deprecations or removal of a feature +- Changes to an API that could break automation +- Changes that affect some plugins or functions of Grafana +- Migrations that can’t be rolled back + +For each change, the provided information: + +- Helps you determine if you’re affected +- Describes the change or relevant background information +- Guides you in how to mitigate for the change or migrate +- Provides more learning resources + +For release highlights and deprecations, refer to our [v10.3 What’s new](https://grafana.com/docs/grafana//whatsnew/whats-new-in-v10-3/). For the specific steps we recommend when you upgrade to v10.3, check out our [Upgrade guide](https://grafana.com/docs/grafana//upgrade-guide/upgrade-v10.3/). + + + +## General breaking changes + +### Transformations\* + +In panels using the extract fields transformation, where one of the extracted names collides with one of the already existing fields, the extracted field will be renamed. Issue [#77569](https://github.com/grafana/grafana/issues/77569). + +If you use the Table visualization, you might see some inconsistencies in your panels. We have updated the table column naming. This will potentially affect field transformations and/or field overrides. To resolve this, either: + +- Update the transformation you are using +- Update field override. Issue [#76899](https://github.com/grafana/grafana/issues/76899). + +Users who have transformations with the Time field might see their transformations are not working. Those panels that have broken transformations will fail to render. This is because we changed the field key. See related PR: [#69865](https://github.com/grafana/grafana/pull/69865). To resolve this, either: + +- Remove the affected panel and re-create it +- Select the Time field again +- Edit the time field as Time for transformation in panel.json or dashboard.json. Issue [#76641](https://github.com/grafana/grafana/issues/76641). + +### Data source permissions\* + +The following data source permission endpoints have been removed: + +- `GET /datasources/:datasourceId/permissions` +- `POST /api/datasources/:datasourceId/permissions` +- `DELETE /datasources/:datasourceId/permissions` +- `POST /datasources/:datasourceId/enable-permissions` +- `POST /datasources/:datasourceId/disable-permissions` + +Please use the following endpoints instead: + +- `GET /api/access-control/datasources/:uid` for listing data source permissions +- `POST /api/access-control/datasources/:uid/users/:id`, `POST /api/access-control/datasources/:uid/teams/:id`, and `POST /api/access-control/datasources/:uid/buildInRoles/:id` for adding or removing data source permissions + +If you are using the Grafana provider for Terraform to manage data source permissions, you will need to upgrade your provider to [version 2.6.0](https://registry.terraform.io/providers/grafana/grafana/2.6.0/docs) or newer to ensure that data source permission provisioning keeps working. Issue [#5880](https://github.com/grafana/grafana-enterprise/pull/5880). diff --git a/docs/sources/dashboards/_index.md b/docs/sources/dashboards/_index.md index 297c26cd7a801..0207994cd7360 100644 --- a/docs/sources/dashboards/_index.md +++ b/docs/sources/dashboards/_index.md @@ -28,46 +28,50 @@ Before you begin, ensure that you have configured a data source. See also: - [Playlist][] - [Reporting][] - [Version history][] -- [Export and import][] +- [Import][] +- [Export and share][] - [JSON model][] {{% docs/reference %}} [data source]: "/docs/grafana/ -> /docs/grafana//datasources" -[data source]: "/docs/grafana-cloud/ -> /docs/grafana//datasources" +[data source]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/connect-externally-hosted/data-sources" [Reporting]: "/docs/grafana/ -> /docs/grafana//dashboards/create-reports" -[Reporting]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/create-reports" +[Reporting]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/create-reports" [Public dashboards]: "/docs/grafana/ -> /docs/grafana//dashboards/dashboard-public" -[Public dashboards]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/dashboard-public" +[Public dashboards]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/dashboard-public" [Version history]: "/docs/grafana/ -> /docs/grafana//dashboards/build-dashboards/manage-version-history" -[Version history]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/build-dashboards/manage-version-history" +[Version history]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/build-dashboards/manage-version-history" [panels]: "/docs/grafana/ -> /docs/grafana//panels-visualizations" -[panels]: "/docs/grafana-cloud/ -> /docs/grafana//panels-visualizations" +[panels]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/panels-visualizations" [Annotations]: "/docs/grafana/ -> /docs/grafana//dashboards/build-dashboards/annotate-visualizations" -[Annotations]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/build-dashboards/annotate-visualizations" +[Annotations]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/build-dashboards/annotate-visualizations" [Create dashboard folders]: "/docs/grafana/ -> /docs/grafana//dashboards/manage-dashboards#create-a-dashboard-folder" -[Create dashboard folders]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/manage-dashboards#create-a-dashboard-folder" +[Create dashboard folders]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/manage-dashboards#create-a-dashboard-folder" [JSON model]: "/docs/grafana/ -> /docs/grafana//dashboards/build-dashboards/view-dashboard-json-model" -[JSON model]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/build-dashboards/view-dashboard-json-model" +[JSON model]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/build-dashboards/view-dashboard-json-model" -[Export and import]: "/docs/grafana/ -> /docs/grafana//dashboards/manage-dashboards#export-and-import-dashboards" -[Export and import]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/manage-dashboards#export-and-import-dashboards" +[Import]: "/docs/grafana/ -> /docs/grafana//dashboards/build-dashboards/import-dashboards" +[Import]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/build-dashboards/import-dashboards" + +[Export and share]: "/docs/grafana/ -> /docs/grafana//dashboards/share-dashboards-panels" +[Export and share]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/share-dashboards-panels" [Manage dashboards]: "/docs/grafana/ -> /docs/grafana//dashboards/manage-dashboards" -[Manage dashboards]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/manage-dashboards" +[Manage dashboards]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/manage-dashboards" [Build dashboards]: "/docs/grafana/ -> /docs/grafana//dashboards/build-dashboards" -[Build dashboards]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/build-dashboards" +[Build dashboards]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/build-dashboards" [Use dashboards]: "/docs/grafana/ -> /docs/grafana//dashboards/use-dashboards" -[Use dashboards]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/use-dashboards" +[Use dashboards]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/use-dashboards" [Playlist]: "/docs/grafana/ -> /docs/grafana//dashboards/create-manage-playlists" -[Playlist]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/create-manage-playlists" +[Playlist]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/create-manage-playlists" {{% /docs/reference %}} diff --git a/docs/sources/dashboards/assess-dashboard-usage/index.md b/docs/sources/dashboards/assess-dashboard-usage/index.md index 4c28d254240a2..4f451a66d4818 100644 --- a/docs/sources/dashboards/assess-dashboard-usage/index.md +++ b/docs/sources/dashboards/assess-dashboard-usage/index.md @@ -60,11 +60,7 @@ Dashboard insights show the following information: {{< figure src="/static/img/docs/enterprise/dashboard_insights_stats.png" max-width="400px" class="docs-image--no-shadow" alt="Stats tab" >}}{{< figure src="/static/img/docs/enterprise/dashboard_insights_users.png" max-width="400px" class="docs-image--no-shadow" alt="Users and activity tab" >}} -{{% admonition type="note" %}} - -If public dashboards are [enabled]({{< relref "../../setup-grafana/configure-grafana/#public_dashboards" >}}), you'll also see a **Public dashboards** tab in your analytics. - -{{% /admonition %}} +If public dashboards are [enabled][], you'll also see a **Public dashboards** tab in your analytics. ### Data source insights @@ -146,4 +142,7 @@ You can click the previous links to download the respective dashboard JSON, then [Grafana Enterprise]: "/docs/grafana/ -> /docs/grafana//introduction/grafana-enterprise" [Grafana Enterprise]: "/docs/grafana-cloud/ -> /docs/grafana//introduction/grafana-enterprise" + +[enabled]: "/docs/grafana/ -> /docs/grafana//setup-grafana/configure-grafana#public_dashboards" +[enabled]: "/docs/grafana-cloud/ -> /docs/grafana//setup-grafana/configure-grafana#public_dashboards" {{% /docs/reference %}} diff --git a/docs/sources/dashboards/build-dashboards/annotate-visualizations/index.md b/docs/sources/dashboards/build-dashboards/annotate-visualizations/index.md index ab3ec39d6d7a9..d9711ffffab5e 100644 --- a/docs/sources/dashboards/build-dashboards/annotate-visualizations/index.md +++ b/docs/sources/dashboards/build-dashboards/annotate-visualizations/index.md @@ -44,7 +44,10 @@ Annotations are supported for the following visualization types: Grafana comes with the ability to add annotation events directly from a panel using the [built-in annotation query](#built-in-query) that exists on all dashboards. Annotations that you create this way are stored in Grafana. -To add annotations directly in the panel, the built-in query must be enabled. Learn more in [Built-in query](#built-in-query) +To add annotations directly in the panel: + +- The dashboard must already be saved. +- The built-in query must be enabled. Learn more in [Built-in query](#built-in-query). ### Add an annotation @@ -83,6 +86,10 @@ Alternatively, to add an annotation, press Ctrl/Cmd and click the panel, and the In the dashboard settings, under **Annotations**, you can add new queries to fetch annotations using any data source, including the built-in data annotation data source. Annotation queries return events that can be visualized as event markers in graphs across the dashboard. +Check out the video below for a quick tutorial. + +{{< youtube id="2istdJpPj2Y" >}} + ### Add new annotation queries To add a new annotation query to a dashboard, take the following steps: diff --git a/docs/sources/dashboards/build-dashboards/best-practices/index.md b/docs/sources/dashboards/build-dashboards/best-practices/index.md index d0beecb789258..b0677c24b132a 100644 --- a/docs/sources/dashboards/build-dashboards/best-practices/index.md +++ b/docs/sources/dashboards/build-dashboards/best-practices/index.md @@ -14,7 +14,7 @@ labels: - oss menuTitle: Best practices title: Grafana dashboard best practices -weight: 100 +weight: 800 --- # Grafana dashboard best practices diff --git a/docs/sources/dashboards/build-dashboards/create-dashboard/index.md b/docs/sources/dashboards/build-dashboards/create-dashboard/index.md index 8509fe8ff0362..03e89a27c447c 100644 --- a/docs/sources/dashboards/build-dashboards/create-dashboard/index.md +++ b/docs/sources/dashboards/build-dashboards/create-dashboard/index.md @@ -95,6 +95,20 @@ Dashboards and panels allow you to show your data in visual form. Each panel nee When you add additional panels to the dashboard, you're taken straight to the **Edit panel** view. +## Copy an existing dashboard + +To copy an existing dashboard, follow these steps: + +1. Click **Dashboards** in the primary menu. +1. Open the dashboard to be copied. +1. Click **Settings** (gear icon) in the top right of the dashboard. +1. Click **Save as** in the top-right corner of the dashboard. +1. (Optional) Specify the name, folder, description, and whether or not to copy the original dashboard tags for the copied dashboard. + + By default, the copied dashboard has the same name as the original dashboard with the word "Copy" appended and is located in the same folder. + +1. Click **Save**. + ## Configure repeating rows You can configure Grafana to dynamically add panels or rows to a dashboard based on the value of a variable. Variables dynamically change your queries across all rows in a dashboard. For more information about repeating panels, refer to [Configure repeating panels][]. diff --git a/docs/sources/dashboards/build-dashboards/import-dashboards/index.md b/docs/sources/dashboards/build-dashboards/import-dashboards/index.md new file mode 100644 index 0000000000000..4f4003ad70c0a --- /dev/null +++ b/docs/sources/dashboards/build-dashboards/import-dashboards/index.md @@ -0,0 +1,60 @@ +--- +aliases: + - ../../reference/export_import/ # /docs/grafana//reference/export_import/ + - ../export-import/ # /docs/grafana//dashboards/export-import/ +canonical: https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/import-dashboards/ +keywords: + - grafana + - dashboard + - import +labels: + products: + - cloud + - enterprise + - oss +menuTitle: Import dashboards +title: Import dashboards +description: Learn how to import dashboards and about Grafana's preconfigured dashboards +weight: 5 +--- + +# Import dashboards + +You can import preconfigured dashboards into your Grafana instance or Cloud stack using the UI or the [HTTP API][]. + +## Import a dashboard + +To import a dashboard, follow these steps: + +1. Click **Dashboards** in the primary menu. +1. Click **New** and select **Import** in the drop-down menu. +1. Perform one of the following steps: + + - Upload a dashboard JSON file. + - Paste a [Grafana.com dashboard](#discover-dashboards-on-grafanacom) URL or ID into the field provided. + - Paste dashboard JSON text directly into the text area. + +1. (Optional) Change the dashboard name, folder, or UID, and specify metric prefixes, if the dashboard uses any. +1. Select a data source, if required. +1. Click **Import**. +1. Save the dashboard. + +## Discover dashboards on grafana.com + +The [Dashboards page](https://grafana.com/grafana/dashboards/) on grafana.com provides you with dashboards for common server applications. Browse our library of official and community-built dashboards and import them to quickly get up and running. + +{{< figure src="/media/docs/grafana/dashboards/screenshot-gcom-dashboards.png" alt="Preconfigured dashboards on grafana.com">}} + +You can also add to this library by exporting one of your own dashboards. For more information, refer to [Share dashboards and panels][]. + +## More examples + +Your Grafana Cloud stack comes with several default dashboards in the **Grafana Cloud** folder in **Dashboards**. If you're running your own installation of Grafana, you can find more example dashboards in the `public/dashboards/` directory. + +{{% docs/reference %}} +[HTTP API]: "/docs/grafana/ -> /docs/grafana//developers/http_api" +[HTTP API]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/developer-resources/api-reference/http-api" + +[Share dashboards and panels]: "/docs/grafana/ -> /docs/grafana//dashboards/share-dashboards-panels" +[Share dashboards and panels]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/share-dashboards-panels" +{{% /docs/reference %}} diff --git a/docs/sources/dashboards/build-dashboards/manage-dashboard-links/index.md b/docs/sources/dashboards/build-dashboards/manage-dashboard-links/index.md index 52e4605bff931..ba83b0e073c31 100644 --- a/docs/sources/dashboards/build-dashboards/manage-dashboard-links/index.md +++ b/docs/sources/dashboards/build-dashboards/manage-dashboard-links/index.md @@ -94,7 +94,7 @@ Add a link to a URL at the top of your current dashboard. You can link to any av - `from` - Defines the lower limit of the time range, specified in ms epoch. - `to` - Defines the upper limit of the time range, specified in ms epoch. - `time` and `time.window` - Define a time range from `time-time.window/2` to `time+time.window/2`. Both params should be specified in ms. For example `?time=1500000000000&time.window=10000` will result in 10s time range from 1499999995000 to 1500000005000. - - **Variable values** – Select this option to include template variables currently used as query parameters in the link. When the user clicks the link, any matching templates in the linked dashboard are set to the values from the link. Here is the variable format: `https://${you-domain}/path/to/your/dashboard?var-${template-varable1}=value1&var-{template-variable2}=value2` **Example:** https://play.grafana.org/d/000000074/alerting?var-app=backend&var-server=backend_01&var-server=backend_03&var-interval=1h + - **Variable values** – Select this option to include template variables currently used as query parameters in the link. When the user clicks the link, any matching templates in the linked dashboard are set to the values from the link. Here is the variable format: `https://${you-domain}/path/to/your/dashboard?var-${template-variable1}=value1&var-{template-variable2}=value2` **Example:** https://play.grafana.org/d/000000074/alerting?var-app=backend&var-server=backend_01&var-server=backend_03&var-interval=1h - **Open in new tab** – Select this option if you want the dashboard link to open in a new tab or window. 1. Click **Add**. diff --git a/docs/sources/dashboards/build-dashboards/manage-library-panels/index.md b/docs/sources/dashboards/build-dashboards/manage-library-panels/index.md index 0e230570bed2c..e948a019c76fb 100644 --- a/docs/sources/dashboards/build-dashboards/manage-library-panels/index.md +++ b/docs/sources/dashboards/build-dashboards/manage-library-panels/index.md @@ -25,6 +25,10 @@ A library panel is a reusable panel that you can use in any dashboard. When you You can save a library panel in a folder alongside saved dashboards. +## Role-based access control + +You can control permissions for library panels using [role-based access control (RBAC)][rbac]. RBAC provides a standardized way of granting, changing, and revoking access when it comes to viewing and modifying Grafana resources, such as dashboards, reports, and administrative settings. + ## Create a library panel When you create a library panel, the panel on the source dashboard is converted to a library panel as well. You need to save the original dashboard once a panel is converted. @@ -91,3 +95,8 @@ Delete a library panel when you no longer need it. 1. Click **Dashboards** in the left-side menu. 1. Click **Library panels**. 1. Click the delete icon next to the library panel name. + +{{% docs/reference %}} +[rbac]: "/docs/grafana/ -> /docs/grafana//administration/roles-and-permissions/access-control" +[rbac]: "/docs/grafana-cloud/ -> /docs/grafana//administration/roles-and-permissions/access-control" +{{% /docs/reference %}} diff --git a/docs/sources/dashboards/build-dashboards/view-dashboard-json-model/index.md b/docs/sources/dashboards/build-dashboards/view-dashboard-json-model/index.md index 7572f895af31e..affd4f6d850ec 100644 --- a/docs/sources/dashboards/build-dashboards/view-dashboard-json-model/index.md +++ b/docs/sources/dashboards/build-dashboards/view-dashboard-json-model/index.md @@ -128,6 +128,19 @@ The grid has a negative gravity that moves panels up if there is empty space abo "enable": true, "notice": false, "now": true, + "hidden": false, + "nowDelay": "", + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ], "refresh_intervals": [ "5s", "10s", @@ -147,15 +160,18 @@ The grid has a negative gravity that moves panels up if there is empty space abo Usage of the fields is explained below: -| Name | Usage | -| --------------------- | -------------------------------------- | -| **collapse** | whether timepicker is collapsed or not | -| **enable** | whether timepicker is enabled or not | -| **notice** | | -| **now** | | -| **refresh_intervals** | | -| **status** | | -| **type** | | +| Name | Usage | +| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| **collapse** | whether timepicker is collapsed or not | +| **enable** | whether timepicker is enabled or not | +| **notice** | | +| **now** | | +| **hidden** | whether timepicker is hidden or not | +| **nowDelay** | override the now time by entering a time delay. Use this option to accommodate known delays in data aggregation to avoid null values. | +| **time_options** | options available in the time picker dropdown | +| **refresh_intervals** | interval options available in the refresh picker dropdown | +| **status** | | +| **type** | | ### templating diff --git a/docs/sources/dashboards/create-reports/index.md b/docs/sources/dashboards/create-reports/index.md index 73e8aad43de98..aebdae63d01dc 100644 --- a/docs/sources/dashboards/create-reports/index.md +++ b/docs/sources/dashboards/create-reports/index.md @@ -107,17 +107,21 @@ You can include dynamic dashboards with panels or rows, set to repeat by a varia By default, reports use the saved time range of the dashboard. You can change the time range of the report by: -- Saving a modified time range to the dashboard. +- Saving a modified time range to the dashboard. Changing the dashboard time range without saving it doesn't change the time zone of the report. - Setting a time range via the **Time range** field in the report form. If specified, the custom time range overrides the time range from the report's dashboard. -The page header of the report displays the time range for the dashboard's data queries. Dashboards set to use the browser's time zone use the time zone on the Grafana server. +The page header of the report displays the time range for the dashboard's data queries. + +#### Report time zones + +Reports use the time zone of the dashboard from which they’re generated. You can control the time zone for your reports by setting the dashboard to a specific time zone. Note that this affects the display of the dashboard for all users. + +If a dashboard has the **Browser Time** setting, the reports generated from that dashboard use the time zone of the Grafana server. As a result, this time zone might not match the time zone of users creating or receiving the report. If the time zone is set differently between your Grafana server and its remote image renderer, then the time ranges in the report might be different between the page header and the time axes in the panels. To avoid this, set the time zone to UTC for dashboards when using a remote renderer. Each dashboard's time zone setting is visible in the [time range controls][]. ### Layout and orientation -> We're actively developing new report layout options. [Contact us](https://grafana.com/contact?about=grafana-enterprise&topic=design-process&value=reporting) to get involved in the design process. - | Layout | Orientation | Support | Description | Preview | | ------ | ----------- | ------- | --------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Simple | Portrait | v6.4+ | Generates an A4 page in portrait mode with three panels per page. | {{< figure src="/static/img/docs/enterprise/reports_portrait_preview.png" max-width="500px" max-height="500px" class="docs-image--no-shadow" alt="Simple layout in portrait" >}} | @@ -137,6 +141,19 @@ When the CSV file is generated, it is temporarily written to the `csv` folder in A background job runs every 10 minutes and removes temporary CSV files. You can configure how long a CSV file should be stored before being removed by configuring the [temp-data-lifetime][] setting. This setting also affects how long a renderer PNG file should be stored. +### Table data in PDF + +{{% admonition type="note" %}} +Available in public preview (`pdfTables` feature toggle) in [Grafana Enterprise][] v10.3+ with the [Grafana image renderer plugin](/grafana/plugins/grafana-image-renderer) v3.0+, and [Grafana Cloud](/docs/grafana-cloud/). +{{% /admonition %}} + +When there's more data in your table visualizations than can be shown in the dashboard PDF, you can select one of these two options to access all table visualization data as PDF in your reports: + +- **Include table data as PDF appendix** - Adds an appendix to the main dashboard PDF. +- **Attach a separate PDF of table data** - Generates a separate PDF file. + +This feature relies on the same plugin that supports the [image rendering][] features. + ### Scheduling > **Note:** Available in [Grafana Enterprise][] version 8.0 and later, and [Grafana Cloud](/docs/grafana-cloud/). @@ -193,7 +210,7 @@ You can generate and save PDF files of any dashboard. > **Note:** Available in [Grafana Enterprise][] version 6.7 and later, and [Grafana Cloud](/docs/grafana-cloud/). -1. In the dashboard that you want to export as PDF, click the **Share dashboard** icon. +1. In the dashboard that you want to export as PDF, click the **Share** button. 1. On the PDF tab, select a layout option for the exported dashboard: **Portrait** or **Landscape**. 1. Click **Save as PDF** to render the dashboard as a PDF file. @@ -267,8 +284,8 @@ filters = report:debug ``` {{% docs/reference %}} -[time range controls]: "/docs/grafana/ -> /docs/grafana//dashboards/manage-dashboards" -[time range controls]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/manage-dashboards" +[time range controls]: "/docs/grafana/ -> /docs/grafana//dashboards/use-dashboards#set-dashboard-time-range" +[time range controls]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/use-dashboards#set-dashboard-time-range" [image rendering]: "/docs/grafana/ -> /docs/grafana//setup-grafana/image-rendering" [image rendering]: "/docs/grafana-cloud/ -> /docs/grafana//setup-grafana/image-rendering" @@ -289,10 +306,10 @@ filters = report:debug [SMTP]: "/docs/grafana-cloud/ -> /docs/grafana//setup-grafana/configure-grafana#smtp" [Repeat panels or rows]: "/docs/grafana/ -> /docs/grafana//panels-visualizations/configure-panel-options#configure-repeating-rows-or-panels" -[Repeat panels or rows]: "/docs/grafana-cloud/ -> /docs/grafana//panels-visualizations/configure-panel-options#configure-repeating-rows-or-panels" +[Repeat panels or rows]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/panels-visualizations/configure-panel-options#configure-repeating-rows-or-panels" [Templates and variables]: "/docs/grafana/ -> /docs/grafana//dashboards/variables" -[Templates and variables]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/variables" +[Templates and variables]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/variables" [temp-data-lifetime]: "/docs/grafana/ -> /docs/grafana//setup-grafana/configure-grafana#temp-data-lifetime" [temp-data-lifetime]: "/docs/grafana-cloud/ -> /docs/grafana//setup-grafana/configure-grafana#temp-data-lifetime" diff --git a/docs/sources/dashboards/manage-dashboards/index.md b/docs/sources/dashboards/manage-dashboards/index.md index 2d764588284fa..40929b1640887 100644 --- a/docs/sources/dashboards/manage-dashboards/index.md +++ b/docs/sources/dashboards/manage-dashboards/index.md @@ -3,23 +3,15 @@ aliases: - ../features/dashboard/dashboards/ - ../panels/working-with-panels/organize-dashboard/ - ../reference/dashboard_folders/ - - ../reference/export_import/ - - ../reference/timerange/ - - ../troubleshooting/troubleshoot-dashboards/ - dashboard-folders/ - dashboard-manage/ - - export-import/ +canonical: https://grafana.com/docs/grafana/latest/dashboards/manage-dashboards/ keywords: - grafana - dashboard - dashboard folders - folder - folders - - import - - export - - troubleshoot - - time range - - scripting labels: products: - cloud @@ -27,34 +19,37 @@ labels: - oss menuTitle: Manage dashboards title: Manage dashboards -description: Learn about dashboard folders, generative AI features for dashboards, and troubleshooting +description: Learn about dashboard management and generative AI features for dashboards weight: 8 --- # Manage dashboards -This topic includes techniques you can use to manage your Grafana dashboards, including: +On the **Dashboards** page, you can perform dashboard management tasks such as: -- [Creating and managing dashboard folders](#create-and-manage-dashboard-folders) -- [Exporting and importing dashboards](#export-and-import-dashboards) -- [Organizing dashboards](#organize-a-dashboard) -- [Troubleshooting dashboards](#troubleshoot-dashboards) +- [Browsing](#browse-dashboards) and [creating](#create-a-dashboard-folder) dashboard folders +- [Managing folder permissions](#folder-permissions) +- [Adding generative AI features to dashboards](#set-up-generative-ai-features-for-dashboards) -For more information about creating dashboards, refer to [Add and organize panels](../add-organize-panels). +For more information about creating dashboards, refer to [Build dashboards][]. ## Browse dashboards On the **Dashboards** page, you can browse and manage folders and dashboards. This includes the options to: -- Create folders and dashboards +- Create folders and dashboards. - Move dashboards between folders. - Delete multiple dashboards and folders. - Navigate to a folder. - Manage folder permissions. For more information, refer to [Dashboard permissions][]. -{{% admonition type="note" %}} -As of Grafana 10.2, there is no longer a special **General** folder. Dashboards without a folder are now shown at the top level alongside folders. -{{% /admonition %}} +The page lists all the dashboards to which you have access, grouped into folders. Dashboards without a folder are displayed at the top level alongside folders. + +### Shared with me + +The **Shared with me** section displays folders and dashboards that are directly shared with you. These folders and dashboards aren't shown in the main list because you don't have access to one or more of their parent folders. + +If you have permission to view all folders, you won't see a **Shared with me**. ## Create a dashboard folder @@ -64,11 +59,17 @@ Folders help you organize and group dashboards, which is useful when you have ma **To create a dashboard folder:** -1. Click **Dashboards** in the main menu. -1. On the **Dashboards** page, click **New** and select **New folder** in the drop-down. +1. Click **Dashboards** in the primary menu. +1. Do one of the following: + + - On the **Dashboards** page, click **New** and select **New folder** in the drop-down. + - Click an existing folder and on the folder’s page, click **New** and select **New folder** in the drop-down. + 1. Enter a unique name and click **Create**. -When you save a dashboard, you can either select a folder for the dashboard to be saved in or create a new folder. +When you nest folders, you can do so up to four levels deep. + +When you save a dashboard, you can optionally select a folder to save the dashboard in. {{% admonition type="note" %}} Alerts can't be placed in folders with slashes (\ /) in the name. If you wish to place alerts in the folder, don't use slashes in the folder name. @@ -76,9 +77,9 @@ Alerts can't be placed in folders with slashes (\ /) in the name. If you wish to **To edit the name of a folder:** -1. Click **Dashboards** in the main menu. +1. Click **Dashboards** in the primary menu. 1. Navigate to the folder by selecting it in the list, or searching for it. -1. Click the pencil icon labelled **Edit title** in the header and update the name of the folder. +1. Click the **Edit title** icon (pencil) in the header and update the name of the folder. The new folder name is automatically saved. @@ -88,7 +89,7 @@ You can assign permissions to a folder. Dashboards in the folder inherit any per **To modify permissions for a folder:** -1. Click **Dashboards** in the main menu. +1. Click **Dashboards** in the primary menu. 1. Navigate to the folder by selecting it in the list, or searching for it. 1. On the folder's page, click **Folder actions** and select **Manage permissions** in the drop-down. 1. Update the permissions as desired. @@ -97,49 +98,6 @@ Changes are saved automatically. For more information about dashboard permissions, refer to [Dashboard permissions][]. -## Export and import dashboards - -You can use the Grafana UI or the [HTTP API][] to export and import dashboards. - -### Export a dashboard - -The dashboard export action creates a Grafana JSON file that contains everything you need, including layout, variables, styles, data sources, queries, and so on, so that you can later import the dashboard. - -1. Click **Dashboards** in the main menu. -1. Open the dashboard you want to export. -1. Click the **Share** icon in the top navigation bar. -1. Click **Export**. - - If you're exporting the dashboard to use in another instance, with different data source UIDs, enable the **Export for sharing externally** switch. - -1. Click **Save to file**. - -Grafana downloads a JSON file to your local machine. - -#### Make a dashboard portable - -If you want to export a dashboard for others to use, you can add template variables for things like a metric prefix (use a constant variable) and server name. - -A template variable of the type `Constant` is automatically hidden in the dashboard, and is also added as a required input when the dashboard is imported. - -### Import a dashboard - -1. Click **Dashboards** in the left-side menu. -1. Click **New** and select **Import** in the dropdown menu. -1. Perform one of the following steps: - - - Upload a dashboard JSON file - - Paste a [Grafana.com](https://grafana.com) dashboard URL - - Paste dashboard JSON text directly into the text area - -The import process enables you to change the name of the dashboard, pick the data source you want the dashboard to use, and specify any metric prefixes (if the dashboard uses any). - -### Discover dashboards on grafana.com - -Find dashboards for common server applications at [Grafana.com/dashboards](https://grafana.com/dashboards). - -{{< figure src="/media/docs/grafana/dashboards/screenshot-gcom-dashboards.png" alt="Preconfigured dashboards on grafana.com">}} - ## Set up generative AI features for dashboards {{< docs/public-preview product="Generative AI in dashboards" featureFlag="`dashgpt`" >}} @@ -153,56 +111,13 @@ To access these features, enable the `dashgpt` feature toggle. Then install and When enabled, the **✨ Auto generate** option displays next to the **Title** and **Description** fields in your panels and dashboards, or when you press the **Save** button. -## Troubleshoot dashboards - -This section provides information to help you solve common dashboard problems. - -### Dashboard is slow - -- Are you trying to render dozens (or hundreds or thousands) of time-series on a graph? This can cause the browser to lag. Try using functions like `highestMax` (in Graphite) to reduce the returned series. -- Sometimes the series names can be very large. This causes larger response sizes. Try using `alias` to reduce the size of the returned series names. -- Are you querying many time-series or for a long range of time? Both of these conditions can cause Grafana or your data source to pull in a lot of data, which may slow it down. -- It could be high load on your network infrastructure. If the slowness isn't consistent, this may be the problem. - -### Dashboard refresh rate issues - -By default, Grafana queries your data source every 30 seconds. Setting a low refresh rate on your dashboards puts unnecessary stress on the backend. In many cases, querying this frequently isn't necessary because the data isn't being sent to the system such that changes would be seen. - -We recommend the following: - -- Only enable auto-refreshing on dashboards, panels, or variables unless if necessary. Users can refresh their browser manually, or you can set the refresh rate for a time period that makes sense (every ten minutes, every hour, and so on). -- If it's required, then set the refresh rate to once a minute. Users can always refresh the dashboard manually. -- If your dashboard has a longer time period (such as a week), then you really don't need automated refreshing. - -#### Handling or rendering null data is wrong or confusing - -Some applications publish data intermittently; for example, they only post a metric when an event occurs. By default, Grafana graphs connect lines between the data points. This can be very deceiving. - -In the picture below we've enabled: - -- Points and 3-point radius to highlight where data points are actually present. -- **Connect null values\* is set to **Always\*\*. - -{{< figure src="/static/img/docs/troubleshooting/grafana_null_connected.png" max-width="1200px" alt="Graph with null values connected" >}} - -In this graph, we set graph to show bars instead of lines and set the **No value** under **Standard options** to **0**. There is a very big difference in the visuals. - -{{< figure src="/static/img/docs/troubleshooting/grafana_null_zero.png" max-width="1200px" alt="Graph with null values not connected" >}} - -### More examples - -You can find more examples in `public/dashboards/` directory of your Grafana installation. - {{% docs/reference %}} [Dashboard permissions]: "/docs/grafana/ -> /docs/grafana//administration/roles-and-permissions#dashboard-permissions" [Dashboard permissions]: "/docs/grafana-cloud/ -> /docs/grafana//administration/roles-and-permissions#dashboard-permissions" -[panels]: "/docs/grafana/ -> /docs/grafana//panels-visualizations" -[panels]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/panels-visualizations" - -[HTTP API]: "/docs/grafana/ -> /docs/grafana//developers/http_api" -[HTTP API]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/developer-resources/api-reference/http-api" +[Grafana LLM plugin documentation]: "/docs/grafana/ -> /docs/grafana-cloud/alerting-and-irm/machine-learning/configure/llm-plugin" +[Grafana LLM plugin documentation]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/machine-learning/configure/llm-plugin" -[Grafana LLM plugin documentation]: "/docs/grafana/ -> /docs/grafana-cloud/alerting-and-irm/machine-learning/llm-plugin" -[Grafana LLM plugin documentation]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/alerting-and-irm/machine-learning/llm-plugin" +[Build dashboards]: "/docs/grafana/ -> /docs/grafana//dashboards/build-dashboards" +[Build dashboards]: "/docs/grafana-cloud/ -> /docs/grafana-cloud/visualizations/dashboards/build-dashboards" {{% /docs/reference %}} diff --git a/docs/sources/dashboards/share-dashboards-panels/index.md b/docs/sources/dashboards/share-dashboards-panels/index.md index aca0c34b03cf5..b5a90ba97f50c 100644 --- a/docs/sources/dashboards/share-dashboards-panels/index.md +++ b/docs/sources/dashboards/share-dashboards-panels/index.md @@ -64,7 +64,7 @@ If you change a dashboard, ensure that you save the changes before sharing. 1. Click **Dashboards** in the left-side menu. 1. Click the dashboard you want to share. -1. Click the share icon at the top of the screen. +1. Click the **Share** button at the top right of the screen. The share dialog opens and shows the Link tab. @@ -85,7 +85,7 @@ A dashboard snapshot shares an interactive dashboard publicly. Grafana strips se You can publish snapshots to your local instance or to [snapshots.raintank.io](http://snapshots.raintank.io). The latter is a free service provided by Grafana Labs that enables you to publish dashboard snapshots to an external Grafana instance. Anyone with the link can view it. You can set an expiration time if you want the snapshot removed after a certain time period. 1. Click the **Snapshot** tab. -1. Click **Publish to snapshots.raintank.io** or **Local Snapshot**. +1. Click **Publish to snapshots.raintank.io** or **Publish Snapshot**. Grafana generates a link of the snapshot. @@ -93,9 +93,26 @@ You can publish snapshots to your local instance or to [snapshots.raintank.io](h If you created a snapshot by mistake, click **Delete snapshot** to remove the snapshot from your Grafana instance. -### Dashboard export +### Export a dashboard as JSON -Grafana dashboards can easily be exported and imported. For more information, refer to [Export and import dashboards][]. +The dashboard export action creates a Grafana JSON file that contains everything you need, including layout, variables, styles, data sources, queries, and so on, so that you can later import the dashboard. + +1. Click **Dashboards** in the main menu. +1. Open the dashboard you want to export. +1. Click the **Share** icon in the top navigation bar. +1. Click **Export**. + + If you're exporting the dashboard to use in another instance, with different data source UIDs, enable the **Export for sharing externally** switch. + +1. Click **Save to file**. + +Grafana downloads a JSON file to your local machine. + +#### Make a dashboard portable + +If you want to export a dashboard for others to use, you can add template variables for things like a metric prefix (use a constant variable) and server name. + +A template variable of the type `Constant` is automatically hidden in the dashboard, and is also added as a required input when the dashboard is imported. ## Export dashboard as PDF @@ -105,7 +122,7 @@ You can generate and save PDF files of any dashboard. 1. Click **Dashboards** in the left-side menu. 1. Click the dashboard you want to share. -1. Click the share icon at the top of the screen. +1. Click the **Share** button at the top right of the screen. 1. On the PDF tab, select a layout option for the exported dashboard: **Portrait** or **Landscape**. 1. Click **Save as PDF** to render the dashboard as a PDF file. @@ -151,10 +168,16 @@ https://play.grafana.org/d/000000012/grafana-play-home?orgId=1&from=156871968017 A panel snapshot shares an interactive panel publicly. Grafana strips sensitive data leaving only the visible metric data and series names embedded in the dashboard. Panel snapshots can be accessed by anyone with the link. -You can publish snapshots to your local instance or to [snapshots.raintank.io](http://snapshots.raintank.io). The latter is a free service provided by [Grafana Labs](https://grafana.com), that enables you to publish dashboard snapshots to an external Grafana instance. You can optionally set an expiration time if you want the snapshot to be removed after a certain time period. +You can publish snapshots to your local instance or to [snapshots.raintank.io](http://snapshots.raintank.io). The latter is a free service provided by [Grafana Labs](https://grafana.com), that enables you to publish dashboard snapshots to an external Grafana instance. + +{{< admonition type="note" >}} +As of Grafana 11, the option to publish to [snapshots.raintank.io](http://snapshots.raintank.io) is no longer available for Grafana Cloud. +{{< /admonition >}} + +You can optionally set an expiration time if you want the snapshot to be removed after a certain time period. 1. In the **Share Panel** dialog, click **Snapshot** to go to the tab. -1. Click **Publish to snapshots.raintank.io** or **Local Snapshot**. +1. Click **Publish to snapshots.raintank.io** or **Publish Snapshot**. Grafana generates the link of the snapshot. @@ -192,9 +215,6 @@ To create a library panel from the **Share Panel** dialog: 1. Save the dashboard. {{% docs/reference %}} -[Export and import dashboards]: "/docs/grafana/ -> /docs/grafana//dashboards/manage-dashboards#export-and-import-dashboards" -[Export and import dashboards]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/manage-dashboards#export-and-import-dashboards" - [Grafana Enterprise]: "/docs/grafana/ -> /docs/grafana//introduction/grafana-enterprise" [Grafana Enterprise]: "/docs/grafana-cloud/ -> /docs/grafana//introduction/grafana-enterprise" diff --git a/docs/sources/dashboards/troubleshoot-dashboards/index.md b/docs/sources/dashboards/troubleshoot-dashboards/index.md new file mode 100644 index 0000000000000..817f035fb2d7d --- /dev/null +++ b/docs/sources/dashboards/troubleshoot-dashboards/index.md @@ -0,0 +1,58 @@ +--- +aliases: + - ../troubleshooting/troubleshoot-dashboards/ + - ../reference/timerange/ +canonical: https://grafana.com/docs/grafana/latest/dashboards/troubleshoot-dashboards/ +keywords: + - grafana + - dashboard + - troubleshoot + - time range +labels: + products: + - cloud + - enterprise + - oss +menuTitle: Troubleshoot dashboards +title: Troubleshoot dashboards +description: Learn how to troubleshoot common dashboard issues +weight: 300 +--- + +# Troubleshoot dashboards + +Use the following strategies to help you troubleshoot common dashboard problems. + +## Dashboard is slow + +- Are you trying to render dozens (or hundreds or thousands) of time series on a graph? This can cause the browser to lag. Try using functions like `highestMax` (in Graphite) to reduce the number of returned series. +- Sometimes series names can be very large. This causes larger response sizes. Try using `alias` to reduce the size of the returned series names. +- Are you querying many time series or a long time range? Both of these conditions can cause Grafana or your data source to pull in a lot of data, which may slow the dashboard down. Try reducing one or both of these. +- There could be high load on your network infrastructure. If the slowness isn't consistent, this may be the problem. + +## Dashboard refresh rate issues + +By default, Grafana queries your data source every 30 seconds. However, setting a low refresh rate on your dashboards puts unnecessary stress on the backend. In many cases, querying this frequently isn't necessary because the data source isn't sending data often enough for there to be changes every 30 seconds. + +We recommend the following: + +- Only enable auto-refreshing on dashboards, panels, or variables if necessary. Users can refresh their browser manually. +- If you require auto-refreshing, then set the refresh rate to a longer time period that makes sense, such as once a minute, every 10 minutes, or every hour. +- Check the time range of your dashboard. If your dashboard has a longer time range, such as a week, then you really don't need automated refreshing and you should disable it. + +## Handling or rendering null data is wrong or confusing + +Some applications publish data intermittently; for example, they only post a metric when an event occurs. By default, Grafana graphs connect lines between the data points, but this can be deceptive. + +The graph in the following image has: + +- Points and 3-point radius enabled to highlight where data points are actually present. +- **Connect null values** set to **Always**. + +{{< figure src="/static/img/docs/troubleshooting/grafana_null_connected.png" max-width="1200px" alt="Graph with null values connected" >}} + +The graph in this next image shows bars instead of lines and has the **No value** option under **Standard options** set to **0**. + +{{< figure src="/static/img/docs/troubleshooting/grafana_null_zero.png" max-width="1200px" alt="Graph with null values not connected" >}} + +As you can see, there's a significant difference in the visualizations. diff --git a/docs/sources/dashboards/use-dashboards/index.md b/docs/sources/dashboards/use-dashboards/index.md index 0d47cce7a5e1b..4f1339db9365e 100644 --- a/docs/sources/dashboards/use-dashboards/index.md +++ b/docs/sources/dashboards/use-dashboards/index.md @@ -61,7 +61,7 @@ The following image and descriptions highlight all dashboard features. ## Keyboard shortcuts -Grafana has a number of keyboard shortcuts available. Press `?` or `h` on your keyboard to display all keyboard shortcuts available in your version of Grafana. +Grafana has a number of keyboard shortcuts available. Press `?` or `Ctrl+h` on your keyboard to display all keyboard shortcuts available in your version of Grafana. - `Ctrl+S`: Saves the current dashboard. - `f`: Opens the dashboard finder / search. @@ -138,7 +138,7 @@ Hover your cursor over the field to see the exact time stamps in the range and t Click the current time range to change it. You can change the current time using a _relative time range_, such as the last 15 minutes, or an _absolute time range_, such as `2020-05-14 00:00:00 to 2020-05-15 23:59:59`. - + #### Relative time range @@ -190,6 +190,15 @@ This is equivalent to the **Today so far** time range preset, but it starts at 8 Using a semi-relative time range, as time progresses, your dashboard will automatically and progressively zoom out to show more history and fewer details. At the same rate, as high data resolution decreases, historical trends over the entire time period will become more clear. +#### Copy and paste time range + +You can copy and paste the time range from a dashboard to **Explore** and vice versa, or from one dashboard to another. +Click the **Copy time range to clipboard** icon to copy the current time range to the clipboard. Then paste the time range into **Explore** or another dashboard. + + + +You can also copy and paste a time range using the keyboard shortcuts `t+c` and `t+v` respectively. + #### Zoom out (Cmd+Z or Ctrl+Z) Click the **Zoom out** icon to view a larger time range in the dashboard or panel visualization. diff --git a/docs/sources/dashboards/variables/_index.md b/docs/sources/dashboards/variables/_index.md index f6390264d5eca..8b6c4a397f639 100644 --- a/docs/sources/dashboards/variables/_index.md +++ b/docs/sources/dashboards/variables/_index.md @@ -15,6 +15,8 @@ weight: 130 # Variables +{{< youtube id="mMUJ3iwIYwc" >}} + The following topics describe how to add and manage variables in your dashboards: {{< section >}} diff --git a/docs/sources/datasources/_index.md b/docs/sources/datasources/_index.md index d5332117bea69..b738aa80a0c09 100644 --- a/docs/sources/datasources/_index.md +++ b/docs/sources/datasources/_index.md @@ -18,6 +18,8 @@ Grafana comes with built-in support for many _data sources_. If you need other data sources, you can also install one of the many data source plugins. If the plugin you need doesn't exist, you can develop a custom plugin. +{{< youtube id="cqHO0oYW6Ic" >}} + Each data source comes with a _query editor_, which formulates custom queries according to the source's structure. After you add and configure a data source, you can use it as an input for many operations, including: @@ -30,14 +32,29 @@ This documentation describes how to manage data sources in general, and how to configure or query the built-in data sources. For other data sources, refer to the list of [datasource plugins](/grafana/plugins/). -To develop a custom plugin, refer to [Build a plugin](/developers/plugin-tools). +To develop a custom plugin, refer to [Create a data source plugin](#create-a-data-source-plugin). ## Manage data sources Only users with the [organization administrator role][organization-roles] can add or remove data sources. To access data source management tools in Grafana as an administrator, navigate to **Configuration > Data Sources** in the Grafana sidebar. -For details on data source management, including instructions on how to add data sources and configure user permissions for queries, refer to the [administration documentation][data-source-management]. +For details on data source management, including instructions on how configure user permissions for queries, refer to the [administration documentation][data-source-management]. + +## Add a data source + +Before you can create your first dashboard, you need to add your data source. + +{{% admonition type="note" %}} +Only users with the organization admin role can add data sources. +{{% /admonition %}} + +**To add a data source:** + +1. Click **Connections** in the left-side menu. +1. Enter the name of a specific data source in the search dialog. You can filter by **Data source** to only see data sources. +1. Click the data source you want to add. +1. Configure the data source following instructions specific to that data source. ## Use query editors @@ -53,7 +70,7 @@ For example, this video demonstrates the visual Prometheus query builder: {{< vimeo 720004179 >}} -For general information about querying in Grafana, and common options and user interface elements across all query editors, refer to [Query and transform data][query-transform-data] . +For general information about querying in Grafana, and common options and user interface elements across all query editors, refer to [Query and transform data][query-transform-data]. ## Special data sources @@ -66,6 +83,7 @@ Grafana includes three special data sources: - You can't change an existing query to use the **Mixed** data source. - Grafana Play example: [Mixed data sources](https://play.grafana.org/d/000000100/mixed-datasources?orgId=1) - **Dashboard:** A data source that uses the result set from another panel in the same dashboard. The dashboard data source can use data either directly from the selected panel or from annotations attached to the selected panel. + - Grafana Play example: [Panel as Data source](https://play.grafana.org/d/ede8zps8ndb0gc/panel-as-data-source?orgId=1) ## Built-in core data sources @@ -89,6 +107,24 @@ These built-in core data sources are also included in the Grafana documentation: - [Testdata]({{< relref "./testdata" >}}) - [Zipkin]({{< relref "./zipkin" >}}) +## Add additional data source plugins + +You can add additional data sources as plugins (that are not available in core Grafana), which you can install or create yourself. + +### Find data source plugins in the plugin catalog + +To view available data source plugins, go to the [plugin catalog](/grafana/plugins/?type=datasource) and select the "Data sources" filter. +For details about the plugin catalog, refer to [Plugin management][Plugin-management]. + +You can further filter the plugin catalog's results for data sources provided by the Grafana community, Grafana Labs, and partners. +If you use [Grafana Enterprise][Grafana-Enterprise], you can also filter by Enterprise-supported plugins. + +For more documentation on a specific data source plugin's features, including its query language and editor, refer to its plugin catalog page. + +### Create a data source plugin + +To build your own data source plugin, refer to the [Build a data source plugin](/developers/plugin-tools/tutorials/build-a-data-source-plugin) tutorial and [Plugin tools](/developers/plugin-tools). + {{% docs/reference %}} [alerts]: "/docs/grafana/ -> /docs/grafana//alerting" [alerts]: "/docs/grafana-cloud/ -> /docs/grafana//alerting" @@ -107,4 +143,10 @@ These built-in core data sources are also included in the Grafana documentation: [query-transform-data]: "/docs/grafana/ -> /docs/grafana//panels-visualizations/query-transform-data" [query-transform-data]: "/docs/grafana-cloud/ -> /docs/grafana//panels-visualizations/query-transform-data" + +[Plugin-management]: "/docs/grafana/ -> /docs/grafana//administration/plugin-management" +[Plugin-management]: "/docs/grafana-cloud -> /docs/grafana//administration/plugin-management" + +[Grafana-Enterprise]: "/docs/grafana/ -> /docs/grafana//introduction/grafana-enterprise" + {{% /docs/reference %}} diff --git a/docs/sources/datasources/aws-cloudwatch/aws-authentication/index.md b/docs/sources/datasources/aws-cloudwatch/aws-authentication/index.md index a347e92240e86..78d0021b2c67c 100644 --- a/docs/sources/datasources/aws-cloudwatch/aws-authentication/index.md +++ b/docs/sources/datasources/aws-cloudwatch/aws-authentication/index.md @@ -47,8 +47,8 @@ Open source Grafana enables the `AWS SDK Default`, `Credentials file`, and `Acce While `AWS SDK Default` will also find the shared credentials file, this option allows you to specify which profile to use without using environment variables. This option doesn't have any implicit fallbacks to other credential providers, and it fails if the credentials provided from the file aren't correct. - `Access and secret key` corresponds to the [StaticProvider](https://docs.aws.amazon.com/sdk-for-go/api/aws/credentials/#StaticProvider) and uses the given access key ID and secret key to authenticate. - This method doesn't have any fallbacks, and will fail if the provided key pair doesn't work. -- `Grafana Assume Role` - With this auth provider option, Grafana Cloud users create an AWS IAM role that has a trust relationship with Grafana's AWS account. Grafana then uses [STS](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) to generate temporary credentials on its behalf. Users with this option enabled no longer need to generate secret and access keys for users. + This method doesn't have any fallbacks, and will fail if the provided key pair doesn't work. This is the primary authentication method for Grafana Cloud. +- `Grafana Assume Role` - With this auth provider option, Grafana Cloud users create an AWS IAM role that has a trust relationship with Grafana's AWS account. Grafana then uses [STS](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) to generate temporary credentials on its behalf. Users with this option enabled no longer need to generate secret and access keys for users. Refer to [Use Grafana Assume Role](/docs/grafana/latest/datasources/aws-cloudwatch/aws-authentication/#use-grafana-assume-role) for further detail. - `Workspace IAM role` corresponds to the [EC2RoleProvider](https://docs.aws.amazon.com/sdk-for-go/api/aws/credentials/ec2rolecreds/#EC2RoleProvider). The EC2RoleProvider pulls credentials for a role attached to the EC2 instance that Grafana runs on. You can also achieve this by using the authentication method AWS SDK Default, but this option is different as it doesn't have any fallbacks. @@ -159,7 +159,7 @@ To use the Grafana Assume Role: 1. Put in a request to Customer Support to enable`awsDatasourcesTempCredentials`. 2. Once the feature is enabled, create a new CloudWatch data source (or update an existing one) and select **Grafana Assume Role** as an authentication provider. 3. In the AWS Console, create a new IAM role, and under **Trusted entity type**, select **Another AWS account** as the trusted Entity. -4. Enter Grafana's account id (displayed in the instructions box on the the **Settings** tab of the CloudWatch data source configuration) and check the **Require external ID** box. +4. Enter Grafana's account id (displayed in the instructions box on the **Settings** tab of the CloudWatch data source configuration) and check the **Require external ID** box. 5. Enter the external ID specified in the instructions box on the **Settings** tab of the CloudWatch data source configuration in Grafana. This external ID will be unique to your Grafana instance. 6. Attach any required permissions you would like Grafana to be able to access on your behalf (for example, CloudWatch Logs and CloudWatch Metrics policies). 7. Give the role a name and description, and click **Create role**. diff --git a/docs/sources/datasources/azure-monitor/_index.md b/docs/sources/datasources/azure-monitor/_index.md index 18e9c6d91cb3e..4579af5e1da3f 100644 --- a/docs/sources/datasources/azure-monitor/_index.md +++ b/docs/sources/datasources/azure-monitor/_index.md @@ -35,7 +35,7 @@ Only users with the organization administrator role can add data sources. Once you've added the Azure Monitor data source, you can [configure it](#configure-the-data-source) so that your Grafana instance's users can create queries in its [query editor]({{< relref "./query-editor" >}}) when they [build dashboards][build-dashboards] and use [Explore][explore]. -The Azure Monitor data source supports visualizing data from three Azure services: +The Azure Monitor data source supports visualizing data from four Azure services: - **Azure Monitor Metrics:** Collect numeric data from resources in your Azure account. - **Azure Monitor Logs:** Collect log and performance data from your Azure account, and query using the Kusto Query Language (KQL). @@ -215,7 +215,7 @@ Grafana refers to such variables as template variables. For details, see the [template variables documentation]({{< relref "./template-variables" >}}). -## Application Insights and Insights Analytics (removed)) +## Application Insights and Insights Analytics (removed) Until Grafana v8.0, you could query the same Azure Application Insights data using Application Insights and Insights Analytics. diff --git a/docs/sources/datasources/azure-monitor/query-editor/index.md b/docs/sources/datasources/azure-monitor/query-editor/index.md index b7be89e709c5e..7a27d2a2c6f12 100644 --- a/docs/sources/datasources/azure-monitor/query-editor/index.md +++ b/docs/sources/datasources/azure-monitor/query-editor/index.md @@ -86,17 +86,17 @@ For example: - `Blob Type: {{ blobtype }}` becomes `Blob Type: PageBlob`, `Blob Type: BlockBlob` - `{{ resourcegroup }} - {{ resourcename }}` becomes `production - web_server` -| Alias pattern | Description | -| ----------------------------- | ------------------------------------------------------------------------------------------------------ | -| `{{ subscriptionid }}` | Replaced with the subscription ID. | -| `{{ subscription }}` | Replaced with the subscription name. | -| `{{ resourcegroup }}` | Replaced with the the resource group. | -| `{{ namespace }}` | Replaced with the resource type or namespace, such as `Microsoft.Compute/virtualMachines`. | -| `{{ resourcename }}` | Replaced with the resource name. | -| `{{ metric }}` | Replaced with the metric name, such as "Percentage CPU". | -| _`{{ arbitaryDimensionID }}`_ | Replaced with the value of the specified dimension. For example, `{{ blobtype }}` becomes `BlockBlob`. | -| `{{ dimensionname }}` | _(Legacy for backward compatibility)_ Replaced with the name of the first dimension. | -| `{{ dimensionvalue }}` | _(Legacy for backward compatibility)_ Replaced with the value of the first dimension. | +| Alias pattern | Description | +| ------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `{{ subscriptionid }}` | Replaced with the subscription ID. | +| `{{ subscription }}` | Replaced with the subscription name. | +| `{{ resourcegroup }}` | Replaced with the resource group. | +| `{{ namespace }}` | Replaced with the resource type or namespace, such as `Microsoft.Compute/virtualMachines`. | +| `{{ resourcename }}` | Replaced with the resource name. | +| `{{ metric }}` | Replaced with the metric name, such as "Percentage CPU". | +| _`{{ arbitraryDimensionID }}`_ | Replaced with the value of the specified dimension. For example, `{{ blobtype }}` becomes `BlockBlob`. | +| `{{ dimensionname }}` | _(Legacy for backward compatibility)_ Replaced with the name of the first dimension. | +| `{{ dimensionvalue }}` | _(Legacy for backward compatibility)_ Replaced with the value of the first dimension. | ### Filter using dimensions @@ -106,7 +106,7 @@ Grafana can display and filter metrics based on dimension values. The data source supports the `equals`, `not equals`, and `starts with` operators as detailed in the [Monitor Metrics API documentation](https://docs.microsoft.com/en-us/rest/api/monitor/metrics/list). -For more information onmulti-dimensional metrics, refer to the [Azure Monitor data platform metrics documentation](https://docs.microsoft.com/en-us/azure/azure-monitor/essentials/data-platform-metrics#multi-dimensional-metrics) and [Azure Monitor filtering documentation](https://docs.microsoft.com/en-us/azure/azure-monitor/essentials/metrics-charts#filters). +For more information on multi-dimensional metrics, refer to the [Azure Monitor data platform metrics documentation](https://docs.microsoft.com/en-us/azure/azure-monitor/essentials/data-platform-metrics#multi-dimensional-metrics) and [Azure Monitor filtering documentation](https://docs.microsoft.com/en-us/azure/azure-monitor/essentials/metrics-charts#filters). ## Query Azure Monitor Logs diff --git a/docs/sources/datasources/elasticsearch/_index.md b/docs/sources/datasources/elasticsearch/_index.md index 9388062f64f02..d70d0e7339241 100644 --- a/docs/sources/datasources/elasticsearch/_index.md +++ b/docs/sources/datasources/elasticsearch/_index.md @@ -34,7 +34,7 @@ The following will help you get started working with Elasticsearch and Grafana: This data source supports these versions of Elasticsearch: -- v7.16+ +- v7.17+ - v8.x Our maintenance policy for Elasticsearch data source is aligned with the [Elastic Product End of Life Dates](https://www.elastic.co/support/eol) and we ensure proper functionality for supported versions. If you are using an Elasticsearch with version that is past its end-of-life (EOL), you can still execute queries, but you will receive a notification in the query builder indicating that the version of Elasticsearch you are using is no longer supported. It's important to note that in such cases, we do not guarantee the correctness of the functionality, and we will not be addressing any related issues. diff --git a/docs/sources/datasources/elasticsearch/query-editor/index.md b/docs/sources/datasources/elasticsearch/query-editor/index.md index 8d15a47e36deb..bb801bcabacce 100644 --- a/docs/sources/datasources/elasticsearch/query-editor/index.md +++ b/docs/sources/datasources/elasticsearch/query-editor/index.md @@ -24,7 +24,11 @@ weight: 300 # Elasticsearch query editor Grafana provides a query editor for Elasticsearch. Elasticsearch queries are in Lucene format. -See [Lucene query syntax](https://www.elastic.co/guide/en/kibana/current/lucene-query.html) and and [Query string syntax](https://www.elastic.co/guide/en/elasticsearch/reference/8.9/query-dsl-query-string-query.html#query-string-syntax) if you are new to working with Lucene queries in Elasticsearch. +See [Lucene query syntax](https://www.elastic.co/guide/en/kibana/current/lucene-query.html) and [Query string syntax](https://www.elastic.co/guide/en/elasticsearch/reference/8.9/query-dsl-query-string-query.html#query-string-syntax) if you are new to working with Lucene queries in Elasticsearch. + +{{% admonition type="note" %}} +When composing Lucene queries, ensure that you use uppercase boolean operators: `AND`, `OR`, and `NOT`. Lowercase versions of these operators are not supported by the Lucene query syntax. +{{% /admonition %}} {{< figure src="/static/img/docs/elasticsearch/elastic-query-editor-10.1.png" max-width="800px" class="docs-image--no-shadow" caption="Elasticsearch query editor" >}} diff --git a/docs/sources/datasources/google-cloud-monitoring/google-authentication/index.md b/docs/sources/datasources/google-cloud-monitoring/google-authentication/index.md index 9243693543132..5d96965f1b13b 100644 --- a/docs/sources/datasources/google-cloud-monitoring/google-authentication/index.md +++ b/docs/sources/datasources/google-cloud-monitoring/google-authentication/index.md @@ -51,7 +51,7 @@ To visualize data from multiple GCP Projects, create one data source per GCP Pro You can create a service account and key file that can be used to access multiple projects. Follow steps 1-5 above, then: 1. Note the email address of the service account, it will look a little strange like `foobar-478@main-boardwalk-90210.iam.gserviceaccount.com`. -1. Navigtate to the other project(s) you want to access. +1. Navigate to the other project(s) you want to access. 1. Add the service account email address to the IAM page of each project, and grant it the required roles. 1. Navigate back to the original project's service account and create a [service account key](https://cloud.google.com/iam/docs/creating-managing-service-account-keys#iam-service-account-keys-create-console). A JSON key file is created and downloaded to your computer 1. Store the key file in a secure place, because it grants access to your Google data. diff --git a/docs/sources/datasources/grafana-pyroscope.md b/docs/sources/datasources/grafana-pyroscope.md deleted file mode 100644 index f0b32c1c0aaad..0000000000000 --- a/docs/sources/datasources/grafana-pyroscope.md +++ /dev/null @@ -1,115 +0,0 @@ ---- -aliases: - - ../features/datasources/phlare/ - - ../features/datasources/grafana-pyroscope/ -description: Horizontally-scalable, highly-available, multi-tenant continuous profiling - aggregation system. OSS profiling solution from Grafana Labs. -keywords: - - grafana - - phlare - - guide - - profiling - - pyroscope -labels: - products: - - cloud - - enterprise - - oss -title: Grafana Pyroscope -weight: 1150 ---- - -# Grafana Pyroscope data source - -Formerly Phlare data source, now Grafana Pyroscope, a horizontally scalable, highly-available, multi-tenant, OSS, continuous profiling aggregation system. Add it as a data source, and you are ready to query your profiles in [Explore][explore]. - -## Configure the Grafana Pyroscope data source - -To configure basic settings for the data source, complete the following steps: - -1. Click **Connections** in the left-side menu. -1. Under Your connections, click **Data sources**. -1. Enter `Grafana Pyroscope` in the search bar. -1. Click **Grafana Pyroscope**. - - The **Settings** tab of the data source is displayed. - -1. Set the data source's basic configuration options: - - | Name | Description | - | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | - | `Name` | A name to specify the data source in panels, queries, and Explore. | - | `Default` | The default data source will be pre-selected for new panels. | - | `URL` | The URL of the Grafana Pyroscope or Phlare instance, e.g., `http://localhost:4100` | - | `Basic Auth` | Enable basic authentication to the data source. | - | `User` | User name for basic authentication. | - | `Password` | Password for basic authentication. | - | `Minimal step` | Used for queries returning timeseries data. Phlare backend, similar to Prometheus, scrapes profiles at certain intervals. To prevent querying at smaller interval use Minimal step same or higher than your Phlare scrape interval. For Pyroscope backend this prevents returning too many data points to the front end. | - -## Querying - -### Query Editor - -![Query editor](/static/img/docs/phlare/query-editor.png 'Query editor') - -Query editor gives you access to a profile type selector, a label selector, and collapsible options. - -![Profile selector](/static/img/docs/phlare/select-profile.png 'Profile selector') - -Select a profile type from the drop-down menu. While the label selector can be left empty to query all profiles without filtering by labels, the profile type or app must be selected for the query to be valid. Grafana does not show any data if the profile type or app isn’t selected when a query is run. - -![Labels selector](/static/img/docs/phlare/labels-selector.png 'Labels selector') - -Use the labels selector input to filter by labels. Pyroscope uses similar syntax to Prometheus to filter labels. Refer to [Pyroscope documentation](https://grafana.com/docs/pyroscope/latest/) for available operators and syntax. - -![Options section](/static/img/docs/phlare/options-section.png 'Options section') - -Options section contains a switch for Query Type and Group by. - -Select a query type to return the profile data which can be shown in the [Flame Graph][flame-graph], metric data visualized in a graph, or both. You can only select both options in a dashboard, because panels allow only one visualization. - -Group by allows you to group metric data by a specified label. Without any Group by label, metric data is aggregated over all the labels into single time series. You can use multiple labels to group by. Group by has only an effect on the metric data and does not change the profile data results. - -### Profiles query results - -Profiles can be visualized in a flame graph. See the [Flame Graph documentation][flame-graph] to learn about the visualization and its features. - -![Flame graph](/static/img/docs/phlare/flame-graph.png 'Flame graph') - -Pyroscope returns profiles aggregated over a selected time range, and the absolute values in the flame graph grow as the time range gets bigger while keeping the relative values meaningful. You can zoom in on the time range to get a higher granularity profile up to the point of a single scrape interval. - -### Metrics query results - -Metrics results represent the aggregated sum value over time of the selected profile type. - -![Metrics graph](/static/img/docs/phlare/metric-graph.png 'Metrics graph') - -This allows you to quickly see any spikes in the value of the scraped profiles and zoom in to a particular time range. - -## Provision the Grafana Pyroscope data source - -You can modify the Grafana configuration files to provision the Grafana Pyroscope data source. To learn more, and to view the available provisioning settings, see [provisioning documentation][provisioning-data-sources]. - -Here is an example config: - -```yaml -apiVersion: 1 - -datasources: - - name: Grafana Pyroscope - type: grafana-pyroscope-datasource - url: http://localhost:4040 - jsonData: - minStep: '15s' -``` - -{{% docs/reference %}} -[explore]: "/docs/grafana/ -> /docs/grafana//explore" -[explore]: "/docs/grafana-cloud/ -> /docs/grafana//explore" - -[flame-graph]: "/docs/grafana/ -> /docs/grafana//panels-visualizations/visualizations/flame-graph" -[flame-graph]: "/docs/grafana-cloud/ -> /docs/grafana//panels-visualizations/visualizations/flame-graph" - -[provisioning-data-sources]: "/docs/grafana/ -> /docs/grafana//administration/provisioning#datasources" -[provisioning-data-sources]: "/docs/grafana-cloud/ -> /docs/grafana//administration/provisioning#datasources" -{{% /docs/reference %}} diff --git a/docs/sources/datasources/influxdb/_index.md b/docs/sources/datasources/influxdb/_index.md index d6421c228717d..295cf0cb6e155 100644 --- a/docs/sources/datasources/influxdb/_index.md +++ b/docs/sources/datasources/influxdb/_index.md @@ -126,10 +126,11 @@ Configure these options if you select the InfluxQL (classic InfluxDB) query lang Configure these options if you select the SQL query language: -| Name | Description | -| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Database** | Sets the ID of the bucket to query. Copy this from the Buckets page of the InfluxDB UI. | -| **Token** | API token used for SQL queries. It can be generated on InfluxDB Cloud dashboard under [Load Data > API Tokens](https://docs.influxdata.com/influxdb/cloud-serverless/get-started/setup/#create-an-all-access-api-token) menu. | +| Name | Description | +| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Database** | Sets the ID of the bucket to query. Copy this from the Buckets page of the InfluxDB UI. | +| **Token** | API token used for SQL queries. It can be generated on InfluxDB Cloud dashboard under [Load Data > API Tokens](https://docs.influxdata.com/influxdb/cloud-serverless/get-started/setup/#create-an-all-access-api-token) menu. | +| **Insecure Connection** | Disable gRPC TLS security. | ### Configure Flux @@ -138,7 +139,7 @@ Configure these options if you select the Flux query language: | Name | Description | | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Organization** | The [Influx organization](https://v2.docs.influxdata.com/v2.0/organizations/) that will be used for Flux queries. This is also used to for the `v.organization` query macro. | -| **Token** | The authentication token used for Flux queries. With Influx 2.0, use the [influx authentication token to function](https://v2.docs.influxdata.com/v2.0/security/tokens/create-token/). Token must be set as `Authorization` header with the value `Token `. For influx 1.8, the token is `username:password`. | +| **Token** | The authentication token used for Flux queries. With Influx 2.0, use the [influx authentication token to function](https://v2.docs.influxdata.com/v2.0/security/tokens/create-token/). Token must be set as `Authorization` header with the value `Token `. For influx 1.8, the token is `username:password`. | | **Default bucket** | _(Optional)_ The [Influx bucket](https://v2.docs.influxdata.com/v2.0/organizations/buckets/) that will be used for the `v.defaultBucket` macro in Flux queries. | ### Provision the data source @@ -203,9 +204,8 @@ datasources: access: proxy url: http://localhost:8086 jsonData: - version: SQL - metadata: - - database: + dbName: site + httpHeaderName1: 'Authorization' secureJsonData: httpHeaderValue1: 'Token ' ``` @@ -216,11 +216,12 @@ datasources: apiVersion: 1 datasources: - - name: InfluxDB_v2_InfluxQL + - name: InfluxDB_v3_InfluxQL type: influxdb access: proxy url: http://localhost:8086 jsonData: + version: SQL dbName: site httpMode: POST secureJsonData: diff --git a/docs/sources/datasources/jaeger/_index.md b/docs/sources/datasources/jaeger/_index.md index 91143aed8b570..36dc7d0131ee9 100644 --- a/docs/sources/datasources/jaeger/_index.md +++ b/docs/sources/datasources/jaeger/_index.md @@ -123,11 +123,6 @@ The following table describes the ways in which you can configure your trace to ### Trace to metrics -{{% admonition type="note" %}} -This feature is behind the `traceToMetrics` [feature toggle][configure-grafana-feature-toggles]. -If you use Grafana Cloud, open a [support ticket in the Cloud Portal](/profile/org#support) to access this feature. -{{% /admonition %}} - The **Trace to metrics** setting configures the [trace to metrics feature](/blog/2022/08/18/new-in-grafana-9.1-trace-to-metrics-allows-users-to-navigate-from-a-trace-span-to-a-selected-data-source/) available when integrating Grafana with Jaeger. To configure trace to metrics: @@ -369,3 +364,8 @@ To configure this feature, see the [introduction to exemplars][exemplars] docume [variable-syntax]: "/docs/grafana/ -> /docs/grafana//dashboards/variables/variable-syntax" [variable-syntax]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/variables/variable-syntax" {{% /docs/reference %}} + +## Visualizing the dependency graph + +If service dependency information is available in Jaeger, it can be visualized in Grafana. +Use the Jaeger data source with the "Dependency Graph" query type on a Node Graph panel for this. diff --git a/docs/sources/datasources/loki/_index.md b/docs/sources/datasources/loki/_index.md index f81b2c9007258..b048a9f4c43e1 100644 --- a/docs/sources/datasources/loki/_index.md +++ b/docs/sources/datasources/loki/_index.md @@ -32,6 +32,12 @@ The following guides will help you get started with Loki: - [LogQL](/docs/loki/latest/logql/) - [Loki query editor]({{< relref "./query-editor" >}}) +## Supported Loki versions + +This data source supports these versions of Loki: + +- v2.8+ + ## Adding a data source For instructions on how to add a data source to Grafana, refer to the [administration documentation][data-source-management] @@ -60,6 +66,7 @@ datasources: access: proxy url: http://localhost:3100 jsonData: + timeout: 60 maxLines: 1000 ``` diff --git a/docs/sources/datasources/loki/configure-loki-data-source.md b/docs/sources/datasources/loki/configure-loki-data-source.md index 81ec007efbe55..bae45a99498e2 100644 --- a/docs/sources/datasources/loki/configure-loki-data-source.md +++ b/docs/sources/datasources/loki/configure-loki-data-source.md @@ -91,9 +91,9 @@ To troubleshoot configuration and other issues, check the log file located at `/ ### Derived fields -Derived Fields are used to extract new fields from a log message and create a link from the value of the field. +Derived Fields are used to extract new fields from your logs and create a link from the value of the field. -For example, you can link to your tracing backend directly from your logs, or link to a user profile page if the log line contains a corresponding userId. +For example, you can link to your tracing backend directly from your logs, or link to a user profile page if the log line contains a corresponding `userId`. These links appear in the [log details][]. You can add multiple derived fields. @@ -106,7 +106,11 @@ Each derived field consists of the following: - **Name** - Sets the field name. Displayed as a label in the log details. -- **Regex** - Defines a regular expression to parse a part of the log message and capture it as the value of the new field. Can contain only one capture group. +- **Type** - Defines the type of the derived field. It can be either: + + - **Regex**: A regular expression to parse a part of the log message and capture it as the value of the new field. Can contain only one capture group. + + - **Label**: A label from the selected log line. This can be any type of label - indexed, parsed or structured metadata. The label's value will be used as the value of the derived field. - **URL/query** Sets the full link URL if the link is external, or a query for the target data source if the link is internal. You can interpolate the value from the field with the `${__value.raw}` macro. diff --git a/docs/sources/datasources/mysql/_index.md b/docs/sources/datasources/mysql/_index.md index ae6e6eefdba55..9319d93b68d6a 100644 --- a/docs/sources/datasources/mysql/_index.md +++ b/docs/sources/datasources/mysql/_index.md @@ -48,7 +48,7 @@ Administrators can also [configure the data source via YAML](#provision-the-data | **Database** | Name of your MySQL database. | | **User** | Database user's login/username | | **Password** | Database user's password | -| **Session Timezone** | Specifies the time zone used in the database session, such as `Europe/Berlin` or `+02:00`. Required if the timezone of the database (or the host of the database) is set to something other than UTC. Set the value used in the session with `SET time_zone='...'`. If you leave this field empty, then the time zone is not updated. For more information, refer to the [MySQL documentation](https://dev.mysql.com/doc/en/time-zone-support.html). | +| **Session Timezone** | Specifies the timezone used in the database session, such as `Europe/Berlin` or `+02:00`. Required if the timezone of the database (or the host of the database) is set to something other than UTC. Set this to `+00:00` so Grafana can handle times properly. Set the value used in the session with `SET time_zone='...'`. If you leave this field empty, the timezone will not be updated. For more information, refer to [MySQL Server Time Zone Support](https://dev.mysql.com/doc/en/time-zone-support.html). | | **Max open** | The maximum number of open connections to the database, default `100` (Grafana v5.4+). | | **Max idle** | The maximum number of connections in the idle connection pool, default `100` (Grafana v5.4+). | | **Auto (max idle)** | Toggle to set the maximum number of idle connections to the number of maximum open connections (available in Grafana v9.5.1+). Default is `true`. | diff --git a/docs/sources/datasources/prometheus/_index.md b/docs/sources/datasources/prometheus/_index.md index 298320dd8aa94..bd8e9ee45a1b7 100644 --- a/docs/sources/datasources/prometheus/_index.md +++ b/docs/sources/datasources/prometheus/_index.md @@ -19,7 +19,7 @@ weight: 1300 # Prometheus data source -Prometheus is an open-source database that uses an telemetry collector agent to scrape and store metrics used for monitoring and alerting. If you are just getting started with Prometheus, see [What is Prometheus?][intro-to-prometheus]. +Prometheus is an open-source database that uses a telemetry collector agent to scrape and store metrics used for monitoring and alerting. If you are just getting started with Prometheus, see [What is Prometheus?][intro-to-prometheus]. Grafana provides native support for Prometheus. For instructions on downloading Prometheus see [Get started with Grafana and Prometheus][get-started-prometheus]. diff --git a/docs/sources/datasources/prometheus/query-editor/index.md b/docs/sources/datasources/prometheus/query-editor/index.md index e07e4d818d6ac..f8d24817a011e 100644 --- a/docs/sources/datasources/prometheus/query-editor/index.md +++ b/docs/sources/datasources/prometheus/query-editor/index.md @@ -74,7 +74,7 @@ The **Legend** setting defines the time series's name. You can use a predefined The **Min step** setting defines the lower bounds on the interval between data points. For example, set this to `1h` to hint that measurements are taken hourly. -This setting supports the `$__interval` and `$__rate_interval` macros. +This setting supports the `$__interval` and `$__rate_interval` macros. Be aware that the query range dates are aligned to the step and this can change the start and end of the range. ### Format @@ -96,7 +96,7 @@ For more information, refer to the [Time Series Transform option documentation][ {{% admonition type="note" %}} Grafana modifies the request dates for queries to align them with the dynamically calculated step. -This ensures a consistent display of metrics data, but it can result in a small gap of data at the right edge of a graph. +This ensures a consistent display of metrics data and Prometheus requires this for caching results. But, aligning the range with the step can result in a small gap of data at the right edge of a graph or change the start date of the range. For example, a 15s step aligns the range to Unix time divisible by 15s and a 1w minstep aligns the range to the start of the week on a Thursday. {{% /admonition %}} ### Exemplars diff --git a/docs/sources/datasources/pyroscope/_index.md b/docs/sources/datasources/pyroscope/_index.md new file mode 100644 index 0000000000000..8c7d7bc37c961 --- /dev/null +++ b/docs/sources/datasources/pyroscope/_index.md @@ -0,0 +1,85 @@ +--- +aliases: + - ../features/datasources/phlare/ # /docs/grafana//features/datasources/phlare/ + - ../features/datasources/grafana-pyroscope/ # /docs/grafana//features/datasources/grafana-pyroscope/ + - ../datasources/grafana-pyroscope/ # /docs/grafana//datasources/grafana-pyroscope/ +description: Horizontally-scalable, highly-available, multi-tenant continuous profiling + aggregation system. OSS profiling solution from Grafana Labs. +keywords: + - grafana + - phlare + - guide + - profiling + - pyroscope +labels: + products: + - cloud + - enterprise + - oss +title: Grafana Pyroscope +weight: 1150 +--- + +# Grafana Pyroscope data source + +Grafana Pyroscope is a horizontally scalable, highly available, multi-tenant, OSS, continuous profiling aggregation system. Add it as a data source, and you are ready to query your profiles in [Explore][explore]. + +Refer to [Introduction to Pyroscope](https://grafana.com/docs/pyroscope//introduction/) to understand profiling and Pyroscope. + +To use profiling data, you should: + +- [Configure your application to send profiles](/docs/pyroscope//configure-client/) +- [Configure the Grafana Pyroscope data source](./configure-pyroscope-data-source/). +- [View and query profiling data in Explore](./query-profile-data/) + +## Integrate profiles into dashboards + +Using the Pyroscope data source, you can integrate profiles into your dashboards. +In this case, the screenshot shows memory profiles alongside panels for logs and metrics to be able to debug out of memory (OOM) errors alongside the associated logs and metrics. + +![dashboard](https://grafana.com/static/img/pyroscope/grafana-pyroscope-dashboard-2023-11-30.png) + +## Visualize traces and profiles data using Traces to profiles + +You can link profile and tracing data using your Pyroscope data source with the Tempo data source. +To learn more about how profiles and tracing can work together, refer to [Profiling and tracing synergies](./profiling-and-tracing/). + +Combined traces and profiles let you see granular line-level detail when available for a trace span. This allows you pinpoint the exact function that's causing a bottleneck in your application as well as a specific request. + +![trace-profiler-view](https://grafana.com/static/img/pyroscope/pyroscope-trace-profiler-view-2023-11-30.png) + +For more information, refer to the [Traces to profile section][configure-tempo-data-source] and [Link tracing and profiling with span profiles](https://grafana.com/docs/pyroscope//configure-client/trace-span-profiles/). + +{{< youtube id="AG8VzfFMLxo" >}} + +## Provision the Grafana Pyroscope data source + +You can modify the Grafana configuration files to provision the Grafana Pyroscope data source. +To learn more, and to view the available provisioning settings, refer to [provisioning documentation][provisioning-data-sources]. + +Here is an example configuration: + +```yaml +apiVersion: 1 + +datasources: + - name: Grafana Pyroscope + type: grafana-pyroscope-datasource + url: http://localhost:4040 + jsonData: + minStep: '15s' +``` + +{{% docs/reference %}} +[explore]: "/docs/grafana/ -> /docs/grafana//explore" +[explore]: "/docs/grafana-cloud/ -> /docs/grafana//explore" + +[flame-graph]: "/docs/grafana/ -> /docs/grafana//panels-visualizations/visualizations/flame-graph" +[flame-graph]: "/docs/grafana-cloud/ -> /docs/grafana//panels-visualizations/visualizations/flame-graph" + +[provisioning-data-sources]: "/docs/grafana/ -> /docs/grafana//administration/provisioning#datasources" +[provisioning-data-sources]: "/docs/grafana-cloud/ -> /docs/grafana//administration/provisioning#datasources" + +[configure-tempo-data-source]: "/docs/grafana/ -> /docs/grafana//datasources/tempo/configure-tempo-data-source" +[configure-tempo-data-source]: "/docs/grafana-cloud/ -> docs/grafana-cloud/connect-externally-hosted/data-sources/tempo/configure-tempo-data-source" +{{% /docs/reference %}} diff --git a/docs/sources/datasources/pyroscope/configure-pyroscope-data-source.md b/docs/sources/datasources/pyroscope/configure-pyroscope-data-source.md new file mode 100644 index 0000000000000..8503f2dfa4580 --- /dev/null +++ b/docs/sources/datasources/pyroscope/configure-pyroscope-data-source.md @@ -0,0 +1,50 @@ +--- +description: Configure your Pyroscope data source for Grafana. +keywords: + - configure + - profiling + - pyroscope +labels: + products: + - cloud + - enterprise + - oss +title: Configure the Grafana Pyroscope data source +menuTitle: Configure Pyroscope +weight: 200 +--- + +# Configure the Grafana Pyroscope data source + +To configure basic settings for the data source, complete the following steps: + +1. Click **Connections** in the left-side menu. +1. Under Your connections, click **Data sources**. +1. Enter `Grafana Pyroscope` in the search bar. +1. Click **Grafana Pyroscope** to display the **Settings** tab of the data source. + +1. Set the data source's basic configuration options: + + | Name | Description | + | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | + | `Name` | A name to specify the data source in panels, queries, and Explore. | + | `Default` | The default data source will be pre-selected for new panels. | + | `URL` | The URL of the Grafana Pyroscope instance, for example, `http://localhost:4100`. | + | `Basic Auth` | Enable basic authentication to the data source. | + | `User` | User name for basic authentication. | + | `Password` | Password for basic authentication. | + | `Minimal step` | Used for queries returning timeseries data. The Pyroscope backend, similar to Prometheus, scrapes profiles at certain intervals. To prevent querying at smaller interval, use Minimal step same or higher than your Pyroscope scrape interval. This prevents returning too many data points to the frontend. | + +{{% docs/reference %}} +[explore]: "/docs/grafana/ -> /docs/grafana//explore" +[explore]: "/docs/grafana-cloud/ -> /docs/grafana//explore" + +[flame-graph]: "/docs/grafana/ -> /docs/grafana//panels-visualizations/visualizations/flame-graph" +[flame-graph]: "/docs/grafana-cloud/ -> /docs/grafana//panels-visualizations/visualizations/flame-graph" + +[provisioning-data-sources]: "/docs/grafana/ -> /docs/grafana//administration/provisioning#datasources" +[provisioning-data-sources]: "/docs/grafana-cloud/ -> /docs/grafana//administration/provisioning#datasources" + +[configure-tempo-data-source]: "/docs/grafana/ -> /docs/grafana//datasources/tempo/configure-tempo-data-source" +[configure-tempo-data-source]: "/docs/grafana-cloud/ -> docs/grafana-cloud/connect-externally-hosted/data-sources/tempo/configure-tempo-data-source" +{{% /docs/reference %}} diff --git a/docs/sources/datasources/pyroscope/profiling-and-tracing.md b/docs/sources/datasources/pyroscope/profiling-and-tracing.md new file mode 100644 index 0000000000000..98315f7c9963c --- /dev/null +++ b/docs/sources/datasources/pyroscope/profiling-and-tracing.md @@ -0,0 +1,16 @@ +--- +title: How profiling and tracing work together +menuTitle: How profiling and tracing work together +description: Learn about how profiling and tracing work together. +weight: 250 +keywords: + - pyroscope data source + - continuous profiling + - tracing +--- + +# How profiling and tracing work together + +[//]: # 'Shared content for Trace to profiles in the Pyroscope data source' + +{{< docs/shared source="grafana" lookup="datasources/pyroscope-profile-tracing-intro.md" version="" >}} diff --git a/docs/sources/datasources/pyroscope/query-profile-data.md b/docs/sources/datasources/pyroscope/query-profile-data.md new file mode 100644 index 0000000000000..8c68fb4275bc9 --- /dev/null +++ b/docs/sources/datasources/pyroscope/query-profile-data.md @@ -0,0 +1,82 @@ +--- +description: Use the query editor to explore your Pyroscope data. +keywords: + - query + - profiling + - pyroscope +labels: + products: + - cloud + - enterprise + - oss +title: Query profile data +menuTitle: Query profile data +weight: 300 +--- + +# Query profile data + +The Pyroscope data source query editor gives you access to a profile type selector, a label selector, and collapsible options. + +![Query editor](/media/docs/pyroscope/query-editor/query-editor.png 'Query editor') + +To access the query editor: + +1. Sign into Grafana or Grafana Cloud. +1. Select your Pyroscope data source. +1. From the menu, choose **Explore**. + +1. Select a profile type from the drop-down menu. + + {{< figure src="/media/docs/pyroscope/query-editor/select-profile.png" class="docs-image--no-shadow" max-width="450px" caption="Profile selector" >}} + +1. Use the labels selector input to filter by labels. Pyroscope uses similar syntax to Prometheus to filter labels. + Refer to [Pyroscope documentation](https://grafana.com/docs/pyroscope/latest/) for available operators and syntax. + + While the label selector can be left empty to query all profiles without filtering by labels, the profile type or app must be selected for the query to be valid. + + Grafana doesn't show any data if the profile type or app isn’t selected when a query runs. + + ![Labels selector](/media/docs/pyroscope/query-editor/labels-selector.png 'Labels selector') + +1. Expand the **Options** section to view **Query Type** and **Group by**. + ![Options section](/media/docs/pyroscope/query-editor/options-section.png 'Options section') + +1. Select a query type to return the profile data. Data is shown in the [Flame Graph][flame-graph], metric data visualized in a graph, or both. You can only select both options in Explore. The panels used on dashboards allow only one visualization. + +Using **Group by**, you can group metric data by a specified label. +Without any **Group by** label, metric data aggregates over all the labels into single time series. +You can use multiple labels to group by. Group by only effects the metric data and doesn't change the profile data results. + +## Profiles query results + +Profiles can be visualized in a flame graph. +Refer to the [Flame Graph documentation][flame-graph] to learn about the visualization and its features. + +![Flame graph](/media/docs/pyroscope/query-editor/flame-graph.png 'Flame graph') + +Pyroscope returns profiles aggregated over a selected time range. +The absolute values in the flame graph grow as the time range gets bigger while keeping the relative values meaningful. +You can zoom in on the time range to get a higher granularity profile up to the point of a single scrape interval. + +## Metrics query results + +Metrics results represent the aggregated sum value over time of the selected profile type. + +![Metrics graph](/media/docs/pyroscope/query-editor/metric-graph.png 'Metrics graph') + +This allows you to quickly see any spikes in the value of the scraped profiles and zoom in to a particular time range. + +{{% docs/reference %}} +[explore]: "/docs/grafana/ -> /docs/grafana//explore" +[explore]: "/docs/grafana-cloud/ -> /docs/grafana//explore" + +[flame-graph]: "/docs/grafana/ -> /docs/grafana//panels-visualizations/visualizations/flame-graph" +[flame-graph]: "/docs/grafana-cloud/ -> /docs/grafana//panels-visualizations/visualizations/flame-graph" + +[provisioning-data-sources]: "/docs/grafana/ -> /docs/grafana//administration/provisioning#datasources" +[provisioning-data-sources]: "/docs/grafana-cloud/ -> /docs/grafana//administration/provisioning#datasources" + +[configure-tempo-data-source]: "/docs/grafana/ -> /docs/grafana//datasources/tempo/configure-tempo-data-source" +[configure-tempo-data-source]: "/docs/grafana-cloud/ -> docs/grafana-cloud/connect-externally-hosted/data-sources/tempo/configure-tempo-data-source" +{{% /docs/reference %}} diff --git a/docs/sources/datasources/tempo/_index.md b/docs/sources/datasources/tempo/_index.md index 70ba9c4f682b7..445bda32e7236 100644 --- a/docs/sources/datasources/tempo/_index.md +++ b/docs/sources/datasources/tempo/_index.md @@ -20,11 +20,15 @@ weight: 1400 # Tempo data source -Grafana ships with built-in support for [Tempo](https://grafana.com/docs/tempo/latest/), a high-volume, minimal-dependency trace storage, open-source tracing solution from Grafana Labs. This topic explains configuration and queries specific to the Tempo data source. +Grafana ships with built-in support for [Tempo](https://grafana.com/docs/tempo/latest/), a high-volume, minimal-dependency trace storage, open source tracing solution from Grafana Labs. This topic explains configuration and queries specific to the Tempo data source. For instructions on how to add a data source to Grafana, refer to the [administration documentation][data-source-management]. Only users with the organization administrator role can add data sources. -Administrators can also [configure the data source via YAML](#provision-the-data-source) with Grafana's provisioning system. +Administrators can also [configure the data source via YAML][configure-tempo-data-source] with Grafana's provisioning system. + +This video explains how to add data sources, including Loki, Tempo, and Mimir, to Grafana and Grafana Cloud. Tempo data source set up starts at 4:58 in the video. + +{{< youtube id="cqHO0oYW6Ic" start="298" >}} Once you've added the data source, you can [configure it]({{< relref "./configure-tempo-data-source/" >}}) so that your Grafana instance's users can create queries in its [query editor]({{< relref "./query-editor/" >}}) when they [build dashboards][build-dashboards] and use [Explore][explore]. @@ -37,6 +41,9 @@ Once you've added the data source, you can [configure it]({{< relref "./configur [configure-grafana-feature-toggles]: "/docs/grafana/ -> /docs/grafana//setup-grafana/configure-grafana#feature_toggles" [configure-grafana-feature-toggles]: "/docs/grafana-cloud/ -> /docs/grafana//setup-grafana/configure-grafana#feature_toggles" +[configure-tempo-data-source]: "/docs/grafana/ -> /docs/grafana//datasources/tempo/configure-tempo-data-source#provision-the-data-source" +[configure-tempo-data-source]: "/docs/grafana-cloud/ -> docs/grafana-cloud/connect-externally-hosted/data-sources/tempo/configure-tempo-data-source#provision-the-data-source" + [data-source-management]: "/docs/grafana/ -> /docs/grafana//administration/data-source-management" [data-source-management]: "/docs/grafana-cloud/ -> /docs/grafana//administration/data-source-management" diff --git a/docs/sources/datasources/tempo/configure-tempo-data-source.md b/docs/sources/datasources/tempo/configure-tempo-data-source.md index caaa3f76aa77b..a37b83bedaa7b 100644 --- a/docs/sources/datasources/tempo/configure-tempo-data-source.md +++ b/docs/sources/datasources/tempo/configure-tempo-data-source.md @@ -35,7 +35,11 @@ To configure basic settings for the Tempo data source, complete the following st | **User** | Sets the user name for basic authentication. | | **Password** | Sets the password for basic authentication. | -You can also configure settings specific to the Tempo data source. These options are described in the sections below. +You can also configure settings specific to the Tempo data source. + +This video explains how to add data sources, including Loki, Tempo, and Mimir, to Grafana and Grafana Cloud. Tempo data source set up starts at 4:58 in the video. + +{{< youtube id="cqHO0oYW6Ic" start="298" >}} ## Trace to logs @@ -55,7 +59,7 @@ There are two ways to configure the trace to logs feature: You can also click **Open advanced data source picker** to see more options, including adding a data source. 1. Set start and end time shift. As the logs timestamps may not exactly match the timestamps of the spans in trace it may be necessary to search in larger or shifted time range to find the desired logs. -1. Select which tags to use in the logs query. The tags you configure must be present in the spans attributes or resources for a trace to logs span link to appear. You can optionally configure a new name for the tag. This is useful for example if the tag has dots in the name and the target data source does not allow using dots in labels. In that case you can for example remap `http.status` to `http_status`. +1. Select which tags to use in the logs query. The tags you configure must be present in the span's attributes or resources for a trace to logs span link to appear. You can optionally configure a new name for the tag. This is useful, for example, if the tag has dots in the name and the target data source does not allow using dots in labels. In that case, you can for example remap `http.status` (the span attribute) to `http_status` (the data source field). "Data source" in this context can refer to Loki, or another log data source. 1. Optionally switch on the **Filter by trace ID** and/or **Filter by span ID** setting to further filter the logs if your logs consistently contain trace or span IDs. ### Configure a custom query @@ -65,26 +69,12 @@ There are two ways to configure the trace to logs feature: You can also click **Open advanced data source picker** to see more options, including adding a data source. 1. Set start and end time shift. As the logs timestamps may not exactly match the timestamps of the spans in the trace it may be necessary to widen or shift the time range to find the desired logs. -1. Optionally select tags to map. These tags can be used in the custom query with `${__tags}` variable. This variable will interpolate the mapped tags as list in an appropriate syntax for the data source and will only include the tags that were present in the span omitting those that weren't present. You can optionally configure a new name for the tag. This is useful in cases where the tag has dots in the name and the target data source does not allow using dots in labels. For example, you can remap `http.status` to `http_status` in such a case. If you don't map any tags here, you can still use any tag in the query like this `method="${__span.tags.method}"`. +1. Optional: Select tags to map. These tags can be used in the custom query with `${__tags}` variable. This variable interpolates the mapped tags as list in an appropriate syntax for the data source. Only the tags that were present in the span are included; tags that aren't present are omitted You can also configure a new name for the tag. This is useful in cases where the tag has dots in the name and the target data source doesn't allow dots in labels. For example, you can remap `http.status` to `http_status`. If you don't map any tags here, you can still use any tag in the query, for example, `method="${__span.tags.method}"`. You can learn more about custom query variables [here](/docs/grafana/latest/datasources/tempo/configure-tempo-data-source/#custom-query-variables). 1. Skip **Filter by trace ID** and **Filter by span ID** settings as these cannot be used with a custom query. 1. Switch on **Use custom query**. 1. Specify a custom query to be used to query the logs. You can use various variables to make that query relevant for current span. The link will only be shown only if all the variables are interpolated with non-empty values to prevent creating an invalid query. -### Variables that can be used in a custom query - -To use a variable you need to wrap it in `${}`. For example `${__span.name}`. - -| Variable name | Description | -| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **\_\_tags** | This variable uses the tag mapping from the UI to create a label matcher string in the specific data source syntax. The variable only uses tags that are present in the span. The link is still created even if only one of those tags is present in the span. You can use this if all tags are not required for the query to be useful. | -| **\_\_span.spanId** | The ID of the span. | -| **\_\_span.traceId** | The ID of the trace. | -| **\_\_span.duration** | The duration of the span. | -| **\_\_span.name** | Name of the span. | -| **\_\_span.tags** | Namespace for the tags in the span. To access a specific tag named `version`, you would use `${__span.tags.version}`. In case the tag contains dot, you have to access it as `${__span.tags["http.status"]}`. | -| **\_\_trace.traceId** | The ID of the trace. | -| **\_\_trace.duration** | The duration of the trace. | -| **\_\_trace.name** | The name of the trace. | +### Configure trace to logs The following table describes the ways in which you can configure your trace to logs settings: @@ -101,34 +91,58 @@ The following table describes the ways in which you can configure your trace to ## Trace to metrics -{{% admonition type="note" %}} -This feature is behind the `traceToMetrics` [feature toggle][configure-grafana-feature-toggles]. -If you use Grafana Cloud, open a [support ticket in the Cloud Portal](/profile/org#support) to access this feature. -{{% /admonition %}} - The **Trace to metrics** setting configures the [trace to metrics feature](/blog/2022/08/18/new-in-grafana-9.1-trace-to-metrics-allows-users-to-navigate-from-a-trace-span-to-a-selected-data-source/) available when integrating Grafana with Tempo. {{< youtube id="TkapvLeMMpc" >}} -To configure trace to metrics: +There are two ways to configure the trace to metrics feature: -1. Select the target data source from the drop-down list. +- Use a basic configuration with a default query, or +- Configure one or more custom queries where you can use a [template language][variable-syntax] to interpolate variables from the trace or span. - You can also click **Open advanced data source picker** to see more options, including adding a data source. +### Simple config + +To use a simple configuration, follow these steps: + +1. Select a metrics data source from the **Data source** drop-down. +1. Optional: Choose any tags to use in the query. If left blank, the default values of `cluster`, `hostname`, `namespace`, `pod`, `service.name` and `service.namespace` are used. + + The tags you configure must be present in the spans attributes or resources for a trace to metrics span link to appear. You can optionally configure a new name for the tag. This is useful for example if the tag has dots in the name and the target data source doesn't allow using dots in labels. In that case you can for example remap `service.name` to `service_name`. + +1. Do not select **Add query**. +1. Select **Save and Test**. + +### Custom queries + +To use custom queries with the configuration, follow these steps: + +1. Select a metrics data source from the **Data source** drop-down. +1. Optional: Choose any tags to use in the query. If left blank, the default values of `cluster`, `hostname`, `namespace`, `pod`, `service.name` and `service.namespace` are used. -1. Create any desired linked queries. + These tags can be used in the custom query with `${__tags}` variable. This variable interpolates the mapped tags as list in an appropriate syntax for the data source and will only include the tags that were present in the span omitting those that weren’t present. You can optionally configure a new name for the tag. This is useful in cases where the tag has dots in the name and the target data source doesn't allow using dots in labels. For example, you can remap `service.name` to `service_name` in such a case. If you don’t map any tags here, you can still use any tag in the query like this `method="${__span.tags.method}"`. You can learn more about custom query variables [here](/docs/grafana/latest/datasources/tempo/configure-tempo-data-source/#custom-query-variables). -| Setting name | Description | -| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Data source** | Defines the target data source. | -| **Tags** | Defines the tags used in linked queries. The key sets the span attribute name, and the optional value sets the corresponding metric label name. For example, you can map `k8s.pod` to `pod`. To interpolate these tags into queries, use the `$__tags` keyword. | +1. Click **Add query** to add a custom query. +1. Specify a custom query to be used to query metrics data. -Each linked query consists of: + Each linked query consists of: -- **Link Label:** _(Optional)_ Descriptive label for the linked query. -- **Query:** The query ran when navigating from a trace to the metrics data source. - Interpolate tags using the `$__tags` keyword. - For example, when you configure the query `requests_total{$__tags}`with the tags `k8s.pod=pod` and `cluster`, the result looks like `requests_total{pod="nginx-554b9", cluster="us-east-1"}`. + - **Link Label:** _(Optional)_ Descriptive label for the linked query. + - **Query:** The query ran when navigating from a trace to the metrics data source. + Interpolate tags using the `$__tags` keyword. + For example, when you configure the query `requests_total{$__tags}`with the tags `k8s.pod=pod` and `cluster`, the result looks like `requests_total{pod="nginx-554b9", cluster="us-east-1"}`. + +1. Select **Save and Test**. + +### Configure trace to metrics + +| Setting name | Description | +| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Data source** | Defines the target data source. | +| **Span start time shift** | Shifts the start time for the metrics query, based on the span's start time. You can use time units, such as `5s`, `1m`, `3h`. To extend the time to the past, use a negative value. Default: `0`. | +| **Span end time shift** | Shifts the end time for the metrics query, based on the span's end time. You can use time units. Default: `0`. | +| **Tags** | Defines the tags used in linked queries. The key sets the span attribute name, and the optional value sets the corresponding metric label name. For example, you can map `k8s.pod` to `pod`. To interpolate these tags into queries, use the `$__tags` keyword. | +| **Link Label** | _(Optional)_ Descriptive label for the linked query. | +| **Query** | Input to write a custom query. Use variable interpolation to customize it with variables from span. | ## Trace to profiles @@ -136,6 +150,22 @@ Each linked query consists of: {{< docs/shared source="grafana" lookup="datasources/tempo-traces-to-profiles.md" leveloffset="+1" version="" >}} +## Custom query variables + +To use a variable in your trace to logs, metrics or profiles you need to wrap it in `${}`. For example, `${__span.name}`. + +| Variable name | Description | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **\_\_tags** | This variable uses the tag mapping from the UI to create a label matcher string in the specific data source syntax. The variable only uses tags that are present in the span. The link is still created even if only one of those tags is present in the span. You can use this if all tags are not required for the query to be useful. | +| **\_\_span.spanId** | The ID of the span. | +| **\_\_span.traceId** | The ID of the trace. | +| **\_\_span.duration** | The duration of the span. | +| **\_\_span.name** | Name of the span. | +| **\_\_span.tags** | Namespace for the tags in the span. To access a specific tag named `version`, you would use `${__span.tags.version}`. In case the tag contains dot, you have to access it as `${__span.tags["http.status"]}`. | +| **\_\_trace.traceId** | The ID of the trace. | +| **\_\_trace.duration** | The duration of the trace. | +| **\_\_trace.name** | The name of the trace. | + ## Service Graph The **Service Graph** setting configures the [Service Graph](/docs/tempo/latest/metrics-generator/service_graphs/enable-service-graphs/) feature. @@ -156,13 +186,6 @@ The **Search** setting configures [Tempo search](/docs/tempo/latest/configuratio You can configure the **Hide search** setting to hide the search query option in **Explore** if search is not configured in the Tempo instance. -## Loki search - -The **Loki search** setting configures the Loki search query type. - -Configure the **Data source** setting to define which Loki instance you want to use to search traces. -You must configure [derived fields]({{< relref "../loki#configure-derived-fields" >}}) in the Loki instance. - ## TraceID query The **TraceID query** setting modifies how TraceID queries are run. The time range can be used when there are performance issues or timeouts since it will narrow down the search to the defined range. This setting is disabled by default. @@ -224,14 +247,18 @@ datasources: queries: - name: 'Sample query' query: 'sum(rate(traces_spanmetrics_latency_bucket{$$__tags}[5m]))' + traceToProfiles: + datasourceUid: 'grafana-pyroscope-datasource' + tags: ['job', 'instance', 'pod', 'namespace'] + profileTypeId: 'process_cpu:cpu:nanoseconds:cpu:nanoseconds' + customQuery: true + query: 'method="${__span.tags.method}"' serviceMap: datasourceUid: 'prometheus' nodeGraph: enabled: true search: hide: false - lokiSearch: - datasourceUid: 'loki' traceQuery: timeShiftEnabled: true spanStartTimeShift: '1h' @@ -245,9 +272,6 @@ datasources: [build-dashboards]: "/docs/grafana/ -> /docs/grafana//dashboards/build-dashboards" [build-dashboards]: "/docs/grafana-cloud/ -> /docs/grafana//dashboards/build-dashboards" -[configure-grafana-feature-toggles]: "/docs/grafana/ -> /docs/grafana//setup-grafana/configure-grafana#feature_toggles" -[configure-grafana-feature-toggles]: "/docs/grafana-cloud/ -> /docs/grafana//setup-grafana/configure-grafana#feature_toggles" - [data-source-management]: "/docs/grafana/ -> /docs/grafana//administration/data-source-management" [data-source-management]: "/docs/grafana-cloud/ -> /docs/grafana//administration/data-source-management" diff --git a/docs/sources/datasources/tempo/query-editor/_index.md b/docs/sources/datasources/tempo/query-editor/_index.md index 14c9f364a80e6..f80a938d22bdd 100644 --- a/docs/sources/datasources/tempo/query-editor/_index.md +++ b/docs/sources/datasources/tempo/query-editor/_index.md @@ -12,12 +12,12 @@ labels: - cloud - enterprise - oss -menuTitle: Query editor -title: Tempo query editor +menuTitle: Query tracing data +title: Query tracing data weight: 300 --- -# Tempo query editor +# Query tracing data The Tempo data source's query editor helps you query and display traces from Tempo in [Explore][explore]. @@ -99,13 +99,6 @@ To query a particular trace: {{< figure src="/static/img/docs/tempo/query-editor-traceid.png" class="docs-image--no-shadow" max-width="750px" caption="Screenshot of the Tempo TraceID query type" >}} -## Query Loki for traces - -To find traces to visualize, you can use the [Loki query editor]({{< relref "../../loki#loki-query-editor" >}}). -For results, you must configure [derived fields]({{< relref "../../loki#configure-derived-fields" >}}) in the Loki data source that point to this data source. - -{{< figure src="/static/img/docs/tempo/query-editor-search.png" class="docs-image--no-shadow" max-width="750px" caption="Screenshot of the Tempo query editor showing the Loki Search tab" >}} - {{% docs/reference %}} [explore]: "/docs/grafana/ -> /docs/grafana//explore" [explore]: "/docs/grafana-cloud/ -> /docs/grafana//explore" diff --git a/docs/sources/datasources/tempo/tracing-best-practices.md b/docs/sources/datasources/tempo/tracing-best-practices.md new file mode 100644 index 0000000000000..bab5083848344 --- /dev/null +++ b/docs/sources/datasources/tempo/tracing-best-practices.md @@ -0,0 +1,25 @@ +--- +description: Use best practices to plan how you implement tracing. +keywords: + - grafana + - tempo + - best practices + - tracing +labels: + products: + - cloud + - enterprise + - oss +menuTitle: Best practices +title: Best practices for tracing +weight: 250 +--- + +# Best practices for tracing + +This page provides some general best practices for tracing. + +[//]: # 'Shared content for best practices for traces' +[//]: # 'This content is located in /tempo/docs/sources/shared/best-practices-traces.md' + +{{< docs/shared source="tempo" lookup="best-practices-traces.md" version="" >}} diff --git a/docs/sources/datasources/zipkin/_index.md b/docs/sources/datasources/zipkin/_index.md index c1d96a862567a..b12037fbe2c03 100644 --- a/docs/sources/datasources/zipkin/_index.md +++ b/docs/sources/datasources/zipkin/_index.md @@ -121,11 +121,6 @@ The following table describes the ways in which you can configure your trace to ### Trace to metrics -{{% admonition type="note" %}} -This feature is behind the `traceToMetrics` [feature toggle][configure-grafana-feature-toggles]. -If you use Grafana Cloud, open a [support ticket in the Cloud Portal](/profile/org/#support) to access this feature. -{{% /admonition %}} - The **Trace to metrics** setting configures the [trace to metrics feature](/blog/2022/08/18/new-in-grafana-9.1-trace-to-metrics-allows-users-to-navigate-from-a-trace-span-to-a-selected-data-source/) available when integrating Grafana with Zipkin. To configure trace to metrics: diff --git a/docs/sources/developers/angular_deprecation/_index.md b/docs/sources/developers/angular_deprecation/_index.md index 89b3037c1ae51..060e3931dfea7 100644 --- a/docs/sources/developers/angular_deprecation/_index.md +++ b/docs/sources/developers/angular_deprecation/_index.md @@ -14,7 +14,20 @@ weight: 500 # Angular support deprecation -Angular plugin support is deprecated and will be removed in a future release. There are still many community plugins that rely on Grafana's Angular plugin support to work. The same is true for many internal (private) plugins that have been developed by Grafana users over the years. Grafana version 9 has a server configuration option that is global to the entire instance and controls whether Angular plugin support is available or not. By default, Angular support is still enabled, but that will change soon once we complete the migration of all Angular code in the core product. +Angular plugin support is deprecated and will be removed in a future release. +There are legacy core Grafana visualizations and external plugins that rely on Grafana's Angular plugin support to work. The same is likely true for [private plugins](https://grafana.com/legal/plugins/) that have been developed by Grafana users for use on their own instances over the years. +From Grafana v9 and onwards, there is a [server configuration option](https://github.com/grafana/grafana/blob/d61bcdf4ca5e69489e0067c56fbe7f0bfdf84ee4/conf/defaults.ini#L362) that's global to the entire instance and controls whether Angular plugin support is available or not. +In Grafana 11, we will change the default value for the configuration to remove support. + +Warning messages are displayed if a dashboard depends on an a panel visualization or data source which requires AngularJS as shown in the following video: + +{{< youtube id="XlEVs6g8dC8" >}} + +To avoid disruption: + +- Ensure that you are running the latest version of plugins by following this guide on [updating]({{< relref "../../administration/plugin-management/#update-a-plugin" >}}). Many panels and data sources have migrated from AngularJS. +- If you are using legacy Core Grafana visualizations such as Graph or Table-old, migrate to their replacements using the provided [automatic migrations]({{< relref "./angular-plugins/#automatic-migration-of-plugins" >}}). +- Review the [list of current Angular plugins]({{< relref "./angular-plugins/" >}}) to discover which Core and external plugins are impacted, and whether an update or alternative is required. ## Why are we deprecating Angular support? @@ -22,17 +35,24 @@ AngularJS is an old frontend framework whose active development stopped many yea ## When will Angular plugins stop working? -Our goal is to transfer all the remaining Angular code to the core of Grafana before Grafana 10 is released in Summer 2023. Once this is done, the option "[angular_support_enabled](https://github.com/grafana/grafana/blob/d61bcdf4ca5e69489e0067c56fbe7f0bfdf84ee4/conf/defaults.ini#L362)" will be disabled by default for new Grafana Cloud users, resulting in the inability to use Angular plugins. In case you still rely on AngularJS-based plugins developed internally or by the community, you will need to enable this option to continue using them. Following the release of Grafana 10 we will be migrating Grafana Cloud users where possible and disabling Angular support when appropriate, we will also be introducing new features to help all users identify how they are impacted and to warn of the use of deprecated plugins within the Grafana UI. +In Grafana 11, which will be released in preview in April 2024 and generally available in May, we will change the default behavior of the [angular_support_enabled](https://github.com/grafana/grafana/blob/d61bcdf4ca5e69489e0067c56fbe7f0bfdf84ee4/conf/defaults.ini#L362) configuration parameter to turn off support for AngularJS based plugins. In case you still rely on [AngularJS-based plugins]({{< relref "./angular-plugins/" >}}) developed internally or by the community, you will need to enable this option to continue using them. + +New Grafana Cloud users will be unable to request for support to be added to their instance. ## When will we remove Angular support completely? -Our plan is to completely remove support for Angular plugins in version 11, which will be released in 2024. This means that all plugins that depend on Angular will stop working and the temporary option introduced in version 10 to enable Angular will be removed. +Our current plan is to completely remove any remaining support for Angular plugins in version 12. Including the removal of the [angular_support_enabled](https://github.com/grafana/grafana/blob/d61bcdf4ca5e69489e0067c56fbe7f0bfdf84ee4/conf/defaults.ini#L362) configuration parameter. + +## A dashboard I use is displaying a warning, what do I need to do? + +A dashboard displays warnings when one or more panel visualizations or data sources in the dashboard have a dependency on Angular. +Contact your system administrator to advise them of the issue or follow the preceding guidance on avoiding disruption. ## How do I migrate an Angular plugin to React? Depending on if it’s a data source plugin, panel plugin, or app plugin the process will differ. -For panels, the rendering logic could in some cases be easily preserved but all options need to be redone to use the declarative options framework. For data source plugins the query editor and config options will likely need a total rewrite. +For panels, the rendering logic could in some cases be easily preserved, but all options need to be redone to use the declarative options framework. For data source plugins the query editor and config options will likely need a total rewrite. ## How do I encourage a community plugin to migrate? diff --git a/docs/sources/developers/angular_deprecation/angular-plugins.md b/docs/sources/developers/angular_deprecation/angular-plugins.md index be32d807fd807..d565cb5a2e197 100644 --- a/docs/sources/developers/angular_deprecation/angular-plugins.md +++ b/docs/sources/developers/angular_deprecation/angular-plugins.md @@ -16,708 +16,192 @@ description: An annotated list of Grafana plugins using AngularJS. # Plugins using AngularJS -The use of AngularJS in Grafana has been [deprecated]({{< relref "../angular_deprecation" >}}) and support for it will be removed in a future release. +The use of AngularJS in Grafana has been [deprecated]({{< relref "../angular_deprecation" >}}) in favor of React. Support for AngularJS will be turned off by default in Grafana 11. -This page is to help users of Grafana understand how they might be impacted by the removal of Angular support, and whether a migration option exists. - -It lists the latest versions of plugins _currently available_ in the Grafana [plugin catalog](https://grafana.com/plugins) which depend on Angular, and will stop working when Angular support is removed from Grafana. The list will be updated as more plugins migrate to React or offer migration advice. - -Plugins which have been [deprecated](/legal/plugin-deprecation/) will _not_ be listed. Generally, we advise users to migrate away from deprecated plugins as they will not be updated and may not function in current or future versions of Grafana. - -{{% admonition type="note" %}} -We advise you to ensure you are running the latest version of plugins, as previous releases of plugins not listed here may still require AngularJS. -{{% /admonition %}} - -We also list the year in which the plugin was last updated in the catalog and where appropriate, highlight warnings for plugins where the source repository has not been updated in a number of years and appears inactive. This may help indicate the likelihood of a migration being undertaken, but is informational rather than definitive. - -{{% admonition type="note" %}} -Plugins were updated to include signatures in 2021, so whilst a plugin may show as having been updated at that point - the last update to its functionality or dependencies may have been longer ago. -{{% /admonition %}} - -## What should I do with the information below? - -- Consider the available migration steps. -- Check your Grafana instances for usage of these plugins - see information here on [browsing installed plugins]({{< relref "../../administration/plugin-management/#browse-plugins" >}}). -- Review the project repositories to add your support to any migration issues. - -## I'm a plugin author - -We are greatly appreciative of the developers who have contributed plugins to the Grafana ecosystem, your work has helped support millions of users to gain insights into their data. A plugin being listed below is no reflection on its quality, and is purely to help users understand the impact of the removal of Angular support in Grafana. - -Guidance on migrating a plugin to React can be found in our [migration guide](/developers/plugin-tools/migration-guides/migrate-angularjs-to-react). If you would like to add any specific migration guidance for your plugin here or update our assessment, please open a PR by clicking the `Suggest an edit` button at the bottom of this page. - -# Current AngularJS based plugins - -## Apps - -### [Bosun](https://grafana.com/grafana/plugins/bosun-app) - -Latest Version: 0.0.29 | Signature: Community | Last Updated: 2023 - -> [Migration issue](https://github.com/bosun-monitor/bosun-grafana-app/issues/63) has been raised. - -### [GLPI](https://grafana.com/grafana/plugins/ddurieux-glpi-app) - -Latest Version: 1.3.1 | Signature: Community | Last Updated: 2021 - -> [Migration issue](https://github.com/ddurieux/glpi_app_grafana/issues/96) has been raised. - -### [DevOpsProdigy KubeGraf](https://grafana.com/grafana/plugins/devopsprodigy-kubegraf-app/) - -Latest Version: 1.5.2 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -[Issues](https://github.com/devopsprodigy/kubegraf/issues/71) in the project repository suggest that the project _may_ be unsupported. -{{% /admonition %}} - -> **Migration available - potential alternative:** Grafana Cloud includes a [Kubernetes integration](https://grafana.com/solutions/kubernetes/). - -### [AWS IoT TwinMaker App](https://grafana.com/grafana/plugins/grafana-iot-twinmaker-app) - -Latest Version: 1.6.2 | Signature: Grafana | Last Updated: 2023 - -{{% admonition type="note" %}} -Plugin should continue to work even if Angular is disabled, and a full removal of Angular related code is planned. -{{% /admonition %}} - -### [Stagemonitor Elasticsearch](https://grafana.com/grafana/plugins/stagemonitor-elasticsearch-app) - -Latest Version: 0.83.3 | Signature: Community | Last Updated: 2021 - -> [Migration issue](https://github.com/stagemonitor/stagemonitor-grafana-elasticsearch/issues/1) has been raised. - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/stagemonitor/stagemonitor-grafana-elasticsearch) in the past 4 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Voxter VoIP Platform Metrics](https://grafana.com/grafana/plugins/voxter-app) - -Latest Version: 0.0.2 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/raintank/voxter-app) in the past 3 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -## Datasources - -### [Akumuli](https://grafana.com/grafana/plugins/akumuli-datasource/) - -Latest Version: 1.3.12 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -[Issues](https://github.com/akumuli/Akumuli/issues/379) in the project repository suggest that the project _may_ be unsupported. -{{% /admonition %}} - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/akumuli/Akumuli/) in the past 3 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Finance](https://grafana.com/grafana/plugins/ayoungprogrammer-finance-datasource/) - -Latest Version: 1.0.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -[Issues](https://github.com/ayoungprogrammer/grafana-finance/issues/7) in the project repository suggest that the project _may_ be unsupported. -{{% /admonition %}} - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/ayoungprogrammer/grafana-finance) in the past 6 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Chaos Mesh](https://grafana.com/grafana/plugins/chaosmeshorg-datasource/) - -Latest Version: 2.2.3 | Signature: Community | Last Updated: 2022 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/chaos-mesh/datasource) in the past year suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [DeviceHive](https://grafana.com/grafana/plugins/devicehive-devicehive-datasource/) - -Latest Version: 2.0.2 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/devicehive/devicehive-grafana-datasource) in the past 5 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Google BigQuery](https://grafana.com/grafana/plugins/doitintl-bigquery-datasource/) - -Latest Version: 2.0.3 | Signature: Community | Last Updated: 2022 - -> **Migration available - plugin superseded:** Grafana provides its own [Google BigQuery Plugin](https://grafana.com/grafana/plugins/grafana-bigquery-datasource/). The previous [Project repository](https://github.com/doitintl/bigquery-grafana) was archived on December 11, 2022 with a recommendation to migrate to the aforementioned Grafana provided plugin. - -### [Open-Falcon](https://grafana.com/grafana/plugins/fastweb-openfalcon-datasource/) - -Latest Version: 1.0.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -[Project repository](https://github.com/open-falcon/grafana-openfalcon-datasource) suggests support for Grafana v4.2 - Grafana v5.4. -{{% /admonition %}} - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/open-falcon/grafana-openfalcon-datasource) in the past year suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [GraphQL Data Source](https://grafana.com/grafana/plugins/fifemon-graphql-datasource/) - -Latest Version: 1.3.0 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Project support is unclear after a request for new maintainers - [source](https://github.com/fifemon/graphql-datasource/issues/77). -{{% /admonition %}} - -> **Migration available - potential alternative:** The [Infinity](https://grafana.com/grafana/plugins/yesoreyeram-infinity-datasource/) data source supports GraphQL. - -### [Cloudera Manager](https://grafana.com/grafana/plugins/foursquare-clouderamanager-datasource/) - -Latest Version: 0.9.3 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/foursquare/datasource-plugin-clouderamanager) in the past 7 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Simple Annotations](https://grafana.com/grafana/plugins/fzakaria-simple-annotations-datasource/) - -Latest Version: 1.0.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Plugin only claims support for Grafana v4.x.x. -{{% /admonition %}} - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/fzakaria/simple-annotations-plugin/) in the past 6 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -{{% admonition type="warning" %}} -Developer no longer maintains the project, but is open to contributions: https://github.com/fzakaria/simple-annotations-plugin/issues/2 -{{% /admonition %}} - -### [Gnocchi](https://grafana.com/grafana/plugins/gnocchixyz-gnocchi-datasource/) - -Latest Version: 1.7.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Plugin only claims support for Grafana v4.x.x -{{% /admonition %}} - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/gnocchixyz/grafana-gnocchi-datasource) in the past 3 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [MetaQueries](https://grafana.com/grafana/plugins/goshposh-metaqueries-datasource/) - -Latest Version: 0.0.9 | Signature: Community | Last Updated: 2022 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/GoshPosh/grafana-meta-queries) in the past year suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Open Distro for Elasticsearch](https://grafana.com/grafana/plugins/grafana-es-open-distro-datasource/) - -Latest Version: 1.0.6 | Signature: Grafana | Last Updated: 2021 - -> **Migration available - plugin superseded:** Plugin was deprecated in favour of the [OpenSearch Plugin](https://grafana.com/grafana/plugins/grafana-opensearch-datasource/). - -### [KairosDB](https://grafana.com/grafana/plugins/grafana-kairosdb-datasource/) - -Latest Version: 3.0.2 | Signature: Grafana | Last Updated: 2021 - -{{% admonition type="warning" %}} -[Project repository](https://github.com/grafana/kairosdb-datasource) was archived on August 30th, 2021, and is no longer maintained. -{{% /admonition %}} - -### [SimpleJson](https://grafana.com/grafana/plugins/grafana-simple-json-datasource/) - -Latest Version: 1.4.2 | Signature: Grafana | Last Updated: 2021 - -> **Migration available - potential alternative:** [Project repository](https://github.com/grafana/simple-json-datasource) is no longer maintained, but a number of alternatives exist, including - [Infinity](https://grafana.com/grafana/plugins/yesoreyeram-infinity-datasource/), [JSON](https://grafana.com/grafana/plugins/simpod-json-datasource) and [JSON API](https://grafana.com/grafana/plugins/marcusolsson-json-datasource). - -{{% admonition type="note" %}} -If you're looking for an example of a data source plugin to start from, refer to [grafana-starter-datasource-backend](https://github.com/grafana/grafana-starter-datasource-backend). -{{% /admonition %}} - -### [openHistorian](https://grafana.com/grafana/plugins/gridprotectionalliance-openhistorian-datasource/) - -Latest Version: 1.0.3 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/GridProtectionAlliance/openHistorian-grafana/) in the past 2 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Hawkular](https://grafana.com/grafana/plugins/hawkular-datasource/) - -Latest Version: 1.1.2 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/hawkular/hawkular-grafana-datasource) in the past 5 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [PRTG](https://grafana.com/grafana/plugins/jasonlashua-prtg-datasource/) - -Latest Version: 4.0.4 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/neuralfraud/grafana-prtg) in the past 4 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -{{% admonition type="warning" %}} -Unmaintained since 2017 - [source](https://github.com/neuralfraud/grafana-prtg/wiki). -{{% /admonition %}} - -### [Monasca](https://grafana.com/grafana/plugins/monasca-datasource/) - -Latest Version: 1.0.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/openstack/monasca-grafana-datasource) in the past 2 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -{{% admonition type="warning" %}} -Last updated to support Grafana v7. -{{% /admonition %}} - -### [Monitoring Art](https://grafana.com/grafana/plugins/monitoringartist-monitoringart-datasource/) - -Latest Version: 1.0.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/monitoringartist/grafana-monitoring-art) in the past 6 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [GoogleCalendar](https://grafana.com/grafana/plugins/mtanda-google-calendar-datasource/) - -Latest Version: 1.0.5 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/mtanda/grafana-google-calendar-datasource) in the past 2 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [USGS Water Services](https://grafana.com/grafana/plugins/natel-usgs-datasource/) - -Latest Version: 0.0.3 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/NatelEnergy/natel-usgs-datasource) in the past 3 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [KapacitorSimpleJson](https://grafana.com/grafana/plugins/paytm-kapacitor-datasource/) - -Latest Version: 0.1.3 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/paytm/kapacitor-grafana-datasource-plugin) in the past 4 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Ambari Metrics](https://grafana.com/grafana/plugins/praj-ams-datasource/) - -Latest Version: 1.2.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/prajwalrao/ambari-metrics-grafana) in the past 5 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Solr](https://grafana.com/grafana/plugins/pue-solr-datasource/) - -Latest Version: 1.0.3 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Unclear progress on migration to React - [issue](https://github.com/pueteam/datasource-plugin-solr/issues/12). -{{% /admonition %}} - -> **Migration available - potential alternative:** Users could configure the solr-exporter for Prometheus as described [here](https://solr.apache.org/guide/solr/latest/deployment-guide/monitoring-with-prometheus-and-grafana.html). - -### [QuasarDB](https://grafana.com/grafana/plugins/quasardb-datasource/) - -Latest Version: 3.8.3 | Signature: Community | Last Updated: 2021 - -### [Blueflood](https://grafana.com/grafana/plugins/rackerlabs-blueflood-datasource/) - -Latest Version: 0.0.3 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/rax-maas/blueflood-grafana) in the past 7 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [NetXMS](https://grafana.com/grafana/plugins/radensolutions-netxms-datasource/) - -Latest Version: 1.2.3 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/netxms/grafana) in the past 2 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Sidewinder](https://grafana.com/grafana/plugins/sidewinder-datasource/) - -Latest Version: 0.2.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/srotya/sidewinder-grafana) in the past 5 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Skydive](https://grafana.com/grafana/plugins/skydive-datasource/) - -Latest Version: 1.2.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/skydive-project/skydive-grafana-datasource) in the past 4 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -{{% admonition type="warning" %}} -Issues suggest the entire project, not just the plugin, may be abandoned - [source](https://github.com/skydive-project/skydive/issues/2417). -{{% /admonition %}} - -### [Altinity plugin for ClickHouse](https://grafana.com/grafana/plugins/vertamedia-clickhouse-datasource/) - -Latest Version: 2.5.3 | Signature: Community | Last Updated: 2022 +This page explains how Grafana users might be impacted by the removal of Angular support based on plugins dependent on this legacy framework. You will also see if there is a migration option available for a given plugin. {{% admonition type="note" %}} -The [migration issue](https://github.com/Altinity/clickhouse-grafana/issues/475) has been assigned to a new major version milestone. -{{% /admonition %}} - -### [Pagerduty](https://grafana.com/grafana/plugins/xginn8-pagerduty-datasource/) - -Latest Version: 0.2.2 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/xginn8/grafana-pagerduty) in the past year suggests project _may_ not be actively maintained. -{{% /admonition %}} - -{{% admonition type="warning" %}} -Plugin only claims support for Grafana v5. -{{% /admonition %}} - -### [Chaos Mesh](https://grafana.com/grafana/plugins/yeya24-chaosmesh-datasource/) - -Latest Version: 0.2.3 | Signature: Community | Last Updated: 2022 - -{{% admonition type="warning" %}} -Plugin declares itself deprecated in favour of [chaosmeshorg-datasource](https://grafana.com/grafana/plugins/chaosmeshorg-datasource/) which also appears above in this list with warnings around its future. -{{% /admonition %}} - -## Panels - -### [FlowCharting](https://grafana.com/grafana/plugins/agenty-flowcharting-panel/) - -Latest Version: 0.9.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/algenty/grafana-flowcharting) in the past year suggests project _may_ not be actively maintained. -{{% /admonition %}} - -> **Migration available - potential alternative:** Grafana provides the native [Canvas]({{< relref "../../panels-visualizations/visualizations/canvas/" >}}) panel. - -### [HTML](https://grafana.com/grafana/plugins/aidanmountford-html-panel/) - -Latest Version: 0.0.2 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/aidanmountford/aidanmountford-html-panel) in the past 4 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -> **Migration available - potential alternative:** The [Text]({{< relref "../../panels-visualizations/visualizations/text/#html" >}}) panel included with Grafana supports rendering HTML content. Other plugins also exist which provide similar capabilities - [HTML](https://grafana.com/grafana/plugins/gapit-htmlgraphics-panel/) and [Dynamic Text](https://grafana.com/grafana/plugins/marcusolsson-dynamictext-panel/). - -### [Track Map](https://grafana.com/grafana/plugins/alexandra-trackmap-panel/) - -Latest Version: 1.2.6 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -[Issue](https://github.com/alexandrainst/alexandra-trackmap-panel/issues/72#issuecomment-1332179974) suggests problems with ongoing maintenance unless new contributors are found. -{{% /admonition %}} - -{{% admonition type="warning" %}} -[Migration issue](https://github.com/alexandrainst/alexandra-trackmap-panel/issues/105) has been marked as needing help. -{{% /admonition %}} - -### [PictureIt](https://grafana.com/grafana/plugins/bessler-pictureit-panel/) - -Latest Version: 1.0.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/vbessler/grafana-pictureit) in the past 6 years suggests project _may_ not be actively maintained. +We are greatly appreciative of the developers who have contributed plugins to the Grafana ecosystem. Guidance on migrating a plugin to React can be found in our [migration guide](/developers/plugin-tools/migration-guides/migrate-angularjs-to-react). {{% /admonition %}} -> **Migration available - potential alternative:** another plugin exists which provides similar capabilities - [ePict](https://grafana.com/grafana/plugins/larona-epict-panel/). - -### [Singlestat Math](https://grafana.com/grafana/plugins/blackmirror1-singlestat-math-panel/) - -Latest Version: 1.1.8 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/black-mirror-1/singlestat-math) in the past 5 years suggests project _may_ not be actively maintained. -{{% /admonition %}} +## What should I do with the list of AngularJS plugins? -### [Status By Group Panel](https://grafana.com/grafana/plugins/blackmirror1-statusbygroup-panel/) +Refer to the [table below](#angularjs-based-plugins) and take the appropriate action for you. -Latest Version: 1.1.2 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/black-mirror-1/Grafana_Status_panel) in the past 5 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Datatable Panel](https://grafana.com/grafana/plugins/briangann-datatable-panel/) - -Latest Version: 1.0.3 | Signature: Community | Last Updated: 2021 +- Consider the advice on whether to update, migrate to a listed alternative, or explore the Grafana plugins [catalog](/grafana/plugins) to find the most suitable option for your use case. +- Use our [detect-angular-dashboards](https://github.com/grafana/detect-angular-dashboards) open source tooling to list dashboards which have a dependency on Angular plugins. +- Check your Grafana instances for usage of these plugins. Refer to the documentation on [browsing installed plugins]({{< relref "../../administration/plugin-management/#browse-plugins" >}}). +- Customers of Grafana Enterprise and users of Grafana Cloud can also leverage [usage insights]({{< relref "../../dashboards/assess-dashboard-usage/" >}}) to prioritize any migration efforts. +- Review the plugin source repositories to add your support to any migration issues or consider forking the repo. {{% admonition type="note" %}} -Migration to React is planned - [issue](https://github.com/briangann/grafana-datatable-panel/issues/174). -{{% /admonition %}} - -### [GeoLoop](https://grafana.com/grafana/plugins/citilogics-geoloop-panel/) - -Latest Version: 1.1.2 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/CitiLogics/citilogics-geoloop-panel) in the past 2 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Progress List](https://grafana.com/grafana/plugins/corpglory-progresslist-panel/) - -Latest Version: 1.0.6 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/CorpGlory/grafana-progress-list) in the past 2 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Bubble Chart](https://grafana.com/grafana/plugins/digrich-bubblechart-panel/) - -Latest Version: 1.2.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/digrich/bubblechart-panel) in the past 3 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Blendstat](https://grafana.com/grafana/plugins/farski-blendstat-panel/) - -Latest Version: 1.0.3 | Signature: Community | Last Updated: 2021 - -> **Migration available - potential alternative:** plugin author recommends use of single stat panel and transformations functionality - [source](https://github.com/farski/blendstat-grafana/issues/11#issuecomment-1112158909). - -### [WindRose](https://grafana.com/grafana/plugins/fatcloud-windrose-panel/) - -Latest Version: 0.7.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/fatcloud/windrose-panel) in the past 4 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -> **Migration available - potential alternative:** another plugin exists which provides similar capabilities - [Operator Windrose](https://grafana.com/grafana/plugins/operato-windrose-panel/) - -### [Statusmap](https://grafana.com/grafana/plugins/flant-statusmap-panel/) - -Latest Version: 0.5.1 | Signature: Community | Last Updated: 2022 - -{{% admonition type="warning" %}} -Unknown whether migration to React will be undertaken - [migration issue](https://github.com/flant/grafana-statusmap/issues/302). -{{% /admonition %}} - -### [Singlestat](https://grafana.com/grafana/plugins/grafana-singlestat-panel/) - -Latest Version: 2.0.0 | Signature: Grafana | Last Updated: 2022 - -> **Migration available - plugin superseded:** Singlestat plugin was replaced by the [Stat]({{< relref "../../panels-visualizations/visualizations/stat/" >}})panel included in Grafana. - -### [Worldmap Panel](https://grafana.com/grafana/plugins/grafana-worldmap-panel/) - -Latest Version: 1.0.3 | Signature: Grafana | Last Updated: 2023 - -> **Migration available - plugin superseded:** Worldmap plugin was replaced by [Geomap]({{< relref "../../panels-visualizations/visualizations/geomap/" >}}) panel included in Grafana. - -### [Topology Panel](https://grafana.com/grafana/plugins/gretamosa-topology-panel/) - -Latest Version: 1.0.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/gretamosa/gretamosa-topology-panel) in the past 4 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [SVG](https://grafana.com/grafana/plugins/marcuscalidus-svg-panel/) - -Latest Version: 0.3.4 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/MarcusCalidus/marcuscalidus-svg-panel) in the past year suggests project _may_ not be actively maintained. -{{% /admonition %}} - -> **Migration available - potential alternative:** Grafana provides the native [Canvas]({{< relref "../../panels-visualizations/visualizations/canvas/" >}}) panel. - -> **Migration available - potential alternative:** other plugins exist which provide similar capabilities - [HTML](https://grafana.com/grafana/plugins/gapit-htmlgraphics-panel/), [Dynamic Text](https://grafana.com/grafana/plugins/marcusolsson-dynamictext-panel/) and [ACE.SVG](https://grafana.com/grafana/plugins/aceiot-svg-panel/). Note that the ACE.SVG panel has compatibility issues with Grafana versions 10.0.0-10.1.0. - -### [Annunciator](https://grafana.com/grafana/plugins/michaeldmoore-annunciator-panel/) - -Latest Version: 1.1.0 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Plugin developer has indicated they will retire the plugin once Angular support is discontinued - [source](https://github.com/michaeldmoore/michaeldmoore-annunciator-panel/issues/24#issuecomment-1479372673). -{{% /admonition %}} - -### [Multistat](https://grafana.com/grafana/plugins/michaeldmoore-multistat-panel/) - -Latest Version: 1.7.2 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Plugin developer has indicated they will retire the plugin once Angular support is discontinued - [source](https://github.com/michaeldmoore/michaeldmoore-multistat-panel/issues/71#issuecomment-1479372977). -{{% /admonition %}} - -### [HeatmapEpoch](https://grafana.com/grafana/plugins/mtanda-heatmap-epoch-panel/) - -Latest Version: 0.1.8 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Plugin advises caution as not stable; [project repository](https://github.com/mtanda/grafana-heatmap-epoch-panel) has not been updated in 7 years. -{{% /admonition %}} - -> **Migration available - potential alternative:** Other Heatmap panels exist including natively in Grafana - [learn more]({{< relref "../../panels-visualizations/visualizations/heatmap/" >}}). - -### [Histogram](https://grafana.com/grafana/plugins/mtanda-histogram-panel/) - -Latest Version: 0.1.7 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/mtanda/grafana-histogram-panel) in the past 7 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -> **Migration available - potential alternative:** other Histogram panels exist including natively in Grafana - [learn more]({{< relref "../../panels-visualizations/visualizations/histogram/" >}}). - -### [Separator](https://grafana.com/grafana/plugins/mxswat-separator-panel/) - -Latest Version: 1.0.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/mxswat/grafana-separator-panel) in the past 5 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -> **Migration available - potential alternative:** the [Text]({{< relref "../../panels-visualizations/visualizations/text/#html" >}}) panel can be used with no data to provide space within dashboards. - -### [Discrete](https://grafana.com/grafana/plugins/natel-discrete-panel/) - -Latest Version: 0.1.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/NatelEnergy/grafana-discrete-panel) in the past 3 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Influx Admin](https://grafana.com/grafana/plugins/natel-influx-admin-panel/) - -Latest Version: 0.0.6 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/NatelEnergy/grafana-influx-admin) in the past 5 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Plotly](https://grafana.com/grafana/plugins/natel-plotly-panel/) - -Latest Version: 0.0.7 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/NatelEnergy/grafana-plotly-panel) in the past 2 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -> **Migration available - potential alternative:** other plugins exist which provide similar capabilities - [nline-plotlyjs-panel](https://grafana.com/grafana/plugins/nline-plotlyjs-panel/) and [ae3e-plotly-panel](https://grafana.com/grafana/plugins/ae3e-plotly-panel/). - -### [Cal-HeatMap](https://grafana.com/grafana/plugins/neocat-cal-heatmap-panel/) - -Latest Version: 0.0.4 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Plugin advises caution as not stable; [project repository](https://github.com/NeoCat/grafana-cal-heatmap-panel) has not been updated in 7 years. -{{% /admonition %}} - -> **Migration available - potential alternative:** other Heatmap panels exist including natively in Grafana - [learn more]({{< relref "../../panels-visualizations/visualizations/heatmap/" >}}). - -### [Annotation Panel](https://grafana.com/grafana/plugins/novalabs-annotations-panel/) - -Latest Version: 0.0.2 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/novalabs/grafana-annotations-panel) in the past 6 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Carpet plot](https://grafana.com/grafana/plugins/petrslavotinek-carpetplot-panel/) - -Latest Version: 0.1.2 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/petrslavotinek/grafana-carpetplot) in the past 6 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [TrackMap](https://grafana.com/grafana/plugins/pr0ps-trackmap-panel/) - -Latest Version: 2.1.4 | Signature: Community | Last Updated: 2023 - -{{% admonition type="warning" %}} -Unknown whether migration to React will be undertaken - [migration issue](https://github.com/pR0Ps/grafana-trackmap-panel/issues/84). -{{% /admonition %}} - -### [AJAX](https://grafana.com/grafana/plugins/ryantxu-ajax-panel/) - -Latest Version: 0.1.0 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/ryantxu/ajax-panel) in the past 2 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [3D Globe Panel](https://grafana.com/grafana/plugins/satellogic-3d-globe-panel/) - -Latest Version: 0.1.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/satellogic/grafana-3d-globe-panel) in the past 5 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Heatmap](https://grafana.com/grafana/plugins/savantly-heatmap-panel/) - -Latest Version: 0.2.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/savantly-net/grafana-heatmap) in the past 6 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -> **Migration available - potential alternative:** other Heatmap panels exist including natively in Grafana - [learn more]({{< relref "../../panels-visualizations/visualizations/heatmap/" >}}). - -### [TrafficLight](https://grafana.com/grafana/plugins/smartmakers-trafficlight-panel/) - -Latest Version: 1.0.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/smartmakers/grafana-trafficlight) in the past 5 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Radar Graph](https://grafana.com/grafana/plugins/snuids-radar-panel/) - -Latest Version: 1.5.1 | Signature: Community | Last Updated: 2022 - -{{% admonition type="warning" %}} -Unknown whether migration to React will be undertaken - [migration issue](https://github.com/snuids/grafana-radar-panel/issues/29). -{{% /admonition %}} - -### [Traffic Lights](https://grafana.com/grafana/plugins/snuids-trafficlights-panel/) - -Latest Version: 1.6.0 | Signature: Community | Last Updated: 2023 - -{{% admonition type="warning" %}} -Unknown whether migration to React will be undertaken - [migration issue](https://github.com/snuids/trafficlights-panel/issues/44). -{{% /admonition %}} - -### [Status Panel](https://grafana.com/grafana/plugins/vonage-status-panel/) - -Latest Version: 1.0.11 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/Vonage/Grafana_Status_panel) in the past 3 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Boom Table](https://grafana.com/grafana/plugins/yesoreyeram-boomtable-panel/) - -Latest Version: 1.4.1 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Lack of recent activity in the [project repository](https://github.com/yesoreyeram/yesoreyeram-boomtable-panel) in the past 3 years suggests project _may_ not be actively maintained. -{{% /admonition %}} - -### [Parity Report](https://grafana.com/grafana/plugins/zuburqan-parity-report-panel/) - -Latest Version: 1.2.2 | Signature: Community | Last Updated: 2021 - -{{% admonition type="warning" %}} -Unknown whether migration to React will be undertaken - [migration issue](https://github.com/zuburqan/grafana-parity-report/issues/17). -{{% /admonition %}} +If you want to add any specific migration guidance for your plugin here or update our assessment, please open a PR by clicking **Suggest an edit** at the bottom of this page. +{{% /admonition %}} + +## Private plugins + +Grafana OSS and Grafana Enterprise support the creation of private plugins for use on local instances. These plugins may have a dependency on AngularJS and require an update. + +The `detect-angular-dashboards` tool listed above will include private plugins in its report **if the Grafana version is v10.1.0 or later**. + +Additionally, warning icons and messages will be displayed when browsing the catalog via **Administration** > **Plugins and Data** > **Plugins** in your local instance. + +## Automatic migration of plugins + +Certain legacy Grafana panel plugins automatically update to their React-based replacements when Angular support is disabled. This migration is usually available within the panel options, as shown in the screenshot below for World Map. Automatic migration can be triggered by setting the feature toggle `autoMigrateOldPanels` to `true`. + +Automatic migration is supported for the plugins shown in the following table. Each of the target plugins are included in Grafana as Core plugins which don't require installation. + +| Plugin | Migration target | +| ----------- | ---------------- | +| Graph (old) | Time Series | +| Singlestat | Stat | +| Stat (old) | Stat | +| Table (old) | Table | +| Worldmap | Geomap | + +A dashboard must still be saved with the new plugin ID to persist the change. + +# AngularJS-based plugins + +This table lists plugins which we have detected as having a dependency on AngularJS. For alternatives, consider included [Visualizations]({{< relref "../../panels-visualizations/visualizations" >}}) and [Data sources]({{< relref "../../datasources" >}}), as well as external plugins from the [catalog](/grafana/plugins). + +| Plugin ID | Name | Action | +| ----------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| grafana-worldmap-panel | Worldmap Panel | Migrate - [Geomap]({{< relref "../../panels-visualizations/visualizations/geomap" >}}) (core) replaced Worldmap - Note this should migrate when Angular is disabled. | +| natel-discrete-panel | Discrete | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| vonage-status-panel | Status Panel | Migrate - Consider [Stat]({{< relref "../../panels-visualizations/visualizations/stat" >}}) (core) or [Polystat](https://grafana.com/grafana/plugins/grafana-polystat-panel/) as potential alternatives. | +| grafana-simple-json-datasource | SimpleJson | Migrate - Consider [Infinity](https://grafana.com/grafana/plugins/yesoreyeram-infinity-datasource/) as a potential alternative. | +| natel-plotly-panel | Plotly | Migrate - Consider alternative [nline-plotlyjs-panel](https://grafana.com/grafana/plugins/nline-plotlyjs-panel/) plugin. | +| agenty-flowcharting-panel | FlowCharting | Migrate - Consider [Canvas]({{< relref "../../panels-visualizations/visualizations/canvas" >}}) (core) or [Diagram](https://grafana.com/grafana/plugins/jdbranham-diagram-panel/) as potential alternatives. | +| camptocamp-prometheus-alertmanager-datasource | Prometheus AlertManager | Update - Note the minimum version for React is 2.0.0. | +| briangann-gauge-panel | D3 Gauge | Update - Note the minimum version for React is 2.0.0. We recommend the latest. | +| yesoreyeram-boomtable-panel | Boom Table | Migrate - Consider [Table]({{< relref "../../panels-visualizations/visualizations/table" >}}) (core) and [transformations]({{< relref "../../panels-visualizations/query-transform-data/transform-data/" >}}) as appropriate. | +| briangann-datatable-panel | Datatable Panel | Wait - New version with React migration is planned. | +| flant-statusmap-panel | Statusmap | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| michaeldmoore-multistat-panel | Multistat | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| pr0ps-trackmap-panel | TrackMap | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| snuids-trafficlights-panel | Traffic Lights | Migrate - Consider [Traffic Light](https://grafana.com/grafana/plugins/heywesty-trafficlight-panel/) as a potential alternative. | +| vertamedia-clickhouse-datasource | Altinity plugin for ClickHouse | Update - Note the minimum version for React is 3.0.0. | +| petrslavotinek-carpetplot-panel | Carpet plot | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| ryantxu-ajax-panel | AJAX | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| michaeldmoore-annunciator-panel | Annunciator | Migrate - Consider [Stat]({{< relref "../../panels-visualizations/visualizations/stat" >}}) (core). | +| marcuscalidus-svg-panel | SVG | Migrate - Consider alternatives such as [Canvas]({{< relref "../../panels-visualizations/visualizations/canvas" >}}) (core), [Colored SVG](https://grafana.com/grafana/plugins/snuids-svg-panel/), or others. | +| neocat-cal-heatmap-panel | Cal-HeatMap | Migrate - Consider [Heatmap]({{< relref "../../panels-visualizations/visualizations/heatmap" >}}) (core) visualization. | +| blackmirror1-singlestat-math-panel | Singlestat Math | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| scadavis-synoptic-panel | SCADAvis Synoptic Panel | Update - Note the minimum version for React is 2.0. | +| farski-blendstat-panel | Blendstat | Migrate - Consider [Stat]({{< relref "../../panels-visualizations/visualizations/stat" >}}) (core) and [transformations]({{< relref "../../panels-visualizations/query-transform-data/transform-data/" >}}) as appropriate. | +| savantly-heatmap-panel | Heatmap | Migrate - Consider [Heatmap]({{< relref "../../panels-visualizations/visualizations/heatmap" >}}) (core) visualization. | +| mtanda-histogram-panel | Histogram | Migrate - Consider included [Histogram]({{< relref "../../panels-visualizations/visualizations/histogram" >}}) visualization. | +| snuids-radar-panel | Radar Graph | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| fatcloud-windrose-panel | WindRose | Migrate - Consider alternative [Operator Windrose](https://grafana.com/grafana/plugins/operato-windrose-panel/) plugin. | +| bessler-pictureit-panel | PictureIt | Migrate - Consider alternative [ePict](https://grafana.com/grafana/plugins/larona-epict-panel/) plugin. | +| digrich-bubblechart-panel | Bubble Chart | Update - Note the minimum version for React is 2.0.1. We recommend the latest. | +| corpglory-progresslist-panel | Progress List | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| aidanmountford-html-panel | HTML | Migrate - Consider alternatives such as [Text]({{< relref "../../panels-visualizations/visualizations/text" >}}) (core), [HTML](https://grafana.com/grafana/plugins/gapit-htmlgraphics-panel), or others. | +| fifemon-graphql-datasource | GraphQL Data Source | Wait - Removal of AngularJS is planned. Consider [Infinity](https://grafana.com/grafana/plugins/yesoreyeram-infinity-datasource/) plugin as alternative. | +| goshposh-metaqueries-datasource | MetaQueries | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| mxswat-separator-panel | Separator | Migrate - Consider alternative [Text]({{< relref "../../panels-visualizations/visualizations/text" >}}) panel (core) which can be empty and used as a separator. | +| natel-influx-admin-panel | Influx Admin | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| doitintl-bigquery-datasource | Google BigQuery | Migrate - Consider [Grafana Big Query](https://grafana.com/grafana/plugins/grafana-bigquery-datasource/) plugin. | +| satellogic-3d-globe-panel | 3D Globe Panel | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| foursquare-clouderamanager-datasource | Cloudera Manager | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| grafana-splunk-datasource | Splunk | Update - Note the minimum version for React is 4.1.0. We recommend the latest. | +| grafana-singlestat-panel | Singlestat | Migrate - Consider [Stat]({{< relref "../../panels-visualizations/visualizations/stat" >}}) panel (core). | +| blackmirror1-statusbygroup-panel | Status By Group Panel | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| novalabs-annotations-panel | Annotation Panel | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| jasonlashua-prtg-datasource | PRTG | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| ryantxu-annolist-panel | Annotation List | Migrate - Consider [annotations list]({{< relref "../../panels-visualizations/visualizations/annotations" >}}) (core). | +| cloudflare-app | Cloudflare Grafana App | Migrate - Consider using the [Cloudflare Dashboard](https://dash.cloudflare.com/?to=/:account/:zone/analytics/dns) or [DNS Analytics API](https://developers.cloudflare.com/api/operations/dns-analytics-table). | +| smartmakers-trafficlight-panel | TrafficLight | Migrate - Consider [Traffic Light](https://grafana.com/grafana/plugins/heywesty-trafficlight-panel/) as a potential alternative. | +| zuburqan-parity-report-panel | Parity Report | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| citilogics-geoloop-panel | GeoLoop | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| xginn8-pagerduty-datasource | Pagerduty | Wait - We are developing an Enterprise plugin for Pagerduty targeted for availability in Q1 2024. Note that all roadmap items are subject to change. | +| gretamosa-topology-panel | Topology Panel | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| fzakaria-simple-annotations-datasource | Simple Annotations | Migrate - Check for annotations support within your data sources to remove dependency on this plugin. | +| oci-metrics-datasource | Oracle Cloud Infrastructure Metrics | Update - Note the minimum version for React is 5.0.0. | +| abhisant-druid-datasource | Druid | Migrate - Migrate to replacement [Druid](https://grafana.com/grafana/plugins/grafadruid-druid-datasource/) plugin. | +| devopsprodigy-kubegraf-app | DevOpsProdigy KubeGraf | Migrate - Consider [Grafana Kubernetes Monitoring](https://grafana.com/solutions/kubernetes/) (Grafana Cloud only). | +| mtanda-heatmap-epoch-panel | HeatmapEpoch | Migrate - Consider [Heatmap]({{< relref "../../panels-visualizations/visualizations/heatmap" >}}) (core) visualization. | +| alexandra-trackmap-panel | Track Map | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| gnocchixyz-gnocchi-datasource | Gnocchi | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| tencentcloud-monitor-app | Tencent Cloud Monitor | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| andig-darksky-datasource | DarkSky | Remove - Note that support for the DarkSky API was ended by Apple in March 2023. | +| mtanda-google-calendar-datasource | GoogleCalendar | Wait - Migration to React is planned. | +| ntop-ntopng-datasource | ntopng | Migrate - Consider [InfluxDB]({{< relref "../../datasources/influxdb/" >}}) (core), with additional guidance available [here](https://www.ntop.org/guides/ntopng/basic_concepts/timeseries.html#influxdb-driver). | +| ayoungprogrammer-finance-datasource | Finance | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| grafana-kairosdb-datasource | KairosDB | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| fastweb-openfalcon-datasource | Open-Falcon | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| praj-ams-datasource | Ambari Metrics | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| monasca-datasource | Monasca | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| grafana-strava-datasource | Strava | Update - Note the minimum version for React is 1.6.0. We recommend the latest. | +| gridprotectionalliance-osisoftpi-datasource | OSIsoft-PI | Update - Note the minimum version for React is 4.0.0. We recommend the latest. | +| monitoringartist-monitoringart-datasource | Monitoring Art | Migrate - Browse included visualizations and plugins catalog for potential alternatives. | +| hawkular-datasource | Hawkular | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| ovh-warp10-datasource | Warp 10 | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| natel-usgs-datasource | USGS Water Services | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| radensolutions-netxms-datasource | NetXMS | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| ibm-apm-datasource | IBM APM | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| cognitedata-datasource | Cognite Data Fusion | Update - Note the minimum version for React is 4.0.0. We recommend the latest. | +| linksmart-sensorthings-datasource | LinkSmart SensorThings | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| pue-solr-datasource | Solr | Migrate - Consider this [guidance](https://solr.apache.org/guide/solr/latest/deployment-guide/monitoring-with-prometheus-and-grafana.html) on using solr-exporter for prometheus. | +| paytm-kapacitor-datasource | KapacitorSimpleJson | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| oci-logs-datasource | Oracle Cloud Infrastructure Logs | Update - Note the minimum version for React is 4.0.0. | +| gridprotectionalliance-openhistorian-datasource | openHistorian | Wait - Note that new version with React migration is planned. | +| devicehive-devicehive-datasource | DeviceHive | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| rackerlabs-blueflood-datasource | Blueflood | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| udoprog-heroic-datasource | Heroic | Migrate - Note that Heroic DB has been discontinued. | +| akumuli-datasource | Akumuli | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| bmchelix-ade-datasource | BMC Helix | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| sidewinder-datasource | Sidewinder | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| linksmart-hds-datasource | LinkSmart HDS Datasource | Migrate - browse included data sources and plugins catalog for potential alternatives. | +| skydive-datasource | Skydive | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| quasardb-datasource | QuasarDB | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| spotify-heroic-datasource | Heroic | Migrate - Note that Heroic DB has been discontinued. | +| grafana-es-open-distro-datasource | Open Distro for Elasticsearch | Migrate - Note that [OpenSearch](https://grafana.com/grafana/plugins/grafana-opensearch-datasource/) replaced Open Distro for Elasticseach. | +| humio-datasource | Humio | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| yeya24-chaosmesh-datasource | Chaos Mesh | Migrate - Note that plugin was replaced by [chaosmeshorg-datasource](https://grafana.com/grafana/plugins/chaosmeshorg-datasource/). | +| kentik-connect-app | Kentik Connect Pro | Update - Note the minimum version for React is 1.7.0. | +| chaosmeshorg-datasource | Chaos Mesh | Update - Note the minimum version for React is 3.0.0. | +| aquaqanalytics-kdbadaptor-datasource | kdb+ | Migrate - Note that [kdb+ backend](https://grafana.com/grafana/plugins/aquaqanalytics-kdbbackend-datasource) replaced kdb.+. | +| alexanderzobnin-zabbix-app | Zabbix | Update - Note the minimum version for React is 4.3.0. We recommend the latest. Recently brought under Grafana signature. | +| bosun-app | Bosun | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| belugacdn-app | BelugaCDN | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| grafana-azure-data-explorer-datasource | Azure Data Explorer Datasource | Update - The minimum supported version is 3.5.1. We recommend the latest. | +| ddurieux-glpi-app | glpi | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| fetzerch-sunandmoon-datasource | Sun and Moon | Update - Note the minimum version for React is 0.3.0. | +| grafana-clock-panel | Clock | Update - Note the minimum version for React is 1.1.0. We recommend the latest. | +| grafana-github-datasource | GitHub | Update - Note the minimum version for React is 1.3.3. We recommend the latest. | +| grafana-datadog-datasource | Datadog | Update - Note the minimum version for React is 3.0.0. We recommend the latest. | +| grafana-gitlab-datasource | Gitlab | Update - Note the minimum version for React is 1.1.0. We recommend the latest. | +| grafana-iot-twinmaker-app | AWS IoT TwinMaker App | Update - Note the minimum version for React is 1.6.3. We recommend the latest. | +| grafana-newrelic-datasource | New Relic | Update - Note the minimum version for React is 3.0.0. We recommend the latest. | +| grafana-opensearch-datasource | Opensearch | Update - Note the minimum version for React is 2.0.0. We recommend the latest. | +| grafana-oracle-datasource | Oracle | Update - Note the minimum version for React is 2.0.6. We recommend the latest. | +| grafana-piechart-panel | Pie Chart | Migrate - Note that [Pie Chart]({{< relref "../../panels-visualizations/visualizations/pie-chart" >}}) (core) replaced Pie Chart. | +| grafana-polystat-panel | Polystat | Update - Note the minimum version for React is 2.0.0. We recommend the latest. | +| grafana-servicenow-datasource | ServiceNow | Update - Note the minimum version for React is 2.0.2. We recommend the latest. | +| grafana-synthetic-monitoring-app | Synthetic Monitoring | Update - Note the minimum version for React is 0.7.3. We recommend the latest. | +| grafana-wavefront-datasource | Wavefront | Update - Note the minimum version for React is 2.0.0. We recommend the latest. | +| hadesarchitect-cassandra-datasource | Apache Cassandra | Update - Note the minimum version for React is 2.1.1. We recommend the latest. | +| instana-datasource | Instana | Update - Note the minimum version for React is 3.0.0. We recommend the latest. | +| jdbranham-diagram-panel | Diagram | Update - Note the minimum version for React is 1.7.1. We recommend the latest. | +| larona-epict-panel | ePict | Update - Note the minimum version for React is 2.0.0. We recommend the latest. | +| moogsoft-aiops-app | Moogsoft AIOps | Update - Note the minimum version for React is 9.0.0. | +| opennms-helm-app | OpenNMS Helm | Migrate - Note that [OpenNMS Plugin for Grafana](https://grafana.com/grafana/plugins/opennms-opennms-app/) replaced OpenNMS Helm. | +| percona-percona-app | Percona | Migrate - Consider use of [Percona dashboards](https://github.com/percona/grafana-dashboards/). | +| novatec-sdg-panel | Service Dependency Graph | Update - Note the minimum version for React is 4.0.3. | +| pierosavi-imageit-panel | ImageIt | Migrate - Consider [ePict](https://grafana.com/grafana/plugins/larona-epict-panel/) or browse plugins catalog for potential alternatives. | +| redis-app | Redis Application | Update - Note the minimum version for React is 1.2.0. We recommend the latest. | +| sbueringer-consul-datasource | Consul | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| simpod-json-datasource | JSON | Update - Note the minimum version for React is 0.3.0. We recommend the latest. | +| singlestat | Singlestat | Migrate - Note that [Stat]({{< relref "../../panels-visualizations/visualizations/stat" >}}) (core) replaced Singlestat. | +| sni-pnp-datasource | PNP | Update - Note the minimum version for React is 2.0.0. We recommend the latest. | +| sni-thruk-datasource | Thruk | Update - Note the minimum version for React is 2.0.0. We recommend the latest. | +| stagemonitor-elasticsearch-app | stagemonitor Elasticsearch | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| tdengine-datasource | TDengine Datasource | Update - Note the minimum version for React is 3.3.0. We recommend the latest. | +| vertica-grafana-datasource | Vertica | Update - Note the minimum version for React is 2.0.0. We recommend the latest. | +| voxter-app | Voxter VoIP Platform Metrics | Migrate - Browse included data sources and plugins catalog for potential alternatives. | +| graph | Graph (old) | Migrate - Note that this is replaced by [Time Series]({{< relref "../../panels-visualizations/visualizations/time-series" >}}) (core) - This plugin should migrate when Angular is disabled. Also consider Bar Chart or Histogram if appropriate. | +| table-old | Table (old) | Migrate - Note that this is replaced by [Table]({{< relref "../../panels-visualizations/visualizations/table" >}}) (core) - This plugin should migrate when AngularJS is disabled. | +| shorelinesoftware-shoreline-datasource | Shoreline Data Source | Update - Note the minimum version for React is 1.2.1. We recommend the latest. | diff --git a/docs/sources/developers/http_api/_index.md b/docs/sources/developers/http_api/_index.md index e986b3f1a56f4..806ab1f865051 100644 --- a/docs/sources/developers/http_api/_index.md +++ b/docs/sources/developers/http_api/_index.md @@ -27,7 +27,7 @@ Since version 8.4, HTTP API details are [specified](https://editor.swagger.io/?u Starting from version 9.1, there is also a [OpenAPI v3 specification](https://editor.swagger.io/?url=https://raw.githubusercontent.com/grafana/grafana/main/public/openapi3.json) (generated by the v2 one). -Users can browser and try out both via the Swagger UI editor (served by the grafana server) by navigating to `/swagger`. +Users can browser and try out both via the Swagger UI editor (served by the grafana server) by navigating to `/swagger-ui`. ## Authenticating API requests diff --git a/docs/sources/developers/http_api/access_control.md b/docs/sources/developers/http_api/access_control.md index 695f8d129e664..72c5aec8a7674 100644 --- a/docs/sources/developers/http_api/access_control.md +++ b/docs/sources/developers/http_api/access_control.md @@ -383,12 +383,12 @@ Content-Type: application/json #### Status codes -| Code | Description | -| ---- | ------------------------------------------------------------------------------------- | -| 200 | Role is updated. | -| 400 | Bad request (invalid json, missing content-type, missing or invalid fields, etc.). | -| 403 | Access denied (one of the specified permissions is not assigned to the the requester) | -| 500 | Unexpected error. Refer to body and/or server logs for more details. | +| Code | Description | +| ---- | ---------------------------------------------------------------------------------- | +| 200 | Role is updated. | +| 400 | Bad request (invalid json, missing content-type, missing or invalid fields, etc.). | +| 403 | Access denied (one of the specified permissions is not assigned to the requester) | +| 500 | Unexpected error. Refer to body and/or server logs for more details. | ### Update a role @@ -498,13 +498,13 @@ For more information, refer to [Create role validation errors]({{< ref "#create- #### Status codes -| Code | Description | -| ---- | ------------------------------------------------------------------------------------- | -| 200 | Role is updated. | -| 400 | Bad request (invalid json, missing content-type, missing or invalid fields, etc.). | -| 403 | Access denied (one of the specified permissions is not assigned to the the requester) | -| 404 | Role was not found to update. | -| 500 | Unexpected error. Refer to body and/or server logs for more details. | +| Code | Description | +| ---- | ---------------------------------------------------------------------------------- | +| 200 | Role is updated. | +| 400 | Bad request (invalid json, missing content-type, missing or invalid fields, etc.). | +| 403 | Access denied (one of the specified permissions is not assigned to the requester) | +| 404 | Role was not found to update. | +| 500 | Unexpected error. Refer to body and/or server logs for more details. | ### Delete a custom role @@ -532,7 +532,7 @@ Accept: application/json | Param | Type | Required | Description | | ------ | ------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| force | boolean | No | When set to `true`, the role will be deleted with all it's assignments. | +| force | boolean | No | When set to `true`, the role will be deleted with all its assignments. | | global | boolean | No | A flag indicating if the role is global or not. If set to false, the default org ID of the authenticated user will be used from the request. Refer to the [About RBAC]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control" >}}) for more information. | #### Example response diff --git a/docs/sources/developers/http_api/admin.md b/docs/sources/developers/http_api/admin.md index b7a40e1d7418c..cddfced04828e 100644 --- a/docs/sources/developers/http_api/admin.md +++ b/docs/sources/developers/http_api/admin.md @@ -473,45 +473,6 @@ Content-Type: application/json {"message": "User deleted"} ``` -## Pause all alerts - -`POST /api/admin/pause-all-alerts` - -{{% admonition type="note" %}} -This API is relevant for the [legacy dashboard alerts](https://grafana.com/docs/grafana/v8.5/alerting/old-alerting/) only. For default alerting, use silences to stop alerts from being delivered. -{{% /admonition %}} - -Only works with Basic Authentication (username and password). See [introduction](http://docs.grafana.org/http_api/admin/#admin-api) for an explanation. - -**Example Request**: - -```http -POST /api/admin/pause-all-alerts HTTP/1.1 -Accept: application/json -Content-Type: application/json - -{ - "paused": true -} -``` - -JSON Body schema: - -- **paused** – If true then all alerts are to be paused, false unpauses all alerts. - -**Example Response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -{ - "state": "Paused", - "message": "alert paused", - "alertsAffected": 1 -} -``` - ## Auth tokens for User `GET /api/admin/users/:id/auth-tokens` @@ -654,8 +615,6 @@ Content-Type: application/json `POST /api/admin/provisioning/plugins/reload` -`POST /api/admin/provisioning/notifications/reload` - `POST /api/admin/provisioning/access-control/reload` `POST /api/admin/provisioning/alerting/reload` @@ -676,7 +635,6 @@ See note in the [introduction]({{< ref "#admin-api" >}}) for an explanation. | provisioning:reload | provisioners:dashboards | dashboards | | provisioning:reload | provisioners:datasources | datasources | | provisioning:reload | provisioners:plugins | plugins | -| provisioning:reload | provisioners:notifications | notifications | | provisioning:reload | provisioners:alerting | alerting | **Example Request**: diff --git a/docs/sources/developers/http_api/alerting.md b/docs/sources/developers/http_api/alerting.md deleted file mode 100644 index ceece602a88b7..0000000000000 --- a/docs/sources/developers/http_api/alerting.md +++ /dev/null @@ -1,184 +0,0 @@ ---- -aliases: - - ../../http_api/alerting/ -canonical: /docs/grafana/latest/developers/http_api/alerting/ -description: Grafana Alerts HTTP API -keywords: - - grafana - - http - - documentation - - api - - alerting - - alerts -labels: - products: - - enterprise - - oss -title: Legacy Alerting API ---- - -# Legacy Alerting API - -{{% admonition type="note" %}} -Starting with v9.0, the Legacy Alerting HTTP API is deprecated. It will be removed in a future release. -{{% /admonition %}} - -This topic is relevant for the [legacy dashboard alerts](/docs/grafana/v8.5/alerting/old-alerting/) only. - -If you are using Grafana Alerting, refer to [Alerting provisioning API]({{< relref "./alerting_provisioning" >}}) - -You can find Grafana Alerting API specification details [here](https://editor.swagger.io/?url=https://raw.githubusercontent.com/grafana/grafana/main/pkg/services/ngalert/api/tooling/post.json). Also, refer to [Grafana Alerting alerts documentation][] for details on how to create and manage new alerts. - -You can use the Alerting API to get information about legacy dashboard alerts and their states but this API cannot be used to modify the alert. -To create new alerts or modify them you need to update the dashboard JSON that contains the alerts. - -## Get alerts - -`GET /api/alerts/` - -**Example Request**: - -```http -GET /api/alerts HTTP/1.1 -Accept: application/json -Content-Type: application/json -Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk -``` - -Querystring Parameters: - -These parameters are used as querystring parameters. For example: - -`/api/alerts?dashboardId=1` - -- **dashboardId** – Limit response to alerts in specified dashboard(s). You can specify multiple dashboards, e.g. dashboardId=23&dashboardId=35. -- **panelId** – Limit response to alert for a specified panel on a dashboard. -- **query** - Limit response to alerts having a name like this value. -- **state** - Return alerts with one or more of the following alert states: `ALL`,`no_data`, `paused`, `alerting`, `ok`, `pending`. To specify multiple states use the following format: `?state=paused&state=alerting` -- **limit** - Limit response to _X_ number of alerts. -- **folderId** – Limit response to alerts of dashboards in specified folder(s). You can specify multiple folders, e.g. folderId=23&folderId=35. -- **dashboardQuery** - Limit response to alerts having a dashboard name like this value. -- **dashboardTag** - Limit response to alerts of dashboards with specified tags. To do an "AND" filtering with multiple tags, specify the tags parameter multiple times e.g. dashboardTag=tag1&dashboardTag=tag2. - -**Example Response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -[ - { - "id": 1, - "dashboardId": 1, - "dashboardUId": "ABcdEFghij" - "dashboardSlug": "sensors", - "panelId": 1, - "name": "fire place sensor", - "state": "alerting", - "newStateDate": "2018-05-14T05:55:20+02:00", - "evalDate": "0001-01-01T00:00:00Z", - "evalData": null, - "executionError": "", - "url": "http://grafana.com/dashboard/db/sensors" - } -] -``` - -## Get alert by id - -`GET /api/alerts/:id` - -**Example Request**: - -```http -GET /api/alerts/1 HTTP/1.1 -Accept: application/json -Content-Type: application/json -Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk -``` - -**Example Response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -{ - "id": 1, - "dashboardId": 1, - "dashboardUId": "ABcdEFghij" - "dashboardSlug": "sensors", - "panelId": 1, - "name": "fire place sensor", - "state": "alerting", - "message": "Someone is trying to break in through the fire place", - "newStateDate": "2018-05-14T05:55:20+02:00", - "evalDate": "0001-01-01T00:00:00Z", - "evalData": "evalMatches": [ - { - "metric": "movement", - "tags": { - "name": "fireplace_chimney" - }, - "value": 98.765 - } - ], - "executionError": "", - "url": "http://grafana.com/dashboard/db/sensors" -} -``` - -**Important Note**: -"evalMatches" data is cached in the db when and only when the state of the alert changes -(e.g. transitioning from "ok" to "alerting" state). - -If data from one server triggers the alert first and, before that server is seen leaving alerting state, -a second server also enters a state that would trigger the alert, the second server will not be visible in "evalMatches" data. - -## Pause alert by id - -`POST /api/alerts/:id/pause` - -**Example Request**: - -```http -POST /api/alerts/1/pause HTTP/1.1 -Accept: application/json -Content-Type: application/json -Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk - -{ - "paused": true -} -``` - -The :id query parameter is the id of the alert to be paused or unpaused. - -JSON Body Schema: - -- **paused** – Can be `true` or `false`. True to pause an alert. False to unpause an alert. - -**Example Response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -{ - "alertId": 1, - "state": "Paused", - "message": "alert paused" -} -``` - -## Pause all alerts - -See [Admin API][]. - -{{% docs/reference %}} -[Admin API]: "/docs/grafana/ -> /docs/grafana//developers/http_api/admin#pause-all-alerts" -[Admin API]: "/docs/grafana/ -> /docs/grafana//developers/http_api/admin#pause-all-alerts" - -[Grafana Alerting alerts documentation]: "/docs/grafana/ -> /docs/grafana//alerting" -[Grafana Alerting alerts documentation]: "/docs/grafana-cloud/ -> /docs/grafana//alerting" -{{% /docs/reference %}} diff --git a/docs/sources/developers/http_api/alerting_notification_channels.md b/docs/sources/developers/http_api/alerting_notification_channels.md deleted file mode 100644 index 440237b3287e1..0000000000000 --- a/docs/sources/developers/http_api/alerting_notification_channels.md +++ /dev/null @@ -1,424 +0,0 @@ ---- -aliases: - - ../../http_api/alerting_notification_channels/ -canonical: /docs/grafana/latest/developers/http_api/alerting_notification_channels/ -description: Grafana Alerting Notification Channel HTTP API -keywords: - - grafana - - http - - documentation - - api - - alerting - - alerts - - notifications -labels: - products: - - enterprise - - oss -title: Legacy Alerting Notification Channels API ---- - -# Legacy Alerting Notification Channels API - -{{% admonition type="note" %}} -Starting with v9.0, the Legacy Alerting Notification Channels API is deprecated. It will be removed in a future release. -{{% /admonition %}} - -This page documents the Alerting Notification Channels API. - -## Identifier (id) vs unique identifier (uid) - -The identifier (id) of a notification channel is an auto-incrementing numeric value and is only unique per Grafana install. - -The unique identifier (uid) of a notification channel can be used for uniquely identify a notification channel between -multiple Grafana installs. It's automatically generated if not provided when creating a notification channel. The uid -allows having consistent URLs for accessing notification channels and when syncing notification channels between multiple -Grafana installations, refer to [alert notification channel provisioning]({{< relref "/docs/grafana/latest/administration/provisioning#alert-notification-channels" >}}). - -The uid can have a maximum length of 40 characters. - -## Get all notification channels - -Returns all notification channels that the authenticated user has permission to view. - -`GET /api/alert-notifications` - -**Example request**: - -```http -GET /api/alert-notifications HTTP/1.1 -Accept: application/json -Content-Type: application/json -Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk -``` - -**Example response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -[ - { - "id": 1, - "uid": "team-a-email-notifier", - "name": "Team A", - "type": "email", - "isDefault": false, - "sendReminder": false, - "disableResolveMessage": false, - "settings": { - "addresses": "dev@grafana.com" - }, - "created": "2018-04-23T14:44:09+02:00", - "updated": "2018-08-20T15:47:49+02:00" - } -] - -``` - -## Get all notification channels (lookup) - -Returns all notification channels, but with less detailed information. Accessible by any authenticated user and is mainly used by providing alert notification channels in Grafana UI when configuring alert rule. - -`GET /api/alert-notifications/lookup` - -**Example request**: - -```http -GET /api/alert-notifications/lookup HTTP/1.1 -Accept: application/json -Content-Type: application/json -Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk -``` - -**Example response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -[ - { - "id": 1, - "uid": "000000001", - "name": "Test", - "type": "email", - "isDefault": false - }, - { - "id": 2, - "uid": "000000002", - "name": "Slack", - "type": "slack", - "isDefault": false - } -] - -``` - -## Get notification channel by uid - -`GET /api/alert-notifications/uid/:uid` - -Returns the notification channel given the notification channel uid. - -**Example request**: - -```http -GET /api/alert-notifications/uid/team-a-email-notifier HTTP/1.1 -Accept: application/json -Content-Type: application/json -Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk -``` - -**Example response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -{ - "id": 1, - "uid": "team-a-email-notifier", - "name": "Team A", - "type": "email", - "isDefault": false, - "sendReminder": false, - "disableResolveMessage": false, - "settings": { - "addresses": "dev@grafana.com" - }, - "created": "2018-04-23T14:44:09+02:00", - "updated": "2018-08-20T15:47:49+02:00" -} -``` - -## Get notification channel by id - -`GET /api/alert-notifications/:id` - -Returns the notification channel given the notification channel id. - -**Example request**: - -```http -GET /api/alert-notifications/1 HTTP/1.1 -Accept: application/json -Content-Type: application/json -Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk -``` - -**Example response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -{ - "id": 1, - "uid": "team-a-email-notifier", - "name": "Team A", - "type": "email", - "isDefault": false, - "sendReminder": false, - "disableResolveMessage": false, - "settings": { - "addresses": "dev@grafana.com" - }, - "created": "2018-04-23T14:44:09+02:00", - "updated": "2018-08-20T15:47:49+02:00" -} -``` - -## Create notification channel - -You can find the full list of [supported notifiers](/docs/grafana/v8.5/alerting/old-alerting/notifications/) on the alert notifiers page. - -`POST /api/alert-notifications` - -**Example request**: - -```http -POST /api/alert-notifications HTTP/1.1 -Accept: application/json -Content-Type: application/json -Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk - -{ - "uid": "new-alert-notification", // optional - "name": "new alert notification", //Required - "type": "email", //Required - "isDefault": false, - "sendReminder": false, - "settings": { - "addresses": "dev@grafana.com" - } -} -``` - -**Example response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -{ - "id": 1, - "uid": "new-alert-notification", - "name": "new alert notification", - "type": "email", - "isDefault": false, - "sendReminder": false, - "settings": { - "addresses": "dev@grafana.com" - }, - "created": "2018-04-23T14:44:09+02:00", - "updated": "2018-08-20T15:47:49+02:00" -} -``` - -## Update notification channel by uid - -`PUT /api/alert-notifications/uid/:uid` - -Updates an existing notification channel identified by uid. - -**Example request**: - -```http -PUT /api/alert-notifications/uid/cIBgcSjkk HTTP/1.1 -Accept: application/json -Content-Type: application/json -Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk - -{ - "uid": "new-alert-notification", // optional - "name": "new alert notification", //Required - "type": "email", //Required - "isDefault": false, - "sendReminder": true, - "frequency": "15m", - "settings": { - "addresses": "dev@grafana.com" - } -} -``` - -**Example response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -{ - "id": 1, - "uid": "new-alert-notification", - "name": "new alert notification", - "type": "email", - "isDefault": false, - "sendReminder": true, - "frequency": "15m", - "settings": { - "addresses": "dev@grafana.com" - }, - "created": "2017-01-01 12:34", - "updated": "2017-01-01 12:34" -} -``` - -## Update notification channel by id - -`PUT /api/alert-notifications/:id` - -Updates an existing notification channel identified by id. - -**Example request**: - -```http -PUT /api/alert-notifications/1 HTTP/1.1 -Accept: application/json -Content-Type: application/json -Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk - -{ - "id": 1, - "uid": "new-alert-notification", // optional - "name": "new alert notification", //Required - "type": "email", //Required - "isDefault": false, - "sendReminder": true, - "frequency": "15m", - "settings": { - "addresses": "dev@grafana.com" - } -} -``` - -**Example response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -{ - "id": 1, - "uid": "new-alert-notification", - "name": "new alert notification", - "type": "email", - "isDefault": false, - "sendReminder": true, - "frequency": "15m", - "settings": { - "addresses": "dev@grafana.com" - }, - "created": "2017-01-01 12:34", - "updated": "2017-01-01 12:34" -} -``` - -## Delete alert notification by uid - -`DELETE /api/alert-notifications/uid/:uid` - -Deletes an existing notification channel identified by uid. - -**Example request**: - -```http -DELETE /api/alert-notifications/uid/team-a-email-notifier HTTP/1.1 -Accept: application/json -Content-Type: application/json -Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk -``` - -**Example response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -{ - "message": "Notification deleted" -} -``` - -## Delete alert notification by id - -`DELETE /api/alert-notifications/:id` - -Deletes an existing notification channel identified by id. - -**Example request**: - -```http -DELETE /api/alert-notifications/1 HTTP/1.1 -Accept: application/json -Content-Type: application/json -Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk -``` - -**Example response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -{ - "message": "Notification deleted" -} -``` - -## Test notification channel - -Sends a test notification message for the given notification channel type and settings. -You can find the full list of [supported notifiers](/alerting/notifications/#all-supported-notifier) at the alert notifiers page. - -`POST /api/alert-notifications/test` - -**Example request**: - -```http -POST /api/alert-notifications/test HTTP/1.1 -Accept: application/json -Content-Type: application/json -Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk - -{ - "type": "email", - "settings": { - "addresses": "dev@grafana.com" - } -} -``` - -**Example response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -{ - "message": "Test notification sent" -} -``` diff --git a/docs/sources/developers/http_api/alerting_provisioning.md b/docs/sources/developers/http_api/alerting_provisioning.md index c02a4bb02a440..0f9cfe3225a62 100644 --- a/docs/sources/developers/http_api/alerting_provisioning.md +++ b/docs/sources/developers/http_api/alerting_provisioning.md @@ -12,6 +12,7 @@ keywords: - alerts labels: products: + - cloud - enterprise - oss title: 'Alerting Provisioning HTTP API ' @@ -19,1525 +20,4 @@ title: 'Alerting Provisioning HTTP API ' # Alerting provisioning HTTP API -## Information - -### Version - -1.1.0 - -## Content negotiation - -### Consumes - -- application/json - -### Produces - -- application/json -- text/yaml -- application/yaml - -## All endpoints - -### Alert rules - -| Method | URI | Name | Summary | -| ------ | ------------------------------------------------------------------ | ----------------------------------------------------------------------- | ------------------------------------------------------- | -| DELETE | /api/v1/provisioning/alert-rules/{UID} | [route delete alert rule](#route-delete-alert-rule) | Delete a specific alert rule by UID. | -| GET | /api/v1/provisioning/alert-rules/{UID} | [route get alert rule](#route-get-alert-rule) | Get a specific alert rule by UID. | -| GET | /api/v1/provisioning/alert-rules/{UID}/export | [route get alert rule export](#route-get-alert-rule-export) | Export an alert rule in provisioning file format. | -| GET | /api/v1/provisioning/folder/{FolderUID}/rule-groups/{Group} | [route get alert rule group](#route-get-alert-rule-group) | Get a rule group. | -| GET | /api/v1/provisioning/folder/{FolderUID}/rule-groups/{Group}/export | [route get alert rule group export](#route-get-alert-rule-group-export) | Export an alert rule group in provisioning file format. | -| GET | /api/v1/provisioning/alert-rules | [route get alert rules](#route-get-alert-rules) | Get all the alert rules. | -| GET | /api/v1/provisioning/alert-rules/export | [route get alert rules export](#route-get-alert-rules-export) | Export all alert rules in provisioning file format. | -| POST | /api/v1/provisioning/alert-rules | [route post alert rule](#route-post-alert-rule) | Create a new alert rule. | -| PUT | /api/v1/provisioning/alert-rules/{UID} | [route put alert rule](#route-put-alert-rule) | Update an existing alert rule. | -| PUT | /api/v1/provisioning/folder/{FolderUID}/rule-groups/{Group} | [route put alert rule group](#route-put-alert-rule-group) | Update the interval of a rule group. | - -### Contact points - -**Note:** - -Contact point provisioning is for Grafana-managed alerts only. - -| Method | URI | Name | Summary | -| ------ | ------------------------------------------ | ----------------------------------------------------------------- | ------------------------------------------------------ | -| DELETE | /api/v1/provisioning/contact-points/{UID} | [route delete contactpoints](#route-delete-contactpoints) | Delete a contact point. | -| GET | /api/v1/provisioning/contact-points | [route get contactpoints](#route-get-contactpoints) | Get all the contact points. | -| GET | /api/v1/provisioning/contact-points/export | [route get contactpoints export](#route-get-contactpoints-export) | Export all contact points in provisioning file format. | -| POST | /api/v1/provisioning/contact-points | [route post contactpoints](#route-post-contactpoints) | Create a contact point. | -| PUT | /api/v1/provisioning/contact-points/{UID} | [route put contactpoint](#route-put-contactpoint) | Update an existing contact point. | - -### Notification policies - -| Method | URI | Name | Summary | -| ------ | ------------------------------------ | ------------------------------------------------------------- | ---------------------------------------------------------------- | -| DELETE | /api/v1/provisioning/policies | [route reset policy tree](#route-reset-policy-tree) | Clears the notification policy tree. | -| GET | /api/v1/provisioning/policies | [route get policy tree](#route-get-policy-tree) | Get the notification policy tree. | -| GET | /api/v1/provisioning/policies/export | [route get policy tree export](#route-get-policy-tree-export) | Export the notification policy tree in provisioning file format. | -| PUT | /api/v1/provisioning/policies | [route put policy tree](#route-put-policy-tree) | Sets the notification policy tree. | - -### Mute timings - -| Method | URI | Name | Summary | -| ------ | ---------------------------------------- | ----------------------------------------------------- | -------------------------------- | -| DELETE | /api/v1/provisioning/mute-timings/{name} | [route delete mute timing](#route-delete-mute-timing) | Delete a mute timing. | -| GET | /api/v1/provisioning/mute-timings/{name} | [route get mute timing](#route-get-mute-timing) | Get a mute timing. | -| GET | /api/v1/provisioning/mute-timings | [route get mute timings](#route-get-mute-timings) | Get all the mute timings. | -| POST | /api/v1/provisioning/mute-timings | [route post mute timing](#route-post-mute-timing) | Create a new mute timing. | -| PUT | /api/v1/provisioning/mute-timings/{name} | [route put mute timing](#route-put-mute-timing) | Replace an existing mute timing. | - -### Templates - -| Method | URI | Name | Summary | -| ------ | ------------------------------------- | ----------------------------------------------- | ------------------------------------------ | -| DELETE | /api/v1/provisioning/templates/{name} | [route delete template](#route-delete-template) | Delete a template. | -| GET | /api/v1/provisioning/templates/{name} | [route get template](#route-get-template) | Get a notification template. | -| GET | /api/v1/provisioning/templates | [route get templates](#route-get-templates) | Get all notification templates. | -| PUT | /api/v1/provisioning/templates/{name} | [route put template](#route-put-template) | Updates an existing notification template. | - -## Paths - -### Delete a specific alert rule by UID. (_RouteDeleteAlertRule_) - -``` -DELETE /api/v1/provisioning/alert-rules/{UID} -``` - -#### Parameters - -{{% responsive-table %}} - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| -------------------- | -------- | ------ | -------- | --------- | :------: | ------- | --------------------------------------------------------- | -| UID | `path` | string | `string` | | ✓ | | Alert rule UID | -| X-Disable-Provenance | `header` | string | `string` | | | | Allows editing of provisioned resources in the Grafana UI | - -{{% /responsive-table %}} - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| ----------------------------------- | ---------- | ---------------------------------------- | :---------: | --------------------------------------------- | -| [204](#route-delete-alert-rule-204) | No Content | The alert rule was deleted successfully. | | [schema](#route-delete-alert-rule-204-schema) | - -#### Responses - -##### 204 - The alert rule was deleted successfully. - -Status: No Content - -###### Schema - -### Delete a contact point. (_RouteDeleteContactpoints_) - -``` -DELETE /api/v1/provisioning/contact-points/{UID} -``` - -#### Consumes - -- application/json - -#### Parameters - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| ---- | ------ | ------ | -------- | --------- | :------: | ------- | ------------------------------------------ | -| UID | `path` | string | `string` | | ✓ | | UID is the contact point unique identifier | - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| -------------------------------------- | ---------- | ------------------------------------------- | :---------: | ------------------------------------------------ | -| [204](#route-delete-contactpoints-204) | No Content | The contact point was deleted successfully. | | [schema](#route-delete-contactpoints-204-schema) | - -#### Responses - -##### 204 - The contact point was deleted successfully. - -Status: No Content - -###### Schema - -### Delete a mute timing. (_RouteDeleteMuteTiming_) - -``` -DELETE /api/v1/provisioning/mute-timings/{name} -``` - -#### Parameters - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| ---- | ------ | ------ | -------- | --------- | :------: | ------- | ---------------- | -| name | `path` | string | `string` | | ✓ | | Mute timing name | - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| ------------------------------------ | ---------- | ----------------------------------------- | :---------: | ---------------------------------------------- | -| [204](#route-delete-mute-timing-204) | No Content | The mute timing was deleted successfully. | | [schema](#route-delete-mute-timing-204-schema) | - -#### Responses - -##### 204 - The mute timing was deleted successfully. - -Status: No Content - -###### Schema - -### Delete a template. (_RouteDeleteTemplate_) - -``` -DELETE /api/v1/provisioning/templates/{name} -``` - -#### Parameters - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| ---- | ------ | ------ | -------- | --------- | :------: | ------- | ------------- | -| name | `path` | string | `string` | | ✓ | | Template Name | - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| --------------------------------- | ---------- | -------------------------------------- | :---------: | ------------------------------------------- | -| [204](#route-delete-template-204) | No Content | The template was deleted successfully. | | [schema](#route-delete-template-204-schema) | - -#### Responses - -##### 204 - The template was deleted successfully. - -Status: No Content - -###### Schema - -### Get a specific alert rule by UID. (_RouteGetAlertRule_) - -``` -GET /api/v1/provisioning/alert-rules/{UID} -``` - -#### Parameters - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| ---- | ------ | ------ | -------- | --------- | :------: | ------- | -------------- | -| UID | `path` | string | `string` | | ✓ | | Alert rule UID | - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| -------------------------------- | --------- | -------------------- | :---------: | ------------------------------------------ | -| [200](#route-get-alert-rule-200) | OK | ProvisionedAlertRule | | [schema](#route-get-alert-rule-200-schema) | -| [404](#route-get-alert-rule-404) | Not Found | Not found. | | [schema](#route-get-alert-rule-404-schema) | - -#### Responses - -##### 200 - ProvisionedAlertRule - -Status: OK - -###### Schema - -[ProvisionedAlertRule](#provisioned-alert-rule) - -##### 404 - Not found. - -Status: Not Found - -###### Schema - -### Export an alert rule in provisioning file format. (_RouteGetAlertRuleExport_) - -``` -GET /api/v1/provisioning/alert-rules/{UID}/export -``` - -#### Produces - -- application/json -- application/yaml -- text/yaml - -#### Parameters - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| -------- | ------- | ------- | -------- | --------- | :------: | -------- | --------------------------------------------------------------------------------------------------------------------------------- | -| UID | `path` | string | `string` | | ✓ | | Alert rule UID | -| download | `query` | boolean | `bool` | | | | Whether to initiate a download of the file or not. | -| format | `query` | string | `string` | | | `"yaml"` | Format of the downloaded file, either yaml or json. Accept header can also be used, but the query parameter will take precedence. | - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| --------------------------------------- | --------- | ------------------ | :---------: | ------------------------------------------------- | -| [200](#route-get-alert-rule-export-200) | OK | AlertingFileExport | | [schema](#route-get-alert-rule-export-200-schema) | -| [404](#route-get-alert-rule-export-404) | Not Found | Not found. | | [schema](#route-get-alert-rule-export-404-schema) | - -#### Responses - -##### 200 - AlertingFileExport - -Status: OK - -###### Schema - -[AlertingFileExport](#alerting-file-export) - -##### 404 - Not found. - -Status: Not Found - -###### Schema - -### Get a rule group. (_RouteGetAlertRuleGroup_) - -``` -GET /api/v1/provisioning/folder/{FolderUID}/rule-groups/{Group} -``` - -#### Parameters - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| --------- | ------ | ------ | -------- | --------- | :------: | ------- | ----------- | -| FolderUID | `path` | string | `string` | | ✓ | | | -| Group | `path` | string | `string` | | ✓ | | | - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| -------------------------------------- | --------- | -------------- | :---------: | ------------------------------------------------ | -| [200](#route-get-alert-rule-group-200) | OK | AlertRuleGroup | | [schema](#route-get-alert-rule-group-200-schema) | -| [404](#route-get-alert-rule-group-404) | Not Found | Not found. | | [schema](#route-get-alert-rule-group-404-schema) | - -#### Responses - -##### 200 - AlertRuleGroup - -Status: OK - -###### Schema - -[AlertRuleGroup](#alert-rule-group) - -##### 404 - Not found. - -Status: Not Found - -###### Schema - -### Export an alert rule group in provisioning file format. (_RouteGetAlertRuleGroupExport_) - -``` -GET /api/v1/provisioning/folder/{FolderUID}/rule-groups/{Group}/export -``` - -#### Produces - -- application/json -- application/yaml -- text/yaml - -#### Parameters - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| --------- | ------- | ------- | -------- | --------- | :------: | -------- | --------------------------------------------------------------------------------------------------------------------------------- | -| FolderUID | `path` | string | `string` | | ✓ | | | -| Group | `path` | string | `string` | | ✓ | | | -| download | `query` | boolean | `bool` | | | | Whether to initiate a download of the file or not. | -| format | `query` | string | `string` | | | `"yaml"` | Format of the downloaded file, either yaml or json. Accept header can also be used, but the query parameter will take precedence. | - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| --------------------------------------------- | --------- | ------------------ | :---------: | ------------------------------------------------------- | -| [200](#route-get-alert-rule-group-export-200) | OK | AlertingFileExport | | [schema](#route-get-alert-rule-group-export-200-schema) | -| [404](#route-get-alert-rule-group-export-404) | Not Found | Not found. | | [schema](#route-get-alert-rule-group-export-404-schema) | - -#### Responses - -##### 200 - AlertingFileExport - -Status: OK - -###### Schema - -[AlertingFileExport](#alerting-file-export) - -##### 404 - Not found. - -Status: Not Found - -###### Schema - -### Get all the alert rules. (_RouteGetAlertRules_) - -``` -GET /api/v1/provisioning/alert-rules -``` - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| --------------------------------- | ------ | --------------------- | :---------: | ------------------------------------------- | -| [200](#route-get-alert-rules-200) | OK | ProvisionedAlertRules | | [schema](#route-get-alert-rules-200-schema) | - -#### Responses - -##### 200 - ProvisionedAlertRules - -Status: OK - -###### Schema - -[ProvisionedAlertRules](#provisioned-alert-rules) - -### Export all alert rules in provisioning file format. (_RouteGetAlertRulesExport_) - -``` -GET /api/v1/provisioning/alert-rules/export -``` - -#### Parameters - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| -------- | ------- | ------- | -------- | --------- | :------: | -------- | --------------------------------------------------------------------------------------------------------------------------------- | -| download | `query` | boolean | `bool` | | | | Whether to initiate a download of the file or not. | -| format | `query` | string | `string` | | | `"yaml"` | Format of the downloaded file, either yaml or json. Accept header can also be used, but the query parameter will take precedence. | - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| ---------------------------------------- | --------- | ------------------ | :---------: | -------------------------------------------------- | -| [200](#route-get-alert-rules-export-200) | OK | AlertingFileExport | | [schema](#route-get-alert-rules-export-200-schema) | -| [404](#route-get-alert-rules-export-404) | Not Found | Not found. | | [schema](#route-get-alert-rules-export-404-schema) | - -#### Responses - -##### 200 - AlertingFileExport - -Status: OK - -###### Schema - -[AlertingFileExport](#alerting-file-export) - -##### 404 - Not found. - -Status: Not Found - -###### Schema - -### Get all the contact points. (_RouteGetContactpoints_) - -``` -GET /api/v1/provisioning/contact-points -``` - -#### Parameters - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| ---- | ------- | ------ | -------- | --------- | :------: | ------- | -------------- | -| name | `query` | string | `string` | | | | Filter by name | - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| ----------------------------------- | ------ | ------------- | :---------: | --------------------------------------------- | -| [200](#route-get-contactpoints-200) | OK | ContactPoints | | [schema](#route-get-contactpoints-200-schema) | - -#### Responses - -##### 200 - ContactPoints - -Status: OK - -###### Schema - -[ContactPoints](#contact-points) - -### Export all contact points in provisioning file format. (_RouteGetContactpointsExport_) - -``` -GET /api/v1/provisioning/contact-points/export -``` - -#### Parameters - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| -------- | ------- | ------- | -------- | --------- | :------: | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| decrypt | `query` | boolean | `bool` | | | | Whether any contained secure settings should be decrypted or left redacted. Redacted settings will contain RedactedValue instead. Currently, only org admin can view decrypted secure settings. | -| download | `query` | boolean | `bool` | | | | Whether to initiate a download of the file or not. | -| format | `query` | string | `string` | | | `"yaml"` | Format of the downloaded file, either yaml or json. Accept header can also be used, but the query parameter will take precedence. | -| name | `query` | string | `string` | | | | Filter by name | - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| ------------------------------------------ | --------- | ------------------ | :---------: | ---------------------------------------------------- | -| [200](#route-get-contactpoints-export-200) | OK | AlertingFileExport | | [schema](#route-get-contactpoints-export-200-schema) | -| [403](#route-get-contactpoints-export-403) | Forbidden | PermissionDenied | | [schema](#route-get-contactpoints-export-403-schema) | - -#### Responses - -##### 200 - AlertingFileExport - -Status: OK - -###### Schema - -[AlertingFileExport](#alerting-file-export) - -##### 403 - PermissionDenied - -Status: Forbidden - -###### Schema - -[PermissionDenied](#permission-denied) - -### Get a mute timing. (_RouteGetMuteTiming_) - -``` -GET /api/v1/provisioning/mute-timings/{name} -``` - -#### Parameters - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| ---- | ------ | ------ | -------- | --------- | :------: | ------- | ---------------- | -| name | `path` | string | `string` | | ✓ | | Mute timing name | - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| --------------------------------- | --------- | ---------------- | :---------: | ------------------------------------------- | -| [200](#route-get-mute-timing-200) | OK | MuteTimeInterval | | [schema](#route-get-mute-timing-200-schema) | -| [404](#route-get-mute-timing-404) | Not Found | Not found. | | [schema](#route-get-mute-timing-404-schema) | - -#### Responses - -##### 200 - MuteTimeInterval - -Status: OK - -###### Schema - -[MuteTimeInterval](#mute-time-interval) - -##### 404 - Not found. - -Status: Not Found - -###### Schema - -### Get all the mute timings. (_RouteGetMuteTimings_) - -``` -GET /api/v1/provisioning/mute-timings -``` - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| ---------------------------------- | ------ | ----------- | :---------: | -------------------------------------------- | -| [200](#route-get-mute-timings-200) | OK | MuteTimings | | [schema](#route-get-mute-timings-200-schema) | - -#### Responses - -##### 200 - MuteTimings - -Status: OK - -###### Schema - -[MuteTimings](#mute-timings) - -### Get the notification policy tree. (_RouteGetPolicyTree_) - -``` -GET /api/v1/provisioning/policies -``` - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| --------------------------------- | ------ | ----------- | :---------: | ------------------------------------------- | -| [200](#route-get-policy-tree-200) | OK | Route | | [schema](#route-get-policy-tree-200-schema) | - -#### Responses - -##### 200 - Route - -Status: OK - -###### Schema - -[Route](#route) - -### Export the notification policy tree in provisioning file format. (_RouteGetPolicyTreeExport_) - -``` -GET /api/v1/provisioning/policies/export -``` - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| ---------------------------------------- | --------- | ------------------ | :---------: | -------------------------------------------------- | -| [200](#route-get-policy-tree-export-200) | OK | AlertingFileExport | | [schema](#route-get-policy-tree-export-200-schema) | -| [404](#route-get-policy-tree-export-404) | Not Found | NotFound | | [schema](#route-get-policy-tree-export-404-schema) | - -#### Responses - -##### 200 - AlertingFileExport - -Status: OK - -###### Schema - -[AlertingFileExport](#alerting-file-export) - -##### 404 - NotFound - -Status: Not Found - -###### Schema - -[NotFound](#not-found) - -### Get a notification template. (_RouteGetTemplate_) - -``` -GET /api/v1/provisioning/templates/{name} -``` - -#### Parameters - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| ---- | ------ | ------ | -------- | --------- | :------: | ------- | ------------- | -| name | `path` | string | `string` | | ✓ | | Template Name | - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| ------------------------------ | --------- | -------------------- | :---------: | ---------------------------------------- | -| [200](#route-get-template-200) | OK | NotificationTemplate | | [schema](#route-get-template-200-schema) | -| [404](#route-get-template-404) | Not Found | Not found. | | [schema](#route-get-template-404-schema) | - -#### Responses - -##### 200 - NotificationTemplate - -Status: OK - -###### Schema - -[NotificationTemplate](#notification-template) - -##### 404 - Not found. - -Status: Not Found - -###### Schema - -### Get all notification templates. (_RouteGetTemplates_) - -``` -GET /api/v1/provisioning/templates -``` - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| ------------------------------- | --------- | --------------------- | :---------: | ----------------------------------------- | -| [200](#route-get-templates-200) | OK | NotificationTemplates | | [schema](#route-get-templates-200-schema) | -| [404](#route-get-templates-404) | Not Found | Not found. | | [schema](#route-get-templates-404-schema) | - -#### Responses - -##### 200 - NotificationTemplates - -Status: OK - -###### Schema - -[NotificationTemplates](#notification-templates) - -##### 404 - Not found. - -Status: Not Found - -###### Schema - -### Create a new alert rule. (_RoutePostAlertRule_) - -``` -POST /api/v1/provisioning/alert-rules -``` - -#### Consumes - -- application/json - -#### Parameters - -{{% responsive-table %}} - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| -------------------- | -------- | ----------------------------------------------- | ----------------------------- | --------- | :------: | ------- | --------------------------------------------------------- | -| X-Disable-Provenance | `header` | string | `string` | | | | Allows editing of provisioned resources in the Grafana UI | -| Body | `body` | [ProvisionedAlertRule](#provisioned-alert-rule) | `models.ProvisionedAlertRule` | | | | | - -{{% /responsive-table %}} - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| --------------------------------- | ----------- | -------------------- | :---------: | ------------------------------------------- | -| [201](#route-post-alert-rule-201) | Created | ProvisionedAlertRule | | [schema](#route-post-alert-rule-201-schema) | -| [400](#route-post-alert-rule-400) | Bad Request | ValidationError | | [schema](#route-post-alert-rule-400-schema) | - -#### Responses - -##### 201 - ProvisionedAlertRule - -Status: Created - -###### Schema - -[ProvisionedAlertRule](#provisioned-alert-rule) - -##### 400 - ValidationError - -Status: Bad Request - -###### Schema - -[ValidationError](#validation-error) - -### Create a contact point. (_RoutePostContactpoints_) - -``` -POST /api/v1/provisioning/contact-points -``` - -#### Consumes - -- application/json - -#### Parameters - -{{% responsive-table %}} - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| -------------------- | -------- | ----------------------------------------------- | ----------------------------- | --------- | :------: | ------- | --------------------------------------------------------- | -| X-Disable-Provenance | `header` | string | `string` | | | | Allows editing of provisioned resources in the Grafana UI | -| Body | `body` | [EmbeddedContactPoint](#embedded-contact-point) | `models.EmbeddedContactPoint` | | | | | - -{{% /responsive-table %}} - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| ------------------------------------ | ----------- | -------------------- | :---------: | ---------------------------------------------- | -| [202](#route-post-contactpoints-202) | Accepted | EmbeddedContactPoint | | [schema](#route-post-contactpoints-202-schema) | -| [400](#route-post-contactpoints-400) | Bad Request | ValidationError | | [schema](#route-post-contactpoints-400-schema) | - -#### Responses - -##### 202 - EmbeddedContactPoint - -Status: Accepted - -###### Schema - -[EmbeddedContactPoint](#embedded-contact-point) - -##### 400 - ValidationError - -Status: Bad Request - -###### Schema - -[ValidationError](#validation-error) - -### Create a new mute timing. (_RoutePostMuteTiming_) - -``` -POST /api/v1/provisioning/mute-timings -``` - -#### Consumes - -- application/json - -#### Parameters - -{{% responsive-table %}} - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| -------------------- | -------- | --------------------------------------- | ------------------------- | --------- | :------: | ------- | --------------------------------------------------------- | -| X-Disable-Provenance | `header` | string | `string` | | | | Allows editing of provisioned resources in the Grafana UI | -| Body | `body` | [MuteTimeInterval](#mute-time-interval) | `models.MuteTimeInterval` | | | | | - -{{% /responsive-table %}} - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| ---------------------------------- | ----------- | ---------------- | :---------: | -------------------------------------------- | -| [201](#route-post-mute-timing-201) | Created | MuteTimeInterval | | [schema](#route-post-mute-timing-201-schema) | -| [400](#route-post-mute-timing-400) | Bad Request | ValidationError | | [schema](#route-post-mute-timing-400-schema) | - -#### Responses - -##### 201 - MuteTimeInterval - -Status: Created - -###### Schema - -[MuteTimeInterval](#mute-time-interval) - -##### 400 - ValidationError - -Status: Bad Request - -###### Schema - -[ValidationError](#validation-error) - -### Update an existing alert rule. (_RoutePutAlertRule_) - -``` -PUT /api/v1/provisioning/alert-rules/{UID} -``` - -#### Consumes - -- application/json - -#### Parameters - -{{% responsive-table %}} - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| -------------------- | -------- | ----------------------------------------------- | ----------------------------- | --------- | :------: | ------- | --------------------------------------------------------- | -| UID | `path` | string | `string` | | ✓ | | Alert rule UID | -| X-Disable-Provenance | `header` | string | `string` | | | | Allows editing of provisioned resources in the Grafana UI | -| Body | `body` | [ProvisionedAlertRule](#provisioned-alert-rule) | `models.ProvisionedAlertRule` | | | | | - -{{% /responsive-table %}} - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| -------------------------------- | ----------- | -------------------- | :---------: | ------------------------------------------ | -| [200](#route-put-alert-rule-200) | OK | ProvisionedAlertRule | | [schema](#route-put-alert-rule-200-schema) | -| [400](#route-put-alert-rule-400) | Bad Request | ValidationError | | [schema](#route-put-alert-rule-400-schema) | - -#### Responses - -##### 200 - ProvisionedAlertRule - -Status: OK - -###### Schema - -[ProvisionedAlertRule](#provisioned-alert-rule) - -##### 400 - ValidationError - -Status: Bad Request - -###### Schema - -[ValidationError](#validation-error) - -### Update the interval of a rule group. (_RoutePutAlertRuleGroup_) - -``` -PUT /api/v1/provisioning/folder/{FolderUID}/rule-groups/{Group} -``` - -#### Consumes - -- application/json - -#### Parameters - -{{% responsive-table %}} - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| -------------------- | -------- | ----------------------------------- | ----------------------- | --------- | :------: | ------- | --------------------------------------------------------- | -| FolderUID | `path` | string | `string` | | ✓ | | | -| Group | `path` | string | `string` | | ✓ | | | -| X-Disable-Provenance | `header` | string | `string` | | | | Allows editing of provisioned resources in the Grafana UI | -| Body | `body` | [AlertRuleGroup](#alert-rule-group) | `models.AlertRuleGroup` | | | | | - -{{% /responsive-table %}} - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| -------------------------------------- | ----------- | --------------- | :---------: | ------------------------------------------------ | -| [200](#route-put-alert-rule-group-200) | OK | AlertRuleGroup | | [schema](#route-put-alert-rule-group-200-schema) | -| [400](#route-put-alert-rule-group-400) | Bad Request | ValidationError | | [schema](#route-put-alert-rule-group-400-schema) | - -#### Responses - -##### 200 - AlertRuleGroup - -Status: OK - -###### Schema - -[AlertRuleGroup](#alert-rule-group) - -##### 400 - ValidationError - -Status: Bad Request - -###### Schema - -[ValidationError](#validation-error) - -### Update an existing contact point. (_RoutePutContactpoint_) - -``` -PUT /api/v1/provisioning/contact-points/{UID} -``` - -#### Consumes - -- application/json - -#### Parameters - -{{% responsive-table %}} - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| -------------------- | -------- | ----------------------------------------------- | ----------------------------- | --------- | :------: | ------- | --------------------------------------------------------- | -| UID | `path` | string | `string` | | ✓ | | UID is the contact point unique identifier | -| X-Disable-Provenance | `header` | string | `string` | | | | Allows editing of provisioned resources in the Grafana UI | -| Body | `body` | [EmbeddedContactPoint](#embedded-contact-point) | `models.EmbeddedContactPoint` | | | | | - -{{% /responsive-table %}} - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| ---------------------------------- | ----------- | --------------- | :---------: | -------------------------------------------- | -| [202](#route-put-contactpoint-202) | Accepted | Ack | | [schema](#route-put-contactpoint-202-schema) | -| [400](#route-put-contactpoint-400) | Bad Request | ValidationError | | [schema](#route-put-contactpoint-400-schema) | - -#### Responses - -##### 202 - Ack - -Status: Accepted - -###### Schema - -[Ack](#ack) - -##### 400 - ValidationError - -Status: Bad Request - -###### Schema - -[ValidationError](#validation-error) - -### Replace an existing mute timing. (_RoutePutMuteTiming_) - -``` -PUT /api/v1/provisioning/mute-timings/{name} -``` - -#### Consumes - -- application/json - -#### Parameters - -{{% responsive-table %}} - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| -------------------- | -------- | --------------------------------------- | ------------------------- | --------- | :------: | ------- | --------------------------------------------------------- | -| name | `path` | string | `string` | | ✓ | | Mute timing name | -| X-Disable-Provenance | `header` | string | `string` | | | | Allows editing of provisioned resources in the Grafana UI | -| Body | `body` | [MuteTimeInterval](#mute-time-interval) | `models.MuteTimeInterval` | | | | | - -{{% /responsive-table %}} - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| --------------------------------- | ----------- | ---------------- | :---------: | ------------------------------------------- | -| [200](#route-put-mute-timing-200) | OK | MuteTimeInterval | | [schema](#route-put-mute-timing-200-schema) | -| [400](#route-put-mute-timing-400) | Bad Request | ValidationError | | [schema](#route-put-mute-timing-400-schema) | - -#### Responses - -##### 200 - MuteTimeInterval - -Status: OK - -###### Schema - -[MuteTimeInterval](#mute-time-interval) - -##### 400 - ValidationError - -Status: Bad Request - -###### Schema - -[ValidationError](#validation-error) - -### Sets the notification policy tree. (_RoutePutPolicyTree_) - -``` -PUT /api/v1/provisioning/policies -``` - -#### Consumes - -- application/json - -#### Parameters - -{{% responsive-table %}} - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| -------------------- | -------- | --------------- | -------------- | --------- | :------: | ------- | --------------------------------------------------------- | -| X-Disable-Provenance | `header` | string | `string` | | | | Allows editing of provisioned resources in the Grafana UI | -| Body | `body` | [Route](#route) | `models.Route` | | | | The new notification routing tree to use | - -{{% /responsive-table %}} - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| --------------------------------- | ----------- | --------------- | :---------: | ------------------------------------------- | -| [202](#route-put-policy-tree-202) | Accepted | Ack | | [schema](#route-put-policy-tree-202-schema) | -| [400](#route-put-policy-tree-400) | Bad Request | ValidationError | | [schema](#route-put-policy-tree-400-schema) | - -#### Responses - -##### 202 - Ack - -Status: Accepted - -###### Schema - -[Ack](#ack) - -##### 400 - ValidationError - -Status: Bad Request - -###### Schema - -[ValidationError](#validation-error) - -### Updates an existing notification template. (_RoutePutTemplate_) - -``` -PUT /api/v1/provisioning/templates/{name} -``` - -#### Consumes - -- application/json - -{{% responsive-table %}} - -#### Parameters - -| Name | Source | Type | Go type | Separator | Required | Default | Description | -| -------------------- | -------- | ------------------------------------------------------------- | ------------------------------------ | --------- | :------: | ------- | --------------------------------------------------------- | -| name | `path` | string | `string` | | ✓ | | Template Name | -| X-Disable-Provenance | `header` | string | `string` | | | | Allows editing of provisioned resources in the Grafana UI | -| Body | `body` | [NotificationTemplateContent](#notification-template-content) | `models.NotificationTemplateContent` | | | | | - -{{% /responsive-table %}} - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| ------------------------------ | ----------- | -------------------- | :---------: | ---------------------------------------- | -| [202](#route-put-template-202) | Accepted | NotificationTemplate | | [schema](#route-put-template-202-schema) | -| [400](#route-put-template-400) | Bad Request | ValidationError | | [schema](#route-put-template-400-schema) | - -#### Responses - -##### 202 - NotificationTemplate - -Status: Accepted - -###### Schema - -[NotificationTemplate](#notification-template) - -##### 400 - ValidationError - -Status: Bad Request - -###### Schema - -[ValidationError](#validation-error) - -### Clears the notification policy tree. (_RouteResetPolicyTree_) - -``` -DELETE /api/v1/provisioning/policies -``` - -#### Consumes - -- application/json - -#### All responses - -| Code | Status | Description | Has headers | Schema | -| ----------------------------------- | -------- | ----------- | :---------: | --------------------------------------------- | -| [202](#route-reset-policy-tree-202) | Accepted | Ack | | [schema](#route-reset-policy-tree-202-schema) | - -#### Responses - -##### 202 - Ack - -Status: Accepted - -###### Schema - -[Ack](#ack) - -## Models - -### Ack - -[interface{}](#interface) - -### AlertQuery - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| --------------------------------------------------------- | ----------------------------------------- | ------------------- | :------: | ------- | ------------------------------------------------------------------------------------------------------ | ------- | -| datasourceUid | string | `string` | | | Grafana data source unique identifier; it should be '**expr**' for a Server Side Expression operation. | | -| model | [interface{}](#interface) | `interface{}` | | | JSON is the raw JSON query and includes the above properties as well as custom properties. | | -| queryType | string | `string` | | | QueryType is an optional identifier for the type of query. | -| It can be used to distinguish different types of queries. | | -| refId | string | `string` | | | RefID is the unique identifier of the query, set by the frontend call. | | -| relativeTimeRange | [RelativeTimeRange](#relative-time-range) | `RelativeTimeRange` | | | | | - -{{% /responsive-table %}} - -### AlertQueryExport - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| ----------------- | ----------------------------------------- | ------------------- | :------: | ------- | ----------- | ------- | -| datasourceUid | string | `string` | | | | | -| model | [interface{}](#interface) | `interface{}` | | | | | -| queryType | string | `string` | | | | | -| refId | string | `string` | | | | | -| relativeTimeRange | [RelativeTimeRange](#relative-time-range) | `RelativeTimeRange` | | | | | - -{{% /responsive-table %}} - -### AlertRuleExport - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| ------------ | ----------------------------------------- | --------------------- | :------: | ------- | ----------- | ------- | -| annotations | map of string | `map[string]string` | | | | | -| condition | string | `string` | | | | | -| dasboardUid | string | `string` | | | | | -| data | [][AlertQueryExport](#alert-query-export) | `[]*AlertQueryExport` | | | | | -| execErrState | string | `string` | | | | | -| for | [Duration](#duration) | `Duration` | | | | | -| isPaused | boolean | `bool` | | | | | -| labels | map of string | `map[string]string` | | | | | -| noDataState | string | `string` | | | | | -| panelId | int64 (formatted integer) | `int64` | | | | | -| title | string | `string` | | | | | -| uid | string | `string` | | | | | - -{{% /responsive-table %}} - -### AlertRuleGroup - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| --------- | ------------------------------------------------- | ------------------------- | :------: | ------- | ----------- | ------- | -| folderUid | string | `string` | | | | | -| interval | int64 (formatted integer) | `int64` | | | | | -| rules | [][ProvisionedAlertRule](#provisioned-alert-rule) | `[]*ProvisionedAlertRule` | | | | | -| title | string | `string` | | | | | - -{{% /responsive-table %}} - -### AlertRuleGroupExport - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| -------- | --------------------------------------- | -------------------- | :------: | ------- | ----------- | ------- | -| folder | string | `string` | | | | | -| interval | [Duration](#duration) | `Duration` | | | | | -| name | string | `string` | | | | | -| orgId | int64 (formatted integer) | `int64` | | | | | -| rules | [][AlertRuleExport](#alert-rule-export) | `[]*AlertRuleExport` | | | | | - -{{% /responsive-table %}} - -### AlertingFileExport - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| ------------- | --------------------------------------------------------- | ----------------------------- | :------: | ------- | ----------- | ------- | -| apiVersion | int64 (formatted integer) | `int64` | | | | | -| contactPoints | [][ContactPointExport](#contact-point-export) | `[]*ContactPointExport` | | | | | -| groups | [][AlertRuleGroupExport](#alert-rule-group-export) | `[]*AlertRuleGroupExport` | | | | | -| policies | [][NotificationPolicyExport](#notification-policy-export) | `[]*NotificationPolicyExport` | | | | | - -{{% /responsive-table %}} - -### ContactPointExport - -**Properties** - -| Name | Type | Go type | Required | Default | Description | Example | -| --------- | ------------------------------------ | ------------------- | :------: | ------- | ----------- | ------- | -| name | string | `string` | | | | | -| orgId | int64 (formatted integer) | `int64` | | | | | -| receivers | [][ReceiverExport](#receiver-export) | `[]*ReceiverExport` | | | | | - -### ContactPoints - -[][EmbeddedContactPoint](#embedded-contact-point) - -### Duration - -| Name | Type | Go type | Default | Description | Example | -| -------- | ------------------------- | ------- | ------- | ----------- | ------- | -| Duration | int64 (formatted integer) | int64 | | | | - -### EmbeddedContactPoint - -> EmbeddedContactPoint is the contact point type that is used -> by grafanas embedded alertmanager implementation. - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| ------------------------------------ | ----------------------- | -------- | :------: | ------- | ----------------------------------------------------------------- | --------- | -| disableResolveMessage | boolean | `bool` | | | | `false` | -| name | string | `string` | | | Name is used as grouping key in the UI. Contact points with the | -| same name will be grouped in the UI. | `webhook_1` | -| provenance | string | `string` | | | | | -| settings | [JSON](#json) | `JSON` | ✓ | | | | -| type | string | `string` | ✓ | | | `webhook` | -| uid | string | `string` | | | UID is the unique identifier of the contact point. The UID can be | -| set by the user. | `my_external_reference` | - -{{% /responsive-table %}} - -### Json - -[interface{}](#interface) - -### MatchRegexps - -[MatchRegexps](#match-regexps) - -### MatchType - -| Name | Type | Go type | Default | Description | Example | -| --------- | ------------------------- | ------- | ------- | ----------- | ------- | -| MatchType | int64 (formatted integer) | int64 | | | | - -### Matcher - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| ----- | ------------------------ | ----------- | :------: | ------- | ----------- | ------- | -| Name | string | `string` | | | | | -| Type | [MatchType](#match-type) | `MatchType` | | | | | -| Value | string | `string` | | | | | - -{{% /responsive-table %}} - -### Matchers - -> Matchers is a slice of Matchers that is sortable, implements Stringer, and -> provides a Matches method to match a LabelSet against all Matchers in the -> slice. Note that some users of Matchers might require it to be sorted. - -[][Matcher](#matcher) - -### MuteTimeInterval - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| -------------- | -------------------------------- | ----------------- | :------: | ------- | ----------- | ------- | -| name | string | `string` | | | | | -| time_intervals | [][TimeInterval](#time-interval) | `[]*TimeInterval` | | | | | - -{{% /responsive-table %}} - -### MuteTimings - -[][MuteTimeInterval](#mute-time-interval) - -### NotFound - -[interface{}](#interface) - -### NotificationPolicyExport - -**Properties** - -| Name | Type | Go type | Required | Default | Description | Example | -| ------ | ---------------------------- | ------------- | :------: | ------- | ----------- | ------- | -| Policy | [RouteExport](#route-export) | `RouteExport` | | | inline | | -| orgId | int64 (formatted integer) | `int64` | | | | | - -### NotificationTemplate - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| ---------- | ------------------------- | ------------ | :------: | ------- | ----------- | ------- | -| name | string | `string` | | | | | -| provenance | [Provenance](#provenance) | `Provenance` | | | | | -| template | string | `string` | | | | | - -{{% /responsive-table %}} - -### NotificationTemplateContent - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| -------- | ------ | -------- | :------: | ------- | ----------- | ------- | -| template | string | `string` | | | | | - -{{% /responsive-table %}} - -### NotificationTemplates - -[][NotificationTemplate](#notification-template) - -### ObjectMatchers - -[Matchers](#matchers) - -#### Inlined models - -### PermissionDenied - -[interface{}](#interface) - -### Provenance - -| Name | Type | Go type | Default | Description | Example | -| ---------- | ------ | ------- | ------- | ----------- | ------- | -| Provenance | string | string | | | | - -### ProvisionedAlertRule - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| ------------ | ---------------------------- | ------------------- | :------: | ------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| annotations | map of string | `map[string]string` | | | | `{"runbook_url":"https://supercoolrunbook.com/page/13"}` | -| condition | string | `string` | ✓ | | | `A` | -| data | [][AlertQuery](#alert-query) | `[]*AlertQuery` | ✓ | | | `[{"datasourceUid":"__expr__","model":{"conditions":[{"evaluator":{"params":[0,0],"type":"gt"},"operator":{"type":"and"},"query":{"params":[]},"reducer":{"params":[],"type":"avg"},"type":"query"}],"datasource":{"type":"__expr__","uid":"__expr__"},"expression":"1 == 1","hide":false,"intervalMs":1000,"maxDataPoints":43200,"refId":"A","type":"math"},"queryType":"","refId":"A","relativeTimeRange":{"from":0,"to":0}}]` | -| execErrState | string | `string` | ✓ | | | | -| folderUID | string | `string` | ✓ | | | `project_x` | -| for | [Duration](#duration) | `Duration` | ✓ | | | | -| id | int64 (formatted integer) | `int64` | | | | | -| isPaused | boolean | `bool` | | | | `false` | -| labels | map of string | `map[string]string` | | | | `{"team":"sre-team-1"}` | -| noDataState | string | `string` | ✓ | | | | -| orgID | int64 (formatted integer) | `int64` | ✓ | | | | -| provenance | [Provenance](#provenance) | `Provenance` | | | | | -| ruleGroup | string | `string` | ✓ | | | `eval_group_1` | -| title | string | `string` | ✓ | | | `Always firing` | -| uid | string | `string` | | | | | -| updated | date-time (formatted string) | `strfmt.DateTime` | | | | | - -{{% /responsive-table %}} - -### ProvisionedAlertRules - -[][ProvisionedAlertRule](#provisioned-alert-rule) - -### RawMessage - -[interface{}](#interface) - -### ReceiverExport - -**Properties** - -| Name | Type | Go type | Required | Default | Description | Example | -| --------------------- | -------------------------- | ------------ | :------: | ------- | ----------- | ------- | -| disableResolveMessage | boolean | `bool` | | | | | -| settings | [RawMessage](#raw-message) | `RawMessage` | | | | | -| type | string | `string` | | | | | -| uid | string | `string` | | | | | - -### Regexp - -> A Regexp is safe for concurrent use by multiple goroutines, -> except for configuration methods, such as Longest. - -[interface{}](#interface) - -### RelativeTimeRange - -> RelativeTimeRange is the per query start and end time -> for requests. - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| ---- | --------------------- | ---------- | :------: | ------- | ----------- | ------- | -| from | [Duration](#duration) | `Duration` | | | | | -| to | [Duration](#duration) | `Duration` | | | | | - -{{% /responsive-table %}} - -### Route - -> A Route is a node that contains definitions of how to handle alerts. This is modified -> from the upstream alertmanager in that it adds the ObjectMatchers property. - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| ------------------- | ---------------------------------- | ------------------- | :------: | ------- | --------------------------------------- | ------- | -| continue | boolean | `bool` | | | | | -| group_by | []string | `[]string` | | | | | -| group_interval | string | `string` | | | | | -| group_wait | string | `string` | | | | | -| match | map of string | `map[string]string` | | | Deprecated. Remove before v1.0 release. | | -| match_re | [MatchRegexps](#match-regexps) | `MatchRegexps` | | | | | -| matchers | [Matchers](#matchers) | `Matchers` | | | | | -| mute_time_intervals | []string | `[]string` | | | | | -| object_matchers | [ObjectMatchers](#object-matchers) | `ObjectMatchers` | | | | | -| provenance | [Provenance](#provenance) | `Provenance` | | | | | -| receiver | string | `string` | | | | | -| repeat_interval | string | `string` | | | | | -| routes | [][Route](#route) | `[]*Route` | | | | | - -{{% /responsive-table %}} - -### RouteExport - -> RouteExport is the provisioned file export of definitions.Route. This is needed to hide fields that aren't usable in -> provisioning file format. An alternative would be to define a custom MarshalJSON and MarshalYAML that excludes them. - -**Properties** - -| Name | Type | Go type | Required | Default | Description | Example | -| ------------------- | ---------------------------------- | ------------------- | :------: | ------- | --------------------------------------- | ------- | -| continue | boolean | `bool` | | | | | -| group_by | []string | `[]string` | | | | | -| group_interval | string | `string` | | | | | -| group_wait | string | `string` | | | | | -| match | map of string | `map[string]string` | | | Deprecated. Remove before v1.0 release. | | -| match_re | [MatchRegexps](#match-regexps) | `MatchRegexps` | | | | | -| matchers | [Matchers](#matchers) | `Matchers` | | | | | -| mute_time_intervals | []string | `[]string` | | | | | -| object_matchers | [ObjectMatchers](#object-matchers) | `ObjectMatchers` | | | | | -| receiver | string | `string` | | | | | -| repeat_interval | string | `string` | | | | | -| routes | [][RouteExport](#route-export) | `[]*RouteExport` | | | | | - -### TimeInterval - -> TimeInterval describes intervals of time. ContainsTime will tell you if a golang time is contained -> within the interval. - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| ------------- | -------------------------- | -------------- | :------: | ------- | ----------- | ------- | -| days_of_month | []string | `[]string` | | | | | -| location | string | `string` | | | | | -| months | []string | `[]string` | | | | | -| times | [][TimeRange](#time-range) | `[]*TimeRange` | | | | | -| weekdays | []string | `[]string` | | | | | -| years | []string | `[]string` | | | | | - -{{% /responsive-table %}} - -### TimeRange - -> For example, 4:00PM to End of the day would Begin at 1020 and End at 1440. - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| ----------- | ------------------------- | ------- | :------: | ------- | ----------- | ------- | -| EndMinute | int64 (formatted integer) | `int64` | | | | | -| StartMinute | int64 (formatted integer) | `int64` | | | | | - -{{% /responsive-table %}} - -### ValidationError - -**Properties** - -{{% responsive-table %}} - -| Name | Type | Go type | Required | Default | Description | Example | -| ---- | ------ | -------- | :------: | ------- | ----------- | --------------- | -| msg | string | `string` | | | | `error message` | - -{{% /responsive-table %}} +{{< docs/shared lookup="alerts/alerting_provisioning.md" source="grafana" version="latest" >}} diff --git a/docs/sources/developers/http_api/annotations.md b/docs/sources/developers/http_api/annotations.md index 337bb230886a0..4d58b32a8298d 100644 --- a/docs/sources/developers/http_api/annotations.md +++ b/docs/sources/developers/http_api/annotations.md @@ -189,7 +189,7 @@ Content-Type: application/json "what": "Event - deploy", "tags": ["deploy", "production"], "when": 1467844481, - "data": "deploy of master branch happened at Wed Jul 6 22:34:41 UTC 2016" + "data": "deploy of main branch happened at Wed Jul 6 22:34:41 UTC 2016" } ``` diff --git a/docs/sources/developers/http_api/dashboard.md b/docs/sources/developers/http_api/dashboard.md index 05dcb8294c4c2..c818e470929cd 100644 --- a/docs/sources/developers/http_api/dashboard.md +++ b/docs/sources/developers/http_api/dashboard.md @@ -37,6 +37,8 @@ The uid can have a maximum length of 40 characters. Creates a new dashboard or updates an existing dashboard. When updating existing dashboards, if you do not define the `folderId` or the `folderUid` property, then the dashboard(s) are moved to the root level. (You need to define only one property, not both). +> **Note:** This endpoint is not intended for creating folders, use `POST /api/folders` for that. + **Required permissions** See note in the [introduction]({{< ref "#dashboard-api" >}}) for an explanation. diff --git a/docs/sources/developers/http_api/dashboard_public.md b/docs/sources/developers/http_api/dashboard_public.md index 5815672230273..d0f1980c6b04e 100644 --- a/docs/sources/developers/http_api/dashboard_public.md +++ b/docs/sources/developers/http_api/dashboard_public.md @@ -111,7 +111,9 @@ Content-Length: 107 ## Update a public dashboard -`PATCH /api/dashboards/uid/:uid/public-dashboards/` +`PATCH /api/dashboards/uid/:uid/public-dashboards/:publicDashboardUid` + +Will update the public dashboard given the specified unique identifier (uid). **Required permissions** @@ -124,7 +126,7 @@ See note in the [introduction](#public-dashboard-api) for an explanation. **Example Request for updating a public dashboard**: ```http -PATCH /api/dashboards/uid/xCpsVuc4z/public-dashboards/ HTTP/1.1 +PATCH /api/dashboards/uid/xCpsVuc4z/public-dashboards/cd56d9fd-f3d4-486d-afba-a21760e2acbe HTTP/1.1 Accept: application/json Content-Type: application/json Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk @@ -205,7 +207,7 @@ See note in the [introduction](#public-dashboard-api) for an explanation. **Example Request**: ```http -GET /api/dashboards/uid/xCpsVuc4z HTTP/1.1 +GET /api/dashboards/uid/xCpsVuc4z/public-dashboards/ HTTP/1.1 Accept: application/json Content-Type: application/json Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk diff --git a/docs/sources/developers/http_api/folder.md b/docs/sources/developers/http_api/folder.md index 12087d1acc8c7..aaae48dc48685 100644 --- a/docs/sources/developers/http_api/folder.md +++ b/docs/sources/developers/http_api/folder.md @@ -160,7 +160,8 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk { "uid": "nErXDvCkzz", - "title": "Department ABC" + "title": "Department ABC", + "parentUid": "fgnj5e52gel76g" } ``` @@ -168,6 +169,7 @@ JSON Body schema: - **uid** – Optional [unique identifier]({{< ref "#identifier-id-vs-unique-identifier-uid" >}}). - **title** – The title of the folder. +- **parentUid** - Optional field, the unique identifier of the parent folder under which the folder should be created. Requires nested folders to be enabled. **Example Response**: diff --git a/docs/sources/developers/http_api/folder_dashboard_search.md b/docs/sources/developers/http_api/folder_dashboard_search.md index 13becff4d0ef6..fc97317bbaf51 100644 --- a/docs/sources/developers/http_api/folder_dashboard_search.md +++ b/docs/sources/developers/http_api/folder_dashboard_search.md @@ -34,7 +34,7 @@ Query parameters: - **dashboardIds** – List of dashboard id's to search for - **dashboardUID** - List of dashboard uid's to search for, It is deprecated since Grafana v9.1, please use dashboardUIDs instead - **dashboardUIDs** – List of dashboard uid's to search for -- **folderIds** – List of folder id's to search in for dashboards +- **folderUIDs** – List of folder UIDs to search in - **starred** – Flag indicating if only starred Dashboards should be returned - **limit** – Limit the number of returned results (max is 5000; default is 1000) - **page** – Use this parameter to access hits beyond limit. Numbering starts at 1. limit param acts as page size. Only available in Grafana v6.2+. @@ -42,7 +42,7 @@ Query parameters: **Example request for retrieving folders and dashboards at the root level**: ```http -GET /api/search?folderIds=0&query=&starred=false HTTP/1.1 +GET /api/search?query=&starred=false HTTP/1.1 Accept: application/json Content-Type: application/json Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk diff --git a/docs/sources/developers/http_api/reporting.md b/docs/sources/developers/http_api/reporting.md index d1f1d794716dd..871775fe15a05 100644 --- a/docs/sources/developers/http_api/reporting.md +++ b/docs/sources/developers/http_api/reporting.md @@ -241,7 +241,7 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk "to": "2022-09-02T17:00:00+02:00" }, "reportVariables": { - "varibale1": "Value1" + "variable1": "Value1" } } ], @@ -354,7 +354,7 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk "to": "2022-09-02T17:00:00+02:00" }, "reportVariables": { - "varibale1": "Value1" + "variable1": "Value1" } } ], @@ -647,7 +647,7 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk "to": "2022-09-02T17:00:00+02:00" }, "reportVariables": { - "varibale1": "Value1" + "variable1": "Value1" } } ], diff --git a/docs/sources/developers/http_api/serviceaccount.md b/docs/sources/developers/http_api/serviceaccount.md index 8dff8a38d9052..15e424cf151f5 100644 --- a/docs/sources/developers/http_api/serviceaccount.md +++ b/docs/sources/developers/http_api/serviceaccount.md @@ -19,6 +19,7 @@ title: Service account HTTP API # Service account API > If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. +> For Grafana Cloud instances, please use a Bearer token to authenticate. The examples within this section reference Basic authentication which is for On-Prem Grafana instances. ## Search service accounts with Paging diff --git a/docs/sources/developers/http_api/sso-settings.md b/docs/sources/developers/http_api/sso-settings.md index 25d337104a842..c7c8a343a3a3d 100644 --- a/docs/sources/developers/http_api/sso-settings.md +++ b/docs/sources/developers/http_api/sso-settings.md @@ -22,8 +22,176 @@ title: SSO Settings API > If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. +{{% admonition type="note" %}} +Available in Public Preview in Grafana 10.4 and on Grafana Cloud behind the `ssoSettingsApi` feature toggle. +{{% /admonition %}} + The API can be used to create, update, delete, get, and list SSO Settings. +## List SSO Settings + +`GET /api/v1/sso-settings` + +Lists the SSO Settings for all providers. + +**Required permissions** + +See note in the [introduction]({{< ref "#sso-settings" >}}) for an explanation. + +| Action | Scope | +| --------------- | ---------------------------- | +| `settings:read` | `settings:auth.{provider}:*` | + +**Example Request**: + +```http +GET /api/v1/sso-settings HTTP/1.1 +Accept: application/json +Content-Type: application/json +Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk +``` + +**Example Response**: + +```http +HTTP/1.1 200 +Content-Type: application/json +[ + { + "id": "1", + "provider": "github", + "settings": { + "apiUrl": "https://api.github.com/user", + "clientId": "my_github_client", + "clientSecret": "*********", + "enabled": true, + "scopes": "user:email,read:org" + // rest of the settings + }, + "source": "system", + }, + { + "id": "2", + "provider": "azuread", + "settings": { + "authUrl": "https://login.microsoftonline.com/00000000-0000-0000-0000-000000000000/oauth2/v2.0/authorize", + "clientId": "my_azuread_client", + "clientSecret": "*********", + "enabled": true, + "scopes": "openid,email,profile" + // rest of the settings + }, + "source": "system", + } +] +``` + +Status Codes: + +- **200** – SSO Settings found +- **400** – Bad Request +- **401** – Unauthorized +- **403** – Access Denied + +## Get SSO Settings + +`GET /api/v1/sso-settings/:provider` + +Gets the SSO Settings for a provider. + +**Required permissions** + +See note in the [introduction]({{< ref "#sso-settings" >}}) for an explanation. + +| Action | Scope | +| --------------- | ---------------------------- | +| `settings:read` | `settings:auth.{provider}:*` | + +**Example Request**: + +```http +GET /api/v1/sso-settings/github HTTP/1.1 +Accept: application/json +Content-Type: application/json +Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk +``` + +**Example Response**: + +```http +HTTP/1.1 200 +Content-Type: application/json +ETag: db87f729761898ee +{ + "id": "1", + "provider": "github", + "settings": { + "apiUrl": "https://api.github.com/user", + "clientId": "my_github_client", + "clientSecret": "*********", + "enabled": true, + "scopes": "user:email,read:org" + // rest of the settings + }, + "source": "system", +} +``` + +Status Codes: + +- **200** – SSO Settings found +- **400** – Bad Request +- **401** – Unauthorized +- **403** – Access Denied +- **404** – SSO Settings not found + +## Update SSO Settings + +`PUT /api/v1/sso-settings/:provider` + +Updates the SSO Settings for a provider. + +**Required permissions** + +See note in the [introduction]({{< ref "#sso-settings" >}}) for an explanation. + +| Action | Scope | +| ---------------- | ---------------------------- | +| `settings:write` | `settings:auth.{provider}:*` | + +**Example Request**: + +```http +PUT /api/v1/sso-settings/github HTTP/1.1 +Accept: application/json +Content-Type: application/json +Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk + +{ + "settings": { + "apiUrl": "https://api.github.com/user", + "clientId": "my_github_client", + "clientSecret": "my_github_secret", + "enabled": true, + "scopes": "user:email,read:org" + } +} +``` + +**Example Response**: + +```http +HTTP/1.1 204 +Content-Type: application/json +``` + +Status Codes: + +- **204** – SSO Settings updated +- **400** – Bad Request +- **401** – Unauthorized +- **403** – Access Denied + ## Delete SSO Settings `DELETE /api/v1/sso-settings/:provider` diff --git a/docs/sources/developers/kinds/_index.md b/docs/sources/developers/kinds/_index.md deleted file mode 100644 index de9fa0e3fb1cc..0000000000000 --- a/docs/sources/developers/kinds/_index.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -_build: - list: false -labels: - products: - - enterprise - - oss -title: Grafana schema -weight: 200 ---- - -# Grafana schema - -> Grafana’s schemas, kind system and related code generation are in active development. - -Grafana is moving to a schema-centric model of development, where schemas are the single source of truth that specify -the shape of objects - for example, dashboards, datasources, users - in the frontend, backend, and plugin code. -Eventually, all of Grafana’s object types will be schematized within the “Kind System.” Kinds, their schemas, the Kind -system rules, and associated code generators will collectively provide a clear, consistent foundation for Grafana’s -APIs, documentation, persistent storage, clients, as-code tooling, and so forth. - -It’s exciting to imagine the possibilities that a crisp, consistent development workflow will enable - this is why -companies build [developer platforms](https://internaldeveloperplatform.org/)! At the same time, it’s also -overwhelming - any schema system that can meet Grafana’s complex requirements will necessarily have a lot of moving -parts. Additionally, we must account for having Grafana continue to work as we make the transition - a prerequisite -for every large-scale refactoring. - -In the Grafana ecosystem, there are three basic Kind categories and associated schema categories: - -- [Core Kinds]({{< relref "core/" >}}) -- Custom Kinds -- [Composable Kinds]({{< relref "composable/" >}}) - -The schema authoring workflow for each varies, as does the path to maturity. -[Grafana Kinds - From Zero to Maturity]({{< relref "maturity/" >}}) contains general reference material applicable to -all Kind-writing, and links to the guides for each category of Kind. diff --git a/docs/sources/developers/kinds/composable/_index.md b/docs/sources/developers/kinds/composable/_index.md deleted file mode 100644 index 14e40cd6a3f01..0000000000000 --- a/docs/sources/developers/kinds/composable/_index.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -labels: - products: - - enterprise - - oss -title: Composable kinds -weight: 200 ---- - -# Grafana composable kinds - -{{< section >}} diff --git a/docs/sources/developers/kinds/composable/alertgroups/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/alertgroups/panelcfg/schema-reference.md deleted file mode 100644 index 8d69846cf2678..0000000000000 --- a/docs/sources/developers/kinds/composable/alertgroups/panelcfg/schema-reference.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: AlertGroupsPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## AlertGroupsPanelCfg - -#### Maturity: [merged](../../../maturity/#merged) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-----------|--------------------|----------|---------|-------------| -| `Options` | [object](#options) | **Yes** | | | - -### Options - -| Property | Type | Required | Default | Description | -|----------------|---------|----------|---------|-------------------------------------------------------------| -| `alertmanager` | string | **Yes** | | Name of the alertmanager used as a source for alerts | -| `expandAll` | boolean | **Yes** | | Expand all alert groups by default | -| `labels` | string | **Yes** | | Comma-separated list of values used to filter alert results | - - diff --git a/docs/sources/developers/kinds/composable/annotationslist/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/annotationslist/panelcfg/schema-reference.md deleted file mode 100644 index eb739f4509d5b..0000000000000 --- a/docs/sources/developers/kinds/composable/annotationslist/panelcfg/schema-reference.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: AnnotationsListPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## AnnotationsListPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-----------|--------------------|----------|---------|-------------| -| `Options` | [object](#options) | **Yes** | | | - -### Options - -| Property | Type | Required | Default | Description | -|-------------------------|----------|----------|---------|-------------| -| `limit` | uint32 | **Yes** | `10` | | -| `navigateAfter` | string | **Yes** | `10m` | | -| `navigateBefore` | string | **Yes** | `10m` | | -| `navigateToPanel` | boolean | **Yes** | `true` | | -| `onlyFromThisDashboard` | boolean | **Yes** | `false` | | -| `onlyInTimeRange` | boolean | **Yes** | `false` | | -| `showTags` | boolean | **Yes** | `true` | | -| `showTime` | boolean | **Yes** | `true` | | -| `showUser` | boolean | **Yes** | `true` | | -| `tags` | string[] | **Yes** | | | - - diff --git a/docs/sources/developers/kinds/composable/azuremonitor/dataquery/schema-reference.md b/docs/sources/developers/kinds/composable/azuremonitor/dataquery/schema-reference.md deleted file mode 100644 index 7c8f824177899..0000000000000 --- a/docs/sources/developers/kinds/composable/azuremonitor/dataquery/schema-reference.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: AzureMonitorDataQuery kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## AzureMonitorDataQuery - -#### Maturity: [merged](../../../maturity/#merged) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - - diff --git a/docs/sources/developers/kinds/composable/barchart/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/barchart/panelcfg/schema-reference.md deleted file mode 100644 index e07747b77e674..0000000000000 --- a/docs/sources/developers/kinds/composable/barchart/panelcfg/schema-reference.md +++ /dev/null @@ -1,181 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: BarChartPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## BarChartPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|---------------|------------------------|----------|---------|-------------| -| `FieldConfig` | [object](#fieldconfig) | **Yes** | | | -| `Options` | [object](#options) | **Yes** | | | - -### FieldConfig - -It extends [AxisConfig](#axisconfig) and [HideableFieldConfig](#hideablefieldconfig). - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisCenteredZero` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisColorMode` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisLabel` | string | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisPlacement` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisSoftMin` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisWidth` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `fillOpacity` | integer | No | `80` | Controls the fill opacity of the bars.
Constraint: `>=0 & <=100`. | -| `gradientMode` | string | No | | Set the mode of the gradient fill. Fill gradient is based on the line color. To change the color, use the standard color scheme field option.
Gradient appearance is influenced by the Fill opacity setting. | -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | *(Inherited from [HideableFieldConfig](#hideablefieldconfig))*
TODO docs | -| `lineWidth` | integer | No | `1` | Controls line width of the bars.
Constraint: `>=0 & <=10`. | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs | -| `thresholdsStyle` | [GraphThresholdsStyleConfig](#graphthresholdsstyleconfig) | No | | TODO docs | - -### AxisConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | | -| `axisCenteredZero` | boolean | No | | | -| `axisColorMode` | string | No | | TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | | -| `axisLabel` | string | No | | | -| `axisPlacement` | string | No | | TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | | -| `axisSoftMin` | number | No | | | -| `axisWidth` | number | No | | | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | TODO docs | - -### ScaleDistributionConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-------------------|--------|----------|---------|--------------------------------------------------------------------------| -| `type` | string | **Yes** | | TODO docs
Possible values are: `linear`, `log`, `ordinal`, `symlog`. | -| `linearThreshold` | number | No | | | -| `log` | number | No | | | - -### GraphThresholdsStyleConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-----------------------------------------------------------------------------------------------------------| -| `mode` | string | **Yes** | | TODO docs
Possible values are: `off`, `line`, `dashed`, `area`, `line+area`, `dashed+area`, `series`. | - -### HideSeriesConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|---------|----------|---------|-------------| -| `legend` | boolean | **Yes** | | | -| `tooltip` | boolean | **Yes** | | | -| `viz` | boolean | **Yes** | | | - -### HideableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|---------------------------------------|----------|---------|-------------| -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | TODO docs | - -### Options - -It extends [OptionsWithLegend](#optionswithlegend) and [OptionsWithTooltip](#optionswithtooltip) and [OptionsWithTextFormatting](#optionswithtextformatting). - -| Property | Type | Required | Default | Description | -|-----------------------|-------------------------------------------------|----------|---------|------------------------------------------------------------------------------------------------------------------| -| `barWidth` | number | **Yes** | `0.97` | Controls the width of bars. 1 = Max width, 0 = Min width.
Constraint: `>=0 & <=1`. | -| `fullHighlight` | boolean | **Yes** | `false` | Enables mode which highlights the entire bar area and shows tooltip when cursor
hovers over highlighted area | -| `groupWidth` | number | **Yes** | `0.7` | Controls the width of groups. 1 = max with, 0 = min width.
Constraint: `>=0 & <=1`. | -| `legend` | [VizLegendOptions](#vizlegendoptions) | **Yes** | | *(Inherited from [OptionsWithLegend](#optionswithlegend))*
TODO docs | -| `orientation` | string | **Yes** | | Controls the orientation of the bar chart, either vertical or horizontal. | -| `showValue` | string | **Yes** | | This controls whether values are shown on top or to the left of bars. | -| `stacking` | string | **Yes** | | Controls whether bars are stacked or not, either normally or in percent mode. | -| `tooltip` | [VizTooltipOptions](#viztooltipoptions) | **Yes** | | *(Inherited from [OptionsWithTooltip](#optionswithtooltip))*
TODO docs | -| `xTickLabelMaxLength` | integer | **Yes** | | Sets the max length that a label can have before it is truncated.
Constraint: `>=0 & <=2147483647`. | -| `xTickLabelRotation` | integer | **Yes** | `0` | Controls the rotation of the x axis labels.
Constraint: `>=-90 & <=90`. | -| `barRadius` | number | No | `0` | Controls the radius of each bar.
Constraint: `>=0 & <=0.5`. | -| `colorByField` | string | No | | Use the color value for a sibling field to color each bar value. | -| `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | | *(Inherited from [OptionsWithTextFormatting](#optionswithtextformatting))*
TODO docs | -| `xField` | string | No | | Manually select which field from the dataset to represent the x field. | -| `xTickLabelSpacing` | int32 | No | `0` | Controls the spacing between x axis labels.
negative values indicate backwards skipping behavior | - -### OptionsWithLegend - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|---------------------------------------|----------|---------|-------------| -| `legend` | [VizLegendOptions](#vizlegendoptions) | **Yes** | | TODO docs | - -### VizLegendOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|----------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `calcs` | string[] | **Yes** | | | -| `displayMode` | string | **Yes** | | TODO docs
Note: "hidden" needs to remain as an option for plugins compatibility
Possible values are: `list`, `table`, `hidden`. | -| `placement` | string | **Yes** | | TODO docs
Possible values are: `bottom`, `right`. | -| `showLegend` | boolean | **Yes** | | | -| `asTable` | boolean | No | | | -| `isVisible` | boolean | No | | | -| `sortBy` | string | No | | | -| `sortDesc` | boolean | No | | | -| `width` | number | No | | | - -### OptionsWithTextFormatting - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|-------------------------------------------------|----------|---------|-------------| -| `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | | TODO docs | - -### VizTextDisplayOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|-------------|--------|----------|---------|--------------------------| -| `titleSize` | number | No | | Explicit title text size | -| `valueSize` | number | No | | Explicit value text size | - -### OptionsWithTooltip - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|-----------------------------------------|----------|---------|-------------| -| `tooltip` | [VizTooltipOptions](#viztooltipoptions) | **Yes** | | TODO docs | - -### VizTooltipOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|---------------------------------------------------------------| -| `mode` | string | **Yes** | | TODO docs
Possible values are: `single`, `multi`, `none`. | -| `sort` | string | **Yes** | | TODO docs
Possible values are: `asc`, `desc`, `none`. | - - diff --git a/docs/sources/developers/kinds/composable/bargauge/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/bargauge/panelcfg/schema-reference.md deleted file mode 100644 index db7bc0e5c09df..0000000000000 --- a/docs/sources/developers/kinds/composable/bargauge/panelcfg/schema-reference.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: BarGaugePanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## BarGaugePanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-----------|--------------------|----------|---------|-------------| -| `Options` | [object](#options) | **Yes** | | | - -### Options - -It extends [SingleStatBaseOptions](#singlestatbaseoptions). - -| Property | Type | Required | Default | Description | -|-----------------|-------------------------------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------| -| `displayMode` | string | **Yes** | | Enum expressing the possible display modes
for the bar gauge component of Grafana UI
Possible values are: `basic`, `lcd`, `gradient`. | -| `maxVizHeight` | uint32 | **Yes** | `300` | | -| `minVizHeight` | uint32 | **Yes** | `16` | | -| `minVizWidth` | uint32 | **Yes** | `8` | | -| `namePlacement` | string | **Yes** | | Allows for the bar gauge name to be placed explicitly
Possible values are: `auto`, `top`, `left`. | -| `showUnfilled` | boolean | **Yes** | `true` | | -| `sizing` | string | **Yes** | | Allows for the bar gauge size to be set explicitly
Possible values are: `auto`, `manual`. | -| `valueMode` | string | **Yes** | | Allows for the table cell gauge display type to set the gauge mode.
Possible values are: `color`, `text`, `hidden`. | -| `orientation` | string | No | | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs
Possible values are: `auto`, `vertical`, `horizontal`. | -| `reduceOptions` | [ReduceDataOptions](#reducedataoptions) | No | | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs | -| `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs | - -### ReduceDataOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|----------|----------|---------|---------------------------------------------------------------| -| `calcs` | string[] | **Yes** | | When !values, pick one value for the whole field | -| `fields` | string | No | | Which fields to show. By default this is only numeric fields | -| `limit` | number | No | | if showing all values limit | -| `values` | boolean | No | | If true show each row value | - -### SingleStatBaseOptions - -TODO docs - -It extends [OptionsWithTextFormatting](#optionswithtextformatting). - -| Property | Type | Required | Default | Description | -|-----------------|-------------------------------------------------|----------|---------|------------------------------------------------------------------------------------------| -| `orientation` | string | **Yes** | | TODO docs
Possible values are: `auto`, `vertical`, `horizontal`. | -| `reduceOptions` | [ReduceDataOptions](#reducedataoptions) | **Yes** | | TODO docs | -| `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | | *(Inherited from [OptionsWithTextFormatting](#optionswithtextformatting))*
TODO docs | - -### OptionsWithTextFormatting - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|-------------------------------------------------|----------|---------|-------------| -| `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | | TODO docs | - -### VizTextDisplayOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|-------------|--------|----------|---------|--------------------------| -| `titleSize` | number | No | | Explicit title text size | -| `valueSize` | number | No | | Explicit value text size | - - diff --git a/docs/sources/developers/kinds/composable/candlestick/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/candlestick/panelcfg/schema-reference.md deleted file mode 100644 index 75fe334da4397..0000000000000 --- a/docs/sources/developers/kinds/composable/candlestick/panelcfg/schema-reference.md +++ /dev/null @@ -1,257 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: CandlestickPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## CandlestickPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-----------------------|---------------------------------------|----------|---------|-------------------------------------------------------------| -| `CandleStyle` | string | **Yes** | | Possible values are: `candles`, `ohlcbars`. | -| `CandlestickColors` | [object](#candlestickcolors) | **Yes** | | | -| `CandlestickFieldMap` | [object](#candlestickfieldmap) | **Yes** | | | -| `ColorStrategy` | string | **Yes** | | Possible values are: `open-close`, `close-close`. | -| `FieldConfig` | [GraphFieldConfig](#graphfieldconfig) | **Yes** | | TODO docs | -| `Options` | [object](#options) | **Yes** | | | -| `VizDisplayMode` | string | **Yes** | | Possible values are: `candles+volume`, `candles`, `volume`. | - -### CandlestickColors - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-------------| -| `down` | string | **Yes** | `red` | | -| `flat` | string | **Yes** | `gray` | | -| `up` | string | **Yes** | `green` | | - -### CandlestickFieldMap - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|------------------------------------------------------------------------------| -| `close` | string | No | | Corresponds to the final (end) value of the given period | -| `high` | string | No | | Corresponds to the highest value of the given period | -| `low` | string | No | | Corresponds to the lowest value of the given period | -| `open` | string | No | | Corresponds to the starting value of the given period | -| `volume` | string | No | | Corresponds to the sample count in the given period. (e.g. number of trades) | - -### GraphFieldConfig - -TODO docs - -It extends [LineConfig](#lineconfig) and [FillConfig](#fillconfig) and [PointsConfig](#pointsconfig) and [AxisConfig](#axisconfig) and [BarConfig](#barconfig) and [StackableFieldConfig](#stackablefieldconfig) and [HideableFieldConfig](#hideablefieldconfig). - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisCenteredZero` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisColorMode` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisLabel` | string | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisPlacement` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisSoftMin` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisWidth` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `barAlignment` | integer | No | | *(Inherited from [BarConfig](#barconfig))*
TODO docs
Possible values are: `-1`, `0`, `1`. | -| `barMaxWidth` | number | No | | *(Inherited from [BarConfig](#barconfig))* | -| `barWidthFactor` | number | No | | *(Inherited from [BarConfig](#barconfig))* | -| `drawStyle` | string | No | | TODO docs
Possible values are: `line`, `bars`, `points`. | -| `fillBelowTo` | string | No | | *(Inherited from [FillConfig](#fillconfig))* | -| `fillColor` | string | No | | *(Inherited from [FillConfig](#fillconfig))* | -| `fillOpacity` | number | No | | *(Inherited from [FillConfig](#fillconfig))* | -| `gradientMode` | string | No | | TODO docs
Possible values are: `none`, `opacity`, `hue`, `scheme`. | -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | *(Inherited from [HideableFieldConfig](#hideablefieldconfig))*
TODO docs | -| `lineColor` | string | No | | *(Inherited from [LineConfig](#lineconfig))* | -| `lineInterpolation` | string | No | | *(Inherited from [LineConfig](#lineconfig))*
TODO docs
Possible values are: `linear`, `smooth`, `stepBefore`, `stepAfter`. | -| `lineStyle` | [LineStyle](#linestyle) | No | | *(Inherited from [LineConfig](#lineconfig))*
TODO docs | -| `lineWidth` | number | No | | *(Inherited from [LineConfig](#lineconfig))* | -| `pointColor` | string | No | | *(Inherited from [PointsConfig](#pointsconfig))* | -| `pointSize` | number | No | | *(Inherited from [PointsConfig](#pointsconfig))* | -| `pointSymbol` | string | No | | *(Inherited from [PointsConfig](#pointsconfig))* | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs | -| `showPoints` | string | No | | *(Inherited from [PointsConfig](#pointsconfig))*
TODO docs
Possible values are: `auto`, `never`, `always`. | -| `spanNulls` | | No | | *(Inherited from [LineConfig](#lineconfig))*
Indicate if null values should be treated as gaps or connected.
When the value is a number, it represents the maximum delta in the
X axis that should be considered connected. For timeseries, this is milliseconds | -| `stacking` | [StackingConfig](#stackingconfig) | No | | *(Inherited from [StackableFieldConfig](#stackablefieldconfig))*
TODO docs | -| `thresholdsStyle` | [GraphThresholdsStyleConfig](#graphthresholdsstyleconfig) | No | | TODO docs | -| `transform` | string | No | | TODO docs
Possible values are: `constant`, `negative-Y`. | - -### AxisConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | | -| `axisCenteredZero` | boolean | No | | | -| `axisColorMode` | string | No | | TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | | -| `axisLabel` | string | No | | | -| `axisPlacement` | string | No | | TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | | -| `axisSoftMin` | number | No | | | -| `axisWidth` | number | No | | | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | TODO docs | - -### ScaleDistributionConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-------------------|--------|----------|---------|--------------------------------------------------------------------------| -| `type` | string | **Yes** | | TODO docs
Possible values are: `linear`, `log`, `ordinal`, `symlog`. | -| `linearThreshold` | number | No | | | -| `log` | number | No | | | - -### BarConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------------|---------|----------|---------|----------------------------------------------------| -| `barAlignment` | integer | No | | TODO docs
Possible values are: `-1`, `0`, `1`. | -| `barMaxWidth` | number | No | | | -| `barWidthFactor` | number | No | | | - -### FillConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|--------|----------|---------|-------------| -| `fillBelowTo` | string | No | | | -| `fillColor` | string | No | | | -| `fillOpacity` | number | No | | | - -### GraphThresholdsStyleConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-----------------------------------------------------------------------------------------------------------| -| `mode` | string | **Yes** | | TODO docs
Possible values are: `off`, `line`, `dashed`, `area`, `line+area`, `dashed+area`, `series`. | - -### HideSeriesConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|---------|----------|---------|-------------| -| `legend` | boolean | **Yes** | | | -| `tooltip` | boolean | **Yes** | | | -| `viz` | boolean | **Yes** | | | - -### HideableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|---------------------------------------|----------|---------|-------------| -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | TODO docs | - -### LineConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------------|-------------------------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `lineColor` | string | No | | | -| `lineInterpolation` | string | No | | TODO docs
Possible values are: `linear`, `smooth`, `stepBefore`, `stepAfter`. | -| `lineStyle` | [LineStyle](#linestyle) | No | | TODO docs | -| `lineWidth` | number | No | | | -| `spanNulls` | | No | | Indicate if null values should be treated as gaps or connected.
When the value is a number, it represents the maximum delta in the
X axis that should be considered connected. For timeseries, this is milliseconds | - -### LineStyle - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|----------|----------|---------|--------------------------------------------------------| -| `dash` | number[] | No | | | -| `fill` | string | No | | Possible values are: `solid`, `dash`, `dot`, `square`. | - -### PointsConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|--------|----------|---------|---------------------------------------------------------------| -| `pointColor` | string | No | | | -| `pointSize` | number | No | | | -| `pointSymbol` | string | No | | | -| `showPoints` | string | No | | TODO docs
Possible values are: `auto`, `never`, `always`. | - -### StackableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|-----------------------------------|----------|---------|-------------| -| `stacking` | [StackingConfig](#stackingconfig) | No | | TODO docs | - -### StackingConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-----------------------------------------------------------------| -| `group` | string | No | | | -| `mode` | string | No | | TODO docs
Possible values are: `none`, `normal`, `percent`. | - -### Options - -It extends [OptionsWithLegend](#optionswithlegend). - -| Property | Type | Required | Default | Description | -|--------------------|-----------------------------------------|----------|---------|--------------------------------------------------------------------------| -| `candleStyle` | string | **Yes** | | Sets the style of the candlesticks | -| `colorStrategy` | string | **Yes** | | Sets the color strategy for the candlesticks | -| `colors` | [CandlestickColors](#candlestickcolors) | **Yes** | | | -| `fields` | [object](#fields) | **Yes** | `map[]` | Map fields to appropriate dimension | -| `legend` | [VizLegendOptions](#vizlegendoptions) | **Yes** | | *(Inherited from [OptionsWithLegend](#optionswithlegend))*
TODO docs | -| `mode` | string | **Yes** | | Sets which dimensions are used for the visualization | -| `includeAllFields` | boolean | No | `false` | When enabled, all fields will be sent to the graph | - -### OptionsWithLegend - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|---------------------------------------|----------|---------|-------------| -| `legend` | [VizLegendOptions](#vizlegendoptions) | **Yes** | | TODO docs | - -### VizLegendOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|----------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `calcs` | string[] | **Yes** | | | -| `displayMode` | string | **Yes** | | TODO docs
Note: "hidden" needs to remain as an option for plugins compatibility
Possible values are: `list`, `table`, `hidden`. | -| `placement` | string | **Yes** | | TODO docs
Possible values are: `bottom`, `right`. | -| `showLegend` | boolean | **Yes** | | | -| `asTable` | boolean | No | | | -| `isVisible` | boolean | No | | | -| `sortBy` | string | No | | | -| `sortDesc` | boolean | No | | | -| `width` | number | No | | | - -### Fields - -Map fields to appropriate dimension - -| Property | Type | Required | Default | Description | -|----------|-----------------------------------|----------|---------|-------------| -| `object` | Possible types are: [](#), [](#). | | | - - diff --git a/docs/sources/developers/kinds/composable/canvas/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/canvas/panelcfg/schema-reference.md deleted file mode 100644 index ca4647b16ff5e..0000000000000 --- a/docs/sources/developers/kinds/composable/canvas/panelcfg/schema-reference.md +++ /dev/null @@ -1,160 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: CanvasPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## CanvasPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-------------------------|----------------------------------|----------|---------|-----------------------------------------------------------------------| -| `BackgroundConfig` | [object](#backgroundconfig) | **Yes** | | | -| `BackgroundImageSize` | string | **Yes** | | Possible values are: `original`, `contain`, `cover`, `fill`, `tile`. | -| `CanvasConnection` | [object](#canvasconnection) | **Yes** | | | -| `CanvasElementOptions` | [object](#canvaselementoptions) | **Yes** | | | -| `ConnectionCoordinates` | [object](#connectioncoordinates) | **Yes** | | | -| `ConnectionPath` | string | **Yes** | | Possible values are: `straight`. | -| `Constraint` | [object](#constraint) | **Yes** | | | -| `HorizontalConstraint` | string | **Yes** | | Possible values are: `left`, `right`, `leftright`, `center`, `scale`. | -| `HttpRequestMethod` | string | **Yes** | | Possible values are: `GET`, `POST`, `PUT`. | -| `LineConfig` | [object](#lineconfig) | **Yes** | | | -| `Options` | [object](#options) | **Yes** | | | -| `Placement` | [object](#placement) | **Yes** | | | -| `VerticalConstraint` | string | **Yes** | | Possible values are: `top`, `bottom`, `topbottom`, `center`, `scale`. | - -### BackgroundConfig - -| Property | Type | Required | Default | Description | -|----------|-----------------------------------------------------|----------|---------|----------------------------------------------------------------------| -| `color` | [ColorDimensionConfig](#colordimensionconfig) | No | | | -| `image` | [ResourceDimensionConfig](#resourcedimensionconfig) | No | | Links to a resource (image/svg path) | -| `size` | string | No | | Possible values are: `original`, `contain`, `cover`, `fill`, `tile`. | - -### ColorDimensionConfig - -It extends [BaseDimensionConfig](#basedimensionconfig). - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|--------------------------------------------------------------------------------------------------------------| -| `field` | string | No | | *(Inherited from [BaseDimensionConfig](#basedimensionconfig))*
fixed: T -- will be added by each element | -| `fixed` | string | No | | | - -### BaseDimensionConfig - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-------------------------------------------| -| `field` | string | No | | fixed: T -- will be added by each element | - -### ResourceDimensionConfig - -Links to a resource (image/svg path) - -It extends [BaseDimensionConfig](#basedimensionconfig). - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|--------------------------------------------------------------------------------------------------------------| -| `mode` | string | **Yes** | | Possible values are: `fixed`, `field`, `mapping`. | -| `field` | string | No | | *(Inherited from [BaseDimensionConfig](#basedimensionconfig))*
fixed: T -- will be added by each element | -| `fixed` | string | No | | | - -### CanvasConnection - -| Property | Type | Required | Default | Description | -|--------------|-------------------------------------------------|----------|---------|----------------------------------| -| `path` | string | **Yes** | | Possible values are: `straight`. | -| `source` | [ConnectionCoordinates](#connectioncoordinates) | **Yes** | | | -| `target` | [ConnectionCoordinates](#connectioncoordinates) | **Yes** | | | -| `color` | [ColorDimensionConfig](#colordimensionconfig) | No | | | -| `size` | [ScaleDimensionConfig](#scaledimensionconfig) | No | | | -| `targetName` | string | No | | | - -### ConnectionCoordinates - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-------------| -| `x` | number | **Yes** | | | -| `y` | number | **Yes** | | | - -### ScaleDimensionConfig - -It extends [BaseDimensionConfig](#basedimensionconfig). - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|--------------------------------------------------------------------------------------------------------------| -| `max` | number | **Yes** | | | -| `min` | number | **Yes** | | | -| `field` | string | No | | *(Inherited from [BaseDimensionConfig](#basedimensionconfig))*
fixed: T -- will be added by each element | -| `fixed` | number | No | | | -| `mode` | string | No | | Possible values are: `linear`, `quad`. | - -### CanvasElementOptions - -| Property | Type | Required | Default | Description | -|---------------|-----------------------------------------|----------|---------|---------------------------------------------------------| -| `name` | string | **Yes** | | | -| `type` | string | **Yes** | | | -| `background` | [BackgroundConfig](#backgroundconfig) | No | | | -| `border` | [LineConfig](#lineconfig) | No | | | -| `config` | | No | | TODO: figure out how to define this (element config(s)) | -| `connections` | [CanvasConnection](#canvasconnection)[] | No | | | -| `constraint` | [Constraint](#constraint) | No | | | -| `placement` | [Placement](#placement) | No | | | - -### Constraint - -| Property | Type | Required | Default | Description | -|--------------|--------|----------|---------|-----------------------------------------------------------------------| -| `horizontal` | string | No | | Possible values are: `left`, `right`, `leftright`, `center`, `scale`. | -| `vertical` | string | No | | Possible values are: `top`, `bottom`, `topbottom`, `center`, `scale`. | - -### LineConfig - -| Property | Type | Required | Default | Description | -|----------|-----------------------------------------------|----------|---------|-------------| -| `color` | [ColorDimensionConfig](#colordimensionconfig) | No | | | -| `width` | number | No | | | - -### Placement - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-------------| -| `bottom` | number | No | | | -| `height` | number | No | | | -| `left` | number | No | | | -| `right` | number | No | | | -| `top` | number | No | | | -| `width` | number | No | | | - -### Options - -| Property | Type | Required | Default | Description | -|---------------------|-----------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------| -| `inlineEditing` | boolean | **Yes** | `true` | Enable inline editing | -| `panZoom` | boolean | **Yes** | `true` | Enable pan and zoom | -| `root` | [object](#root) | **Yes** | | The root element of canvas (frame), where all canvas elements are nested
TODO: Figure out how to define a default value for this | -| `showAdvancedTypes` | boolean | **Yes** | `true` | Show all available element types | - -### Root - -The root element of canvas (frame), where all canvas elements are nested -TODO: Figure out how to define a default value for this - -| Property | Type | Required | Default | Description | -|------------|-------------------------------------------------|----------|---------|----------------------------------------------------------------| -| `elements` | [CanvasElementOptions](#canvaselementoptions)[] | **Yes** | | The list of canvas elements attached to the root element | -| `name` | string | **Yes** | | Name of the root element | -| `type` | string | **Yes** | | Type of root element (frame)
Possible values are: `frame`. | - - diff --git a/docs/sources/developers/kinds/composable/cloudwatch/dataquery/schema-reference.md b/docs/sources/developers/kinds/composable/cloudwatch/dataquery/schema-reference.md deleted file mode 100644 index 78cb0d0f470ab..0000000000000 --- a/docs/sources/developers/kinds/composable/cloudwatch/dataquery/schema-reference.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: CloudWatchDataQuery kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## CloudWatchDataQuery - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - - diff --git a/docs/sources/developers/kinds/composable/dashboardlist/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/dashboardlist/panelcfg/schema-reference.md deleted file mode 100644 index 732b4ea58377b..0000000000000 --- a/docs/sources/developers/kinds/composable/dashboardlist/panelcfg/schema-reference.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: DashboardListPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## DashboardListPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-----------|--------------------|----------|---------|-------------| -| `Options` | [object](#options) | **Yes** | | | - -### Options - -| Property | Type | Required | Default | Description | -|----------------------|----------|----------|---------|-----------------------------------------------------------------| -| `includeVars` | boolean | **Yes** | `false` | | -| `keepTime` | boolean | **Yes** | `false` | | -| `maxItems` | integer | **Yes** | `10` | | -| `query` | string | **Yes** | `` | | -| `showHeadings` | boolean | **Yes** | `true` | | -| `showRecentlyViewed` | boolean | **Yes** | `false` | | -| `showSearch` | boolean | **Yes** | `false` | | -| `showStarred` | boolean | **Yes** | `true` | | -| `tags` | string[] | **Yes** | | | -| `folderId` | integer | No | | folderId is deprecated, and migrated to folderUid on panel init | -| `folderUID` | string | No | | | - - diff --git a/docs/sources/developers/kinds/composable/datagrid/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/datagrid/panelcfg/schema-reference.md deleted file mode 100644 index adc4c54aec41e..0000000000000 --- a/docs/sources/developers/kinds/composable/datagrid/panelcfg/schema-reference.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: DatagridPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## DatagridPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-----------|--------------------|----------|---------|-------------| -| `Options` | [object](#options) | **Yes** | | | - -### Options - -| Property | Type | Required | Default | Description | -|------------------|---------|----------|---------|-----------------------------------| -| `selectedSeries` | integer | **Yes** | `0` | Constraint: `>=0 & <=2147483647`. | - - diff --git a/docs/sources/developers/kinds/composable/debug/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/debug/panelcfg/schema-reference.md deleted file mode 100644 index 90832442886fe..0000000000000 --- a/docs/sources/developers/kinds/composable/debug/panelcfg/schema-reference.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: DebugPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## DebugPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|----------------|-------------------------|----------|---------|---------------------------------------------------------------------------| -| `DebugMode` | string | **Yes** | | Possible values are: `render`, `events`, `cursor`, `State`, `ThrowError`. | -| `Options` | [object](#options) | **Yes** | | | -| `UpdateConfig` | [object](#updateconfig) | **Yes** | | | - -### Options - -| Property | Type | Required | Default | Description | -|------------|-------------------------------|----------|---------|---------------------------------------------------------------------------| -| `mode` | string | **Yes** | | Possible values are: `render`, `events`, `cursor`, `State`, `ThrowError`. | -| `counters` | [UpdateConfig](#updateconfig) | No | | | - -### UpdateConfig - -| Property | Type | Required | Default | Description | -|-----------------|---------|----------|---------|-------------| -| `dataChanged` | boolean | **Yes** | | | -| `render` | boolean | **Yes** | | | -| `schemaChanged` | boolean | **Yes** | | | - - diff --git a/docs/sources/developers/kinds/composable/elasticsearch/dataquery/schema-reference.md b/docs/sources/developers/kinds/composable/elasticsearch/dataquery/schema-reference.md deleted file mode 100644 index 384fe82ee0ab5..0000000000000 --- a/docs/sources/developers/kinds/composable/elasticsearch/dataquery/schema-reference.md +++ /dev/null @@ -1,283 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: ElasticsearchDataQuery kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## ElasticsearchDataQuery - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|--------------|-------------------------------------------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `alias` | string | No | | Alias pattern | -| `bucketAggs` | [BucketAggregation](#bucketaggregation)[] | No | | List of bucket aggregations | -| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `metrics` | [MetricAggregation](#metricaggregation)[] | No | | List of metric aggregations | -| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | -| `query` | string | No | | Lucene query | -| `timeField` | string | No | | Name of time field | - -### BucketAggregation - -| Property | Type | Required | Default | Description | -|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|---------|-------------| -| `object` | Possible types are: [DateHistogram](#datehistogram), [Histogram](#histogram), [Terms](#terms), [Filters](#filters), [GeoHashGrid](#geohashgrid), [Nested](#nested). | | | - -### DateHistogram - -It extends [BucketAggregationWithField](#bucketaggregationwithfield). - -| Property | Type | Required | Default | Description | -|------------|--------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `field` | string | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `id` | string | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `settings` | | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | - -### BucketAggregationWithField - -It extends [BaseBucketAggregation](#basebucketaggregation). - -| Property | Type | Required | Default | Description | -|------------|--------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `id` | string | **Yes** | | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))* | -| `type` | string | **Yes** | | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `field` | string | No | | | -| `settings` | | No | | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))* | - -### BaseBucketAggregation - -| Property | Type | Required | Default | Description | -|------------|--------|----------|---------|---------------------------------------------------------------------------------------------------| -| `id` | string | **Yes** | | | -| `type` | string | **Yes** | | Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `settings` | | No | | | - -### Filters - -It extends [BaseBucketAggregation](#basebucketaggregation). - -| Property | Type | Required | Default | Description | -|------------|--------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `id` | string | **Yes** | | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))* | -| `type` | string | **Yes** | | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `settings` | | No | | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))* | - -### GeoHashGrid - -It extends [BucketAggregationWithField](#bucketaggregationwithfield). - -| Property | Type | Required | Default | Description | -|------------|--------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `field` | string | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `id` | string | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `settings` | | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | - -### Histogram - -It extends [BucketAggregationWithField](#bucketaggregationwithfield). - -| Property | Type | Required | Default | Description | -|------------|--------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `field` | string | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `id` | string | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `settings` | | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | - -### Nested - -It extends [BucketAggregationWithField](#bucketaggregationwithfield). - -| Property | Type | Required | Default | Description | -|------------|--------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `field` | string | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `id` | string | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `settings` | | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | - -### Terms - -It extends [BucketAggregationWithField](#bucketaggregationwithfield). - -| Property | Type | Required | Default | Description | -|------------|--------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `field` | string | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `id` | string | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `settings` | | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | - -### MetricAggregation - -| Property | Type | Required | Default | Description | -|----------|------------------------------------------------------------------------------------------------------|----------|---------|-------------| -| `object` | Possible types are: [Count](#count), [PipelineMetricAggregation](#pipelinemetricaggregation), [](#). | | | - -### Count - -It extends [BaseMetricAggregation](#basemetricaggregation). - -| Property | Type | Required | Default | Description | -|----------|---------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `id` | string | **Yes** | | *(Inherited from [BaseMetricAggregation](#basemetricaggregation))* | -| `type` | string | **Yes** | | *(Inherited from [BaseMetricAggregation](#basemetricaggregation))*
Possible values are: `count`, `avg`, `sum`, `min`, `max`, `extended_stats`, `percentiles`, `cardinality`, `raw_document`, `raw_data`, `logs`, `rate`, `top_metrics`, `moving_avg`, `moving_fn`, `derivative`, `serial_diff`, `cumulative_sum`, `bucket_script`. | -| `hide` | boolean | No | | *(Inherited from [BaseMetricAggregation](#basemetricaggregation))* | - -### BaseMetricAggregation - -| Property | Type | Required | Default | Description | -|----------|---------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `id` | string | **Yes** | | | -| `type` | string | **Yes** | | Possible values are: `count`, `avg`, `sum`, `min`, `max`, `extended_stats`, `percentiles`, `cardinality`, `raw_document`, `raw_data`, `logs`, `rate`, `top_metrics`, `moving_avg`, `moving_fn`, `derivative`, `serial_diff`, `cumulative_sum`, `bucket_script`. | -| `hide` | boolean | No | | | - -### PipelineMetricAggregation - -| Property | Type | Required | Default | Description | -|----------|-------------------------------------------------------------------------------------------------------------------------------------------------|----------|---------|-------------| -| `object` | Possible types are: [MovingAverage](#movingaverage), [Derivative](#derivative), [CumulativeSum](#cumulativesum), [BucketScript](#bucketscript). | | | - -### BucketScript - -It extends [PipelineMetricAggregationWithMultipleBucketPaths](#pipelinemetricaggregationwithmultiplebucketpaths). - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | *(Inherited from [PipelineMetricAggregationWithMultipleBucketPaths](#pipelinemetricaggregationwithmultiplebucketpaths))*
Possible values are: `count`, `avg`, `sum`, `min`, `max`, `extended_stats`, `percentiles`, `cardinality`, `raw_document`, `raw_data`, `logs`, `rate`, `top_metrics`, `moving_avg`, `moving_fn`, `derivative`, `serial_diff`, `cumulative_sum`, `bucket_script`. | -| `hide` | boolean | No | | *(Inherited from [PipelineMetricAggregationWithMultipleBucketPaths](#pipelinemetricaggregationwithmultiplebucketpaths))* | -| `id` | string | No | | *(Inherited from [PipelineMetricAggregationWithMultipleBucketPaths](#pipelinemetricaggregationwithmultiplebucketpaths))* | -| `pipelineVariables` | [PipelineVariable](#pipelinevariable)[] | No | | *(Inherited from [PipelineMetricAggregationWithMultipleBucketPaths](#pipelinemetricaggregationwithmultiplebucketpaths))* | -| `settings` | [object](#settings) | No | | | - -### PipelineMetricAggregationWithMultipleBucketPaths - -It extends [BaseMetricAggregation](#basemetricaggregation). - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `id` | string | **Yes** | | *(Inherited from [BaseMetricAggregation](#basemetricaggregation))* | -| `type` | string | **Yes** | | *(Inherited from [BaseMetricAggregation](#basemetricaggregation))*
Possible values are: `count`, `avg`, `sum`, `min`, `max`, `extended_stats`, `percentiles`, `cardinality`, `raw_document`, `raw_data`, `logs`, `rate`, `top_metrics`, `moving_avg`, `moving_fn`, `derivative`, `serial_diff`, `cumulative_sum`, `bucket_script`. | -| `hide` | boolean | No | | *(Inherited from [BaseMetricAggregation](#basemetricaggregation))* | -| `pipelineVariables` | [PipelineVariable](#pipelinevariable)[] | No | | | - -### PipelineVariable - -| Property | Type | Required | Default | Description | -|---------------|--------|----------|---------|-------------| -| `name` | string | **Yes** | | | -| `pipelineAgg` | string | **Yes** | | | - -### Settings - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `script` | | No | | | - -### CumulativeSum - -It extends [BasePipelineMetricAggregation](#basepipelinemetricaggregation). - -| Property | Type | Required | Default | Description | -|---------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))*
Possible values are: `count`, `avg`, `sum`, `min`, `max`, `extended_stats`, `percentiles`, `cardinality`, `raw_document`, `raw_data`, `logs`, `rate`, `top_metrics`, `moving_avg`, `moving_fn`, `derivative`, `serial_diff`, `cumulative_sum`, `bucket_script`. | -| `field` | string | No | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))* | -| `hide` | boolean | No | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))* | -| `id` | string | No | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))* | -| `pipelineAgg` | string | No | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))* | -| `settings` | [object](#settings) | No | | | - -### BasePipelineMetricAggregation - -It extends [MetricAggregationWithField](#metricaggregationwithfield). - -| Property | Type | Required | Default | Description | -|---------------|---------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | *(Inherited from [MetricAggregationWithField](#metricaggregationwithfield))*
Possible values are: `count`, `avg`, `sum`, `min`, `max`, `extended_stats`, `percentiles`, `cardinality`, `raw_document`, `raw_data`, `logs`, `rate`, `top_metrics`, `moving_avg`, `moving_fn`, `derivative`, `serial_diff`, `cumulative_sum`, `bucket_script`. | -| `field` | string | No | | *(Inherited from [MetricAggregationWithField](#metricaggregationwithfield))* | -| `hide` | boolean | No | | *(Inherited from [MetricAggregationWithField](#metricaggregationwithfield))* | -| `id` | string | No | | *(Inherited from [MetricAggregationWithField](#metricaggregationwithfield))* | -| `pipelineAgg` | string | No | | | - -### MetricAggregationWithField - -It extends [BaseMetricAggregation](#basemetricaggregation). - -| Property | Type | Required | Default | Description | -|----------|---------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `id` | string | **Yes** | | *(Inherited from [BaseMetricAggregation](#basemetricaggregation))* | -| `type` | string | **Yes** | | *(Inherited from [BaseMetricAggregation](#basemetricaggregation))*
Possible values are: `count`, `avg`, `sum`, `min`, `max`, `extended_stats`, `percentiles`, `cardinality`, `raw_document`, `raw_data`, `logs`, `rate`, `top_metrics`, `moving_avg`, `moving_fn`, `derivative`, `serial_diff`, `cumulative_sum`, `bucket_script`. | -| `field` | string | No | | | -| `hide` | boolean | No | | *(Inherited from [BaseMetricAggregation](#basemetricaggregation))* | - -### Settings - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-------------| -| `format` | string | No | | | - -### Derivative - -It extends [BasePipelineMetricAggregation](#basepipelinemetricaggregation). - -| Property | Type | Required | Default | Description | -|---------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))*
Possible values are: `count`, `avg`, `sum`, `min`, `max`, `extended_stats`, `percentiles`, `cardinality`, `raw_document`, `raw_data`, `logs`, `rate`, `top_metrics`, `moving_avg`, `moving_fn`, `derivative`, `serial_diff`, `cumulative_sum`, `bucket_script`. | -| `field` | string | No | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))* | -| `hide` | boolean | No | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))* | -| `id` | string | No | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))* | -| `pipelineAgg` | string | No | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))* | -| `settings` | [object](#settings) | No | | | - -### Settings - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-------------| -| `unit` | string | No | | | - -### MovingAverage - -#MovingAverage's settings are overridden in types.ts - -It extends [BasePipelineMetricAggregation](#basepipelinemetricaggregation). - -| Property | Type | Required | Default | Description | -|---------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))*
Possible values are: `count`, `avg`, `sum`, `min`, `max`, `extended_stats`, `percentiles`, `cardinality`, `raw_document`, `raw_data`, `logs`, `rate`, `top_metrics`, `moving_avg`, `moving_fn`, `derivative`, `serial_diff`, `cumulative_sum`, `bucket_script`. | -| `field` | string | No | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))* | -| `hide` | boolean | No | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))* | -| `id` | string | No | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))* | -| `pipelineAgg` | string | No | | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))* | -| `settings` | [object](#settings) | No | | | - -### Settings - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Meta - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Settings - -| Property | Type | Required | Default | Description | -|-----------|----------|----------|---------|-------------| -| `metrics` | string[] | No | | | -| `orderBy` | string | No | | | -| `order` | string | No | | | - - diff --git a/docs/sources/developers/kinds/composable/gauge/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/gauge/panelcfg/schema-reference.md deleted file mode 100644 index 5cc9eaa99c66e..0000000000000 --- a/docs/sources/developers/kinds/composable/gauge/panelcfg/schema-reference.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: GaugePanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## GaugePanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-----------|--------------------|----------|---------|-------------| -| `Options` | [object](#options) | **Yes** | | | - -### Options - -It extends [SingleStatBaseOptions](#singlestatbaseoptions). - -| Property | Type | Required | Default | Description | -|------------------------|-------------------------------------------------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------| -| `minVizHeight` | uint32 | **Yes** | `75` | | -| `minVizWidth` | uint32 | **Yes** | `75` | | -| `showThresholdLabels` | boolean | **Yes** | `false` | | -| `showThresholdMarkers` | boolean | **Yes** | `true` | | -| `sizing` | string | **Yes** | | Allows for the bar gauge size to be set explicitly
Possible values are: `auto`, `manual`. | -| `orientation` | string | No | | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs
Possible values are: `auto`, `vertical`, `horizontal`. | -| `reduceOptions` | [ReduceDataOptions](#reducedataoptions) | No | | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs | -| `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs | - -### ReduceDataOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|----------|----------|---------|---------------------------------------------------------------| -| `calcs` | string[] | **Yes** | | When !values, pick one value for the whole field | -| `fields` | string | No | | Which fields to show. By default this is only numeric fields | -| `limit` | number | No | | if showing all values limit | -| `values` | boolean | No | | If true show each row value | - -### SingleStatBaseOptions - -TODO docs - -It extends [OptionsWithTextFormatting](#optionswithtextformatting). - -| Property | Type | Required | Default | Description | -|-----------------|-------------------------------------------------|----------|---------|------------------------------------------------------------------------------------------| -| `orientation` | string | **Yes** | | TODO docs
Possible values are: `auto`, `vertical`, `horizontal`. | -| `reduceOptions` | [ReduceDataOptions](#reducedataoptions) | **Yes** | | TODO docs | -| `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | | *(Inherited from [OptionsWithTextFormatting](#optionswithtextformatting))*
TODO docs | - -### OptionsWithTextFormatting - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|-------------------------------------------------|----------|---------|-------------| -| `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | | TODO docs | - -### VizTextDisplayOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|-------------|--------|----------|---------|--------------------------| -| `titleSize` | number | No | | Explicit title text size | -| `valueSize` | number | No | | Explicit value text size | - - diff --git a/docs/sources/developers/kinds/composable/geomap/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/geomap/panelcfg/schema-reference.md deleted file mode 100644 index cfa0b3c913860..0000000000000 --- a/docs/sources/developers/kinds/composable/geomap/panelcfg/schema-reference.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: GeomapPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## GeomapPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-------------------|----------------------------|----------|---------|-----------------------------------------------| -| `ControlsOptions` | [object](#controlsoptions) | **Yes** | | | -| `MapCenterID` | string | **Yes** | | Possible values are: `zero`, `coords`, `fit`. | -| `MapViewConfig` | [object](#mapviewconfig) | **Yes** | | | -| `Options` | [object](#options) | **Yes** | | | -| `TooltipMode` | string | **Yes** | | Possible values are: `none`, `details`. | -| `TooltipOptions` | [object](#tooltipoptions) | **Yes** | | | - -### ControlsOptions - -| Property | Type | Required | Default | Description | -|-------------------|---------|----------|---------|--------------------------| -| `mouseWheelZoom` | boolean | No | | let the mouse wheel zoom | -| `showAttribution` | boolean | No | | Lower right | -| `showDebug` | boolean | No | | Show debug | -| `showMeasure` | boolean | No | | Show measure | -| `showScale` | boolean | No | | Scale options | -| `showZoom` | boolean | No | | Zoom (upper left) | - -### MapViewConfig - -| Property | Type | Required | Default | Description | -|-------------|---------|----------|---------|-------------| -| `id` | string | **Yes** | `zero` | | -| `allLayers` | boolean | No | `true` | | -| `lastOnly` | boolean | No | | | -| `lat` | int64 | No | `0` | | -| `layer` | string | No | | | -| `lon` | int64 | No | `0` | | -| `maxZoom` | integer | No | | | -| `minZoom` | integer | No | | | -| `padding` | integer | No | | | -| `shared` | boolean | No | | | -| `zoom` | int64 | No | `1` | | - -### Options - -| Property | Type | Required | Default | Description | -|------------|---------------------------------------|----------|---------|-------------| -| `basemap` | [MapLayerOptions](#maplayeroptions) | **Yes** | | | -| `controls` | [ControlsOptions](#controlsoptions) | **Yes** | | | -| `layers` | [MapLayerOptions](#maplayeroptions)[] | **Yes** | | | -| `tooltip` | [TooltipOptions](#tooltipoptions) | **Yes** | | | -| `view` | [MapViewConfig](#mapviewconfig) | **Yes** | | | - -### MapLayerOptions - -| Property | Type | Required | Default | Description | -|--------------|---------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------| -| `name` | string | **Yes** | | configured unique display name | -| `type` | string | **Yes** | | | -| `config` | | No | | Custom options depending on the type | -| `filterData` | | No | | Defines a frame MatcherConfig that may filter data for the given layer | -| `location` | [FrameGeometrySource](#framegeometrysource) | No | | | -| `opacity` | integer | No | | Common properties:
https://openlayers.org/en/latest/apidoc/module-ol_layer_Base-BaseLayer.html
Layer opacity (0-1) | -| `tooltip` | boolean | No | | Check tooltip (defaults to true) | - -### FrameGeometrySource - -| Property | Type | Required | Default | Description | -|-------------|--------|----------|---------|-------------------------------------------------------------| -| `mode` | string | **Yes** | | Possible values are: `auto`, `geohash`, `coords`, `lookup`. | -| `gazetteer` | string | No | | Path to Gazetteer | -| `geohash` | string | No | | Field mappings | -| `latitude` | string | No | | | -| `longitude` | string | No | | | -| `lookup` | string | No | | | -| `wkt` | string | No | | | - -### TooltipOptions - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-----------------------------------------| -| `mode` | string | **Yes** | | Possible values are: `none`, `details`. | - - diff --git a/docs/sources/developers/kinds/composable/googlecloudmonitoring/dataquery/schema-reference.md b/docs/sources/developers/kinds/composable/googlecloudmonitoring/dataquery/schema-reference.md deleted file mode 100644 index d8f28ff51d6ee..0000000000000 --- a/docs/sources/developers/kinds/composable/googlecloudmonitoring/dataquery/schema-reference.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: GoogleCloudMonitoringDataQuery kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## GoogleCloudMonitoringDataQuery - -#### Maturity: [merged](../../../maturity/#merged) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - - diff --git a/docs/sources/developers/kinds/composable/grafanapyroscope/dataquery/schema-reference.md b/docs/sources/developers/kinds/composable/grafanapyroscope/dataquery/schema-reference.md deleted file mode 100644 index 3b7a95d56c6c4..0000000000000 --- a/docs/sources/developers/kinds/composable/grafanapyroscope/dataquery/schema-reference.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: GrafanaPyroscopeDataQuery kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## GrafanaPyroscopeDataQuery - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-----------------|----------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `groupBy` | string[] | **Yes** | | Allows to group the results. | -| `labelSelector` | string | **Yes** | `{}` | Specifies the query label selectors. | -| `profileTypeId` | string | **Yes** | | Specifies the type of profile to query. | -| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `maxNodes` | integer | No | | Sets the maximum number of nodes in the flamegraph. | -| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | -| `spanSelector` | string[] | No | | Specifies the query span selectors. | - - diff --git a/docs/sources/developers/kinds/composable/heatmap/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/heatmap/panelcfg/schema-reference.md deleted file mode 100644 index 4427b6c99e9c4..0000000000000 --- a/docs/sources/developers/kinds/composable/heatmap/panelcfg/schema-reference.md +++ /dev/null @@ -1,240 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: HeatmapPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## HeatmapPanelCfg - -#### Maturity: [merged](../../../maturity/#merged) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-----------------------|--------------------------------|----------|---------|-------------------------------------------------------------------------------------------| -| `CellValues` | [object](#cellvalues) | **Yes** | | Controls cell value options | -| `ExemplarConfig` | [object](#exemplarconfig) | **Yes** | | Controls exemplar options | -| `FieldConfig` | [object](#fieldconfig) | **Yes** | | | -| `FilterValueRange` | [object](#filtervaluerange) | **Yes** | | Controls the value filter range | -| `HeatmapColorMode` | string | **Yes** | | Controls the color mode of the heatmap
Possible values are: `opacity`, `scheme`. | -| `HeatmapColorOptions` | [object](#heatmapcoloroptions) | **Yes** | | Controls various color options | -| `HeatmapColorScale` | string | **Yes** | | Controls the color scale of the heatmap
Possible values are: `linear`, `exponential`. | -| `HeatmapLegend` | [object](#heatmaplegend) | **Yes** | | Controls legend options | -| `HeatmapTooltip` | [object](#heatmaptooltip) | **Yes** | | Controls tooltip options | -| `Options` | [object](#options) | **Yes** | | | -| `RowsHeatmapOptions` | [object](#rowsheatmapoptions) | **Yes** | | Controls frame rows options | -| `YAxisConfig` | [object](#yaxisconfig) | **Yes** | | Configuration options for the yAxis | - -### CellValues - -Controls cell value options - -| Property | Type | Required | Default | Description | -|------------|--------|----------|---------|-------------------------------------------------| -| `decimals` | number | No | | Controls the number of decimals for cell values | -| `unit` | string | No | | Controls the cell value unit | - -### ExemplarConfig - -Controls exemplar options - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|----------------------------------------| -| `color` | string | **Yes** | | Sets the color of the exemplar markers | - -### FieldConfig - -It extends [HideableFieldConfig](#hideablefieldconfig). - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------|----------|---------|------------------------------------------------------------------------------| -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | *(Inherited from [HideableFieldConfig](#hideablefieldconfig))*
TODO docs | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | TODO docs | - -### HideSeriesConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|---------|----------|---------|-------------| -| `legend` | boolean | **Yes** | | | -| `tooltip` | boolean | **Yes** | | | -| `viz` | boolean | **Yes** | | | - -### HideableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|---------------------------------------|----------|---------|-------------| -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | TODO docs | - -### ScaleDistributionConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-------------------|--------|----------|---------|--------------------------------------------------------------------------| -| `type` | string | **Yes** | | TODO docs
Possible values are: `linear`, `log`, `ordinal`, `symlog`. | -| `linearThreshold` | number | No | | | -| `log` | number | No | | | - -### FilterValueRange - -Controls the value filter range - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|--------------------------------------------------------------------------| -| `ge` | number | No | | Sets the filter range to values greater than or equal to the given value | -| `le` | number | No | | Sets the filter range to values less than or equal to the given value | - -### HeatmapColorOptions - -Controls various color options - -| Property | Type | Required | Default | Description | -|------------|---------|----------|---------|-------------------------------------------------------------------------------------------| -| `exponent` | number | **Yes** | | Controls the exponent when scale is set to exponential | -| `fill` | string | **Yes** | | Controls the color fill when in opacity mode | -| `reverse` | boolean | **Yes** | | Reverses the color scheme | -| `scheme` | string | **Yes** | | Controls the color scheme used | -| `steps` | integer | **Yes** | | Controls the number of color steps
Constraint: `>=2 & <=128`. | -| `max` | number | No | | Sets the maximum value for the color scale | -| `min` | number | No | | Sets the minimum value for the color scale | -| `mode` | string | No | | Controls the color mode of the heatmap
Possible values are: `opacity`, `scheme`. | -| `scale` | string | No | | Controls the color scale of the heatmap
Possible values are: `linear`, `exponential`. | - -### HeatmapLegend - -Controls legend options - -| Property | Type | Required | Default | Description | -|----------|---------|----------|---------|---------------------------------| -| `show` | boolean | **Yes** | | Controls if the legend is shown | - -### HeatmapTooltip - -Controls tooltip options - -| Property | Type | Required | Default | Description | -|------------------|---------|----------|---------|----------------------------------------------------------------| -| `show` | boolean | **Yes** | | Controls if the tooltip is shown | -| `showColorScale` | boolean | No | | Controls if the tooltip shows a color scale in header | -| `yHistogram` | boolean | No | | Controls if the tooltip shows a histogram of the y-axis values | - -### Options - -| Property | Type | Required | Default | Description | -|----------------|---------------------------------------------------------|----------|----------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `color` | [object](#color) | **Yes** | `map[exponent:0.5 fill:dark-orange reverse:false scheme:Oranges steps:64]` | Controls the color options | -| `exemplars` | [ExemplarConfig](#exemplarconfig) | **Yes** | | Controls exemplar options | -| `legend` | [HeatmapLegend](#heatmaplegend) | **Yes** | | Controls legend options | -| `showValue` | string | **Yes** | | | *{
layout: ui.HeatmapCellLayout & "auto" // TODO: fix after remove when https://github.com/grafana/cuetsy/issues/74 is fixed
}
Controls the display of the value in the cell | -| `tooltip` | [HeatmapTooltip](#heatmaptooltip) | **Yes** | | Controls tooltip options | -| `yAxis` | [YAxisConfig](#yaxisconfig) | **Yes** | | Configuration options for the yAxis | -| `calculate` | boolean | No | `false` | Controls if the heatmap should be calculated from data | -| `calculation` | [HeatmapCalculationOptions](#heatmapcalculationoptions) | No | | | -| `cellGap` | integer | No | `1` | Controls gap between cells
Constraint: `>=0 & <=25`. | -| `cellRadius` | number | No | | Controls cell radius | -| `cellValues` | [object](#cellvalues) | No | `map[]` | Controls cell value unit | -| `filterValues` | [object](#filtervalues) | No | `map[le:1e-09]` | Filters values between a given range | -| `rowsFrame` | [RowsHeatmapOptions](#rowsheatmapoptions) | No | | Controls frame rows options | - -### HeatmapCalculationOptions - -| Property | Type | Required | Default | Description | -|------------|-------------------------------------------------------------------|----------|---------|-------------| -| `xBuckets` | [HeatmapCalculationBucketConfig](#heatmapcalculationbucketconfig) | No | | | -| `yBuckets` | [HeatmapCalculationBucketConfig](#heatmapcalculationbucketconfig) | No | | | - -### HeatmapCalculationBucketConfig - -| Property | Type | Required | Default | Description | -|----------|-----------------------------------------------------|----------|---------|----------------------------------------------------------| -| `mode` | string | No | | Possible values are: `size`, `count`. | -| `scale` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | TODO docs | -| `value` | string | No | | The number of buckets to use for the axis in the heatmap | - -### RowsHeatmapOptions - -Controls frame rows options - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|----------------------------------------------------------| -| `layout` | string | No | | Possible values are: `le`, `ge`, `unknown`, `auto`. | -| `value` | string | No | | Sets the name of the cell when not calculating from data | - -### YAxisConfig - -Configuration options for the yAxis - -It extends [AxisConfig](#axisconfig). - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisCenteredZero` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisColorMode` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisLabel` | string | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisPlacement` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisSoftMin` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisWidth` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `decimals` | number | No | | Controls the number of decimals for yAxis values | -| `max` | number | No | | Sets the maximum value for the yAxis | -| `min` | number | No | | Sets the minimum value for the yAxis | -| `reverse` | boolean | No | | Reverses the yAxis | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs | -| `unit` | string | No | | Sets the yAxis unit | - -### AxisConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | | -| `axisCenteredZero` | boolean | No | | | -| `axisColorMode` | string | No | | TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | | -| `axisLabel` | string | No | | | -| `axisPlacement` | string | No | | TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | | -| `axisSoftMin` | number | No | | | -| `axisWidth` | number | No | | | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | TODO docs | - -### CellValues - -Controls cell value unit - -| Property | Type | Required | Default | Description | -|----------|-----------------------------------|----------|---------|-------------| -| `object` | Possible types are: [](#), [](#). | | | - -### Color - -Controls the color options - -| Property | Type | Required | Default | Description | -|----------|-----------------------------------|----------|---------|-------------| -| `object` | Possible types are: [](#), [](#). | | | - -### FilterValues - -Filters values between a given range - -| Property | Type | Required | Default | Description | -|----------|-----------------------------------|----------|---------|-------------| -| `object` | Possible types are: [](#), [](#). | | | - - diff --git a/docs/sources/developers/kinds/composable/histogram/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/histogram/panelcfg/schema-reference.md deleted file mode 100644 index f3f0efe92345a..0000000000000 --- a/docs/sources/developers/kinds/composable/histogram/panelcfg/schema-reference.md +++ /dev/null @@ -1,145 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: HistogramPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## HistogramPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|---------------|------------------------|----------|---------|-------------| -| `FieldConfig` | [object](#fieldconfig) | **Yes** | | | -| `Options` | [object](#options) | **Yes** | | | - -### FieldConfig - -It extends [AxisConfig](#axisconfig) and [HideableFieldConfig](#hideablefieldconfig). - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisCenteredZero` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisColorMode` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisLabel` | string | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisPlacement` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisSoftMin` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisWidth` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `fillOpacity` | integer | No | `80` | Controls the fill opacity of the bars.
Constraint: `>=0 & <=100`. | -| `gradientMode` | string | No | | Set the mode of the gradient fill. Fill gradient is based on the line color. To change the color, use the standard color scheme field option.
Gradient appearance is influenced by the Fill opacity setting. | -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | *(Inherited from [HideableFieldConfig](#hideablefieldconfig))*
TODO docs | -| `lineWidth` | integer | No | `1` | Controls line width of the bars.
Constraint: `>=0 & <=10`. | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs | - -### AxisConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | | -| `axisCenteredZero` | boolean | No | | | -| `axisColorMode` | string | No | | TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | | -| `axisLabel` | string | No | | | -| `axisPlacement` | string | No | | TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | | -| `axisSoftMin` | number | No | | | -| `axisWidth` | number | No | | | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | TODO docs | - -### ScaleDistributionConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-------------------|--------|----------|---------|--------------------------------------------------------------------------| -| `type` | string | **Yes** | | TODO docs
Possible values are: `linear`, `log`, `ordinal`, `symlog`. | -| `linearThreshold` | number | No | | | -| `log` | number | No | | | - -### HideSeriesConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|---------|----------|---------|-------------| -| `legend` | boolean | **Yes** | | | -| `tooltip` | boolean | **Yes** | | | -| `viz` | boolean | **Yes** | | | - -### HideableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|---------------------------------------|----------|---------|-------------| -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | TODO docs | - -### Options - -It extends [OptionsWithLegend](#optionswithlegend) and [OptionsWithTooltip](#optionswithtooltip). - -| Property | Type | Required | Default | Description | -|----------------|-----------------------------------------|----------|---------|----------------------------------------------------------------------------| -| `legend` | [VizLegendOptions](#vizlegendoptions) | **Yes** | | *(Inherited from [OptionsWithLegend](#optionswithlegend))*
TODO docs | -| `tooltip` | [VizTooltipOptions](#viztooltipoptions) | **Yes** | | *(Inherited from [OptionsWithTooltip](#optionswithtooltip))*
TODO docs | -| `bucketOffset` | int32 | No | `0` | Offset buckets by this amount | -| `bucketSize` | integer | No | | Size of each bucket | -| `combine` | boolean | No | | Combines multiple series into a single histogram | - -### OptionsWithLegend - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|---------------------------------------|----------|---------|-------------| -| `legend` | [VizLegendOptions](#vizlegendoptions) | **Yes** | | TODO docs | - -### VizLegendOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|----------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `calcs` | string[] | **Yes** | | | -| `displayMode` | string | **Yes** | | TODO docs
Note: "hidden" needs to remain as an option for plugins compatibility
Possible values are: `list`, `table`, `hidden`. | -| `placement` | string | **Yes** | | TODO docs
Possible values are: `bottom`, `right`. | -| `showLegend` | boolean | **Yes** | | | -| `asTable` | boolean | No | | | -| `isVisible` | boolean | No | | | -| `sortBy` | string | No | | | -| `sortDesc` | boolean | No | | | -| `width` | number | No | | | - -### OptionsWithTooltip - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|-----------------------------------------|----------|---------|-------------| -| `tooltip` | [VizTooltipOptions](#viztooltipoptions) | **Yes** | | TODO docs | - -### VizTooltipOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|---------------------------------------------------------------| -| `mode` | string | **Yes** | | TODO docs
Possible values are: `single`, `multi`, `none`. | -| `sort` | string | **Yes** | | TODO docs
Possible values are: `asc`, `desc`, `none`. | - - diff --git a/docs/sources/developers/kinds/composable/logs/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/logs/panelcfg/schema-reference.md deleted file mode 100644 index 3a883dcad8ef2..0000000000000 --- a/docs/sources/developers/kinds/composable/logs/panelcfg/schema-reference.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: LogsPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## LogsPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-----------|--------------------|----------|---------|-------------| -| `Options` | [object](#options) | **Yes** | | | - -### Options - -| Property | Type | Required | Default | Description | -|----------------------|---------|----------|---------|---------------------------------------------------------------| -| `dedupStrategy` | string | **Yes** | | Possible values are: `none`, `exact`, `numbers`, `signature`. | -| `enableLogDetails` | boolean | **Yes** | | | -| `prettifyLogMessage` | boolean | **Yes** | | | -| `showCommonLabels` | boolean | **Yes** | | | -| `showLabels` | boolean | **Yes** | | | -| `showTime` | boolean | **Yes** | | | -| `sortOrder` | string | **Yes** | | Possible values are: `Descending`, `Ascending`. | -| `wrapLogMessage` | boolean | **Yes** | | | - - diff --git a/docs/sources/developers/kinds/composable/loki/dataquery/schema-reference.md b/docs/sources/developers/kinds/composable/loki/dataquery/schema-reference.md deleted file mode 100644 index d7cfba8b09af7..0000000000000 --- a/docs/sources/developers/kinds/composable/loki/dataquery/schema-reference.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: LokiDataQuery kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## LokiDataQuery - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|----------------|---------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `expr` | string | **Yes** | | The LogQL query. | -| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `editorMode` | string | No | | Possible values are: `code`, `builder`. | -| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `instant` | boolean | No | | @deprecated, now use queryType. | -| `legendFormat` | string | No | | Used to override the name of the series. | -| `maxLines` | integer | No | | Used to limit the number of log rows returned. | -| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | -| `range` | boolean | No | | @deprecated, now use queryType. | -| `resolution` | integer | No | | @deprecated, now use step. | -| `step` | string | No | | Used to set step value for range queries. | - - diff --git a/docs/sources/developers/kinds/composable/news/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/news/panelcfg/schema-reference.md deleted file mode 100644 index f4290acc9a8e8..0000000000000 --- a/docs/sources/developers/kinds/composable/news/panelcfg/schema-reference.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: NewsPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## NewsPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-----------|--------------------|----------|---------|-------------| -| `Options` | [object](#options) | **Yes** | | | - -### Options - -| Property | Type | Required | Default | Description | -|-------------|---------|----------|---------|--------------------------------------------| -| `feedUrl` | string | No | | empty/missing will default to grafana blog | -| `showImage` | boolean | No | `true` | | - - diff --git a/docs/sources/developers/kinds/composable/nodegraph/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/nodegraph/panelcfg/schema-reference.md deleted file mode 100644 index 1ac4a3f7a3461..0000000000000 --- a/docs/sources/developers/kinds/composable/nodegraph/panelcfg/schema-reference.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: NodeGraphPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## NodeGraphPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|---------------|------------------------|----------|---------|-------------| -| `ArcOption` | [object](#arcoption) | **Yes** | | | -| `EdgeOptions` | [object](#edgeoptions) | **Yes** | | | -| `NodeOptions` | [object](#nodeoptions) | **Yes** | | | -| `Options` | [object](#options) | **Yes** | | | - -### ArcOption - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-----------------------------------------------------------------------------------------------------| -| `color` | string | No | | The color of the arc. | -| `field` | string | No | | Field from which to get the value. Values should be less than 1, representing fraction of a circle. | - -### EdgeOptions - -| Property | Type | Required | Default | Description | -|---------------------|--------|----------|---------|-----------------------------------------------------------------------------| -| `mainStatUnit` | string | No | | Unit for the main stat to override what ever is set in the data frame. | -| `secondaryStatUnit` | string | No | | Unit for the secondary stat to override what ever is set in the data frame. | - -### NodeOptions - -| Property | Type | Required | Default | Description | -|---------------------|---------------------------|----------|---------|-----------------------------------------------------------------------------------------| -| `arcs` | [ArcOption](#arcoption)[] | No | | Define which fields are shown as part of the node arc (colored circle around the node). | -| `mainStatUnit` | string | No | | Unit for the main stat to override what ever is set in the data frame. | -| `secondaryStatUnit` | string | No | | Unit for the secondary stat to override what ever is set in the data frame. | - -### Options - -| Property | Type | Required | Default | Description | -|----------|-----------------------------|----------|---------|-------------| -| `edges` | [EdgeOptions](#edgeoptions) | No | | | -| `nodes` | [NodeOptions](#nodeoptions) | No | | | - - diff --git a/docs/sources/developers/kinds/composable/parca/dataquery/schema-reference.md b/docs/sources/developers/kinds/composable/parca/dataquery/schema-reference.md deleted file mode 100644 index baf0cc6be0010..0000000000000 --- a/docs/sources/developers/kinds/composable/parca/dataquery/schema-reference.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: ParcaDataQuery kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## ParcaDataQuery - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-----------------|---------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `labelSelector` | string | **Yes** | `{}` | Specifies the query label selectors. | -| `profileTypeId` | string | **Yes** | | Specifies the type of profile to query. | -| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | - - diff --git a/docs/sources/developers/kinds/composable/piechart/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/piechart/panelcfg/schema-reference.md deleted file mode 100644 index 9c2a8060c23f9..0000000000000 --- a/docs/sources/developers/kinds/composable/piechart/panelcfg/schema-reference.md +++ /dev/null @@ -1,152 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: PieChartPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## PieChartPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-------------------------|---------------------------------------------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `FieldConfig` | [HideableFieldConfig](#hideablefieldconfig) | **Yes** | | TODO docs | -| `Options` | [object](#options) | **Yes** | | | -| `PieChartLabels` | string | **Yes** | | Select labels to display on the pie chart.
- Name - The series or field name.
- Percent - The percentage of the whole.
- Value - The raw numerical value.
Possible values are: `name`, `value`, `percent`. | -| `PieChartLegendOptions` | [object](#piechartlegendoptions) | **Yes** | | | -| `PieChartLegendValues` | string | **Yes** | | Select values to display in the legend.
- Percent: The percentage of the whole.
- Value: The raw numerical value.
Possible values are: `value`, `percent`. | -| `PieChartType` | string | **Yes** | | Select the pie chart display style.
Possible values are: `pie`, `donut`. | - -### HideableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|---------------------------------------|----------|---------|-------------| -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | TODO docs | - -### HideSeriesConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|---------|----------|---------|-------------| -| `legend` | boolean | **Yes** | | | -| `tooltip` | boolean | **Yes** | | | -| `viz` | boolean | **Yes** | | | - -### Options - -It extends [OptionsWithTooltip](#optionswithtooltip) and [SingleStatBaseOptions](#singlestatbaseoptions). - -| Property | Type | Required | Default | Description | -|-----------------|-------------------------------------------------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------| -| `displayLabels` | string[] | **Yes** | | | -| `legend` | [PieChartLegendOptions](#piechartlegendoptions) | **Yes** | | | -| `pieType` | string | **Yes** | | Select the pie chart display style.
Possible values are: `pie`, `donut`. | -| `tooltip` | [VizTooltipOptions](#viztooltipoptions) | **Yes** | | *(Inherited from [OptionsWithTooltip](#optionswithtooltip))*
TODO docs | -| `orientation` | string | No | | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs
Possible values are: `auto`, `vertical`, `horizontal`. | -| `reduceOptions` | [ReduceDataOptions](#reducedataoptions) | No | | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs | -| `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs | - -### OptionsWithTooltip - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|-----------------------------------------|----------|---------|-------------| -| `tooltip` | [VizTooltipOptions](#viztooltipoptions) | **Yes** | | TODO docs | - -### VizTooltipOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|---------------------------------------------------------------| -| `mode` | string | **Yes** | | TODO docs
Possible values are: `single`, `multi`, `none`. | -| `sort` | string | **Yes** | | TODO docs
Possible values are: `asc`, `desc`, `none`. | - -### PieChartLegendOptions - -It extends [VizLegendOptions](#vizlegendoptions). - -| Property | Type | Required | Default | Description | -|---------------|----------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `calcs` | string[] | **Yes** | | *(Inherited from [VizLegendOptions](#vizlegendoptions))* | -| `displayMode` | string | **Yes** | | *(Inherited from [VizLegendOptions](#vizlegendoptions))*
TODO docs
Note: "hidden" needs to remain as an option for plugins compatibility
Possible values are: `list`, `table`, `hidden`. | -| `placement` | string | **Yes** | | *(Inherited from [VizLegendOptions](#vizlegendoptions))*
TODO docs
Possible values are: `bottom`, `right`. | -| `showLegend` | boolean | **Yes** | | *(Inherited from [VizLegendOptions](#vizlegendoptions))* | -| `values` | string[] | **Yes** | | | -| `asTable` | boolean | No | | *(Inherited from [VizLegendOptions](#vizlegendoptions))* | -| `isVisible` | boolean | No | | *(Inherited from [VizLegendOptions](#vizlegendoptions))* | -| `sortBy` | string | No | | *(Inherited from [VizLegendOptions](#vizlegendoptions))* | -| `sortDesc` | boolean | No | | *(Inherited from [VizLegendOptions](#vizlegendoptions))* | -| `width` | number | No | | *(Inherited from [VizLegendOptions](#vizlegendoptions))* | - -### VizLegendOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|----------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `calcs` | string[] | **Yes** | | | -| `displayMode` | string | **Yes** | | TODO docs
Note: "hidden" needs to remain as an option for plugins compatibility
Possible values are: `list`, `table`, `hidden`. | -| `placement` | string | **Yes** | | TODO docs
Possible values are: `bottom`, `right`. | -| `showLegend` | boolean | **Yes** | | | -| `asTable` | boolean | No | | | -| `isVisible` | boolean | No | | | -| `sortBy` | string | No | | | -| `sortDesc` | boolean | No | | | -| `width` | number | No | | | - -### ReduceDataOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|----------|----------|---------|---------------------------------------------------------------| -| `calcs` | string[] | **Yes** | | When !values, pick one value for the whole field | -| `fields` | string | No | | Which fields to show. By default this is only numeric fields | -| `limit` | number | No | | if showing all values limit | -| `values` | boolean | No | | If true show each row value | - -### SingleStatBaseOptions - -TODO docs - -It extends [OptionsWithTextFormatting](#optionswithtextformatting). - -| Property | Type | Required | Default | Description | -|-----------------|-------------------------------------------------|----------|---------|------------------------------------------------------------------------------------------| -| `orientation` | string | **Yes** | | TODO docs
Possible values are: `auto`, `vertical`, `horizontal`. | -| `reduceOptions` | [ReduceDataOptions](#reducedataoptions) | **Yes** | | TODO docs | -| `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | | *(Inherited from [OptionsWithTextFormatting](#optionswithtextformatting))*
TODO docs | - -### OptionsWithTextFormatting - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|-------------------------------------------------|----------|---------|-------------| -| `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | | TODO docs | - -### VizTextDisplayOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|-------------|--------|----------|---------|--------------------------| -| `titleSize` | number | No | | Explicit title text size | -| `valueSize` | number | No | | Explicit value text size | - - diff --git a/docs/sources/developers/kinds/composable/prometheus/dataquery/schema-reference.md b/docs/sources/developers/kinds/composable/prometheus/dataquery/schema-reference.md deleted file mode 100644 index 07bc7b865de8f..0000000000000 --- a/docs/sources/developers/kinds/composable/prometheus/dataquery/schema-reference.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: PrometheusDataQuery kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## PrometheusDataQuery - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|------------------|---------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `expr` | string | **Yes** | | The actual expression/query that will be evaluated by Prometheus | -| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `editorMode` | string | No | | Possible values are: `code`, `builder`. | -| `exemplar` | boolean | No | | Execute an additional query to identify interesting raw samples relevant for the given expr | -| `format` | string | No | | Possible values are: `time_series`, `table`, `heatmap`. | -| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `instant` | boolean | No | | Returns only the latest value that Prometheus has scraped for the requested time series | -| `intervalFactor` | number | No | | @deprecated Used to specify how many times to divide max data points by. We use max data points under query options
See https://github.com/grafana/grafana/issues/48081 | -| `legendFormat` | string | No | | Series name override or template. Ex. {{hostname}} will be replaced with label value for hostname | -| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | -| `range` | boolean | No | | Returns a Range vector, comprised of a set of time series containing a range of data points over time for each time series | - - diff --git a/docs/sources/developers/kinds/composable/stat/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/stat/panelcfg/schema-reference.md deleted file mode 100644 index 51fac3c3120ff..0000000000000 --- a/docs/sources/developers/kinds/composable/stat/panelcfg/schema-reference.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: StatPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## StatPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-----------|--------------------|----------|---------|-------------| -| `Options` | [object](#options) | **Yes** | | | - -### Options - -It extends [SingleStatBaseOptions](#singlestatbaseoptions). - -| Property | Type | Required | Default | Description | -|---------------------|-------------------------------------------------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------| -| `colorMode` | string | **Yes** | | TODO docs
Possible values are: `value`, `background`, `background_solid`, `none`. | -| `graphMode` | string | **Yes** | | TODO docs
Possible values are: `none`, `line`, `area`. | -| `justifyMode` | string | **Yes** | | TODO docs
Possible values are: `auto`, `center`. | -| `showPercentChange` | boolean | **Yes** | `false` | | -| `textMode` | string | **Yes** | | TODO docs
Possible values are: `auto`, `value`, `value_and_name`, `name`, `none`. | -| `wideLayout` | boolean | **Yes** | `true` | | -| `orientation` | string | No | | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs
Possible values are: `auto`, `vertical`, `horizontal`. | -| `reduceOptions` | [ReduceDataOptions](#reducedataoptions) | No | | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs | -| `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs | - -### ReduceDataOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|----------|----------|---------|---------------------------------------------------------------| -| `calcs` | string[] | **Yes** | | When !values, pick one value for the whole field | -| `fields` | string | No | | Which fields to show. By default this is only numeric fields | -| `limit` | number | No | | if showing all values limit | -| `values` | boolean | No | | If true show each row value | - -### SingleStatBaseOptions - -TODO docs - -It extends [OptionsWithTextFormatting](#optionswithtextformatting). - -| Property | Type | Required | Default | Description | -|-----------------|-------------------------------------------------|----------|---------|------------------------------------------------------------------------------------------| -| `orientation` | string | **Yes** | | TODO docs
Possible values are: `auto`, `vertical`, `horizontal`. | -| `reduceOptions` | [ReduceDataOptions](#reducedataoptions) | **Yes** | | TODO docs | -| `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | | *(Inherited from [OptionsWithTextFormatting](#optionswithtextformatting))*
TODO docs | - -### OptionsWithTextFormatting - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|-------------------------------------------------|----------|---------|-------------| -| `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | | TODO docs | - -### VizTextDisplayOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|-------------|--------|----------|---------|--------------------------| -| `titleSize` | number | No | | Explicit title text size | -| `valueSize` | number | No | | Explicit value text size | - - diff --git a/docs/sources/developers/kinds/composable/statetimeline/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/statetimeline/panelcfg/schema-reference.md deleted file mode 100644 index be3e14fdc3598..0000000000000 --- a/docs/sources/developers/kinds/composable/statetimeline/panelcfg/schema-reference.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: StateTimelinePanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## StateTimelinePanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|---------------|------------------------|----------|---------|-------------| -| `FieldConfig` | [object](#fieldconfig) | **Yes** | | | -| `Options` | [object](#options) | **Yes** | | | - -### FieldConfig - -It extends [HideableFieldConfig](#hideablefieldconfig). - -| Property | Type | Required | Default | Description | -|---------------|---------------------------------------|----------|---------|------------------------------------------------------------------------------| -| `fillOpacity` | integer | No | `70` | Constraint: `>=0 & <=100`. | -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | *(Inherited from [HideableFieldConfig](#hideablefieldconfig))*
TODO docs | -| `lineWidth` | integer | No | `0` | Constraint: `>=0 & <=10`. | - -### HideSeriesConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|---------|----------|---------|-------------| -| `legend` | boolean | **Yes** | | | -| `tooltip` | boolean | **Yes** | | | -| `viz` | boolean | **Yes** | | | - -### HideableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|---------------------------------------|----------|---------|-------------| -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | TODO docs | - -### Options - -It extends [OptionsWithLegend](#optionswithlegend) and [OptionsWithTooltip](#optionswithtooltip) and [OptionsWithTimezones](#optionswithtimezones). - -| Property | Type | Required | Default | Description | -|---------------|-----------------------------------------|----------|---------|----------------------------------------------------------------------------| -| `legend` | [VizLegendOptions](#vizlegendoptions) | **Yes** | | *(Inherited from [OptionsWithLegend](#optionswithlegend))*
TODO docs | -| `rowHeight` | number | **Yes** | `0.9` | Controls the row height | -| `showValue` | string | **Yes** | | Show timeline values on chart | -| `tooltip` | [VizTooltipOptions](#viztooltipoptions) | **Yes** | | *(Inherited from [OptionsWithTooltip](#optionswithtooltip))*
TODO docs | -| `alignValue` | string | No | | Controls value alignment on the timelines | -| `mergeValues` | boolean | No | `true` | Merge equal consecutive values | -| `timezone` | string[] | No | | *(Inherited from [OptionsWithTimezones](#optionswithtimezones))* | - -### OptionsWithLegend - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|---------------------------------------|----------|---------|-------------| -| `legend` | [VizLegendOptions](#vizlegendoptions) | **Yes** | | TODO docs | - -### VizLegendOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|----------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `calcs` | string[] | **Yes** | | | -| `displayMode` | string | **Yes** | | TODO docs
Note: "hidden" needs to remain as an option for plugins compatibility
Possible values are: `list`, `table`, `hidden`. | -| `placement` | string | **Yes** | | TODO docs
Possible values are: `bottom`, `right`. | -| `showLegend` | boolean | **Yes** | | | -| `asTable` | boolean | No | | | -| `isVisible` | boolean | No | | | -| `sortBy` | string | No | | | -| `sortDesc` | boolean | No | | | -| `width` | number | No | | | - -### OptionsWithTimezones - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|----------|----------|---------|-------------| -| `timezone` | string[] | No | | | - -### OptionsWithTooltip - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|-----------------------------------------|----------|---------|-------------| -| `tooltip` | [VizTooltipOptions](#viztooltipoptions) | **Yes** | | TODO docs | - -### VizTooltipOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|---------------------------------------------------------------| -| `mode` | string | **Yes** | | TODO docs
Possible values are: `single`, `multi`, `none`. | -| `sort` | string | **Yes** | | TODO docs
Possible values are: `asc`, `desc`, `none`. | - - diff --git a/docs/sources/developers/kinds/composable/statushistory/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/statushistory/panelcfg/schema-reference.md deleted file mode 100644 index 1220c13da15e7..0000000000000 --- a/docs/sources/developers/kinds/composable/statushistory/panelcfg/schema-reference.md +++ /dev/null @@ -1,116 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: StatusHistoryPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## StatusHistoryPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|---------------|------------------------|----------|---------|-------------| -| `FieldConfig` | [object](#fieldconfig) | **Yes** | | | -| `Options` | [object](#options) | **Yes** | | | - -### FieldConfig - -It extends [HideableFieldConfig](#hideablefieldconfig). - -| Property | Type | Required | Default | Description | -|---------------|---------------------------------------|----------|---------|------------------------------------------------------------------------------| -| `fillOpacity` | integer | No | `70` | Constraint: `>=0 & <=100`. | -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | *(Inherited from [HideableFieldConfig](#hideablefieldconfig))*
TODO docs | -| `lineWidth` | integer | No | `1` | Constraint: `>=0 & <=10`. | - -### HideSeriesConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|---------|----------|---------|-------------| -| `legend` | boolean | **Yes** | | | -| `tooltip` | boolean | **Yes** | | | -| `viz` | boolean | **Yes** | | | - -### HideableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|---------------------------------------|----------|---------|-------------| -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | TODO docs | - -### Options - -It extends [OptionsWithLegend](#optionswithlegend) and [OptionsWithTooltip](#optionswithtooltip) and [OptionsWithTimezones](#optionswithtimezones). - -| Property | Type | Required | Default | Description | -|-------------|-----------------------------------------|----------|---------|----------------------------------------------------------------------------| -| `legend` | [VizLegendOptions](#vizlegendoptions) | **Yes** | | *(Inherited from [OptionsWithLegend](#optionswithlegend))*
TODO docs | -| `rowHeight` | number | **Yes** | `0.9` | Set the height of the rows
Constraint: `>=0 & <=1`. | -| `showValue` | string | **Yes** | | Show values on the columns | -| `tooltip` | [VizTooltipOptions](#viztooltipoptions) | **Yes** | | *(Inherited from [OptionsWithTooltip](#optionswithtooltip))*
TODO docs | -| `colWidth` | number | No | `0.9` | Controls the column width | -| `timezone` | string[] | No | | *(Inherited from [OptionsWithTimezones](#optionswithtimezones))* | - -### OptionsWithLegend - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|---------------------------------------|----------|---------|-------------| -| `legend` | [VizLegendOptions](#vizlegendoptions) | **Yes** | | TODO docs | - -### VizLegendOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|----------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `calcs` | string[] | **Yes** | | | -| `displayMode` | string | **Yes** | | TODO docs
Note: "hidden" needs to remain as an option for plugins compatibility
Possible values are: `list`, `table`, `hidden`. | -| `placement` | string | **Yes** | | TODO docs
Possible values are: `bottom`, `right`. | -| `showLegend` | boolean | **Yes** | | | -| `asTable` | boolean | No | | | -| `isVisible` | boolean | No | | | -| `sortBy` | string | No | | | -| `sortDesc` | boolean | No | | | -| `width` | number | No | | | - -### OptionsWithTimezones - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|----------|----------|---------|-------------| -| `timezone` | string[] | No | | | - -### OptionsWithTooltip - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|-----------------------------------------|----------|---------|-------------| -| `tooltip` | [VizTooltipOptions](#viztooltipoptions) | **Yes** | | TODO docs | - -### VizTooltipOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|---------------------------------------------------------------| -| `mode` | string | **Yes** | | TODO docs
Possible values are: `single`, `multi`, `none`. | -| `sort` | string | **Yes** | | TODO docs
Possible values are: `asc`, `desc`, `none`. | - - diff --git a/docs/sources/developers/kinds/composable/table/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/table/panelcfg/schema-reference.md deleted file mode 100644 index 0fbc39fba0104..0000000000000 --- a/docs/sources/developers/kinds/composable/table/panelcfg/schema-reference.md +++ /dev/null @@ -1,332 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: TablePanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## TablePanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|---------------|------------------------|----------|---------|-------------| -| `FieldConfig` | [object](#fieldconfig) | **Yes** | | | -| `Options` | [object](#options) | **Yes** | | | - -### FieldConfig - -| Property | Type | Required | Default | Description | -|---------------|---------------------------------------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `align` | string | **Yes** | | TODO -- should not be table specific!
TODO docs
Possible values are: `auto`, `left`, `right`, `center`. | -| `cellOptions` | [TableCellOptions](#tablecelloptions) | **Yes** | | Table cell options. Each cell has a display mode
and other potential options for that display. | -| `inspect` | boolean | **Yes** | `false` | | -| `displayMode` | string | No | | Internally, this is the "type" of cell that's being displayed
in the table such as colored text, JSON, gauge, etc.
The color-background-solid, gradient-gauge, and lcd-gauge
modes are deprecated in favor of new cell subOptions
Possible values are: `auto`, `color-text`, `color-background`, `color-background-solid`, `gradient-gauge`, `lcd-gauge`, `json-view`, `basic`, `image`, `gauge`, `sparkline`, `custom`. | -| `filterable` | boolean | No | | | -| `hidden` | boolean | No | | | -| `hideHeader` | boolean | No | | Hides any header for a column, useful for columns that show some static content or buttons. | -| `minWidth` | number | No | | | -| `width` | number | No | | | - -### TableCellOptions - -Table cell options. Each cell has a display mode -and other potential options for that display. - -| Property | Type | Required | Default | Description | -|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|---------|-------------| -| `object` | Possible types are: [TableAutoCellOptions](#tableautocelloptions), [TableSparklineCellOptions](#tablesparklinecelloptions), [TableBarGaugeCellOptions](#tablebargaugecelloptions), [TableColoredBackgroundCellOptions](#tablecoloredbackgroundcelloptions), [TableColorTextCellOptions](#tablecolortextcelloptions), [TableImageCellOptions](#tableimagecelloptions), [TableJsonViewCellOptions](#tablejsonviewcelloptions). | | | - -### GraphThresholdsStyleConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-----------------------------------------------------------------------------------------------------------| -| `mode` | string | **Yes** | | TODO docs
Possible values are: `off`, `line`, `dashed`, `area`, `line+area`, `dashed+area`, `series`. | - -### HideSeriesConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|---------|----------|---------|-------------| -| `legend` | boolean | **Yes** | | | -| `tooltip` | boolean | **Yes** | | | -| `viz` | boolean | **Yes** | | | - -### LineStyle - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|----------|----------|---------|--------------------------------------------------------| -| `dash` | number[] | No | | | -| `fill` | string | No | | Possible values are: `solid`, `dash`, `dot`, `square`. | - -### ScaleDistributionConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-------------------|--------|----------|---------|--------------------------------------------------------------------------| -| `type` | string | **Yes** | | TODO docs
Possible values are: `linear`, `log`, `ordinal`, `symlog`. | -| `linearThreshold` | number | No | | | -| `log` | number | No | | | - -### StackingConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-----------------------------------------------------------------| -| `group` | string | No | | | -| `mode` | string | No | | TODO docs
Possible values are: `none`, `normal`, `percent`. | - -### TableAutoCellOptions - -Auto mode table cell options - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-------------| -| `type` | string | **Yes** | | | - -### TableBarGaugeCellOptions - -Gauge cell options - -| Property | Type | Required | Default | Description | -|--------------------|--------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | | -| `mode` | string | No | | Enum expressing the possible display modes
for the bar gauge component of Grafana UI
Possible values are: `basic`, `lcd`, `gradient`. | -| `valueDisplayMode` | string | No | | Allows for the table cell gauge display type to set the gauge mode.
Possible values are: `color`, `text`, `hidden`. | - -### TableColorTextCellOptions - -Colored text cell options - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-------------| -| `type` | string | **Yes** | | | - -### TableColoredBackgroundCellOptions - -Colored background cell options - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | | -| `mode` | string | No | | Display mode to the "Colored Background" display
mode for table cells. Either displays a solid color (basic mode)
or a gradient.
Possible values are: `basic`, `gradient`. | - -### TableImageCellOptions - -Json view cell options - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-------------| -| `type` | string | **Yes** | | | - -### TableJsonViewCellOptions - -Json view cell options - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-------------| -| `type` | string | **Yes** | | | - -### TableSparklineCellOptions - -Sparkline cell options - -It extends [GraphFieldConfig](#graphfieldconfig). - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | | -| `axisBorderShow` | boolean | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `axisCenteredZero` | boolean | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `axisColorMode` | string | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))*
TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `axisLabel` | string | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `axisPlacement` | string | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))*
TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `axisSoftMin` | number | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `axisWidth` | number | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `barAlignment` | integer | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))*
TODO docs
Possible values are: `-1`, `0`, `1`. | -| `barMaxWidth` | number | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `barWidthFactor` | number | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `drawStyle` | string | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))*
TODO docs
Possible values are: `line`, `bars`, `points`. | -| `fillBelowTo` | string | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `fillColor` | string | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `fillOpacity` | number | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `gradientMode` | string | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))*
TODO docs
Possible values are: `none`, `opacity`, `hue`, `scheme`. | -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))*
TODO docs | -| `hideValue` | boolean | No | | | -| `lineColor` | string | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `lineInterpolation` | string | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))*
TODO docs
Possible values are: `linear`, `smooth`, `stepBefore`, `stepAfter`. | -| `lineStyle` | [LineStyle](#linestyle) | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))*
TODO docs | -| `lineWidth` | number | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `pointColor` | string | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `pointSize` | number | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `pointSymbol` | string | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))* | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))*
TODO docs | -| `showPoints` | string | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))*
TODO docs
Possible values are: `auto`, `never`, `always`. | -| `spanNulls` | | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))*
Indicate if null values should be treated as gaps or connected.
When the value is a number, it represents the maximum delta in the
X axis that should be considered connected. For timeseries, this is milliseconds | -| `stacking` | [StackingConfig](#stackingconfig) | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))*
TODO docs | -| `thresholdsStyle` | [GraphThresholdsStyleConfig](#graphthresholdsstyleconfig) | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))*
TODO docs | -| `transform` | string | No | | *(Inherited from [GraphFieldConfig](#graphfieldconfig))*
TODO docs
Possible values are: `constant`, `negative-Y`. | - -### GraphFieldConfig - -TODO docs - -It extends [LineConfig](#lineconfig) and [FillConfig](#fillconfig) and [PointsConfig](#pointsconfig) and [AxisConfig](#axisconfig) and [BarConfig](#barconfig) and [StackableFieldConfig](#stackablefieldconfig) and [HideableFieldConfig](#hideablefieldconfig). - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisCenteredZero` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisColorMode` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisLabel` | string | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisPlacement` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisSoftMin` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisWidth` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `barAlignment` | integer | No | | *(Inherited from [BarConfig](#barconfig))*
TODO docs
Possible values are: `-1`, `0`, `1`. | -| `barMaxWidth` | number | No | | *(Inherited from [BarConfig](#barconfig))* | -| `barWidthFactor` | number | No | | *(Inherited from [BarConfig](#barconfig))* | -| `drawStyle` | string | No | | TODO docs
Possible values are: `line`, `bars`, `points`. | -| `fillBelowTo` | string | No | | *(Inherited from [FillConfig](#fillconfig))* | -| `fillColor` | string | No | | *(Inherited from [FillConfig](#fillconfig))* | -| `fillOpacity` | number | No | | *(Inherited from [FillConfig](#fillconfig))* | -| `gradientMode` | string | No | | TODO docs
Possible values are: `none`, `opacity`, `hue`, `scheme`. | -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | *(Inherited from [HideableFieldConfig](#hideablefieldconfig))*
TODO docs | -| `lineColor` | string | No | | *(Inherited from [LineConfig](#lineconfig))* | -| `lineInterpolation` | string | No | | *(Inherited from [LineConfig](#lineconfig))*
TODO docs
Possible values are: `linear`, `smooth`, `stepBefore`, `stepAfter`. | -| `lineStyle` | [LineStyle](#linestyle) | No | | *(Inherited from [LineConfig](#lineconfig))*
TODO docs | -| `lineWidth` | number | No | | *(Inherited from [LineConfig](#lineconfig))* | -| `pointColor` | string | No | | *(Inherited from [PointsConfig](#pointsconfig))* | -| `pointSize` | number | No | | *(Inherited from [PointsConfig](#pointsconfig))* | -| `pointSymbol` | string | No | | *(Inherited from [PointsConfig](#pointsconfig))* | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs | -| `showPoints` | string | No | | *(Inherited from [PointsConfig](#pointsconfig))*
TODO docs
Possible values are: `auto`, `never`, `always`. | -| `spanNulls` | | No | | *(Inherited from [LineConfig](#lineconfig))*
Indicate if null values should be treated as gaps or connected.
When the value is a number, it represents the maximum delta in the
X axis that should be considered connected. For timeseries, this is milliseconds | -| `stacking` | [StackingConfig](#stackingconfig) | No | | *(Inherited from [StackableFieldConfig](#stackablefieldconfig))*
TODO docs | -| `thresholdsStyle` | [GraphThresholdsStyleConfig](#graphthresholdsstyleconfig) | No | | TODO docs | -| `transform` | string | No | | TODO docs
Possible values are: `constant`, `negative-Y`. | - -### AxisConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | | -| `axisCenteredZero` | boolean | No | | | -| `axisColorMode` | string | No | | TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | | -| `axisLabel` | string | No | | | -| `axisPlacement` | string | No | | TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | | -| `axisSoftMin` | number | No | | | -| `axisWidth` | number | No | | | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | TODO docs | - -### BarConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------------|---------|----------|---------|----------------------------------------------------| -| `barAlignment` | integer | No | | TODO docs
Possible values are: `-1`, `0`, `1`. | -| `barMaxWidth` | number | No | | | -| `barWidthFactor` | number | No | | | - -### FillConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|--------|----------|---------|-------------| -| `fillBelowTo` | string | No | | | -| `fillColor` | string | No | | | -| `fillOpacity` | number | No | | | - -### HideableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|---------------------------------------|----------|---------|-------------| -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | TODO docs | - -### LineConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------------|-------------------------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `lineColor` | string | No | | | -| `lineInterpolation` | string | No | | TODO docs
Possible values are: `linear`, `smooth`, `stepBefore`, `stepAfter`. | -| `lineStyle` | [LineStyle](#linestyle) | No | | TODO docs | -| `lineWidth` | number | No | | | -| `spanNulls` | | No | | Indicate if null values should be treated as gaps or connected.
When the value is a number, it represents the maximum delta in the
X axis that should be considered connected. For timeseries, this is milliseconds | - -### PointsConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|--------|----------|---------|---------------------------------------------------------------| -| `pointColor` | string | No | | | -| `pointSize` | number | No | | | -| `pointSymbol` | string | No | | | -| `showPoints` | string | No | | TODO docs
Possible values are: `auto`, `never`, `always`. | - -### StackableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|-----------------------------------|----------|---------|-------------| -| `stacking` | [StackingConfig](#stackingconfig) | No | | TODO docs | - -### Options - -| Property | Type | Required | Default | Description | -|-----------------|---------------------------------------------------|----------|----------------------------------------------|--------------------------------------------------------------------| -| `frameIndex` | number | **Yes** | `0` | Represents the index of the selected frame | -| `showHeader` | boolean | **Yes** | `true` | Controls whether the panel should show the header | -| `cellHeight` | string | No | | Controls the height of the rows | -| `footer` | [object](#footer) | No | `map[countRows:false reducer:[] show:false]` | Controls footer options | -| `showTypeIcons` | boolean | No | `false` | Controls whether the header should show icons for the column types | -| `sortBy` | [TableSortByFieldState](#tablesortbyfieldstate)[] | No | | Used to control row sorting | - -### TableSortByFieldState - -Sort by field state - -| Property | Type | Required | Default | Description | -|---------------|---------|----------|---------|-----------------------------------------------| -| `displayName` | string | **Yes** | | Sets the display name of the field to sort by | -| `desc` | boolean | No | | Flag used to indicate descending sort order | - -### Footer - -Controls footer options - -| Property | Type | Required | Default | Description | -|----------|-----------------------------------|----------|---------|-------------| -| `object` | Possible types are: [](#), [](#). | | | - - diff --git a/docs/sources/developers/kinds/composable/tempo/dataquery/schema-reference.md b/docs/sources/developers/kinds/composable/tempo/dataquery/schema-reference.md deleted file mode 100644 index 1b44c7cc98fb6..0000000000000 --- a/docs/sources/developers/kinds/composable/tempo/dataquery/schema-reference.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: TempoDataQuery kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## TempoDataQuery - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - - diff --git a/docs/sources/developers/kinds/composable/testdata/dataquery/schema-reference.md b/docs/sources/developers/kinds/composable/testdata/dataquery/schema-reference.md deleted file mode 100644 index 9cb911bd5c27f..0000000000000 --- a/docs/sources/developers/kinds/composable/testdata/dataquery/schema-reference.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: TestDataDataQuery kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## TestDataDataQuery - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-------------------|-------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `alias` | string | No | | | -| `channel` | string | No | | | -| `csvContent` | string | No | | | -| `csvFileName` | string | No | | | -| `csvWave` | [CSVWave](#csvwave)[] | No | | | -| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `dropPercent` | number | No | | Drop percentage (the chance we will lose a point 0-100) | -| `errorType` | string | No | | Possible values are: `server_panic`, `frontend_exception`, `frontend_observable`. | -| `flamegraphDiff` | boolean | No | | | -| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `labels` | string | No | | | -| `levelColumn` | boolean | No | | | -| `lines` | integer | No | | | -| `nodes` | [NodesQuery](#nodesquery) | No | | | -| `points` | array[] | No | | | -| `pulseWave` | [PulseWaveQuery](#pulsewavequery) | No | | | -| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | -| `rawFrameContent` | string | No | | | -| `scenarioId` | string | No | | Possible values are: `random_walk`, `slow_query`, `random_walk_with_error`, `random_walk_table`, `exponential_heatmap_bucket_data`, `linear_heatmap_bucket_data`, `no_data_points`, `datapoints_outside_range`, `csv_metric_values`, `predictable_pulse`, `predictable_csv_wave`, `streaming_client`, `simulation`, `usa`, `live`, `grafana_api`, `arrow`, `annotations`, `table_static`, `server_error_500`, `logs`, `node_graph`, `flame_graph`, `raw_frame`, `csv_file`, `csv_content`, `trace`, `manual_entry`, `variables-query`. | -| `seriesCount` | integer | No | | | -| `sim` | [SimulationQuery](#simulationquery) | No | | | -| `spanCount` | integer | No | | | -| `stream` | [StreamingQuery](#streamingquery) | No | | | -| `stringInput` | string | No | | | -| `usa` | [USAQuery](#usaquery) | No | | | - -### CSVWave - -| Property | Type | Required | Default | Description | -|-------------|---------|----------|---------|-------------| -| `labels` | string | No | | | -| `name` | string | No | | | -| `timeStep` | integer | No | | | -| `valuesCSV` | string | No | | | - -### NodesQuery - -| Property | Type | Required | Default | Description | -|----------|---------|----------|---------|------------------------------------------------------------| -| `count` | integer | No | | | -| `type` | string | No | | Possible values are: `random`, `response`, `random edges`. | - -### PulseWaveQuery - -| Property | Type | Required | Default | Description | -|------------|---------|----------|---------|-------------| -| `offCount` | integer | No | | | -| `offValue` | number | No | | | -| `onCount` | integer | No | | | -| `onValue` | number | No | | | -| `timeStep` | integer | No | | | - -### SimulationQuery - -| Property | Type | Required | Default | Description | -|----------|-------------------|----------|---------|-------------| -| `key` | [object](#key) | **Yes** | | | -| `config` | [object](#config) | No | | | -| `last` | boolean | No | | | -| `stream` | boolean | No | | | - -### Config - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Key - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-------------| -| `tick` | number | **Yes** | | | -| `type` | string | **Yes** | | | -| `uid` | string | No | | | - -### StreamingQuery - -| Property | Type | Required | Default | Description | -|----------|---------|----------|---------|-------------------------------------------------| -| `noise` | integer | **Yes** | | | -| `speed` | integer | **Yes** | | | -| `spread` | integer | **Yes** | | | -| `type` | string | **Yes** | | Possible values are: `signal`, `logs`, `fetch`. | -| `bands` | integer | No | | | -| `url` | string | No | | | - -### USAQuery - -| Property | Type | Required | Default | Description | -|----------|----------|----------|---------|-------------| -| `fields` | string[] | No | | | -| `mode` | string | No | | | -| `period` | string | No | | | -| `states` | string[] | No | | | - - diff --git a/docs/sources/developers/kinds/composable/text/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/text/panelcfg/schema-reference.md deleted file mode 100644 index 8b566c2a2abda..0000000000000 --- a/docs/sources/developers/kinds/composable/text/panelcfg/schema-reference.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: TextPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## TextPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|----------------|------------------------|----------|-------------|---------------------------------------------------------------------------------------------------------| -| `CodeLanguage` | string | **Yes** | `plaintext` | Possible values are: `plaintext`, `yaml`, `xml`, `typescript`, `sql`, `go`, `markdown`, `html`, `json`. | -| `CodeOptions` | [object](#codeoptions) | **Yes** | | | -| `Options` | [object](#options) | **Yes** | | | -| `TextMode` | string | **Yes** | | Possible values are: `html`, `markdown`, `code`. | - -### CodeOptions - -| Property | Type | Required | Default | Description | -|-------------------|---------|----------|-------------|---------------------------------------------------------------------------------------------------------| -| `language` | string | **Yes** | `plaintext` | Possible values are: `plaintext`, `yaml`, `xml`, `typescript`, `sql`, `go`, `markdown`, `html`, `json`. | -| `showLineNumbers` | boolean | **Yes** | `false` | | -| `showMiniMap` | boolean | **Yes** | `false` | | - -### Options - -| Property | Type | Required | Default | Description | -|-----------|-----------------------------|----------|--------------------------------------------------------------------------------|--------------------------------------------------| -| `content` | string | **Yes** | `# Title | | -| | | | | | -| | | | For markdown syntax help: [commonmark.org/help](https://commonmark.org/help/)` | | -| `mode` | string | **Yes** | | Possible values are: `html`, `markdown`, `code`. | -| `code` | [CodeOptions](#codeoptions) | No | | | - - diff --git a/docs/sources/developers/kinds/composable/timeseries/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/timeseries/panelcfg/schema-reference.md deleted file mode 100644 index 06347e8182666..0000000000000 --- a/docs/sources/developers/kinds/composable/timeseries/panelcfg/schema-reference.md +++ /dev/null @@ -1,231 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: TimeSeriesPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## TimeSeriesPanelCfg - -#### Maturity: [merged](../../../maturity/#merged) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|---------------|---------------------------------------|----------|---------|-------------| -| `FieldConfig` | [GraphFieldConfig](#graphfieldconfig) | **Yes** | | TODO docs | -| `Options` | [object](#options) | **Yes** | | | - -### GraphFieldConfig - -TODO docs - -It extends [LineConfig](#lineconfig) and [FillConfig](#fillconfig) and [PointsConfig](#pointsconfig) and [AxisConfig](#axisconfig) and [BarConfig](#barconfig) and [StackableFieldConfig](#stackablefieldconfig) and [HideableFieldConfig](#hideablefieldconfig). - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisCenteredZero` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisColorMode` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisLabel` | string | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisPlacement` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisSoftMin` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisWidth` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `barAlignment` | integer | No | | *(Inherited from [BarConfig](#barconfig))*
TODO docs
Possible values are: `-1`, `0`, `1`. | -| `barMaxWidth` | number | No | | *(Inherited from [BarConfig](#barconfig))* | -| `barWidthFactor` | number | No | | *(Inherited from [BarConfig](#barconfig))* | -| `drawStyle` | string | No | | TODO docs
Possible values are: `line`, `bars`, `points`. | -| `fillBelowTo` | string | No | | *(Inherited from [FillConfig](#fillconfig))* | -| `fillColor` | string | No | | *(Inherited from [FillConfig](#fillconfig))* | -| `fillOpacity` | number | No | | *(Inherited from [FillConfig](#fillconfig))* | -| `gradientMode` | string | No | | TODO docs
Possible values are: `none`, `opacity`, `hue`, `scheme`. | -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | *(Inherited from [HideableFieldConfig](#hideablefieldconfig))*
TODO docs | -| `lineColor` | string | No | | *(Inherited from [LineConfig](#lineconfig))* | -| `lineInterpolation` | string | No | | *(Inherited from [LineConfig](#lineconfig))*
TODO docs
Possible values are: `linear`, `smooth`, `stepBefore`, `stepAfter`. | -| `lineStyle` | [LineStyle](#linestyle) | No | | *(Inherited from [LineConfig](#lineconfig))*
TODO docs | -| `lineWidth` | number | No | | *(Inherited from [LineConfig](#lineconfig))* | -| `pointColor` | string | No | | *(Inherited from [PointsConfig](#pointsconfig))* | -| `pointSize` | number | No | | *(Inherited from [PointsConfig](#pointsconfig))* | -| `pointSymbol` | string | No | | *(Inherited from [PointsConfig](#pointsconfig))* | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs | -| `showPoints` | string | No | | *(Inherited from [PointsConfig](#pointsconfig))*
TODO docs
Possible values are: `auto`, `never`, `always`. | -| `spanNulls` | | No | | *(Inherited from [LineConfig](#lineconfig))*
Indicate if null values should be treated as gaps or connected.
When the value is a number, it represents the maximum delta in the
X axis that should be considered connected. For timeseries, this is milliseconds | -| `stacking` | [StackingConfig](#stackingconfig) | No | | *(Inherited from [StackableFieldConfig](#stackablefieldconfig))*
TODO docs | -| `thresholdsStyle` | [GraphThresholdsStyleConfig](#graphthresholdsstyleconfig) | No | | TODO docs | -| `transform` | string | No | | TODO docs
Possible values are: `constant`, `negative-Y`. | - -### AxisConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | | -| `axisCenteredZero` | boolean | No | | | -| `axisColorMode` | string | No | | TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | | -| `axisLabel` | string | No | | | -| `axisPlacement` | string | No | | TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | | -| `axisSoftMin` | number | No | | | -| `axisWidth` | number | No | | | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | TODO docs | - -### ScaleDistributionConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-------------------|--------|----------|---------|--------------------------------------------------------------------------| -| `type` | string | **Yes** | | TODO docs
Possible values are: `linear`, `log`, `ordinal`, `symlog`. | -| `linearThreshold` | number | No | | | -| `log` | number | No | | | - -### BarConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------------|---------|----------|---------|----------------------------------------------------| -| `barAlignment` | integer | No | | TODO docs
Possible values are: `-1`, `0`, `1`. | -| `barMaxWidth` | number | No | | | -| `barWidthFactor` | number | No | | | - -### FillConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|--------|----------|---------|-------------| -| `fillBelowTo` | string | No | | | -| `fillColor` | string | No | | | -| `fillOpacity` | number | No | | | - -### GraphThresholdsStyleConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-----------------------------------------------------------------------------------------------------------| -| `mode` | string | **Yes** | | TODO docs
Possible values are: `off`, `line`, `dashed`, `area`, `line+area`, `dashed+area`, `series`. | - -### HideSeriesConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|---------|----------|---------|-------------| -| `legend` | boolean | **Yes** | | | -| `tooltip` | boolean | **Yes** | | | -| `viz` | boolean | **Yes** | | | - -### HideableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|---------------------------------------|----------|---------|-------------| -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | TODO docs | - -### LineConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------------|-------------------------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `lineColor` | string | No | | | -| `lineInterpolation` | string | No | | TODO docs
Possible values are: `linear`, `smooth`, `stepBefore`, `stepAfter`. | -| `lineStyle` | [LineStyle](#linestyle) | No | | TODO docs | -| `lineWidth` | number | No | | | -| `spanNulls` | | No | | Indicate if null values should be treated as gaps or connected.
When the value is a number, it represents the maximum delta in the
X axis that should be considered connected. For timeseries, this is milliseconds | - -### LineStyle - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|----------|----------|---------|--------------------------------------------------------| -| `dash` | number[] | No | | | -| `fill` | string | No | | Possible values are: `solid`, `dash`, `dot`, `square`. | - -### PointsConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|--------|----------|---------|---------------------------------------------------------------| -| `pointColor` | string | No | | | -| `pointSize` | number | No | | | -| `pointSymbol` | string | No | | | -| `showPoints` | string | No | | TODO docs
Possible values are: `auto`, `never`, `always`. | - -### StackableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|-----------------------------------|----------|---------|-------------| -| `stacking` | [StackingConfig](#stackingconfig) | No | | TODO docs | - -### StackingConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-----------------------------------------------------------------| -| `group` | string | No | | | -| `mode` | string | No | | TODO docs
Possible values are: `none`, `normal`, `percent`. | - -### Options - -It extends [OptionsWithTimezones](#optionswithtimezones). - -| Property | Type | Required | Default | Description | -|------------|-----------------------------------------|----------|---------|------------------------------------------------------------------| -| `legend` | [VizLegendOptions](#vizlegendoptions) | **Yes** | | TODO docs | -| `tooltip` | [VizTooltipOptions](#viztooltipoptions) | **Yes** | | TODO docs | -| `timezone` | string[] | No | | *(Inherited from [OptionsWithTimezones](#optionswithtimezones))* | - -### OptionsWithTimezones - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|----------|----------|---------|-------------| -| `timezone` | string[] | No | | | - -### VizLegendOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|----------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `calcs` | string[] | **Yes** | | | -| `displayMode` | string | **Yes** | | TODO docs
Note: "hidden" needs to remain as an option for plugins compatibility
Possible values are: `list`, `table`, `hidden`. | -| `placement` | string | **Yes** | | TODO docs
Possible values are: `bottom`, `right`. | -| `showLegend` | boolean | **Yes** | | | -| `asTable` | boolean | No | | | -| `isVisible` | boolean | No | | | -| `sortBy` | string | No | | | -| `sortDesc` | boolean | No | | | -| `width` | number | No | | | - -### VizTooltipOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|---------------------------------------------------------------| -| `mode` | string | **Yes** | | TODO docs
Possible values are: `single`, `multi`, `none`. | -| `sort` | string | **Yes** | | TODO docs
Possible values are: `asc`, `desc`, `none`. | - - diff --git a/docs/sources/developers/kinds/composable/trend/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/trend/panelcfg/schema-reference.md deleted file mode 100644 index 73ec1cfc49c74..0000000000000 --- a/docs/sources/developers/kinds/composable/trend/panelcfg/schema-reference.md +++ /dev/null @@ -1,223 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: TrendPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## TrendPanelCfg - -#### Maturity: [merged](../../../maturity/#merged) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|---------------|---------------------------------------|----------|---------|----------------------------------------------------------------------| -| `FieldConfig` | [GraphFieldConfig](#graphfieldconfig) | **Yes** | | TODO docs | -| `Options` | [object](#options) | **Yes** | | Identical to timeseries... except it does not have timezone settings | - -### GraphFieldConfig - -TODO docs - -It extends [LineConfig](#lineconfig) and [FillConfig](#fillconfig) and [PointsConfig](#pointsconfig) and [AxisConfig](#axisconfig) and [BarConfig](#barconfig) and [StackableFieldConfig](#stackablefieldconfig) and [HideableFieldConfig](#hideablefieldconfig). - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisCenteredZero` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisColorMode` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisLabel` | string | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisPlacement` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisSoftMin` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisWidth` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `barAlignment` | integer | No | | *(Inherited from [BarConfig](#barconfig))*
TODO docs
Possible values are: `-1`, `0`, `1`. | -| `barMaxWidth` | number | No | | *(Inherited from [BarConfig](#barconfig))* | -| `barWidthFactor` | number | No | | *(Inherited from [BarConfig](#barconfig))* | -| `drawStyle` | string | No | | TODO docs
Possible values are: `line`, `bars`, `points`. | -| `fillBelowTo` | string | No | | *(Inherited from [FillConfig](#fillconfig))* | -| `fillColor` | string | No | | *(Inherited from [FillConfig](#fillconfig))* | -| `fillOpacity` | number | No | | *(Inherited from [FillConfig](#fillconfig))* | -| `gradientMode` | string | No | | TODO docs
Possible values are: `none`, `opacity`, `hue`, `scheme`. | -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | *(Inherited from [HideableFieldConfig](#hideablefieldconfig))*
TODO docs | -| `lineColor` | string | No | | *(Inherited from [LineConfig](#lineconfig))* | -| `lineInterpolation` | string | No | | *(Inherited from [LineConfig](#lineconfig))*
TODO docs
Possible values are: `linear`, `smooth`, `stepBefore`, `stepAfter`. | -| `lineStyle` | [LineStyle](#linestyle) | No | | *(Inherited from [LineConfig](#lineconfig))*
TODO docs | -| `lineWidth` | number | No | | *(Inherited from [LineConfig](#lineconfig))* | -| `pointColor` | string | No | | *(Inherited from [PointsConfig](#pointsconfig))* | -| `pointSize` | number | No | | *(Inherited from [PointsConfig](#pointsconfig))* | -| `pointSymbol` | string | No | | *(Inherited from [PointsConfig](#pointsconfig))* | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs | -| `showPoints` | string | No | | *(Inherited from [PointsConfig](#pointsconfig))*
TODO docs
Possible values are: `auto`, `never`, `always`. | -| `spanNulls` | | No | | *(Inherited from [LineConfig](#lineconfig))*
Indicate if null values should be treated as gaps or connected.
When the value is a number, it represents the maximum delta in the
X axis that should be considered connected. For timeseries, this is milliseconds | -| `stacking` | [StackingConfig](#stackingconfig) | No | | *(Inherited from [StackableFieldConfig](#stackablefieldconfig))*
TODO docs | -| `thresholdsStyle` | [GraphThresholdsStyleConfig](#graphthresholdsstyleconfig) | No | | TODO docs | -| `transform` | string | No | | TODO docs
Possible values are: `constant`, `negative-Y`. | - -### AxisConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | | -| `axisCenteredZero` | boolean | No | | | -| `axisColorMode` | string | No | | TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | | -| `axisLabel` | string | No | | | -| `axisPlacement` | string | No | | TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | | -| `axisSoftMin` | number | No | | | -| `axisWidth` | number | No | | | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | TODO docs | - -### ScaleDistributionConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-------------------|--------|----------|---------|--------------------------------------------------------------------------| -| `type` | string | **Yes** | | TODO docs
Possible values are: `linear`, `log`, `ordinal`, `symlog`. | -| `linearThreshold` | number | No | | | -| `log` | number | No | | | - -### BarConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------------|---------|----------|---------|----------------------------------------------------| -| `barAlignment` | integer | No | | TODO docs
Possible values are: `-1`, `0`, `1`. | -| `barMaxWidth` | number | No | | | -| `barWidthFactor` | number | No | | | - -### FillConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|--------|----------|---------|-------------| -| `fillBelowTo` | string | No | | | -| `fillColor` | string | No | | | -| `fillOpacity` | number | No | | | - -### GraphThresholdsStyleConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-----------------------------------------------------------------------------------------------------------| -| `mode` | string | **Yes** | | TODO docs
Possible values are: `off`, `line`, `dashed`, `area`, `line+area`, `dashed+area`, `series`. | - -### HideSeriesConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|---------|----------|---------|-------------| -| `legend` | boolean | **Yes** | | | -| `tooltip` | boolean | **Yes** | | | -| `viz` | boolean | **Yes** | | | - -### HideableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|---------------------------------------|----------|---------|-------------| -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | TODO docs | - -### LineConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------------|-------------------------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `lineColor` | string | No | | | -| `lineInterpolation` | string | No | | TODO docs
Possible values are: `linear`, `smooth`, `stepBefore`, `stepAfter`. | -| `lineStyle` | [LineStyle](#linestyle) | No | | TODO docs | -| `lineWidth` | number | No | | | -| `spanNulls` | | No | | Indicate if null values should be treated as gaps or connected.
When the value is a number, it represents the maximum delta in the
X axis that should be considered connected. For timeseries, this is milliseconds | - -### LineStyle - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|----------|----------|---------|--------------------------------------------------------| -| `dash` | number[] | No | | | -| `fill` | string | No | | Possible values are: `solid`, `dash`, `dot`, `square`. | - -### PointsConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|--------|----------|---------|---------------------------------------------------------------| -| `pointColor` | string | No | | | -| `pointSize` | number | No | | | -| `pointSymbol` | string | No | | | -| `showPoints` | string | No | | TODO docs
Possible values are: `auto`, `never`, `always`. | - -### StackableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|-----------------------------------|----------|---------|-------------| -| `stacking` | [StackingConfig](#stackingconfig) | No | | TODO docs | - -### StackingConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-----------------------------------------------------------------| -| `group` | string | No | | | -| `mode` | string | No | | TODO docs
Possible values are: `none`, `normal`, `percent`. | - -### Options - -Identical to timeseries... except it does not have timezone settings - -| Property | Type | Required | Default | Description | -|-----------|-----------------------------------------|----------|---------|-------------------------------------------------------| -| `legend` | [VizLegendOptions](#vizlegendoptions) | **Yes** | | TODO docs | -| `tooltip` | [VizTooltipOptions](#viztooltipoptions) | **Yes** | | TODO docs | -| `xField` | string | No | | Name of the x field to use (defaults to first number) | - -### VizLegendOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|----------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `calcs` | string[] | **Yes** | | | -| `displayMode` | string | **Yes** | | TODO docs
Note: "hidden" needs to remain as an option for plugins compatibility
Possible values are: `list`, `table`, `hidden`. | -| `placement` | string | **Yes** | | TODO docs
Possible values are: `bottom`, `right`. | -| `showLegend` | boolean | **Yes** | | | -| `asTable` | boolean | No | | | -| `isVisible` | boolean | No | | | -| `sortBy` | string | No | | | -| `sortDesc` | boolean | No | | | -| `width` | number | No | | | - -### VizTooltipOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|---------------------------------------------------------------| -| `mode` | string | **Yes** | | TODO docs
Possible values are: `single`, `multi`, `none`. | -| `sort` | string | **Yes** | | TODO docs
Possible values are: `asc`, `desc`, `none`. | - - diff --git a/docs/sources/developers/kinds/composable/xychart/panelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/xychart/panelcfg/schema-reference.md deleted file mode 100644 index 64886c535c870..0000000000000 --- a/docs/sources/developers/kinds/composable/xychart/panelcfg/schema-reference.md +++ /dev/null @@ -1,239 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: XYChartPanelCfg kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## XYChartPanelCfg - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - - - -| Property | Type | Required | Default | Description | -|-----------------------|--------------------------------|----------|---------|----------------------------------------------------------------------| -| `FieldConfig` | [object](#fieldconfig) | **Yes** | | | -| `Options` | [object](#options) | **Yes** | | | -| `ScatterSeriesConfig` | [object](#scatterseriesconfig) | **Yes** | | | -| `ScatterShow` | string | **Yes** | | Possible values are: `points`, `lines`, `points+lines`. | -| `SeriesMapping` | string | **Yes** | | Auto is "table" in the UI
Possible values are: `auto`, `manual`. | -| `XYDimensionConfig` | [object](#xydimensionconfig) | **Yes** | | Configuration for the Table/Auto mode | - -### FieldConfig - -It extends [HideableFieldConfig](#hideablefieldconfig) and [AxisConfig](#axisconfig). - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisCenteredZero` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisColorMode` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisLabel` | string | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisPlacement` | string | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisSoftMin` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `axisWidth` | number | No | | *(Inherited from [AxisConfig](#axisconfig))* | -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | *(Inherited from [HideableFieldConfig](#hideablefieldconfig))*
TODO docs | -| `labelValue` | [TextDimensionConfig](#textdimensionconfig) | No | | | -| `label` | string | No | | TODO docs
Possible values are: `auto`, `never`, `always`. | -| `lineColor` | [ColorDimensionConfig](#colordimensionconfig) | No | | | -| `lineStyle` | [LineStyle](#linestyle) | No | | TODO docs | -| `lineWidth` | integer | No | | Constraint: `>=0 & <=2147483647`. | -| `pointColor` | [ColorDimensionConfig](#colordimensionconfig) | No | | | -| `pointSize` | [ScaleDimensionConfig](#scaledimensionconfig) | No | | | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | *(Inherited from [AxisConfig](#axisconfig))*
TODO docs | -| `show` | string | No | | Possible values are: `points`, `lines`, `points+lines`. | - -### AxisConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | | -| `axisCenteredZero` | boolean | No | | | -| `axisColorMode` | string | No | | TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | | -| `axisLabel` | string | No | | | -| `axisPlacement` | string | No | | TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | | -| `axisSoftMin` | number | No | | | -| `axisWidth` | number | No | | | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | TODO docs | - -### ScaleDistributionConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-------------------|--------|----------|---------|--------------------------------------------------------------------------| -| `type` | string | **Yes** | | TODO docs
Possible values are: `linear`, `log`, `ordinal`, `symlog`. | -| `linearThreshold` | number | No | | | -| `log` | number | No | | | - -### ColorDimensionConfig - -It extends [BaseDimensionConfig](#basedimensionconfig). - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|--------------------------------------------------------------------------------------------------------------| -| `field` | string | No | | *(Inherited from [BaseDimensionConfig](#basedimensionconfig))*
fixed: T -- will be added by each element | -| `fixed` | string | No | | | - -### BaseDimensionConfig - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-------------------------------------------| -| `field` | string | No | | fixed: T -- will be added by each element | - -### HideSeriesConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|---------|----------|---------|-------------| -| `legend` | boolean | **Yes** | | | -| `tooltip` | boolean | **Yes** | | | -| `viz` | boolean | **Yes** | | | - -### HideableFieldConfig - -TODO docs - -| Property | Type | Required | Default | Description | -|------------|---------------------------------------|----------|---------|-------------| -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | TODO docs | - -### LineStyle - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|----------|----------|---------|--------------------------------------------------------| -| `dash` | number[] | No | | | -| `fill` | string | No | | Possible values are: `solid`, `dash`, `dot`, `square`. | - -### ScaleDimensionConfig - -It extends [BaseDimensionConfig](#basedimensionconfig). - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|--------------------------------------------------------------------------------------------------------------| -| `max` | number | **Yes** | | | -| `min` | number | **Yes** | | | -| `field` | string | No | | *(Inherited from [BaseDimensionConfig](#basedimensionconfig))*
fixed: T -- will be added by each element | -| `fixed` | number | No | | | -| `mode` | string | No | | Possible values are: `linear`, `quad`. | - -### TextDimensionConfig - -It extends [BaseDimensionConfig](#basedimensionconfig). - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|--------------------------------------------------------------------------------------------------------------| -| `mode` | string | **Yes** | | Possible values are: `fixed`, `field`, `template`. | -| `field` | string | No | | *(Inherited from [BaseDimensionConfig](#basedimensionconfig))*
fixed: T -- will be added by each element | -| `fixed` | string | No | | | - -### Options - -It extends [OptionsWithLegend](#optionswithlegend) and [OptionsWithTooltip](#optionswithtooltip). - -| Property | Type | Required | Default | Description | -|-----------------|-----------------------------------------------|----------|---------|----------------------------------------------------------------------------| -| `dims` | [XYDimensionConfig](#xydimensionconfig) | **Yes** | | Configuration for the Table/Auto mode | -| `legend` | [VizLegendOptions](#vizlegendoptions) | **Yes** | | *(Inherited from [OptionsWithLegend](#optionswithlegend))*
TODO docs | -| `series` | [ScatterSeriesConfig](#scatterseriesconfig)[] | **Yes** | | Manual Mode | -| `tooltip` | [VizTooltipOptions](#viztooltipoptions) | **Yes** | | *(Inherited from [OptionsWithTooltip](#optionswithtooltip))*
TODO docs | -| `seriesMapping` | string | No | | Auto is "table" in the UI
Possible values are: `auto`, `manual`. | - -### OptionsWithLegend - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|---------------------------------------|----------|---------|-------------| -| `legend` | [VizLegendOptions](#vizlegendoptions) | **Yes** | | TODO docs | - -### VizLegendOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|---------------|----------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `calcs` | string[] | **Yes** | | | -| `displayMode` | string | **Yes** | | TODO docs
Note: "hidden" needs to remain as an option for plugins compatibility
Possible values are: `list`, `table`, `hidden`. | -| `placement` | string | **Yes** | | TODO docs
Possible values are: `bottom`, `right`. | -| `showLegend` | boolean | **Yes** | | | -| `asTable` | boolean | No | | | -| `isVisible` | boolean | No | | | -| `sortBy` | string | No | | | -| `sortDesc` | boolean | No | | | -| `width` | number | No | | | - -### OptionsWithTooltip - -TODO docs - -| Property | Type | Required | Default | Description | -|-----------|-----------------------------------------|----------|---------|-------------| -| `tooltip` | [VizTooltipOptions](#viztooltipoptions) | **Yes** | | TODO docs | - -### VizTooltipOptions - -TODO docs - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|---------------------------------------------------------------| -| `mode` | string | **Yes** | | TODO docs
Possible values are: `single`, `multi`, `none`. | -| `sort` | string | **Yes** | | TODO docs
Possible values are: `asc`, `desc`, `none`. | - -### ScatterSeriesConfig - -It extends [FieldConfig](#fieldconfig). - -| Property | Type | Required | Default | Description | -|---------------------|-----------------------------------------------------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------| -| `axisBorderShow` | boolean | No | | *(Inherited from [FieldConfig](#fieldconfig))* | -| `axisCenteredZero` | boolean | No | | *(Inherited from [FieldConfig](#fieldconfig))* | -| `axisColorMode` | string | No | | *(Inherited from [FieldConfig](#fieldconfig))*
TODO docs
Possible values are: `text`, `series`. | -| `axisGridShow` | boolean | No | | *(Inherited from [FieldConfig](#fieldconfig))* | -| `axisLabel` | string | No | | *(Inherited from [FieldConfig](#fieldconfig))* | -| `axisPlacement` | string | No | | *(Inherited from [FieldConfig](#fieldconfig))*
TODO docs
Possible values are: `auto`, `top`, `right`, `bottom`, `left`, `hidden`. | -| `axisSoftMax` | number | No | | *(Inherited from [FieldConfig](#fieldconfig))* | -| `axisSoftMin` | number | No | | *(Inherited from [FieldConfig](#fieldconfig))* | -| `axisWidth` | number | No | | *(Inherited from [FieldConfig](#fieldconfig))* | -| `hideFrom` | [HideSeriesConfig](#hideseriesconfig) | No | | *(Inherited from [FieldConfig](#fieldconfig))*
TODO docs | -| `labelValue` | [TextDimensionConfig](#textdimensionconfig) | No | | *(Inherited from [FieldConfig](#fieldconfig))* | -| `label` | string | No | | *(Inherited from [FieldConfig](#fieldconfig))*
TODO docs
Possible values are: `auto`, `never`, `always`. | -| `lineColor` | [ColorDimensionConfig](#colordimensionconfig) | No | | *(Inherited from [FieldConfig](#fieldconfig))* | -| `lineStyle` | [LineStyle](#linestyle) | No | | *(Inherited from [FieldConfig](#fieldconfig))*
TODO docs | -| `lineWidth` | integer | No | | *(Inherited from [FieldConfig](#fieldconfig))*
Constraint: `>=0 & <=2147483647`. | -| `name` | string | No | | | -| `pointColor` | [ColorDimensionConfig](#colordimensionconfig) | No | | *(Inherited from [FieldConfig](#fieldconfig))* | -| `pointSize` | [ScaleDimensionConfig](#scaledimensionconfig) | No | | *(Inherited from [FieldConfig](#fieldconfig))* | -| `scaleDistribution` | [ScaleDistributionConfig](#scaledistributionconfig) | No | | *(Inherited from [FieldConfig](#fieldconfig))*
TODO docs | -| `show` | string | No | | *(Inherited from [FieldConfig](#fieldconfig))*
Possible values are: `points`, `lines`, `points+lines`. | -| `x` | string | No | | | -| `y` | string | No | | | - -### XYDimensionConfig - -Configuration for the Table/Auto mode - -| Property | Type | Required | Default | Description | -|-----------|----------|----------|---------|-----------------------------------| -| `frame` | integer | **Yes** | | Constraint: `>=0 & <=2147483647`. | -| `exclude` | string[] | No | | | -| `x` | string | No | | | - - diff --git a/docs/sources/developers/kinds/core/_index.md b/docs/sources/developers/kinds/core/_index.md deleted file mode 100644 index f791015d5b4ca..0000000000000 --- a/docs/sources/developers/kinds/core/_index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -labels: - products: - - enterprise - - oss -title: Core kinds -weight: 200 ---- - -# Grafana core kinds - -Kinds that define Grafana’s core schematized object types - dashboards, datasources, users, etc. - -{{< section >}} diff --git a/docs/sources/developers/kinds/core/accesspolicy/schema-reference.md b/docs/sources/developers/kinds/core/accesspolicy/schema-reference.md deleted file mode 100644 index 0df9b57ef00b8..0000000000000 --- a/docs/sources/developers/kinds/core/accesspolicy/schema-reference.md +++ /dev/null @@ -1,131 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: AccessPolicy kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## AccessPolicy - -#### Maturity: [merged](../../../maturity/#merged) -#### Version: 0.0 - -Access rules for a scope+role. NOTE there is a unique constraint on role+scope - -| Property | Type | Required | Default | Description | -|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
without external reference as using the CommonMetadata reference breaks thema codegen. | -| `spec` | [object](#spec) | **Yes** | | | -| `status` | [object](#status) | **Yes** | | | - -### Metadata - -metadata contains embedded CommonMetadata and can be extended with custom string fields -TODO: use CommonMetadata instead of redefining here; currently needs to be defined here -without external reference as using the CommonMetadata reference breaks thema codegen. - -It extends [_kubeObjectMetadata](#_kubeobjectmetadata). - -| Property | Type | Required | Default | Description | -|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `createdBy` | string | **Yes** | | | -| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata | -| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `updateTimestamp` | string | **Yes** | | | -| `updatedBy` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | - -### _kubeObjectMetadata - -_kubeObjectMetadata is metadata found in a kubernetes object's metadata field. -It is not exhaustive and only includes fields which may be relevant to a kind's implementation, -As it is also intended to be generic enough to function with any API Server. - -| Property | Type | Required | Default | Description | -|---------------------|-------------------|----------|---------|-------------| -| `creationTimestamp` | string | **Yes** | | | -| `finalizers` | string[] | **Yes** | | | -| `labels` | map[string]string | **Yes** | | | -| `resourceVersion` | string | **Yes** | | | -| `uid` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | | - -### ExtraFields - -extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Spec - -| Property | Type | Required | Default | Description | -|----------|-----------------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------| -| `role` | [RoleRef](#roleref) | **Yes** | | | -| `rules` | [AccessRule](#accessrule)[] | **Yes** | | The set of rules to apply. Note that * is required to modify
access policy rules, and that "none" will reject all actions | -| `scope` | [ResourceRef](#resourceref) | **Yes** | | | - -### AccessRule - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `kind` | string | **Yes** | | The kind this rule applies to (dashboards, alert, etc) | -| `verb` | string | **Yes** | | READ, WRITE, CREATE, DELETE, ...
should move to k8s style verbs like: "get", "list", "watch", "create", "update", "patch", "delete" | -| `target` | string | No | | Specific sub-elements like "alert.rules" or "dashboard.permissions"???? | - -### ResourceRef - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-------------| -| `kind` | string | **Yes** | | | -| `name` | string | **Yes** | | | - -### RoleRef - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `kind` | string | **Yes** | | Policies can apply to roles, teams, or users
Applying policies to individual users is supported, but discouraged
Possible values are: `Role`, `BuiltinRole`, `Team`, `User`. | -| `name` | string | **Yes** | | | -| `xname` | string | **Yes** | | | - -### Status - -| Property | Type | Required | Default | Description | -|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | - -### AdditionalFields - -additionalFields is reserved for future use - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Status.#OperatorState - -| Property | Type | Required | Default | Description | -|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated | -| `state` | string | **Yes** | | state describes the state of the lastEvaluation.
It is limited to three possible states for machine evaluation.
Possible values are: `success`, `in_progress`, `failed`. | -| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format | -| `details` | [object](#details) | No | | details contains any extra information that is operator-specific | - -### Details - -details contains any extra information that is operator-specific - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - - diff --git a/docs/sources/developers/kinds/core/dashboard/schema-reference.md b/docs/sources/developers/kinds/core/dashboard/schema-reference.md deleted file mode 100644 index e8fb56b1c183d..0000000000000 --- a/docs/sources/developers/kinds/core/dashboard/schema-reference.md +++ /dev/null @@ -1,669 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: Dashboard kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## Dashboard - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - -A Grafana dashboard. - -| Property | Type | Required | Default | Description | -|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
without external reference as using the CommonMetadata reference breaks thema codegen. | -| `spec` | [object](#spec) | **Yes** | | | -| `status` | [object](#status) | **Yes** | | | - -### Metadata - -metadata contains embedded CommonMetadata and can be extended with custom string fields -TODO: use CommonMetadata instead of redefining here; currently needs to be defined here -without external reference as using the CommonMetadata reference breaks thema codegen. - -It extends [_kubeObjectMetadata](#_kubeobjectmetadata). - -| Property | Type | Required | Default | Description | -|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `createdBy` | string | **Yes** | | | -| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata | -| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `updateTimestamp` | string | **Yes** | | | -| `updatedBy` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | - -### _kubeObjectMetadata - -_kubeObjectMetadata is metadata found in a kubernetes object's metadata field. -It is not exhaustive and only includes fields which may be relevant to a kind's implementation, -As it is also intended to be generic enough to function with any API Server. - -| Property | Type | Required | Default | Description | -|---------------------|-------------------|----------|---------|-------------| -| `creationTimestamp` | string | **Yes** | | | -| `finalizers` | string[] | **Yes** | | | -| `labels` | map[string]string | **Yes** | | | -| `resourceVersion` | string | **Yes** | | | -| `uid` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | | - -### ExtraFields - -extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Spec - -| Property | Type | Required | Default | Description | -|------------------------|---------------------------------------------|----------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `schemaVersion` | uint16 | **Yes** | `36` | Version of the JSON schema, incremented each time a Grafana update brings
changes to said schema. | -| `annotations` | [AnnotationContainer](#annotationcontainer) | No | | Contains the list of annotations that are associated with the dashboard.
Annotations are used to overlay event markers and overlay event tags on graphs.
Grafana comes with a native annotation store and the ability to add annotation events directly from the graph panel or via the HTTP API.
See https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/annotate-visualizations/ | -| `description` | string | No | | Description of dashboard. | -| `editable` | boolean | No | `true` | Whether a dashboard is editable or not. | -| `fiscalYearStartMonth` | integer | No | `0` | The month that the fiscal year starts on. 0 = January, 11 = December
Constraint: `>=0 & <12`. | -| `gnetId` | string | No | | ID of a dashboard imported from the https://grafana.com/grafana/dashboards/ portal | -| `graphTooltip` | integer | No | `0` | 0 for no shared crosshair or tooltip (default).
1 for shared crosshair.
2 for shared crosshair AND shared tooltip.
Possible values are: `0`, `1`, `2`. | -| `id` | integer or null | No | | Unique numeric identifier for the dashboard.
`id` is internal to a specific Grafana instance. `uid` should be used to identify a dashboard across Grafana instances. | -| `links` | [DashboardLink](#dashboardlink)[] | No | | Links with references to other dashboards or external websites. | -| `liveNow` | boolean | No | | When set to true, the dashboard will redraw panels at an interval matching the pixel width.
This will keep data "moving left" regardless of the query refresh rate. This setting helps
avoid dashboards presenting stale live data | -| `panels` | [object](#panels)[] | No | | List of dashboard panels | -| `refresh` | | No | | Refresh rate of dashboard. Represented via interval string, e.g. "5s", "1m", "1h", "1d". | -| `revision` | integer | No | | This property should only be used in dashboards defined by plugins. It is a quick check
to see if the version has changed since the last time. | -| `snapshot` | [Snapshot](#snapshot) | No | | A dashboard snapshot shares an interactive dashboard publicly.
It is a read-only version of a dashboard, and is not editable.
It is possible to create a snapshot of a snapshot.
Grafana strips away all sensitive information from the dashboard.
Sensitive information stripped: queries (metric, template,annotation) and panel links. | -| `tags` | string[] | No | | Tags associated with dashboard. | -| `templating` | [object](#templating) | No | | Configured template variables | -| `time` | [object](#time) | No | | Time range for dashboard.
Accepted values are relative time strings like {from: 'now-6h', to: 'now'} or absolute time strings like {from: '2020-07-10T08:00:00.000Z', to: '2020-07-10T14:00:00.000Z'}. | -| `timepicker` | [TimePickerConfig](#timepickerconfig) | No | | Time picker configuration
It defines the default config for the time picker and the refresh picker for the specific dashboard. | -| `timezone` | string | No | `browser` | Timezone of dashboard. Accepted values are IANA TZDB zone ID or "browser" or "utc". | -| `title` | string | No | | Title of dashboard. | -| `uid` | string | No | | Unique dashboard identifier that can be generated by anyone. string (8-40) | -| `version` | uint32 | No | | Version of the dashboard, incremented each time the dashboard is updated. | -| `weekStart` | string | No | | Day when the week starts. Expressed by the name of the day in lowercase, e.g. "monday". | - -### AnnotationContainer - -Contains the list of annotations that are associated with the dashboard. -Annotations are used to overlay event markers and overlay event tags on graphs. -Grafana comes with a native annotation store and the ability to add annotation events directly from the graph panel or via the HTTP API. -See https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/annotate-visualizations/ - -| Property | Type | Required | Default | Description | -|----------|---------------------------------------|----------|---------|---------------------| -| `list` | [AnnotationQuery](#annotationquery)[] | No | | List of annotations | - -### AnnotationQuery - -TODO docs -FROM: AnnotationQuery in grafana-data/src/types/annotations.ts - -| Property | Type | Required | Default | Description | -|--------------|-------------------------------------------------|----------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `datasource` | [DataSourceRef](#datasourceref) | **Yes** | | Ref to a DataSource instance | -| `enable` | boolean | **Yes** | `true` | When enabled the annotation query is issued with every dashboard refresh | -| `iconColor` | string | **Yes** | | Color to use for the annotation event markers | -| `name` | string | **Yes** | | Name of annotation. | -| `builtIn` | number | No | `0` | Set to 1 for the standard annotation query all dashboards have by default. | -| `filter` | [AnnotationPanelFilter](#annotationpanelfilter) | No | | | -| `hide` | boolean | No | `false` | Annotation queries can be toggled on or off at the top of the dashboard.
When hide is true, the toggle is not shown in the dashboard. | -| `target` | [AnnotationTarget](#annotationtarget) | No | | TODO: this should be a regular DataQuery that depends on the selected dashboard
these match the properties of the "grafana" datasouce that is default in most dashboards | -| `type` | string | No | | TODO -- this should not exist here, it is based on the --grafana-- datasource | - -### AnnotationPanelFilter - -| Property | Type | Required | Default | Description | -|-----------|-----------|----------|---------|-----------------------------------------------------| -| `ids` | integer[] | **Yes** | | Panel IDs that should be included or excluded | -| `exclude` | boolean | No | `false` | Should the specified panels be included or excluded | - -### AnnotationTarget - -TODO: this should be a regular DataQuery that depends on the selected dashboard -these match the properties of the "grafana" datasouce that is default in most dashboards - -| Property | Type | Required | Default | Description | -|------------|----------|----------|---------|-------------------------------------------------------------------------------------------------------------------| -| `limit` | integer | **Yes** | | Only required/valid for the grafana datasource...
but code+tests is already depending on it so hard to change | -| `matchAny` | boolean | **Yes** | | Only required/valid for the grafana datasource...
but code+tests is already depending on it so hard to change | -| `tags` | string[] | **Yes** | | Only required/valid for the grafana datasource...
but code+tests is already depending on it so hard to change | -| `type` | string | **Yes** | | Only required/valid for the grafana datasource...
but code+tests is already depending on it so hard to change | - -### DataSourceRef - -Ref to a DataSource instance - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|------------------------------| -| `type` | string | No | | The plugin type-id | -| `uid` | string | No | | Specific datasource instance | - -### DashboardLink - -Links with references to other dashboards or external resources - -| Property | Type | Required | Default | Description | -|---------------|----------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `asDropdown` | boolean | **Yes** | `false` | If true, all dashboards links will be displayed in a dropdown. If false, all dashboards links will be displayed side by side. Only valid if the type is dashboards | -| `icon` | string | **Yes** | | Icon name to be displayed with the link | -| `includeVars` | boolean | **Yes** | `false` | If true, includes current template variables values in the link as query params | -| `keepTime` | boolean | **Yes** | `false` | If true, includes current time range in the link as query params | -| `tags` | string[] | **Yes** | | List of tags to limit the linked dashboards. If empty, all dashboards will be displayed. Only valid if the type is dashboards | -| `targetBlank` | boolean | **Yes** | `false` | If true, the link will be opened in a new tab | -| `title` | string | **Yes** | | Title to display with the link | -| `tooltip` | string | **Yes** | | Tooltip to display when the user hovers their mouse over it | -| `type` | string | **Yes** | | Dashboard Link type. Accepted values are dashboards (to refer to another dashboard) and link (to refer to an external resource)
Possible values are: `link`, `dashboards`. | -| `url` | string | No | | Link URL. Only required/valid if the type is link | - -### Snapshot - -A dashboard snapshot shares an interactive dashboard publicly. -It is a read-only version of a dashboard, and is not editable. -It is possible to create a snapshot of a snapshot. -Grafana strips away all sensitive information from the dashboard. -Sensitive information stripped: queries (metric, template,annotation) and panel links. - -| Property | Type | Required | Default | Description | -|---------------|---------|----------|---------|--------------------------------------------------------------------------------| -| `created` | string | **Yes** | | Time when the snapshot was created | -| `expires` | string | **Yes** | | Time when the snapshot expires, default is never to expire | -| `externalUrl` | string | **Yes** | | external url, if snapshot was shared in external grafana instance | -| `external` | boolean | **Yes** | | Is the snapshot saved in an external grafana instance | -| `id` | uint32 | **Yes** | | Unique identifier of the snapshot | -| `key` | string | **Yes** | | Optional, defined the unique key of the snapshot, required if external is true | -| `name` | string | **Yes** | | Optional, name of the snapshot | -| `orgId` | uint32 | **Yes** | | org id of the snapshot | -| `updated` | string | **Yes** | | last time when the snapshot was updated | -| `userId` | uint32 | **Yes** | | user id of the snapshot creator | -| `url` | string | No | | url of the snapshot, if snapshot was shared internally | - -### TimePickerConfig - -Time picker configuration -It defines the default config for the time picker and the refresh picker for the specific dashboard. - -| Property | Type | Required | Default | Description | -|---------------------|----------|----------|---------------------------------------|---------------------------------------------------------------------------------------------------| -| `hidden` | boolean | **Yes** | `false` | Whether timepicker is visible or not. | -| `refresh_intervals` | string[] | **Yes** | `[5s 10s 30s 1m 5m 15m 30m 1h 2h 1d]` | Interval options available in the refresh picker dropdown. | -| `time_options` | string[] | **Yes** | `[5m 15m 1h 6h 12h 24h 2d 7d 30d]` | Selectable options available in the time picker dropdown. Has no effect on provisioned dashboard. | - -### Panels - -| Property | Type | Required | Default | Description | -|----------|---------------------------------------------------|----------|---------|-------------| -| `object` | Possible types are: [](#), [RowPanel](#rowpanel). | | | - -### DataTransformerConfig - -Transformations allow to manipulate data returned by a query before the system applies a visualization. -Using transformations you can: rename fields, join time series data, perform mathematical operations across queries, -use the output of one transformation as the input to another transformation, etc. - -| Property | Type | Required | Default | Description | -|------------|---------------------------------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `id` | string | **Yes** | | Unique identifier of transformer | -| `options` | | **Yes** | | Options to be passed to the transformer
Valid options depend on the transformer id | -| `disabled` | boolean | No | | Disabled transformations are skipped | -| `filter` | [MatcherConfig](#matcherconfig) | No | | Matcher is a predicate configuration. Based on the config a set of field(s) or values is filtered in order to apply override / transformation.
It comes with in id ( to resolve implementation from registry) and a configuration that’s specific to a particular matcher type. | - -### MatcherConfig - -Matcher is a predicate configuration. Based on the config a set of field(s) or values is filtered in order to apply override / transformation. -It comes with in id ( to resolve implementation from registry) and a configuration that’s specific to a particular matcher type. - -| Property | Type | Required | Default | Description | -|-----------|--------|----------|---------|--------------------------------------------------------------------------------| -| `id` | string | **Yes** | `` | The matcher id. This is used to find the matcher implementation from registry. | -| `options` | | No | | The matcher options. This is specific to the matcher implementation. | - -### FieldConfigSource - -The data model used in Grafana, namely the data frame, is a columnar-oriented table structure that unifies both time series and table query results. -Each column within this structure is called a field. A field can represent a single time series or table column. -Field options allow you to change how the data is displayed in your visualizations. - -| Property | Type | Required | Default | Description | -|-------------|-----------------------------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `defaults` | [FieldConfig](#fieldconfig) | **Yes** | | The data model used in Grafana, namely the data frame, is a columnar-oriented table structure that unifies both time series and table query results.
Each column within this structure is called a field. A field can represent a single time series or table column.
Field options allow you to change how the data is displayed in your visualizations. | -| `overrides` | [object](#overrides)[] | **Yes** | | Overrides are the options applied to specific fields overriding the defaults. | - -### FieldConfig - -The data model used in Grafana, namely the data frame, is a columnar-oriented table structure that unifies both time series and table query results. -Each column within this structure is called a field. A field can represent a single time series or table column. -Field options allow you to change how the data is displayed in your visualizations. - -| Property | Type | Required | Default | Description | -|---------------------|---------------------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `color` | [FieldColor](#fieldcolor) | No | | Map a field to a color. | -| `custom` | [object](#custom) | No | | custom is specified by the FieldConfig field
in panel plugin schemas. | -| `decimals` | number | No | | Specify the number of decimals Grafana includes in the rendered value.
If you leave this field blank, Grafana automatically truncates the number of decimals based on the value.
For example 1.1234 will display as 1.12 and 100.456 will display as 100.
To display all decimals, set the unit to `String`. | -| `description` | string | No | | Human readable field metadata | -| `displayNameFromDS` | string | No | | This can be used by data sources that return and explicit naming structure for values and labels
When this property is configured, this value is used rather than the default naming strategy. | -| `displayName` | string | No | | The display value for this field. This supports template variables blank is auto | -| `filterable` | boolean | No | | True if data source field supports ad-hoc filters | -| `links` | | No | | The behavior when clicking on a result | -| `mappings` | [ValueMapping](#valuemapping)[] | No | | Convert input values into a display string | -| `max` | number | No | | The maximum value used in percentage threshold calculations. Leave blank for auto calculation based on all series and fields. | -| `min` | number | No | | The minimum value used in percentage threshold calculations. Leave blank for auto calculation based on all series and fields. | -| `noValue` | string | No | | Alternative to empty string | -| `path` | string | No | | An explicit path to the field in the datasource. When the frame meta includes a path,
This will default to `${frame.meta.path}/${field.name}

When defined, this value can be used as an identifier within the datasource scope, and
may be used to update the results | -| `thresholds` | [ThresholdsConfig](#thresholdsconfig) | No | | Thresholds configuration for the panel | -| `unit` | string | No | | Unit a field should use. The unit you select is applied to all fields except time.
You can use the units ID availables in Grafana or a custom unit.
Available units in Grafana: https://github.com/grafana/grafana/blob/main/packages/grafana-data/src/valueFormats/categories.ts
As custom unit, you can use the following formats:
`suffix:` for custom unit that should go after value.
`prefix:` for custom unit that should go before value.
`time:` For custom date time formats type for example `time:YYYY-MM-DD`.
`si:` for custom SI units. For example: `si: mF`. This one is a bit more advanced as you can specify both a unit and the source data scale. So if your source data is represented as milli (thousands of) something prefix the unit with that SI scale character.
`count:` for a custom count unit.
`currency:` for custom a currency unit. | -| `writeable` | boolean | No | | True if data source can write a value to the path. Auth/authz are supported separately | - -### FieldColor - -Map a field to a color. - -| Property | Type | Required | Default | Description | -|--------------|--------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `mode` | string | **Yes** | | Color mode for a field. You can specify a single color, or select a continuous (gradient) color schemes, based on a value.
Continuous color interpolates a color using the percentage of a value relative to min and max.
Accepted values are:
`thresholds`: From thresholds. Informs Grafana to take the color from the matching threshold
`palette-classic`: Classic palette. Grafana will assign color by looking up a color in a palette by series index. Useful for Graphs and pie charts and other categorical data visualizations
`palette-classic-by-name`: Classic palette (by name). Grafana will assign color by looking up a color in a palette by series name. Useful for Graphs and pie charts and other categorical data visualizations
`continuous-GrYlRd`: ontinuous Green-Yellow-Red palette mode
`continuous-RdYlGr`: Continuous Red-Yellow-Green palette mode
`continuous-BlYlRd`: Continuous Blue-Yellow-Red palette mode
`continuous-YlRd`: Continuous Yellow-Red palette mode
`continuous-BlPu`: Continuous Blue-Purple palette mode
`continuous-YlBl`: Continuous Yellow-Blue palette mode
`continuous-blues`: Continuous Blue palette mode
`continuous-reds`: Continuous Red palette mode
`continuous-greens`: Continuous Green palette mode
`continuous-purples`: Continuous Purple palette mode
`shades`: Shades of a single color. Specify a single color, useful in an override rule.
`fixed`: Fixed color mode. Specify a single color, useful in an override rule.
Possible values are: `thresholds`, `palette-classic`, `palette-classic-by-name`, `continuous-GrYlRd`, `continuous-RdYlGr`, `continuous-BlYlRd`, `continuous-YlRd`, `continuous-BlPu`, `continuous-YlBl`, `continuous-blues`, `continuous-reds`, `continuous-greens`, `continuous-purples`, `fixed`, `shades`. | -| `fixedColor` | string | No | | The fixed color value for fixed or shades color modes. | -| `seriesBy` | string | No | | Defines how to assign a series color from "by value" color schemes. For example for an aggregated data points like a timeseries, the color can be assigned by the min, max or last value.
Possible values are: `min`, `max`, `last`. | - -### ThresholdsConfig - -Thresholds configuration for the panel - -| Property | Type | Required | Default | Description | -|----------|---------------------------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `mode` | string | **Yes** | | Thresholds can either be `absolute` (specific number) or `percentage` (relative to min or max, it will be values between 0 and 1).
Possible values are: `absolute`, `percentage`. | -| `steps` | [Threshold](#threshold)[] | **Yes** | | Must be sorted by 'value', first value is always -Infinity | - -### Threshold - -User-defined value for a metric that triggers visual changes in a panel when this value is met or exceeded -They are used to conditionally style and color visualizations based on query results , and can be applied to most visualizations. - -| Property | Type | Required | Default | Description | -|----------|----------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `color` | string | **Yes** | | Color represents the color of the visual change that will occur in the dashboard when the threshold value is met or exceeded. | -| `value` | number or null | **Yes** | | Value represents a specified metric for the threshold, which triggers a visual change in the dashboard when this value is met or exceeded.
Nulls currently appear here when serializing -Infinity to JSON. | - -### ValueMapping - -Allow to transform the visual representation of specific data values in a visualization, irrespective of their original units - -| Property | Type | Required | Default | Description | -|----------|-------------------------------------------------------------------------------------------------------------------------------|----------|---------|-------------| -| `object` | Possible types are: [ValueMap](#valuemap), [RangeMap](#rangemap), [RegexMap](#regexmap), [SpecialValueMap](#specialvaluemap). | | | - -### RangeMap - -Maps numerical ranges to a display text and color. -For example, if a value is within a certain range, you can configure a range value mapping to display Low or High rather than the number. - -| Property | Type | Required | Default | Description | -|-----------|--------------------|----------|---------|-----------------------------------------------------------------------------------| -| `options` | [object](#options) | **Yes** | | Range to match against and the result to apply when the value is within the range | -| `type` | string | **Yes** | | | - -### Options - -Range to match against and the result to apply when the value is within the range - -| Property | Type | Required | Default | Description | -|----------|-------------------------------------------|----------|---------|-----------------------------------------------------------------------| -| `from` | number or null | **Yes** | | Min value of the range. It can be null which means -Infinity | -| `result` | [ValueMappingResult](#valuemappingresult) | **Yes** | | Result used as replacement with text and color when the value matches | -| `to` | number or null | **Yes** | | Max value of the range. It can be null which means +Infinity | - -### ValueMappingResult - -Result used as replacement with text and color when the value matches - -| Property | Type | Required | Default | Description | -|----------|---------|----------|---------|-----------------------------------------------------------------------| -| `color` | string | No | | Text to use when the value matches | -| `icon` | string | No | | Icon to display when the value matches. Only specific visualizations. | -| `index` | integer | No | | Position in the mapping array. Only used internally. | -| `text` | string | No | | Text to display when the value matches | - -### RegexMap - -Maps regular expressions to replacement text and a color. -For example, if a value is www.example.com, you can configure a regex value mapping so that Grafana displays www and truncates the domain. - -| Property | Type | Required | Default | Description | -|-----------|--------------------|----------|---------|----------------------------------------------------------------------------------------------| -| `options` | [object](#options) | **Yes** | | Regular expression to match against and the result to apply when the value matches the regex | -| `type` | string | **Yes** | | | - -### Options - -Regular expression to match against and the result to apply when the value matches the regex - -| Property | Type | Required | Default | Description | -|-----------|-------------------------------------------|----------|---------|-----------------------------------------------------------------------| -| `pattern` | string | **Yes** | | Regular expression to match against | -| `result` | [ValueMappingResult](#valuemappingresult) | **Yes** | | Result used as replacement with text and color when the value matches | - -### SpecialValueMap - -Maps special values like Null, NaN (not a number), and boolean values like true and false to a display text and color. -See SpecialValueMatch to see the list of special values. -For example, you can configure a special value mapping so that null values appear as N/A. - -| Property | Type | Required | Default | Description | -|-----------|--------------------|----------|---------|-------------| -| `options` | [object](#options) | **Yes** | | | -| `type` | string | **Yes** | | | - -### Options - -| Property | Type | Required | Default | Description | -|----------|-------------------------------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------| -| `match` | string | **Yes** | | Special value types supported by the `SpecialValueMap`
Possible values are: `true`, `false`, `null`, `nan`, `null+nan`, `empty`. | -| `result` | [ValueMappingResult](#valuemappingresult) | **Yes** | | Result used as replacement with text and color when the value matches | - -### ValueMap - -Maps text values to a color or different display text and color. -For example, you can configure a value mapping so that all instances of the value 10 appear as Perfection! rather than the number. - -| Property | Type | Required | Default | Description | -|-----------|------------------------------------------------------|----------|---------|---------------------------------------------------------------------------------------------------------------| -| `options` | map[string][ValueMappingResult](#valuemappingresult) | **Yes** | | Map with : ValueMappingResult. For example: { "10": { text: "Perfection!", color: "green" } } | -| `type` | string | **Yes** | | | - -### Custom - -custom is specified by the FieldConfig field -in panel plugin schemas. - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Overrides - -| Property | Type | Required | Default | Description | -|--------------|---------------------------------------------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `matcher` | [MatcherConfig](#matcherconfig) | **Yes** | | Matcher is a predicate configuration. Based on the config a set of field(s) or values is filtered in order to apply override / transformation.
It comes with in id ( to resolve implementation from registry) and a configuration that’s specific to a particular matcher type. | -| `properties` | [DynamicConfigValue](#dynamicconfigvalue)[] | **Yes** | | | - -### DynamicConfigValue - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|-------------| -| `id` | string | **Yes** | `` | | -| `value` | | No | | | - -### GridPos - -Position and dimensions of a panel in the grid - -| Property | Type | Required | Default | Description | -|----------|---------|----------|---------|-------------------------------------------------------------------------------------------------------------------| -| `h` | uint32 | **Yes** | `9` | Panel height. The height is the number of rows from the top edge of the panel. | -| `w` | integer | **Yes** | `12` | Panel width. The width is the number of columns from the left edge of the panel.
Constraint: `>0 & <=24`. | -| `x` | integer | **Yes** | `0` | Panel x. The x coordinate is the number of columns from the left edge of the grid
Constraint: `>=0 & <24`. | -| `y` | uint32 | **Yes** | `0` | Panel y. The y coordinate is the number of rows from the top edge of the grid | -| `static` | boolean | No | | Whether the panel is fixed within the grid. If true, the panel will not be affected by other panels' interactions | - -### LibraryPanelRef - -A library panel is a reusable panel that you can use in any dashboard. -When you make a change to a library panel, that change propagates to all instances of where the panel is used. -Library panels streamline reuse of panels across multiple dashboards. - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|--------------------| -| `name` | string | **Yes** | | Library panel name | -| `uid` | string | **Yes** | | Library panel uid | - -### Panel - -Dashboard panels are the basic visualization building blocks. - -| Property | Type | Required | Default | Description | -|--------------------|---------------------------------------------------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | The panel plugin type id. This is used to find the plugin to display the panel.
Constraint: `length >=1`. | -| `datasource` | [DataSourceRef](#datasourceref) | No | | Ref to a DataSource instance | -| `description` | string | No | | Panel description. | -| `fieldConfig` | [FieldConfigSource](#fieldconfigsource) | No | | The data model used in Grafana, namely the data frame, is a columnar-oriented table structure that unifies both time series and table query results.
Each column within this structure is called a field. A field can represent a single time series or table column.
Field options allow you to change how the data is displayed in your visualizations. | -| `gridPos` | [GridPos](#gridpos) | No | | Position and dimensions of a panel in the grid | -| `hideTimeOverride` | boolean | No | | Controls if the timeFrom or timeShift overrides are shown in the panel header | -| `id` | uint32 | No | | Unique identifier of the panel. Generated by Grafana when creating a new panel. It must be unique within a dashboard, but not globally. | -| `interval` | string | No | | The min time interval setting defines a lower limit for the $__interval and $__interval_ms variables.
This value must be formatted as a number followed by a valid time
identifier like: "40s", "3d", etc.
See: https://grafana.com/docs/grafana/latest/panels-visualizations/query-transform-data/#query-options | -| `libraryPanel` | [LibraryPanelRef](#librarypanelref) | No | | A library panel is a reusable panel that you can use in any dashboard.
When you make a change to a library panel, that change propagates to all instances of where the panel is used.
Library panels streamline reuse of panels across multiple dashboards. | -| `links` | [DashboardLink](#dashboardlink)[] | No | | Panel links. | -| `maxDataPoints` | number | No | | The maximum number of data points that the panel queries are retrieving. | -| `maxPerRow` | number | No | | Option for repeated panels that controls max items per row
Only relevant for horizontally repeated panels | -| `options` | [object](#options) | No | | It depends on the panel plugin. They are specified by the Options field in panel plugin schemas. | -| `pluginVersion` | string | No | | The version of the plugin that is used for this panel. This is used to find the plugin to display the panel and to migrate old panel configs. | -| `repeatDirection` | string | No | `h` | Direction to repeat in if 'repeat' is set.
`h` for horizontal, `v` for vertical.
Possible values are: `h`, `v`. | -| `repeat` | string | No | | Name of template variable to repeat for. | -| `tags` | string[] | No | | Tags for the panel. | -| `targets` | [Target](#target)[] | No | | Depends on the panel plugin. See the plugin documentation for details. | -| `timeFrom` | string | No | | Overrides the relative time range for individual panels,
which causes them to be different than what is selected in
the dashboard time picker in the top-right corner of the dashboard. You can use this to show metrics from different
time periods or days on the same dashboard.
The value is formatted as time operation like: `now-5m` (Last 5 minutes), `now/d` (the day so far),
`now-5d/d`(Last 5 days), `now/w` (This week so far), `now-2y/y` (Last 2 years).
Note: Panel time overrides have no effect when the dashboard’s time range is absolute.
See: https://grafana.com/docs/grafana/latest/panels-visualizations/query-transform-data/#query-options | -| `timeShift` | string | No | | Overrides the time range for individual panels by shifting its start and end relative to the time picker.
For example, you can shift the time range for the panel to be two hours earlier than the dashboard time picker setting `2h`.
Note: Panel time overrides have no effect when the dashboard’s time range is absolute.
See: https://grafana.com/docs/grafana/latest/panels-visualizations/query-transform-data/#query-options | -| `title` | string | No | | Panel title. | -| `transformations` | [DataTransformerConfig](#datatransformerconfig)[] | No | | List of transformations that are applied to the panel data before rendering.
When there are multiple transformations, Grafana applies them in the order they are listed.
Each transformation creates a result set that then passes on to the next transformation in the processing pipeline. | -| `transparent` | boolean | No | `false` | Whether to display the panel without a background. | - -### Target - -Schema for panel targets is specified by datasource -plugins. We use a placeholder definition, which the Go -schema loader either left open/as-is with the Base -variant of the Dashboard and Panel families, or filled -with types derived from plugins in the Instance variant. -When working directly from CUE, importers can extend this -type directly to achieve the same effect. - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Options - -It depends on the panel plugin. They are specified by the Options field in panel plugin schemas. - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### RowPanel - -Row panel - -| Property | Type | Required | Default | Description | -|--------------|---------------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `collapsed` | boolean | **Yes** | `false` | Whether this row should be collapsed or not. | -| `id` | uint32 | **Yes** | | Unique identifier of the panel. Generated by Grafana when creating a new panel. It must be unique within a dashboard, but not globally. | -| `panels` | [Panel](#panel)[] | **Yes** | | List of panels in the row | -| `type` | string | **Yes** | | The panel type
Possible values are: `row`. | -| `datasource` | [DataSourceRef](#datasourceref) | No | | Ref to a DataSource instance | -| `gridPos` | [GridPos](#gridpos) | No | | Position and dimensions of a panel in the grid | -| `repeat` | string | No | | Name of template variable to repeat for. | -| `title` | string | No | | Row title | - -### Panel - -Dashboard panels are the basic visualization building blocks. - -| Property | Type | Required | Default | Description | -|--------------------|---------------------------------------------------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | | The panel plugin type id. This is used to find the plugin to display the panel.
Constraint: `length >=1`. | -| `datasource` | [DataSourceRef](#datasourceref) | No | | Ref to a DataSource instance | -| `description` | string | No | | Panel description. | -| `fieldConfig` | [FieldConfigSource](#fieldconfigsource) | No | | The data model used in Grafana, namely the data frame, is a columnar-oriented table structure that unifies both time series and table query results.
Each column within this structure is called a field. A field can represent a single time series or table column.
Field options allow you to change how the data is displayed in your visualizations. | -| `gridPos` | [GridPos](#gridpos) | No | | Position and dimensions of a panel in the grid | -| `hideTimeOverride` | boolean | No | | Controls if the timeFrom or timeShift overrides are shown in the panel header | -| `id` | uint32 | No | | Unique identifier of the panel. Generated by Grafana when creating a new panel. It must be unique within a dashboard, but not globally. | -| `interval` | string | No | | The min time interval setting defines a lower limit for the $__interval and $__interval_ms variables.
This value must be formatted as a number followed by a valid time
identifier like: "40s", "3d", etc.
See: https://grafana.com/docs/grafana/latest/panels-visualizations/query-transform-data/#query-options | -| `libraryPanel` | [LibraryPanelRef](#librarypanelref) | No | | A library panel is a reusable panel that you can use in any dashboard.
When you make a change to a library panel, that change propagates to all instances of where the panel is used.
Library panels streamline reuse of panels across multiple dashboards. | -| `links` | [DashboardLink](#dashboardlink)[] | No | | Panel links. | -| `maxDataPoints` | number | No | | The maximum number of data points that the panel queries are retrieving. | -| `maxPerRow` | number | No | | Option for repeated panels that controls max items per row
Only relevant for horizontally repeated panels | -| `options` | [options](#options) | No | | It depends on the panel plugin. They are specified by the Options field in panel plugin schemas. | -| `pluginVersion` | string | No | | The version of the plugin that is used for this panel. This is used to find the plugin to display the panel and to migrate old panel configs. | -| `repeatDirection` | string | No | `h` | Direction to repeat in if 'repeat' is set.
`h` for horizontal, `v` for vertical.
Possible values are: `h`, `v`. | -| `repeat` | string | No | | Name of template variable to repeat for. | -| `tags` | string[] | No | | Tags for the panel. | -| `targets` | [Target](#target)[] | No | | Depends on the panel plugin. See the plugin documentation for details. | -| `timeFrom` | string | No | | Overrides the relative time range for individual panels,
which causes them to be different than what is selected in
the dashboard time picker in the top-right corner of the dashboard. You can use this to show metrics from different
time periods or days on the same dashboard.
The value is formatted as time operation like: `now-5m` (Last 5 minutes), `now/d` (the day so far),
`now-5d/d`(Last 5 days), `now/w` (This week so far), `now-2y/y` (Last 2 years).
Note: Panel time overrides have no effect when the dashboard’s time range is absolute.
See: https://grafana.com/docs/grafana/latest/panels-visualizations/query-transform-data/#query-options | -| `timeShift` | string | No | | Overrides the time range for individual panels by shifting its start and end relative to the time picker.
For example, you can shift the time range for the panel to be two hours earlier than the dashboard time picker setting `2h`.
Note: Panel time overrides have no effect when the dashboard’s time range is absolute.
See: https://grafana.com/docs/grafana/latest/panels-visualizations/query-transform-data/#query-options | -| `title` | string | No | | Panel title. | -| `transformations` | [DataTransformerConfig](#datatransformerconfig)[] | No | | List of transformations that are applied to the panel data before rendering.
When there are multiple transformations, Grafana applies them in the order they are listed.
Each transformation creates a result set that then passes on to the next transformation in the processing pipeline. | -| `transparent` | boolean | No | `false` | Whether to display the panel without a background. | - -### FieldConfigSource - -The data model used in Grafana, namely the data frame, is a columnar-oriented table structure that unifies both time series and table query results. -Each column within this structure is called a field. A field can represent a single time series or table column. -Field options allow you to change how the data is displayed in your visualizations. - -| Property | Type | Required | Default | Description | -|-------------|-----------------------------|----------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `defaults` | [FieldConfig](#fieldconfig) | **Yes** | | The data model used in Grafana, namely the data frame, is a columnar-oriented table structure that unifies both time series and table query results.
Each column within this structure is called a field. A field can represent a single time series or table column.
Field options allow you to change how the data is displayed in your visualizations. | -| `overrides` | [overrides](#overrides)[] | **Yes** | | Overrides are the options applied to specific fields overriding the defaults. | - -### FieldConfig - -The data model used in Grafana, namely the data frame, is a columnar-oriented table structure that unifies both time series and table query results. -Each column within this structure is called a field. A field can represent a single time series or table column. -Field options allow you to change how the data is displayed in your visualizations. - -| Property | Type | Required | Default | Description | -|---------------------|---------------------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `color` | [FieldColor](#fieldcolor) | No | | Map a field to a color. | -| `custom` | [custom](#custom) | No | | custom is specified by the FieldConfig field
in panel plugin schemas. | -| `decimals` | number | No | | Specify the number of decimals Grafana includes in the rendered value.
If you leave this field blank, Grafana automatically truncates the number of decimals based on the value.
For example 1.1234 will display as 1.12 and 100.456 will display as 100.
To display all decimals, set the unit to `String`. | -| `description` | string | No | | Human readable field metadata | -| `displayNameFromDS` | string | No | | This can be used by data sources that return and explicit naming structure for values and labels
When this property is configured, this value is used rather than the default naming strategy. | -| `displayName` | string | No | | The display value for this field. This supports template variables blank is auto | -| `filterable` | boolean | No | | True if data source field supports ad-hoc filters | -| `links` | | No | | The behavior when clicking on a result | -| `mappings` | [ValueMapping](#valuemapping)[] | No | | Convert input values into a display string | -| `max` | number | No | | The maximum value used in percentage threshold calculations. Leave blank for auto calculation based on all series and fields. | -| `min` | number | No | | The minimum value used in percentage threshold calculations. Leave blank for auto calculation based on all series and fields. | -| `noValue` | string | No | | Alternative to empty string | -| `path` | string | No | | An explicit path to the field in the datasource. When the frame meta includes a path,
This will default to `${frame.meta.path}/${field.name}

When defined, this value can be used as an identifier within the datasource scope, and
may be used to update the results | -| `thresholds` | [ThresholdsConfig](#thresholdsconfig) | No | | Thresholds configuration for the panel | -| `unit` | string | No | | Unit a field should use. The unit you select is applied to all fields except time.
You can use the units ID availables in Grafana or a custom unit.
Available units in Grafana: https://github.com/grafana/grafana/blob/main/packages/grafana-data/src/valueFormats/categories.ts
As custom unit, you can use the following formats:
`suffix:` for custom unit that should go after value.
`prefix:` for custom unit that should go before value.
`time:` For custom date time formats type for example `time:YYYY-MM-DD`.
`si:` for custom SI units. For example: `si: mF`. This one is a bit more advanced as you can specify both a unit and the source data scale. So if your source data is represented as milli (thousands of) something prefix the unit with that SI scale character.
`count:` for a custom count unit.
`currency:` for custom a currency unit. | -| `writeable` | boolean | No | | True if data source can write a value to the path. Auth/authz are supported separately | - -### RangeMap - -Maps numerical ranges to a display text and color. -For example, if a value is within a certain range, you can configure a range value mapping to display Low or High rather than the number. - -| Property | Type | Required | Default | Description | -|-----------|---------------------|----------|---------|-----------------------------------------------------------------------------------| -| `options` | [options](#options) | **Yes** | | Range to match against and the result to apply when the value is within the range | -| `type` | string | **Yes** | | | - -### RegexMap - -Maps regular expressions to replacement text and a color. -For example, if a value is www.example.com, you can configure a regex value mapping so that Grafana displays www and truncates the domain. - -| Property | Type | Required | Default | Description | -|-----------|---------------------|----------|---------|----------------------------------------------------------------------------------------------| -| `options` | [options](#options) | **Yes** | | Regular expression to match against and the result to apply when the value matches the regex | -| `type` | string | **Yes** | | | - -### SpecialValueMap - -Maps special values like Null, NaN (not a number), and boolean values like true and false to a display text and color. -See SpecialValueMatch to see the list of special values. -For example, you can configure a special value mapping so that null values appear as N/A. - -| Property | Type | Required | Default | Description | -|-----------|---------------------|----------|---------|-------------| -| `options` | [options](#options) | **Yes** | | | -| `type` | string | **Yes** | | | - -### Templating - -Configured template variables - -| Property | Type | Required | Default | Description | -|----------|-----------------------------------|----------|---------|----------------------------------------------------------------------------------------------| -| `list` | [VariableModel](#variablemodel)[] | No | | List of configured template variables with their saved values along with some other metadata | - -### VariableModel - -A variable is a placeholder for a value. You can use variables in metric queries and in panel titles. - -| Property | Type | Required | Default | Description | -|---------------|-------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `name` | string | **Yes** | | Name of variable | -| `type` | string | **Yes** | | Dashboard variable type
`query`: Query-generated list of values such as metric names, server names, sensor IDs, data centers, and so on.
`adhoc`: Key/value filters that are automatically added to all metric queries for a data source (Prometheus, Loki, InfluxDB, and Elasticsearch only).
`constant`: Define a hidden constant.
`datasource`: Quickly change the data source for an entire dashboard.
`interval`: Interval variables represent time spans.
`textbox`: Display a free text input field with an optional default value.
`custom`: Define the variable options manually using a comma-separated list.
`system`: Variables defined by Grafana. See: https://grafana.com/docs/grafana/latest/dashboards/variables/add-template-variables/#global-variables
Possible values are: `query`, `adhoc`, `constant`, `datasource`, `interval`, `textbox`, `custom`, `system`. | -| `current` | [VariableOption](#variableoption) | No | | Option to be selected in a variable. | -| `datasource` | [DataSourceRef](#datasourceref) | No | | Ref to a DataSource instance | -| `description` | string | No | | Description of variable. It can be defined but `null`. | -| `hide` | integer | No | | Determine if the variable shows on dashboard
Accepted values are 0 (show label and value), 1 (show value only), 2 (show nothing).
Possible values are: `0`, `1`, `2`. | -| `label` | string | No | | Optional display name | -| `multi` | boolean | No | `false` | Whether multiple values can be selected or not from variable value list | -| `options` | [VariableOption](#variableoption)[] | No | | Options that can be selected for a variable. | -| `query` | | No | | Query used to fetch values for a variable | -| `refresh` | integer | No | | Options to config when to refresh a variable
`0`: Never refresh the variable
`1`: Queries the data source every time the dashboard loads.
`2`: Queries the data source when the dashboard time range changes.
Possible values are: `0`, `1`, `2`. | -| `skipUrlSync` | boolean | No | `false` | Whether the variable value should be managed by URL query params or not | -| `sort` | integer | No | | Sort variable options
Accepted values are:
`0`: No sorting
`1`: Alphabetical ASC
`2`: Alphabetical DESC
`3`: Numerical ASC
`4`: Numerical DESC
`5`: Alphabetical Case Insensitive ASC
`6`: Alphabetical Case Insensitive DESC
`7`: Natural ASC
`8`: Natural DESC
Possible values are: `0`, `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`. | - -### VariableOption - -Option to be selected in a variable. - -| Property | Type | Required | Default | Description | -|------------|---------|----------|---------|---------------------------------------| -| `text` | | **Yes** | | Text to be displayed for the option | -| `value` | | **Yes** | | Value of the option | -| `selected` | boolean | No | | Whether the option is selected or not | - -### Time - -Time range for dashboard. -Accepted values are relative time strings like {from: 'now-6h', to: 'now'} or absolute time strings like {from: '2020-07-10T08:00:00.000Z', to: '2020-07-10T14:00:00.000Z'}. - -| Property | Type | Required | Default | Description | -|----------|--------|----------|----------|-------------| -| `from` | string | **Yes** | `now-6h` | | -| `to` | string | **Yes** | `now` | | - -### Status - -| Property | Type | Required | Default | Description | -|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | - -### AdditionalFields - -additionalFields is reserved for future use - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Status.#OperatorState - -| Property | Type | Required | Default | Description | -|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated | -| `state` | string | **Yes** | | state describes the state of the lastEvaluation.
It is limited to three possible states for machine evaluation.
Possible values are: `success`, `in_progress`, `failed`. | -| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format | -| `details` | [object](#details) | No | | details contains any extra information that is operator-specific | - -### Details - -details contains any extra information that is operator-specific - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - - diff --git a/docs/sources/developers/kinds/core/folder/schema-reference.md b/docs/sources/developers/kinds/core/folder/schema-reference.md deleted file mode 100644 index cbc8f41c417cc..0000000000000 --- a/docs/sources/developers/kinds/core/folder/schema-reference.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: Folder kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## Folder - -#### Maturity: [merged](../../../maturity/#merged) -#### Version: 0.0 - -A folder is a collection of resources that are grouped together and can share permissions. - -| Property | Type | Required | Default | Description | -|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
without external reference as using the CommonMetadata reference breaks thema codegen. | -| `spec` | [object](#spec) | **Yes** | | TODO:
common metadata will soon support setting the parent folder in the metadata | -| `status` | [object](#status) | **Yes** | | | - -### Metadata - -metadata contains embedded CommonMetadata and can be extended with custom string fields -TODO: use CommonMetadata instead of redefining here; currently needs to be defined here -without external reference as using the CommonMetadata reference breaks thema codegen. - -It extends [_kubeObjectMetadata](#_kubeobjectmetadata). - -| Property | Type | Required | Default | Description | -|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `createdBy` | string | **Yes** | | | -| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata | -| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `updateTimestamp` | string | **Yes** | | | -| `updatedBy` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | - -### _kubeObjectMetadata - -_kubeObjectMetadata is metadata found in a kubernetes object's metadata field. -It is not exhaustive and only includes fields which may be relevant to a kind's implementation, -As it is also intended to be generic enough to function with any API Server. - -| Property | Type | Required | Default | Description | -|---------------------|-------------------|----------|---------|-------------| -| `creationTimestamp` | string | **Yes** | | | -| `finalizers` | string[] | **Yes** | | | -| `labels` | map[string]string | **Yes** | | | -| `resourceVersion` | string | **Yes** | | | -| `uid` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | | - -### ExtraFields - -extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Spec - -TODO: -common metadata will soon support setting the parent folder in the metadata - -| Property | Type | Required | Default | Description | -|---------------|--------|----------|---------|--------------------------------------| -| `title` | string | **Yes** | | Folder title | -| `uid` | string | **Yes** | | Unique folder id. (will be k8s name) | -| `description` | string | No | | Description of the folder. | - -### Status - -| Property | Type | Required | Default | Description | -|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | - -### AdditionalFields - -additionalFields is reserved for future use - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Status.#OperatorState - -| Property | Type | Required | Default | Description | -|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated | -| `state` | string | **Yes** | | state describes the state of the lastEvaluation.
It is limited to three possible states for machine evaluation.
Possible values are: `success`, `in_progress`, `failed`. | -| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format | -| `details` | [object](#details) | No | | details contains any extra information that is operator-specific | - -### Details - -details contains any extra information that is operator-specific - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - - diff --git a/docs/sources/developers/kinds/core/librarypanel/schema-reference.md b/docs/sources/developers/kinds/core/librarypanel/schema-reference.md deleted file mode 100644 index eaab5f3544832..0000000000000 --- a/docs/sources/developers/kinds/core/librarypanel/schema-reference.md +++ /dev/null @@ -1,142 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: LibraryPanel kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## LibraryPanel - -#### Maturity: [experimental](../../../maturity/#experimental) -#### Version: 0.0 - -A standalone panel - -| Property | Type | Required | Default | Description | -|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
without external reference as using the CommonMetadata reference breaks thema codegen. | -| `spec` | [object](#spec) | **Yes** | | | -| `status` | [object](#status) | **Yes** | | | - -### Metadata - -metadata contains embedded CommonMetadata and can be extended with custom string fields -TODO: use CommonMetadata instead of redefining here; currently needs to be defined here -without external reference as using the CommonMetadata reference breaks thema codegen. - -It extends [_kubeObjectMetadata](#_kubeobjectmetadata). - -| Property | Type | Required | Default | Description | -|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `createdBy` | string | **Yes** | | | -| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata | -| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `updateTimestamp` | string | **Yes** | | | -| `updatedBy` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | - -### _kubeObjectMetadata - -_kubeObjectMetadata is metadata found in a kubernetes object's metadata field. -It is not exhaustive and only includes fields which may be relevant to a kind's implementation, -As it is also intended to be generic enough to function with any API Server. - -| Property | Type | Required | Default | Description | -|---------------------|-------------------|----------|---------|-------------| -| `creationTimestamp` | string | **Yes** | | | -| `finalizers` | string[] | **Yes** | | | -| `labels` | map[string]string | **Yes** | | | -| `resourceVersion` | string | **Yes** | | | -| `uid` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | | - -### ExtraFields - -extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Spec - -| Property | Type | Required | Default | Description | -|-----------------|-------------------------------------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------| -| `model` | [object](#model) | **Yes** | | TODO: should be the same panel schema defined in dashboard
Typescript: Omit; | -| `name` | string | **Yes** | | Panel name (also saved in the model)
Constraint: `length >=1`. | -| `type` | string | **Yes** | | The panel type (from inside the model)
Constraint: `length >=1`. | -| `uid` | string | **Yes** | | Library element UID | -| `version` | integer | **Yes** | | panel version, incremented each time the dashboard is updated. | -| `description` | string | No | | Panel description | -| `folderUid` | string | No | | Folder UID | -| `meta` | [LibraryElementDTOMeta](#libraryelementdtometa) | No | | | -| `schemaVersion` | uint16 | No | | Dashboard version when this was saved (zero if unknown) | - -### LibraryElementDTOMeta - -| Property | Type | Required | Default | Description | -|-----------------------|---------------------------------------------------------|----------|---------|-------------| -| `connectedDashboards` | integer | **Yes** | | | -| `createdBy` | [LibraryElementDTOMetaUser](#libraryelementdtometauser) | **Yes** | | | -| `created` | string | **Yes** | | | -| `folderName` | string | **Yes** | | | -| `folderUid` | string | **Yes** | | | -| `updatedBy` | [LibraryElementDTOMetaUser](#libraryelementdtometauser) | **Yes** | | | -| `updated` | string | **Yes** | | | - -### LibraryElementDTOMetaUser - -| Property | Type | Required | Default | Description | -|-------------|---------|----------|---------|-------------| -| `avatarUrl` | string | **Yes** | | | -| `id` | integer | **Yes** | | | -| `name` | string | **Yes** | | | - -### Model - -TODO: should be the same panel schema defined in dashboard -Typescript: Omit; - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Status - -| Property | Type | Required | Default | Description | -|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | - -### AdditionalFields - -additionalFields is reserved for future use - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Status.#OperatorState - -| Property | Type | Required | Default | Description | -|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated | -| `state` | string | **Yes** | | state describes the state of the lastEvaluation.
It is limited to three possible states for machine evaluation.
Possible values are: `success`, `in_progress`, `failed`. | -| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format | -| `details` | [object](#details) | No | | details contains any extra information that is operator-specific | - -### Details - -details contains any extra information that is operator-specific - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - - diff --git a/docs/sources/developers/kinds/core/preferences/schema-reference.md b/docs/sources/developers/kinds/core/preferences/schema-reference.md deleted file mode 100644 index e5ac35187cdc4..0000000000000 --- a/docs/sources/developers/kinds/core/preferences/schema-reference.md +++ /dev/null @@ -1,144 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: Preferences kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## Preferences - -#### Maturity: [merged](../../../maturity/#merged) -#### Version: 0.0 - -The user or team frontend preferences - -| Property | Type | Required | Default | Description | -|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
without external reference as using the CommonMetadata reference breaks thema codegen. | -| `spec` | [object](#spec) | **Yes** | | Spec defines user, team or org Grafana preferences
swagger:model Preferences | -| `status` | [object](#status) | **Yes** | | | - -### Metadata - -metadata contains embedded CommonMetadata and can be extended with custom string fields -TODO: use CommonMetadata instead of redefining here; currently needs to be defined here -without external reference as using the CommonMetadata reference breaks thema codegen. - -It extends [_kubeObjectMetadata](#_kubeobjectmetadata). - -| Property | Type | Required | Default | Description | -|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `createdBy` | string | **Yes** | | | -| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata | -| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `updateTimestamp` | string | **Yes** | | | -| `updatedBy` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | - -### _kubeObjectMetadata - -_kubeObjectMetadata is metadata found in a kubernetes object's metadata field. -It is not exhaustive and only includes fields which may be relevant to a kind's implementation, -As it is also intended to be generic enough to function with any API Server. - -| Property | Type | Required | Default | Description | -|---------------------|-------------------|----------|---------|-------------| -| `creationTimestamp` | string | **Yes** | | | -| `finalizers` | string[] | **Yes** | | | -| `labels` | map[string]string | **Yes** | | | -| `resourceVersion` | string | **Yes** | | | -| `uid` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | | - -### ExtraFields - -extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Spec - -Spec defines user, team or org Grafana preferences -swagger:model Preferences - -| Property | Type | Required | Default | Description | -|---------------------|---------------------------------------------------|----------|---------|---------------------------------------------------------------------------------| -| `cookiePreferences` | [CookiePreferences](#cookiepreferences) | No | | | -| `homeDashboardUID` | string | No | | UID for the home dashboard | -| `language` | string | No | | Selected language (beta) | -| `queryHistory` | [QueryHistoryPreference](#queryhistorypreference) | No | | | -| `theme` | string | No | | light, dark, empty is default | -| `timezone` | string | No | | The timezone selection
TODO: this should use the timezone defined in common | -| `weekStart` | string | No | | day of the week (sunday, monday, etc) | - -### CookiePreferences - -| Property | Type | Required | Default | Description | -|---------------|------------------------|----------|---------|-------------| -| `analytics` | [object](#analytics) | No | | | -| `functional` | [object](#functional) | No | | | -| `performance` | [object](#performance) | No | | | - -### Analytics - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Functional - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Performance - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### QueryHistoryPreference - -| Property | Type | Required | Default | Description | -|-----------|--------|----------|---------|---------------------------------------------| -| `homeTab` | string | No | | one of: '' | 'query' | 'starred'; | - -### Status - -| Property | Type | Required | Default | Description | -|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | - -### AdditionalFields - -additionalFields is reserved for future use - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Status.#OperatorState - -| Property | Type | Required | Default | Description | -|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated | -| `state` | string | **Yes** | | state describes the state of the lastEvaluation.
It is limited to three possible states for machine evaluation.
Possible values are: `success`, `in_progress`, `failed`. | -| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format | -| `details` | [object](#details) | No | | details contains any extra information that is operator-specific | - -### Details - -details contains any extra information that is operator-specific - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - - diff --git a/docs/sources/developers/kinds/core/publicdashboard/schema-reference.md b/docs/sources/developers/kinds/core/publicdashboard/schema-reference.md deleted file mode 100644 index 3f6f3ab223c89..0000000000000 --- a/docs/sources/developers/kinds/core/publicdashboard/schema-reference.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: PublicDashboard kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## PublicDashboard - -#### Maturity: [merged](../../../maturity/#merged) -#### Version: 0.0 - -Public dashboard configuration - -| Property | Type | Required | Default | Description | -|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
without external reference as using the CommonMetadata reference breaks thema codegen. | -| `spec` | [object](#spec) | **Yes** | | | -| `status` | [object](#status) | **Yes** | | | - -### Metadata - -metadata contains embedded CommonMetadata and can be extended with custom string fields -TODO: use CommonMetadata instead of redefining here; currently needs to be defined here -without external reference as using the CommonMetadata reference breaks thema codegen. - -It extends [_kubeObjectMetadata](#_kubeobjectmetadata). - -| Property | Type | Required | Default | Description | -|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `createdBy` | string | **Yes** | | | -| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata | -| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `updateTimestamp` | string | **Yes** | | | -| `updatedBy` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | - -### _kubeObjectMetadata - -_kubeObjectMetadata is metadata found in a kubernetes object's metadata field. -It is not exhaustive and only includes fields which may be relevant to a kind's implementation, -As it is also intended to be generic enough to function with any API Server. - -| Property | Type | Required | Default | Description | -|---------------------|-------------------|----------|---------|-------------| -| `creationTimestamp` | string | **Yes** | | | -| `finalizers` | string[] | **Yes** | | | -| `labels` | map[string]string | **Yes** | | | -| `resourceVersion` | string | **Yes** | | | -| `uid` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | | - -### ExtraFields - -extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Spec - -| Property | Type | Required | Default | Description | -|------------------------|---------|----------|---------|-----------------------------------------------------------------| -| `annotationsEnabled` | boolean | **Yes** | | Flag that indicates if annotations are enabled | -| `dashboardUid` | string | **Yes** | | Dashboard unique identifier referenced by this public dashboard | -| `isEnabled` | boolean | **Yes** | | Flag that indicates if the public dashboard is enabled | -| `timeSelectionEnabled` | boolean | **Yes** | | Flag that indicates if the time range picker is enabled | -| `uid` | string | **Yes** | | Unique public dashboard identifier | -| `accessToken` | string | No | | Unique public access token | - -### Status - -| Property | Type | Required | Default | Description | -|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | - -### AdditionalFields - -additionalFields is reserved for future use - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Status.#OperatorState - -| Property | Type | Required | Default | Description | -|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated | -| `state` | string | **Yes** | | state describes the state of the lastEvaluation.
It is limited to three possible states for machine evaluation.
Possible values are: `success`, `in_progress`, `failed`. | -| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format | -| `details` | [object](#details) | No | | details contains any extra information that is operator-specific | - -### Details - -details contains any extra information that is operator-specific - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - - diff --git a/docs/sources/developers/kinds/core/role/schema-reference.md b/docs/sources/developers/kinds/core/role/schema-reference.md deleted file mode 100644 index b5d96f79479c7..0000000000000 --- a/docs/sources/developers/kinds/core/role/schema-reference.md +++ /dev/null @@ -1,110 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: Role kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## Role - -#### Maturity: [merged](../../../maturity/#merged) -#### Version: 0.0 - -Roles represent a set of users+teams that should share similar access - -| Property | Type | Required | Default | Description | -|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
without external reference as using the CommonMetadata reference breaks thema codegen. | -| `spec` | [object](#spec) | **Yes** | | | -| `status` | [object](#status) | **Yes** | | | - -### Metadata - -metadata contains embedded CommonMetadata and can be extended with custom string fields -TODO: use CommonMetadata instead of redefining here; currently needs to be defined here -without external reference as using the CommonMetadata reference breaks thema codegen. - -It extends [_kubeObjectMetadata](#_kubeobjectmetadata). - -| Property | Type | Required | Default | Description | -|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `createdBy` | string | **Yes** | | | -| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata | -| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `updateTimestamp` | string | **Yes** | | | -| `updatedBy` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | - -### _kubeObjectMetadata - -_kubeObjectMetadata is metadata found in a kubernetes object's metadata field. -It is not exhaustive and only includes fields which may be relevant to a kind's implementation, -As it is also intended to be generic enough to function with any API Server. - -| Property | Type | Required | Default | Description | -|---------------------|-------------------|----------|---------|-------------| -| `creationTimestamp` | string | **Yes** | | | -| `finalizers` | string[] | **Yes** | | | -| `labels` | map[string]string | **Yes** | | | -| `resourceVersion` | string | **Yes** | | | -| `uid` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | | - -### ExtraFields - -extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Spec - -| Property | Type | Required | Default | Description | -|---------------|---------|----------|---------|-----------------------------------------------------------| -| `hidden` | boolean | **Yes** | | Do not show this role | -| `name` | string | **Yes** | | The role identifier `managed:builtins:editor:permissions` | -| `description` | string | No | | Role description | -| `displayName` | string | No | | Optional display | -| `groupName` | string | No | | Name of the team. | - -### Status - -| Property | Type | Required | Default | Description | -|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | - -### AdditionalFields - -additionalFields is reserved for future use - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Status.#OperatorState - -| Property | Type | Required | Default | Description | -|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated | -| `state` | string | **Yes** | | state describes the state of the lastEvaluation.
It is limited to three possible states for machine evaluation.
Possible values are: `success`, `in_progress`, `failed`. | -| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format | -| `details` | [object](#details) | No | | details contains any extra information that is operator-specific | - -### Details - -details contains any extra information that is operator-specific - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - - diff --git a/docs/sources/developers/kinds/core/rolebinding/schema-reference.md b/docs/sources/developers/kinds/core/rolebinding/schema-reference.md deleted file mode 100644 index 370a2a82ccfb0..0000000000000 --- a/docs/sources/developers/kinds/core/rolebinding/schema-reference.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: RoleBinding kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## RoleBinding - -#### Maturity: [merged](../../../maturity/#merged) -#### Version: 0.0 - -Role bindings links a user|team to a configured role - -| Property | Type | Required | Default | Description | -|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
without external reference as using the CommonMetadata reference breaks thema codegen. | -| `spec` | [object](#spec) | **Yes** | | | -| `status` | [object](#status) | **Yes** | | | - -### Metadata - -metadata contains embedded CommonMetadata and can be extended with custom string fields -TODO: use CommonMetadata instead of redefining here; currently needs to be defined here -without external reference as using the CommonMetadata reference breaks thema codegen. - -It extends [_kubeObjectMetadata](#_kubeobjectmetadata). - -| Property | Type | Required | Default | Description | -|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `createdBy` | string | **Yes** | | | -| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata | -| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `updateTimestamp` | string | **Yes** | | | -| `updatedBy` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | - -### _kubeObjectMetadata - -_kubeObjectMetadata is metadata found in a kubernetes object's metadata field. -It is not exhaustive and only includes fields which may be relevant to a kind's implementation, -As it is also intended to be generic enough to function with any API Server. - -| Property | Type | Required | Default | Description | -|---------------------|-------------------|----------|---------|-------------| -| `creationTimestamp` | string | **Yes** | | | -| `finalizers` | string[] | **Yes** | | | -| `labels` | map[string]string | **Yes** | | | -| `resourceVersion` | string | **Yes** | | | -| `uid` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | | - -### ExtraFields - -extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Spec - -| Property | Type | Required | Default | Description | -|-----------|-------------------------------------------|----------|---------|----------------------------| -| `role` | [object](#role) | **Yes** | | The role we are discussing | -| `subject` | [RoleBindingSubject](#rolebindingsubject) | **Yes** | | | - -### RoleBindingSubject - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|--------------------------------------| -| `kind` | string | **Yes** | | Possible values are: `Team`, `User`. | -| `name` | string | **Yes** | | The team/user identifier name | - -### Role - -The role we are discussing - -| Property | Type | Required | Default | Description | -|----------|-----------------------------------------------------------------------------------------|----------|---------|-------------| -| `object` | Possible types are: [BuiltinRoleRef](#builtinroleref), [CustomRoleRef](#customroleref). | | | - -### BuiltinRoleRef - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|---------------------------------------------------| -| `kind` | string | **Yes** | | Possible values are: `BuiltinRole`. | -| `name` | string | **Yes** | | Possible values are: `viewer`, `editor`, `admin`. | - -### CustomRoleRef - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|------------------------------| -| `kind` | string | **Yes** | | Possible values are: `Role`. | -| `name` | string | **Yes** | | | - -### Status - -| Property | Type | Required | Default | Description | -|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | - -### AdditionalFields - -additionalFields is reserved for future use - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Status.#OperatorState - -| Property | Type | Required | Default | Description | -|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated | -| `state` | string | **Yes** | | state describes the state of the lastEvaluation.
It is limited to three possible states for machine evaluation.
Possible values are: `success`, `in_progress`, `failed`. | -| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format | -| `details` | [object](#details) | No | | details contains any extra information that is operator-specific | - -### Details - -details contains any extra information that is operator-specific - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - - diff --git a/docs/sources/developers/kinds/core/serviceaccount/schema-reference.md b/docs/sources/developers/kinds/core/serviceaccount/schema-reference.md deleted file mode 100644 index 4c609ec6bba98..0000000000000 --- a/docs/sources/developers/kinds/core/serviceaccount/schema-reference.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -keywords: -- grafana -- schema -labels: - products: - - enterprise - - oss -title: ServiceAccount kind ---- - -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## ServiceAccount - -#### Maturity: [merged](../../../maturity/#merged) - -#### Version: 0.0 - -system account - -| Property | Type | Required | Default | Description | -| ---------- | ------------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
without external reference as using the CommonMetadata reference breaks thema codegen. | -| `spec` | [object](#spec) | **Yes** | | | -| `status` | [object](#status) | **Yes** | | | - -### Metadata - -metadata contains embedded CommonMetadata and can be extended with custom string fields -TODO: use CommonMetadata instead of redefining here; currently needs to be defined here -without external reference as using the CommonMetadata reference breaks thema codegen. - -It extends [\_kubeObjectMetadata](#_kubeobjectmetadata). - -| Property | Type | Required | Default | Description | -| ------------------- | ---------------------- | -------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| `createdBy` | string | **Yes** | | | -| `creationTimestamp` | string | **Yes** | | _(Inherited from [\_kubeObjectMetadata](#_kubeobjectmetadata))_ | -| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata | -| `finalizers` | string[] | **Yes** | | _(Inherited from [\_kubeObjectMetadata](#_kubeobjectmetadata))_ | -| `labels` | map[string]string | **Yes** | | _(Inherited from [\_kubeObjectMetadata](#_kubeobjectmetadata))_ | -| `resourceVersion` | string | **Yes** | | _(Inherited from [\_kubeObjectMetadata](#_kubeobjectmetadata))_ | -| `uid` | string | **Yes** | | _(Inherited from [\_kubeObjectMetadata](#_kubeobjectmetadata))_ | -| `updateTimestamp` | string | **Yes** | | | -| `updatedBy` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | _(Inherited from [\_kubeObjectMetadata](#_kubeobjectmetadata))_ | - -### \_kubeObjectMetadata - -\_kubeObjectMetadata is metadata found in a kubernetes object's metadata field. -It is not exhaustive and only includes fields which may be relevant to a kind's implementation, -As it is also intended to be generic enough to function with any API Server. - -| Property | Type | Required | Default | Description | -| ------------------- | ----------------- | -------- | ------- | ----------- | -| `creationTimestamp` | string | **Yes** | | | -| `finalizers` | string[] | **Yes** | | | -| `labels` | map[string]string | **Yes** | | | -| `resourceVersion` | string | **Yes** | | | -| `uid` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | | - -### ExtraFields - -extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata - -| Property | Type | Required | Default | Description | -| -------- | ---- | -------- | ------- | ----------- | - -### Spec - -| Property | Type | Required | Default | Description | -| --------------- | ------------------ | -------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| `avatarUrl` | string | **Yes** | | AvatarUrl is the service account's avatar URL. It allows the frontend to display a picture in front
of the service account. | -| `id` | integer | **Yes** | | ID is the unique identifier of the service account in the database. | -| `isDisabled` | boolean | **Yes** | | IsDisabled indicates if the service account is disabled. | -| `login` | string | **Yes** | | Login of the service account. | -| `name` | string | **Yes** | | Name of the service account. | -| `orgId` | integer | **Yes** | | OrgId is the ID of an organisation the service account belongs to. | -| `role` | string | **Yes** | | OrgRole is a Grafana Organization Role which can be 'Viewer', 'Editor', 'Admin'.
Possible values are: `Admin`, `Editor`, `Viewer`. | -| `tokens` | integer | **Yes** | | Tokens is the number of active tokens for the service account.
Tokens are used to authenticate the service account against Grafana. | -| `accessControl` | map[string]boolean | No | | AccessControl metadata associated with a given resource. | -| `teams` | string[] | No | | Teams is a list of teams the service account belongs to. | - -### Status - -| Property | Type | Required | Default | Description | -| ------------------ | ---------------------------------------------------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | - -### AdditionalFields - -additionalFields is reserved for future use - -| Property | Type | Required | Default | Description | -| -------- | ---- | -------- | ------- | ----------- | - -### Status.#OperatorState - -| Property | Type | Required | Default | Description | -| ------------------ | ------------------ | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated | -| `state` | string | **Yes** | | state describes the state of the lastEvaluation.
It is limited to three possible states for machine evaluation.
Possible values are: `success`, `in_progress`, `failed`. | -| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format | -| `details` | [object](#details) | No | | details contains any extra information that is operator-specific | - -### Details - -details contains any extra information that is operator-specific - -| Property | Type | Required | Default | Description | -| -------- | ---- | -------- | ------- | ----------- | diff --git a/docs/sources/developers/kinds/core/team/schema-reference.md b/docs/sources/developers/kinds/core/team/schema-reference.md deleted file mode 100644 index 6f759abf319cf..0000000000000 --- a/docs/sources/developers/kinds/core/team/schema-reference.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -keywords: - - grafana - - schema -labels: - products: - - cloud - - enterprise - - oss -title: Team kind ---- -> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. - -## Team - -#### Maturity: [merged](../../../maturity/#merged) -#### Version: 0.0 - -A team is a named grouping of Grafana users to which access control rules may be assigned. - -| Property | Type | Required | Default | Description | -|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
without external reference as using the CommonMetadata reference breaks thema codegen. | -| `spec` | [object](#spec) | **Yes** | | | -| `status` | [object](#status) | **Yes** | | | - -### Metadata - -metadata contains embedded CommonMetadata and can be extended with custom string fields -TODO: use CommonMetadata instead of redefining here; currently needs to be defined here -without external reference as using the CommonMetadata reference breaks thema codegen. - -It extends [_kubeObjectMetadata](#_kubeobjectmetadata). - -| Property | Type | Required | Default | Description | -|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `createdBy` | string | **Yes** | | | -| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata | -| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | -| `updateTimestamp` | string | **Yes** | | | -| `updatedBy` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* | - -### _kubeObjectMetadata - -_kubeObjectMetadata is metadata found in a kubernetes object's metadata field. -It is not exhaustive and only includes fields which may be relevant to a kind's implementation, -As it is also intended to be generic enough to function with any API Server. - -| Property | Type | Required | Default | Description | -|---------------------|-------------------|----------|---------|-------------| -| `creationTimestamp` | string | **Yes** | | | -| `finalizers` | string[] | **Yes** | | | -| `labels` | map[string]string | **Yes** | | | -| `resourceVersion` | string | **Yes** | | | -| `uid` | string | **Yes** | | | -| `deletionTimestamp` | string | No | | | - -### ExtraFields - -extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Spec - -| Property | Type | Required | Default | Description | -|----------|--------|----------|---------|--------------------| -| `name` | string | **Yes** | | Name of the team. | -| `email` | string | No | | Email of the team. | - -### Status - -| Property | Type | Required | Default | Description | -|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | - -### AdditionalFields - -additionalFields is reserved for future use - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - -### Status.#OperatorState - -| Property | Type | Required | Default | Description | -|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated | -| `state` | string | **Yes** | | state describes the state of the lastEvaluation.
It is limited to three possible states for machine evaluation.
Possible values are: `success`, `in_progress`, `failed`. | -| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format | -| `details` | [object](#details) | No | | details contains any extra information that is operator-specific | - -### Details - -details contains any extra information that is operator-specific - -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| - - diff --git a/docs/sources/developers/kinds/maturity.md b/docs/sources/developers/kinds/maturity.md deleted file mode 100644 index e9a6264f2f0d4..0000000000000 --- a/docs/sources/developers/kinds/maturity.md +++ /dev/null @@ -1,298 +0,0 @@ ---- -keywords: -- grafana -- schema -- maturity -labels: - products: - - enterprise - - oss -title: Grafana Kinds - From Zero to Maturity -weight: 300 ---- - -# Grafana Kinds - From Zero to Maturity - -> Grafana’s schema, Kind, and related codegen systems are under intense development. - -Fear of unknown impacts leads to defensive coding, slow PRs, circular arguments, and an overall hesitance to engage. -That friction alone is sufficient to sink a large-scale project. This guide seeks to counteract this friction by -defining an end goal for all schemas: “mature.” This is the word we’re using to refer to the commonsense notion of “this -software reached 1.0.” - -In general, 1.0/mature suggests: “we’ve thought about this thing, done the necessary experimenting, know what it is, and -feel confident about presenting it to the world.” In the context of schemas intended to act as a single source of truth -driving many use cases, we can intuitively phrase maturity as: - -- The schema follows general best practices (e.g. good comments, follows field type rules), and the team owning the - schema believes that the fields described in the schema are accurate. -- Automation propagates the schema as source of truth to every relevant - [domain](https://docs.google.com/document/d/13Rv395_T8WTLBgdL-2rbXKu0fx_TW-Q9yz9x6oBjm6g/edit#heading=h.67pop2k2f8fq) - (for example: types in frontend, backend, as-code; plugins SDK; docs; APIs and storage; search indexing) - -This intuitive definition gets us pointed in the right direction. But we can’t just jump straight there - we have to -approach it methodically. To that end, this doc outlines four (ok five, but really, four) basic maturity milestones that -we expect Kinds and their schemas to progress through: - -- _(Planned - Put a Kind name on the official TODO list)_ -- **Merged** - Get an initial schema written down. Not final. Not perfect. -- **Experimental** - Kind schemas are the source of truth for basic working code. -- **Stable** - Kind schemas are the source of truth for all target domains. -- **Mature** - The operational transition path for the Kind is battle-tested and reliable. - -These milestones have functional definitions, tied to code and enforced in CI. A Kind having reached a particular -milestone corresponds to properties of the code that are enforced in CI; advancing to the next milestone likely has a -direct impact on code generation and runtime behavior. - -Finally, the above definitions imply that maturity for _individual Kinds/schemas_ depends on _the Kind system_ being -mature, as well. This is by design: **Grafana Labs does not intend to publicize any single schema as mature until -[certain schema system milestones are met](https://github.com/orgs/grafana/projects/133/views/8).** - -## Schema Maturity Milestones - -Maturity milestones are a linear progression. Each milestone implies that the conditions of its predecessors continue to -be met. - -Reaching a particular milestone implies that the properties of all prior milestones are still met. - -### (Milestone 0 - Planned) {#planned} - -| **Goal** | Put a Kind name on the official TODO list: [Kind Schematization Progress Tracker](https://docs.google.com/spreadsheets/d/1DL6nZHyX42X013QraWYbKsMmHozLrtXDj8teLKvwYMY/edit#gid=0) | -| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Reached when** | The planned Kind is listed in the relevant sheet of the progress tracker with a link to track / be able to see when exactly it is planned and who is responsible for doing it | -| **Common hurdles** | Existing definitions may not correspond clearly to an object boundary - e.g. playlists are currently in denormalized SQL tables playlist and playlist_item | -| **Public-facing guarantees** | None | -| **customer-facing stage** | None | - -### Milestone 1 - Merged {#merged} - -| **Goal** | Get an initial schema written down. Not final. Not perfect. | -| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Reached when** | A PR introducing the initial version of a schema has been merged. | -| **Common hurdles** | Getting comfortable with Thema and CUE
Figuring out where all the existing definitions of the Kind are
Knowing whether it’s safe to omit possibly-crufty fields from the existing definitions when writing the schema | -| **Public-facing guarantees** | None | -| **User-facing stage** | None | - -### Milestone 2 - Experimental {#experimental} - -| **Goal** | Schemas are the source of truth for basic working code. | -| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Reached when** | Go and TypeScript types generated from schema are used in all relevant production code, having replaced handwritten type definitions (if any). | -| **Common hurdles** | Compromises on field definitions that seemed fine to reach “committed” start to feel unacceptable
Ergonomics of generated code may start to bite
Aligning with the look and feel of related schemas | -| **Public-facing guarantees** | Kinds are available for as-code usage in [grok](https://github.com/grafana/grok), and in tools downstream of grok, following all of grok’s standard patterns. | -| **Stage comms** | Internal users:- Start using the schema and give feedback internally to help move to the next stage.External users:- Align with the [experimental](https://docs.google.com/document/d/1lqp0hALax2PT7jSObsX52EbQmIDFnLFMqIbBrJ4EYCE/edit#heading=h.ehl5iy7pcjvq) stage in the release definition document.  - Experimental schemas will be discoverable, and from a customer PoV should never be used in production, but they can be explored and we are more than happy to receive feedback | - -## Schema-writing guidelines - -### Avoid anonymous nested structs - -**_Always name your sub-objects._** - -In CUE, nesting structs is like nesting objects in JSON, and just as easy: - -```json -one: { - two: { - three: { - } -} -``` - -While these can be accurately represented in other languages, they aren’t especially friendly to work with: - -```typescript -// TypeScript -export interface One { - two: { - three: string; - }; -} -``` - -```go -// Go -type One struct { - Two struct { - Three string `json:"three"` - } `json:"two"` -} -``` - -Instead, within your schema, prefer to make root-level definitions with the appropriate attributes: - -```cue -// Cue -one: { - two: #Two - #Two: { - three: string - } @cuetsy(kind="interface") -} -``` - -```Typescript -// TypeScript -export interface Two { - three: string; -} -export interface One { - two: Two; -} -``` - -```Go -// Go -type One struct { - Two Two `json:"two"` -} -type Two struct { - Three string `json:"three"` -} -``` - -### Use precise numeric types - -**_Use precise numeric types like `float64` or `uint32`. Never use `number`._** - -Never use `number` for a numeric type in a schema. - -Instead, use a specific, sized type like `int64` or `float32`. This makes your intent precisely clear. -TypeScript will still represent these fields with `number`, but other languages (e.g. Go, Protobuf) can be more precise. - -Unlike in Go, int and uint are not your friends. These correspond to `math/big` types. Use a sized type, -like `uint32` or `int32`, unless the use case specifically requires a huge numeric space. - -### No explicit `null` - -**_Do not use `null` as a type in any schema._** - -This one is tricky to think about, and requires some background. - -Historically, Grafana’s dashboard JSON has often contained fields with the explicit value `null`. -This was problematic, because explicit `null` introduces an ambiguity: is a JSON field being present -with value null meaningfully different from the field being absent? That is, should a program behave differently -if it encounters a null vs. an absent field? - -In almost all cases, the answer is “no.” Thus, the ambiguity: if both explicit null and absence are _accepted_ -by a system, it pushes responsibility onto anyone writing code in that system to decide, case-by-case, -whether the two are _intended to be meaningfully different_, and therefore whether behavior should be different. - -CUE does have a `null` type, and only accepts data containing `nulls` as valid if the schema explicitly allows a `null`. -That means, by default, using CUE for schemas removes the possibility of ambiguity in code that receives data validated -by those schemas, even if the language they’re writing in still allows for ambiguity. (Javascript does, Go doesn’t.) - -As a schema author, this means you’re being unambiguous by default - no `nulls`. That’s good! The only question is -whether it’s worth explicitly allowing a `null` for some particular case: - -```Cue -someField: int32 | null -``` - -The _only_ time this _may_ be a good idea is if your field needs to be able to represent a value -that is not otherwise acceptable within the value space - for example, if `someField` needs to be able to contain -[Infinity](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY). -When such values are serialized to null by default, it can be convenient to accept null in the schema - but even then, -explicit null is unlikely to be the best way to represent such values, because it is so subtle and falsey. - -**Above all, DO NOT accept `null` in a schema simply because current behavior sometimes unintentionally produces a `null`.** -Schematization is an opportunity to get rid of this ambiguity. Fix the accidental null-producing behavior, instead. - -### Issues - -- If a schema has a "kind" field and its set as enum, it generates a Kind alias that conflicts with the generated - Kind struct. -- Byte fields are existing in Go but not in TS, so the generator fails. -- **omitempty** is useful when we return things like json.RawMessage (alias of []byte) because Postgres saves this - information as `nil`, when MySQL and SQLite save it as `{}`. If we found it in the rest of the cases, it isn't necessary - to set `?` in the field in the schema. - -## Schema Attributes - -Grafana’s schema system relies on [CUE attributes](https://cuelang.org/docs/references/spec/#attributes)declared on -properties within schemas to control some aspects of code generation behavior. -In a schema, an attribute is the whole of `@cuetsy(kind=”type”)`: - -```Cue -field: string @cuetsy(kind="type") -``` - -CUE attributes are purely informational - they cannot influence CUE evaluation behavior, including the types being -expressed in a Thema schema. - -CUE attributes have three parts. In `@cuetsy(kind=”type”)`, those are: - -- name - `@cuetsy` -- arg - `kind` -- argval - `“type”` - -Any given attribute may consist of `{name}`, `{name,arg}`, or `{name,arg,argval}`. These three levels form a tree -(meaning of any argval is specific to its arg, which is specific to its name). The following documentation represents -this tree using a header hierarchy. - -### @cuetsy - -These attributes control the behavior of the [cuetsy code generator](https://github.com/grafana/cuetsy), which converts -CUE to TypeScript. We include only the kind arg here for brevity; cuetsy’s README has the canonical documentation on all -supported args and argvals, and their intended usage. - -Notes: - -- Only top-level fields in a Thema schema are scanned for `@cuetsy` attributes. -- Grafana’s code generators hardcode that an interface (`@cuetsy(kind=”interface”)`) is generated to represent the root - schema object, unless it is known to be a [grouped lineage](https://docs.google.com/document/d/13Rv395_T8WTLBgdL-2rbXKu0fx_TW-Q9yz9x6oBjm6g/edit#heading=h.vx7stzpxtw4t). - -#### kind - -Indicates the kind of TypeScript symbol that should be generated for that schema field. - -#### interface - -Generate the schema field as a TS interface. Field must be struct-kinded. - -#### enum - -Generate the schema field as a TS enum. Field must be either int-kinded (numeric enums) or string-kinded (string enums). - -#### type - -Generate the schema field as a TS type alias. - -### @grafana - -These attributes control code generation behaviors that are specific to Grafana core. Some may also be supported -in plugin code generators. - -#### TSVeneer - -Applying a TSVeneer arg to a field in a schema indicates that the schema author wants to enrich the generated type -(for example by adding generic type parameters), so code generation should expect a handwritten -[veneer](https://docs.google.com/document/d/13Rv395_T8WTLBgdL-2rbXKu0fx_TW-Q9yz9x6oBjm6g/edit#heading=h.bmtjq0bb1yxp). - -TSVeneer requires at least one argval, each of which impacts TypeScript code generation in its own way. -Multiple argvals may be given, separated by `|`. - -A TSVeneer arg has no effect if it is applied to a field that is not exported as a standalone TypeScript type -(which usually means a CUE field that also has an `@cuetsy(kind=)` attribute). - -#### type - -A handwritten veneer is needed to refine the raw generated TypeScript type, for example by adding generics. -See [the dashboard types veneer](https://github.com/grafana/grafana/blob/5f93e67419e9587363d1fc1e6f1f4a8044eb54d0/packages/grafana-schema/src/veneer/dashboard.types.ts) -for an example, and [some](https://github.com/grafana/grafana/blob/5f93e67419e9587363d1fc1e6f1f4a8044eb54d0/kinds/dashboard/dashboard_kind.cue#L12) -[corresponding](https://github.com/grafana/grafana/blob/5f93e67419e9587363d1fc1e6f1f4a8044eb54d0/kinds/dashboard/dashboard_kind.cue#L143) -CUE attributes. - -### @grafanamaturity - -These attributes are used to support iterative development of a schema towards maturity. - -Grafana code generators and CI enforce that schemas marked as mature MUST NOT have any `@grafanamaturity` attributes. - -#### NeedsExpertReview - -Indicates that a non-expert on that schema wrote the field, and was not fully confident in its type and/or docs. - -Primarily useful on very large schemas, like the dashboard schema, for getting _something_ written down for a given -field that at least makes validation tests pass, but making clear that the field isn’t necessarily properly correct. - -No argval is accepted. (Use a `//` comment to say more about the attention that’s needed.) diff --git a/docs/sources/developers/plugins/plugin.schema.json b/docs/sources/developers/plugins/plugin.schema.json index 41ee3c2b3f19c..4947f96e0f242 100644 --- a/docs/sources/developers/plugins/plugin.schema.json +++ b/docs/sources/developers/plugins/plugin.schema.json @@ -272,6 +272,10 @@ "description": "The minimum role a user must have to see this page in the navigation menu.", "enum": ["Admin", "Editor", "Viewer"] }, + "action": { + "type": "string", + "description": "The RBAC action a user must have to see this page in the navigation menu." + }, "path": { "type": "string", "description": "Used for app plugins." @@ -353,6 +357,10 @@ "reqRole": { "type": "string" }, + "reqAction": { + "type": "string", + "description": "The RBAC action a user must have to use this route." + }, "headers": { "type": "array", "description": "For data source plugins. Route headers adds HTTP headers to the proxied request." @@ -497,31 +505,53 @@ } } } - }, - "impersonation": { - "type": "object", - "description": "Impersonation describes the permissions that the plugin will be restricted to when acting on behalf of the user.", - "properties": { - "groups": { - "type": "boolean", - "description": "Groups allows the service to list the impersonated user's teams." - }, - "permissions": { - "type": "array", - "description": "Permissions are the permissions that the plugin needs when impersonating a user. The intersection of this set with the impersonated user's permission guarantees that the client will not gain more privileges than the impersonated user has.", - "items": { - "type": "object", - "additionalProperties": false, - "properties": { - "action": { - "type": "string" - }, - "scope": { - "type": "string" + } + } + }, + "roles": { + "type": "array", + "description": "List of RBAC roles and their default assignments.", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "role": { + "type": "object", + "description": "RBAC role definition to bundle related RBAC permissions on the plugin.", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "Display name of the role." + }, + "description": { + "type": "string", + "description": "Describe the aim of the role." + }, + "permissions": { + "type": "array", + "description": "RBAC permission on the plugin.", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "action": { + "type": "string" + }, + "scope": { + "type": "string" + } } } } } + }, + "grants": { + "type": "array", + "description": "Default assignments of the role to Grafana basic roles (Viewer, Editor, Admin, Grafana Admin)", + "items": { + "type": "string" + } } } } diff --git a/docs/sources/explore/_index.md b/docs/sources/explore/_index.md index 92257239d952b..640c9785aa2c6 100644 --- a/docs/sources/explore/_index.md +++ b/docs/sources/explore/_index.md @@ -29,6 +29,8 @@ If you just want to explore your data and do not want to create a dashboard, the ## Start exploring +{{< youtube id="1q3YzX2DDM4" >}} + > Refer to [Role-based access Control]({{< relref "../administration/roles-and-permissions/access-control/" >}}) in Grafana Enterprise to understand how you can manage Explore with role-based permissions. In order to access Explore, you must have an editor or an administrator role, unless the [viewers_can_edit option]({{< relref "../setup-grafana/configure-grafana/#viewers_can_edit" >}}) is enabled. Refer to [About users and permissions]({{< relref "../administration/roles-and-permissions/" >}}) for more information on what each role has access to. diff --git a/docs/sources/explore/logs-integration.md b/docs/sources/explore/logs-integration.md index 703c87829ed75..92ffc6eabe7aa 100644 --- a/docs/sources/explore/logs-integration.md +++ b/docs/sources/explore/logs-integration.md @@ -21,6 +21,7 @@ Explore is a powerful tool for logging and log analysis. It allows you to invest - [Cloudwatch]({{< relref "../datasources/aws-cloudwatch" >}}) - [InfluxDB]({{< relref "../datasources/influxdb" >}}) - [Azure Monitor]({{< relref "../datasources/azure-monitor" >}}) +- [ClickHouse](https://github.com/grafana/clickhouse-datasource) With Explore, you can efficiently monitor, troubleshoot, and respond to incidents by analyzing your logs and identifying the root causes. It also helps you to correlate logs with other telemetry signals such as metrics, traces or profiles, by viewing them side-by-side. diff --git a/docs/sources/explore/trace-integration.md b/docs/sources/explore/trace-integration.md index dad3dbf68f6ff..59408b5676502 100644 --- a/docs/sources/explore/trace-integration.md +++ b/docs/sources/explore/trace-integration.md @@ -23,6 +23,7 @@ Supported data sources are: - [Zipkin]({{< relref "../datasources/zipkin/" >}}) - [X-Ray](https://grafana.com/grafana/plugins/grafana-x-ray-datasource) - [Azure Monitor Application Insights]({{< relref "../datasources/azure-monitor/" >}}) +- [ClickHouse](https://github.com/grafana/clickhouse-datasource) For information on how to configure queries for the data sources listed above, refer to the documentation for specific data source. @@ -38,6 +39,7 @@ For information on querying each data source, refer to their documentation: - [Jaeger query editor]({{< relref "../datasources/jaeger/#query-the-data-source" >}}) - [Zipkin query editor]({{< relref "../datasources/zipkin/#query-the-data-source" >}}) - [Azure Monitor Application Insights query editor]({{< relref "../datasources/azure-monitor/query-editor/#query-application-insights-traces" >}}) +- [ClickHouse query editor](https://clickhouse.com/docs/en/integrations/grafana/query-builder#traces) ## Trace view @@ -117,12 +119,10 @@ You can navigate from a span in a trace view directly to metrics relevant for th ### Trace to profiles -{{< docs/experimental product="Trace to profiles" featureFlag="traceToProfiles" >}} - Using Trace to profiles, you can use Grafana’s ability to correlate different signals by adding the functionality to link between traces and profiles. Refer to the [relevant documentation](/docs/grafana/latest/datasources/tempo/configure-tempo-data-source#trace-to-profiles) for configuration instructions. -![Selecting a link in the span queries the profile data source](/static/img/docs/tempo/profiles/tempo-profiles-Span-link-profile-data-source.png) +{{< figure src="/static/img/docs/tempo/profiles/tempo-trace-to-profile.png" max-width="900px" class="docs-image--no-shadow" alt="Selecting a link in the span queries the profile data source" >}} ## Node graph diff --git a/docs/sources/fundamentals/intro-histograms/index.md b/docs/sources/fundamentals/intro-histograms/index.md index 4b78139e3910e..21b1c85e866b7 100644 --- a/docs/sources/fundamentals/intro-histograms/index.md +++ b/docs/sources/fundamentals/intro-histograms/index.md @@ -32,7 +32,7 @@ and the bar height represents the frequency (such as count) of values that fell This _histogram_ shows the value distribution of a couple of time series. You can easily see that most values land between 240-300 with a peak between 260-280. -![](/static/img/docs/v43/heatmap_histogram.png) +![Histogram example](/static/img/docs/v43/heatmap_histogram.png) Here is an example showing height distribution of people. @@ -48,7 +48,7 @@ A _heatmap_ is like a histogram, but over time, where each time slice represents In this example, you can clearly see what values are more common and how they trend over time. -![](/static/img/docs/v43/heatmap_histogram_over_time.png) +![Heatmap example](/static/img/docs/v43/heatmap_histogram_over_time.png) For more information about heatmap visualization options, refer to [Heatmap][heatmap]. diff --git a/docs/sources/fundamentals/intro-to-prometheus/index.md b/docs/sources/fundamentals/intro-to-prometheus/index.md index 3217abc965cfd..6fa0023c62f9f 100644 --- a/docs/sources/fundamentals/intro-to-prometheus/index.md +++ b/docs/sources/fundamentals/intro-to-prometheus/index.md @@ -1,6 +1,7 @@ --- aliases: - ../basics/timeseries/ + - /docs/grafana-cloud/introduction/prometheus/ description: Introduction to Prometheus keywords: - grafana diff --git a/docs/sources/fundamentals/timeseries-dimensions/index.md b/docs/sources/fundamentals/timeseries-dimensions/index.md index aeaa2182942b7..3e1e73d502273 100644 --- a/docs/sources/fundamentals/timeseries-dimensions/index.md +++ b/docs/sources/fundamentals/timeseries-dimensions/index.md @@ -3,6 +3,7 @@ aliases: - ../basics/timeseries-dimensions/ - ../getting-started/timeseries-dimensions/ - ../guides/timeseries-dimensions/ + - /docs/grafana-cloud/introduction/timeseries-dimensions/ description: time series dimensions keywords: - grafana @@ -28,7 +29,7 @@ In [Introduction to time series][time-series-databases], the concept of _labels_ With time series data, the data often contain more than a single series, and is a set of multiple time series. Many Grafana data sources support this type of data. -{{< figure src="/static/img/docs/example_graph_multi_dim.png" class="docs-image--no-shadow" max-width="850px" >}} +{{< figure src="/static/img/docs/example_graph_multi_dim.png" class="docs-image--no-shadow" max-width="850px" alt="Temperature by location" >}} The common case is issuing a single query for a measurement with one or more additional properties as dimensions. For example, querying a temperature measurement along with a location property. In this case, multiple series are returned back from that single query and each series has unique location as a dimension. diff --git a/docs/sources/fundamentals/timeseries/index.md b/docs/sources/fundamentals/timeseries/index.md index f95f6e6aa416a..aaa0df85d3c9a 100644 --- a/docs/sources/fundamentals/timeseries/index.md +++ b/docs/sources/fundamentals/timeseries/index.md @@ -1,6 +1,7 @@ --- aliases: - ../basics/timeseries/ + - /docs/grafana-cloud/introduction/timeseries/ description: Introduction to time series keywords: - grafana @@ -31,7 +32,7 @@ Temperature data like this is one example of what we call a _time series_ — a Tables are useful when you want to identify individual measurements, but they make it difficult to see the big picture. A more common visualization for time series is the _graph_, which instead places each measurement along a time axis. Visual representations like the graph make it easier to discover patterns and features of the data that otherwise would be difficult to see. -{{< figure src="/static/img/docs/example_graph.png" class="docs-image--no-shadow" max-width="850px" >}} +{{< figure src="/static/img/docs/example_graph.png" class="docs-image--no-shadow" max-width="850px" alt="Temperature data displayed on dashboard" >}} Temperature data like the one in the example, is far from the only example of a time series. Other examples of time series are: diff --git a/docs/sources/getting-started/build-first-dashboard.md b/docs/sources/getting-started/build-first-dashboard.md index 49dda7915a37a..fd76142ab5fe3 100644 --- a/docs/sources/getting-started/build-first-dashboard.md +++ b/docs/sources/getting-started/build-first-dashboard.md @@ -77,7 +77,7 @@ Congratulations, you have created your first dashboard and it's displaying resul #### Next steps -Continue to experiment with what you have built, try the [explore workflow]({{< relref "../explore" >}}) or another visualization feature. Refer to [Data sources]({{< relref "../datasources" >}}) for a list of supported data sources and instructions on how to [add a data source]({{< relref "../administration/data-source-management#add-a-data-source" >}}). The following topics will be of interest to you: +Continue to experiment with what you have built, try the [explore workflow]({{< relref "../explore" >}}) or another visualization feature. Refer to [Data sources]({{< relref "../datasources" >}}) for a list of supported data sources and instructions on how to [add a data source]({{< relref "../datasources#add-a-data-source" >}}). The following topics will be of interest to you: - [Panels and visualizations]({{< relref "../panels-visualizations" >}}) - [Dashboards]({{< relref "../dashboards" >}}) diff --git a/docs/sources/getting-started/get-started-grafana-influxdb.md b/docs/sources/getting-started/get-started-grafana-influxdb.md index c257014ae35c2..d6a163a1219a4 100644 --- a/docs/sources/getting-started/get-started-grafana-influxdb.md +++ b/docs/sources/getting-started/get-started-grafana-influxdb.md @@ -38,7 +38,7 @@ Windows users might need to make additional adjustments. Look for special instru You can have more than one InfluxDB data source defined in Grafana. -1. Follow the general instructions to [add a data source]({{< relref "../administration/data-source-management#add-a-data-source" >}}). +1. Follow the general instructions to [add a data source]({{< relref "../datasources#add-a-data-source" >}}). 1. Decide if you will use InfluxQL or Flux as your query language. - [Configure the data source]({{< relref "../datasources/influxdb#configure-the-data-source" >}}) for your chosen query language. Each query language has its own unique data source settings. diff --git a/docs/sources/introduction/grafana-enterprise.md b/docs/sources/introduction/grafana-enterprise.md index 2de825d6c5777..234cca9bcf1b1 100644 --- a/docs/sources/introduction/grafana-enterprise.md +++ b/docs/sources/introduction/grafana-enterprise.md @@ -21,6 +21,8 @@ To learn more about Grafana Enterprise, refer to [our product page](/enterprise) Many Grafana Enterprise features are also available in [Grafana Cloud](/docs/grafana-cloud) Free, Pro, and Advanced accounts. For details, refer to [the Grafana Cloud features table](/pricing/#featuresTable). +To migrate to Grafana Cloud, refer to [Migrate from Grafana Enterprise to Grafana Cloud](/docs/grafana-cloud/account-management/e2c-guide/). + ## Authentication Grafana Enterprise includes integrations with more ways to authenticate your users and enhanced authentication capabilities. @@ -85,6 +87,7 @@ With a Grafana Enterprise license, you also get access to premium data sources, - [MongoDB](/grafana/plugins/grafana-mongodb-datasource) - [New Relic](/grafana/plugins/grafana-newrelic-datasource) - [Oracle Database](/grafana/plugins/grafana-oracle-datasource) +- [PagerDuty](/grafana/plugins/grafana-pagerduty-datasource) - [Salesforce](/grafana/plugins/grafana-salesforce-datasource) - [SAP HANA®](/grafana/plugins/grafana-saphana-datasource) - [ServiceNow](/grafana/plugins/grafana-servicenow-datasource) diff --git a/docs/sources/old-alerting/_index.md b/docs/sources/old-alerting/_index.md deleted file mode 100644 index 12dd7a2687f18..0000000000000 --- a/docs/sources/old-alerting/_index.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -draft: true -labels: - products: - - enterprise - - oss -title: Legacy Grafana alerts -weight: 114 ---- - -# Legacy Grafana alerts - -Grafana Alerting is enabled by default for new OSS installations. For older installations, it is still an [opt-in]({{< relref "../alerting/migrating-alerts/opt-in" >}}) feature. - -{{% admonition type="note" %}} -Legacy dashboard alerts are deprecated and will be removed in Grafana 9. We encourage you to migrate to [Grafana Alerting]({{< relref "../alerting/migrating-alerts" >}}) for all existing installations. -{{% /admonition %}} - -Legacy dashboard alerts have two main components: - -- Alert rule - When the alert is triggered. Alert rules are defined by one or more conditions that are regularly evaluated by Grafana. -- Notification channel - How the alert is delivered. When the conditions of an alert rule are met, the Grafana notifies the channels configured for that alert. - -## Alert tasks - -You can perform the following tasks for alerts: - -- [Create an alert rule]({{< relref "./create-alerts" >}}) -- [View existing alert rules and their current state]({{< relref "./view-alerts" >}}) -- [Test alert rules and troubleshoot]({{< relref "./troubleshoot-alerts" >}}) -- [Add or edit an alert contact point]({{< relref "./notifications" >}}) - -{{< docs/shared lookup="alerts/grafana-managed-alerts.md" source="grafana" version="" >}} diff --git a/docs/sources/old-alerting/add-notification-template.md b/docs/sources/old-alerting/add-notification-template.md deleted file mode 100644 index f2cea0cac274e..0000000000000 --- a/docs/sources/old-alerting/add-notification-template.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -aliases: - - ../alerting/add-notification-template/ -draft: true -keywords: - - grafana - - documentation - - alerting - - alerts - - notification - - templating -labels: - products: - - enterprise - - oss -title: Alert notification templating -weight: 110 ---- - -# Alert notification templating - -You can provide detailed information to alert notification recipients by injecting alert query data into an alert notification. This topic explains how you can use alert query labels in alert notifications. - -You can use labels generated during an alerting query evaluation to create alert notification messages. For multiple unique values for the same label, the values are comma-separated. - -When an alert fires, the alerting data series indicates the violation. For resolved alerts, all data series are included in the resolved notification. - -This topic explains how you can use alert query labels in alert notifications. - -## Adding alert label data into your alert notification - -1. Navigate to the panel you want to add or edit an alert rule for. -1. Click on the panel title, and then click **Edit**. -1. On the Alert tab, click **Create Alert**. If an alert already exists for this panel, then you can edit the alert directly. -1. Refer to the alert query labels in the alert rule name and/or alert notification message field by using the `${Label}` syntax. -1. Click **Save** in the upper right corner to save the alert rule and the dashboard. - -![Alerting notification template](/static/img/docs/alerting/alert-notification-template-7-4.png) diff --git a/docs/sources/old-alerting/create-alerts.md b/docs/sources/old-alerting/create-alerts.md deleted file mode 100644 index f60f8afebf1fe..0000000000000 --- a/docs/sources/old-alerting/create-alerts.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -aliases: - - ../alerting/create-alerts/ -description: Configure alert rules -draft: true -keywords: - - grafana - - alerting - - guide - - rules -labels: - products: - - enterprise - - oss -title: Create alerts -weight: 200 ---- - -# Create alerts - -Grafana Alerting allows you to attach rules to your dashboard panels. When you save the dashboard, Grafana extracts the alert rules into a separate alert rule storage and schedules them for evaluation. - -![Alerting overview](/static/img/docs/alerting/drag_handles_gif.gif) - -In the Alert tab of the graph panel you can configure how often the alert rule should be evaluated and the conditions that need to be met for the alert to change state and trigger its [notifications]({{< relref "./notifications" >}}). - -Currently only the graph panel supports alert rules. - -## Add or edit an alert rule - -1. Navigate to the panel you want to add or edit an alert rule for, click the title, and then click **Edit**. -1. On the Alert tab, click **Create Alert**. If an alert already exists for this panel, then you can just edit the fields on the Alert tab. -1. Fill out the fields. Descriptions are listed below in [Alert rule fields](#alert-rule-fields). -1. When you have finished writing your rule, click **Save** in the upper right corner to save alert rule and the dashboard. -1. (Optional but recommended) Click **Test rule** to make sure the rule returns the results you expect. - -## Delete an alert - -To delete an alert, scroll to the bottom of the alert and then click **Delete**. - -## Alert rule fields - -This section describes the fields you fill out to create an alert. - -### Rule - -- **Name -** Enter a descriptive name. The name will be displayed in the Alert Rules list. This field supports [templating]({{< relref "./add-notification-template" >}}). -- **Evaluate every -** Specify how often the scheduler should evaluate the alert rule. This is referred to as the _evaluation interval_. -- **For -** Specify how long the query needs to violate the configured thresholds before the alert notification triggers. - -You can set a minimum evaluation interval in the `alerting.min_interval_seconds` configuration field, to set a minimum time between evaluations. Refer to [Configuration]({{< relref "../setup-grafana/configure-grafana#min_interval_seconds" >}}) for more information. - -{{% admonition type="caution" %}} -Do not use `For` with the `If no data or all values are null` setting set to `No Data`. The triggering of `No Data` will trigger instantly and not take `For` into consideration. This may also result in that an OK notification not being sent if alert transitions from `No Data -Pending -OK`. -{{% /admonition %}} - -If an alert rule has a configured `For` and the query violates the configured threshold, then it will first go from `OK` to `Pending`. Going from `OK` to `Pending` Grafana will not send any notifications. Once the alert rule has been firing for more than `For` duration, it will change to `Alerting` and send alert notifications. - -Typically, it's always a good idea to use this setting since it's often worse to get false positive than wait a few minutes before the alert notification triggers. Looking at the `Alert list` or `Alert list panels` you will be able to see alerts in pending state. - -Below you can see an example timeline of an alert using the `For` setting. At ~16:04 the alert state changes to `Pending` and after 4 minutes it changes to `Alerting` which is when alert notifications are sent. Once the series falls back to normal the alert rule goes back to `OK`. -{{< figure class="float-right" src="/static/img/docs/v54/alerting-for-dark-theme.png" caption="Alerting For" >}} - -{{< figure class="float-right" max-width="40%" src="/static/img/docs/v4/alerting_conditions.png" caption="Alerting Conditions" >}} - -### Conditions - -Currently the only condition type that exists is a `Query` condition that allows you to -specify a query letter, time range and an aggregation function. - -#### Query condition example - -```sql -avg() OF query(A, 15m, now) IS BELOW 14 -``` - -- `avg()` Controls how the values for **each** series should be reduced to a value that can be compared against the threshold. Click on the function to change it to another aggregation function. -- `query(A, 15m, now)` The letter defines what query to execute from the **Metrics** tab. The second two parameters define the time range, `15m, now` means 15 minutes ago to now. You can also do `10m, now-2m` to define a time range that will be 10 minutes ago to 2 minutes ago. This is useful if you want to ignore the last 2 minutes of data. -- `IS BELOW 14` Defines the type of threshold and the threshold value. You can click on `IS BELOW` to change the type of threshold. - -The query used in an alert rule cannot contain any template variables. Currently we only support `AND` and `OR` operators between conditions and they are executed serially. -For example, we have 3 conditions in the following order: -_condition:A(evaluates to: TRUE) OR condition:B(evaluates to: FALSE) AND condition:C(evaluates to: TRUE)_ -so the result will be calculated as ((TRUE OR FALSE) AND TRUE) = TRUE. - -We plan to add other condition types in the future, like `Other Alert`, where you can include the state of another alert in your conditions, and `Time Of Day`. - -#### Multiple Series - -If a query returns multiple series, then the aggregation function and threshold check will be evaluated for each series. What Grafana does not do currently is track alert rule state **per series**. This has implications that are detailed in the scenario below. - -- Alert condition with query that returns 2 series: **server1** and **server2** -- **server1** series causes the alert rule to fire and switch to state `Alerting` -- Notifications are sent out with message: _load peaking (server1)_ -- In a subsequent evaluation of the same alert rule, the **server2** series also causes the alert rule to fire -- No new notifications are sent as the alert rule is already in state `Alerting`. - -So, as you can see from the above scenario Grafana will not send out notifications when other series cause the alert to fire if the rule already is in state `Alerting`. To improve support for queries that return multiple series we plan to track state **per series** in a future release. - -> Starting with Grafana v5.3 you can configure reminders to be sent for triggered alerts. This will send additional notifications -> when an alert continues to fire. If other series (like server2 in the example above) also cause the alert rule to fire they will be included in the reminder notification. Depending on what notification channel you're using you may be able to take advantage of this feature for identifying new/existing series causing alert to fire. - -### No Data & Error Handling - -Below are conditions you can configure how the rule evaluation engine should handle queries that return no data or only null values. - -| No Data Option | Description | -| --------------- | ------------------------------------------------------------------------------------------ | -| No Data | Set alert rule state to `NoData` | -| Alerting | Set alert rule state to `Alerting` | -| Keep Last State | Keep the current alert rule state, whatever it is. | -| Ok | Not sure why you would want to send yourself an alert when things are okay, but you could. | - -### Execution errors or timeouts - -Tell Grafana how to handle execution or timeout errors. - -| Error or timeout option | Description | -| ----------------------- | -------------------------------------------------- | -| Alerting | Set alert rule state to `Alerting` | -| Keep Last State | Keep the current alert rule state, whatever it is. | - -If you have an unreliable time series store from which queries sometime timeout or fail randomly you can set this option to `Keep Last State` in order to basically ignore them. - -## Notifications - -In alert tab you can also specify alert rule notifications along with a detailed message about the alert rule. The message can contain anything, information about how you might solve the issue, link to runbook, and so on. - -The actual notifications are configured and shared between multiple alerts. Read -[Alert notifications]({{< relref "./notifications" >}}) for information on how to configure and set up notifications. - -- **Send to -** Select an alert notification channel if you have one set up. -- **Message -** Enter a text message to be sent on the notification channel. Some alert notifiers support transforming the text to HTML or other rich formats. This field supports [templating]({{< relref "./add-notification-template" >}}). -- **Tags -** Specify a list of tags (key/value) to be included in the notification. It is only supported by [some notifiers]({{< relref "./notifications#list-of-supported-notifiers" >}}). - -## Alert state history and annotations - -Alert state changes are recorded in the internal annotation table in Grafana's database. The state changes are visualized as annotations in the alert rule's graph panel. You can also go into the `State history` submenu in the alert tab to view and clear state history. diff --git a/docs/sources/old-alerting/notifications.md b/docs/sources/old-alerting/notifications.md deleted file mode 100644 index c450f8cbdb002..0000000000000 --- a/docs/sources/old-alerting/notifications.md +++ /dev/null @@ -1,302 +0,0 @@ ---- -aliases: - - ../alerting/notifications/ -description: Alerting notifications guide -draft: true -keywords: - - Grafana - - alerting - - guide - - notifications -labels: - products: - - enterprise - - oss -title: Alert notifications -weight: 100 ---- - -# Alert notifications - -When an alert changes state, it sends out notifications. Each alert rule can have -multiple notifications. In order to add a notification to an alert rule you first need -to add and configure a `notification` channel (can be email, PagerDuty, or other integration). - -This is done from the Notification channels page. - -{{% admonition type="note" %}} -Alerting is only available in Grafana v4.0 and above. -{{% /admonition %}} - -## Add a notification channel - -1. In the Grafana side bar, hover your cursor over the **Alerting** (bell) icon and then click **Notification channels**. -1. Click **Add channel**. -1. Fill out the fields or select options described below. - -## New notification channel fields - -### Default (send on all alerts) - -- **Name -** Enter a name for this channel. It will be displayed when users add notifications to alert rules. -- **Type -** Select the channel type. Refer to the [List of supported notifiers](#list-of-supported-notifiers) for details. -- **Default (send on all alerts) -** When selected, this option sends a notification on this channel for all alert rules. -- **Include Image -** See [Enable images in notifications](#enable-images-in-notifications-external-image-store) for details. -- **Disable Resolve Message -** When selected, this option disables the resolve message [OK] that is sent when the alerting state returns to false. -- **Send reminders -** When this option is checked additional notifications (reminders) will be sent for triggered alerts. You can specify how often reminders should be sent using number of seconds (s), minutes (m) or hours (h), for example `30s`, `3m`, `5m` or `1h`. - -**Important:** Alert reminders are sent after rules are evaluated. Therefore a reminder can never be sent more frequently than a configured alert rule evaluation interval. - -These examples show how often and when reminders are sent for a triggered alert. - -| Alert rule evaluation interval | Send reminders every | Reminder sent every (after last alert notification) | -| ------------------------------ | -------------------- | --------------------------------------------------- | -| `30s` | `15s` | ~30 seconds | -| `1m` | `5m` | ~5 minutes | -| `5m` | `15m` | ~15 minutes | -| `6m` | `20m` | ~24 minutes | -| `1h` | `15m` | ~1 hour | -| `1h` | `2h` | ~2 hours | - -
- -## List of supported notifiers - -| Name | Type | Supports images | Supports alert rule tags | -| --------------------------------------------- | ------------------------- | ------------------ | ------------------------ | -| [DingDing](#dingdingdingtalk) | `dingding` | yes, external only | no | -| [Discord](#discord) | `discord` | yes | no | -| [Email](#email) | `email` | yes | no | -| [Google Hangouts Chat](#google-hangouts-chat) | `googlechat` | yes, external only | no | -| Hipchat | `hipchat` | yes, external only | no | -| [Kafka](#kafka) | `kafka` | yes, external only | no | -| Line | `line` | yes, external only | no | -| Microsoft Teams | `teams` | yes, external only | no | -| [Opsgenie](#opsgenie) | `opsgenie` | yes, external only | yes | -| [Pagerduty](#pagerduty) | `pagerduty` | yes, external only | yes | -| Prometheus Alertmanager | `prometheus-alertmanager` | yes, external only | yes | -| [Pushover](#pushover) | `pushover` | yes | no | -| Sensu | `sensu` | yes, external only | no | -| [Sensu Go](#sensu-go) | `sensugo` | yes, external only | no | -| [Slack](#slack) | `slack` | yes | no | -| Telegram | `telegram` | yes | no | -| Threema | `threema` | yes, external only | no | -| VictorOps | `victorops` | yes, external only | yes | -| [Webhook](#webhook) | `webhook` | yes, external only | yes | - -### Email - -To enable email notifications you have to set up [SMTP settings]({{< relref "../setup-grafana/configure-grafana#smtp" >}}) -in the Grafana config. Email notifications will upload an image of the alert graph to an -external image destination if available or fallback to attaching the image to the email. -Be aware that if you use the `local` image storage email servers and clients might not be -able to access the image. - -{{% admonition type="note" %}} -Template variables are not supported in email alerts. -{{% /admonition %}} - -| Setting | Description | -| ------------ | -------------------------------------------------------------------------------------------- | -| Single email | Send a single email to all recipients. Disabled per default. | -| Addresses | Email addresses to recipients. You can enter multiple email addresses using a ";" separator. | - -### Slack - -{{< figure class="float-right" max-width="40%" src="/static/img/docs/v4/slack_notification.png" caption="Alerting Slack Notification" >}} - -To set up Slack, you need to configure an incoming Slack webhook URL. You can follow -[Sending messages using Incoming Webhooks](https://api.slack.com/incoming-webhooks) on how to do that. If you want to include screenshots of the -firing alerts in the Slack messages you have to configure either the [external image destination](#enable-images-in-notifications-external-image-store) -in Grafana or a bot integration via Slack Apps. [Follow Slack's guide to set up a bot integration](https://api.slack.com/bot-users) and use the token -provided, which starts with "xoxb". - -| Setting | Description | -| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Url | Slack incoming webhook URL, or eventually the [chat.postMessage](https://api.slack.com/methods/chat.postMessage) Slack API endpoint. | -| Username | Set the username for the bot's message. | -| Recipient | Allows you to override the Slack recipient. You must either provide a channel Slack ID, a user Slack ID, a username reference (@<user>, all lowercase, no whitespace), or a channel reference (#<channel>, all lowercase, no whitespace). If you use the `chat.postMessage` Slack API endpoint, this is required. | -| Icon emoji | Provide an emoji to use as the icon for the bot's message. Ex :smile: | -| Icon URL | Provide a URL to an image to use as the icon for the bot's message. | -| Mention Users | Optionally mention one or more users in the Slack notification sent by Grafana. You have to refer to users, comma-separated, via their corresponding Slack IDs (which you can find by clicking the overflow button on each user's Slack profile). | -| Mention Groups | Optionally mention one or more groups in the Slack notification sent by Grafana. You have to refer to groups, comma-separated, via their corresponding Slack IDs (which you can get from each group's Slack profile URL). | -| Mention Channel | Optionally mention either all channel members or just active ones. | -| Token | If provided, Grafana will upload the generated image via Slack's file.upload API method, not the external image destination. If you use the `chat.postMessage` Slack API endpoint, this is required. | - -If you are using the token for a slack bot, then you have to invite the bot to the channel you want to send notifications and add the channel to the recipient field. - -### Opsgenie - -To setup Opsgenie you will need an API Key and the Alert API Url. These can be obtained by configuring a new [Grafana Integration](https://docs.opsgenie.com/docs/grafana-integration). - -| Setting | Description | -| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Alert API URL | The API URL for your Opsgenie instance. This will normally be either `https://api.opsgenie.com` or, for EU customers, `https://api.eu.opsgenie.com`. | -| API Key | The API Key as provided by Opsgenie for your configured Grafana integration. | -| Override priority | Configures the alert priority using the `og_priority` tag. The `og_priority` tag must have one of the following values: `P1`, `P2`, `P3`, `P4`, or `P5`. Default is `False`. | -| Send notification tags as | Specify how you would like [Notification Tags]({{< relref "./create-alerts#notifications" >}}) delivered to Opsgenie. They can be delivered as `Tags`, `Extra Properties` or both. Default is Tags. See note below for more information. | - -{{% admonition type="note" %}} -When notification tags are sent as `Tags` they are concatenated into a string with a `key:value` format. If you prefer to receive the notifications tags as key/values under Extra Properties in Opsgenie then change the `Send notification tags as` to either `Extra Properties` or `Tags & Extra Properties`. -{{% /admonition %}} - -### PagerDuty - -To set up PagerDuty, all you have to do is to provide an integration key. - -| Setting | Description | -| ---------------------- | ----------------------------------------------------------------------------------------------- | -| Integration Key | Integration key for PagerDuty. | -| Severity | Level for dynamic notifications, default is `critical` (1) | -| Auto resolve incidents | Resolve incidents in PagerDuty once the alert goes back to ok | -| Message in details | Removes the Alert message from the PD summary field and puts it into custom details instead (2) | - -> **Note:** The tags `Severity`, `Class`, `Group`, `dedup_key`, and `Component` have special meaning in the [Pagerduty Common Event Format - PD-CEF](https://support.pagerduty.com/docs/pd-cef). If an alert panel defines these tag keys, then they are transposed to the root of the event sent to Pagerduty. This means they will be available within the Pagerduty UI and Filtering tools. A Severity tag set on an alert overrides the global Severity set on the notification channel if it's a valid level. - -> Using Message In Details will change the structure of the `custom_details` field in the PagerDuty Event. -> This might break custom event rules in your PagerDuty rules if you rely on the fields in `payload.custom_details`. -> Move any existing rules using `custom_details.myMetric` to `custom_details.queries.myMetric`. -> This behavior will become the default in a future version of Grafana. - -> **Note:** The `dedup_key` tag overrides the Grafana-generated `dedup_key` with a custom key. - -> **Note:** The `state` tag overrides the current alert state inside the `custom_details` payload. - -> **Note:** Grafana uses the `Events API V2` integration. This can be configured for each service. - -### VictorOps - -To configure VictorOps, provide the URL from the Grafana Integration and substitute `$routing_key` with a valid key. - -> **Note:** The tag `Severity` has special meaning in the [VictorOps Incident Fields](https://help.victorops.com/knowledge-base/incident-fields-glossary/). If an alert panel defines this key, then it replaces the `message_type` in the root of the event sent to VictorOps. - -### Pushover - -To set up Pushover, you must provide a user key and an API token. Refer to [What is Pushover and how do I use it](https://support.pushover.net/i7-what-is-pushover-and-how-do-i-use-it) for instructions on how to generate them. - -| Setting | Description | -| -------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| API Token | Application token | -| User key(s) | A comma-separated list of user keys | -| Device(s) | A comma-separated list of devices | -| Priority | The priority alerting nottifications are sent | -| OK priority | The priority OK notifications are sent; if not set, then OK notifications are sent with the priority set for alerting notifications | -| Retry | How often (in seconds) the Pushover servers send the same notification to the user. (minimum 30 seconds) | -| Expire | How many seconds your notification will continue to be retried for (maximum 86400 seconds) | -| Alerting sound | The sound for alerting notifications | -| OK sound | The sound for OK notifications | - -### Webhook - -The webhook notification is a simple way to send information about a state change over HTTP to a custom endpoint. -Using this notification you could integrate Grafana into a system of your choosing. - -Example json body: - -```json -{ - "dashboardId": 1, - "evalMatches": [ - { - "value": 1, - "metric": "Count", - "tags": {} - } - ], - "imageUrl": "https://grafana.com/static/assets/img/blog/mixed_styles.png", - "message": "Notification Message", - "orgId": 1, - "panelId": 2, - "ruleId": 1, - "ruleName": "Panel Title alert", - "ruleUrl": "http://localhost:3000/d/hZ7BuVbWz/test-dashboard?fullscreen\u0026edit\u0026tab=alert\u0026panelId=2\u0026orgId=1", - "state": "alerting", - "tags": { - "tag name": "tag value" - }, - "title": "[Alerting] Panel Title alert" -} -``` - -- **state** - The possible values for alert state are: `ok`, `paused`, `alerting`, `pending`, `no_data`. - -### DingDing/DingTalk - -DingTalk supports the following "message type": `text`, `link` and `markdown`. Only the `link` message type is supported. Refer to the [configuration instructions](https://developers.dingtalk.com/document/app/custom-robot-access) in Chinese language. - -In DingTalk PC Client: - -1. Click "more" icon on upper right of the panel. - -2. Click "Robot Manage" item in the pop menu, there will be a new panel call "Robot Manage". - -3. In the "Robot Manage" panel, select "customized: customized robot with Webhook". - -4. In the next new panel named "robot detail", click "Add" button. - -5. In "Add Robot" panel, input a nickname for the robot and select a "message group" which the robot will join in. click "next". - -6. There will be a Webhook URL in the panel, looks like this: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxx. Copy this URL to the Grafana DingTalk setting page and then click "finish". - -### Discord - -To set up Discord, you must create a Discord channel webhook. For instructions on how to create the channel, refer to -[Intro to Webhooks](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks). - -| Setting | Description | -| ------------------------------ | ----------------------------------------------------------------------------------------------------- | -| Webhook URL | Discord webhook URL. | -| Message Content | Mention a group using @ or a user using <@ID> when notifying in a channel. | -| Avatar URL | Optionally, provide a URL to an image to use as the avatar for the bot's message. | -| Use Discord's Webhook Username | Use the username configured in Discord's webhook settings. Otherwise, the username will be 'Grafana.' | - -Alternately, use the [Slack](#slack) notifier by appending `/slack` to a Discord webhook URL. - -### Kafka - -Notifications can be sent to a Kafka topic from Grafana using the [Kafka REST Proxy](https://docs.confluent.io/1.0/kafka-rest/docs/index.html). -There are a couple of configuration options which need to be set up in Grafana UI under Kafka Settings: - -1. Kafka REST Proxy endpoint. - -1. Kafka Topic. - -Once these two properties are set, you can send the alerts to Kafka for further processing or throttling. - -### Google Hangouts Chat - -Notifications can be sent by setting up an incoming webhook in Google Hangouts chat. For more information about configuring a webhook, refer to [webhooks](https://developers.google.com/hangouts/chat/how-tos/webhooks). - -### Prometheus Alertmanager - -Alertmanager handles alerts sent by client applications such as Prometheus server or Grafana. It takes care of deduplicating, grouping, and routing them to the correct receiver. Grafana notifications can be sent to Alertmanager via a simple incoming webhook. Refer to the official [Prometheus Alertmanager documentation](https://prometheus.io/docs/alerting/alertmanager) for configuration information. - -{{% admonition type="caution" %}} -In case of a high-availability setup, do not load balance traffic between Grafana and Alertmanagers to keep coherence between all your Alertmanager instances. Instead, point Grafana to a list of all Alertmanagers, by listing their URLs comma-separated in the notification channel configuration. -{{% /admonition %}} - -### Sensu Go - -Grafana alert notifications can be sent to [Sensu](https://sensu.io) Go as events via the API. This operation requires an API key. For information on creating this key, refer to [Sensu Go documentation](https://docs.sensu.io/sensu-go/latest/operations/control-access/use-apikeys/#api-key-authentication). - -## Enable images in notifications {#external-image-store} - -Grafana can render the panel associated with the alert rule as a PNG image and include that in the notification. Read more about the requirements and how to configure -[image rendering]({{< relref "../setup-grafana/image-rendering" >}}). - -You must configure an [external image storage provider]({{< relref "../setup-grafana/configure-grafana#external_image_storage" >}}) in order to receive images in alert notifications. If your notification channel requires that the image be publicly accessible (e.g. Slack, PagerDuty), configure a provider which uploads the image to a remote image store like Amazon S3, Webdav, Google Cloud Storage, or Azure Blob Storage. Otherwise, the local provider can be used to serve the image directly from Grafana. - -Notification services which need public image access are marked as 'external only'. - -## Configure the link back to Grafana from alert notifications - -All alert notifications contain a link back to the triggered alert in the Grafana instance. -This URL is based on the [domain]({{< relref "../setup-grafana/configure-grafana#domain" >}}) setting in Grafana. - -## Notification templating - -{{% admonition type="note" %}} -Alert notification templating is only available in Grafana v7.4 and above. -{{% /admonition %}} - -The alert notification template feature allows you to take the [label]({{< relref "../fundamentals/timeseries-dimensions#labels" >}}) value from an alert query and [inject that into alert notifications]({{< relref "./add-notification-template" >}}). diff --git a/docs/sources/old-alerting/pause-an-alert-rule.md b/docs/sources/old-alerting/pause-an-alert-rule.md deleted file mode 100644 index 8cc675f7d6689..0000000000000 --- a/docs/sources/old-alerting/pause-an-alert-rule.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -aliases: - - ../alerting/pause-an-alert-rule/ -description: Pause an existing alert rule -draft: true -keywords: - - grafana - - alerting - - guide - - rules - - view -labels: - products: - - enterprise - - oss -title: Pause an alert rule -weight: 400 ---- - -# Pause an alert rule - -Pausing the evaluation of an alert rule can sometimes be useful. For example, during a maintenance window, pausing alert rules can avoid triggering a flood of alerts. - -1. In the Grafana side bar, hover your cursor over the Alerting (bell) icon and then click **Alert Rules**. All configured alert rules are listed, along with their current state. -1. Find your alert in the list, and click the **Pause** icon on the right. The **Pause** icon turns into a **Play** icon. -1. Click the **Play** icon to resume evaluation of your alert. diff --git a/docs/sources/old-alerting/troubleshoot-alerts.md b/docs/sources/old-alerting/troubleshoot-alerts.md deleted file mode 100644 index 053bc34690ffa..0000000000000 --- a/docs/sources/old-alerting/troubleshoot-alerts.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -aliases: - - ../alerting/troubleshoot-alerts/ -description: Troubleshoot alert rules -draft: true -keywords: - - grafana - - alerting - - guide - - rules - - troubleshoot -labels: - products: - - enterprise - - oss -title: Troubleshoot alerts -weight: 500 ---- - -# Troubleshoot alerts - -If alerts are not behaving as you expect, here are some steps you can take to troubleshoot and figure out what is going wrong. - -![Test Rule](/static/img/docs/v4/alert_test_rule.png) - -The first level of troubleshooting you can do is click **Test Rule**. You will get result back that you can expand to the point where you can see the raw data that was returned from your query. - -Further troubleshooting can also be done by inspecting the grafana-server log. If it's not an error or for some reason the log does not say anything you can enable debug logging for some relevant components. This is done in Grafana's ini config file. - -Example showing loggers that could be relevant when troubleshooting alerting. - -```ini -[log] -filters = alerting.scheduler:debug \ - alerting.engine:debug \ - alerting.resultHandler:debug \ - alerting.evalHandler:debug \ - alerting.evalContext:debug \ - alerting.extractor:debug \ - alerting.notifier:debug \ - alerting.notifier.slack:debug \ - alerting.notifier.pagerduty:debug \ - alerting.notifier.email:debug \ - alerting.notifier.webhook:debug \ - tsdb.graphite:debug \ - tsdb.prometheus:debug \ - tsdb.opentsdb:debug \ - tsdb.influxdb:debug \ - tsdb.elasticsearch:debug \ - tsdb.elasticsearch.client:debug \ -``` - -If you want to log raw query sent to your TSDB and raw response in log you also have to set grafana.ini option `app_mode` to `development`. diff --git a/docs/sources/old-alerting/view-alerts.md b/docs/sources/old-alerting/view-alerts.md deleted file mode 100644 index b927715685b83..0000000000000 --- a/docs/sources/old-alerting/view-alerts.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -aliases: - - ../alerting/view-alerts/ -description: View existing alert rules -draft: true -keywords: - - grafana - - alerting - - guide - - rules - - view -labels: - products: - - enterprise - - oss -menuTitle: View alerts -title: View existing alert rules -weight: 400 ---- - -# View existing alert rules - -Grafana stores individual alert rules in the panels where they are defined, but you can also view a list of all existing alert rules and their current state. - -In the Grafana side bar, hover your cursor over the Alerting (bell) icon and then click **Alert Rules**. All configured alert rules are listed, along with their current state. - -You can do several things while viewing alerts. - -- **Filter alerts by name -** Type an alert name in the **Search alerts** field. -- **Filter alerts by state -** In **States**, select which alert states you want to see. All others will be hidden. -- **Pause or resume an alert -** Click the **Pause** or **Play** icon next to the alert to pause or resume evaluation. See [Pause an alert rule]({{< relref "./pause-an-alert-rule" >}}) for more information. -- **Access alert rule settings -** Click the alert name or the **Edit alert rule** (gear) icon. Grafana opens the Alert tab of the panel where the alert rule is defined. This is helpful when an alert is firing but you don't know which panel it is defined in. diff --git a/docs/sources/panels-visualizations/_index.md b/docs/sources/panels-visualizations/_index.md index af1f7843323ea..dbb1f5d71c732 100644 --- a/docs/sources/panels-visualizations/_index.md +++ b/docs/sources/panels-visualizations/_index.md @@ -30,8 +30,13 @@ Panels can be dragged, dropped, and resized to rearrange them on the dashboard. Before you add a panel, ensure that you have configured a data source. -- For more information about adding and managing data sources as an administrator, refer to [Data source management][]. -- For details about using specific data sources, refer to [Data sources][]. +- For details about using data sources, refer to [Data sources][]. + +- For more information about managing data sources as an administrator, refer to [Data source management][]. + + {{% admonition type="note" %}} + [Data source management](https://grafana.com/docs/grafana//administration/data-source-management/) is only available in [Grafana Enterprise](https://grafana.com/docs/grafana//introduction/grafana-enterprise/) and [Grafana Cloud](https://grafana.com/docs/grafana-cloud/). + {{% /admonition %}} This section includes the following sub topics: diff --git a/docs/sources/panels-visualizations/configure-data-links/index.md b/docs/sources/panels-visualizations/configure-data-links/index.md index 683e1a8a9de3d..9996e398e38d2 100644 --- a/docs/sources/panels-visualizations/configure-data-links/index.md +++ b/docs/sources/panels-visualizations/configure-data-links/index.md @@ -26,13 +26,37 @@ weight: 80 # Configure data links -You can use data link variables or data links to create links between panels. +Data links allow you to provide more granular context to your links. You can create links that include the series name or even the value under the cursor. For example, if your visualization shows four servers, you can add a data link to one or two of them. You can also link panels using data links. + +The link itself is accessible in different ways depending on the visualization. For the time series visualization you need to click a data point or line: + +![Time series visualization with a data link displayed](/media/docs/grafana/panels-visualizations/screenshot-time-series-data-link-v10.3.png) + +For visualizations like stat, gauge, or bar gauge you can click anywhere on the visualization to open the context menu: + +![Stat visualization with a data link displayed](/media/docs/grafana/panels-visualizations/screenshot-stat-data-link-v10.3.png) + +If there's only one data link in the visualization, clicking anywhere on the visualization opens the link rather than the context menu. + +## Supported visualizations + +You can configure data links for the following visualizations: + +| | | | +| -------------------------- | ---------------------- | -------------------------------- | +| [Bar chart][bar chart] | [Geomap][geomap] | [State timeline][state timeline] | +| [Bar gauge][bar gauge] | [Heatmap][heatmap] | [Status history][status history] | +| [Candlestick][candlestick] | [Histogram][histogram] | [Table][table] | +| [Canvas][canvas] | [Pie chart][pie chart] | [Time series][time series] | +| [Gauge][gauge] | [Stat][stat] | [Trend][trend] | + + ## Data link variables -You can use variables in data links to refer to series fields, labels, and values. For more information about data links, refer to [Data links](#data-links). +Variables in data links let you send people to a detailed dashboard with preserved data filters. For example, you could use variables to specify a label, time range, series, or variable selection. -To see a list of available variables, type `$` in the data link **URL** field to see a list of variables that you can use. +To see a list of available variables, enter `$` in the data link **URL** field. {{% admonition type="note" %}} These variables changed in 6.4 so if you have an older version of Grafana, then use the version picker to select docs for an older version of Grafana. @@ -40,50 +64,65 @@ These variables changed in 6.4 so if you have an older version of Grafana, then Azure Monitor, [CloudWatch][], and [Google Cloud Monitoring][] have pre-configured data links called _deep links_. -You can also use template variables in your data links URLs, refer to [Templates and variables][] for more information on template variables. +You can also use template variables in your data links URLs. For more information, refer to [Templates and variables][]. -## Time range panel variables +### Time range panel variables -These variables allow you to include the current time range in the data link URL. +These variables allow you to include the current time range in the data link URL: -- `__url_time_range` - current dashboard's time range (i.e. `?from=now-6h&to=now`) -- `$__from and $__to` - For more information, refer to [Global variables][]. +| Variable | Description | +| ------------------ | ------------------------------------------------------------------- | +| `__url_time_range` | Current dashboard's time range (for example, `?from=now-6h&to=now`) | +| `__from` | For more information, refer to [Global variables][]. | +| `__to` | For more information, refer to [Global variables][]. | -## Series variables +When you create data links using time range variables like `__url_time_range` in the URL, you have to form the query parameter syntax yourself; that is, you must format the URL by appending query parameters using the question mark (`?`) and ampersand (`&`) syntax. These characters aren't automatically generated. + +### Series variables Series-specific variables are available under `__series` namespace: -- `__series.name` - series name to the URL +| Variable | Description | +| --------------- | ---------------------- | +| `__series.name` | Series name to the URL | -## Field variables +### Field variables Field-specific variables are available under `__field` namespace: -- `__field.name` - the name of the field -- `__field.labels.
diff --git a/packages/grafana-flamegraph/src/FlameGraph/FlameGraphContextMenu.tsx b/packages/grafana-flamegraph/src/FlameGraph/FlameGraphContextMenu.tsx index 3a370f5dc86e5..c84d4810f420c 100644 --- a/packages/grafana-flamegraph/src/FlameGraph/FlameGraphContextMenu.tsx +++ b/packages/grafana-flamegraph/src/FlameGraph/FlameGraphContextMenu.tsx @@ -1,12 +1,26 @@ import React from 'react'; -import { MenuItem, MenuGroup, ContextMenu } from '@grafana/ui'; +import { DataFrame } from '@grafana/data'; +import { MenuItem, MenuGroup, ContextMenu, IconName } from '@grafana/ui'; -import { ClickedItemData } from '../types'; +import { ClickedItemData, SelectedView } from '../types'; -import { CollapseConfig } from './dataTransform'; +import { CollapseConfig, FlameGraphDataContainer } from './dataTransform'; + +export type GetExtraContextMenuButtonsFunction = ( + clickedItemData: ClickedItemData, + data: DataFrame, + state: { selectedView: SelectedView; isDiff: boolean; search: string; collapseConfig?: CollapseConfig } +) => ExtraContextMenuButton[]; + +export type ExtraContextMenuButton = { + label: string; + icon: IconName; + onClick: () => void; +}; type Props = { + data: FlameGraphDataContainer; itemData: ClickedItemData; onMenuItemClick: () => void; onItemFocus: () => void; @@ -15,13 +29,17 @@ type Props = { onCollapseGroup: () => void; onExpandAllGroups: () => void; onCollapseAllGroups: () => void; + getExtraContextMenuButtons?: GetExtraContextMenuButtonsFunction; collapseConfig?: CollapseConfig; collapsing?: boolean; allGroupsCollapsed?: boolean; allGroupsExpanded?: boolean; + selectedView: SelectedView; + search: string; }; const FlameGraphContextMenu = ({ + data, itemData, onMenuItemClick, onItemFocus, @@ -31,11 +49,21 @@ const FlameGraphContextMenu = ({ onCollapseGroup, onExpandAllGroups, onCollapseAllGroups, + getExtraContextMenuButtons, collapsing, allGroupsExpanded, allGroupsCollapsed, + selectedView, + search, }: Props) => { function renderItems() { + const extraButtons = + getExtraContextMenuButtons?.(itemData, data.data, { + selectedView, + isDiff: data.isDiffFlamegraph(), + search, + collapseConfig, + }) || []; return ( <> - + {extraButtons.map(({ label, icon, onClick }) => { + return onClick()} key={label} />; + })} {collapsing && ( {collapseConfig ? ( diff --git a/packages/grafana-flamegraph/src/FlameGraph/dataTransform.ts b/packages/grafana-flamegraph/src/FlameGraph/dataTransform.ts index 1fb8461947643..142500c926e57 100644 --- a/packages/grafana-flamegraph/src/FlameGraph/dataTransform.ts +++ b/packages/grafana-flamegraph/src/FlameGraph/dataTransform.ts @@ -272,7 +272,7 @@ export class FlameGraphDataContainer { } isDiffFlamegraph() { - return this.valueRightField && this.selfRightField; + return Boolean(this.valueRightField && this.selfRightField); } getLabel(index: number) { diff --git a/packages/grafana-flamegraph/src/FlameGraph/rendering.ts b/packages/grafana-flamegraph/src/FlameGraph/rendering.ts index 7e28eba707946..96b25b93abb0d 100644 --- a/packages/grafana-flamegraph/src/FlameGraph/rendering.ts +++ b/packages/grafana-flamegraph/src/FlameGraph/rendering.ts @@ -358,8 +358,8 @@ function useColorFunction( (colorScheme === ColorSchemeDiff.Default || colorScheme === ColorSchemeDiff.DiffColorBlind) ? getBarColorByDiff(item.value, item.valueRight!, totalTicks, totalTicksRight!, colorScheme) : colorScheme === ColorScheme.ValueBased - ? getBarColorByValue(item.value, totalTicks, rangeMin, rangeMax) - : getBarColorByPackage(label, theme); + ? getBarColorByValue(item.value, totalTicks, rangeMin, rangeMax) + : getBarColorByPackage(label, theme); if (matchedLabels) { // Means we are searching, we use color for matches and gray the rest diff --git a/packages/grafana-flamegraph/src/FlameGraphContainer.tsx b/packages/grafana-flamegraph/src/FlameGraphContainer.tsx index df8435c0dadfa..c4962e5b181ec 100644 --- a/packages/grafana-flamegraph/src/FlameGraphContainer.tsx +++ b/packages/grafana-flamegraph/src/FlameGraphContainer.tsx @@ -7,6 +7,7 @@ import { DataFrame, GrafanaTheme2 } from '@grafana/data'; import { ThemeContext } from '@grafana/ui'; import FlameGraph from './FlameGraph/FlameGraph'; +import { GetExtraContextMenuButtonsFunction } from './FlameGraph/FlameGraphContextMenu'; import { FlameGraphDataContainer } from './FlameGraph/dataTransform'; import FlameGraphHeader from './FlameGraphHeader'; import FlameGraphTopTableContainer from './TopTable/FlameGraphTopTableContainer'; @@ -52,6 +53,11 @@ export type Props = { */ extraHeaderElements?: React.ReactNode; + /** + * Extra buttons that will be shown in the context menu when user clicks on a Node. + */ + getExtraContextMenuButtons?: GetExtraContextMenuButtonsFunction; + /** * If true the flamegraph will be rendered on top of the table. */ @@ -80,6 +86,7 @@ const FlameGraphContainer = ({ vertical, showFlameGraphOnly, disableCollapsing, + getExtraContextMenuButtons, }: Props) => { const [focusedItemData, setFocusedItemData] = useState(); @@ -169,6 +176,9 @@ const FlameGraphContainer = ({ colorScheme={colorScheme} showFlameGraphOnly={showFlameGraphOnly} collapsing={!disableCollapsing} + getExtraContextMenuButtons={getExtraContextMenuButtons} + selectedView={selectedView} + search={search} /> ); @@ -238,7 +248,7 @@ const FlameGraphContainer = ({ stickyHeader={Boolean(stickyHeader)} extraHeaderElements={extraHeaderElements} vertical={vertical} - isDiffMode={Boolean(dataContainer.isDiffFlamegraph())} + isDiffMode={dataContainer.isDiffFlamegraph()} /> )} diff --git a/packages/grafana-flamegraph/src/types.ts b/packages/grafana-flamegraph/src/types.ts index c4616a2684742..aa8a84de8822c 100644 --- a/packages/grafana-flamegraph/src/types.ts +++ b/packages/grafana-flamegraph/src/types.ts @@ -1,5 +1,9 @@ import { LevelItem } from './FlameGraph/dataTransform'; +export { type FlameGraphDataContainer } from './FlameGraph/dataTransform'; + +export { type ExtraContextMenuButton } from './FlameGraph/FlameGraphContextMenu'; + export type ClickedItemData = { posX: number; posY: number; diff --git a/packages/grafana-o11y-ds-frontend/package.json b/packages/grafana-o11y-ds-frontend/package.json new file mode 100644 index 0000000000000..5a5a8dee56b82 --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/package.json @@ -0,0 +1,50 @@ +{ + "author": "Grafana Labs", + "license": "AGPL-3.0-only", + "name": "@grafana/o11y-ds-frontend", + "private": true, + "version": "11.0.0-pre", + "description": "Library to manage traces in Grafana.", + "sideEffects": false, + "repository": { + "type": "git", + "url": "http://github.com/grafana/grafana.git", + "directory": "packages/grafana-o11y-ds-frontend" + }, + "main": "src/index.ts", + "types": "src/index.ts", + "scripts": { + "typecheck": "tsc --emitDeclarationOnly false --noEmit" + }, + "dependencies": { + "@emotion/css": "11.11.2", + "@grafana/data": "11.0.0-pre", + "@grafana/e2e-selectors": "11.0.0-pre", + "@grafana/experimental": "1.7.10", + "@grafana/runtime": "11.0.0-pre", + "@grafana/schema": "11.0.0-pre", + "@grafana/ui": "11.0.0-pre", + "react-use": "17.5.0", + "rxjs": "7.8.1", + "tslib": "2.6.2" + }, + "devDependencies": { + "@grafana/tsconfig": "^1.3.0-rc1", + "@testing-library/jest-dom": "^6.1.2", + "@testing-library/react": "14.2.1", + "@testing-library/user-event": "14.5.2", + "@types/jest": "^29.5.4", + "@types/react": "18.2.66", + "@types/systemjs": "6.13.5", + "@types/testing-library__jest-dom": "5.14.9", + "jest": "^29.6.4", + "react": "18.2.0", + "ts-jest": "29.1.2", + "ts-node": "10.9.2", + "typescript": "5.3.3" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } +} diff --git a/public/app/core/components/IntervalInput/IntervalInput.test.tsx b/packages/grafana-o11y-ds-frontend/src/IntervalInput/IntervalInput.test.tsx similarity index 100% rename from public/app/core/components/IntervalInput/IntervalInput.test.tsx rename to packages/grafana-o11y-ds-frontend/src/IntervalInput/IntervalInput.test.tsx diff --git a/public/app/core/components/IntervalInput/IntervalInput.tsx b/packages/grafana-o11y-ds-frontend/src/IntervalInput/IntervalInput.tsx similarity index 100% rename from public/app/core/components/IntervalInput/IntervalInput.tsx rename to packages/grafana-o11y-ds-frontend/src/IntervalInput/IntervalInput.tsx diff --git a/public/app/core/components/IntervalInput/validation.test.ts b/packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.test.ts similarity index 100% rename from public/app/core/components/IntervalInput/validation.test.ts rename to packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.test.ts diff --git a/public/app/core/components/IntervalInput/validation.ts b/packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.ts similarity index 100% rename from public/app/core/components/IntervalInput/validation.ts rename to packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.ts diff --git a/packages/grafana-o11y-ds-frontend/src/LocalStorageValueProvider/LocalStorageValueProvider.tsx b/packages/grafana-o11y-ds-frontend/src/LocalStorageValueProvider/LocalStorageValueProvider.tsx new file mode 100644 index 0000000000000..b81935d433740 --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/LocalStorageValueProvider/LocalStorageValueProvider.tsx @@ -0,0 +1,49 @@ +import React, { useEffect, useState } from 'react'; + +import { store } from '../store'; + +export interface Props { + storageKey: string; + defaultValue: T; + children: (value: T, onSaveToStore: (value: T) => void, onDeleteFromStore: () => void) => React.ReactNode; +} + +export const LocalStorageValueProvider = (props: Props) => { + const { children, storageKey, defaultValue } = props; + + const [state, setState] = useState({ value: store.getObject(props.storageKey, props.defaultValue) }); + + useEffect(() => { + const onStorageUpdate = (v: StorageEvent) => { + if (v.key === storageKey) { + setState({ value: store.getObject(props.storageKey, props.defaultValue) }); + } + }; + + window.addEventListener('storage', onStorageUpdate); + + return () => { + window.removeEventListener('storage', onStorageUpdate); + }; + }); + + const onSaveToStore = (value: T) => { + try { + store.setObject(storageKey, value); + } catch (error) { + console.error(error); + } + setState({ value }); + }; + + const onDeleteFromStore = () => { + try { + store.delete(storageKey); + } catch (error) { + console.log(error); + } + setState({ value: defaultValue }); + }; + + return <>{children(state.value, onSaveToStore, onDeleteFromStore)}; +}; diff --git a/public/app/core/components/NodeGraphSettings.tsx b/packages/grafana-o11y-ds-frontend/src/NodeGraph/NodeGraphSettings.tsx similarity index 94% rename from public/app/core/components/NodeGraphSettings.tsx rename to packages/grafana-o11y-ds-frontend/src/NodeGraph/NodeGraphSettings.tsx index 5fb7dcb3eb157..6544b33386999 100644 --- a/public/app/core/components/NodeGraphSettings.tsx +++ b/packages/grafana-o11y-ds-frontend/src/NodeGraph/NodeGraphSettings.tsx @@ -7,11 +7,9 @@ import { GrafanaTheme2, updateDatasourcePluginJsonDataOption, } from '@grafana/data'; -import { ConfigSubSection } from '@grafana/experimental'; +import { ConfigDescriptionLink, ConfigSubSection } from '@grafana/experimental'; import { InlineField, InlineFieldRow, InlineSwitch, useStyles2 } from '@grafana/ui'; -import { ConfigDescriptionLink } from './ConfigDescriptionLink'; - export interface NodeGraphOptions { enabled?: boolean; } diff --git a/packages/grafana-o11y-ds-frontend/src/SpanBar/SpanBarSettings.tsx b/packages/grafana-o11y-ds-frontend/src/SpanBar/SpanBarSettings.tsx new file mode 100644 index 0000000000000..81780446eddc9 --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/SpanBar/SpanBarSettings.tsx @@ -0,0 +1,110 @@ +import { css } from '@emotion/css'; +import React from 'react'; + +import { + DataSourceJsonData, + DataSourcePluginOptionsEditorProps, + GrafanaTheme2, + toOption, + updateDatasourcePluginJsonDataOption, +} from '@grafana/data'; +import { ConfigDescriptionLink, ConfigSubSection } from '@grafana/experimental'; +import { InlineField, InlineFieldRow, Input, Select, useStyles2 } from '@grafana/ui'; + +export interface SpanBarOptions { + type?: string; + tag?: string; +} + +export interface SpanBarOptionsData extends DataSourceJsonData { + spanBar?: SpanBarOptions; +} + +export const NONE = 'None'; +export const DURATION = 'Duration'; +export const TAG = 'Tag'; + +interface Props extends DataSourcePluginOptionsEditorProps {} + +export default function SpanBarSettings({ options, onOptionsChange }: Props) { + const styles = useStyles2(getStyles); + const selectOptions = [NONE, DURATION, TAG].map(toOption); + + return ( +
+ + + + updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'spanBar', { + ...options.jsonData.spanBar, + tag: v.currentTarget.value, + }) + } + value={options.jsonData.spanBar?.tag || ''} + width={40} + /> + + + )} +
+ ); +} + +export const SpanBarSection = ({ options, onOptionsChange }: DataSourcePluginOptionsEditorProps) => { + let suffix = options.type; + suffix += options.type === 'tempo' ? '/configure-tempo-data-source/#span-bar' : '/#span-bar'; + + return ( + + } + > + + + ); +}; + +const getStyles = (theme: GrafanaTheme2) => ({ + infoText: css({ + label: 'infoText', + paddingBottom: theme.spacing(2), + color: theme.colors.text.secondary, + }), + row: css({ + label: 'row', + alignItems: 'baseline', + }), +}); diff --git a/packages/grafana-o11y-ds-frontend/src/TemporaryAlert.test.tsx b/packages/grafana-o11y-ds-frontend/src/TemporaryAlert.test.tsx new file mode 100644 index 0000000000000..c8ae7b1c1a489 --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/TemporaryAlert.test.tsx @@ -0,0 +1,28 @@ +import { act, render, screen } from '@testing-library/react'; +import React from 'react'; + +import { TemporaryAlert } from './TemporaryAlert'; + +describe('TemporaryAlert', () => { + beforeEach(() => { + jest.useFakeTimers(); + }); + + afterEach(() => { + jest.runOnlyPendingTimers(); + jest.useRealTimers(); + }); + + it('full component life cycle', async () => { + render(); + expect(screen.queryByTestId('data-testid Alert error')).not.toBeInTheDocument(); + + render(); + expect(screen.getByTestId('data-testid Alert error')).toBeInTheDocument(); + expect(screen.getByText('Error message')).toBeInTheDocument(); + + act(() => jest.runAllTimers()); + expect(screen.queryByTestId('data-testid Alert error')).not.toBeInTheDocument(); + expect(screen.queryByText('Error message')).not.toBeInTheDocument(); + }); +}); diff --git a/packages/grafana-o11y-ds-frontend/src/TemporaryAlert.tsx b/packages/grafana-o11y-ds-frontend/src/TemporaryAlert.tsx new file mode 100644 index 0000000000000..8a7003a576ce7 --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/TemporaryAlert.tsx @@ -0,0 +1,74 @@ +import { css } from '@emotion/css'; +import React, { useEffect, useState } from 'react'; + +import { GrafanaTheme2 } from '@grafana/data'; +import { Alert, AlertVariant, useTheme2 } from '@grafana/ui'; + +enum AlertTimeout { + Error = 7000, + Info = 3000, + Success = 3000, + Warning = 5000, +} + +const getStyle = (theme: GrafanaTheme2) => { + return css({ + position: 'absolute', + zIndex: theme.zIndex.portal, + top: 0, + right: 10, + }); +}; + +const timeoutMap = { + ['error']: AlertTimeout.Error, + ['info']: AlertTimeout.Info, + ['success']: AlertTimeout.Success, + ['warning']: AlertTimeout.Warning, +}; + +type AlertProps = { + // Severity of the alert. Controls the style of the alert (e.g., background color) + severity: AlertVariant; + // Displayed message. If set to empty string, the alert is not displayed + text: string; +}; + +export const TemporaryAlert = (props: AlertProps) => { + const style = getStyle(useTheme2()); + const [visible, setVisible] = useState(false); + const [timer, setTimer] = useState(); + + useEffect(() => { + return () => { + if (timer) { + clearTimeout(timer); + } + }; + }, [timer]); + + useEffect(() => { + if (props.text !== '') { + setVisible(true); + + const timer = setTimeout(() => { + setVisible(false); + }, timeoutMap[props.severity]); + setTimer(timer); + } + }, [props.severity, props.text]); + + return ( + <> + {visible && ( + setVisible(false)} + severity={props.severity} + title={props.text} + /> + )} + + ); +}; diff --git a/public/app/core/components/TraceToLogs/TagMappingInput.tsx b/packages/grafana-o11y-ds-frontend/src/TraceToLogs/TagMappingInput.tsx similarity index 93% rename from public/app/core/components/TraceToLogs/TagMappingInput.tsx rename to packages/grafana-o11y-ds-frontend/src/TraceToLogs/TagMappingInput.tsx index 2dea321ab0245..d263682a92fac 100644 --- a/public/app/core/components/TraceToLogs/TagMappingInput.tsx +++ b/packages/grafana-o11y-ds-frontend/src/TraceToLogs/TagMappingInput.tsx @@ -3,7 +3,6 @@ import React from 'react'; import { GrafanaTheme2 } from '@grafana/data'; import { InlineLabel, SegmentInput, ToolbarButton, useStyles2 } from '@grafana/ui'; -import { ToolbarButtonVariant } from '@grafana/ui/src/components/ToolbarButton'; import { TraceToLogsTag } from './TraceToLogsSettings'; @@ -13,8 +12,6 @@ interface Props { id?: string; } -const VARIANT = 'none' as ToolbarButtonVariant; - export const TagMappingInput = ({ values, onChange, id }: Props) => { const styles = useStyles2(getStyles); @@ -60,7 +57,6 @@ export const TagMappingInput = ({ values, onChange, id }: Props) => { onClick={() => onChange([...values.slice(0, idx), ...values.slice(idx + 1)])} className={cx(styles.removeTag, 'query-part')} aria-label="Remove tag" - variant={VARIANT} type="button" icon="times" /> @@ -71,7 +67,6 @@ export const TagMappingInput = ({ values, onChange, id }: Props) => { className="query-part" aria-label="Add tag" type="button" - variant={VARIANT} icon="plus" /> ) : null} @@ -84,7 +79,6 @@ export const TagMappingInput = ({ values, onChange, id }: Props) => { className="query-part" aria-label="Add tag" type="button" - variant={VARIANT} /> )}
diff --git a/public/app/core/components/TraceToLogs/TraceToLogsSettings.test.tsx b/packages/grafana-o11y-ds-frontend/src/TraceToLogs/TraceToLogsSettings.test.tsx similarity index 100% rename from public/app/core/components/TraceToLogs/TraceToLogsSettings.test.tsx rename to packages/grafana-o11y-ds-frontend/src/TraceToLogs/TraceToLogsSettings.test.tsx diff --git a/public/app/core/components/TraceToLogs/TraceToLogsSettings.tsx b/packages/grafana-o11y-ds-frontend/src/TraceToLogs/TraceToLogsSettings.tsx similarity index 96% rename from public/app/core/components/TraceToLogs/TraceToLogsSettings.tsx rename to packages/grafana-o11y-ds-frontend/src/TraceToLogs/TraceToLogsSettings.tsx index 5a4b605faf1f7..bc290883d657c 100644 --- a/public/app/core/components/TraceToLogs/TraceToLogsSettings.tsx +++ b/packages/grafana-o11y-ds-frontend/src/TraceToLogs/TraceToLogsSettings.tsx @@ -2,10 +2,9 @@ import { css } from '@emotion/css'; import React, { useCallback, useMemo } from 'react'; import { DataSourceJsonData, DataSourceInstanceSettings, DataSourcePluginOptionsEditorProps } from '@grafana/data'; -import { ConfigSection } from '@grafana/experimental'; +import { ConfigDescriptionLink, ConfigSection } from '@grafana/experimental'; +import { DataSourcePicker } from '@grafana/runtime'; import { InlineField, InlineFieldRow, Input, InlineSwitch } from '@grafana/ui'; -import { ConfigDescriptionLink } from 'app/core/components/ConfigDescriptionLink'; -import { DataSourcePicker } from 'app/features/datasources/components/picker/DataSourcePicker'; import { IntervalInput } from '../IntervalInput/IntervalInput'; @@ -230,7 +229,7 @@ function IdFilter(props: IdFilterProps) { label={`Filter by ${props.type} ID`} labelWidth={26} grow - tooltip={`Filters logs by ${props.type} ID`} + tooltip={`Filters logs by ${props.type} ID, where the ${props.type} ID should be part of the log line`} > ({ - infoText: css` - padding-bottom: ${theme.spacing(2)}; - color: ${theme.colors.text.secondary}; - `, - row: css` - label: row; - align-items: baseline; - `, - queryRow: css` - label: queryRow; - display: flex; - flex-flow: wrap; - `, + infoText: { + paddingBottom: theme.spacing(2), + color: theme.colors.text.secondary, + }, + row: css({ + label: 'row', + alignItems: 'baseline', + }), + queryRow: css({ + label: 'queryRow', + display: 'flex', + flexFlow: 'wrap', + }), }); diff --git a/public/app/core/components/TraceToProfiles/TraceToProfilesSettings.test.tsx b/packages/grafana-o11y-ds-frontend/src/TraceToProfiles/TraceToProfilesSettings.test.tsx similarity index 100% rename from public/app/core/components/TraceToProfiles/TraceToProfilesSettings.test.tsx rename to packages/grafana-o11y-ds-frontend/src/TraceToProfiles/TraceToProfilesSettings.test.tsx diff --git a/public/app/core/components/TraceToProfiles/TraceToProfilesSettings.tsx b/packages/grafana-o11y-ds-frontend/src/TraceToProfiles/TraceToProfilesSettings.tsx similarity index 86% rename from public/app/core/components/TraceToProfiles/TraceToProfilesSettings.tsx rename to packages/grafana-o11y-ds-frontend/src/TraceToProfiles/TraceToProfilesSettings.tsx index 41d5c7d7d57a6..ebabc60dd0109 100644 --- a/public/app/core/components/TraceToProfiles/TraceToProfilesSettings.tsx +++ b/packages/grafana-o11y-ds-frontend/src/TraceToProfiles/TraceToProfilesSettings.tsx @@ -8,16 +8,14 @@ import { DataSourcePluginOptionsEditorProps, updateDatasourcePluginJsonDataOption, } from '@grafana/data'; -import { ConfigSection } from '@grafana/experimental'; -import { getDataSourceSrv } from '@grafana/runtime'; +import { ConfigDescriptionLink, ConfigSection } from '@grafana/experimental'; +import { DataSourcePicker, DataSourceWithBackend, getDataSourceSrv } from '@grafana/runtime'; import { InlineField, InlineFieldRow, Input, InlineSwitch } from '@grafana/ui'; -import { ConfigDescriptionLink } from 'app/core/components/ConfigDescriptionLink'; -import { DataSourcePicker } from 'app/features/datasources/components/picker/DataSourcePicker'; -import { ProfileTypesCascader } from 'app/plugins/datasource/grafana-pyroscope-datasource/QueryEditor/ProfileTypesCascader'; -import { PyroscopeDataSource } from 'app/plugins/datasource/grafana-pyroscope-datasource/datasource'; -import { ProfileTypeMessage } from 'app/plugins/datasource/grafana-pyroscope-datasource/types'; import { TagMappingInput } from '../TraceToLogs/TagMappingInput'; +import { ProfileTypesCascader } from '../pyroscope/ProfileTypesCascader'; +import { ProfileTypeMessage } from '../pyroscope/types'; + export interface TraceToProfilesOptions { datasourceUid?: string; tags?: Array<{ key: string; value?: string }>; @@ -48,20 +46,19 @@ export function TraceToProfilesSettings({ options, onOptionsChange }: Props) { return await getDataSourceSrv().get(options.jsonData.tracesToProfiles?.datasourceUid); }, [options.jsonData.tracesToProfiles?.datasourceUid]); - useEffect(() => { + const { value: pTypes } = useAsync(async () => { if ( - dataSource && - dataSource instanceof PyroscopeDataSource && + dataSource instanceof DataSourceWithBackend && supportedDataSourceTypes.includes(dataSource.type) && dataSource.uid === options.jsonData.tracesToProfiles?.datasourceUid ) { - dataSource.getProfileTypes().then((profileTypes) => { - setProfileTypes(profileTypes); - }); - } else { - setProfileTypes([]); + return await dataSource?.getResource('profileTypes'); } - }, [dataSource, onOptionsChange, options, supportedDataSourceTypes]); + }, [dataSource]); + + useEffect(() => { + setProfileTypes(pTypes ?? []); + }, [pTypes]); return (
@@ -173,7 +170,7 @@ export const TraceToProfilesSection = ({ options, onOptionsChange }: DataSourceP description={ } diff --git a/packages/grafana-o11y-ds-frontend/src/combineResponses.test.ts b/packages/grafana-o11y-ds-frontend/src/combineResponses.test.ts new file mode 100644 index 0000000000000..aa1b8ca07ad04 --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/combineResponses.test.ts @@ -0,0 +1,779 @@ +import { + DataFrame, + DataFrameType, + DataQueryResponse, + Field, + FieldType, + LoadingState, + PanelData, + QueryResultMetaStat, + getDefaultTimeRange, +} from '@grafana/data'; + +import { cloneQueryResponse, combinePanelData, combineResponses } from './combineResponses'; + +describe('cloneQueryResponse', () => { + const { logFrameA } = getMockFrames(); + const responseA: DataQueryResponse = { + data: [logFrameA], + }; + it('clones query responses', () => { + const clonedA = cloneQueryResponse(responseA); + expect(clonedA).not.toBe(responseA); + expect(clonedA).toEqual(clonedA); + }); +}); + +describe('combineResponses', () => { + it('combines logs frames', () => { + const { logFrameA, logFrameB } = getMockFrames(); + const responseA: DataQueryResponse = { + data: [logFrameA], + }; + const responseB: DataQueryResponse = { + data: [logFrameB], + }; + expect(combineResponses(responseA, responseB)).toEqual({ + data: [ + { + fields: [ + { + config: {}, + name: 'Time', + type: 'time', + values: [1, 2, 3, 4], + }, + { + config: {}, + name: 'Line', + type: 'string', + values: ['line3', 'line4', 'line1', 'line2'], + }, + { + config: {}, + name: 'labels', + type: 'other', + values: [ + { + otherLabel: 'other value', + }, + { + label: 'value', + }, + { + otherLabel: 'other value', + }, + ], + }, + { + config: {}, + name: 'tsNs', + type: 'string', + values: ['1000000', '2000000', '3000000', '4000000'], + }, + { + config: {}, + name: 'id', + type: 'string', + values: ['id3', 'id4', 'id1', 'id2'], + }, + ], + length: 4, + meta: { + custom: { + frameType: 'LabeledTimeValues', + }, + stats: [ + { + displayName: 'Summary: total bytes processed', + unit: 'decbytes', + value: 33, + }, + ], + }, + refId: 'A', + }, + ], + }); + }); + + it('combines logs frames with transformed fields', () => { + const { logFrameA, logFrameB } = getMockFrames(); + const { logFrameB: originalLogFrameB } = getMockFrames(); + + // Pseudo shuffle fields + logFrameB.fields.sort((a: Field, b: Field) => (a.name < b.name ? -1 : 1)); + expect(logFrameB.fields).not.toEqual(originalLogFrameB.fields); + + const responseA: DataQueryResponse = { + data: [logFrameA], + }; + const responseB: DataQueryResponse = { + data: [logFrameB], + }; + expect(combineResponses(responseA, responseB)).toEqual({ + data: [ + { + fields: [ + { + config: {}, + name: 'Time', + type: 'time', + values: [1, 2, 3, 4], + }, + { + config: {}, + name: 'Line', + type: 'string', + values: ['line3', 'line4', 'line1', 'line2'], + }, + { + config: {}, + name: 'labels', + type: 'other', + values: [ + { + otherLabel: 'other value', + }, + { + label: 'value', + }, + { + otherLabel: 'other value', + }, + ], + }, + { + config: {}, + name: 'tsNs', + type: 'string', + values: ['1000000', '2000000', '3000000', '4000000'], + }, + { + config: {}, + name: 'id', + type: 'string', + values: ['id3', 'id4', 'id1', 'id2'], + }, + ], + length: 4, + meta: { + custom: { + frameType: 'LabeledTimeValues', + }, + stats: [ + { + displayName: 'Summary: total bytes processed', + unit: 'decbytes', + value: 33, + }, + ], + }, + refId: 'A', + }, + ], + }); + }); + + it('combines metric frames', () => { + const { metricFrameA, metricFrameB } = getMockFrames(); + const responseA: DataQueryResponse = { + data: [metricFrameA], + }; + const responseB: DataQueryResponse = { + data: [metricFrameB], + }; + expect(combineResponses(responseA, responseB)).toEqual({ + data: [ + { + fields: [ + { + config: {}, + name: 'Time', + type: 'time', + values: [1000000, 2000000, 3000000, 4000000], + }, + { + config: {}, + name: 'Value', + type: 'number', + values: [6, 7, 5, 4], + labels: { + level: 'debug', + }, + }, + ], + length: 4, + meta: { + type: 'timeseries-multi', + stats: [ + { + displayName: 'Summary: total bytes processed', + unit: 'decbytes', + value: 33, + }, + ], + }, + refId: 'A', + }, + ], + }); + }); + + it('combines and identifies new frames in the response', () => { + const { metricFrameA, metricFrameB, metricFrameC } = getMockFrames(); + const responseA: DataQueryResponse = { + data: [metricFrameA], + }; + const responseB: DataQueryResponse = { + data: [metricFrameB, metricFrameC], + }; + expect(combineResponses(responseA, responseB)).toEqual({ + data: [ + { + fields: [ + { + config: {}, + name: 'Time', + type: 'time', + values: [1000000, 2000000, 3000000, 4000000], + }, + { + config: {}, + name: 'Value', + type: 'number', + values: [6, 7, 5, 4], + labels: { + level: 'debug', + }, + }, + ], + length: 4, + meta: { + type: 'timeseries-multi', + stats: [ + { + displayName: 'Summary: total bytes processed', + unit: 'decbytes', + value: 33, + }, + ], + }, + refId: 'A', + }, + metricFrameC, + ], + }); + }); + + it('combines frames prioritizing refIds over names', () => { + const { metricFrameA, metricFrameB } = getMockFrames(); + const dataFrameA = { + ...metricFrameA, + refId: 'A', + name: 'A', + }; + const dataFrameB = { + ...metricFrameB, + refId: 'B', + name: 'A', + }; + const responseA: DataQueryResponse = { + data: [dataFrameA], + }; + const responseB: DataQueryResponse = { + data: [dataFrameB], + }; + expect(combineResponses(responseA, responseB)).toEqual({ + data: [dataFrameA, dataFrameB], + }); + }); + + it('combines frames in a new response instance', () => { + const { metricFrameA, metricFrameB } = getMockFrames(); + const responseA: DataQueryResponse = { + data: [metricFrameA], + }; + const responseB: DataQueryResponse = { + data: [metricFrameB], + }; + expect(combineResponses(null, responseA)).not.toBe(responseA); + expect(combineResponses(null, responseB)).not.toBe(responseB); + }); + + it('combine when first param has errors', () => { + const { metricFrameA, metricFrameB } = getMockFrames(); + const errorA = { + message: 'errorA', + }; + const responseA: DataQueryResponse = { + data: [metricFrameA], + error: errorA, + errors: [errorA], + }; + const responseB: DataQueryResponse = { + data: [metricFrameB], + }; + + const combined = combineResponses(responseA, responseB); + expect(combined.data[0].length).toBe(4); + expect(combined.error?.message).toBe('errorA'); + expect(combined.errors).toHaveLength(1); + expect(combined.errors?.[0]?.message).toBe('errorA'); + }); + + it('combine when second param has errors', () => { + const { metricFrameA, metricFrameB } = getMockFrames(); + const responseA: DataQueryResponse = { + data: [metricFrameA], + }; + const errorB = { + message: 'errorB', + }; + const responseB: DataQueryResponse = { + data: [metricFrameB], + error: errorB, + errors: [errorB], + }; + + const combined = combineResponses(responseA, responseB); + expect(combined.data[0].length).toBe(4); + expect(combined.error?.message).toBe('errorB'); + expect(combined.errors).toHaveLength(1); + expect(combined.errors?.[0]?.message).toBe('errorB'); + }); + + it('combine when both params have errors', () => { + const { metricFrameA, metricFrameB } = getMockFrames(); + const errorA = { + message: 'errorA', + }; + const errorB = { + message: 'errorB', + }; + const responseA: DataQueryResponse = { + data: [metricFrameA], + error: errorA, + errors: [errorA], + }; + const responseB: DataQueryResponse = { + data: [metricFrameB], + error: errorB, + errors: [errorB], + }; + + const combined = combineResponses(responseA, responseB); + expect(combined.data[0].length).toBe(4); + expect(combined.error?.message).toBe('errorA'); + expect(combined.errors).toHaveLength(2); + expect(combined.errors?.[0]?.message).toBe('errorA'); + expect(combined.errors?.[1]?.message).toBe('errorB'); + }); + + it('combines frames with nanoseconds', () => { + const { logFrameA, logFrameB } = getMockFrames(); + logFrameA.fields[0].nanos = [333333, 444444]; + logFrameB.fields[0].nanos = [111111, 222222]; + const responseA: DataQueryResponse = { + data: [logFrameA], + }; + const responseB: DataQueryResponse = { + data: [logFrameB], + }; + expect(combineResponses(responseA, responseB)).toEqual({ + data: [ + { + fields: [ + { + config: {}, + name: 'Time', + type: 'time', + values: [1, 2, 3, 4], + nanos: [111111, 222222, 333333, 444444], + }, + { + config: {}, + name: 'Line', + type: 'string', + values: ['line3', 'line4', 'line1', 'line2'], + }, + { + config: {}, + name: 'labels', + type: 'other', + values: [ + { + otherLabel: 'other value', + }, + { + label: 'value', + }, + { + otherLabel: 'other value', + }, + ], + }, + { + config: {}, + name: 'tsNs', + type: 'string', + values: ['1000000', '2000000', '3000000', '4000000'], + }, + { + config: {}, + name: 'id', + type: 'string', + values: ['id3', 'id4', 'id1', 'id2'], + }, + ], + length: 4, + meta: { + custom: { + frameType: 'LabeledTimeValues', + }, + stats: [ + { + displayName: 'Summary: total bytes processed', + unit: 'decbytes', + value: 33, + }, + ], + }, + refId: 'A', + }, + ], + }); + }); + + describe('combine stats', () => { + const { metricFrameA } = getMockFrames(); + const makeResponse = (stats?: QueryResultMetaStat[]): DataQueryResponse => ({ + data: [ + { + ...metricFrameA, + meta: { + ...metricFrameA.meta, + stats, + }, + }, + ], + }); + it('two values', () => { + const responseA = makeResponse([ + { displayName: 'Ingester: total reached', value: 1 }, + { displayName: 'Summary: total bytes processed', unit: 'decbytes', value: 11 }, + ]); + const responseB = makeResponse([ + { displayName: 'Ingester: total reached', value: 2 }, + { displayName: 'Summary: total bytes processed', unit: 'decbytes', value: 22 }, + ]); + + expect(combineResponses(responseA, responseB).data[0].meta.stats).toStrictEqual([ + { displayName: 'Summary: total bytes processed', unit: 'decbytes', value: 33 }, + ]); + }); + + it('one value', () => { + const responseA = makeResponse([ + { displayName: 'Ingester: total reached', value: 1 }, + { displayName: 'Summary: total bytes processed', unit: 'decbytes', value: 11 }, + ]); + const responseB = makeResponse(); + + expect(combineResponses(responseA, responseB).data[0].meta.stats).toStrictEqual([ + { displayName: 'Summary: total bytes processed', unit: 'decbytes', value: 11 }, + ]); + + expect(combineResponses(responseB, responseA).data[0].meta.stats).toStrictEqual([ + { displayName: 'Summary: total bytes processed', unit: 'decbytes', value: 11 }, + ]); + }); + + it('no value', () => { + const responseA = makeResponse(); + const responseB = makeResponse(); + expect(combineResponses(responseA, responseB).data[0].meta.stats).toHaveLength(0); + }); + }); +}); + +describe('combinePanelData', () => { + it('combines series within PanelData instances', () => { + const { logFrameA, logFrameB } = getMockFrames(); + const panelDataA: PanelData = { + state: LoadingState.Done, + series: [logFrameA], + timeRange: getDefaultTimeRange(), + }; + const panelDataB: PanelData = { + state: LoadingState.Done, + series: [logFrameB], + timeRange: getDefaultTimeRange(), + }; + expect(combinePanelData(panelDataA, panelDataB)).toEqual({ + state: panelDataA.state, + series: [ + { + fields: [ + { + config: {}, + name: 'Time', + type: 'time', + values: [1, 2, 3, 4], + }, + { + config: {}, + name: 'Line', + type: 'string', + values: ['line3', 'line4', 'line1', 'line2'], + }, + { + config: {}, + name: 'labels', + type: 'other', + values: [ + { + otherLabel: 'other value', + }, + { + label: 'value', + }, + { + otherLabel: 'other value', + }, + ], + }, + { + config: {}, + name: 'tsNs', + type: 'string', + values: ['1000000', '2000000', '3000000', '4000000'], + }, + { + config: {}, + name: 'id', + type: 'string', + values: ['id3', 'id4', 'id1', 'id2'], + }, + ], + length: 4, + meta: { + custom: { + frameType: 'LabeledTimeValues', + }, + stats: [ + { + displayName: 'Summary: total bytes processed', + unit: 'decbytes', + value: 33, + }, + ], + }, + refId: 'A', + }, + ], + timeRange: panelDataA.timeRange, + }); + }); +}); + +export function getMockFrames() { + const logFrameA: DataFrame = { + refId: 'A', + fields: [ + { + name: 'Time', + type: FieldType.time, + config: {}, + values: [3, 4], + }, + { + name: 'Line', + type: FieldType.string, + config: {}, + values: ['line1', 'line2'], + }, + { + name: 'labels', + type: FieldType.other, + config: {}, + values: [ + { + label: 'value', + }, + { + otherLabel: 'other value', + }, + ], + }, + { + name: 'tsNs', + type: FieldType.string, + config: {}, + values: ['3000000', '4000000'], + }, + { + name: 'id', + type: FieldType.string, + config: {}, + values: ['id1', 'id2'], + }, + ], + meta: { + custom: { + frameType: 'LabeledTimeValues', + }, + stats: [ + { displayName: 'Summary: total bytes processed', unit: 'decbytes', value: 11 }, + { displayName: 'Ingester: total reached', value: 1 }, + ], + }, + length: 2, + }; + + const logFrameB: DataFrame = { + refId: 'A', + fields: [ + { + name: 'Time', + type: FieldType.time, + config: {}, + values: [1, 2], + }, + { + name: 'Line', + type: FieldType.string, + config: {}, + values: ['line3', 'line4'], + }, + { + name: 'labels', + type: FieldType.other, + config: {}, + values: [ + { + otherLabel: 'other value', + }, + ], + }, + { + name: 'tsNs', + type: FieldType.string, + config: {}, + values: ['1000000', '2000000'], + }, + { + name: 'id', + type: FieldType.string, + config: {}, + values: ['id3', 'id4'], + }, + ], + meta: { + custom: { + frameType: 'LabeledTimeValues', + }, + stats: [ + { displayName: 'Summary: total bytes processed', unit: 'decbytes', value: 22 }, + { displayName: 'Ingester: total reached', value: 2 }, + ], + }, + length: 2, + }; + + const metricFrameA: DataFrame = { + refId: 'A', + fields: [ + { + name: 'Time', + type: FieldType.time, + config: {}, + values: [3000000, 4000000], + }, + { + name: 'Value', + type: FieldType.number, + config: {}, + values: [5, 4], + labels: { + level: 'debug', + }, + }, + ], + meta: { + type: DataFrameType.TimeSeriesMulti, + stats: [ + { displayName: 'Ingester: total reached', value: 1 }, + { displayName: 'Summary: total bytes processed', unit: 'decbytes', value: 11 }, + ], + }, + length: 2, + }; + + const metricFrameB: DataFrame = { + refId: 'A', + fields: [ + { + name: 'Time', + type: FieldType.time, + config: {}, + values: [1000000, 2000000], + }, + { + name: 'Value', + type: FieldType.number, + config: {}, + values: [6, 7], + labels: { + level: 'debug', + }, + }, + ], + meta: { + type: DataFrameType.TimeSeriesMulti, + stats: [ + { displayName: 'Ingester: total reached', value: 2 }, + { displayName: 'Summary: total bytes processed', unit: 'decbytes', value: 22 }, + ], + }, + length: 2, + }; + + const metricFrameC: DataFrame = { + refId: 'A', + name: 'some-time-series', + fields: [ + { + name: 'Time', + type: FieldType.time, + config: {}, + values: [3000000, 4000000], + }, + { + name: 'Value', + type: FieldType.number, + config: {}, + values: [6, 7], + labels: { + level: 'error', + }, + }, + ], + meta: { + type: DataFrameType.TimeSeriesMulti, + stats: [ + { displayName: 'Ingester: total reached', value: 2 }, + { displayName: 'Summary: total bytes processed', unit: 'decbytes', value: 33 }, + ], + }, + length: 2, + }; + + return { + logFrameA, + logFrameB, + metricFrameA, + metricFrameB, + metricFrameC, + }; +} diff --git a/packages/grafana-o11y-ds-frontend/src/combineResponses.ts b/packages/grafana-o11y-ds-frontend/src/combineResponses.ts new file mode 100644 index 0000000000000..05e290663eda6 --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/combineResponses.ts @@ -0,0 +1,169 @@ +import { + DataFrame, + DataFrameType, + DataQueryResponse, + DataQueryResponseData, + Field, + FieldType, + PanelData, + QueryResultMetaStat, + shallowCompare, +} from '@grafana/data'; + +export function combinePanelData(currentData: PanelData, newData: PanelData): PanelData { + const series = combineResponses({ data: currentData.series }, { data: newData.series }).data; + return { ...currentData, series }; +} + +export function combineResponses(currentResult: DataQueryResponse | null, newResult: DataQueryResponse) { + if (!currentResult) { + return cloneQueryResponse(newResult); + } + + newResult.data.forEach((newFrame) => { + const currentFrame = currentResult.data.find((frame) => shouldCombine(frame, newFrame)); + if (!currentFrame) { + currentResult.data.push(cloneDataFrame(newFrame)); + return; + } + combineFrames(currentFrame, newFrame); + }); + + const mergedErrors = [...(currentResult.errors ?? []), ...(newResult.errors ?? [])]; + + // we make sure to have `.errors` as undefined, instead of empty-array + // when no errors. + + if (mergedErrors.length > 0) { + currentResult.errors = mergedErrors; + } + + // the `.error` attribute is obsolete now, + // but we have to maintain it, otherwise + // some grafana parts do not behave well. + // we just choose the old error, if it exists, + // otherwise the new error, if it exists. + const mergedError = currentResult.error ?? newResult.error; + if (mergedError != null) { + currentResult.error = mergedError; + } + + const mergedTraceIds = [...(currentResult.traceIds ?? []), ...(newResult.traceIds ?? [])]; + if (mergedTraceIds.length > 0) { + currentResult.traceIds = mergedTraceIds; + } + + return currentResult; +} + +function combineFrames(dest: DataFrame, source: DataFrame) { + // `dest` and `source` might have more or less fields, we need to go through all of them + const totalFields = Math.max(dest.fields.length, source.fields.length); + for (let i = 0; i < totalFields; i++) { + // For now, skip undefined fields that exist in the new frame + if (!dest.fields[i]) { + continue; + } + // Index is not reliable when frames have disordered fields, or an extra/missing field, so we find them by name. + // If the field has no name, we fallback to the old index version. + const sourceField = dest.fields[i].name + ? source.fields.find((f) => f.name === dest.fields[i].name) + : source.fields[i]; + if (!sourceField) { + continue; + } + dest.fields[i].values = [].concat.apply(sourceField.values, dest.fields[i].values); + if (sourceField.nanos) { + const nanos: number[] = dest.fields[i].nanos?.slice() || []; + dest.fields[i].nanos = source.fields[i].nanos?.concat(nanos); + } + } + dest.length += source.length; + dest.meta = { + ...dest.meta, + stats: getCombinedMetadataStats(dest.meta?.stats ?? [], source.meta?.stats ?? []), + }; +} + +const TOTAL_BYTES_STAT = 'Summary: total bytes processed'; +// This is specific for Loki +function getCombinedMetadataStats( + destStats: QueryResultMetaStat[], + sourceStats: QueryResultMetaStat[] +): QueryResultMetaStat[] { + // in the current approach, we only handle a single stat + const destStat = destStats.find((s) => s.displayName === TOTAL_BYTES_STAT); + const sourceStat = sourceStats.find((s) => s.displayName === TOTAL_BYTES_STAT); + + if (sourceStat != null && destStat != null) { + return [{ value: sourceStat.value + destStat.value, displayName: TOTAL_BYTES_STAT, unit: destStat.unit }]; + } + + // maybe one of them exist + const eitherStat = sourceStat ?? destStat; + if (eitherStat != null) { + return [eitherStat]; + } + + return []; +} + +/** + * Deep clones a DataQueryResponse + */ +export function cloneQueryResponse(response: DataQueryResponse): DataQueryResponse { + const newResponse = { + ...response, + data: response.data.map(cloneDataFrame), + }; + return newResponse; +} + +function cloneDataFrame(frame: DataQueryResponseData): DataQueryResponseData { + return { + ...frame, + fields: frame.fields.map((field: Field) => ({ + ...field, + values: field.values, + })), + }; +} + +function shouldCombine(frame1: DataFrame, frame2: DataFrame): boolean { + if (frame1.refId !== frame2.refId) { + return false; + } + + const frameType1 = frame1.meta?.type; + const frameType2 = frame2.meta?.type; + + if (frameType1 !== frameType2) { + // we do not join things that have a different type + return false; + } + + // metric range query data + if (frameType1 === DataFrameType.TimeSeriesMulti) { + const field1 = frame1.fields.find((f) => f.type === FieldType.number); + const field2 = frame2.fields.find((f) => f.type === FieldType.number); + if (field1 === undefined || field2 === undefined) { + // should never happen + return false; + } + + return shallowCompare(field1.labels ?? {}, field2.labels ?? {}); + } + + // logs query data + // logs use a special attribute in the dataframe's "custom" section + // because we do not have a good "frametype" value for them yet. + const customType1 = frame1.meta?.custom?.frameType; + const customType2 = frame2.meta?.custom?.frameType; + + if (customType1 === 'LabeledTimeValues' && customType2 === 'LabeledTimeValues') { + return true; + } + + // should never reach here + return false; +} diff --git a/packages/grafana-o11y-ds-frontend/src/index.ts b/packages/grafana-o11y-ds-frontend/src/index.ts new file mode 100644 index 0000000000000..c2f7e931a2743 --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/index.ts @@ -0,0 +1,18 @@ +/** + * A library containing logic to manage traces. + * + * @packageDocumentation + */ + +export * from './IntervalInput/IntervalInput'; +export * from './NodeGraph/NodeGraphSettings'; +export * from './SpanBar/SpanBarSettings'; +export * from './TemporaryAlert'; +export * from './TraceToLogs/TagMappingInput'; +export * from './TraceToLogs/TraceToLogsSettings'; +export * from './TraceToMetrics/TraceToMetricsSettings'; +export * from './TraceToProfiles/TraceToProfilesSettings'; +export * from './utils'; +export * from './store'; +export * from './LocalStorageValueProvider/LocalStorageValueProvider'; +export * from './combineResponses'; diff --git a/packages/grafana-o11y-ds-frontend/src/pyroscope/ProfileTypesCascader.tsx b/packages/grafana-o11y-ds-frontend/src/pyroscope/ProfileTypesCascader.tsx new file mode 100644 index 0000000000000..da34d4c191961 --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/pyroscope/ProfileTypesCascader.tsx @@ -0,0 +1,85 @@ +import React, { useEffect, useMemo, useState } from 'react'; + +import { Cascader, CascaderOption } from '@grafana/ui'; + +import { PyroscopeDataSource } from './datasource'; +import { ProfileTypeMessage } from './types'; + +type Props = { + initialProfileTypeId?: string; + profileTypes?: ProfileTypeMessage[]; + onChange: (value: string) => void; + placeholder?: string; + width?: number; +}; + +export function ProfileTypesCascader(props: Props) { + const cascaderOptions = useCascaderOptions(props.profileTypes); + + return ( + + ); +} + +// Turn profileTypes into cascader options +function useCascaderOptions(profileTypes?: ProfileTypeMessage[]): CascaderOption[] { + return useMemo(() => { + if (!profileTypes) { + return []; + } + let mainTypes = new Map(); + // Classify profile types by name then sample type. + // The profileTypes are something like cpu:sample:nanoseconds:sample:count or app.something.something + for (let profileType of profileTypes) { + let parts: string[] = []; + if (profileType.id.indexOf(':') > -1) { + parts = profileType.id.split(':'); + } + + const [name, type] = parts; + + if (!mainTypes.has(name)) { + mainTypes.set(name, { + label: name, + value: name, + items: [], + }); + } + mainTypes.get(name)?.items!.push({ + label: type, + value: profileType.id, + }); + } + return Array.from(mainTypes.values()); + }, [profileTypes]); +} + +/** + * Loads the profile types. + * + * This is exported and not used directly in the ProfileTypesCascader component because in some case we need to know + * the profileTypes before rendering the cascader. + * @param datasource + */ +export function useProfileTypes(datasource: PyroscopeDataSource) { + const [profileTypes, setProfileTypes] = useState(); + + useEffect(() => { + (async () => { + const profileTypes = await datasource.getProfileTypes(); + setProfileTypes(profileTypes); + })(); + }, [datasource]); + + return profileTypes; +} diff --git a/packages/grafana-o11y-ds-frontend/src/pyroscope/dataquery.gen.ts b/packages/grafana-o11y-ds-frontend/src/pyroscope/dataquery.gen.ts new file mode 100644 index 0000000000000..1b4ed70c46f11 --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/pyroscope/dataquery.gen.ts @@ -0,0 +1,38 @@ +// Code generated - EDITING IS FUTILE. DO NOT EDIT. +// +// Generated by: +// public/app/plugins/gen.go +// Using jennies: +// TSTypesJenny +// PluginTSTypesJenny +// +// Run 'make gen-cue' from repository root to regenerate. + +import * as common from '@grafana/schema'; + +export type PyroscopeQueryType = ('metrics' | 'profile' | 'both'); + +export const defaultPyroscopeQueryType: PyroscopeQueryType = 'both'; + +export interface GrafanaPyroscope extends common.DataQuery { + /** + * Allows to group the results. + */ + groupBy: Array; + /** + * Specifies the query label selectors. + */ + labelSelector: string; + /** + * Sets the maximum number of nodes in the flamegraph. + */ + maxNodes?: number; + /** + * Specifies the type of profile to query. + */ + profileTypeId: string; + /** + * Specifies the query span selectors. + */ + spanSelector?: Array; +} diff --git a/packages/grafana-o11y-ds-frontend/src/pyroscope/datasource.ts b/packages/grafana-o11y-ds-frontend/src/pyroscope/datasource.ts new file mode 100644 index 0000000000000..39bd35fb177e8 --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/pyroscope/datasource.ts @@ -0,0 +1,13 @@ +import { Observable } from 'rxjs'; + +import { CoreApp, DataQueryRequest, DataQueryResponse, ScopedVars } from '@grafana/data'; +import { DataSourceWithBackend } from '@grafana/runtime'; + +import { PyroscopeDataSourceOptions, ProfileTypeMessage, Query } from './types'; + +export abstract class PyroscopeDataSource extends DataSourceWithBackend { + abstract applyTemplateVariables(query: Query, scopedVars: ScopedVars): Query; + abstract getDefaultQuery(app: CoreApp): Partial; + abstract getProfileTypes(): Promise; + abstract query(request: DataQueryRequest): Observable; +} diff --git a/packages/grafana-o11y-ds-frontend/src/pyroscope/types.ts b/packages/grafana-o11y-ds-frontend/src/pyroscope/types.ts new file mode 100644 index 0000000000000..563ad0df686d2 --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/pyroscope/types.ts @@ -0,0 +1,16 @@ +import { DataSourceJsonData } from '@grafana/data'; + +import { GrafanaPyroscope, PyroscopeQueryType } from './dataquery.gen'; + +export interface ProfileTypeMessage { + id: string; + label: string; +} + +export interface PyroscopeDataSourceOptions extends DataSourceJsonData { + minStep?: string; +} + +export interface Query extends GrafanaPyroscope { + queryType: PyroscopeQueryType; +} diff --git a/packages/grafana-o11y-ds-frontend/src/store.ts b/packages/grafana-o11y-ds-frontend/src/store.ts new file mode 100644 index 0000000000000..3942f408a739f --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/store.ts @@ -0,0 +1,64 @@ +type StoreValue = string | number | boolean | null; + +export class Store { + get(key: string) { + return window.localStorage[key]; + } + + set(key: string, value: StoreValue) { + window.localStorage[key] = value; + } + + getBool(key: string, def: boolean): boolean { + if (def !== void 0 && !this.exists(key)) { + return def; + } + return window.localStorage[key] === 'true'; + } + + getObject(key: string): T | undefined; + getObject(key: string, def: T): T; + getObject(key: string, def?: T) { + let ret = def; + if (this.exists(key)) { + const json = window.localStorage[key]; + try { + ret = JSON.parse(json); + } catch (error) { + console.error(`Error parsing store object: ${key}. Returning default: ${def}. [${error}]`); + } + } + return ret; + } + + /* Returns true when successfully stored, throws error if not successfully stored */ + setObject(key: string, value: unknown) { + let json; + try { + json = JSON.stringify(value); + } catch (error) { + throw new Error(`Could not stringify object: ${key}. [${error}]`); + } + try { + this.set(key, json); + } catch (error) { + // Likely hitting storage quota + const errorToThrow = new Error(`Could not save item in localStorage: ${key}. [${error}]`); + if (error instanceof Error) { + errorToThrow.name = error.name; + } + throw errorToThrow; + } + return true; + } + + exists(key: string) { + return window.localStorage[key] !== void 0; + } + + delete(key: string) { + window.localStorage.removeItem(key); + } +} + +export const store = new Store(); diff --git a/packages/grafana-o11y-ds-frontend/src/utils.ts b/packages/grafana-o11y-ds-frontend/src/utils.ts new file mode 100644 index 0000000000000..3687db979e864 --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/utils.ts @@ -0,0 +1,119 @@ +/** + * Get non overlapping duration of the ranges as they can overlap or have gaps. + */ +import { FieldType, MutableDataFrame, NodeGraphDataFrameFieldNames as Fields } from '@grafana/data'; + +export function getNonOverlappingDuration(ranges: Array<[number, number]>): number { + ranges.sort((a, b) => a[0] - b[0]); + const mergedRanges = ranges.reduce>((acc, range) => { + if (!acc.length) { + return [range]; + } + const tail = acc.slice(-1)[0]; + const [prevStart, prevEnd] = tail; + const [start, end] = range; + if (end < prevEnd) { + // In this case the range is completely inside the prev range so we can just ignore it. + return acc; + } + + if (start > prevEnd) { + // There is no overlap so we can just add it to stack + return [...acc, range]; + } + + // We know there is overlap and current range ends later than previous so we can just extend the range + return [...acc.slice(0, -1), [prevStart, end]]; + }, []); + + return mergedRanges.reduce((acc, range) => { + return acc + (range[1] - range[0]); + }, 0); +} + +/** + * Returns a map of the spans with children array for easier processing. It will also contain empty spans in case + * span is missing but other spans are its children. This is more generic because it needs to allow iterating over + * both arrays and dataframe views. + */ +export function makeSpanMap(getSpan: (index: number) => { span: T; id: string; parentIds: string[] } | undefined): { + [id: string]: { span: T; children: string[] }; +} { + const spanMap: { [id: string]: { span?: T; children: string[] } } = {}; + + let span; + for (let index = 0; (span = getSpan(index)), !!span; index++) { + if (!spanMap[span.id]) { + spanMap[span.id] = { + span: span.span, + children: [], + }; + } else { + spanMap[span.id].span = span.span; + } + + for (const parentId of span.parentIds) { + if (parentId) { + if (!spanMap[parentId]) { + spanMap[parentId] = { + span: undefined, + children: [span.id], + }; + } else { + spanMap[parentId].children.push(span.id); + } + } + } + } + // Discussion on this type assertion here: https://github.com/grafana/grafana/pull/80362/files#r1451019375 + return spanMap as { [id: string]: { span: T; children: string[] } }; +} + +export function getStats(duration: number, traceDuration: number, selfDuration: number) { + return { + main: `${toFixedNoTrailingZeros(duration)}ms (${toFixedNoTrailingZeros((duration / traceDuration) * 100)}%)`, + secondary: `${toFixedNoTrailingZeros(selfDuration)}ms (${toFixedNoTrailingZeros( + (selfDuration / duration) * 100 + )}%)`, + }; +} + +function toFixedNoTrailingZeros(n: number) { + return parseFloat(n.toFixed(2)); +} + +/** + * Create default frames used when returning data for node graph. + */ +export function makeFrames() { + const nodesFrame = new MutableDataFrame({ + fields: [ + { name: Fields.id, type: FieldType.string }, + { name: Fields.title, type: FieldType.string }, + { name: Fields.subTitle, type: FieldType.string }, + { name: Fields.mainStat, type: FieldType.string, config: { displayName: 'Total time (% of trace)' } }, + { name: Fields.secondaryStat, type: FieldType.string, config: { displayName: 'Self time (% of total)' } }, + { + name: Fields.color, + type: FieldType.number, + config: { color: { mode: 'continuous-GrYlRd' }, displayName: 'Self time / Trace duration' }, + }, + ], + meta: { + preferredVisualisationType: 'nodeGraph', + }, + }); + + const edgesFrame = new MutableDataFrame({ + fields: [ + { name: Fields.id, type: FieldType.string }, + { name: Fields.target, type: FieldType.string }, + { name: Fields.source, type: FieldType.string }, + ], + meta: { + preferredVisualisationType: 'nodeGraph', + }, + }); + + return [nodesFrame, edgesFrame]; +} diff --git a/packages/grafana-o11y-ds-frontend/tsconfig.json b/packages/grafana-o11y-ds-frontend/tsconfig.json new file mode 100644 index 0000000000000..03aa83f469f7d --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "declarationDir": "./compiled", + "emitDeclarationOnly": true, + "isolatedModules": true, + "rootDirs": ["."] + }, + "exclude": ["dist/**/*"], + "extends": "@grafana/tsconfig", + "include": ["src/**/*.ts*", "../../public/app/types/*.d.ts", "../grafana-ui/src/types/*.d.ts"] +} diff --git a/packages/grafana-plugin-configs/package.json b/packages/grafana-plugin-configs/package.json index db5e3783f72d2..403539da5ed8a 100644 --- a/packages/grafana-plugin-configs/package.json +++ b/packages/grafana-plugin-configs/package.json @@ -2,19 +2,19 @@ "name": "@grafana/plugin-configs", "description": "Shared dependencies and files for core plugins", "private": true, - "version": "10.3.0-pre", + "version": "11.0.0-pre", "dependencies": { - "tslib": "2.6.0" + "tslib": "2.6.2" }, "devDependencies": { - "@grafana/tsconfig": "^1.2.0-rc1", - "copy-webpack-plugin": "11.0.0", - "eslint-webpack-plugin": "4.0.1", - "fork-ts-checker-webpack-plugin": "8.0.0", - "glob": "10.3.3", + "@grafana/tsconfig": "^1.3.0-rc1", + "copy-webpack-plugin": "12.0.2", + "eslint-webpack-plugin": "4.1.0", + "fork-ts-checker-webpack-plugin": "9.0.2", + "glob": "10.3.10", "replace-in-file-webpack-plugin": "1.0.6", - "swc-loader": "0.2.3", - "webpack": "5.89.0" + "swc-loader": "0.2.6", + "webpack": "5.90.3" }, - "packageManager": "yarn@3.6.0" + "packageManager": "yarn@4.1.0" } diff --git a/packages/grafana-plugin-configs/webpack.config.ts b/packages/grafana-plugin-configs/webpack.config.ts index ce38d1090f8b2..6722a506f7004 100644 --- a/packages/grafana-plugin-configs/webpack.config.ts +++ b/packages/grafana-plugin-configs/webpack.config.ts @@ -17,6 +17,10 @@ function skipFiles(f: string): boolean { // avoid copying tsconfig.json return false; } + if (f.includes('/package.json')) { + // avoid copying package.json + return false; + } return true; } @@ -28,7 +32,7 @@ const config = async (env: Record): Promise => { buildDependencies: { config: [__filename], }, - cacheDirectory: path.resolve(__dirname, '../../.yarn/.cache/webpack', path.basename(process.cwd())), + cacheDirectory: path.resolve(__dirname, '../../node_modules/.cache/webpack', path.basename(process.cwd())), }, context: process.cwd(), @@ -86,7 +90,7 @@ const config = async (env: Record): Promise => { loader: require.resolve('swc-loader'), options: { jsc: { - baseUrl: '.', + baseUrl: path.resolve(__dirname), target: 'es2015', loose: false, parser: { @@ -140,6 +144,7 @@ const config = async (env: Record): Promise => { }, path: path.resolve(process.cwd(), DIST_DIR), publicPath: `public/plugins/${pluginJson.id}/`, + uniqueName: pluginJson.id, }, plugins: [ @@ -179,18 +184,6 @@ const config = async (env: Record): Promise => { }, ], }, - { - dir: path.resolve(DIST_DIR), - files: ['package.json'], - rules: [ - { - search: `"version": "${getPackageJson().version}"`, - replace: env.commit - ? `"version": "${getPackageJson().version}-${env.commit}"` - : `"version": "${getPackageJson().version}"`, - }, - ], - }, ]), env.development ? new ForkTsCheckerWebpackPlugin({ @@ -207,7 +200,7 @@ const config = async (env: Record): Promise => { lintDirtyModulesOnly: true, // don't lint on start, only lint changed files cacheLocation: path.resolve( __dirname, - '../../.yarn/.cache/eslint-webpack-plugin', + '../../node_modules/.cache/eslint-webpack-plugin', path.basename(process.cwd()), '.eslintcache' ), @@ -220,6 +213,8 @@ const config = async (env: Record): Promise => { unsafeCache: true, }, + stats: 'minimal', + watchOptions: { ignored: ['**/node_modules', '**/dist', '**/.yarn'], }, diff --git a/packages/grafana-prometheus/CHANGELOG.md b/packages/grafana-prometheus/CHANGELOG.md new file mode 100644 index 0000000000000..8d0fac75805ea --- /dev/null +++ b/packages/grafana-prometheus/CHANGELOG.md @@ -0,0 +1,3 @@ +# (2024-02-16) + +First public release. This release provides Prometheus exports in Grafana. Please be aware this is in the alpha state and there is likely to be breaking changes. diff --git a/packages/grafana-prometheus/LICENSE_AGPL b/packages/grafana-prometheus/LICENSE_AGPL new file mode 100644 index 0000000000000..be3f7b28e564e --- /dev/null +++ b/packages/grafana-prometheus/LICENSE_AGPL @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/packages/grafana-prometheus/README.md b/packages/grafana-prometheus/README.md new file mode 100644 index 0000000000000..efbdb5791e11a --- /dev/null +++ b/packages/grafana-prometheus/README.md @@ -0,0 +1,13 @@ +# Grafana Prometheus Library + +> **@grafana/prometheus is currently in ALPHA**. + +@grafana/prometheus is a collection of components used to build a Prometheus data source plugin in [Grafana](https://github.com/grafana/grafana). + +See [package source](https://github.com/grafana/grafana/tree/main/packages/grafana-prometheus) for more details. + +## Installation + +`yarn add @grafana/prometheus` + +`npm install @grafana/prometheus` diff --git a/packages/grafana-prometheus/package.json b/packages/grafana-prometheus/package.json new file mode 100644 index 0000000000000..6502a948ac3aa --- /dev/null +++ b/packages/grafana-prometheus/package.json @@ -0,0 +1,150 @@ +{ + "author": "Grafana Labs", + "license": "AGPL-3.0-only", + "name": "@grafana/prometheus", + "version": "11.0.0-pre", + "description": "Grafana Prometheus Library", + "keywords": [ + "typescript" + ], + "sideEffects": false, + "repository": { + "type": "git", + "url": "http://github.com/grafana/grafana.git", + "directory": "packages/grafana-prometheus" + }, + "main": "src/index.ts", + "types": "src/index.ts", + "files": [ + "./dist", + "./README.md", + "./CHANGELOG.md", + "./LICENSE_AGPL" + ], + "publishConfig": { + "main": "dist/index.js", + "module": "dist/esm/index.js", + "types": "dist/index.d.ts", + "access": "public" + }, + "scripts": { + "build": "tsc -p ./tsconfig.build.json && rollup -c rollup.config.ts", + "bundle": "rollup -c rollup.config.ts", + "clean": "rimraf ./dist ./compiled ./package.tgz", + "typecheck": "tsc --emitDeclarationOnly false --noEmit", + "prepack": "cp package.json package.json.bak && node ../../scripts/prepare-packagejson.js", + "postpack": "mv package.json.bak package.json" + }, + "dependencies": { + "@emotion/css": "11.11.2", + "@floating-ui/react": "0.26.9", + "@grafana/data": "11.0.0-pre", + "@grafana/experimental": "1.7.10", + "@grafana/faro-web-sdk": "1.4.2", + "@grafana/runtime": "11.0.0-pre", + "@grafana/schema": "11.0.0-pre", + "@grafana/ui": "11.0.0-pre", + "@leeoniya/ufuzzy": "1.0.14", + "@lezer/common": "1.2.1", + "@lezer/highlight": "1.2.0", + "@lezer/lr": "1.3.3", + "@prometheus-io/lezer-promql": "^0.37.0-rc.1", + "@reduxjs/toolkit": "1.9.5", + "d3": "7.9.0", + "date-fns": "3.5.0", + "debounce-promise": "3.1.2", + "eventemitter3": "5.0.1", + "lodash": "4.17.21", + "lru-cache": "10.2.0", + "marked": "12.0.1", + "marked-mangle": "1.1.7", + "moment": "2.30.1", + "moment-timezone": "0.5.45", + "monaco-promql": "1.7.4", + "pluralize": "8.0.0", + "prismjs": "1.29.0", + "react-beautiful-dnd": "13.1.1", + "react-highlight-words": "0.20.0", + "react-select": "5.8.0", + "react-use": "17.5.0", + "react-window": "1.8.10", + "rxjs": "7.8.1", + "semver": "7.6.0", + "tslib": "2.6.2", + "uuid": "9.0.1", + "whatwg-fetch": "3.6.20" + }, + "devDependencies": { + "@emotion/eslint-plugin": "11.11.0", + "@grafana/e2e": "11.0.0-pre", + "@grafana/e2e-selectors": "11.0.0-pre", + "@grafana/tsconfig": "^1.3.0-rc1", + "@rollup/plugin-image": "3.0.3", + "@rollup/plugin-node-resolve": "15.2.3", + "@swc/core": "1.4.2", + "@swc/helpers": "0.5.6", + "@testing-library/dom": "9.3.4", + "@testing-library/jest-dom": "6.4.2", + "@testing-library/react": "14.2.1", + "@testing-library/user-event": "14.5.2", + "@types/d3": "7.4.3", + "@types/debounce-promise": "3.1.9", + "@types/eslint": "8.56.5", + "@types/jest": "29.5.12", + "@types/jquery": "3.5.29", + "@types/lodash": "4.17.0", + "@types/marked": "5.0.2", + "@types/node": "20.11.28", + "@types/pluralize": "^0.0.33", + "@types/prismjs": "1.26.3", + "@types/react": "18.2.66", + "@types/react-beautiful-dnd": "13.1.8", + "@types/react-dom": "18.2.22", + "@types/react-highlight-words": "0.16.7", + "@types/react-window": "1.8.8", + "@types/semver": "7.5.8", + "@types/testing-library__jest-dom": "5.14.9", + "@types/uuid": "9.0.8", + "@typescript-eslint/eslint-plugin": "6.21.0", + "@typescript-eslint/parser": "6.21.0", + "copy-webpack-plugin": "12.0.2", + "css-loader": "6.10.0", + "esbuild": "0.18.12", + "eslint": "8.57.0", + "eslint-config-prettier": "9.1.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jest": "27.9.0", + "eslint-plugin-jsdoc": "48.2.1", + "eslint-plugin-jsx-a11y": "6.8.0", + "eslint-plugin-lodash": "7.4.0", + "eslint-plugin-react": "7.34.0", + "eslint-plugin-react-hooks": "4.6.0", + "eslint-webpack-plugin": "4.1.0", + "fork-ts-checker-webpack-plugin": "9.0.2", + "glob": "10.3.10", + "jest": "29.7.0", + "jest-environment-jsdom": "29.7.0", + "jest-matcher-utils": "29.7.0", + "prettier": "3.2.5", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-select-event": "5.5.1", + "react-test-renderer": "18.2.0", + "rollup": "2.79.1", + "rollup-plugin-dts": "^5.0.0", + "rollup-plugin-esbuild": "5.0.0", + "rollup-plugin-node-externals": "^5.0.0", + "sass": "1.70.0", + "sass-loader": "14.1.1", + "style-loader": "3.3.4", + "testing-library-selector": "0.3.1", + "ts-node": "10.9.2", + "typescript": "5.3.3", + "webpack": "5.90.3", + "webpack-cli": "5.1.4" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } +} diff --git a/packages/grafana-prometheus/rollup.config.ts b/packages/grafana-prometheus/rollup.config.ts new file mode 100644 index 0000000000000..080514c27d5d5 --- /dev/null +++ b/packages/grafana-prometheus/rollup.config.ts @@ -0,0 +1,38 @@ +import image from '@rollup/plugin-image'; +import resolve from '@rollup/plugin-node-resolve'; +import path from 'path'; +import dts from 'rollup-plugin-dts'; +import esbuild from 'rollup-plugin-esbuild'; +import { externals } from 'rollup-plugin-node-externals'; + +const pkg = require('./package.json'); + +export default [ + { + input: 'src/index.ts', + plugins: [externals({ deps: true, packagePath: './package.json' }), resolve(), esbuild(), image()], + output: [ + { + format: 'cjs', + sourcemap: true, + dir: path.dirname(pkg.publishConfig.main), + }, + { + format: 'esm', + sourcemap: true, + dir: path.dirname(pkg.publishConfig.module), + preserveModules: true, + // @ts-expect-error (TS cannot assure that `process.env.PROJECT_CWD` is a string) + preserveModulesRoot: path.join(process.env.PROJECT_CWD, `packages/grafana-prometheus/src`), + }, + ], + }, + { + input: './compiled/index.d.ts', + plugins: [dts()], + output: { + file: pkg.publishConfig.types, + format: 'es', + }, + }, +]; diff --git a/packages/grafana-prometheus/src/add_label_to_query.test.ts b/packages/grafana-prometheus/src/add_label_to_query.test.ts new file mode 100644 index 0000000000000..08c32e3c39896 --- /dev/null +++ b/packages/grafana-prometheus/src/add_label_to_query.test.ts @@ -0,0 +1,114 @@ +import { addLabelToQuery } from './add_label_to_query'; + +describe('addLabelToQuery()', () => { + it('should add label to simple query', () => { + expect(() => { + addLabelToQuery('foo', '', ''); + }).toThrow(); + expect(addLabelToQuery('foo', 'bar', 'baz')).toBe('foo{bar="baz"}'); + expect(addLabelToQuery('foo{}', 'bar', 'baz')).toBe('foo{bar="baz"}'); + expect(addLabelToQuery('foo{x="yy"}', 'bar', 'baz')).toBe('foo{x="yy", bar="baz"}'); + expect(addLabelToQuery('metric > 0.001', 'foo', 'bar')).toBe('metric{foo="bar"} > 0.001'); + }); + + it('should add custom operator', () => { + expect(addLabelToQuery('foo{}', 'bar', 'baz', '!=')).toBe('foo{bar!="baz"}'); + expect(addLabelToQuery('foo{x="yy"}', 'bar', 'baz', '!=')).toBe('foo{x="yy", bar!="baz"}'); + }); + + it('should not modify ranges', () => { + expect(addLabelToQuery('rate(metric[1m])', 'foo', 'bar')).toBe('rate(metric{foo="bar"}[1m])'); + }); + + it('should detect in-order function use', () => { + expect(addLabelToQuery('sum by (xx) (foo)', 'bar', 'baz')).toBe('sum by (xx) (foo{bar="baz"})'); + }); + + it('should convert number Infinity to +Inf', () => { + expect( + addLabelToQuery('sum(rate(prometheus_tsdb_compaction_chunk_size_bytes_bucket[5m])) by (le)', 'le', Infinity) + ).toBe('sum(rate(prometheus_tsdb_compaction_chunk_size_bytes_bucket{le="+Inf"}[5m])) by (le)'); + }); + + it('should handle selectors with punctuation', () => { + expect(addLabelToQuery('foo{instance="my-host.com:9100"}', 'bar', 'baz')).toBe( + 'foo{instance="my-host.com:9100", bar="baz"}' + ); + expect(addLabelToQuery('foo:metric:rate1m', 'bar', 'baz')).toBe('foo:metric:rate1m{bar="baz"}'); + expect(addLabelToQuery('avg(foo:metric:rate1m{a="b"})', 'bar', 'baz')).toBe( + 'avg(foo:metric:rate1m{a="b", bar="baz"})' + ); + expect(addLabelToQuery('foo{list="a,b,c"}', 'bar', 'baz')).toBe('foo{list="a,b,c", bar="baz"}'); + }); + + it('should work on arithmetical expressions', () => { + expect(addLabelToQuery('foo + foo', 'bar', 'baz')).toBe('foo{bar="baz"} + foo{bar="baz"}'); + expect(addLabelToQuery('foo{x="yy"} + metric', 'bar', 'baz')).toBe('foo{x="yy", bar="baz"} + metric{bar="baz"}'); + expect(addLabelToQuery('avg(foo) + sum(xx_yy)', 'bar', 'baz')).toBe('avg(foo{bar="baz"}) + sum(xx_yy{bar="baz"})'); + expect(addLabelToQuery('foo{x="yy"} * metric{y="zz",a="bb"} * metric2', 'bar', 'baz')).toBe( + 'foo{x="yy", bar="baz"} * metric{y="zz", a="bb", bar="baz"} * metric2{bar="baz"}' + ); + }); + + it('should not add duplicate labels to a query', () => { + expect(addLabelToQuery(addLabelToQuery('foo{x="yy"}', 'bar', 'baz', '!='), 'bar', 'baz', '!=')).toBe( + 'foo{x="yy", bar!="baz"}' + ); + expect(addLabelToQuery(addLabelToQuery('rate(metric[1m])', 'foo', 'bar'), 'foo', 'bar')).toBe( + 'rate(metric{foo="bar"}[1m])' + ); + expect(addLabelToQuery(addLabelToQuery('foo{list="a,b,c"}', 'bar', 'baz'), 'bar', 'baz')).toBe( + 'foo{list="a,b,c", bar="baz"}' + ); + expect(addLabelToQuery(addLabelToQuery('avg(foo) + sum(xx_yy)', 'bar', 'baz'), 'bar', 'baz')).toBe( + 'avg(foo{bar="baz"}) + sum(xx_yy{bar="baz"})' + ); + }); + + it('should not remove filters', () => { + expect(addLabelToQuery('{x="y"} |="yy"', 'bar', 'baz')).toBe('{x="y", bar="baz"} |="yy"'); + expect(addLabelToQuery('{x="y"} |="yy" !~"xx"', 'bar', 'baz')).toBe('{x="y", bar="baz"} |="yy" !~"xx"'); + }); + + it('should add labels to metrics with logical operators', () => { + expect(addLabelToQuery('foo_info or bar_info', 'bar', 'baz')).toBe('foo_info{bar="baz"} or bar_info{bar="baz"}'); + expect(addLabelToQuery('foo_info and bar_info', 'bar', 'baz')).toBe('foo_info{bar="baz"} and bar_info{bar="baz"}'); + }); + + it('should not add ad-hoc filter to template variables', () => { + expect(addLabelToQuery('sum(rate({job="foo"}[2m])) by (value $variable)', 'bar', 'baz')).toBe( + 'sum(rate({job="foo", bar="baz"}[2m])) by (value $variable)' + ); + }); + + it('should not add ad-hoc filter to range', () => { + expect(addLabelToQuery('avg(rate((my_metric{job="foo"} > 0)[3h:])) by (label)', 'bar', 'baz')).toBe( + 'avg(rate((my_metric{job="foo", bar="baz"} > 0)[3h:])) by (label)' + ); + }); + it('should not add ad-hoc filter to labels in label list provided with the group modifier', () => { + expect( + addLabelToQuery( + 'max by (id, name, type) (my_metric{type=~"foo|bar|baz-test"}) * on(id) group_right(id, type, name) sum by (id) (my_metric) * 1000', + 'bar', + 'baz' + ) + ).toBe( + 'max by (id, name, type) (my_metric{type=~"foo|bar|baz-test", bar="baz"}) * on(id) group_right(id, type, name) sum by (id) (my_metric{bar="baz"}) * 1000' + ); + }); + it('should not add ad-hoc filter to labels in label list provided with the group modifier', () => { + expect(addLabelToQuery('rate(my_metric[${__range_s}s])', 'bar', 'baz')).toBe( + 'rate(my_metric{bar="baz"}[${__range_s}s])' + ); + }); + it('should not add ad-hoc filter to labels to math operations', () => { + expect(addLabelToQuery('count(my_metric{job!="foo"} < (5*1024*1024*1024) or vector(0)) - 1', 'bar', 'baz')).toBe( + 'count(my_metric{job!="foo", bar="baz"} < (5*1024*1024*1024) or vector(0)) - 1' + ); + }); + + it('should not add ad-hoc filter bool operator', () => { + expect(addLabelToQuery('ALERTS < bool 1', 'bar', 'baz')).toBe('ALERTS{bar="baz"} < bool 1'); + }); +}); diff --git a/packages/grafana-prometheus/src/add_label_to_query.ts b/packages/grafana-prometheus/src/add_label_to_query.ts new file mode 100644 index 0000000000000..696e0cbb8dcf5 --- /dev/null +++ b/packages/grafana-prometheus/src/add_label_to_query.ts @@ -0,0 +1,100 @@ +import { parser, VectorSelector } from '@prometheus-io/lezer-promql'; + +import { PromQueryModeller } from './querybuilder/PromQueryModeller'; +import { buildVisualQueryFromString } from './querybuilder/parsing'; +import { QueryBuilderLabelFilter } from './querybuilder/shared/types'; +import { PromVisualQuery } from './querybuilder/types'; + +/** + * Adds label filter to existing query. Useful for query modification for example for ad hoc filters. + * + * It uses PromQL parser to find instances of metric and labels, alters them and then splices them back into the query. + * Ideally we could use the parse -> change -> render is a simple 3 steps but right now building the visual query + * object does not support all possible queries. + * + * So instead this just operates on substrings of the query with labels and operates just on those. This makes this + * more robust and can alter even invalid queries, and preserves in general the query structure and whitespace. + * @param query + * @param key + * @param value + * @param operator + */ +export function addLabelToQuery(query: string, key: string, value: string | number, operator = '='): string { + if (!key || !value) { + throw new Error('Need label to add to query.'); + } + + const vectorSelectorPositions = getVectorSelectorPositions(query); + if (!vectorSelectorPositions.length) { + return query; + } + + const filter = toLabelFilter(key, value, operator); + return addFilter(query, vectorSelectorPositions, filter); +} + +type VectorSelectorPosition = { from: number; to: number; query: PromVisualQuery }; + +/** + * Parse the string and get all VectorSelector positions in the query together with parsed representation of the vector + * selector. + * @param query + */ +function getVectorSelectorPositions(query: string): VectorSelectorPosition[] { + const tree = parser.parse(query); + const positions: VectorSelectorPosition[] = []; + tree.iterate({ + enter: ({ to, from, type }): false | void => { + if (type.id === VectorSelector) { + const visQuery = buildVisualQueryFromString(query.substring(from, to)); + positions.push({ query: visQuery.query, from, to }); + return false; + } + }, + }); + return positions; +} + +function toLabelFilter(key: string, value: string | number, operator: string): QueryBuilderLabelFilter { + // We need to make sure that we convert the value back to string because it may be a number + const transformedValue = value === Infinity ? '+Inf' : value.toString(); + return { label: key, op: operator, value: transformedValue }; +} + +function addFilter( + query: string, + vectorSelectorPositions: VectorSelectorPosition[], + filter: QueryBuilderLabelFilter +): string { + const modeller = new PromQueryModeller(); + let newQuery = ''; + let prev = 0; + + for (let i = 0; i < vectorSelectorPositions.length; i++) { + // This is basically just doing splice on a string for each matched vector selector. + + const match = vectorSelectorPositions[i]; + const isLast = i === vectorSelectorPositions.length - 1; + + const start = query.substring(prev, match.from); + const end = isLast ? query.substring(match.to) : ''; + + if (!labelExists(match.query.labels, filter)) { + // We don't want to add duplicate labels. + match.query.labels.push(filter); + } + const newLabels = modeller.renderQuery(match.query); + newQuery += start + newLabels + end; + prev = match.to; + } + return newQuery; +} + +/** + * Check if label exists in the list of labels but ignore the operator. + * @param labels + * @param filter + */ +function labelExists(labels: QueryBuilderLabelFilter[], filter: QueryBuilderLabelFilter) { + return labels.find((label) => label.label === filter.label && label.value === filter.value); +} diff --git a/packages/grafana-prometheus/src/components/AnnotationQueryEditor.tsx b/packages/grafana-prometheus/src/components/AnnotationQueryEditor.tsx new file mode 100644 index 0000000000000..0cbaf5978cdd9 --- /dev/null +++ b/packages/grafana-prometheus/src/components/AnnotationQueryEditor.tsx @@ -0,0 +1,139 @@ +import React from 'react'; + +import { AnnotationQuery } from '@grafana/data'; +import { selectors } from '@grafana/e2e-selectors'; +import { EditorField, EditorRow, EditorRows, EditorSwitch } from '@grafana/experimental'; +import { AutoSizeInput, Input, Space } from '@grafana/ui'; + +import { PromQueryCodeEditor } from '../querybuilder/components/PromQueryCodeEditor'; +import { PromQuery } from '../types'; + +import { PromQueryEditorProps } from './types'; + +type Props = PromQueryEditorProps & { + annotation?: AnnotationQuery; + onAnnotationChange?: (annotation: AnnotationQuery) => void; +}; + +export function AnnotationQueryEditor(props: Props) { + // This is because of problematic typing. See AnnotationQueryEditorProps in grafana-data/annotations.ts. + const annotation = props.annotation!; + const onAnnotationChange = props.onAnnotationChange!; + const query = { expr: annotation.expr, refId: annotation.name, interval: annotation.step }; + + return ( + <> + + { + onAnnotationChange({ + ...annotation, + expr: query.expr, + }); + }} + /> + + + An additional lower limit for the step parameter of the Prometheus query and for the{' '} + $__interval and $__rate_interval variables. + + } + > + { + onAnnotationChange({ + ...annotation, + step: ev.currentTarget.value, + }); + }} + defaultValue={query.interval} + id={selectors.components.DataSource.Prometheus.annotations.minStep} + /> + + + + + + + { + onAnnotationChange({ + ...annotation, + titleFormat: event.currentTarget.value, + }); + }} + data-testid={selectors.components.DataSource.Prometheus.annotations.title} + /> + + + { + onAnnotationChange({ + ...annotation, + tagKeys: event.currentTarget.value, + }); + }} + data-testid={selectors.components.DataSource.Prometheus.annotations.tags} + /> + + + { + onAnnotationChange({ + ...annotation, + textFormat: event.currentTarget.value, + }); + }} + data-testid={selectors.components.DataSource.Prometheus.annotations.text} + /> + + + { + onAnnotationChange({ + ...annotation, + useValueForTime: event.currentTarget.value, + }); + }} + data-testid={selectors.components.DataSource.Prometheus.annotations.seriesValueAsTimestamp} + /> + + + + ); +} diff --git a/packages/grafana-prometheus/src/components/PromCheatSheet.tsx b/packages/grafana-prometheus/src/components/PromCheatSheet.tsx new file mode 100644 index 0000000000000..347d65473011a --- /dev/null +++ b/packages/grafana-prometheus/src/components/PromCheatSheet.tsx @@ -0,0 +1,50 @@ +import React from 'react'; + +import { QueryEditorHelpProps } from '@grafana/data'; + +import { PromQuery } from '../types'; + +const CHEAT_SHEET_ITEMS = [ + { + title: 'Request Rate', + expression: 'rate(http_request_total[5m])', + label: + 'Given an HTTP request counter, this query calculates the per-second average request rate over the last 5 minutes.', + }, + { + title: '95th Percentile of Request Latencies', + expression: 'histogram_quantile(0.95, sum(rate(prometheus_http_request_duration_seconds_bucket[5m])) by (le))', + label: 'Calculates the 95th percentile of HTTP request rate over 5 minute windows.', + }, + { + title: 'Alerts Firing', + expression: 'sort_desc(sum(sum_over_time(ALERTS{alertstate="firing"}[24h])) by (alertname))', + label: 'Sums up the alerts that have been firing over the last 24 hours.', + }, + { + title: 'Step', + label: + 'Defines the graph resolution using a duration format (15s, 1m, 3h, ...). Small steps create high-resolution graphs but can be slow over larger time ranges. Using a longer step lowers the resolution and smooths the graph by producing fewer datapoints. If no step is given the resolution is calculated automatically.', + }, +]; + +export const PromCheatSheet = (props: QueryEditorHelpProps) => ( +
+

PromQL Cheat Sheet

+ {CHEAT_SHEET_ITEMS.map((item, index) => ( +
+
{item.title}
+ {item.expression ? ( + + ) : null} +
{item.label}
+
+ ))} +
+); diff --git a/packages/grafana-prometheus/src/components/PromExemplarField.tsx b/packages/grafana-prometheus/src/components/PromExemplarField.tsx new file mode 100644 index 0000000000000..e09a6260c98b1 --- /dev/null +++ b/packages/grafana-prometheus/src/components/PromExemplarField.tsx @@ -0,0 +1,79 @@ +import { css, cx } from '@emotion/css'; +import React, { useEffect, useState } from 'react'; +import { usePrevious } from 'react-use'; + +import { GrafanaTheme2 } from '@grafana/data'; +import { IconButton, InlineLabel, Tooltip, useStyles2 } from '@grafana/ui'; + +import { PrometheusDatasource } from '../datasource'; +import { PromQuery } from '../types'; + +interface Props { + onChange: (exemplar: boolean) => void; + datasource: PrometheusDatasource; + query: PromQuery; + 'data-testid'?: string; +} + +export function PromExemplarField({ datasource, onChange, query, ...rest }: Props) { + const [error, setError] = useState(null); + const styles = useStyles2(getStyles); + const prevError = usePrevious(error); + + useEffect(() => { + if (!datasource.exemplarsAvailable) { + setError('Exemplars for this query are not available'); + onChange(false); + } else if (query.instant && !query.range) { + setError('Exemplars are not available for instant queries'); + onChange(false); + } else { + setError(null); + // If error is cleared, we want to change exemplar to true + if (prevError && !error) { + onChange(true); + } + } + }, [datasource.exemplarsAvailable, query.instant, query.range, onChange, prevError, error]); + + const iconButtonStyles = cx( + { + [styles.activeIcon]: !!query.exemplar, + }, + styles.eyeIcon + ); + + return ( + + +
+ Exemplars + { + onChange(!query.exemplar); + }} + /> +
+
+
+ ); +} + +function getStyles(theme: GrafanaTheme2) { + return { + eyeIcon: css` + margin-left: ${theme.spacing(2)}; + `, + activeIcon: css` + color: ${theme.colors.primary.main}; + `, + iconWrapper: css` + display: flex; + align-items: center; + `, + }; +} diff --git a/packages/grafana-prometheus/src/components/PromExploreExtraField.test.tsx b/packages/grafana-prometheus/src/components/PromExploreExtraField.test.tsx new file mode 100644 index 0000000000000..4c22e2f16f204 --- /dev/null +++ b/packages/grafana-prometheus/src/components/PromExploreExtraField.test.tsx @@ -0,0 +1,41 @@ +import { render, screen } from '@testing-library/react'; +import React from 'react'; + +import { PrometheusDatasource } from '../datasource'; +import { PromQuery } from '../types'; + +import { + PromExploreExtraField, + PromExploreExtraFieldProps, + promExploreExtraFieldTestIds, +} from './PromExploreExtraField'; + +const setup = (propOverrides?: PromExploreExtraFieldProps) => { + const query = { exemplar: false } as PromQuery; + const datasource = {} as PrometheusDatasource; + const onChange = jest.fn(); + const onRunQuery = jest.fn(); + + const props: PromExploreExtraFieldProps = { + onChange, + onRunQuery, + query, + datasource, + }; + + Object.assign(props, propOverrides); + + return render(); +}; + +describe('PromExploreExtraField', () => { + it('should render step field', () => { + setup(); + expect(screen.getByTestId(promExploreExtraFieldTestIds.stepField)).toBeInTheDocument(); + }); + + it('should render query type field', () => { + setup(); + expect(screen.getByTestId(promExploreExtraFieldTestIds.queryTypeField)).toBeInTheDocument(); + }); +}); diff --git a/packages/grafana-prometheus/src/components/PromExploreExtraField.tsx b/packages/grafana-prometheus/src/components/PromExploreExtraField.tsx new file mode 100644 index 0000000000000..c9ad0a79e36b8 --- /dev/null +++ b/packages/grafana-prometheus/src/components/PromExploreExtraField.tsx @@ -0,0 +1,145 @@ +import { css, cx } from '@emotion/css'; +import { isEqual } from 'lodash'; +import React, { memo, useCallback } from 'react'; +import { usePrevious } from 'react-use'; + +import { InlineFormLabel, RadioButtonGroup } from '@grafana/ui'; + +import { PrometheusDatasource } from '../datasource'; +import { PromQuery } from '../types'; + +import { PromExemplarField } from './PromExemplarField'; + +export interface PromExploreExtraFieldProps { + query: PromQuery; + onChange: (value: PromQuery) => void; + onRunQuery: () => void; + datasource: PrometheusDatasource; +} + +export const PromExploreExtraField = memo(({ query, datasource, onChange, onRunQuery }: PromExploreExtraFieldProps) => { + const rangeOptions = getQueryTypeOptions(true); + const prevQuery = usePrevious(query); + + const onExemplarChange = useCallback( + (exemplar: boolean) => { + if (!isEqual(query, prevQuery) || exemplar !== query.exemplar) { + onChange({ ...query, exemplar }); + } + }, + [prevQuery, query, onChange] + ); + + function onChangeQueryStep(interval: string) { + onChange({ ...query, interval }); + } + + function onStepChange(e: React.SyntheticEvent) { + if (e.currentTarget.value !== query.interval) { + onChangeQueryStep(e.currentTarget.value); + } + } + + function onReturnKeyDown(e: React.KeyboardEvent) { + if (e.key === 'Enter' && e.shiftKey) { + onRunQuery(); + } + } + + const onQueryTypeChange = getQueryTypeChangeHandler(query, onChange); + + return ( +
+ {/*Query type field*/} +
+ Query type + + +
+ {/*Step field*/} +
+ + Min step + + +
+ + +
+ ); +}); + +PromExploreExtraField.displayName = 'PromExploreExtraField'; + +export function getQueryTypeOptions(includeBoth: boolean) { + const rangeOptions = [ + { value: 'range', label: 'Range', description: 'Run query over a range of time' }, + { + value: 'instant', + label: 'Instant', + description: 'Run query against a single point in time. For this query, the "To" time is used', + }, + ]; + + if (includeBoth) { + rangeOptions.push({ value: 'both', label: 'Both', description: 'Run an Instant query and a Range query' }); + } + + return rangeOptions; +} + +export function getQueryTypeChangeHandler(query: PromQuery, onChange: (update: PromQuery) => void) { + return (queryType: string) => { + if (queryType === 'instant') { + onChange({ ...query, instant: true, range: false, exemplar: false }); + } else if (queryType === 'range') { + onChange({ ...query, instant: false, range: true }); + } else { + onChange({ ...query, instant: true, range: true }); + } + }; +} + +export const promExploreExtraFieldTestIds = { + extraFieldEditor: 'prom-editor-extra-field', + stepField: 'prom-editor-extra-field-step', + queryTypeField: 'prom-editor-extra-field-query-type', +}; diff --git a/packages/grafana-prometheus/src/components/PromQueryEditorByApp.test.tsx b/packages/grafana-prometheus/src/components/PromQueryEditorByApp.test.tsx new file mode 100644 index 0000000000000..832cc37355fb2 --- /dev/null +++ b/packages/grafana-prometheus/src/components/PromQueryEditorByApp.test.tsx @@ -0,0 +1,83 @@ +import { render, screen } from '@testing-library/react'; +import { noop } from 'lodash'; +import React from 'react'; + +import { CoreApp } from '@grafana/data'; + +import { PrometheusDatasource } from '../datasource'; + +import { PromQueryEditorByApp } from './PromQueryEditorByApp'; +import { alertingTestIds } from './PromQueryEditorForAlerting'; +import { Props } from './monaco-query-field/MonacoQueryFieldProps'; + +// the monaco-based editor uses lazy-loading and that does not work +// well with this test, and we do not need the monaco-related +// functionality in this test anyway, so we mock it out. +jest.mock('./monaco-query-field/MonacoQueryFieldLazy', () => { + const fakeQueryField = (props: Props) => { + return props.onBlur(e.currentTarget.value)} data-testid={'dummy-code-input'} type={'text'} />; + }; + return { + MonacoQueryFieldLazy: fakeQueryField, + }; +}); + +function setup(app: CoreApp): { onRunQuery: jest.Mock } { + const dataSource = { + createQuery: jest.fn((q) => q), + getInitHints: () => [], + getPrometheusTime: jest.fn((date, roundup) => 123), + getQueryHints: jest.fn(() => []), + getDebounceTimeInMilliseconds: jest.fn(() => 300), + languageProvider: { + start: () => Promise.resolve([]), + syntax: () => {}, + getLabelKeys: () => [], + metrics: [], + }, + } as unknown as PrometheusDatasource; + const onRunQuery = jest.fn(); + + render( + + ); + + return { + onRunQuery, + }; +} + +describe('PromQueryEditorByApp', () => { + it('should render simplified query editor for cloud alerting', async () => { + setup(CoreApp.CloudAlerting); + + expect(await screen.findByTestId(alertingTestIds.editor)).toBeInTheDocument(); + }); + + it('should render editor selector for unkown apps', () => { + setup(CoreApp.Unknown); + + expect(screen.getByTestId('QueryEditorModeToggle')).toBeInTheDocument(); + expect(screen.queryByTestId(alertingTestIds.editor)).toBeNull(); + }); + + it('should render editor selector for explore', () => { + setup(CoreApp.Explore); + + expect(screen.getByTestId('QueryEditorModeToggle')).toBeInTheDocument(); + expect(screen.queryByTestId(alertingTestIds.editor)).toBeNull(); + }); + + it('should render editor selector for dashboard', () => { + setup(CoreApp.Dashboard); + + expect(screen.getByTestId('QueryEditorModeToggle')).toBeInTheDocument(); + expect(screen.queryByTestId(alertingTestIds.editor)).toBeNull(); + }); +}); diff --git a/packages/grafana-prometheus/src/components/PromQueryEditorByApp.tsx b/packages/grafana-prometheus/src/components/PromQueryEditorByApp.tsx new file mode 100644 index 0000000000000..843bb30284ab6 --- /dev/null +++ b/packages/grafana-prometheus/src/components/PromQueryEditorByApp.tsx @@ -0,0 +1,21 @@ +import React, { memo } from 'react'; + +import { CoreApp } from '@grafana/data'; + +import { PromQueryEditorSelector } from '../querybuilder/components/PromQueryEditorSelector'; + +import { PromQueryEditorForAlerting } from './PromQueryEditorForAlerting'; +import { PromQueryEditorProps } from './types'; + +function PromQueryEditorByAppBase(props: PromQueryEditorProps) { + const { app } = props; + + switch (app) { + case CoreApp.CloudAlerting: + return ; + default: + return ; + } +} + +export const PromQueryEditorByApp = memo(PromQueryEditorByAppBase); diff --git a/packages/grafana-prometheus/src/components/PromQueryEditorForAlerting.tsx b/packages/grafana-prometheus/src/components/PromQueryEditorForAlerting.tsx new file mode 100644 index 0000000000000..5adac3afeb518 --- /dev/null +++ b/packages/grafana-prometheus/src/components/PromQueryEditorForAlerting.tsx @@ -0,0 +1,25 @@ +import React from 'react'; + +import { PromQueryField } from './PromQueryField'; +import { PromQueryEditorProps } from './types'; + +export function PromQueryEditorForAlerting(props: PromQueryEditorProps) { + const { datasource, query, range, data, onChange, onRunQuery } = props; + + return ( + + ); +} + +export const alertingTestIds = { + editor: 'prom-editor-cloud-alerting', +}; diff --git a/packages/grafana-prometheus/src/components/PromQueryField.test.tsx b/packages/grafana-prometheus/src/components/PromQueryField.test.tsx new file mode 100644 index 0000000000000..700f73574d5f7 --- /dev/null +++ b/packages/grafana-prometheus/src/components/PromQueryField.test.tsx @@ -0,0 +1,183 @@ +import { getByTestId, render, screen, waitFor } from '@testing-library/react'; +// @ts-ignore +import userEvent from '@testing-library/user-event'; +import React from 'react'; + +import { CoreApp, DataFrame, LoadingState, PanelData } from '@grafana/data'; + +import { PrometheusDatasource } from '../datasource'; +import PromQlLanguageProvider from '../language_provider'; + +import { PromQueryField } from './PromQueryField'; +import { Props } from './monaco-query-field/MonacoQueryFieldProps'; + +// the monaco-based editor uses lazy-loading and that does not work +// well with this test, and we do not need the monaco-related +// functionality in this test anyway, so we mock it out. +jest.mock('./monaco-query-field/MonacoQueryFieldLazy', () => { + const fakeQueryField = (props: Props) => { + return props.onBlur(e.currentTarget.value)} data-testid={'dummy-code-input'} type={'text'} />; + }; + return { + MonacoQueryFieldLazy: fakeQueryField, + }; +}); + +const defaultProps = { + datasource: { + languageProvider: { + start: () => Promise.resolve([]), + syntax: () => {}, + getLabelKeys: () => [], + metrics: [], + }, + getInitHints: () => [], + } as unknown as PrometheusDatasource, + query: { + expr: '', + refId: '', + }, + onRunQuery: () => {}, + onChange: () => {}, + history: [], +}; + +describe('PromQueryField', () => { + beforeAll(() => { + // @ts-ignore + window.getSelection = () => {}; + }); + + it('renders metrics chooser regularly if lookups are not disabled in the datasource settings', async () => { + const queryField = render(); + + // wait for component to render + await screen.findByRole('button'); + + expect(queryField.getAllByRole('button')).toHaveLength(1); + }); + + it('renders a disabled metrics chooser if lookups are disabled in datasource settings', async () => { + const props = defaultProps; + props.datasource.lookupsDisabled = true; + const queryField = render(); + + // wait for component to render + await screen.findByRole('button'); + + const bcButton = queryField.getByRole('button'); + expect(bcButton).toBeDisabled(); + }); + + it('renders an initial hint if no data and initial hint provided', async () => { + const props = defaultProps; + props.datasource.lookupsDisabled = true; + props.datasource.getInitHints = () => [{ label: 'Initial hint', type: 'INFO' }]; + render(); + + // wait for component to render + await screen.findByRole('button'); + + expect(screen.getByText('Initial hint')).toBeInTheDocument(); + }); + + it('renders query hint if data, query hint and initial hint provided', async () => { + const props = defaultProps; + props.datasource.lookupsDisabled = true; + props.datasource.getInitHints = () => [{ label: 'Initial hint', type: 'INFO' }]; + props.datasource.getQueryHints = () => [{ label: 'Query hint', type: 'INFO' }]; + render( + + ); + + // wait for component to render + await screen.findByRole('button'); + + expect(screen.getByText('Query hint')).toBeInTheDocument(); + expect(screen.queryByText('Initial hint')).not.toBeInTheDocument(); + }); + + it('refreshes metrics when the data source changes', async () => { + const defaultProps = { + query: { expr: '', refId: '' }, + onRunQuery: () => {}, + onChange: () => {}, + history: [], + }; + const metrics = ['foo', 'bar']; + const queryField = render( + [], + } as unknown as PrometheusDatasource + } + {...defaultProps} + /> + ); + + // wait for component to render + await screen.findByRole('button'); + + const changedMetrics = ['baz', 'moo']; + queryField.rerender( + + ); + + // If we check the label browser right away it should be in loading state + let labelBrowser = screen.getByRole('button'); + expect(labelBrowser).toHaveTextContent('Loading'); + + // wait for component to rerender + labelBrowser = await screen.findByRole('button'); + await waitFor(() => { + expect(labelBrowser).toHaveTextContent('Metrics browser'); + }); + }); + + it('should not run query onBlur', async () => { + const onRunQuery = jest.fn(); + const { container } = render(); + + // wait for component to rerender + await screen.findByRole('button'); + + const input = getByTestId(container, 'dummy-code-input'); + expect(input).toBeInTheDocument(); + await userEvent.type(input, 'metric'); + + // blur element + await userEvent.click(document.body); + expect(onRunQuery).not.toHaveBeenCalled(); + }); +}); + +function makeLanguageProvider(options: { metrics: string[][] }) { + const metricsStack = [...options.metrics]; + return { + histogramMetrics: [], + metrics: [], + metricsMetadata: {}, + lookupsDisabled: false, + getLabelKeys: () => [], + start() { + this.metrics = metricsStack.shift(); + return Promise.resolve([]); + }, + } as any as PromQlLanguageProvider; +} diff --git a/packages/grafana-prometheus/src/components/PromQueryField.tsx b/packages/grafana-prometheus/src/components/PromQueryField.tsx new file mode 100644 index 0000000000000..3ceab6316093b --- /dev/null +++ b/packages/grafana-prometheus/src/components/PromQueryField.tsx @@ -0,0 +1,290 @@ +import { cx } from '@emotion/css'; +import React, { ReactNode } from 'react'; + +import { isDataFrame, QueryEditorProps, QueryHint, TimeRange, toLegacyResponseData } from '@grafana/data'; +import { selectors } from '@grafana/e2e-selectors'; +import { reportInteraction } from '@grafana/runtime'; +import { clearButtonStyles, Icon, Themeable2, withTheme2 } from '@grafana/ui'; + +import { PrometheusDatasource } from '../datasource'; +import { LocalStorageValueProvider } from '../gcopypaste/app/core/components/LocalStorageValueProvider'; +import { + CancelablePromise, + isCancelablePromiseRejection, + makePromiseCancelable, +} from '../gcopypaste/app/core/utils/CancelablePromise'; +import { roundMsToMin } from '../language_utils'; +import { PromOptions, PromQuery } from '../types'; + +import { PrometheusMetricsBrowser } from './PrometheusMetricsBrowser'; +import { MonacoQueryFieldWrapper } from './monaco-query-field/MonacoQueryFieldWrapper'; + +const LAST_USED_LABELS_KEY = 'grafana.datasources.prometheus.browser.labels'; + +function getChooserText(metricsLookupDisabled: boolean, hasSyntax: boolean, hasMetrics: boolean) { + if (metricsLookupDisabled) { + return '(Disabled)'; + } + + if (!hasSyntax) { + return 'Loading metrics...'; + } + + if (!hasMetrics) { + return '(No metrics found)'; + } + + return 'Metrics browser'; +} + +interface PromQueryFieldProps extends QueryEditorProps, Themeable2 { + ExtraFieldElement?: ReactNode; + 'data-testid'?: string; +} + +interface PromQueryFieldState { + labelBrowserVisible: boolean; + syntaxLoaded: boolean; + hint: QueryHint | null; +} + +class PromQueryFieldClass extends React.PureComponent { + declare languageProviderInitializationPromise: CancelablePromise; + + constructor(props: PromQueryFieldProps) { + super(props); + + this.state = { + labelBrowserVisible: false, + syntaxLoaded: false, + hint: null, + }; + } + + componentDidMount() { + if (this.props.datasource.languageProvider) { + this.refreshMetrics(); + } + this.refreshHint(); + } + + componentWillUnmount() { + if (this.languageProviderInitializationPromise) { + this.languageProviderInitializationPromise.cancel(); + } + } + + componentDidUpdate(prevProps: PromQueryFieldProps) { + const { + data, + datasource: { languageProvider }, + range, + } = this.props; + + if (languageProvider !== prevProps.datasource.languageProvider) { + // We reset this only on DS change so we do not flesh loading state on every rangeChange which happens on every + // query run if using relative range. + this.setState({ + syntaxLoaded: false, + }); + } + + const changedRangeToRefresh = this.rangeChangedToRefresh(range, prevProps.range); + // We want to refresh metrics when language provider changes and/or when range changes (we round up intervals to a minute) + if (languageProvider !== prevProps.datasource.languageProvider || changedRangeToRefresh) { + this.refreshMetrics(); + } + + if (data && prevProps.data && prevProps.data.series !== data.series) { + this.refreshHint(); + } + } + + refreshHint = () => { + const { datasource, query, data } = this.props; + const initHints = datasource.getInitHints(); + const initHint = initHints.length > 0 ? initHints[0] : null; + + if (!data || data.series.length === 0) { + this.setState({ + hint: initHint, + }); + return; + } + + const result = isDataFrame(data.series[0]) ? data.series.map(toLegacyResponseData) : data.series; + const queryHints = datasource.getQueryHints(query, result); + let queryHint = queryHints.length > 0 ? queryHints[0] : null; + + this.setState({ hint: queryHint ?? initHint }); + }; + + refreshMetrics = async () => { + const { + range, + datasource: { languageProvider }, + } = this.props; + + this.languageProviderInitializationPromise = makePromiseCancelable(languageProvider.start(range)); + + try { + const remainingTasks = await this.languageProviderInitializationPromise.promise; + await Promise.all(remainingTasks); + this.onUpdateLanguage(); + } catch (err) { + if (isCancelablePromiseRejection(err) && err.isCanceled) { + // do nothing, promise was canceled + } else { + throw err; + } + } + }; + + rangeChangedToRefresh(range?: TimeRange, prevRange?: TimeRange): boolean { + if (range && prevRange) { + const sameMinuteFrom = roundMsToMin(range.from.valueOf()) === roundMsToMin(prevRange.from.valueOf()); + const sameMinuteTo = roundMsToMin(range.to.valueOf()) === roundMsToMin(prevRange.to.valueOf()); + // If both are same, don't need to refresh. + return !(sameMinuteFrom && sameMinuteTo); + } + return false; + } + + /** + * TODO #33976: Remove this, add histogram group (query = `histogram_quantile(0.95, sum(rate(${metric}[5m])) by (le))`;) + */ + onChangeLabelBrowser = (selector: string) => { + this.onChangeQuery(selector, true); + this.setState({ labelBrowserVisible: false }); + }; + + onChangeQuery = (value: string, override?: boolean) => { + // Send text change to parent + const { query, onChange, onRunQuery } = this.props; + if (onChange) { + const nextQuery: PromQuery = { ...query, expr: value }; + onChange(nextQuery); + + if (override && onRunQuery) { + onRunQuery(); + } + } + }; + + onClickChooserButton = () => { + this.setState((state) => ({ labelBrowserVisible: !state.labelBrowserVisible })); + + reportInteraction('user_grafana_prometheus_metrics_browser_clicked', { + editorMode: this.state.labelBrowserVisible ? 'metricViewClosed' : 'metricViewOpen', + app: this.props?.app ?? '', + }); + }; + + onClickHintFix = () => { + const { datasource, query, onChange, onRunQuery } = this.props; + const { hint } = this.state; + if (hint?.fix?.action) { + onChange(datasource.modifyQuery(query, hint.fix.action)); + } + onRunQuery(); + }; + + onUpdateLanguage = () => { + const { + datasource: { languageProvider }, + } = this.props; + const { metrics } = languageProvider; + + if (!metrics) { + return; + } + + this.setState({ syntaxLoaded: true }); + }; + + render() { + const { + datasource, + datasource: { languageProvider }, + query, + ExtraFieldElement, + history = [], + theme, + } = this.props; + + const { labelBrowserVisible, syntaxLoaded, hint } = this.state; + const hasMetrics = languageProvider.metrics.length > 0; + const chooserText = getChooserText(datasource.lookupsDisabled, syntaxLoaded, hasMetrics); + const buttonDisabled = !(syntaxLoaded && hasMetrics); + + return ( + storageKey={LAST_USED_LABELS_KEY} defaultValue={[]}> + {(lastUsedLabels, onLastUsedLabelsSave, onLastUsedLabelsDelete) => { + return ( + <> +
+ + +
+ +
+
+ {labelBrowserVisible && ( +
+ +
+ )} + + {ExtraFieldElement} + {hint ? ( +
+
+ {hint.label}{' '} + {hint.fix ? ( + + ) : null} +
+
+ ) : null} + + ); + }} + + ); + } +} + +export const PromQueryField = withTheme2(PromQueryFieldClass); diff --git a/packages/grafana-prometheus/src/components/PrometheusMetricsBrowser.test.tsx b/packages/grafana-prometheus/src/components/PrometheusMetricsBrowser.test.tsx new file mode 100644 index 0000000000000..e3ba496356bea --- /dev/null +++ b/packages/grafana-prometheus/src/components/PrometheusMetricsBrowser.test.tsx @@ -0,0 +1,324 @@ +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import React from 'react'; + +import { createTheme } from '@grafana/data'; + +import PromQlLanguageProvider from '../language_provider'; + +import { + BrowserProps, + buildSelector, + facetLabels, + SelectableLabel, + UnthemedPrometheusMetricsBrowser, +} from './PrometheusMetricsBrowser'; + +describe('buildSelector()', () => { + it('returns an empty selector for no labels', () => { + expect(buildSelector([])).toEqual('{}'); + }); + it('returns an empty selector for selected labels with no values', () => { + const labels: SelectableLabel[] = [{ name: 'foo', selected: true }]; + expect(buildSelector(labels)).toEqual('{}'); + }); + it('returns an empty selector for one selected label with no selected values', () => { + const labels: SelectableLabel[] = [{ name: 'foo', selected: true, values: [{ name: 'bar' }] }]; + expect(buildSelector(labels)).toEqual('{}'); + }); + it('returns a simple selector from a selected label with a selected value', () => { + const labels: SelectableLabel[] = [{ name: 'foo', selected: true, values: [{ name: 'bar', selected: true }] }]; + expect(buildSelector(labels)).toEqual('{foo="bar"}'); + }); + it('metric selector without labels', () => { + const labels: SelectableLabel[] = [{ name: '__name__', selected: true, values: [{ name: 'foo', selected: true }] }]; + expect(buildSelector(labels)).toEqual('foo{}'); + }); + it('selector with multiple metrics', () => { + const labels: SelectableLabel[] = [ + { + name: '__name__', + selected: true, + values: [ + { name: 'foo', selected: true }, + { name: 'bar', selected: true }, + ], + }, + ]; + expect(buildSelector(labels)).toEqual('{__name__=~"foo|bar"}'); + }); + it('metric selector with labels', () => { + const labels: SelectableLabel[] = [ + { name: '__name__', selected: true, values: [{ name: 'foo', selected: true }] }, + { name: 'bar', selected: true, values: [{ name: 'baz', selected: true }] }, + ]; + expect(buildSelector(labels)).toEqual('foo{bar="baz"}'); + }); +}); + +describe('facetLabels()', () => { + const possibleLabels = { + cluster: ['dev'], + namespace: ['alertmanager'], + }; + const labels: SelectableLabel[] = [ + { name: 'foo', selected: true, values: [{ name: 'bar' }] }, + { name: 'cluster', values: [{ name: 'dev' }, { name: 'ops' }, { name: 'prod' }] }, + { name: 'namespace', values: [{ name: 'alertmanager' }] }, + ]; + + it('returns no labels given an empty label set', () => { + expect(facetLabels([], {})).toEqual([]); + }); + + it('marks all labels as hidden when no labels are possible', () => { + const result = facetLabels(labels, {}); + expect(result.length).toEqual(labels.length); + expect(result[0].hidden).toBeTruthy(); + expect(result[0].values).toBeUndefined(); + }); + + it('keeps values as facetted when they are possible', () => { + const result = facetLabels(labels, possibleLabels); + expect(result.length).toEqual(labels.length); + expect(result[0].hidden).toBeTruthy(); + expect(result[0].values).toBeUndefined(); + expect(result[1].hidden).toBeFalsy(); + expect(result[1].values!.length).toBe(1); + expect(result[1].values![0].name).toBe('dev'); + }); + + it('does not facet out label values that are currently being facetted', () => { + const result = facetLabels(labels, possibleLabels, 'cluster'); + expect(result.length).toEqual(labels.length); + expect(result[0].hidden).toBeTruthy(); + expect(result[1].hidden).toBeFalsy(); + // 'cluster' is being facetted, should show all 3 options even though only 1 is possible + expect(result[1].values!.length).toBe(3); + expect(result[2].values!.length).toBe(1); + }); +}); + +describe('PrometheusMetricsBrowser', () => { + const setupProps = (): BrowserProps => { + const mockLanguageProvider = { + start: () => Promise.resolve(), + getLabelValues: (name: string) => { + switch (name) { + case 'label1': + return ['value1-1', 'value1-2']; + case 'label2': + return ['value2-1', 'value2-2']; + case 'label3': + return ['value3-1', 'value3-2']; + } + return []; + }, + // This must always call the series endpoint + // until we refactor all of the metrics browser + // to never use the series endpoint. + // The metrics browser expects both label names and label values. + // The labels endpoint with match does not supply label values + // and so using it breaks the metrics browser. + fetchSeriesLabels: (selector: string) => { + switch (selector) { + case '{label1="value1-1"}': + return { label1: ['value1-1'], label2: ['value2-1'], label3: ['value3-1'] }; + case '{label1=~"value1-1|value1-2"}': + return { label1: ['value1-1', 'value1-2'], label2: ['value2-1'], label3: ['value3-1', 'value3-2'] }; + } + // Allow full set by default + return { + label1: ['value1-1', 'value1-2'], + label2: ['value2-1', 'value2-2'], + }; + }, + getLabelKeys: () => ['label1', 'label2', 'label3'], + }; + + const defaults: BrowserProps = { + theme: createTheme({ colors: { mode: 'dark' } }), + onChange: () => {}, + autoSelect: 0, + languageProvider: mockLanguageProvider as unknown as PromQlLanguageProvider, + lastUsedLabels: [], + storeLastUsedLabels: () => {}, + deleteLastUsedLabels: () => {}, + }; + + return defaults; + }; + + // Clear label selection manually because it's saved in localStorage + afterEach(async () => { + const clearBtn = screen.getByLabelText('Selector clear button'); + await userEvent.click(clearBtn); + }); + + it('renders and loader shows when empty, and then first set of labels', async () => { + const props = setupProps(); + render(); + // Loading appears and dissappears + screen.getByText(/Loading labels/); + await waitFor(() => { + expect(screen.queryByText(/Loading labels/)).not.toBeInTheDocument(); + }); + // Initial set of labels is available and not selected + expect(screen.queryByRole('option', { name: 'label1' })).toBeInTheDocument(); + expect(screen.queryByRole('option', { name: 'label1', selected: true })).not.toBeInTheDocument(); + expect(screen.queryByRole('option', { name: 'label2' })).toBeInTheDocument(); + expect(screen.queryByRole('option', { name: 'label2', selected: true })).not.toBeInTheDocument(); + expect(screen.queryByLabelText('selector')).toHaveTextContent('{}'); + }); + + it('allows label and value selection/deselection', async () => { + const props = setupProps(); + render(); + // Selecting label2 + const label2 = await screen.findByRole('option', { name: 'label2', selected: false }); + expect(screen.queryByRole('list', { name: /Values/ })).not.toBeInTheDocument(); + await userEvent.click(label2); + expect(screen.queryByRole('option', { name: 'label2', selected: true })).toBeInTheDocument(); + // List of values for label2 appears + expect(screen.queryByLabelText(/Values for/)).toHaveTextContent('label2'); + expect(screen.queryByRole('option', { name: 'value2-1' })).toBeInTheDocument(); + expect(screen.queryByRole('option', { name: 'value2-2' })).toBeInTheDocument(); + expect(screen.queryByLabelText('selector')).toHaveTextContent('{}'); + // Selecting label1, list for its values appears + const label1 = await screen.findByRole('option', { name: 'label1', selected: false }); + await userEvent.click(label1); + expect(screen.queryByRole('option', { name: 'label1', selected: true })).toBeInTheDocument(); + await screen.findByLabelText('Values for label1'); + expect(await screen.findAllByRole('list', { name: /Values/ })).toHaveLength(2); + // Selecting value2-2 of label2 + const value = await screen.findByRole('option', { name: 'value2-2', selected: false }); + await userEvent.click(value); + await screen.findByRole('option', { name: 'value2-2', selected: true }); + expect(screen.queryByLabelText('selector')).toHaveTextContent('{label2="value2-2"}'); + // Selecting value2-1 of label2, both values now selected + const value2 = await screen.findByRole('option', { name: 'value2-1', selected: false }); + await userEvent.click(value2); + // await screen.findByRole('option', {name: 'value2-1', selected: true}); + await screen.findByText('{label2=~"value2-1|value2-2"}'); + // Deselecting value2-2, one value should remain + const selectedValue = await screen.findByRole('option', { name: 'value2-2', selected: true }); + await userEvent.click(selectedValue); + await screen.findByRole('option', { name: 'value2-1', selected: true }); + await screen.findByRole('option', { name: 'value2-2', selected: false }); + expect(screen.queryByLabelText('selector')).toHaveTextContent('{label2="value2-1"}'); + }); + + it('allows label selection from multiple labels', async () => { + const props = setupProps(); + render(); + + // Selecting label2 + const label2 = await screen.findByRole('option', { name: 'label2', selected: false }); + await userEvent.click(label2); + // List of values for label2 appears + expect(screen.queryByLabelText(/Values for/)).toHaveTextContent('label2'); + expect(screen.queryByRole('option', { name: 'value2-1' })).toBeInTheDocument(); + expect(screen.queryByRole('option', { name: 'value2-2' })).toBeInTheDocument(); + expect(screen.queryByLabelText('selector')).toHaveTextContent('{}'); + // Selecting label1, list for its values appears + const label1 = await screen.findByRole('option', { name: 'label1', selected: false }); + await userEvent.click(label1); + await screen.findByLabelText('Values for label1'); + expect(await screen.findAllByRole('list', { name: /Values/ })).toHaveLength(2); + // Selecting value2-1 of label2 + const value2 = await screen.findByRole('option', { name: 'value2-1', selected: false }); + await userEvent.click(value2); + await screen.findByText('{label2="value2-1"}'); + + // Selecting value from label1 for combined selector + const value1 = await screen.findByRole('option', { name: 'value1-2', selected: false }); + await userEvent.click(value1); + await screen.findByRole('option', { name: 'value1-2', selected: true }); + await screen.findByText('{label1="value1-2",label2="value2-1"}'); + // Deselect label1 should remove label and value + const selectedLabel = (await screen.findAllByRole('option', { name: /label1/, selected: true }))[0]; + await userEvent.click(selectedLabel); + await screen.findByRole('option', { name: /label1/, selected: false }); + expect(await screen.findAllByRole('list', { name: /Values/ })).toHaveLength(1); + expect(screen.queryByLabelText('selector')).toHaveTextContent('{label2="value2-1"}'); + }); + + it('allows clearing the label selection', async () => { + const props = setupProps(); + render(); + + // Selecting label2 + const label2 = await screen.findByRole('option', { name: 'label2', selected: false }); + await userEvent.click(label2); + // List of values for label2 appears + expect(screen.queryByLabelText(/Values for/)).toHaveTextContent('label2'); + expect(screen.queryByRole('option', { name: 'value2-1' })).toBeInTheDocument(); + expect(screen.queryByRole('option', { name: 'value2-2' })).toBeInTheDocument(); + expect(screen.queryByLabelText('selector')).toHaveTextContent('{}'); + // Selecting label1, list for its values appears + const label1 = await screen.findByRole('option', { name: 'label1', selected: false }); + await userEvent.click(label1); + await screen.findByLabelText('Values for label1'); + expect(await screen.findAllByRole('list', { name: /Values/ })).toHaveLength(2); + // Selecting value2-1 of label2 + const value2 = await screen.findByRole('option', { name: 'value2-1', selected: false }); + await userEvent.click(value2); + await screen.findByText('{label2="value2-1"}'); + + // Clear selector + const clearBtn = screen.getByLabelText('Selector clear button'); + await userEvent.click(clearBtn); + await screen.findByRole('option', { name: 'label2', selected: false }); + expect(screen.queryByLabelText('selector')).toHaveTextContent('{}'); + }); + + it('filters values by input text', async () => { + const props = setupProps(); + render(); + // Selecting label2 and label1 + const label2 = await screen.findByRole('option', { name: /label2/, selected: false }); + await userEvent.click(label2); + const label1 = await screen.findByRole('option', { name: /label1/, selected: false }); + await userEvent.click(label1); + await screen.findByLabelText('Values for label1'); + await screen.findByLabelText('Values for label2'); + expect(await screen.findAllByRole('option', { name: /value/ })).toHaveLength(4); + // Typing '1' to filter for values + await userEvent.type(screen.getByLabelText('Filter expression for label values'), '1'); + expect(screen.getByLabelText('Filter expression for label values')).toHaveValue('1'); + expect(await screen.findAllByRole('option', { name: /value/ })).toHaveLength(3); + expect(screen.queryByRole('option', { name: 'value2-2' })).not.toBeInTheDocument(); + }); + + it('facets labels', async () => { + const props = setupProps(); + render(); + // Selecting label2 and label1 + const label2 = await screen.findByRole('option', { name: /label2/, selected: false }); + await userEvent.click(label2); + const label1 = await screen.findByRole('option', { name: /label1/, selected: false }); + await userEvent.click(label1); + await screen.findByLabelText('Values for label1'); + await screen.findByLabelText('Values for label2'); + expect(await screen.findAllByRole('option', { name: /value/ })).toHaveLength(4); + expect(screen.queryByRole('option', { name: /label3/ })).toHaveTextContent('label3'); + // Click value1-1 which triggers facetting for value3-x, and still show all value1-x + const value1 = await screen.findByRole('option', { name: 'value1-1', selected: false }); + await userEvent.click(value1); + await waitFor(() => expect(screen.queryByRole('option', { name: 'value2-2' })).not.toBeInTheDocument()); + expect(screen.queryByRole('option', { name: 'value1-2' })).toBeInTheDocument(); + expect(screen.queryByLabelText('selector')).toHaveTextContent('{label1="value1-1"}'); + expect(screen.queryByRole('option', { name: /label3/ })).toHaveTextContent('label3 (1)'); + // Click value1-2 for which facetting will allow more values for value3-x + const value12 = await screen.findByRole('option', { name: 'value1-2', selected: false }); + await userEvent.click(value12); + await screen.findByRole('option', { name: 'value1-2', selected: true }); + await screen.findByRole('option', { name: /label3/, selected: false }); + await userEvent.click(screen.getByRole('option', { name: /label3/ })); + await screen.findByLabelText('Values for label3'); + expect(screen.queryByRole('option', { name: 'value1-1', selected: true })).toBeInTheDocument(); + expect(screen.queryByRole('option', { name: 'value1-2', selected: true })).toBeInTheDocument(); + expect(screen.queryByLabelText('selector')).toHaveTextContent('{label1=~"value1-1|value1-2"}'); + expect(screen.queryAllByRole('option', { name: /label3/ })[0]).toHaveTextContent('label3 (2)'); + }); +}); diff --git a/packages/grafana-prometheus/src/components/PrometheusMetricsBrowser.tsx b/packages/grafana-prometheus/src/components/PrometheusMetricsBrowser.tsx new file mode 100644 index 0000000000000..79ae235574e13 --- /dev/null +++ b/packages/grafana-prometheus/src/components/PrometheusMetricsBrowser.tsx @@ -0,0 +1,684 @@ +import { css, cx } from '@emotion/css'; +import React, { ChangeEvent } from 'react'; +import { FixedSizeList } from 'react-window'; + +import { GrafanaTheme2, TimeRange } from '@grafana/data'; +import { selectors } from '@grafana/e2e-selectors'; +import { + BrowserLabel as PromLabel, + Button, + HorizontalGroup, + Input, + Label, + LoadingPlaceholder, + stylesFactory, + withTheme2, +} from '@grafana/ui'; + +import PromQlLanguageProvider from '../language_provider'; +import { escapeLabelValueInExactSelector, escapeLabelValueInRegexSelector } from '../language_utils'; + +// Hard limit on labels to render +const EMPTY_SELECTOR = '{}'; +const METRIC_LABEL = '__name__'; +const LIST_ITEM_SIZE = 25; + +export interface BrowserProps { + languageProvider: PromQlLanguageProvider; + onChange: (selector: string) => void; + theme: GrafanaTheme2; + autoSelect?: number; + hide?: () => void; + lastUsedLabels: string[]; + storeLastUsedLabels: (labels: string[]) => void; + deleteLastUsedLabels: () => void; + timeRange?: TimeRange; +} + +interface BrowserState { + labels: SelectableLabel[]; + labelSearchTerm: string; + metricSearchTerm: string; + status: string; + error: string; + validationStatus: string; + valueSearchTerm: string; +} + +interface FacettableValue { + name: string; + selected?: boolean; + details?: string; +} + +export interface SelectableLabel { + name: string; + selected?: boolean; + loading?: boolean; + values?: FacettableValue[]; + hidden?: boolean; + facets?: number; +} + +export function buildSelector(labels: SelectableLabel[]): string { + let singleMetric = ''; + const selectedLabels = []; + for (const label of labels) { + if ((label.name === METRIC_LABEL || label.selected) && label.values && label.values.length > 0) { + const selectedValues = label.values.filter((value) => value.selected).map((value) => value.name); + if (selectedValues.length > 1) { + selectedLabels.push(`${label.name}=~"${selectedValues.map(escapeLabelValueInRegexSelector).join('|')}"`); + } else if (selectedValues.length === 1) { + if (label.name === METRIC_LABEL) { + singleMetric = selectedValues[0]; + } else { + selectedLabels.push(`${label.name}="${escapeLabelValueInExactSelector(selectedValues[0])}"`); + } + } + } + } + return [singleMetric, '{', selectedLabels.join(','), '}'].join(''); +} + +export function facetLabels( + labels: SelectableLabel[], + possibleLabels: Record, + lastFacetted?: string +): SelectableLabel[] { + return labels.map((label) => { + const possibleValues = possibleLabels[label.name]; + if (possibleValues) { + let existingValues: FacettableValue[]; + if (label.name === lastFacetted && label.values) { + // Facetting this label, show all values + existingValues = label.values; + } else { + // Keep selection in other facets + const selectedValues: Set = new Set( + label.values?.filter((value) => value.selected).map((value) => value.name) || [] + ); + // Values for this label have not been requested yet, let's use the facetted ones as the initial values + existingValues = possibleValues.map((value) => ({ name: value, selected: selectedValues.has(value) })); + } + return { + ...label, + loading: false, + values: existingValues, + hidden: !possibleValues, + facets: existingValues.length, + }; + } + + // Label is facetted out, hide all values + return { ...label, loading: false, hidden: !possibleValues, values: undefined, facets: 0 }; + }); +} + +const getStyles = stylesFactory((theme: GrafanaTheme2) => ({ + wrapper: css` + background-color: ${theme.colors.background.secondary}; + padding: ${theme.spacing(1)}; + width: 100%; + `, + list: css` + margin-top: ${theme.spacing(1)}; + display: flex; + flex-wrap: wrap; + max-height: 200px; + overflow: auto; + align-content: flex-start; + `, + section: css` + & + & { + margin: ${theme.spacing(2)} 0; + } + position: relative; + `, + selector: css` + font-family: ${theme.typography.fontFamilyMonospace}; + margin-bottom: ${theme.spacing(1)}; + `, + status: css` + padding: ${theme.spacing(0.5)}; + color: ${theme.colors.text.secondary}; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + /* using absolute positioning because flex interferes with ellipsis */ + position: absolute; + width: 50%; + right: 0; + text-align: right; + transition: opacity 100ms linear; + opacity: 0; + `, + statusShowing: css` + opacity: 1; + `, + error: css` + color: ${theme.colors.error.main}; + `, + valueList: css` + margin-right: ${theme.spacing(1)}; + resize: horizontal; + `, + valueListWrapper: css` + border-left: 1px solid ${theme.colors.border.medium}; + margin: ${theme.spacing(1)} 0; + padding: ${theme.spacing(1)} 0 ${theme.spacing(1)} ${theme.spacing(1)}; + `, + valueListArea: css` + display: flex; + flex-wrap: wrap; + margin-top: ${theme.spacing(1)}; + `, + valueTitle: css` + margin-left: -${theme.spacing(0.5)}; + margin-bottom: ${theme.spacing(1)}; + `, + validationStatus: css` + padding: ${theme.spacing(0.5)}; + margin-bottom: ${theme.spacing(1)}; + color: ${theme.colors.text.maxContrast}; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + `, +})); + +/** + * TODO #33976: Remove duplicated code. The component is very similar to LokiLabelBrowser.tsx. Check if it's possible + * to create a single, generic component. + */ +export class UnthemedPrometheusMetricsBrowser extends React.Component { + valueListsRef = React.createRef(); + state: BrowserState = { + labels: [], + labelSearchTerm: '', + metricSearchTerm: '', + status: 'Ready', + error: '', + validationStatus: '', + valueSearchTerm: '', + }; + + onChangeLabelSearch = (event: ChangeEvent) => { + this.setState({ labelSearchTerm: event.target.value }); + }; + + onChangeMetricSearch = (event: ChangeEvent) => { + this.setState({ metricSearchTerm: event.target.value }); + }; + + onChangeValueSearch = (event: ChangeEvent) => { + this.setState({ valueSearchTerm: event.target.value }); + }; + + onClickRunQuery = () => { + const selector = buildSelector(this.state.labels); + this.props.onChange(selector); + }; + + onClickRunRateQuery = () => { + const selector = buildSelector(this.state.labels); + const query = `rate(${selector}[$__rate_interval])`; + this.props.onChange(query); + }; + + onClickClear = () => { + this.setState((state) => { + const labels: SelectableLabel[] = state.labels.map((label) => ({ + ...label, + values: undefined, + selected: false, + loading: false, + hidden: false, + facets: undefined, + })); + return { + labels, + labelSearchTerm: '', + metricSearchTerm: '', + status: '', + error: '', + validationStatus: '', + valueSearchTerm: '', + }; + }); + this.props.deleteLastUsedLabels(); + // Get metrics + this.fetchValues(METRIC_LABEL, EMPTY_SELECTOR); + }; + + onClickLabel = (name: string, value: string | undefined, event: React.MouseEvent) => { + const label = this.state.labels.find((l) => l.name === name); + if (!label) { + return; + } + // Toggle selected state + const selected = !label.selected; + let nextValue: Partial = { selected }; + if (label.values && !selected) { + // Deselect all values if label was deselected + const values = label.values.map((value) => ({ ...value, selected: false })); + nextValue = { ...nextValue, facets: 0, values }; + } + // Resetting search to prevent empty results + this.setState({ labelSearchTerm: '' }); + this.updateLabelState(name, nextValue, '', () => this.doFacettingForLabel(name)); + }; + + onClickValue = (name: string, value: string | undefined, event: React.MouseEvent) => { + const label = this.state.labels.find((l) => l.name === name); + if (!label || !label.values) { + return; + } + // Resetting search to prevent empty results + this.setState({ labelSearchTerm: '' }); + // Toggling value for selected label, leaving other values intact + const values = label.values.map((v) => ({ ...v, selected: v.name === value ? !v.selected : v.selected })); + this.updateLabelState(name, { values }, '', () => this.doFacetting(name)); + }; + + onClickMetric = (name: string, value: string | undefined, event: React.MouseEvent) => { + // Finding special metric label + const label = this.state.labels.find((l) => l.name === name); + if (!label || !label.values) { + return; + } + // Resetting search to prevent empty results + this.setState({ metricSearchTerm: '' }); + // Toggling value for selected label, leaving other values intact + const values = label.values.map((v) => ({ + ...v, + selected: v.name === value || v.selected ? !v.selected : v.selected, + })); + // Toggle selected state of special metrics label + const selected = values.some((v) => v.selected); + this.updateLabelState(name, { selected, values }, '', () => this.doFacetting(name)); + }; + + onClickValidate = () => { + const selector = buildSelector(this.state.labels); + this.validateSelector(selector); + }; + + updateLabelState(name: string, updatedFields: Partial, status = '', cb?: () => void) { + this.setState((state) => { + const labels: SelectableLabel[] = state.labels.map((label) => { + if (label.name === name) { + return { ...label, ...updatedFields }; + } + return label; + }); + // New status overrides errors + const error = status ? '' : state.error; + return { labels, status, error, validationStatus: '' }; + }, cb); + } + + componentDidMount() { + const { languageProvider, lastUsedLabels } = this.props; + if (languageProvider) { + const selectedLabels: string[] = lastUsedLabels; + languageProvider.start(this.props.timeRange).then(() => { + let rawLabels: string[] = languageProvider.getLabelKeys(); + // Get metrics + this.fetchValues(METRIC_LABEL, EMPTY_SELECTOR); + // Auto-select previously selected labels + const labels: SelectableLabel[] = rawLabels.map((label, i, arr) => ({ + name: label, + selected: selectedLabels.includes(label), + loading: false, + })); + // Pre-fetch values for selected labels + this.setState({ labels }, () => { + this.state.labels.forEach((label) => { + if (label.selected) { + this.fetchValues(label.name, EMPTY_SELECTOR); + } + }); + }); + }); + } + } + + doFacettingForLabel(name: string) { + const label = this.state.labels.find((l) => l.name === name); + if (!label) { + return; + } + const selectedLabels = this.state.labels.filter((label) => label.selected).map((label) => label.name); + this.props.storeLastUsedLabels(selectedLabels); + if (label.selected) { + // Refetch values for newly selected label... + if (!label.values) { + this.fetchValues(name, buildSelector(this.state.labels)); + } + } else { + // Only need to facet when deselecting labels + this.doFacetting(); + } + } + + doFacetting = (lastFacetted?: string) => { + const selector = buildSelector(this.state.labels); + if (selector === EMPTY_SELECTOR) { + // Clear up facetting + const labels: SelectableLabel[] = this.state.labels.map((label) => { + return { ...label, facets: 0, values: undefined, hidden: false }; + }); + this.setState({ labels }, () => { + // Get fresh set of values + this.state.labels.forEach( + (label) => (label.selected || label.name === METRIC_LABEL) && this.fetchValues(label.name, selector) + ); + }); + } else { + // Do facetting + this.fetchSeries(selector, lastFacetted); + } + }; + + async fetchValues(name: string, selector: string) { + const { languageProvider } = this.props; + this.updateLabelState(name, { loading: true }, `Fetching values for ${name}`); + try { + let rawValues = await languageProvider.getLabelValues(name); + // If selector changed, clear loading state and discard result by returning early + if (selector !== buildSelector(this.state.labels)) { + this.updateLabelState(name, { loading: false }); + return; + } + const values: FacettableValue[] = []; + const { metricsMetadata } = languageProvider; + for (const labelValue of rawValues) { + const value: FacettableValue = { name: labelValue }; + // Adding type/help text to metrics + if (name === METRIC_LABEL && metricsMetadata) { + const meta = metricsMetadata[labelValue]; + if (meta) { + value.details = `(${meta.type}) ${meta.help}`; + } + } + values.push(value); + } + this.updateLabelState(name, { values, loading: false }); + } catch (error) { + console.error(error); + } + } + + async fetchSeries(selector: string, lastFacetted?: string) { + const { languageProvider } = this.props; + if (lastFacetted) { + this.updateLabelState(lastFacetted, { loading: true }, `Facetting labels for ${selector}`); + } + try { + const possibleLabels = await languageProvider.fetchSeriesLabels(selector, true); + // If selector changed, clear loading state and discard result by returning early + if (selector !== buildSelector(this.state.labels)) { + if (lastFacetted) { + this.updateLabelState(lastFacetted, { loading: false }); + } + return; + } + if (Object.keys(possibleLabels).length === 0) { + this.setState({ error: `Empty results, no matching label for ${selector}` }); + return; + } + const labels: SelectableLabel[] = facetLabels(this.state.labels, possibleLabels, lastFacetted); + this.setState({ labels, error: '' }); + if (lastFacetted) { + this.updateLabelState(lastFacetted, { loading: false }); + } + } catch (error) { + console.error(error); + } + } + + async validateSelector(selector: string) { + const { languageProvider } = this.props; + this.setState({ validationStatus: `Validating selector ${selector}`, error: '' }); + const streams = await languageProvider.fetchSeries(selector); + this.setState({ validationStatus: `Selector is valid (${streams.length} series found)` }); + } + + render() { + const { theme } = this.props; + const { labels, labelSearchTerm, metricSearchTerm, status, error, validationStatus, valueSearchTerm } = this.state; + const styles = getStyles(theme); + if (labels.length === 0) { + return ( +
+ +
+ ); + } + + // Filter metrics + let metrics = labels.find((label) => label.name === METRIC_LABEL); + if (metrics && metricSearchTerm) { + metrics = { + ...metrics, + values: metrics.values?.filter((value) => value.selected || value.name.includes(metricSearchTerm)), + }; + } + + // Filter labels + let nonMetricLabels = labels.filter((label) => !label.hidden && label.name !== METRIC_LABEL); + if (labelSearchTerm) { + nonMetricLabels = nonMetricLabels.filter((label) => label.selected || label.name.includes(labelSearchTerm)); + } + + // Filter non-metric label values + let selectedLabels = nonMetricLabels.filter((label) => label.selected && label.values); + if (valueSearchTerm) { + selectedLabels = selectedLabels.map((label) => ({ + ...label, + values: label.values?.filter((value) => value.selected || value.name.includes(valueSearchTerm)), + })); + } + const selector = buildSelector(this.state.labels); + const empty = selector === EMPTY_SELECTOR; + const metricCount = metrics?.values?.length || 0; + + return ( +
+ +
+
+ +
+ +
+
+ metrics!.values![i].name} + width={300} + className={styles.valueList} + > + {({ index, style }) => { + const value = metrics?.values?.[index]; + if (!value) { + return null; + } + return ( +
+ +
+ ); + }} +
+
+
+
+ +
+
+ +
+ +
+ {/* Using fixed height here to prevent jumpy layout */} +
+ {nonMetricLabels.map((label) => ( +
+
+
+ +
+ +
+
+ {selectedLabels.map((label) => ( +
+
+
+ label.values![i].name} + width={200} + className={styles.valueList} + > + {({ index, style }) => { + const value = label.values?.[index]; + if (!value) { + return null; + } + return ( +
+ +
+ ); + }} +
+
+ ))} +
+
+
+
+ +
+ +
+ {selector} +
+ {validationStatus &&
{validationStatus}
} + + + + + +
+ {error || status} +
+
+
+
+ ); + } +} + +export const PrometheusMetricsBrowser = withTheme2(UnthemedPrometheusMetricsBrowser); diff --git a/packages/grafana-prometheus/src/components/VariableQueryEditor.test.tsx b/packages/grafana-prometheus/src/components/VariableQueryEditor.test.tsx new file mode 100644 index 0000000000000..0d3a877069d7b --- /dev/null +++ b/packages/grafana-prometheus/src/components/VariableQueryEditor.test.tsx @@ -0,0 +1,392 @@ +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import React from 'react'; + +import { dateTime, TimeRange } from '@grafana/data'; + +import { PrometheusDatasource } from '../datasource'; +import { selectOptionInTest } from '../gcopypaste/test/helpers/selectOptionInTest'; +import PrometheusLanguageProvider from '../language_provider'; +import { migrateVariableEditorBackToVariableSupport } from '../migrations/variableMigration'; +import { PromVariableQuery, PromVariableQueryType, StandardPromVariableQuery } from '../types'; + +import { PromVariableQueryEditor, Props, variableMigration } from './VariableQueryEditor'; + +const refId = 'PrometheusVariableQueryEditor-VariableQuery'; + +describe('PromVariableQueryEditor', () => { + let props: Props; + + test('Migrates from standard variable support to custom variable query', () => { + const query: StandardPromVariableQuery = { + query: 'label_names()', + refId: 'StandardVariableQuery', + }; + + const migration: PromVariableQuery = variableMigration(query); + + const expected: PromVariableQuery = { + qryType: PromVariableQueryType.LabelNames, + refId: 'PrometheusDatasource-VariableQuery', + }; + + expect(migration).toEqual(expected); + }); + + test('Allows for use of variables to interpolate label names in the label values query type.', () => { + const query: StandardPromVariableQuery = { + query: 'label_values($label_name)', + refId: 'StandardVariableQuery', + }; + + const migration: PromVariableQuery = variableMigration(query); + + const expected: PromVariableQuery = { + qryType: PromVariableQueryType.LabelValues, + label: '$label_name', + refId: 'PrometheusDatasource-VariableQuery', + }; + + expect(migration).toEqual(expected); + }); + + test('Migrates from jsonnet grafana as code variable to custom variable query', () => { + const query = 'label_names()'; + + const migration: PromVariableQuery = variableMigration(query); + + const expected: PromVariableQuery = { + qryType: PromVariableQueryType.LabelNames, + refId: 'PrometheusDatasource-VariableQuery', + }; + + expect(migration).toEqual(expected); + }); + + test('Migrates label filters to the query object for label_values()', () => { + const query: StandardPromVariableQuery = { + query: 'label_values(metric{label="value"},name)', + refId: 'StandardVariableQuery', + }; + + const migration: PromVariableQuery = variableMigration(query); + + const expected: PromVariableQuery = { + qryType: PromVariableQueryType.LabelValues, + label: 'name', + metric: 'metric', + labelFilters: [ + { + label: 'label', + op: '=', + value: 'value', + }, + ], + refId: 'PrometheusDatasource-VariableQuery', + }; + + expect(migration).toEqual(expected); + }); + + test('Migrates a query object with label filters to an expression correctly', () => { + const query: PromVariableQuery = { + qryType: PromVariableQueryType.LabelValues, + label: 'name', + metric: 'metric', + labelFilters: [ + { + label: 'label', + op: '=', + value: 'value', + }, + ], + refId: 'PrometheusDatasource-VariableQuery', + }; + + const migration: string = migrateVariableEditorBackToVariableSupport(query); + + const expected = 'label_values(metric{label="value"},name)'; + + expect(migration).toEqual(expected); + }); + + test('Migrates a query object with no metric and only label filters to an expression correctly', () => { + const query: PromVariableQuery = { + qryType: PromVariableQueryType.LabelValues, + label: 'name', + labelFilters: [ + { + label: 'label', + op: '=', + value: 'value', + }, + ], + refId: 'PrometheusDatasource-VariableQuery', + }; + + const migration: string = migrateVariableEditorBackToVariableSupport(query); + + const expected = 'label_values({label="value"},name)'; + + expect(migration).toEqual(expected); + }); + + beforeEach(() => { + props = { + datasource: { + hasLabelsMatchAPISupport: () => true, + languageProvider: { + start: () => Promise.resolve([]), + syntax: () => {}, + getLabelKeys: () => [], + metrics: [], + metricsMetadata: {}, + getLabelValues: jest.fn().mockImplementation(() => ['that']), + fetchLabelsWithMatch: jest.fn().mockImplementation(() => Promise.resolve({ those: 'those' })), + } as Partial as PrometheusLanguageProvider, + getInitHints: () => [], + getDebounceTimeInMilliseconds: jest.fn(), + getTagKeys: jest.fn().mockImplementation(() => Promise.resolve(['this'])), + getVariables: jest.fn().mockImplementation(() => []), + metricFindQuery: jest.fn().mockImplementation(() => Promise.resolve(['that'])), + getSeriesLabels: jest.fn().mockImplementation(() => Promise.resolve(['that'])), + } as Partial as PrometheusDatasource, + query: { + refId: 'test', + query: 'label_names()', + }, + onRunQuery: () => {}, + onChange: () => {}, + history: [], + }; + }); + + test('Displays a group of function options', async () => { + render(); + + const select = screen.getByLabelText('Query type').parentElement!; + await userEvent.click(select); + + await waitFor(() => expect(screen.getAllByText('Label names')).toHaveLength(2)); + await waitFor(() => expect(screen.getByText('Label values')).toBeInTheDocument()); + await waitFor(() => expect(screen.getByText('Metrics')).toBeInTheDocument()); + await waitFor(() => expect(screen.getByText('Query result')).toBeInTheDocument()); + await waitFor(() => expect(screen.getByText('Series query')).toBeInTheDocument()); + await waitFor(() => expect(screen.getByText('Classic query')).toBeInTheDocument()); + }); + + test('Calls onChange for label_names(match) query', async () => { + const onChange = jest.fn(); + + props.query = { + refId: 'test', + query: '', + match: 'that', + }; + + render(); + + await selectOptionInTest(screen.getByLabelText('Query type'), 'Label names'); + + expect(onChange).toHaveBeenCalledWith({ + query: 'label_names(that)', + refId, + qryType: 0, + }); + }); + + test('Calls onChange for label_names, label_values, metrics, query result and and classic query.', async () => { + const onChange = jest.fn(); + + props.query = { + refId: 'test', + query: '', + }; + + render(); + + await selectOptionInTest(screen.getByLabelText('Query type'), 'Label names'); + await selectOptionInTest(screen.getByLabelText('Query type'), 'Label values'); + await selectOptionInTest(screen.getByLabelText('Query type'), 'Metrics'); + await selectOptionInTest(screen.getByLabelText('Query type'), 'Query result'); + await selectOptionInTest(screen.getByLabelText('Query type'), 'Classic query'); + + expect(onChange).toHaveBeenCalledTimes(5); + }); + + test('Does not call onChange for series query', async () => { + const onChange = jest.fn(); + + render(); + + await selectOptionInTest(screen.getByLabelText('Query type'), 'Series query'); + + expect(onChange).not.toHaveBeenCalled(); + }); + + test('Calls onChange for metrics() after input', async () => { + const onChange = jest.fn(); + + props.query = { + refId: 'test', + query: 'label_names()', + }; + + render(); + + await selectOptionInTest(screen.getByLabelText('Query type'), 'Metrics'); + const metricInput = screen.getByLabelText('Metric selector'); + await userEvent.type(metricInput, 'a'); + const queryType = screen.getByLabelText('Query type'); + // click elsewhere to trigger the onBlur + await userEvent.click(queryType); + + await waitFor(() => + expect(onChange).toHaveBeenCalledWith({ + query: 'metrics(a)', + refId, + qryType: 2, + }) + ); + }); + + test('Calls onChange for label_values() after selecting label', async () => { + const onChange = jest.fn(); + + props.query = { + refId: 'test', + query: 'label_names()', + qryType: 0, + }; + + render(); + + await selectOptionInTest(screen.getByLabelText('Query type'), 'Label values'); + const labelSelect = screen.getByLabelText('label-select'); + await userEvent.type(labelSelect, 'this'); + await selectOptionInTest(labelSelect, 'this'); + + await waitFor(() => + expect(onChange).toHaveBeenCalledWith({ + query: 'label_values(this)', + refId, + qryType: 1, + }) + ); + }); + + test('Calls onChange for label_values() after selecting metric', async () => { + const onChange = jest.fn(); + + props.query = { + refId: 'test', + query: 'label_names()', + }; + + render(); + + await selectOptionInTest(screen.getByLabelText('Query type'), 'Label values'); + const labelSelect = screen.getByLabelText('label-select'); + await userEvent.type(labelSelect, 'this'); + await selectOptionInTest(labelSelect, 'this'); + + const metricSelect = screen.getByLabelText('Metric'); + await userEvent.type(metricSelect, 'that'); + await selectOptionInTest(metricSelect, 'that'); + + await waitFor(() => + expect(onChange).toHaveBeenCalledWith({ + query: 'label_values(that,this)', + refId, + qryType: 1, + }) + ); + }); + + test('Calls onChange for query_result() with argument onBlur', async () => { + const onChange = jest.fn(); + + props.query = { + refId: 'test', + query: 'query_result(a)', + }; + + render(); + + const labelSelect = screen.getByLabelText('Prometheus Query'); + await userEvent.click(labelSelect); + const functionSelect = screen.getByLabelText('Query type').parentElement!; + await userEvent.click(functionSelect); + + expect(onChange).toHaveBeenCalledWith({ + query: 'query_result(a)', + refId, + qryType: 3, + }); + }); + + test('Calls onChange for Match[] series with argument onBlur', async () => { + const onChange = jest.fn(); + + props.query = { + refId: 'test', + query: '{a: "example"}', + }; + + render(); + + const labelSelect = screen.getByLabelText('Series Query'); + await userEvent.click(labelSelect); + const functionSelect = screen.getByLabelText('Query type').parentElement!; + await userEvent.click(functionSelect); + + expect(onChange).toHaveBeenCalledWith({ + query: '{a: "example"}', + refId, + qryType: 4, + }); + }); + + test('Calls onChange for classic query onBlur', async () => { + const onChange = jest.fn(); + + props.query = { + refId: 'test', + qryType: 5, + query: 'label_values(instance)', + }; + + render(); + + const labelSelect = screen.getByLabelText('Classic Query'); + await userEvent.click(labelSelect); + const functionSelect = screen.getByLabelText('Query type').parentElement!; + await userEvent.click(functionSelect); + + expect(onChange).toHaveBeenCalledWith({ + query: 'label_values(instance)', + refId, + qryType: 5, + }); + }); + + test('Calls language provider with the time range received in props', async () => { + const now = dateTime('2023-09-16T21:26:00Z'); + const range: TimeRange = { + from: dateTime(now).subtract(2, 'days'), + to: now, + raw: { + from: 'now-2d', + to: 'now', + }, + }; + props.range = range; + + const languageProviderStartMock = jest.fn(); + props.datasource.languageProvider.start = languageProviderStartMock; + + render(); + + expect(languageProviderStartMock).toHaveBeenCalledWith(range); + }); +}); diff --git a/packages/grafana-prometheus/src/components/VariableQueryEditor.tsx b/packages/grafana-prometheus/src/components/VariableQueryEditor.tsx new file mode 100644 index 0000000000000..fce9bf1e1dfe4 --- /dev/null +++ b/packages/grafana-prometheus/src/components/VariableQueryEditor.tsx @@ -0,0 +1,437 @@ +import React, { FormEvent, useCallback, useEffect, useState } from 'react'; + +import { QueryEditorProps, SelectableValue } from '@grafana/data'; +import { selectors } from '@grafana/e2e-selectors'; +import { InlineField, InlineFieldRow, Input, Select, TextArea } from '@grafana/ui'; + +import { PrometheusDatasource } from '../datasource'; +import { + migrateVariableEditorBackToVariableSupport, + migrateVariableQueryToEditor, +} from '../migrations/variableMigration'; +import { promQueryModeller } from '../querybuilder/PromQueryModeller'; +import { MetricsLabelsSection } from '../querybuilder/components/MetricsLabelsSection'; +import { QueryBuilderLabelFilter } from '../querybuilder/shared/types'; +import { PromVisualQuery } from '../querybuilder/types'; +import { + PromOptions, + PromQuery, + PromVariableQuery, + PromVariableQueryType as QueryType, + StandardPromVariableQuery, +} from '../types'; + +export const variableOptions = [ + { label: 'Label names', value: QueryType.LabelNames }, + { label: 'Label values', value: QueryType.LabelValues }, + { label: 'Metrics', value: QueryType.MetricNames }, + { label: 'Query result', value: QueryType.VarQueryResult }, + { label: 'Series query', value: QueryType.SeriesQuery }, + { label: 'Classic query', value: QueryType.ClassicQuery }, +]; + +export type Props = QueryEditorProps; + +const refId = 'PrometheusVariableQueryEditor-VariableQuery'; + +export const PromVariableQueryEditor = ({ onChange, query, datasource, range }: Props) => { + // to select the query type, i.e. label_names, label_values, etc. + const [qryType, setQryType] = useState(undefined); + // list of variables for each function + const [label, setLabel] = useState(''); + + const [labelNamesMatch, setLabelNamesMatch] = useState(''); + + // metric is used for both label_values() and metric() + // label_values() metric requires a whole/complete metric + // metric() is expected to be a part of a metric string + const [metric, setMetric] = useState(''); + // varQuery is a whole query, can include math/rates/etc + const [varQuery, setVarQuery] = useState(''); + // seriesQuery is only a whole + const [seriesQuery, setSeriesQuery] = useState(''); + + // the original variable query implementation, e.g. label_value(metric, label_name) + const [classicQuery, setClassicQuery] = useState(''); + + // list of label names for label_values(), /api/v1/labels, contains the same results as label_names() function + const [labelOptions, setLabelOptions] = useState>>([]); + + // label filters have been added as a filter for metrics in label values query type + const [labelFilters, setLabelFilters] = useState([]); + + useEffect(() => { + datasource.languageProvider.start(range); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + useEffect(() => { + if (!query) { + return; + } + + if (query.qryType === QueryType.ClassicQuery) { + setQryType(query.qryType); + setClassicQuery(query.query ?? ''); + } else { + // 1. Changing from standard to custom variable editor changes the string attr from expr to query + // 2. jsonnet grafana as code passes a variable as a string + const variableQuery = variableMigration(query); + + setLabelNamesMatch(variableQuery.match ?? ''); + setQryType(variableQuery.qryType); + setLabel(variableQuery.label ?? ''); + setMetric(variableQuery.metric ?? ''); + setLabelFilters(variableQuery.labelFilters ?? []); + setVarQuery(variableQuery.varQuery ?? ''); + setSeriesQuery(variableQuery.seriesQuery ?? ''); + setClassicQuery(variableQuery.classicQuery ?? ''); + } + }, [query]); + + // set the label names options for the label values var query + useEffect(() => { + if (qryType !== QueryType.LabelValues) { + return; + } + const variables = datasource.getVariables().map((variable: string) => ({ label: variable, value: variable })); + if (!metric) { + // get all the labels + datasource.getTagKeys({ filters: [] }).then((labelNames: Array<{ text: string }>) => { + const names = labelNames.map(({ text }) => ({ label: text, value: text })); + setLabelOptions([...variables, ...names]); + }); + } else { + // fetch the labels filtered by the metric + const labelToConsider = [{ label: '__name__', op: '=', value: metric }]; + const expr = promQueryModeller.renderLabels(labelToConsider); + + datasource.languageProvider.fetchLabelsWithMatch(expr).then((labelsIndex: Record) => { + const labelNames = Object.keys(labelsIndex); + const names = labelNames.map((value) => ({ label: value, value: value })); + setLabelOptions([...variables, ...names]); + }); + } + }, [datasource, qryType, metric]); + + const onChangeWithVariableString = ( + updateVar: { [key: string]: QueryType | string }, + updLabelFilters?: QueryBuilderLabelFilter[] + ) => { + const queryVar = { + qryType, + label, + metric, + match: labelNamesMatch, + varQuery, + seriesQuery, + classicQuery, + refId: 'PrometheusVariableQueryEditor-VariableQuery', + }; + + let updateLabelFilters = updLabelFilters ? { labelFilters: updLabelFilters } : { labelFilters: labelFilters }; + + const updatedVar = { ...queryVar, ...updateVar, ...updateLabelFilters }; + + const queryString = migrateVariableEditorBackToVariableSupport(updatedVar); + + // setting query.query property allows for update of variable definition + onChange({ + query: queryString, + qryType: updatedVar.qryType, + refId, + }); + }; + + /** Call onchange for label names query type change */ + const onQueryTypeChange = (newType: SelectableValue) => { + setQryType(newType.value); + if (newType.value !== QueryType.SeriesQuery) { + onChangeWithVariableString({ qryType: newType.value ?? 0 }); + } + }; + + /** Call onchange for label select when query type is label values */ + const onLabelChange = (newLabel: SelectableValue) => { + const newLabelvalue = newLabel && newLabel.value ? newLabel.value : ''; + setLabel(newLabelvalue); + if (qryType === QueryType.LabelValues && newLabelvalue) { + onChangeWithVariableString({ label: newLabelvalue }); + } + }; + + /** + * Call onChange for MetricsLabels component change for label values query type + * if there is a label (required) and + * if the labels or metric are updated. + */ + const metricsLabelsChange = (update: PromVisualQuery) => { + setMetric(update.metric); + setLabelFilters(update.labels); + + const updMetric = update.metric; + const updLabelFilters = update.labels ?? []; + + if (qryType === QueryType.LabelValues && label && (updMetric || updLabelFilters)) { + onChangeWithVariableString({ qryType, metric: updMetric }, updLabelFilters); + } + }; + + const onLabelNamesMatchChange = (regex: string) => { + if (qryType === QueryType.LabelNames) { + onChangeWithVariableString({ qryType, match: regex }); + } + }; + + /** + * Call onchange for metric change if metrics names (regex) query type + * Debounce this because to not call the API for every keystroke. + */ + const onMetricChange = (value: string) => { + if (qryType === QueryType.MetricNames && value) { + onChangeWithVariableString({ metric: value }); + } + }; + + /** + * Do not call onchange for variable query result when query type is var query result + * because the query may not be finished typing and an error is returned + * for incorrectly formatted series. Call onchange for blur instead. + */ + const onVarQueryChange = (e: FormEvent) => { + setVarQuery(e.currentTarget.value); + }; + + /** + * Do not call onchange for seriesQuery when query type is series query + * because the series may not be finished typing and an error is returned + * for incorrectly formatted series. Call onchange for blur instead. + */ + const onSeriesQueryChange = (e: FormEvent) => { + setSeriesQuery(e.currentTarget.value); + }; + + const onClassicQueryChange = (e: FormEvent) => { + setClassicQuery(e.currentTarget.value); + }; + + const promVisualQuery = useCallback(() => { + return { metric: metric, labels: labelFilters, operations: [] }; + }, [metric, labelFilters]); + + return ( + <> + + The Prometheus data source plugin provides the following query types for template variables.
+ } + > + + + + {/* Used to select an optional metric with optional label filters */} + + + )} + + {qryType === QueryType.LabelNames && ( + + Returns a list of label names, optionally filtering by specified metric regex.} + > + { + setLabelNamesMatch(event.currentTarget.value); + onLabelNamesMatchChange(event.currentTarget.value); + }} + onChange={(e) => { + setLabelNamesMatch(e.currentTarget.value); + }} + width={25} + data-testid={selectors.components.DataSource.Prometheus.variableQueryEditor.labelnames.metricRegex} + /> + + + )} + + {qryType === QueryType.MetricNames && ( + + Returns a list of metrics matching the specified metric regex.} + > + { + setMetric(e.currentTarget.value); + }} + onBlur={(e) => { + setMetric(e.currentTarget.value); + onMetricChange(e.currentTarget.value); + }} + width={25} + data-testid={selectors.components.DataSource.Prometheus.variableQueryEditor.metricNames.metricRegex} + /> + + + )} + + {qryType === QueryType.VarQueryResult && ( + + + Returns a list of Prometheus query results for the query. This can include Prometheus functions, i.e. + sum(go_goroutines). + + } + > + - - If you want to apply templating to the alert rule name, use the following syntax - ${Label} - - -
- Tags -
-
- - - -
-
-
- - -
-
- -
-
- diff --git a/public/app/features/alerting/routes.tsx b/public/app/features/alerting/routes.tsx index 4ae31262daa88..ddc9d11277358 100644 --- a/public/app/features/alerting/routes.tsx +++ b/public/app/features/alerting/routes.tsx @@ -1,308 +1,223 @@ -import { uniq } from 'lodash'; -import React from 'react'; - import { SafeDynamicImport } from 'app/core/components/DynamicImports/SafeDynamicImport'; -import { NavLandingPage } from 'app/core/components/NavLandingPage/NavLandingPage'; import { config } from 'app/core/config'; -import { RouteDescriptor } from 'app/core/navigation/types'; +import { GrafanaRouteComponent, RouteDescriptor } from 'app/core/navigation/types'; import { AccessControlAction } from 'app/types'; import { evaluateAccess } from './unified/utils/access-control'; -const commonRoutes: RouteDescriptor[] = []; - -const legacyRoutes: RouteDescriptor[] = [ - ...commonRoutes, - { - path: '/alerting', - component: () => , - }, - { - path: '/alerting/list', - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertRuleListIndex" */ 'app/features/alerting/AlertRuleList') - ), - }, - { - path: '/alerting/ng/list', - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertRuleList" */ 'app/features/alerting/AlertRuleList') - ), - }, - { - path: '/alerting/notifications', - roles: config.unifiedAlertingEnabled ? () => ['Editor', 'Admin'] : undefined, - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/NotificationsListPage') - ), - }, - { - path: '/alerting/notifications/templates/new', - roles: () => ['Editor', 'Admin'], - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/NotificationsListPage') - ), - }, - { - path: '/alerting/notifications/templates/:id/edit', - roles: () => ['Editor', 'Admin'], - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/NotificationsListPage') - ), - }, - { - path: '/alerting/notifications/receivers/new', - roles: () => ['Editor', 'Admin'], - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/NotificationsListPage') - ), - }, - { - path: '/alerting/notifications/receivers/:id/edit', - roles: () => ['Editor', 'Admin'], - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/NotificationsListPage') - ), - }, - { - path: '/alerting/notifications/global-config', - roles: () => ['Admin', 'Editor'], - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/NotificationsListPage') - ), - }, - { - path: '/alerting/notification/new', - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NewNotificationChannel" */ 'app/features/alerting/NewNotificationChannelPage') - ), - }, - { - path: '/alerting/notification/:id/edit', - component: SafeDynamicImport( - () => import(/* webpackChunkName: "EditNotificationChannel"*/ 'app/features/alerting/EditNotificationChannelPage') - ), - }, -]; - -const unifiedRoutes: RouteDescriptor[] = [ - ...commonRoutes, - { - path: '/alerting', - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingHome" */ 'app/features/alerting/unified/home/Home') - ), - }, - { - path: '/alerting/home', - exact: false, - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingHome" */ 'app/features/alerting/unified/home/Home') - ), - }, - { - path: '/alerting/list', - roles: evaluateAccess([AccessControlAction.AlertingRuleRead, AccessControlAction.AlertingRuleExternalRead]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertRuleListIndex" */ 'app/features/alerting/unified/RuleList') - ), - }, - { - path: '/alerting/routes', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsRead, - AccessControlAction.AlertingNotificationsExternalRead, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertAmRoutes" */ 'app/features/alerting/unified/NotificationPolicies') - ), - }, - { - path: '/alerting/routes/mute-timing/new', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "MuteTimings" */ 'app/features/alerting/unified/MuteTimings') - ), - }, - { - path: '/alerting/routes/mute-timing/edit', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "MuteTimings" */ 'app/features/alerting/unified/MuteTimings') - ), - }, - { - path: '/alerting/silences', - roles: evaluateAccess([ - AccessControlAction.AlertingInstanceRead, - AccessControlAction.AlertingInstancesExternalRead, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertSilences" */ 'app/features/alerting/unified/Silences') - ), - }, - { - path: '/alerting/silence/new', - roles: evaluateAccess([ - AccessControlAction.AlertingInstanceCreate, - AccessControlAction.AlertingInstancesExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertSilences" */ 'app/features/alerting/unified/Silences') - ), - }, - { - path: '/alerting/silence/:id/edit', - roles: evaluateAccess([ - AccessControlAction.AlertingInstanceUpdate, - AccessControlAction.AlertingInstancesExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertSilences" */ 'app/features/alerting/unified/Silences') - ), - }, - { - path: '/alerting/notifications', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsRead, - AccessControlAction.AlertingNotificationsExternalRead, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') - ), - }, - { - path: '/alerting/notifications/:type/new', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') - ), - }, - { - path: '/alerting/notifications/receivers/:id/edit', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalWrite, - AccessControlAction.AlertingNotificationsRead, - AccessControlAction.AlertingNotificationsExternalRead, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') - ), - }, - { - path: '/alerting/notifications/:type/:id/edit', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') - ), - }, - { - path: '/alerting/notifications/:type/:id/duplicate', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') - ), - }, - { - path: '/alerting/notifications/:type', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') - ), - }, - { - path: '/alerting/groups/', - roles: evaluateAccess([ - AccessControlAction.AlertingInstanceRead, - AccessControlAction.AlertingInstancesExternalRead, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertGroups" */ 'app/features/alerting/unified/AlertGroups') - ), - }, - { - path: '/alerting/new/:type?', - pageClass: 'page-alerting', - roles: evaluateAccess([AccessControlAction.AlertingRuleCreate, AccessControlAction.AlertingRuleExternalWrite]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingRuleForm"*/ 'app/features/alerting/unified/RuleEditor') - ), - }, - { - path: '/alerting/:id/edit', - pageClass: 'page-alerting', - roles: evaluateAccess([AccessControlAction.AlertingRuleUpdate, AccessControlAction.AlertingRuleExternalWrite]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingRuleForm"*/ 'app/features/alerting/unified/RuleEditor') - ), - }, - { - path: '/alerting/:id/modify-export', - pageClass: 'page-alerting', - roles: evaluateAccess([AccessControlAction.AlertingRuleRead]), - component: SafeDynamicImport( - () => - import( - /* webpackChunkName: "AlertingRuleForm"*/ 'app/features/alerting/unified/components/export/GrafanaModifyExport' - ) - ), - }, - { - path: '/alerting/:sourceName/:id/view', - pageClass: 'page-alerting', - roles: evaluateAccess([AccessControlAction.AlertingRuleRead, AccessControlAction.AlertingRuleExternalRead]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingRule"*/ 'app/features/alerting/unified/RuleViewer') - ), - }, - { - path: '/alerting/:sourceName/:name/find', - pageClass: 'page-alerting', - roles: evaluateAccess([AccessControlAction.AlertingRuleRead, AccessControlAction.AlertingRuleExternalRead]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingRedirectToRule"*/ 'app/features/alerting/unified/RedirectToRuleViewer') - ), - }, - { - path: '/alerting/admin', - roles: () => ['Admin'], - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingAdmin" */ 'app/features/alerting/unified/Admin') - ), - }, -]; - export function getAlertingRoutes(cfg = config): RouteDescriptor[] { - if (cfg.unifiedAlertingEnabled) { - return unifiedRoutes; - } else if (cfg.alertingEnabled) { - return legacyRoutes; - } + const routes = [ + { + path: '/alerting', + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertingHome" */ 'app/features/alerting/unified/home/Home') + ), + }, + { + path: '/alerting/home', + exact: false, + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertingHome" */ 'app/features/alerting/unified/home/Home') + ), + }, + { + path: '/alerting/list', + roles: evaluateAccess([AccessControlAction.AlertingRuleRead, AccessControlAction.AlertingRuleExternalRead]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertRuleListIndex" */ 'app/features/alerting/unified/RuleList') + ), + }, + { + path: '/alerting/routes', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsRead, + AccessControlAction.AlertingNotificationsExternalRead, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertAmRoutes" */ 'app/features/alerting/unified/NotificationPolicies') + ), + }, + { + path: '/alerting/routes/mute-timing/new', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsWrite, + AccessControlAction.AlertingNotificationsExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "MuteTimings" */ 'app/features/alerting/unified/MuteTimings') + ), + }, + { + path: '/alerting/routes/mute-timing/edit', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsWrite, + AccessControlAction.AlertingNotificationsExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "MuteTimings" */ 'app/features/alerting/unified/MuteTimings') + ), + }, + { + path: '/alerting/silences', + roles: evaluateAccess([ + AccessControlAction.AlertingInstanceRead, + AccessControlAction.AlertingInstancesExternalRead, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertSilences" */ 'app/features/alerting/unified/Silences') + ), + }, + { + path: '/alerting/silence/new', + roles: evaluateAccess([ + AccessControlAction.AlertingInstanceCreate, + AccessControlAction.AlertingInstancesExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertSilences" */ 'app/features/alerting/unified/Silences') + ), + }, + { + path: '/alerting/silence/:id/edit', + roles: evaluateAccess([ + AccessControlAction.AlertingInstanceUpdate, + AccessControlAction.AlertingInstancesExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertSilences" */ 'app/features/alerting/unified/Silences') + ), + }, + { + path: '/alerting/notifications', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsRead, + AccessControlAction.AlertingNotificationsExternalRead, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') + ), + }, + { + path: '/alerting/notifications/:type/new', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsWrite, + AccessControlAction.AlertingNotificationsExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') + ), + }, + { + path: '/alerting/notifications/receivers/:id/edit', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsWrite, + AccessControlAction.AlertingNotificationsExternalWrite, + AccessControlAction.AlertingNotificationsRead, + AccessControlAction.AlertingNotificationsExternalRead, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') + ), + }, + { + path: '/alerting/notifications/:type/:id/edit', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsWrite, + AccessControlAction.AlertingNotificationsExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') + ), + }, + { + path: '/alerting/notifications/:type/:id/duplicate', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsWrite, + AccessControlAction.AlertingNotificationsExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') + ), + }, + { + path: '/alerting/notifications/:type', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsWrite, + AccessControlAction.AlertingNotificationsExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') + ), + }, + { + path: '/alerting/groups/', + roles: evaluateAccess([ + AccessControlAction.AlertingInstanceRead, + AccessControlAction.AlertingInstancesExternalRead, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertGroups" */ 'app/features/alerting/unified/AlertGroups') + ), + }, + { + path: '/alerting/new/:type?', + pageClass: 'page-alerting', + roles: evaluateAccess([AccessControlAction.AlertingRuleCreate, AccessControlAction.AlertingRuleExternalWrite]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertingRuleForm"*/ 'app/features/alerting/unified/RuleEditor') + ), + }, + { + path: '/alerting/:id/edit', + pageClass: 'page-alerting', + roles: evaluateAccess([AccessControlAction.AlertingRuleUpdate, AccessControlAction.AlertingRuleExternalWrite]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertingRuleForm"*/ 'app/features/alerting/unified/RuleEditor') + ), + }, + { + path: '/alerting/:id/modify-export', + pageClass: 'page-alerting', + roles: evaluateAccess([AccessControlAction.AlertingRuleRead]), + component: importAlertingComponent( + () => + import( + /* webpackChunkName: "AlertingRuleForm"*/ 'app/features/alerting/unified/components/export/GrafanaModifyExport' + ) + ), + }, + { + path: '/alerting/:sourceName/:id/view', + pageClass: 'page-alerting', + roles: evaluateAccess([AccessControlAction.AlertingRuleRead, AccessControlAction.AlertingRuleExternalRead]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertingRule"*/ 'app/features/alerting/unified/RuleViewer') + ), + }, + { + path: '/alerting/:sourceName/:name/find', + pageClass: 'page-alerting', + roles: evaluateAccess([AccessControlAction.AlertingRuleRead, AccessControlAction.AlertingRuleExternalRead]), + component: importAlertingComponent( + () => + import(/* webpackChunkName: "AlertingRedirectToRule"*/ 'app/features/alerting/unified/RedirectToRuleViewer') + ), + }, + { + path: '/alerting/admin', + roles: () => ['Admin'], + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertingAdmin" */ 'app/features/alerting/unified/Admin') + ), + }, + ]; + + return routes; +} - const uniquePaths = uniq([...legacyRoutes, ...unifiedRoutes].map((route) => route.path)); - return uniquePaths.map((path) => ({ - path, - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingFeatureTogglePage"*/ 'app/features/alerting/FeatureTogglePage') - ), - })); +// this function will always load the "feature disabled" component for all alerting routes +function importAlertingComponent(loader: () => any): GrafanaRouteComponent { + const featureDisabledPageLoader = () => + import(/* webpackChunkName: "AlertingDisabled" */ 'app/features/alerting/unified/AlertingNotEnabled'); + return SafeDynamicImport(config.unifiedAlertingEnabled ? loader : featureDisabledPageLoader); } diff --git a/public/app/features/alerting/state/actions.ts b/public/app/features/alerting/state/actions.ts deleted file mode 100644 index 84f5ac3c86e81..0000000000000 --- a/public/app/features/alerting/state/actions.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { getBackendSrv, isFetchError, locationService } from '@grafana/runtime'; -import { notifyApp } from 'app/core/actions'; -import { createErrorNotification, createSuccessNotification } from 'app/core/copy/appNotification'; -import { AlertRuleDTO, NotifierDTO, ThunkResult } from 'app/types'; - -import { loadAlertRules, loadedAlertRules, notificationChannelLoaded, setNotificationChannels } from './reducers'; - -export function getAlertRulesAsync(options: { state: string }): ThunkResult { - return async (dispatch) => { - dispatch(loadAlertRules()); - const rules: AlertRuleDTO[] = await getBackendSrv().get('/api/alerts', options); - dispatch(loadedAlertRules(rules)); - }; -} - -export function togglePauseAlertRule(id: number, options: { paused: boolean }): ThunkResult { - return async (dispatch) => { - await getBackendSrv().post(`/api/alerts/${id}/pause`, options); - const stateFilter = locationService.getSearchObject().state || 'all'; - dispatch(getAlertRulesAsync({ state: stateFilter.toString() })); - }; -} - -export function createNotificationChannel(data: any): ThunkResult> { - return async (dispatch) => { - try { - await getBackendSrv().post(`/api/alert-notifications`, data); - dispatch(notifyApp(createSuccessNotification('Notification created'))); - locationService.push('/alerting/notifications'); - } catch (error) { - if (isFetchError(error)) { - dispatch(notifyApp(createErrorNotification(error.data.error))); - } - } - }; -} - -export function updateNotificationChannel(data: any): ThunkResult { - return async (dispatch) => { - try { - await getBackendSrv().put(`/api/alert-notifications/${data.id}`, data); - dispatch(notifyApp(createSuccessNotification('Notification updated'))); - } catch (error) { - if (isFetchError(error)) { - dispatch(notifyApp(createErrorNotification(error.data.error))); - } - } - }; -} - -export function testNotificationChannel(data: any): ThunkResult { - return async (dispatch, getState) => { - const channel = getState().notificationChannel.notificationChannel; - await getBackendSrv().post('/api/alert-notifications/test', { id: channel.id, ...data }); - }; -} - -export function loadNotificationTypes(): ThunkResult { - return async (dispatch) => { - const alertNotifiers: NotifierDTO[] = await getBackendSrv().get(`/api/alert-notifiers`); - - const notificationTypes = alertNotifiers.sort((o1, o2) => { - if (o1.name > o2.name) { - return 1; - } - return -1; - }); - - dispatch(setNotificationChannels(notificationTypes)); - }; -} - -export function loadNotificationChannel(id: number): ThunkResult { - return async (dispatch) => { - await dispatch(loadNotificationTypes()); - const notificationChannel = await getBackendSrv().get(`/api/alert-notifications/${id}`); - dispatch(notificationChannelLoaded(notificationChannel)); - }; -} diff --git a/public/app/features/alerting/unified/AlertingNotEnabled.tsx b/public/app/features/alerting/unified/AlertingNotEnabled.tsx new file mode 100644 index 0000000000000..7d2b89ae9e5df --- /dev/null +++ b/public/app/features/alerting/unified/AlertingNotEnabled.tsx @@ -0,0 +1,29 @@ +import React from 'react'; + +import { NavModel } from '@grafana/data'; +import { Page } from 'app/core/components/Page/Page'; + +export default function FeatureTogglePage() { + const navModel: NavModel = { + node: { + text: 'Alerting is not enabled', + hideFromBreadcrumbs: true, + subTitle: 'To enable alerting, enable it in the Grafana config', + }, + main: { + text: 'Alerting is not enabled', + }, + }; + + return ( + + +
+          {`[unified_alerting]
+enabled = true
+`}
+        
+
+
+ ); +} diff --git a/public/app/features/alerting/unified/AlertsFolderView.test.tsx b/public/app/features/alerting/unified/AlertsFolderView.test.tsx index ad59a43299dd0..4ae40d245b4a6 100644 --- a/public/app/features/alerting/unified/AlertsFolderView.test.tsx +++ b/public/app/features/alerting/unified/AlertsFolderView.test.tsx @@ -8,6 +8,7 @@ import { FolderState } from 'app/types'; import { CombinedRuleNamespace } from 'app/types/unified-alerting'; import { AlertsFolderView } from './AlertsFolderView'; +import { useCombinedRuleNamespaces } from './hooks/useCombinedRuleNamespaces'; import { mockCombinedRule } from './mocks'; import { GRAFANA_RULES_SOURCE_NAME } from './utils/datasource'; @@ -21,7 +22,7 @@ const ui = { }, }; -const combinedNamespaceMock = jest.fn(); +const combinedNamespaceMock = jest.fn(useCombinedRuleNamespaces); jest.mock('./hooks/useCombinedRuleNamespaces', () => ({ useCombinedRuleNamespaces: () => combinedNamespaceMock(), })); @@ -41,13 +42,14 @@ const mockFolder = (folderOverride: Partial = {}): FolderState => { }; describe('AlertsFolderView tests', () => { - it('Should display grafana alert rules when the namespace name matches the folder name', () => { + it('Should display grafana alert rules when the folder uid matches the name space uid', () => { // Arrange const folder = mockFolder(); const grafanaNamespace: CombinedRuleNamespace = { name: folder.title, rulesSource: GRAFANA_RULES_SOURCE_NAME, + uid: 'folder-1', groups: [ { name: 'group1', @@ -90,13 +92,14 @@ describe('AlertsFolderView tests', () => { expect(alertRows[5]).toHaveTextContent('Test Alert 6'); }); - it('Should not display alert rules when the namespace name does not match the folder name', () => { + it('Should not display alert rules when the namespace uid does not match the folder uid', () => { // Arrange const folder = mockFolder(); const grafanaNamespace: CombinedRuleNamespace = { name: 'Folder without alerts', rulesSource: GRAFANA_RULES_SOURCE_NAME, + uid: 'folder-2', groups: [ { name: 'default', @@ -129,6 +132,7 @@ describe('AlertsFolderView tests', () => { const grafanaNamespace: CombinedRuleNamespace = { name: folder.title, rulesSource: GRAFANA_RULES_SOURCE_NAME, + uid: 'folder-1', groups: [ { name: 'default', @@ -161,6 +165,7 @@ describe('AlertsFolderView tests', () => { const grafanaNamespace: CombinedRuleNamespace = { name: folder.title, rulesSource: GRAFANA_RULES_SOURCE_NAME, + uid: 'folder-1', groups: [ { name: 'default', diff --git a/public/app/features/alerting/unified/AlertsFolderView.tsx b/public/app/features/alerting/unified/AlertsFolderView.tsx index c07a3e65fe492..ff71c426a72a2 100644 --- a/public/app/features/alerting/unified/AlertsFolderView.tsx +++ b/public/app/features/alerting/unified/AlertsFolderView.tsx @@ -50,7 +50,8 @@ export const AlertsFolderView = ({ folder }: Props) => { const { nameFilter, labelFilter, sortOrder, setNameFilter, setLabelFilter, setSortOrder } = useAlertsFolderViewParams(); - const matchingNamespace = combinedNamespaces.find((namespace) => namespace.name === folder.title); + const matchingNamespace = combinedNamespaces.find((namespace) => namespace.uid === folder.uid); + const alertRules = matchingNamespace?.groups.flatMap((group) => group.rules) ?? []; const filteredRules = filterAndSortRules(alertRules, nameFilter, labelFilter, sortOrder ?? SortOrder.Ascending); @@ -140,8 +141,8 @@ function useAlertsFolderViewParams() { sortParam === SortOrder.Ascending ? SortOrder.Ascending : sortParam === SortOrder.Descending - ? SortOrder.Descending - : undefined + ? SortOrder.Descending + : undefined ); useDebounce( diff --git a/public/app/features/alerting/unified/Analytics.ts b/public/app/features/alerting/unified/Analytics.ts index 2cc69d578ddcd..ef58a579ec255 100644 --- a/public/app/features/alerting/unified/Analytics.ts +++ b/public/app/features/alerting/unified/Analytics.ts @@ -1,12 +1,16 @@ +import { isEmpty } from 'lodash'; + import { dateTime } from '@grafana/data'; -import { faro, LogLevel as GrafanaLogLevel } from '@grafana/faro-web-sdk'; -import { getBackendSrv, logError } from '@grafana/runtime'; +import { createMonitoringLogger, getBackendSrv } from '@grafana/runtime'; import { config, reportInteraction } from '@grafana/runtime/src'; import { contextSrv } from 'app/core/core'; import { RuleNamespace } from '../../../types/unified-alerting'; import { RulerRulesConfigDTO } from '../../../types/unified-alerting-dto'; +import { getSearchFilterFromQuery, RulesFilter } from './search/rulesSearchParser'; +import { RuleFormType } from './types/rule-form'; + export const USER_CREATION_MIN_DAYS = 7; export const LogMessages = { @@ -22,33 +26,29 @@ export const LogMessages = { unknownMessageFromError: 'unknown messageFromError', }; -// logInfo from '@grafana/runtime' should be used, but it doesn't handle Grafana JS Agent correctly -export function logInfo(message: string, context: Record = {}) { - if (config.grafanaJavascriptAgent.enabled) { - faro.api.pushLog([message], { - level: GrafanaLogLevel.INFO, - context: { ...context, module: 'Alerting' }, - }); - } -} +const { logInfo, logError, logMeasurement } = createMonitoringLogger('features.alerting', { module: 'Alerting' }); -export function logAlertingError(error: Error, context: Record = {}) { - logError(error, { ...context, module: 'Alerting' }); -} +export { logInfo, logError, logMeasurement }; // eslint-disable-next-line @typescript-eslint/no-explicit-any export function withPerformanceLogging Promise>( + type: string, func: TFunc, - message: string, context: Record ): (...args: Parameters) => Promise>> { return async function (...args) { const startLoadingTs = performance.now(); + const response = await func(...args); - logInfo(message, { - loadTimeMs: (performance.now() - startLoadingTs).toFixed(0), - ...context, - }); + const loadTimesMs = performance.now() - startLoadingTs; + + logMeasurement( + type, + { + loadTimesMs, + }, + context + ); return response; }; @@ -56,8 +56,8 @@ export function withPerformanceLogging Promise // eslint-disable-next-line @typescript-eslint/no-explicit-any export function withPromRulesMetadataLogging Promise>( + type: string, func: TFunc, - message: string, context: Record ) { return async (...args: Parameters) => { @@ -66,13 +66,16 @@ export function withPromRulesMetadataLogging P const { namespacesCount, groupsCount, rulesCount } = getPromRulesMetadata(response); - logInfo(message, { - loadTimeMs: (performance.now() - startLoadingTs).toFixed(0), - namespacesCount, - groupsCount, - rulesCount, - ...context, - }); + logMeasurement( + type, + { + loadTimeMs: performance.now() - startLoadingTs, + namespacesCount, + groupsCount, + rulesCount, + }, + context + ); return response; }; } @@ -83,9 +86,9 @@ function getPromRulesMetadata(promRules: RuleNamespace[]) { const rulesCount = promRules.flatMap((ns) => ns.groups).flatMap((g) => g.rules).length; const metadata = { - namespacesCount: namespacesCount.toFixed(0), - groupsCount: groupsCount.toFixed(0), - rulesCount: rulesCount.toFixed(0), + namespacesCount: namespacesCount, + groupsCount: groupsCount, + rulesCount: rulesCount, }; return metadata; @@ -93,8 +96,8 @@ function getPromRulesMetadata(promRules: RuleNamespace[]) { // eslint-disable-next-line @typescript-eslint/no-explicit-any export function withRulerRulesMetadataLogging Promise>( + type: string, func: TFunc, - message: string, context: Record ) { return async (...args: Parameters) => { @@ -103,26 +106,29 @@ export function withRulerRulesMetadataLogging const { namespacesCount, groupsCount, rulesCount } = getRulerRulesMetadata(response); - logInfo(message, { - loadTimeMs: (performance.now() - startLoadingTs).toFixed(0), - namespacesCount, - groupsCount, - rulesCount, - ...context, - }); + logMeasurement( + type, + { + namespacesCount, + groupsCount, + rulesCount, + loadTimeMs: performance.now() - startLoadingTs, + }, + context + ); return response; }; } function getRulerRulesMetadata(rulerRules: RulerRulesConfigDTO) { - const namespacesCount = Object.keys(rulerRules).length; + const namespaces = Object.keys(rulerRules); const groups = Object.values(rulerRules).flatMap((groups) => groups); const rules = groups.flatMap((group) => group.rules); return { - namespacesCount: namespacesCount.toFixed(0), - groupsCount: groups.length.toFixed(0), - rulesCount: rules.length.toFixed(0), + namespacesCount: namespaces.length, + groupsCount: groups.length, + rulesCount: rules.length, }; } @@ -155,27 +161,17 @@ export const trackRuleListNavigation = async ( reportInteraction('grafana_alerting_navigation', props); }; -export const trackNewAlerRuleFormSaved = async (props: AlertRuleTrackingProps) => { - const isNew = await isNewUser(); - if (isNew) { - return; - } +export const trackAlertRuleFormSaved = (props: { formAction: 'create' | 'update'; ruleType?: RuleFormType }) => { reportInteraction('grafana_alerting_rule_creation', props); }; -export const trackNewAlerRuleFormCancelled = async (props: AlertRuleTrackingProps) => { - const isNew = await isNewUser(); - if (isNew) { - return; - } +export const trackAlertRuleFormCancelled = (props: { formAction: 'create' | 'update' }) => { reportInteraction('grafana_alerting_rule_aborted', props); }; -export const trackNewAlerRuleFormError = async (props: AlertRuleTrackingProps & { error: string }) => { - const isNew = await isNewUser(); - if (isNew) { - return; - } +export const trackAlertRuleFormError = ( + props: AlertRuleTrackingProps & { error: string; formAction: 'create' | 'update' } +) => { reportInteraction('grafana_alerting_rule_form_error', props); }; @@ -188,6 +184,55 @@ export const trackInsightsFeedback = async (props: { useful: boolean; panel: str reportInteraction('grafana_alerting_insights', { ...defaults, ...props }); }; +interface RulesSearchInteractionPayload { + filter: string; + triggeredBy: 'typing' | 'component'; +} + +function trackRulesSearchInteraction(payload: RulesSearchInteractionPayload) { + reportInteraction('grafana_alerting_rules_search', { ...payload }); +} + +export function trackRulesSearchInputInteraction({ oldQuery, newQuery }: { oldQuery: string; newQuery: string }) { + try { + const oldFilter = getSearchFilterFromQuery(oldQuery); + const newFilter = getSearchFilterFromQuery(newQuery); + + const oldFilterTerms = extractFilterKeys(oldFilter); + const newFilterTerms = extractFilterKeys(newFilter); + + const newTerms = newFilterTerms.filter((term) => !oldFilterTerms.includes(term)); + newTerms.forEach((term) => { + trackRulesSearchInteraction({ filter: term, triggeredBy: 'typing' }); + }); + } catch (e: unknown) { + if (e instanceof Error) { + logError(e); + } + } +} + +function extractFilterKeys(filter: RulesFilter) { + return Object.entries(filter) + .filter(([_, value]) => !isEmpty(value)) + .map(([key]) => key); +} + +export function trackRulesSearchComponentInteraction(filter: keyof RulesFilter) { + trackRulesSearchInteraction({ filter, triggeredBy: 'component' }); +} + +export function trackRulesListViewChange(payload: { view: string }) { + reportInteraction('grafana_alerting_rules_list_mode', { ...payload }); +} +export function trackSwitchToSimplifiedRouting() { + reportInteraction('grafana_alerting_switch_to_simplified_routing'); +} + +export function trackSwitchToPoliciesRouting() { + reportInteraction('grafana_alerting_switch_to_policies_routing'); +} + export type AlertRuleTrackingProps = { user_id: number; grafana_version?: string; diff --git a/public/app/features/alerting/unified/CloneRuleEditor.test.tsx b/public/app/features/alerting/unified/CloneRuleEditor.test.tsx index 2c8ba1f1190f0..747f66b4eb1e4 100644 --- a/public/app/features/alerting/unified/CloneRuleEditor.test.tsx +++ b/public/app/features/alerting/unified/CloneRuleEditor.test.tsx @@ -1,3 +1,4 @@ +import 'whatwg-fetch'; import { render, waitFor, waitForElementToBeRemoved, within } from '@testing-library/react'; import { setupServer } from 'msw/node'; import React from 'react'; @@ -8,8 +9,8 @@ import { byRole, byTestId, byText } from 'testing-library-selector'; import { selectors } from '@grafana/e2e-selectors/src'; import { config, setBackendSrv, setDataSourceSrv } from '@grafana/runtime'; import { backendSrv } from 'app/core/services/backend_srv'; +import { DashboardSearchItem, DashboardSearchItemType } from 'app/features/search/types'; import { AlertManagerCortexConfig } from 'app/plugins/datasource/alertmanager/types'; -import 'whatwg-fetch'; import { RuleWithLocation } from 'app/types/unified-alerting'; import { @@ -156,7 +157,9 @@ describe('CloneRuleEditor', function () { 'folder-one': [{ name: 'group1', interval: '20s', rules: [originRule] }], }); - mockSearchApi(server).search([]); + mockSearchApi(server).search([ + mockDashboardSearchItem({ title: 'folder-one', uid: '123', type: DashboardSearchItemType.DashDB }), + ]); mockAlertmanagerConfigResponse(server, GRAFANA_RULES_SOURCE_NAME, amConfig); render(, { @@ -209,7 +212,15 @@ describe('CloneRuleEditor', function () { rules: [originRule], }); - mockSearchApi(server).search([]); + mockSearchApi(server).search([ + mockDashboardSearchItem({ + title: 'folder-one', + uid: '123', + type: DashboardSearchItemType.DashDB, + folderTitle: 'folder-one', + folderUid: '123', + }), + ]); mockAlertmanagerConfigResponse(server, GRAFANA_RULES_SOURCE_NAME, amConfig); render( @@ -362,3 +373,18 @@ describe('CloneRuleEditor', function () { }); }); }); + +function mockDashboardSearchItem(searchItem: Partial) { + return { + title: '', + uid: '', + type: DashboardSearchItemType.DashDB, + url: '', + uri: '', + items: [], + tags: [], + slug: '', + isStarred: false, + ...searchItem, + }; +} diff --git a/public/app/features/alerting/unified/GrafanaRuleQueryViewer.test.tsx b/public/app/features/alerting/unified/GrafanaRuleQueryViewer.test.tsx index 6539c35b67764..b77aba3e2e3b0 100644 --- a/public/app/features/alerting/unified/GrafanaRuleQueryViewer.test.tsx +++ b/public/app/features/alerting/unified/GrafanaRuleQueryViewer.test.tsx @@ -1,14 +1,17 @@ -import { render } from '@testing-library/react'; -import { noop } from 'lodash'; +import { render, waitFor } from '@testing-library/react'; import React from 'react'; +import { TestProvider } from 'test/helpers/TestProvider'; import { DataSourceRef } from '@grafana/schema'; import { AlertQuery } from 'app/types/unified-alerting-dto'; import { GrafanaRuleQueryViewer } from './GrafanaRuleQueryViewer'; +import { mockCombinedRule } from './mocks'; describe('GrafanaRuleQueryViewer', () => { - it('renders without crashing', () => { + it('renders without crashing', async () => { + const rule = mockCombinedRule(); + const getDataSourceQuery = (refId: string) => { const query: AlertQuery = { refId: refId, @@ -72,9 +75,11 @@ describe('GrafanaRuleQueryViewer', () => { getExpression('D', { type: '' }), ]; const { getByTestId } = render( - + , + { wrapper: TestProvider } ); - expect(getByTestId('queries-container')).toHaveStyle('flex-wrap: wrap'); + + await waitFor(() => expect(getByTestId('queries-container')).toHaveStyle('flex-wrap: wrap')); expect(getByTestId('expressions-container')).toHaveStyle('flex-wrap: wrap'); }); }); diff --git a/public/app/features/alerting/unified/GrafanaRuleQueryViewer.tsx b/public/app/features/alerting/unified/GrafanaRuleQueryViewer.tsx index 995ce8d64881d..83cf88bfe3724 100644 --- a/public/app/features/alerting/unified/GrafanaRuleQueryViewer.tsx +++ b/public/app/features/alerting/unified/GrafanaRuleQueryViewer.tsx @@ -1,14 +1,15 @@ import { css, cx } from '@emotion/css'; -import { dump } from 'js-yaml'; import { keyBy, startCase } from 'lodash'; import React from 'react'; -import { DataSourceInstanceSettings, GrafanaTheme2, PanelData, RelativeTimeRange } from '@grafana/data'; +import { DataSourceInstanceSettings, DataSourceRef, GrafanaTheme2, PanelData, urlUtil } from '@grafana/data'; +import { secondsToHms } from '@grafana/data/src/datetime/rangeutil'; import { config } from '@grafana/runtime'; -import { Badge, Stack, useStyles2 } from '@grafana/ui'; -import { mapRelativeTimeRangeToOption } from '@grafana/ui/src/components/DateTimePickers/RelativeTimeRangePicker/utils'; +import { Preview } from '@grafana/sql/src/components/visual-query-builder/Preview'; +import { Badge, ErrorBoundaryAlert, LinkButton, Stack, Text, useStyles2 } from '@grafana/ui'; +import { CombinedRule } from 'app/types/unified-alerting'; -import { AlertQuery } from '../../../types/unified-alerting-dto'; +import { AlertDataQuery, AlertQuery } from '../../../types/unified-alerting-dto'; import { isExpressionQuery } from '../../expressions/guards'; import { downsamplingTypes, @@ -22,51 +23,47 @@ import { } from '../../expressions/types'; import alertDef, { EvalFunction } from '../state/alertDef'; +import { Spacer } from './components/Spacer'; +import { WithReturnButton } from './components/WithReturnButton'; import { ExpressionResult } from './components/expressions/Expression'; import { getThresholdsForQueries, ThresholdDefinition } from './components/rule-editor/util'; import { RuleViewerVisualization } from './components/rule-viewer/RuleViewerVisualization'; +import { DatasourceModelPreview } from './components/rule-viewer/tabs/Query/DataSourceModelPreview'; +import { AlertRuleAction, useAlertRuleAbility } from './hooks/useAbilities'; interface GrafanaRuleViewerProps { + rule: CombinedRule; queries: AlertQuery[]; condition: string; evalDataByQuery?: Record; - evalTimeRanges?: Record; - onTimeRangeChange: (queryRef: string, timeRange: RelativeTimeRange) => void; } -export function GrafanaRuleQueryViewer({ - queries, - condition, - evalDataByQuery = {}, - evalTimeRanges = {}, - onTimeRangeChange, -}: GrafanaRuleViewerProps) { +export function GrafanaRuleQueryViewer({ rule, queries, condition, evalDataByQuery = {} }: GrafanaRuleViewerProps) { const dsByUid = keyBy(Object.values(config.datasources), (ds) => ds.uid); const dataQueries = queries.filter((q) => !isExpressionQuery(q.model)); const expressions = queries.filter((q) => isExpressionQuery(q.model)); const styles = useStyles2(getExpressionViewerStyles); - const thresholds = getThresholdsForQueries(queries); + const thresholds = getThresholdsForQueries(queries, condition); return ( - +
- + {dataQueries.map(({ model, relativeTimeRange, refId, datasourceUid }, index) => { const dataSource = dsByUid[datasourceUid]; return ( onTimeRangeChange(refId, timeRange)} /> ); })} @@ -97,56 +94,100 @@ export function GrafanaRuleQueryViewer({ } interface QueryPreviewProps extends Pick { + rule: CombinedRule; isAlertCondition: boolean; dataSource?: DataSourceInstanceSettings; queryData?: PanelData; thresholds?: ThresholdDefinition; - evalTimeRange?: RelativeTimeRange; - onEvalTimeRangeChange: (timeRange: RelativeTimeRange) => void; } export function QueryPreview({ refId, - relativeTimeRange, + rule, thresholds, model, dataSource, queryData, - evalTimeRange, - onEvalTimeRangeChange, + relativeTimeRange, }: QueryPreviewProps) { const styles = useStyles2(getQueryPreviewStyles); + const isExpression = isExpressionQuery(model); + const [exploreSupported, exploreAllowed] = useAlertRuleAbility(rule, AlertRuleAction.Explore); + const canExplore = exploreSupported && exploreAllowed; + + const headerItems: React.ReactNode[] = []; + + if (dataSource) { + const dataSourceName = dataSource.name ?? '[[Data source not found]]'; + const dataSourceImgUrl = dataSource.meta.info.logos.small; + + headerItems.push(); + } - // relativeTimeRange is what is defined for a query - // evalTimeRange is temporary value which the user can change - const headerItems = [dataSource?.name ?? '[[Data source not found]]']; if (relativeTimeRange) { - headerItems.push(mapRelativeTimeRangeToOption(relativeTimeRange).display); + headerItems.push( + + {secondsToHms(relativeTimeRange.from)} to now + + ); + } + + let exploreLink: string | undefined = undefined; + if (!isExpression && canExplore) { + exploreLink = dataSource && createExploreLink(dataSource, model); } return ( - -
-        {dump(model)}
-      
- {dataSource && ( - - )} -
+ <> + +
+ + {model && dataSource && } + +
+
+ {dataSource && } + + ); +} + +function createExploreLink(settings: DataSourceRef, model: AlertDataQuery): string { + const { uid, type } = settings; + const { refId, ...rest } = model; + + /* + In my testing I've found some alerts that don't have a data source embedded inside the model. + At this moment in time it is unclear to me why some alert definitions not have a data source embedded in the model. + + I don't think that should happen here, the fact that the datasource ref is sometimes missing here is a symptom of another cause. (Gilles) + */ + return urlUtil.renderUrl(`${config.appSubUrl}/explore`, { + left: JSON.stringify({ + datasource: settings.uid, + queries: [{ refId: 'A', ...rest, datasource: { type, uid } }], + range: { from: 'now-1h', to: 'now' }, + }), + }); +} + +interface DataSourceBadgeProps { + name: string; + imgUrl: string; +} + +function DataSourceBadge({ name, imgUrl }: DataSourceBadgeProps) { + const styles = useStyles2(getQueryPreviewStyles); + + return ( +
+ {name} + {name} +
); } const getQueryPreviewStyles = (theme: GrafanaTheme2) => ({ - code: css` + queryPreviewWrapper: css` margin: ${theme.spacing(1)}; `, contentBox: css` @@ -155,6 +196,14 @@ const getQueryPreviewStyles = (theme: GrafanaTheme2) => ({ visualization: css` padding: ${theme.spacing(1)}; `, + dataSource: css({ + border: `1px solid ${theme.colors.border.weak}`, + borderRadius: theme.shape.radius.default, + padding: theme.spacing(0.5, 1), + display: 'flex', + alignItems: 'center', + gap: theme.spacing(1), + }), }); interface ExpressionPreviewProps extends Pick { @@ -182,14 +231,26 @@ function ExpressionPreview({ refId, model, evalData, isAlertCondition }: Express case ExpressionQueryType.threshold: return ; + case ExpressionQueryType.sql: + return ; + default: return <>Expression not supported: {model.type}; } } return ( - + + {startCase(model.type)} + , + ]} + isAlertCondition={isAlertCondition} + > {renderPreview()} + {evalData && } ); @@ -197,27 +258,29 @@ function ExpressionPreview({ refId, model, evalData, isAlertCondition }: Express interface QueryBoxProps extends React.PropsWithChildren { refId: string; - headerItems?: string[]; + headerItems?: React.ReactNode; isAlertCondition?: boolean; - className?: string; + exploreLink?: string; } -function QueryBox({ refId, headerItems = [], children, isAlertCondition, className }: QueryBoxProps) { +function QueryBox({ refId, headerItems = [], children, isAlertCondition, exploreLink }: QueryBoxProps) { const styles = useStyles2(getQueryBoxStyles); return ( -
+
{refId} - {headerItems.map((item, index) => ( - - {item} - - ))} - {isAlertCondition && ( -
- -
+ {headerItems} + + {isAlertCondition && } + {exploreLink && ( + + View in Explore + + } + /> )}
{children} @@ -226,11 +289,14 @@ function QueryBox({ refId, headerItems = [], children, isAlertCondition, classNa } const getQueryBoxStyles = (theme: GrafanaTheme2) => ({ - container: css` - flex: 1 0 25%; - border: 1px solid ${theme.colors.border.strong}; - max-width: 100%; - `, + container: css({ + flex: '1 0 25%', + border: `1px solid ${theme.colors.border.weak}`, + maxWidth: '100%', + borderRadius: theme.shape.radius.default, + display: 'flex', + flexDirection: 'column', + }), header: css` display: flex; align-items: center; @@ -238,19 +304,18 @@ const getQueryBoxStyles = (theme: GrafanaTheme2) => ({ padding: ${theme.spacing(1)}; background-color: ${theme.colors.background.secondary}; `, - textBlock: css` - border: 1px solid ${theme.colors.border.weak}; - padding: ${theme.spacing(0.5, 1)}; - background-color: ${theme.colors.background.primary}; - `, - refId: css` - color: ${theme.colors.text.link}; - padding: ${theme.spacing(0.5, 1)}; - border: 1px solid ${theme.colors.border.weak}; - `, - conditionIndicator: css` - margin-left: auto; - `, + textBlock: css({ + border: `1px solid ${theme.colors.border.weak}`, + padding: theme.spacing(0.5, 1), + backgroundColor: theme.colors.background.primary, + borderRadius: theme.shape.radius.default, + }), + refId: css({ + color: theme.colors.text.link, + padding: theme.spacing(0.5, 1), + border: `1px solid ${theme.colors.border.weak}`, + borderRadius: theme.shape.radius.default, + }), }); function ClassicConditionViewer({ model }: { model: ExpressionQuery }) { @@ -321,7 +386,7 @@ const getReduceConditionViewerStyles = (theme: GrafanaTheme2) => ({ container: css` padding: ${theme.spacing(1)}; display: grid; - gap: ${theme.spacing(1)}; + gap: ${theme.spacing(0.5)}; grid-template-rows: 1fr 1fr; grid-template-columns: 1fr 1fr 1fr 1fr; @@ -360,7 +425,7 @@ const getResampleExpressionViewerStyles = (theme: GrafanaTheme2) => ({ container: css` padding: ${theme.spacing(1)}; display: grid; - gap: ${theme.spacing(1)}; + gap: ${theme.spacing(0.5)}; grid-template-columns: 1fr 1fr 1fr 1fr; grid-template-rows: 1fr 1fr; `, @@ -377,20 +442,44 @@ function ThresholdExpressionViewer({ model }: { model: ExpressionQuery }) { const isRange = evaluator ? isRangeEvaluator(evaluator) : false; - return ( -
-
Input
-
{expression}
+ const unloadEvaluator = conditions && conditions[0]?.unloadEvaluator; + const unloadThresholdFunction = thresholdFunctions.find((tf) => tf.value === unloadEvaluator?.type); - {evaluator && ( - <> -
{thresholdFunction?.label}
-
- {isRange ? `(${evaluator.params[0]}; ${evaluator.params[1]})` : evaluator.params[0]} -
- - )} -
+ const unloadIsRange = unloadEvaluator ? isRangeEvaluator(unloadEvaluator) : false; + + return ( + <> +
+
Input
+
{expression}
+ + {evaluator && ( + <> +
{thresholdFunction?.label}
+
+ {isRange ? `(${evaluator.params[0]}; ${evaluator.params[1]})` : evaluator.params[0]} +
+ + )} +
+
+ {unloadEvaluator && ( + <> +
Stop alerting when
+
{expression}
+ + <> +
{unloadThresholdFunction?.label}
+
+ {unloadIsRange + ? `(${unloadEvaluator.params[0]}; ${unloadEvaluator.params[1]})` + : unloadEvaluator.params[0]} +
+ + + )} +
+ ); } @@ -405,7 +494,7 @@ const getExpressionViewerStyles = (theme: GrafanaTheme2) => { container: css` padding: ${theme.spacing(1)}; display: flex; - gap: ${theme.spacing(1)}; + gap: ${theme.spacing(0.5)}; `, blue: css` ${blue}; @@ -446,10 +535,12 @@ const getCommonQueryStyles = (theme: GrafanaTheme2) => ({ font-size: ${theme.typography.bodySmall.fontSize}; line-height: ${theme.typography.bodySmall.lineHeight}; font-weight: ${theme.typography.fontWeightBold}; + border-radius: ${theme.shape.radius.default}; `, value: css` padding: ${theme.spacing(0.5, 1)}; border: 1px solid ${theme.colors.border.weak}; + border-radius: ${theme.shape.radius.default}; `, }); diff --git a/public/app/features/alerting/unified/MoreActionsRuleButtons.tsx b/public/app/features/alerting/unified/MoreActionsRuleButtons.tsx deleted file mode 100644 index d3fd600533637..0000000000000 --- a/public/app/features/alerting/unified/MoreActionsRuleButtons.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import { isEmpty } from 'lodash'; -import React from 'react'; -import { useLocation } from 'react-router-dom'; -import { useToggle } from 'react-use'; - -import { urlUtil } from '@grafana/data'; -import { Button, Dropdown, Icon, LinkButton, Menu, MenuItem } from '@grafana/ui'; - -import { logInfo, LogMessages } from './Analytics'; -import { GrafanaRulesExporter } from './components/export/GrafanaRulesExporter'; -import { AlertingAction, useAlertingAbility } from './hooks/useAbilities'; - -interface Props {} - -export function MoreActionsRuleButtons({}: Props) { - const [createRuleSupported, createRuleAllowed] = useAlertingAbility(AlertingAction.CreateAlertRule); - const [createCloudRuleSupported, createCloudRuleAllowed] = useAlertingAbility(AlertingAction.CreateExternalAlertRule); - const [exportRulesSupported, exportRulesAllowed] = useAlertingAbility(AlertingAction.ExportGrafanaManagedRules); - - const location = useLocation(); - const [showExportDrawer, toggleShowExportDrawer] = useToggle(false); - - const canCreateGrafanaRules = createRuleSupported && createRuleAllowed; - const canCreateCloudRules = createCloudRuleSupported && createCloudRuleAllowed; - const canExportRules = exportRulesSupported && exportRulesAllowed; - - const menuItems: JSX.Element[] = []; - - if (canCreateGrafanaRules || canCreateCloudRules) { - menuItems.push( - - ); - } - - if (canExportRules) { - menuItems.push( - - ); - } - - return ( - <> - {(canCreateGrafanaRules || canCreateCloudRules) && ( - logInfo(LogMessages.alertRuleFromScratch)} - > - New alert rule - - )} - - {!isEmpty(menuItems) && ( - {menuItems}}> - - - )} - {canExportRules && showExportDrawer && } - - ); -} diff --git a/public/app/features/alerting/unified/MuteTimings.test.tsx b/public/app/features/alerting/unified/MuteTimings.test.tsx index e87db13b33cba..d52434ca228de 100644 --- a/public/app/features/alerting/unified/MuteTimings.test.tsx +++ b/public/app/features/alerting/unified/MuteTimings.test.tsx @@ -1,4 +1,4 @@ -import { render, waitFor, fireEvent, within } from '@testing-library/react'; +import { fireEvent, render, waitFor, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; import { TestProvider } from 'test/helpers/TestProvider'; @@ -10,7 +10,7 @@ import { AccessControlAction } from 'app/types'; import MuteTimings from './MuteTimings'; import { fetchAlertManagerConfig, updateAlertManagerConfig } from './api/alertmanager'; -import { grantUserPermissions, mockDataSource, MockDataSourceSrv } from './mocks'; +import { MockDataSourceSrv, grantUserPermissions, mockDataSource } from './mocks'; import { DataSourceType } from './utils/datasource'; jest.mock('./api/alertmanager'); @@ -71,6 +71,21 @@ const muteTimeInterval: MuteTimeInterval = { }, ], }; +const muteTimeInterval2: MuteTimeInterval = { + name: 'default-mute2', + time_intervals: [ + { + times: [ + { + start_time: '12:00', + end_time: '24:00', + }, + ], + days_of_month: ['15', '-1'], + months: ['august:december', 'march'], + }, + ], +}; const defaultConfig: AlertManagerCortexConfig = { alertmanager_config: { @@ -90,6 +105,44 @@ const defaultConfig: AlertManagerCortexConfig = { }, template_files: {}, }; +const defaultConfigWithNewTimeIntervalsField: AlertManagerCortexConfig = { + alertmanager_config: { + receivers: [{ name: 'default' }, { name: 'critical' }], + route: { + receiver: 'default', + group_by: ['alertname'], + routes: [ + { + matchers: ['env=prod', 'region!=EU'], + mute_time_intervals: [muteTimeInterval.name], + }, + ], + }, + templates: [], + time_intervals: [muteTimeInterval], + }, + template_files: {}, +}; + +const defaultConfigWithBothTimeIntervalsField: AlertManagerCortexConfig = { + alertmanager_config: { + receivers: [{ name: 'default' }, { name: 'critical' }], + route: { + receiver: 'default', + group_by: ['alertname'], + routes: [ + { + matchers: ['env=prod', 'region!=EU'], + mute_time_intervals: [muteTimeInterval.name], + }, + ], + }, + templates: [], + time_intervals: [muteTimeInterval], + mute_time_intervals: [muteTimeInterval2], + }, + template_files: {}, +}; const resetMocks = () => { jest.resetAllMocks(); @@ -110,7 +163,102 @@ describe('Mute timings', () => { grantUserPermissions(Object.values(AccessControlAction)); }); - it('creates a new mute timing', async () => { + it('creates a new mute timing, with mute_time_intervals in config', async () => { + renderMuteTimings(); + + await waitFor(() => expect(mocks.api.fetchAlertManagerConfig).toHaveBeenCalled()); + expect(ui.nameField.get()).toBeInTheDocument(); + + await userEvent.type(ui.nameField.get(), 'maintenance period'); + await userEvent.type(ui.startsAt.get(), '22:00'); + await userEvent.type(ui.endsAt.get(), '24:00'); + await userEvent.type(ui.days.get(), '-1'); + await userEvent.type(ui.months.get(), 'january, july'); + + fireEvent.submit(ui.form.get()); + + await waitFor(() => expect(mocks.api.updateAlertManagerConfig).toHaveBeenCalled()); + + const { mute_time_intervals: _, ...configWithoutMuteTimings } = defaultConfig.alertmanager_config; + expect(mocks.api.updateAlertManagerConfig).toHaveBeenCalledWith('grafana', { + ...defaultConfig, + alertmanager_config: { + ...configWithoutMuteTimings, + mute_time_intervals: [ + muteTimeInterval, + { + name: 'maintenance period', + time_intervals: [ + { + days_of_month: ['-1'], + months: ['january', 'july'], + times: [ + { + start_time: '22:00', + end_time: '24:00', + }, + ], + }, + ], + }, + ], + }, + }); + }); + + it('creates a new mute timing, with time_intervals in config', async () => { + mocks.api.fetchAlertManagerConfig.mockImplementation(() => { + return Promise.resolve({ + ...defaultConfigWithNewTimeIntervalsField, + }); + }); + renderMuteTimings(); + + await waitFor(() => expect(mocks.api.fetchAlertManagerConfig).toHaveBeenCalled()); + expect(ui.nameField.get()).toBeInTheDocument(); + + await userEvent.type(ui.nameField.get(), 'maintenance period'); + await userEvent.type(ui.startsAt.get(), '22:00'); + await userEvent.type(ui.endsAt.get(), '24:00'); + await userEvent.type(ui.days.get(), '-1'); + await userEvent.type(ui.months.get(), 'january, july'); + + fireEvent.submit(ui.form.get()); + + await waitFor(() => expect(mocks.api.updateAlertManagerConfig).toHaveBeenCalled()); + + const { mute_time_intervals: _, ...configWithoutMuteTimings } = defaultConfig.alertmanager_config; + expect(mocks.api.updateAlertManagerConfig).toHaveBeenCalledWith('grafana', { + ...defaultConfig, + alertmanager_config: { + ...configWithoutMuteTimings, + mute_time_intervals: [ + muteTimeInterval, + { + name: 'maintenance period', + time_intervals: [ + { + days_of_month: ['-1'], + months: ['january', 'july'], + times: [ + { + start_time: '22:00', + end_time: '24:00', + }, + ], + }, + ], + }, + ], + }, + }); + }); + it('creates a new mute timing, with time_intervals and mute_time_intervals in config', async () => { + mocks.api.fetchAlertManagerConfig.mockImplementation(() => { + return Promise.resolve({ + ...defaultConfigWithBothTimeIntervalsField, + }); + }); renderMuteTimings(); await waitFor(() => expect(mocks.api.fetchAlertManagerConfig).toHaveBeenCalled()); @@ -125,12 +273,15 @@ describe('Mute timings', () => { fireEvent.submit(ui.form.get()); await waitFor(() => expect(mocks.api.updateAlertManagerConfig).toHaveBeenCalled()); + + const { mute_time_intervals, time_intervals, ...configWithoutMuteTimings } = defaultConfig.alertmanager_config; expect(mocks.api.updateAlertManagerConfig).toHaveBeenCalledWith('grafana', { ...defaultConfig, alertmanager_config: { - ...defaultConfig.alertmanager_config, + ...configWithoutMuteTimings, mute_time_intervals: [ muteTimeInterval, + muteTimeInterval2, { name: 'maintenance period', time_intervals: [ @@ -200,7 +351,6 @@ describe('Mute timings', () => { name: 'default-mute', time_intervals: [ { - times: [], weekdays: ['monday'], days_of_month: ['-7:-1'], months: ['3', '6', '9', '12'], diff --git a/public/app/features/alerting/unified/MuteTimings.tsx b/public/app/features/alerting/unified/MuteTimings.tsx index c4d1584380c7b..a49205c477457 100644 --- a/public/app/features/alerting/unified/MuteTimings.tsx +++ b/public/app/features/alerting/unified/MuteTimings.tsx @@ -1,5 +1,5 @@ import React, { useCallback, useEffect, useState } from 'react'; -import { Route, Redirect, Switch, useRouteMatch } from 'react-router-dom'; +import { Redirect, Route, Switch, useRouteMatch } from 'react-router-dom'; import { NavModelItem } from '@grafana/data'; import { Alert } from '@grafana/ui'; @@ -21,8 +21,9 @@ const MuteTimings = () => { const config = currentData?.alertmanager_config; const getMuteTimingByName = useCallback( - (id: string): MuteTimeInterval | undefined => { - const timing = config?.mute_time_intervals?.find(({ name }: MuteTimeInterval) => name === id); + (id: string, fromTimeIntervals: boolean): MuteTimeInterval | undefined => { + const time_intervals = fromTimeIntervals ? config?.time_intervals ?? [] : config?.mute_time_intervals ?? []; + const timing = time_intervals.find(({ name }: MuteTimeInterval) => name === id); if (timing) { const provenance = config?.muteTimeProvenances?.[timing.name]; @@ -53,13 +54,17 @@ const MuteTimings = () => { {() => { if (queryParams['muteName']) { - const muteTiming = getMuteTimingByName(String(queryParams['muteName'])); + const muteTimingInMuteTimings = getMuteTimingByName(String(queryParams['muteName']), false); + const muteTimingInTimeIntervals = getMuteTimingByName(String(queryParams['muteName']), true); + const inTimeIntervals = Boolean(muteTimingInTimeIntervals); + const muteTiming = inTimeIntervals ? muteTimingInTimeIntervals : muteTimingInMuteTimings; const provenance = muteTiming?.provenance; return ( diff --git a/public/app/features/alerting/unified/NotificationPolicies.test.tsx b/public/app/features/alerting/unified/NotificationPolicies.test.tsx index 459ea8e4e67fa..258cab99483c0 100644 --- a/public/app/features/alerting/unified/NotificationPolicies.test.tsx +++ b/public/app/features/alerting/unified/NotificationPolicies.test.tsx @@ -23,7 +23,7 @@ import { fetchAlertManagerConfig, fetchStatus, updateAlertManagerConfig } from ' import { alertmanagerApi } from './api/alertmanagerApi'; import { discoverAlertmanagerFeatures } from './api/buildInfo'; import * as grafanaApp from './components/receivers/grafanaAppReceivers/grafanaApp'; -import { mockDataSource, MockDataSourceSrv, someCloudAlertManagerConfig, someCloudAlertManagerStatus } from './mocks'; +import { MockDataSourceSrv, mockDataSource, someCloudAlertManagerConfig, someCloudAlertManagerStatus } from './mocks'; import { defaultGroupBy } from './utils/amroutes'; import { getAllDataSources } from './utils/config'; import { ALERTMANAGER_NAME_QUERY_KEY } from './utils/constants'; @@ -759,18 +759,22 @@ describe('findRoutesMatchingFilters', () => { ], }; + it('should not filter when we do not have any valid filters', () => { + expect(findRoutesMatchingFilters(simpleRouteTree, {})).toHaveProperty('filtersApplied', false); + }); + it('should not match non-existing', () => { expect( findRoutesMatchingFilters(simpleRouteTree, { labelMatchersFilter: [['foo', MatcherOperator.equal, 'bar']], - }) - ).toHaveLength(0); + }).matchedRoutesWithPath.size + ).toBe(0); - expect( - findRoutesMatchingFilters(simpleRouteTree, { - contactPointFilter: 'does-not-exist', - }) - ).toHaveLength(0); + const matchingRoutes = findRoutesMatchingFilters(simpleRouteTree, { + contactPointFilter: 'does-not-exist', + }); + + expect(matchingRoutes).toMatchSnapshot(); }); it('should work with only label matchers', () => { @@ -778,8 +782,7 @@ describe('findRoutesMatchingFilters', () => { labelMatchersFilter: [['hello', MatcherOperator.equal, 'world']], }); - expect(matchingRoutes).toHaveLength(1); - expect(matchingRoutes[0]).toHaveProperty('id', '1'); + expect(matchingRoutes).toMatchSnapshot(); }); it('should work with only contact point and inheritance', () => { @@ -787,9 +790,7 @@ describe('findRoutesMatchingFilters', () => { contactPointFilter: 'simple-receiver', }); - expect(matchingRoutes).toHaveLength(2); - expect(matchingRoutes[0]).toHaveProperty('id', '1'); - expect(matchingRoutes[1]).toHaveProperty('id', '2'); + expect(matchingRoutes).toMatchSnapshot(); }); it('should work with non-intersecting filters', () => { @@ -798,7 +799,7 @@ describe('findRoutesMatchingFilters', () => { contactPointFilter: 'does-not-exist', }); - expect(matchingRoutes).toHaveLength(0); + expect(matchingRoutes).toMatchSnapshot(); }); it('should work with all filters', () => { @@ -807,8 +808,7 @@ describe('findRoutesMatchingFilters', () => { contactPointFilter: 'simple-receiver', }); - expect(matchingRoutes).toHaveLength(1); - expect(matchingRoutes[0]).toHaveProperty('id', '1'); + expect(matchingRoutes).toMatchSnapshot(); }); }); diff --git a/public/app/features/alerting/unified/NotificationPolicies.tsx b/public/app/features/alerting/unified/NotificationPolicies.tsx index 8c66e0222d29f..234d7b0feaaf3 100644 --- a/public/app/features/alerting/unified/NotificationPolicies.tsx +++ b/public/app/features/alerting/unified/NotificationPolicies.tsx @@ -1,10 +1,9 @@ import { css } from '@emotion/css'; -import { intersectionBy, isEqual } from 'lodash'; import React, { useEffect, useMemo, useState } from 'react'; import { useAsyncFn } from 'react-use'; import { GrafanaTheme2, UrlQueryMap } from '@grafana/data'; -import { Alert, LoadingPlaceholder, Tab, TabContent, TabsBar, useStyles2, withErrorBoundary, Stack } from '@grafana/ui'; +import { Alert, LoadingPlaceholder, Stack, Tab, TabContent, TabsBar, useStyles2, withErrorBoundary } from '@grafana/ui'; import { useQueryParams } from 'app/core/hooks/useQueryParams'; import { ObjectMatcher, Route, RouteWithID } from 'app/plugins/datasource/alertmanager/types'; import { useDispatch } from 'app/types'; @@ -16,12 +15,17 @@ import { useGetContactPointsState } from './api/receiversApi'; import { AlertmanagerPageWrapper } from './components/AlertingPageWrapper'; import { GrafanaAlertmanagerDeliveryWarning } from './components/GrafanaAlertmanagerDeliveryWarning'; import { MuteTimingsTable } from './components/mute-timings/MuteTimingsTable'; -import { findRoutesMatchingPredicate, NotificationPoliciesFilter } from './components/notification-policies/Filters'; +import { mergeTimeIntervals } from './components/mute-timings/util'; +import { + NotificationPoliciesFilter, + findRoutesByMatchers, + findRoutesMatchingPredicate, +} from './components/notification-policies/Filters'; import { useAddPolicyModal, - useEditPolicyModal, - useDeletePolicyModal, useAlertGroupsModal, + useDeletePolicyModal, + useEditPolicyModal, } from './components/notification-policies/Modals'; import { Policy } from './components/notification-policies/Policy'; import { useAlertmanagerConfig } from './hooks/useAlertmanagerConfig'; @@ -30,10 +34,15 @@ import { updateAlertManagerConfigAction } from './state/actions'; import { FormAmRoute } from './types/amroutes'; import { useRouteGroupsMatcher } from './useRouteGroupsMatcher'; import { addUniqueIdentifierToRoute } from './utils/amroutes'; -import { normalizeMatchers } from './utils/matchers'; import { computeInheritedTree } from './utils/notification-policies'; import { initialAsyncRequestState } from './utils/redux'; -import { addRouteToParentRoute, mergePartialAmRouteWithRouteTree, omitRouteFromRouteTree } from './utils/routeTree'; +import { + InsertPosition, + addRouteToReferenceRoute, + cleanRouteIDs, + mergePartialAmRouteWithRouteTree, + omitRouteFromRouteTree, +} from './utils/routeTree'; enum ActiveTab { NotificationPolicies = 'notification_policies', @@ -54,8 +63,8 @@ const AmRoutes = () => { const [contactPointFilter, setContactPointFilter] = useState(); const [labelMatchersFilter, setLabelMatchersFilter] = useState([]); + const { selectedAlertmanager, hasConfigurationAPI, isGrafanaAlertmanager } = useAlertmanager(); const { getRouteGroupsMap } = useRouteGroupsMatcher(); - const { selectedAlertmanager, hasConfigurationAPI } = useAlertmanager(); const contactPointsState = useGetContactPointsState(selectedAlertmanager ?? ''); @@ -93,15 +102,21 @@ const AmRoutes = () => { useEffect(() => { if (rootRoute && alertGroups) { - triggerGetRouteGroupsMap(rootRoute, alertGroups); + triggerGetRouteGroupsMap(rootRoute, alertGroups, { unquoteMatchers: !isGrafanaAlertmanager }); } - }, [rootRoute, alertGroups, triggerGetRouteGroupsMap]); + }, [rootRoute, alertGroups, triggerGetRouteGroupsMap, isGrafanaAlertmanager]); // these are computed from the contactPoint and labels matchers filter const routesMatchingFilters = useMemo(() => { if (!rootRoute) { - return []; + const emptyResult: RoutesMatchingFilters = { + filtersApplied: false, + matchedRoutesWithPath: new Map(), + }; + + return emptyResult; } + return findRoutesMatchingFilters(rootRoute, { contactPointFilter, labelMatchersFilter }); }, [contactPointFilter, labelMatchersFilter, rootRoute]); @@ -123,20 +138,29 @@ const AmRoutes = () => { updateRouteTree(newRouteTree); } - function handleAdd(partialRoute: Partial, parentRoute: RouteWithID) { + function handleAdd(partialRoute: Partial, referenceRoute: RouteWithID, insertPosition: InsertPosition) { if (!rootRoute) { return; } - const newRouteTree = addRouteToParentRoute(selectedAlertmanager ?? '', partialRoute, parentRoute, rootRoute); + const newRouteTree = addRouteToReferenceRoute( + selectedAlertmanager ?? '', + partialRoute, + referenceRoute, + rootRoute, + insertPosition + ); updateRouteTree(newRouteTree); } - function updateRouteTree(routeTree: Route) { + function updateRouteTree(routeTree: Route | RouteWithID) { if (!result) { return; } + // make sure we omit all IDs from our routes + const newRouteTree = cleanRouteIDs(routeTree); + setUpdatingTree(true); dispatch( @@ -145,7 +169,7 @@ const AmRoutes = () => { ...result, alertmanager_config: { ...result.alertmanager_config, - route: routeTree, + route: newRouteTree, }, }, oldConfig: result, @@ -183,8 +207,9 @@ const AmRoutes = () => { if (!selectedAlertmanager) { return null; } + const time_intervals = result?.alertmanager_config ? mergeTimeIntervals(result?.alertmanager_config) : []; - const numberOfMuteTimings = result?.alertmanager_config.mute_time_intervals?.length ?? 0; + const numberOfMuteTimings = time_intervals.length; const haveData = result && !resultError && !resultLoading; const isFetching = !result && resultLoading; const haveError = resultError && !resultLoading; @@ -231,6 +256,7 @@ const AmRoutes = () => { receivers={receivers} onChangeMatchers={setLabelMatchersFilter} onChangeReceiver={setContactPointFilter} + matchingCount={routesMatchingFilters.matchedRoutesWithPath.size} /> )} {rootRoute && ( @@ -249,6 +275,7 @@ const AmRoutes = () => { onShowAlertInstances={showAlertGroupsModal} routesMatchingFilters={routesMatchingFilters} matchingInstancesPreview={{ groupsMap: routeAlertGroupsMap, enabled: !instancesPreviewError }} + isAutoGenerated={false} /> )} @@ -273,35 +300,85 @@ type RouteFilters = { labelMatchersFilter?: ObjectMatcher[]; }; -export const findRoutesMatchingFilters = (rootRoute: RouteWithID, filters: RouteFilters): RouteWithID[] => { +type FilterResult = Map; + +export interface RoutesMatchingFilters { + filtersApplied: boolean; + matchedRoutesWithPath: FilterResult; +} + +export const findRoutesMatchingFilters = (rootRoute: RouteWithID, filters: RouteFilters): RoutesMatchingFilters => { const { contactPointFilter, labelMatchersFilter = [] } = filters; + const hasFilter = contactPointFilter || labelMatchersFilter.length > 0; + const havebothFilters = Boolean(contactPointFilter) && labelMatchersFilter.length > 0; + // if filters are empty we short-circuit this function + if (!hasFilter) { + return { filtersApplied: false, matchedRoutesWithPath: new Map() }; + } + + // we'll collect all of the routes matching the filters + // we track an array of matching routes, each item in the array is for 1 type of filter + // + // [contactPointMatches, labelMatcherMatches] -> [[{ a: [], b: [] }], [{ a: [], c: [] }]] + // later we'll use intersection to find results in all sets of filter matchers let matchedRoutes: RouteWithID[][] = []; + // compute fully inherited tree so all policies have their inherited receiver const fullRoute = computeInheritedTree(rootRoute); - const routesMatchingContactPoint = contactPointFilter + // find all routes for our contact point filter + const matchingRoutesForContactPoint = contactPointFilter ? findRoutesMatchingPredicate(fullRoute, (route) => route.receiver === contactPointFilter) - : undefined; + : new Map(); + const routesMatchingContactPoint = Array.from(matchingRoutesForContactPoint.keys()); if (routesMatchingContactPoint) { matchedRoutes.push(routesMatchingContactPoint); } - const routesMatchingLabelMatchers = labelMatchersFilter.length - ? findRoutesMatchingPredicate(fullRoute, (route) => { - const routeMatchers = normalizeMatchers(route); - return labelMatchersFilter.every((filter) => routeMatchers.some((matcher) => isEqual(filter, matcher))); - }) - : undefined; + // find all routes matching our label matchers + const matchingRoutesForLabelMatchers = labelMatchersFilter.length + ? findRoutesMatchingPredicate(fullRoute, (route) => findRoutesByMatchers(route, labelMatchersFilter)) + : new Map(); - if (routesMatchingLabelMatchers) { - matchedRoutes.push(routesMatchingLabelMatchers); + const routesMatchingLabelFilters = Array.from(matchingRoutesForLabelMatchers.keys()); + if (matchingRoutesForLabelMatchers.size > 0) { + matchedRoutes.push(routesMatchingLabelFilters); } - return intersectionBy(...matchedRoutes, 'id'); + // now that we have our maps for all filters, we just need to find the intersection of all maps by route if we have both filters + const routesForAllFilterResults = havebothFilters + ? findMapIntersection(matchingRoutesForLabelMatchers, matchingRoutesForContactPoint) + : new Map([...matchingRoutesForLabelMatchers, ...matchingRoutesForContactPoint]); + + return { + filtersApplied: true, + matchedRoutesWithPath: routesForAllFilterResults, + }; }; +// this function takes multiple maps and creates a new map with routes that exist in all maps +// +// map 1: { a: [], b: [] } +// map 2: { a: [], c: [] } +// return: { a: [] } +function findMapIntersection(...matchingRoutes: FilterResult[]): FilterResult { + const result = new Map(); + + // Iterate through the keys of the first map' + for (const key of matchingRoutes[0].keys()) { + // Check if the key exists in all other maps + if (matchingRoutes.every((map) => map.has(key))) { + // If yes, add the key to the result map + // @ts-ignore + result.set(key, matchingRoutes[0].get(key)); + } + } + + return result; +} + const getStyles = (theme: GrafanaTheme2) => ({ tabContent: css` margin-top: ${theme.spacing(2)}; diff --git a/public/app/features/alerting/unified/PanelAlertTab.tsx b/public/app/features/alerting/unified/PanelAlertTab.tsx index 6289d88e69cf4..697fe405efcb0 100644 --- a/public/app/features/alerting/unified/PanelAlertTab.tsx +++ b/public/app/features/alerting/unified/PanelAlertTab.tsx @@ -12,6 +12,6 @@ interface Props extends Omit { // it will load rule count from backend export const PanelAlertTab = ({ panel, dashboard, ...otherProps }: Props) => { - const { rules, loading } = usePanelCombinedRules({ panel, dashboard }); + const { rules, loading } = usePanelCombinedRules({ panelId: panel.id, dashboardUID: dashboard.uid }); return ; }; diff --git a/public/app/features/alerting/unified/PanelAlertTabContent.test.tsx b/public/app/features/alerting/unified/PanelAlertTabContent.test.tsx index add93de4b6990..a1df6a1be3ee8 100644 --- a/public/app/features/alerting/unified/PanelAlertTabContent.test.tsx +++ b/public/app/features/alerting/unified/PanelAlertTabContent.test.tsx @@ -153,7 +153,7 @@ const dashboard = { }, meta: { canSave: true, - folderId: 1, + folderUid: 'abc', folderTitle: 'super folder', }, } as DashboardModel; diff --git a/public/app/features/alerting/unified/PanelAlertTabContent.tsx b/public/app/features/alerting/unified/PanelAlertTabContent.tsx index 9f2383cf6ef6b..40ad74a557da3 100644 --- a/public/app/features/alerting/unified/PanelAlertTabContent.tsx +++ b/public/app/features/alerting/unified/PanelAlertTabContent.tsx @@ -20,8 +20,8 @@ interface Props { export const PanelAlertTabContent = ({ dashboard, panel }: Props) => { const styles = useStyles2(getStyles); const { errors, loading, rules } = usePanelCombinedRules({ - dashboard, - panel, + dashboardUID: dashboard.uid, + panelId: panel.id, poll: true, }); const permissions = getRulesPermissions('grafana'); diff --git a/public/app/features/alerting/unified/RuleEditorCloudOnlyAllowed.test.tsx b/public/app/features/alerting/unified/RuleEditorCloudOnlyAllowed.test.tsx index 8c335a5a0076c..ea2a169d9988f 100644 --- a/public/app/features/alerting/unified/RuleEditorCloudOnlyAllowed.test.tsx +++ b/public/app/features/alerting/unified/RuleEditorCloudOnlyAllowed.test.tsx @@ -2,7 +2,7 @@ import { screen, waitForElementToBeRemoved } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; import { renderRuleEditor, ui } from 'test/helpers/alertingRuleEditor'; -import { byRole, byText } from 'testing-library-selector'; +import { byText } from 'testing-library-selector'; import { setDataSourceSrv } from '@grafana/runtime'; import { contextSrv } from 'app/core/services/context_srv'; @@ -104,6 +104,7 @@ jest.mock('@grafana/runtime', () => ({ getDataSourceSrv: jest.fn(() => ({ getInstanceSettings: () => dataSources.prom, get: () => dataSources.prom, + getList: () => Object.values(dataSources), })), })); @@ -197,7 +198,7 @@ describe('RuleEditor cloud: checking editable data sources', () => { // check that only rules sources that have ruler available are there const dataSourceSelect = ui.inputs.dataSource.get(); - await userEvent.click(byRole('combobox').get(dataSourceSelect)); + await userEvent.click(dataSourceSelect); expect(byText('cortex with ruler').query()).toBeInTheDocument(); expect(byText('loki with ruler').query()).toBeInTheDocument(); diff --git a/public/app/features/alerting/unified/RuleEditorCloudRules.test.tsx b/public/app/features/alerting/unified/RuleEditorCloudRules.test.tsx index 4117406c67dbc..061b5dcbdb41e 100644 --- a/public/app/features/alerting/unified/RuleEditorCloudRules.test.tsx +++ b/public/app/features/alerting/unified/RuleEditorCloudRules.test.tsx @@ -4,6 +4,7 @@ import React from 'react'; import { renderRuleEditor, ui } from 'test/helpers/alertingRuleEditor'; import { clickSelectOption } from 'test/helpers/selectOptionInTest'; +import { selectors } from '@grafana/e2e-selectors'; import { contextSrv } from 'app/core/services/context_srv'; import { AccessControlAction } from 'app/types'; @@ -138,11 +139,11 @@ describe('RuleEditor cloud', () => { //expressions are removed after switching to data-source managed expect(screen.queryAllByLabelText('Remove expression')).toHaveLength(0); - expect(screen.getByTestId('datasource-picker')).toBeInTheDocument(); + expect(screen.getByTestId(selectors.components.DataSourcePicker.inputV2)).toBeInTheDocument(); const dataSourceSelect = await ui.inputs.dataSource.find(); await user.click(dataSourceSelect); - await clickSelectOption(dataSourceSelect, 'Prom (default)'); + await user.click(screen.getByText('Prom')); await waitFor(() => expect(mocks.api.fetchRulerRules).toHaveBeenCalled()); await user.type(await ui.inputs.expr.find(), 'up == 1'); diff --git a/public/app/features/alerting/unified/RuleEditorExisting.test.tsx b/public/app/features/alerting/unified/RuleEditorExisting.test.tsx index f72c42e157de9..87143007b6600 100644 --- a/public/app/features/alerting/unified/RuleEditorExisting.test.tsx +++ b/public/app/features/alerting/unified/RuleEditorExisting.test.tsx @@ -1,4 +1,4 @@ -import { render, waitFor, screen, within } from '@testing-library/react'; +import { render, screen, waitFor, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; import { Route } from 'react-router-dom'; @@ -7,7 +7,7 @@ import { ui } from 'test/helpers/alertingRuleEditor'; import { locationService, setDataSourceSrv } from '@grafana/runtime'; import { contextSrv } from 'app/core/services/context_srv'; -import { DashboardSearchHit } from 'app/features/search/types'; +import { DashboardSearchHit, DashboardSearchItemType } from 'app/features/search/types'; import { GrafanaAlertStateDecision } from 'app/types/unified-alerting-dto'; import { searchFolders } from '../../../../app/features/manage-dashboards/state/actions'; @@ -101,6 +101,7 @@ describe('RuleEditor grafana managed rules', () => { title: 'Folder A', uid: 'abcd', id: 1, + type: DashboardSearchItemType.DashDB, }; const slashedFolder = { @@ -136,7 +137,7 @@ describe('RuleEditor grafana managed rules', () => { [folder.title]: [ { interval: '1m', - name: 'my great new rule', + name: 'group1', rules: [ { annotations: { description: 'some description', summary: 'some summary' }, @@ -199,10 +200,10 @@ describe('RuleEditor grafana managed rules', () => { expect(mocks.api.setRulerRuleGroup).toHaveBeenCalledWith( { dataSourceName: GRAFANA_RULES_SOURCE_NAME, apiVersion: 'legacy' }, - 'Folder A', + 'abcd', { interval: '1m', - name: 'my great new rule', + name: 'group1', rules: [ { annotations: { description: 'some description', summary: 'some summary', custom: 'value' }, diff --git a/public/app/features/alerting/unified/RuleEditorGrafanaRules.test.tsx b/public/app/features/alerting/unified/RuleEditorGrafanaRules.test.tsx index cc15a0c61d1d6..d4f6f031e6fa4 100644 --- a/public/app/features/alerting/unified/RuleEditorGrafanaRules.test.tsx +++ b/public/app/features/alerting/unified/RuleEditorGrafanaRules.test.tsx @@ -7,7 +7,7 @@ import { byRole } from 'testing-library-selector'; import { setDataSourceSrv } from '@grafana/runtime'; import { contextSrv } from 'app/core/services/context_srv'; -import { DashboardSearchHit } from 'app/features/search/types'; +import { DashboardSearchHit, DashboardSearchItemType } from 'app/features/search/types'; import { AccessControlAction } from 'app/types'; import { GrafanaAlertStateDecision, PromApplication } from 'app/types/unified-alerting-dto'; @@ -16,7 +16,7 @@ import { searchFolders } from '../../../../app/features/manage-dashboards/state/ import { discoverFeatures } from './api/buildInfo'; import { fetchRulerRules, fetchRulerRulesGroup, fetchRulerRulesNamespace, setRulerRuleGroup } from './api/ruler'; import { ExpressionEditorProps } from './components/rule-editor/ExpressionEditor'; -import { grantUserPermissions, mockDataSource, MockDataSourceSrv } from './mocks'; +import { MockDataSourceSrv, grantUserPermissions, mockDataSource } from './mocks'; import { fetchRulerRulesIfNotFetchedYet } from './state/actions'; import * as config from './utils/config'; import { GRAFANA_RULES_SOURCE_NAME } from './utils/datasource'; @@ -105,29 +105,67 @@ describe('RuleEditor grafana managed rules', () => { mocks.api.fetchRulerRules.mockResolvedValue({ 'Folder A': [ { + interval: '1m', name: 'group1', - rules: [], + rules: [ + { + annotations: { description: 'some description', summary: 'some summary' }, + labels: { severity: 'warn', team: 'the a-team' }, + for: '5m', + grafana_alert: { + uid: '23', + namespace_uid: 'abcd', + condition: 'B', + data: getDefaultQueries(), + exec_err_state: GrafanaAlertStateDecision.Error, + no_data_state: GrafanaAlertStateDecision.NoData, + title: 'my great new rule', + }, + }, + ], }, ], namespace2: [ { - name: 'group2', - rules: [], + interval: '1m', + name: 'group1', + rules: [ + { + annotations: { description: 'some description', summary: 'some summary' }, + labels: { severity: 'warn', team: 'the a-team' }, + for: '5m', + grafana_alert: { + uid: '23', + namespace_uid: 'b', + condition: 'B', + data: getDefaultQueries(), + exec_err_state: GrafanaAlertStateDecision.Error, + no_data_state: GrafanaAlertStateDecision.NoData, + title: 'my great new rule', + }, + }, + ], }, ], }); mocks.searchFolders.mockResolvedValue([ { title: 'Folder A', + uid: 'abcd', id: 1, + type: DashboardSearchItemType.DashDB, }, { title: 'Folder B', id: 2, + uid: 'b', + type: DashboardSearchItemType.DashDB, }, { title: 'Folder / with slash', + uid: 'c', id: 2, + type: DashboardSearchItemType.DashDB, }, ] as DashboardSearchHit[]); @@ -163,7 +201,7 @@ describe('RuleEditor grafana managed rules', () => { // 9seg expect(mocks.api.setRulerRuleGroup).toHaveBeenCalledWith( { dataSourceName: GRAFANA_RULES_SOURCE_NAME, apiVersion: 'legacy' }, - 'Folder A', + 'abcd', { interval: '1m', name: 'group1', diff --git a/public/app/features/alerting/unified/RuleEditorRecordingRule.test.tsx b/public/app/features/alerting/unified/RuleEditorRecordingRule.test.tsx index 681a84611b1ee..8b9455201f4b0 100644 --- a/public/app/features/alerting/unified/RuleEditorRecordingRule.test.tsx +++ b/public/app/features/alerting/unified/RuleEditorRecordingRule.test.tsx @@ -3,7 +3,7 @@ import userEvent, { PointerEventsCheckLevel } from '@testing-library/user-event' import React from 'react'; import { renderRuleEditor, ui } from 'test/helpers/alertingRuleEditor'; import { clickSelectOption } from 'test/helpers/selectOptionInTest'; -import { byRole, byText } from 'testing-library-selector'; +import { byText } from 'testing-library-selector'; import { setDataSourceSrv } from '@grafana/runtime'; import { contextSrv } from 'app/core/services/context_srv'; @@ -72,6 +72,7 @@ jest.mock('@grafana/runtime', () => ({ getDataSourceSrv: jest.fn(() => ({ getInstanceSettings: () => dataSources.default, get: () => dataSources.default, + getList: () => Object.values(dataSources), })), })); @@ -149,9 +150,9 @@ describe('RuleEditor recording rules', () => { await userEvent.type(await ui.inputs.name.find(), 'my great new recording rule'); const dataSourceSelect = ui.inputs.dataSource.get(); - await userEvent.click(byRole('combobox').get(dataSourceSelect)); + await userEvent.click(dataSourceSelect); - await clickSelectOption(dataSourceSelect, 'Prom (default)'); + await userEvent.click(screen.getByText('Prom')); await clickSelectOption(ui.inputs.namespace.get(), 'namespace2'); await clickSelectOption(ui.inputs.group.get(), 'group2'); diff --git a/public/app/features/alerting/unified/RuleList.test.tsx b/public/app/features/alerting/unified/RuleList.test.tsx index 8b3f649197d23..3137a401f880b 100644 --- a/public/app/features/alerting/unified/RuleList.test.tsx +++ b/public/app/features/alerting/unified/RuleList.test.tsx @@ -25,9 +25,9 @@ import { discoverFeatures } from './api/buildInfo'; import { fetchRules } from './api/prometheus'; import { deleteNamespace, deleteRulerRulesGroup, fetchRulerRules, setRulerRuleGroup } from './api/ruler'; import { + MockDataSourceSrv, grantUserPermissions, mockDataSource, - MockDataSourceSrv, mockPromAlert, mockPromAlertingRule, mockPromRecordingRule, @@ -42,6 +42,7 @@ import { DataSourceType, GRAFANA_RULES_SOURCE_NAME } from './utils/datasource'; jest.mock('@grafana/runtime', () => ({ ...jest.requireActual('@grafana/runtime'), getPluginLinkExtensions: jest.fn(), + useReturnToPrevious: jest.fn(), })); jest.mock('./api/buildInfo'); jest.mock('./api/prometheus'); @@ -120,11 +121,8 @@ const ui = { rulesFilterInput: byTestId('search-query-input'), moreErrorsButton: byRole('button', { name: /more errors/ }), editCloudGroupIcon: byTestId('edit-group'), - newRuleButton: byRole('link', { name: 'New alert rule' }), - moreButton: byRole('button', { name: 'More' }), - exportButton: byRole('menuitem', { - name: /export all grafana\-managed rules/i, - }), + newRuleButton: byText(/new alert rule/i), + exportButton: byText(/export rules/i), editGroupModal: { dialog: byRole('dialog'), namespaceInput: byRole('textbox', { name: /^Namespace/ }), @@ -728,7 +726,8 @@ describe('RuleList', () => { renderRuleList(); - await userEvent.click(ui.moreButton.get()); + await waitFor(() => expect(mocks.api.fetchRules).toHaveBeenCalledTimes(1)); + expect(ui.exportButton.get()).toBeInTheDocument(); }); }); diff --git a/public/app/features/alerting/unified/RuleList.tsx b/public/app/features/alerting/unified/RuleList.tsx index dfc7078d9aafa..7bb7f40830249 100644 --- a/public/app/features/alerting/unified/RuleList.tsx +++ b/public/app/features/alerting/unified/RuleList.tsx @@ -1,16 +1,16 @@ import { css } from '@emotion/css'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import { useLocation } from 'react-router-dom'; import { useAsyncFn, useInterval } from 'react-use'; -import { GrafanaTheme2 } from '@grafana/data'; -import { Button, useStyles2, withErrorBoundary, Stack } from '@grafana/ui'; +import { GrafanaTheme2, urlUtil } from '@grafana/data'; +import { Button, LinkButton, useStyles2, withErrorBoundary } from '@grafana/ui'; import { useQueryParams } from 'app/core/hooks/useQueryParams'; import { useDispatch } from 'app/types'; import { CombinedRuleNamespace } from '../../../types/unified-alerting'; -import { trackRuleListNavigation } from './Analytics'; -import { MoreActionsRuleButtons } from './MoreActionsRuleButtons'; +import { LogMessages, logInfo, trackRuleListNavigation } from './Analytics'; import { AlertingPageWrapper } from './components/AlertingPageWrapper'; import { NoRulesSplash } from './components/rules/NoRulesCTA'; import { INSTANCES_DISPLAY_LIMIT } from './components/rules/RuleDetails'; @@ -19,6 +19,7 @@ import { RuleListGroupView } from './components/rules/RuleListGroupView'; import { RuleListStateView } from './components/rules/RuleListStateView'; import { RuleStats } from './components/rules/RuleStats'; import RulesFilter from './components/rules/RulesFilter'; +import { AlertingAction, useAlertingAbility } from './hooks/useAbilities'; import { useCombinedRuleNamespaces } from './hooks/useCombinedRuleNamespaces'; import { useFilteredRules, useRulesFilter } from './hooks/useFilteredRules'; import { useUnifiedAlertingSelector } from './hooks/useUnifiedAlertingSelector'; @@ -98,6 +99,7 @@ const RuleList = withErrorBoundary( // Show splash only when we loaded all of the data sources and none of them has alerts const hasNoAlertRulesCreatedYet = allPromLoaded && allPromEmpty && promRequests.length > 0 && allRulerEmpty && allRulerLoaded; + const hasAlertRulesCreated = !hasNoAlertRulesCreatedYet; const combinedNamespaces: CombinedRuleNamespace[] = useCombinedRuleNamespaces(); const filteredNamespaces = useFilteredRules(combinedNamespaces, filterState); @@ -105,10 +107,10 @@ const RuleList = withErrorBoundary( return ( // We don't want to show the Loading... indicator for the whole page. // We show separate indicators for Grafana-managed and Cloud rules - + }> - {!hasNoAlertRulesCreatedYet && ( + {hasAlertRulesCreated && ( <>
@@ -125,14 +127,11 @@ const RuleList = withErrorBoundary( )}
- - -
)} {hasNoAlertRulesCreatedYet && } - {!hasNoAlertRulesCreatedYet && } + {hasAlertRulesCreated && }
); }, @@ -162,3 +161,27 @@ const getStyles = (theme: GrafanaTheme2) => ({ }); export default RuleList; + +export function CreateAlertButton() { + const [createRuleSupported, createRuleAllowed] = useAlertingAbility(AlertingAction.CreateAlertRule); + const [createCloudRuleSupported, createCloudRuleAllowed] = useAlertingAbility(AlertingAction.CreateExternalAlertRule); + + const location = useLocation(); + + const canCreateCloudRules = createCloudRuleSupported && createCloudRuleAllowed; + + const canCreateGrafanaRules = createRuleSupported && createRuleAllowed; + + if (canCreateGrafanaRules || canCreateCloudRules) { + return ( + logInfo(LogMessages.alertRuleFromScratch)} + > + New alert rule + + ); + } + return null; +} diff --git a/public/app/features/alerting/unified/RuleViewer.tsx b/public/app/features/alerting/unified/RuleViewer.tsx index d81bcd3fedf0d..32064616fa992 100644 --- a/public/app/features/alerting/unified/RuleViewer.tsx +++ b/public/app/features/alerting/unified/RuleViewer.tsx @@ -1,39 +1,29 @@ -import React, { useMemo } from 'react'; +import React from 'react'; import { NavModelItem } from '@grafana/data'; -import { config } from '@grafana/runtime'; +import { isFetchError } from '@grafana/runtime'; import { Alert, withErrorBoundary } from '@grafana/ui'; -import { SafeDynamicImport } from 'app/core/components/DynamicImports/SafeDynamicImport'; +import { EntityNotFound } from 'app/core/components/PageNotFound/EntityNotFound'; import { GrafanaRouteComponentProps } from 'app/core/navigation/types'; import { AlertingPageWrapper } from './components/AlertingPageWrapper'; +import { AlertRuleProvider } from './components/rule-viewer/RuleContext'; +import DetailView from './components/rule-viewer/RuleViewer'; import { useCombinedRule } from './hooks/useCombinedRule'; +import { stringifyErrorLike } from './utils/misc'; import { getRuleIdFromPathname, parse as parseRuleId } from './utils/rule-id'; -const DetailViewV1 = SafeDynamicImport(() => import('./components/rule-viewer/RuleViewer.v1')); -const DetailViewV2 = React.lazy(() => import('./components/rule-viewer/v2/RuleViewer.v2')); - type RuleViewerProps = GrafanaRouteComponentProps<{ id: string; sourceName: string; }>; -const newAlertDetailView = Boolean(config.featureToggles.alertingDetailsViewV2) === true; - const RuleViewer = (props: RuleViewerProps): JSX.Element => { - return newAlertDetailView ? : ; -}; - -export const defaultPageNav: NavModelItem = { - id: 'alert-rule-view', - text: '', -}; - -const RuleViewerV1Wrapper = (props: RuleViewerProps) => ; - -const RuleViewerV2Wrapper = (props: RuleViewerProps) => { const id = getRuleIdFromPathname(props.match.params); - const identifier = useMemo(() => { + + // we convert the stringified ID to a rule identifier object which contains additional + // type and source information + const identifier = React.useMemo(() => { if (!id) { throw new Error('Rule ID is required'); } @@ -41,15 +31,15 @@ const RuleViewerV2Wrapper = (props: RuleViewerProps) => { return parseRuleId(id, true); }, [id]); + // we then fetch the rule from the correct API endpoint(s) const { loading, error, result: rule } = useCombinedRule({ ruleIdentifier: identifier }); - // TODO improve error handling here if (error) { - if (typeof error === 'string') { - return error; - } - - return Something went wrong loading the rule; + return ( + + + + ); } if (loading) { @@ -61,10 +51,36 @@ const RuleViewerV2Wrapper = (props: RuleViewerProps) => { } if (rule) { - return ; + return ( + + + + ); } - return null; + // if we get here assume we can't find the rule + return ( + + + + ); }; +export const defaultPageNav: NavModelItem = { + id: 'alert-rule-view', + text: '', +}; + +interface ErrorMessageProps { + error: unknown; +} + +function ErrorMessage({ error }: ErrorMessageProps) { + if (isFetchError(error) && error.status === 404) { + return ; + } + + return {stringifyErrorLike(error)}; +} + export default withErrorBoundary(RuleViewer, { style: 'page' }); diff --git a/public/app/features/alerting/unified/Silences.test.tsx b/public/app/features/alerting/unified/Silences.test.tsx index e478cb8baea31..905ed88d476c1 100644 --- a/public/app/features/alerting/unified/Silences.test.tsx +++ b/public/app/features/alerting/unified/Silences.test.tsx @@ -5,6 +5,7 @@ import { TestProvider } from 'test/helpers/TestProvider'; import { byLabelText, byPlaceholderText, byRole, byTestId, byText } from 'testing-library-selector'; import { dateTime } from '@grafana/data'; +import { selectors } from '@grafana/e2e-selectors'; import { config, locationService, setDataSourceSrv } from '@grafana/runtime'; import { contextSrv } from 'app/core/services/context_srv'; import { AlertState, MatcherOperator } from 'app/plugins/datasource/alertmanager/types'; @@ -15,6 +16,8 @@ import { SilenceState } from '../../../plugins/datasource/alertmanager/types'; import Silences from './Silences'; import { createOrUpdateSilence, fetchAlerts, fetchSilences } from './api/alertmanager'; import { grantUserPermissions, mockAlertmanagerAlert, mockDataSource, MockDataSourceSrv, mockSilence } from './mocks'; +import { AlertmanagerProvider } from './state/AlertmanagerContext'; +import { setupDataSources } from './testSetup/datasources'; import { parseMatchers } from './utils/alertmanager'; import { DataSourceType } from './utils/datasource'; @@ -37,7 +40,9 @@ const renderSilences = (location = '/alerting/silences/') => { return render( - + + + ); }; @@ -58,7 +63,7 @@ const ui = { addSilenceButton: byRole('link', { name: /add silence/i }), queryBar: byPlaceholderText('Search'), editor: { - timeRange: byLabelText('Timepicker', { exact: false }), + timeRange: byTestId(selectors.components.TimePicker.openButton), durationField: byLabelText('Duration'), durationInput: byRole('textbox', { name: /duration/i }), matchersField: byTestId('matcher'), @@ -218,7 +223,7 @@ describe('Silence edit', () => { beforeEach(() => { setUserLogged(true); - setDataSourceSrv(new MockDataSourceSrv(dataSources)); + setupDataSources(dataSources.am); }); it('Should not render createdBy if user is logged in and has a name', async () => { @@ -325,4 +330,32 @@ describe('Silence edit', () => { }, TEST_TIMEOUT ); + + it( + 'silences page should contain alertmanager parameter after creating a silence', + async () => { + const user = userEvent.setup(); + + renderSilences(`${baseUrlPath}?alertmanager=Alertmanager`); + await waitFor(() => expect(ui.editor.durationField.query()).not.toBeNull()); + + await user.type(ui.editor.matcherName.getAll()[0], 'foo'); + await user.type(ui.editor.matcherOperatorSelect.getAll()[0], '='); + await user.type(ui.editor.matcherValue.getAll()[0], 'bar'); + + await user.click(ui.editor.submit.get()); + + await waitFor(() => + expect(mocks.api.createOrUpdateSilence).toHaveBeenCalledWith( + 'Alertmanager', + expect.objectContaining({ + matchers: [{ isEqual: true, isRegex: false, name: 'foo', value: 'bar' }], + }) + ) + ); + + expect(locationService.getSearch().get('alertmanager')).toBe('Alertmanager'); + }, + TEST_TIMEOUT + ); }); diff --git a/public/app/features/alerting/unified/TODO.md b/public/app/features/alerting/unified/TODO.md index 180125b1701f0..86e6081154802 100644 --- a/public/app/features/alerting/unified/TODO.md +++ b/public/app/features/alerting/unified/TODO.md @@ -17,7 +17,7 @@ If the item needs more rationale and you feel like a single sentence is inedequa ## Refactoring - Get rid of "+ Add new" in drop-downs : Let's see if is there a way we can make it work with ` -
+ ); }; const getStyles = (theme: GrafanaTheme2) => ({ - icon: css` - margin-right: ${theme.spacing(0.5)}; - `, - inputWidth: css` - width: 340px; - flex-grow: 0; - `, + fixMargin: css({ + marginBottom: 0, + }), + inputWidth: css({ + width: 340, + flexGrow: 0, + }), }); diff --git a/public/app/features/alerting/unified/components/contact-points/ContactPoints.test.tsx b/public/app/features/alerting/unified/components/contact-points/ContactPoints.test.tsx index fde20c0fadc44..c6fd8c71ca799 100644 --- a/public/app/features/alerting/unified/components/contact-points/ContactPoints.test.tsx +++ b/public/app/features/alerting/unified/components/contact-points/ContactPoints.test.tsx @@ -127,6 +127,11 @@ describe('contact points', () => { const deleteButton = await screen.queryByRole('menuitem', { name: 'delete' }); expect(deleteButton).toBeDisabled(); } + + // check buttons in Notification Templates + const notificationTemplatesTab = screen.getByRole('tab', { name: 'Tab Notification Templates' }); + await userEvent.click(notificationTemplatesTab); + expect(screen.getByRole('link', { name: 'Add notification template' })).toHaveAttribute('aria-disabled', 'true'); }); it('should call delete when clicked and not disabled', async () => { @@ -326,6 +331,11 @@ describe('contact points', () => { const viewProvisioned = screen.getByRole('link', { name: 'view-action' }); expect(viewProvisioned).toBeInTheDocument(); expect(viewProvisioned).not.toBeDisabled(); + + // check buttons in Notification Templates + const notificationTemplatesTab = screen.getByRole('tab', { name: 'Tab Notification Templates' }); + await userEvent.click(notificationTemplatesTab); + expect(screen.queryByRole('link', { name: 'Add notification template' })).not.toBeInTheDocument(); }); }); }); diff --git a/public/app/features/alerting/unified/components/contact-points/ContactPoints.tsx b/public/app/features/alerting/unified/components/contact-points/ContactPoints.tsx index e8bb3de093586..646fa4e8ef20a 100644 --- a/public/app/features/alerting/unified/components/contact-points/ContactPoints.tsx +++ b/public/app/features/alerting/unified/components/contact-points/ContactPoints.tsx @@ -25,7 +25,7 @@ import { Tooltip, useStyles2, } from '@grafana/ui'; -import ConditionalWrap from 'app/features/alerting/components/ConditionalWrap'; +import ConditionalWrap from 'app/features/alerting/unified/components/ConditionalWrap'; import { receiverTypeNames } from 'app/plugins/datasource/alertmanager/consts'; import { GrafanaManagedReceiverConfig } from 'app/plugins/datasource/alertmanager/types'; import { GrafanaNotifierType, NotifierStatus } from 'app/types/alerting'; @@ -81,6 +81,9 @@ const ContactPoints = () => { const [exportContactPointsSupported, exportContactPointsAllowed] = useAlertmanagerAbility( AlertmanagerAction.ExportContactPoint ); + const [createTemplateSupported, createTemplateAllowed] = useAlertmanagerAbility( + AlertmanagerAction.CreateNotificationTemplate + ); const [DeleteModal, showDeleteModal] = useDeleteContactPointModal(deleteTrigger, updateAlertmanagerState.isLoading); const [ExportDrawer, showExportDrawer] = useExportContactPoint(); @@ -177,9 +180,16 @@ const ContactPoints = () => { Create notification templates to customize your notifications. - - Add notification template - + {createTemplateSupported && ( + + Add notification template + + )} diff --git a/public/app/features/alerting/unified/components/contact-points/__mocks__/grafanaManagedServer.ts b/public/app/features/alerting/unified/components/contact-points/__mocks__/grafanaManagedServer.ts index a93b7b046c06f..54666de1aa539 100644 --- a/public/app/features/alerting/unified/components/contact-points/__mocks__/grafanaManagedServer.ts +++ b/public/app/features/alerting/unified/components/contact-points/__mocks__/grafanaManagedServer.ts @@ -1,4 +1,5 @@ -import { rest } from 'msw'; +import 'whatwg-fetch'; +import { http, HttpResponse } from 'msw'; import { SetupServer } from 'msw/node'; import { AlertmanagerChoice, AlertManagerCortexConfig } from 'app/plugins/datasource/alertmanager/types'; @@ -14,15 +15,15 @@ import receiversMock from './receivers.mock.json'; export default (server: SetupServer) => { server.use( // this endpoint is a grafana built-in alertmanager - rest.get('/api/alertmanager/grafana/config/api/v1/alerts', (_req, res, ctx) => - res(ctx.json(alertmanagerMock)) + http.get('/api/alertmanager/grafana/config/api/v1/alerts', () => + HttpResponse.json(alertmanagerMock) ), // this endpoint is only available for the built-in alertmanager - rest.get('/api/alertmanager/grafana/config/api/v1/receivers', (_req, res, ctx) => - res(ctx.json(receiversMock)) + http.get('/api/alertmanager/grafana/config/api/v1/receivers', () => + HttpResponse.json(receiversMock) ), // this endpoint will respond if the OnCall plugin is installed - rest.get('/api/plugins/grafana-oncall-app/settings', (_req, res, ctx) => res(ctx.status(404))) + http.get('/api/plugins/grafana-oncall-app/settings', () => HttpResponse.json({}, { status: 404 })) ); // this endpoint is for rendering the "additional AMs to configure" warning @@ -41,12 +42,18 @@ export const setupTestEndpointMock = (server: SetupServer) => { const mock = jest.fn(); server.use( - rest.post('/api/alertmanager/grafana/config/api/v1/receivers/test', async (req, res, ctx) => { - const requestBody = await req.json(); - mock(requestBody); + http.post( + '/api/alertmanager/grafana/config/api/v1/receivers/test', + async ({ request }) => { + const requestBody = await request.json(); + mock(requestBody); - return res.once(ctx.status(200)); - }) + return HttpResponse.json({}); + }, + { + once: true, + } + ) ); return mock; @@ -56,12 +63,18 @@ export const setupSaveEndpointMock = (server: SetupServer) => { const mock = jest.fn(); server.use( - rest.post('/api/alertmanager/grafana/config/api/v1/alerts', async (req, res, ctx) => { - const requestBody = await req.json(); - mock(requestBody); + http.post( + '/api/alertmanager/grafana/config/api/v1/alerts', + async ({ request }) => { + const requestBody = await request.json(); + mock(requestBody); - return res.once(ctx.status(200)); - }) + return HttpResponse.json({}); + }, + { + once: true, + } + ) ); return mock; diff --git a/public/app/features/alerting/unified/components/contact-points/__mocks__/mimirFlavoredServer.ts b/public/app/features/alerting/unified/components/contact-points/__mocks__/mimirFlavoredServer.ts index 88ef97018e997..adbed73cb486a 100644 --- a/public/app/features/alerting/unified/components/contact-points/__mocks__/mimirFlavoredServer.ts +++ b/public/app/features/alerting/unified/components/contact-points/__mocks__/mimirFlavoredServer.ts @@ -1,4 +1,5 @@ -import { rest } from 'msw'; +import 'whatwg-fetch'; +import { http, HttpResponse } from 'msw'; import { SetupServer } from 'msw/lib/node'; import { AlertManagerCortexConfig } from 'app/plugins/datasource/alertmanager/types'; @@ -10,14 +11,20 @@ export const MIMIR_DATASOURCE_UID = 'mimir'; export default (server: SetupServer) => { server.use( - rest.get(`/api/alertmanager/${MIMIR_DATASOURCE_UID}/config/api/v1/alerts`, (_req, res, ctx) => - res(ctx.json(mimirAlertmanagerMock)) + http.get(`/api/alertmanager/${MIMIR_DATASOURCE_UID}/config/api/v1/alerts`, () => + HttpResponse.json(mimirAlertmanagerMock) ), - rest.get(`/api/datasources/proxy/uid/${MIMIR_DATASOURCE_UID}/api/v1/status/buildinfo`, (_req, res, ctx) => - res(ctx.status(404)) + http.get(`/api/datasources/proxy/uid/${MIMIR_DATASOURCE_UID}/api/v1/status/buildinfo`, () => + HttpResponse.json( + { + template_files: {}, + alertmanager_config: {}, + }, + { status: 404 } + ) ), // this endpoint will respond if the OnCall plugin is installed - rest.get('/api/plugins/grafana-oncall-app/settings', (_req, res, ctx) => res(ctx.status(404))) + http.get('/api/plugins/grafana-oncall-app/settings', () => HttpResponse.json({}, { status: 404 })) ); return server; diff --git a/public/app/features/alerting/unified/components/contact-points/__mocks__/vanillaAlertmanagerServer.ts b/public/app/features/alerting/unified/components/contact-points/__mocks__/vanillaAlertmanagerServer.ts index b834a5a515ff2..6c4943e28a2c0 100644 --- a/public/app/features/alerting/unified/components/contact-points/__mocks__/vanillaAlertmanagerServer.ts +++ b/public/app/features/alerting/unified/components/contact-points/__mocks__/vanillaAlertmanagerServer.ts @@ -1,4 +1,5 @@ -import { rest } from 'msw'; +import 'whatwg-fetch'; +import { http, HttpResponse } from 'msw'; import { SetupServer } from 'msw/lib/node'; import { AlertmanagerStatus } from 'app/plugins/datasource/alertmanager/types'; @@ -10,11 +11,11 @@ export const VANILLA_ALERTMANAGER_DATASOURCE_UID = 'alertmanager'; export default (server: SetupServer) => { server.use( - rest.get(`/api/alertmanager/${VANILLA_ALERTMANAGER_DATASOURCE_UID}/api/v2/status`, (_req, res, ctx) => - res(ctx.json(vanillaAlertManagerConfig)) + http.get(`/api/alertmanager/${VANILLA_ALERTMANAGER_DATASOURCE_UID}/api/v2/status`, () => + HttpResponse.json(vanillaAlertManagerConfig) ), // this endpoint will respond if the OnCall plugin is installed - rest.get('/api/plugins/grafana-oncall-app/settings', (_req, res, ctx) => res(ctx.status(404))) + http.get('/api/plugins/grafana-oncall-app/settings', () => HttpResponse.json({}, { status: 404 })) ); return server; diff --git a/public/app/features/alerting/unified/components/contact-points/__snapshots__/useContactPoints.test.tsx.snap b/public/app/features/alerting/unified/components/contact-points/__snapshots__/useContactPoints.test.tsx.snap index dd84a65a6aeb2..ea4fc89ca9001 100644 --- a/public/app/features/alerting/unified/components/contact-points/__snapshots__/useContactPoints.test.tsx.snap +++ b/public/app/features/alerting/unified/components/contact-points/__snapshots__/useContactPoints.test.tsx.snap @@ -144,5 +144,6 @@ exports[`useContactPoints should return contact points with status 1`] = ` ], "error": undefined, "isLoading": false, + "refetchReceivers": [Function], } `; diff --git a/public/app/features/alerting/unified/components/contact-points/useContactPoints.tsx b/public/app/features/alerting/unified/components/contact-points/useContactPoints.tsx index 90557614f0e8c..8d6ca99a720b5 100644 --- a/public/app/features/alerting/unified/components/contact-points/useContactPoints.tsx +++ b/public/app/features/alerting/unified/components/contact-points/useContactPoints.tsx @@ -27,7 +27,20 @@ const RECEIVER_STATUS_POLLING_INTERVAL = 10 * 1000; // 10 seconds * 3. (if available) additional metadata about Grafana Managed contact points * 4. (if available) the OnCall plugin metadata */ -export function useContactPointsWithStatus() { +interface UseContactPointsWithStatusOptions { + includePoliciesCount: boolean; + receiverStatusPollingInterval?: number; +} + +const defaultHookOptions = { + includePoliciesCount: true, + receiverStatusPollingInterval: RECEIVER_STATUS_POLLING_INTERVAL, +}; + +export function useContactPointsWithStatus({ + includePoliciesCount, + receiverStatusPollingInterval, +}: UseContactPointsWithStatusOptions = defaultHookOptions) { const { selectedAlertmanager, isGrafanaAlertmanager } = useAlertmanager(); const { installed: onCallPluginInstalled, loading: onCallPluginStatusLoading } = usePluginBridge( SupportedPlugin.OnCall @@ -37,8 +50,8 @@ export function useContactPointsWithStatus() { const fetchContactPointsStatus = alertmanagerApi.endpoints.getContactPointsStatus.useQuery(undefined, { refetchOnFocus: true, refetchOnReconnect: true, - // re-fetch status every so often for up-to-date information - pollingInterval: RECEIVER_STATUS_POLLING_INTERVAL, + // re-fetch status every so often for up-to-date information, allow disabling by passing "receiverStatusPollingInterval: 0" + pollingInterval: receiverStatusPollingInterval, // skip fetching receiver statuses if not Grafana AM skip: !isGrafanaAlertmanager, }); @@ -64,6 +77,7 @@ export function useContactPointsWithStatus() { } // fetch the latest config from the Alertmanager + // we use this endpoint only when we need to get the number of policies const fetchAlertmanagerConfiguration = alertmanagerApi.endpoints.getAlertmanagerConfiguration.useQuery( selectedAlertmanager!, { @@ -73,30 +87,56 @@ export function useContactPointsWithStatus() { ...result, contactPoints: result.data ? enhanceContactPointsWithMetadata( - result.data, fetchContactPointsStatus.data, fetchReceiverMetadata.data, - onCallMetadata + onCallMetadata, + result.data.alertmanager_config.receivers ?? [], + result.data ) : [], }), + skip: !includePoliciesCount, } ); + // for Grafana Managed Alertmanager, we use the new read-only endpoint for getting the list of contact points + const fetchGrafanaContactPoints = alertmanagerApi.endpoints.getContactPointsList.useQuery(undefined, { + refetchOnFocus: true, + refetchOnReconnect: true, + selectFromResult: (result) => ({ + ...result, + contactPoints: result.data + ? enhanceContactPointsWithMetadata( + fetchContactPointsStatus.data, + fetchReceiverMetadata.data, + onCallMetadata, + result.data, // contact points from the new readonly endpoint + undefined //no config data + ) + : [], + }), + skip: includePoliciesCount || !isGrafanaAlertmanager, + }); + // we will fail silently for fetching OnCall plugin status and integrations - const error = fetchAlertmanagerConfiguration.error ?? fetchContactPointsStatus.error; + const error = + fetchAlertmanagerConfiguration.error || fetchGrafanaContactPoints.error || fetchContactPointsStatus.error; const isLoading = fetchAlertmanagerConfiguration.isLoading || + fetchGrafanaContactPoints.isLoading || fetchContactPointsStatus.isLoading || onCallPluginStatusLoading || onCallPluginIntegrationsLoading; - const contactPoints = fetchAlertmanagerConfiguration.contactPoints.sort((a, b) => a.name.localeCompare(b.name)); - + const unsortedContactPoints = includePoliciesCount + ? fetchAlertmanagerConfiguration.contactPoints + : fetchGrafanaContactPoints.contactPoints; + const contactPoints = unsortedContactPoints.sort((a, b) => a.name.localeCompare(b.name)); return { error, isLoading, contactPoints, + refetchReceivers: fetchGrafanaContactPoints.refetch, }; } diff --git a/public/app/features/alerting/unified/components/contact-points/utils.test.ts b/public/app/features/alerting/unified/components/contact-points/utils.test.ts new file mode 100644 index 0000000000000..4e340e33577e2 --- /dev/null +++ b/public/app/features/alerting/unified/components/contact-points/utils.test.ts @@ -0,0 +1,157 @@ +import { GrafanaManagedContactPoint } from 'app/plugins/datasource/alertmanager/types'; + +import { ReceiverTypes } from '../receivers/grafanaAppReceivers/onCall/onCall'; + +import { RECEIVER_META_KEY, RECEIVER_PLUGIN_META_KEY } from './useContactPoints'; +import { + ReceiverConfigWithMetadata, + getReceiverDescription, + isAutoGeneratedPolicy, + isProvisioned, + summarizeEmailAddresses, +} from './utils'; + +describe('isProvisioned', () => { + it('should return true when at least one receiver is provisioned', () => { + const contactPoint: GrafanaManagedContactPoint = { + name: 'my-contact-point', + grafana_managed_receiver_configs: [ + { name: 'email', provenance: 'api', type: 'email', disableResolveMessage: false, settings: {} }, + ], + }; + + expect(isProvisioned(contactPoint)).toBe(true); + }); + + it('should return false when no receiver was provisioned', () => { + const contactPoint: GrafanaManagedContactPoint = { + name: 'my-contact-point', + grafana_managed_receiver_configs: [ + { name: 'email', provenance: undefined, type: 'email', disableResolveMessage: false, settings: {} }, + ], + }; + + expect(isProvisioned(contactPoint)).toBe(false); + }); +}); + +describe('isAutoGeneratedPolicy', () => { + it('should return false when not enabled', () => { + expect(isAutoGeneratedPolicy({})).toBe(false); + }); +}); + +describe('getReceiverDescription', () => { + it('should show multiple email addresses', () => { + const receiver: ReceiverConfigWithMetadata = { + name: 'email', + provenance: undefined, + type: 'email', + disableResolveMessage: false, + settings: { addresses: 'test1@test.com,test2@test.com,test3@test.com,test4@test.com' }, + [RECEIVER_META_KEY]: { + name: 'Email', + description: 'The email receiver', + }, + }; + + expect(getReceiverDescription(receiver)).toBe('test1@test.com, test2@test.com, test3@test.com, +1 more'); + }); + + it('should work for Slack', () => { + const output = '#channel'; + const receiver1: ReceiverConfigWithMetadata = { + name: 'slack', + provenance: undefined, + type: 'slack', + disableResolveMessage: false, + settings: { recipient: '#channel' }, + [RECEIVER_META_KEY]: { + name: 'Slack', + description: 'The Slack receiver', + }, + }; + + const receiver2: ReceiverConfigWithMetadata = { + name: 'slack', + provenance: undefined, + type: 'slack', + disableResolveMessage: false, + settings: { recipient: 'channel' }, + [RECEIVER_META_KEY]: { + name: 'Slack', + description: 'The Slack receiver', + }, + }; + + expect(getReceiverDescription(receiver1)).toBe(output); + expect(getReceiverDescription(receiver2)).toBe(output); + }); + + it('should work for OnCall', () => { + const output = 'The OnCall receiver'; + const input: ReceiverConfigWithMetadata = { + name: 'my oncall', + provenance: undefined, + type: ReceiverTypes.OnCall, + disableResolveMessage: false, + settings: {}, + [RECEIVER_PLUGIN_META_KEY]: { + description: output, + icon: '', + title: '', + }, + [RECEIVER_META_KEY]: { + name: '', + }, + }; + + expect(getReceiverDescription(input)).toBe(output); + }); + + it('should work for any type', () => { + const output = 'Some description of the receiver'; + const input: ReceiverConfigWithMetadata = { + name: 'some receiver', + provenance: undefined, + type: 'some', + disableResolveMessage: false, + settings: {}, + [RECEIVER_META_KEY]: { + name: 'Some Receiver', + description: output, + }, + }; + + expect(getReceiverDescription(input)).toBe(output); + }); + + it('should work for any type with no description', () => { + const input: ReceiverConfigWithMetadata = { + name: 'some receiver', + provenance: undefined, + type: 'some', + disableResolveMessage: false, + settings: {}, + [RECEIVER_META_KEY]: { + name: 'Some Receiver', + }, + }; + + expect(getReceiverDescription(input)).toBe(undefined); + }); +}); + +describe('summarizeEmailAddresses', () => { + it('should work with one email address', () => { + expect(summarizeEmailAddresses('test@test.com')).toBe('test@test.com'); + }); + + it('should work with multiple types of separators', () => { + const output = 'foo@foo.com, bar@bar.com'; + + expect(summarizeEmailAddresses('foo@foo.com, bar@bar.com')).toBe(output); + expect(summarizeEmailAddresses(' foo@foo.com; bar@bar.com')).toBe(output); + expect(summarizeEmailAddresses('foo@foo.com\n bar@bar.com ')).toBe(output); + }); +}); diff --git a/public/app/features/alerting/unified/components/contact-points/utils.ts b/public/app/features/alerting/unified/components/contact-points/utils.ts index 79a71733fb7e0..479bde2b49482 100644 --- a/public/app/features/alerting/unified/components/contact-points/utils.ts +++ b/public/app/features/alerting/unified/components/contact-points/utils.ts @@ -1,10 +1,13 @@ -import { countBy, split, trim, upperFirst } from 'lodash'; +import { countBy, difference, take, trim, upperFirst } from 'lodash'; import { ReactNode } from 'react'; +import { config } from '@grafana/runtime'; import { AlertManagerCortexConfig, GrafanaManagedContactPoint, GrafanaManagedReceiverConfig, + MatcherOperator, + Receiver, Route, } from 'app/plugins/datasource/alertmanager/types'; import { NotifierDTO, NotifierStatus, ReceiversStateDTO } from 'app/types'; @@ -17,6 +20,8 @@ import { getOnCallMetadata, ReceiverPluginMetadata } from '../receivers/grafanaA import { RECEIVER_META_KEY, RECEIVER_PLUGIN_META_KEY, RECEIVER_STATUS_KEY } from './useContactPoints'; +const AUTOGENERATED_RECEIVER_POLICY_MATCHER_KEY = '__grafana_receiver__'; + export function isProvisioned(contactPoint: GrafanaManagedContactPoint) { // for some reason the provenance is on the receiver and not the entire contact point const provenance = contactPoint.grafana_managed_receiver_configs?.find((receiver) => receiver.provenance)?.provenance; @@ -26,21 +31,30 @@ export function isProvisioned(contactPoint: GrafanaManagedContactPoint) { // TODO we should really add some type information to these receiver settings... export function getReceiverDescription(receiver: ReceiverConfigWithMetadata): ReactNode | undefined { + if (!receiver.settings) { + return undefined; + } switch (receiver.type) { case 'email': { const hasEmailAddresses = 'addresses' in receiver.settings; // when dealing with alertmanager email_configs we don't normalize the settings return hasEmailAddresses ? summarizeEmailAddresses(receiver.settings['addresses']) : undefined; } case 'slack': { - const channelName = receiver.settings['recipient']; - return channelName ? `#${channelName}` : undefined; + const recipient: string | undefined = receiver.settings['recipient']; + if (!recipient) { + return; + } + + // Slack channel name might have a "#" in the recipient already + const channelName = recipient.replace(/^#/, ''); + return `#${channelName}`; } case 'kafka': { - const topicName = receiver.settings['kafkaTopic']; + const topicName: string | undefined = receiver.settings['kafkaTopic']; return topicName; } case 'webhook': { - const url = receiver.settings['url']; + const url: string | undefined = receiver.settings['url']; return url; } case ReceiverTypes.OnCall: { @@ -53,20 +67,22 @@ export function getReceiverDescription(receiver: ReceiverConfigWithMetadata): Re // input: foo+1@bar.com, foo+2@bar.com, foo+3@bar.com, foo+4@bar.com // output: foo+1@bar.com, foo+2@bar.com, +2 more -function summarizeEmailAddresses(addresses: string): string { +export function summarizeEmailAddresses(addresses: string): string { const MAX_ADDRESSES_SHOWN = 3; const SUPPORTED_SEPARATORS = /,|;|\n+/g; + // split all email addresses const emails = addresses.trim().split(SUPPORTED_SEPARATORS).map(trim); - const notShown = emails.length - MAX_ADDRESSES_SHOWN; + // grab the first 3 and the rest + const summary = take(emails, MAX_ADDRESSES_SHOWN); + const rest = difference(emails, summary); - const truncatedAddresses = split(addresses, SUPPORTED_SEPARATORS, MAX_ADDRESSES_SHOWN); - if (notShown > 0) { - truncatedAddresses.push(`+${notShown} more`); + if (rest.length) { + summary.push(`+${rest.length} more`); } - return truncatedAddresses.join(', '); + return summary.join(', '); } // Grafana Managed contact points have receivers with additional diagnostics @@ -83,7 +99,7 @@ export interface ReceiverConfigWithMetadata extends GrafanaManagedReceiverConfig } export interface ContactPointWithMetadata extends GrafanaManagedContactPoint { - numberOfPolicies: number; + numberOfPolicies?: number; // now is optional as we don't have the data from the read-only endpoint grafana_managed_receiver_configs: ReceiverConfigWithMetadata[]; } @@ -91,30 +107,36 @@ export interface ContactPointWithMetadata extends GrafanaManagedContactPoint { * This function adds the status information for each of the integrations (contact point types) in a contact point * 1. we iterate over all contact points * 2. for each contact point we "enhance" it with the status or "undefined" for vanilla Alertmanager + * contactPoints: list of contact points + * alertmanagerConfiguration: optional as is passed when we need to get number of policies for each contact point + * and we prefer using the data from the read-only endpoint. */ export function enhanceContactPointsWithMetadata( - result: AlertManagerCortexConfig, status: ReceiversStateDTO[] = [], notifiers: NotifierDTO[] = [], - onCallIntegrations: OnCallIntegrationDTO[] | undefined | null + onCallIntegrations: OnCallIntegrationDTO[] | undefined | null, + contactPoints: Receiver[], + alertmanagerConfiguration?: AlertManagerCortexConfig ): ContactPointWithMetadata[] { - const contactPoints = result.alertmanager_config.receivers ?? []; - // compute the entire inherited tree before finding what notification policies are using a particular contact point - const fullyInheritedTree = computeInheritedTree(result?.alertmanager_config?.route ?? {}); + const fullyInheritedTree = computeInheritedTree(alertmanagerConfiguration?.alertmanager_config?.route ?? {}); const usedContactPoints = getUsedContactPoints(fullyInheritedTree); const usedContactPointsByName = countBy(usedContactPoints); - return contactPoints.map((contactPoint) => { + const contactPointsList = alertmanagerConfiguration + ? alertmanagerConfiguration?.alertmanager_config.receivers ?? [] + : contactPoints ?? []; + + return contactPointsList.map((contactPoint) => { const receivers = extractReceivers(contactPoint); const statusForReceiver = status.find((status) => status.name === contactPoint.name); return { ...contactPoint, - numberOfPolicies: usedContactPointsByName[contactPoint.name] ?? 0, + numberOfPolicies: + alertmanagerConfiguration && usedContactPointsByName && (usedContactPointsByName[contactPoint.name] ?? 0), grafana_managed_receiver_configs: receivers.map((receiver, index) => { const isOnCallReceiver = receiver.type === ReceiverTypes.OnCall; - return { ...receiver, [RECEIVER_STATUS_KEY]: statusForReceiver?.integrations[index], @@ -127,9 +149,27 @@ export function enhanceContactPointsWithMetadata( }); } +export function isAutoGeneratedPolicy(route: Route) { + const simplifiedRoutingToggleEnabled = config.featureToggles.alertingSimplifiedRouting ?? false; + if (!simplifiedRoutingToggleEnabled) { + return false; + } + if (!route.object_matchers) { + return false; + } + return ( + route.object_matchers.some((objectMatcher) => { + return ( + objectMatcher[0] === AUTOGENERATED_RECEIVER_POLICY_MATCHER_KEY && objectMatcher[1] === MatcherOperator.equal + ); + }) ?? false + ); +} + export function getUsedContactPoints(route: Route): string[] { const childrenContactPoints = route.routes?.flatMap((route) => getUsedContactPoints(route)) ?? []; - if (route.receiver) { + // we don't want to count the autogenerated policy for receiver level, for checking if a contact point is used + if (route.receiver && !isAutoGeneratedPolicy(route)) { return [route.receiver, ...childrenContactPoints]; } diff --git a/public/app/features/alerting/unified/components/export/FileExportPreview.tsx b/public/app/features/alerting/unified/components/export/FileExportPreview.tsx index 2a7f5c06ee6d2..df5fcfd949535 100644 --- a/public/app/features/alerting/unified/components/export/FileExportPreview.tsx +++ b/public/app/features/alerting/unified/components/export/FileExportPreview.tsx @@ -4,9 +4,9 @@ import React, { useCallback, useMemo } from 'react'; import AutoSizer from 'react-virtualized-auto-sizer'; import { GrafanaTheme2 } from '@grafana/data'; -import { Button, ClipboardButton, CodeEditor, useStyles2 } from '@grafana/ui'; +import { Alert, Button, ClipboardButton, CodeEditor, TextLink, useStyles2 } from '@grafana/ui'; -import { allGrafanaExportProviders, ExportFormats } from './providers'; +import { allGrafanaExportProviders, ExportFormats, ExportProvider, ProvisioningType } from './providers'; interface FileExportPreviewProps { format: ExportFormats; @@ -19,6 +19,7 @@ interface FileExportPreviewProps { export function FileExportPreview({ format, textDefinition, downloadFileName, onClose }: FileExportPreviewProps) { const styles = useStyles2(fileExportPreviewStyles); + const provider = allGrafanaExportProviders[format]; const onDownload = useCallback(() => { const blob = new Blob([textDefinition], { @@ -28,13 +29,13 @@ export function FileExportPreview({ format, textDefinition, downloadFileName, on }, [textDefinition, downloadFileName, format]); const formattedTextDefinition = useMemo(() => { - const provider = allGrafanaExportProviders[format]; return provider.formatter ? provider.formatter(textDefinition) : textDefinition; - }, [format, textDefinition]); + }, [provider, textDefinition]); return ( // TODO Handle empty content
+
{({ height }) => ( @@ -87,3 +88,60 @@ const fileExportPreviewStyles = (theme: GrafanaTheme2) => ({ gap: ${theme.spacing(1)}; `, }); + +function FileExportInlineDocumentation({ exportProvider }: { exportProvider: ExportProvider }) { + const { name, type } = exportProvider; + + const exportInlineDoc: Record = { + file: { + title: 'File-provisioning format', + component: ( + <> + {name} format is only valid for File Provisioning.{' '} + + Read more in the docs. + + + ), + }, + api: { + title: 'API-provisioning format', + component: ( + <> + {name} format is only valid for API Provisioning.{' '} + + Read more in the docs. + + + ), + }, + terraform: { + title: 'Terraform-provisioning format', + component: ( + <> + {name} format is only valid for Terraform Provisioning.{' '} + + Read more in the docs. + + + ), + }, + }; + + const { title, component } = exportInlineDoc[type]; + + return ( + + {component} + + ); +} diff --git a/public/app/features/alerting/unified/components/export/GrafanaModifyExport.test.tsx b/public/app/features/alerting/unified/components/export/GrafanaModifyExport.test.tsx index 3e6b40693467a..48175f94ccfc0 100644 --- a/public/app/features/alerting/unified/components/export/GrafanaModifyExport.test.tsx +++ b/public/app/features/alerting/unified/components/export/GrafanaModifyExport.test.tsx @@ -2,10 +2,9 @@ import { render, waitFor, waitForElementToBeRemoved } from '@testing-library/rea import userEvent from '@testing-library/user-event'; import React from 'react'; import { Route } from 'react-router-dom'; -import { AutoSizerProps } from 'react-virtualized-auto-sizer'; +import { Props } from 'react-virtualized-auto-sizer'; import { byRole, byTestId, byText } from 'testing-library-selector'; -import { selectors } from '@grafana/e2e-selectors'; import { locationService } from '@grafana/runtime'; import { TestProvider } from '../../../../../../test/helpers/TestProvider'; @@ -24,7 +23,13 @@ jest.mock('app/core/components/AppChrome/AppChromeUpdate', () => ({ })); jest.mock('react-virtualized-auto-sizer', () => { - return ({ children }: AutoSizerProps) => children({ height: 600, width: 1 }); + return ({ children }: Props) => + children({ + height: 600, + scaledHeight: 600, + scaledWidth: 1, + width: 1, + }); }); jest.mock('@grafana/ui', () => ({ ...jest.requireActual('@grafana/ui'), @@ -36,7 +41,6 @@ const ui = { form: { nameInput: byRole('textbox', { name: 'name' }), folder: byTestId('folder-picker'), - folderContainer: byTestId(selectors.components.FolderPicker.containerV2), group: byTestId('group-picker'), annotationKey: (idx: number) => byTestId(`annotation-key-${idx}`), annotationValue: (idx: number) => byTestId(`annotation-value-${idx}`), @@ -75,7 +79,7 @@ describe('GrafanaModifyExport', () => { const grafanaRule = getGrafanaRule(undefined, { uid: 'test-rule-uid', title: 'cpu-usage', - namespace_uid: 'folder-test-uid', + namespace_uid: 'folderUID1', data: [ { refId: 'A', @@ -97,21 +101,23 @@ describe('GrafanaModifyExport', () => { mockSearchApi(server).search([ mockDashboardSearchItem({ title: grafanaRule.namespace.name, - uid: 'folder-test-uid', + uid: 'folderUID1', + url: '', + tags: [], type: DashboardSearchItemType.DashFolder, }), ]); mockAlertRuleApi(server).rulerRules(GRAFANA_RULES_SOURCE_NAME, { [grafanaRule.namespace.name]: [{ name: grafanaRule.group.name, interval: '1m', rules: [grafanaRule.rulerRule!] }], }); - mockAlertRuleApi(server).rulerRuleGroup( - GRAFANA_RULES_SOURCE_NAME, - grafanaRule.namespace.name, - grafanaRule.group.name, - { name: grafanaRule.group.name, interval: '1m', rules: [grafanaRule.rulerRule!] } - ); - mockExportApi(server).modifiedExport(grafanaRule.namespace.name, { + mockAlertRuleApi(server).rulerRuleGroup(GRAFANA_RULES_SOURCE_NAME, 'folderUID1', grafanaRule.group.name, { + name: grafanaRule.group.name, + interval: '1m', + rules: [grafanaRule.rulerRule!], + }); + mockExportApi(server).modifiedExport('folderUID1', { yaml: 'Yaml Export Content', + json: 'Json Export Content', }); const user = userEvent.setup(); @@ -127,6 +133,7 @@ describe('GrafanaModifyExport', () => { expect(drawer).toBeInTheDocument(); expect(ui.exportDrawer.yamlTab.get(drawer)).toHaveAttribute('aria-selected', 'true'); + await waitFor(() => { expect(ui.exportDrawer.editor.get(drawer)).toHaveTextContent('Yaml Export Content'); }); diff --git a/public/app/features/alerting/unified/components/export/providers.ts b/public/app/features/alerting/unified/components/export/providers.ts index 356909609bb08..518ced9e5f2c7 100644 --- a/public/app/features/alerting/unified/components/export/providers.ts +++ b/public/app/features/alerting/unified/components/export/providers.ts @@ -1,12 +1,16 @@ +export type ProvisioningType = 'file' | 'api' | 'terraform'; + export interface ExportProvider { name: string; exportFormat: TFormat; + type: ProvisioningType; formatter?: (raw: string) => string; } export const JsonExportProvider: ExportProvider<'json'> = { name: 'JSON', exportFormat: 'json', + type: 'file', formatter: (raw: string) => { try { return JSON.stringify(JSON.parse(raw), null, 4); @@ -19,11 +23,13 @@ export const JsonExportProvider: ExportProvider<'json'> = { export const YamlExportProvider: ExportProvider<'yaml'> = { name: 'YAML', exportFormat: 'yaml', + type: 'file', }; export const HclExportProvider: ExportProvider<'hcl'> = { name: 'Terraform (HCL)', exportFormat: 'hcl', + type: 'terraform', }; export const allGrafanaExportProviders = { diff --git a/public/app/features/alerting/unified/components/expressions/Expression.tsx b/public/app/features/alerting/unified/components/expressions/Expression.tsx index b748e0308f2bf..73db0a2f5bfaf 100644 --- a/public/app/features/alerting/unified/components/expressions/Expression.tsx +++ b/public/app/features/alerting/unified/components/expressions/Expression.tsx @@ -1,13 +1,15 @@ import { css, cx } from '@emotion/css'; import { uniqueId } from 'lodash'; import React, { FC, useCallback, useState } from 'react'; +import { useFormContext } from 'react-hook-form'; import { DataFrame, dateTimeFormat, GrafanaTheme2, isTimeSeriesFrames, LoadingState, PanelData } from '@grafana/data'; -import { AutoSizeInput, Button, clearButtonStyles, IconButton, useStyles2, Stack } from '@grafana/ui'; +import { Alert, AutoSizeInput, Button, clearButtonStyles, IconButton, Stack, useStyles2 } from '@grafana/ui'; import { ClassicConditions } from 'app/features/expressions/components/ClassicConditions'; import { Math } from 'app/features/expressions/components/Math'; import { Reduce } from 'app/features/expressions/components/Reduce'; import { Resample } from 'app/features/expressions/components/Resample'; +import { SqlExpr } from 'app/features/expressions/components/SqlExpr'; import { Threshold } from 'app/features/expressions/components/Threshold'; import { ExpressionQuery, @@ -56,6 +58,19 @@ export const Expression: FC = ({ const queryType = query?.type; + const { setError, clearErrors } = useFormContext(); + + const onQueriesValidationError = useCallback( + (errorMsg: string | undefined) => { + if (errorMsg) { + setError('queries', { type: 'custom', message: errorMsg }); + } else { + clearErrors('queries'); + } + }, + [setError, clearErrors] + ); + const isLoading = data && Object.values(data).some((d) => Boolean(d) && d.state === LoadingState.Loading); const hasResults = Array.isArray(data?.series) && !isLoading; const series = data?.series ?? []; @@ -85,13 +100,25 @@ export const Expression: FC = ({ return ; case ExpressionQueryType.threshold: - return ; + return ( + + ); + + case ExpressionQueryType.sql: + return ; default: return <>Expression not supported: {query.type}; } }, - [onChangeQuery, queries] + [onChangeQuery, queries, onQueriesValidationError] ); const selectedExpressionType = expressionTypes.find((o) => o.value === queryType); const selectedExpressionDescription = selectedExpressionType?.description ?? ''; @@ -113,12 +140,20 @@ export const Expression: FC = ({ onUpdateRefId={(newRefId) => onUpdateRefId(query.refId, newRefId)} onUpdateExpressionType={(type) => onUpdateExpressionType(query.refId, type)} onSetCondition={onSetCondition} - warning={warning} - error={error} query={query} alertCondition={alertCondition} />
+ {error && ( + + {error.message} + + )} + {warning && ( + + {warning.message} + + )}
{selectedExpressionDescription}
{renderExpressionType(query)}
@@ -252,8 +287,6 @@ interface HeaderProps { onUpdateRefId: (refId: string) => void; onRemoveExpression: () => void; onUpdateExpressionType: (type: ExpressionQueryType) => void; - warning?: Error; - error?: Error; onSetCondition: (refId: string) => void; query: ExpressionQuery; alertCondition: boolean; @@ -264,11 +297,9 @@ const Header: FC = ({ queryType, onUpdateRefId, onRemoveExpression, - warning, onSetCondition, alertCondition, query, - error, }) => { const styles = useStyles2(getStyles); const clearButton = useStyles2(clearButtonStyles); @@ -312,12 +343,7 @@ const Header: FC = ({
{getExpressionLabel(queryType)}
- onSetCondition(query.refId)} - isCondition={alertCondition} - /> + onSetCondition(query.refId)} isCondition={alertCondition} /> { - it('should render two elements when error and not condition', () => { - render(); - - expect(screen.getByText('Warning')).toBeInTheDocument(); - expect(screen.getByRole('button', { name: 'Set as alert condition' })).toBeInTheDocument(); - }); - - it('should render one element when warning and condition', () => { - render(); - - expect(screen.getByText('Alert condition')).toBeInTheDocument(); - expect(screen.queryByRole('button', { name: 'Set as alert condition' })).not.toBeInTheDocument(); - }); - - it('should render two elements when error and not condition', () => { - render(); - - expect(screen.getByText('Error')).toBeInTheDocument(); - expect(screen.getByRole('button', { name: 'Set as alert condition' })).toBeInTheDocument(); - }); - - it('should render one element when error and condition', () => { - render(); - - expect(screen.getByText('Alert condition')).toBeInTheDocument(); - expect(screen.queryByRole('button', { name: 'Set as alert condition' })).not.toBeInTheDocument(); - }); - it('should render one element if condition', () => { render(); - expect(screen.queryByText('Error')).not.toBeInTheDocument(); - expect(screen.queryByText('Warning')).not.toBeInTheDocument(); expect(screen.getByText('Alert condition')).toBeInTheDocument(); }); it('should render one element if not condition', () => { render(); - expect(screen.queryByText('Error')).not.toBeInTheDocument(); - expect(screen.queryByText('Warning')).not.toBeInTheDocument(); expect(screen.queryByRole('button', { name: 'Alert condition' })).not.toBeInTheDocument(); expect(screen.getByRole('button', { name: 'Set as alert condition' })).toBeInTheDocument(); }); diff --git a/public/app/features/alerting/unified/components/expressions/ExpressionStatusIndicator.tsx b/public/app/features/alerting/unified/components/expressions/ExpressionStatusIndicator.tsx index 28a668e25b03f..71dbdd91297fb 100644 --- a/public/app/features/alerting/unified/components/expressions/ExpressionStatusIndicator.tsx +++ b/public/app/features/alerting/unified/components/expressions/ExpressionStatusIndicator.tsx @@ -5,35 +5,17 @@ import { GrafanaTheme2 } from '@grafana/data'; import { Badge, clearButtonStyles, useStyles2 } from '@grafana/ui'; interface AlertConditionProps { - warning?: Error; - error?: Error; isCondition?: boolean; onSetCondition?: () => void; } -export const ExpressionStatusIndicator = ({ error, warning, isCondition, onSetCondition }: AlertConditionProps) => { +export const ExpressionStatusIndicator = ({ isCondition, onSetCondition }: AlertConditionProps) => { const styles = useStyles2(getStyles); - const elements: JSX.Element[] = []; - - if (error && isCondition) { - return ; - } else if (error) { - elements.push(); - } - - if (warning && isCondition) { - return ; - } else if (warning) { - elements.push( - - ); - } - if (isCondition) { - elements.unshift(); + return ; } else { - elements.unshift( + return ( + + + {/* + This switch is only available for Grafana Alertmanager, as for now, Grafana alert manager doesn't support this feature + It hanldes empty list as undefined making impossible the use of an empty list for disabling time interval + */} + {!isGrafanaAlertmanager && ( + + )} +
); })} diff --git a/public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeRange.tsx b/public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeRange.tsx index 9ce8a96faaea4..b057a01e95af1 100644 --- a/public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeRange.tsx +++ b/public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeRange.tsx @@ -3,9 +3,10 @@ import React from 'react'; import { useFieldArray, useFormContext } from 'react-hook-form'; import { GrafanaTheme2 } from '@grafana/data'; -import { Button, Field, Icon, IconButton, InlineField, InlineFieldRow, Input, useStyles2 } from '@grafana/ui'; +import { Button, Field, Icon, IconButton, InlineField, InlineFieldRow, Input, Tooltip, useStyles2 } from '@grafana/ui'; import { MuteTimingFields } from '../../types/mute-timing-form'; +import ConditionalWrap from '../ConditionalWrap'; import { isValidStartAndEndTime, isvalidTimeFormat } from './util'; @@ -17,7 +18,8 @@ const INVALID_FORMAT_MESSAGE = 'Times must be between 00:00 and 24:00 UTC'; export const MuteTimingTimeRange = ({ intervalIndex }: Props) => { const styles = useStyles2(getStyles); - const { register, formState, getValues } = useFormContext(); + const { register, formState, getValues, watch } = useFormContext(); + const isDisabled = watch(`time_intervals.${intervalIndex}.disable`); const { fields: timeRanges, @@ -28,7 +30,7 @@ export const MuteTimingTimeRange = ({ intervalIndex }: Props) => { }); const formErrors = formState.errors.time_intervals?.[intervalIndex]; - const timeRangeInvalid = formErrors?.times?.some((value) => value?.start_time || value?.end_time) ?? false; + const timeRangeInvalid = formErrors?.times?.some?.((value) => value?.start_time || value?.end_time) ?? false; return (
@@ -81,6 +83,7 @@ export const MuteTimingTimeRange = ({ intervalIndex }: Props) => { })} className={styles.timeRangeInput} maxLength={5} + readOnly={isDisabled} suffix={} // @ts-ignore react-hook-form doesn't handle nested field arrays well defaultValue={timeRange.start_time} @@ -112,6 +115,7 @@ export const MuteTimingTimeRange = ({ intervalIndex }: Props) => { })} className={styles.timeRangeInput} maxLength={5} + readOnly={isDisabled} suffix={} // @ts-ignore react-hook-form doesn't handle nested field arrays well defaultValue={timeRange.end_time} @@ -135,15 +139,25 @@ export const MuteTimingTimeRange = ({ intervalIndex }: Props) => { })} - + +
); }; diff --git a/public/app/features/alerting/unified/components/mute-timings/MuteTimingsTable.tsx b/public/app/features/alerting/unified/components/mute-timings/MuteTimingsTable.tsx index 5db1a2ce98ab5..69dec20bbc41b 100644 --- a/public/app/features/alerting/unified/components/mute-timings/MuteTimingsTable.tsx +++ b/public/app/features/alerting/unified/components/mute-timings/MuteTimingsTable.tsx @@ -3,7 +3,7 @@ import React, { useCallback, useMemo, useState } from 'react'; import { useToggle } from 'react-use'; import { GrafanaTheme2 } from '@grafana/data'; -import { Button, ConfirmModal, IconButton, Link, LinkButton, Menu, Stack, useStyles2 } from '@grafana/ui'; +import { Badge, Button, ConfirmModal, IconButton, Link, LinkButton, Menu, Stack, useStyles2 } from '@grafana/ui'; import { MuteTimeInterval } from 'app/plugins/datasource/alertmanager/types'; import { useDispatch } from 'app/types/store'; @@ -11,14 +11,16 @@ import { Authorize } from '../../components/Authorize'; import { AlertmanagerAction, useAlertmanagerAbilities, useAlertmanagerAbility } from '../../hooks/useAbilities'; import { useAlertmanagerConfig } from '../../hooks/useAlertmanagerConfig'; import { deleteMuteTimingAction } from '../../state/actions'; +import { GRAFANA_RULES_SOURCE_NAME } from '../../utils/datasource'; import { makeAMLink } from '../../utils/misc'; +import { isDisabled } from '../../utils/mute-timings'; import { DynamicTable, DynamicTableColumnProps, DynamicTableItemProps } from '../DynamicTable'; import { EmptyAreaWithCTA } from '../EmptyAreaWithCTA'; import { ProvisioningBadge } from '../Provisioning'; import { Spacer } from '../Spacer'; import { GrafanaMuteTimingsExporter } from '../export/GrafanaMuteTimingsExporter'; -import { renderTimeIntervals } from './util'; +import { mergeTimeIntervals, renderTimeIntervals } from './util'; const ALL_MUTE_TIMINGS = Symbol('all mute timings'); @@ -72,9 +74,9 @@ export const MuteTimingsTable = ({ alertManagerSourceName, muteTimingNames, hide const config = currentData?.alertmanager_config; const [muteTimingName, setMuteTimingName] = useState(''); - const items = useMemo((): Array> => { - const muteTimings = config?.mute_time_intervals ?? []; + // merge both fields mute_time_intervals and time_intervals to support both old and new config + const muteTimings = config ? mergeTimeIntervals(config) : []; const muteTimingsProvenances = config?.muteTimeProvenances ?? {}; return muteTimings @@ -88,7 +90,7 @@ export const MuteTimingsTable = ({ alertManagerSourceName, muteTimingNames, hide }, }; }); - }, [config?.mute_time_intervals, config?.muteTimeProvenances, muteTimingNames]); + }, [muteTimingNames, config]); const [_, allowedToCreateMuteTiming] = useAlertmanagerAbility(AlertmanagerAction.CreateMuteTiming); @@ -175,9 +177,8 @@ function useColumns( ]); const showActions = !hideActions && (allowedToEdit || allowedToDelete); - // const [ExportDrawer, openExportDrawer] = useExportMuteTiming(); - // const [_, openExportDrawer] = useExportMuteTiming(); const [exportSupported, exportAllowed] = useAlertmanagerAbility(AlertmanagerAction.ExportMuteTimings); + const styles = useStyles2(getStyles); return useMemo((): Array> => { const columns: Array> = [ @@ -204,43 +205,18 @@ function useColumns( if (showActions) { columns.push({ id: 'actions', - label: 'Actions', + label: '', renderCell: function renderActions({ data }) { - if (data.provenance) { - return ( -
- - - -
- ); - } return ( -
- - - - - - - setMuteTimingName(data.name)} - /> - -
+ ); }, - size: '80px', + size: '150px', + className: styles.actionsColumn, }); } if (exportSupported) { @@ -265,7 +241,62 @@ function useColumns( }); } return columns; - }, [alertManagerSourceName, setMuteTimingName, showActions, exportSupported, exportAllowed, openExportDrawer]); + }, [ + alertManagerSourceName, + setMuteTimingName, + showActions, + exportSupported, + exportAllowed, + openExportDrawer, + styles.actionsColumn, + ]); +} + +interface ActionsAndBadgeProps { + muteTiming: MuteTimeInterval; + alertManagerSourceName: string; + setMuteTimingName: (name: string) => void; +} + +function ActionsAndBadge({ muteTiming, alertManagerSourceName, setMuteTimingName }: ActionsAndBadgeProps) { + const styles = useStyles2(getStyles); + const isGrafanaDataSource = alertManagerSourceName === GRAFANA_RULES_SOURCE_NAME; + + if (muteTiming.provenance) { + return ( + + {isDisabled(muteTiming) && !isGrafanaDataSource && ( + + )} + + + + + ); + } + return ( + + {isDisabled(muteTiming) && !isGrafanaDataSource && ( + + )} + + + + + + + setMuteTimingName(muteTiming.name)} /> + + + ); } const getStyles = (theme: GrafanaTheme2) => ({ @@ -277,4 +308,13 @@ const getStyles = (theme: GrafanaTheme2) => ({ margin-bottom: ${theme.spacing(2)}; align-self: flex-end; `, + disabledBadge: css({ + height: 'fit-content', + }), + editButton: css({ + display: 'flex', + }), + actionsColumn: css({ + justifyContent: 'flex-end', + }), }); diff --git a/public/app/features/alerting/unified/components/mute-timings/util.tsx b/public/app/features/alerting/unified/components/mute-timings/util.tsx index dda90ae1b39ed..00a52f5e8ff1e 100644 --- a/public/app/features/alerting/unified/components/mute-timings/util.tsx +++ b/public/app/features/alerting/unified/components/mute-timings/util.tsx @@ -1,7 +1,7 @@ import moment from 'moment'; import React from 'react'; -import { MuteTimeInterval } from 'app/plugins/datasource/alertmanager/types'; +import { AlertmanagerConfig, MuteTimeInterval } from 'app/plugins/datasource/alertmanager/types'; import { getDaysOfMonthString, @@ -18,6 +18,12 @@ const isvalidTimeFormat = (timeString: string): boolean => { return timeString ? TIME_RANGE_REGEX.test(timeString) : true; }; +// merge both fields mute_time_intervals and time_intervals to support both old and new config +export const mergeTimeIntervals = (alertManagerConfig: AlertmanagerConfig) => { + return [...(alertManagerConfig.mute_time_intervals ?? []), ...(alertManagerConfig.time_intervals ?? [])]; +}; + +// Usage const isValidStartAndEndTime = (startTime?: string, endTime?: string): boolean => { // empty time range is perfactly valid for a mute timing if (!startTime && !endTime) { @@ -67,4 +73,4 @@ function renderTimeIntervals(muteTiming: MuteTimeInterval) { }); } -export { isvalidTimeFormat, isValidStartAndEndTime, renderTimeIntervals }; +export { isValidStartAndEndTime, isvalidTimeFormat, renderTimeIntervals }; diff --git a/public/app/features/alerting/unified/components/notification-policies/EditDefaultPolicyForm.tsx b/public/app/features/alerting/unified/components/notification-policies/EditDefaultPolicyForm.tsx index fbfab072ad502..2ae8f5f58d7ea 100644 --- a/public/app/features/alerting/unified/components/notification-policies/EditDefaultPolicyForm.tsx +++ b/public/app/features/alerting/unified/components/notification-policies/EditDefaultPolicyForm.tsx @@ -1,6 +1,7 @@ import React, { ReactNode, useState } from 'react'; +import { useForm, Controller } from 'react-hook-form'; -import { Collapse, Field, Form, InputControl, Link, MultiSelect, Select, useStyles2 } from '@grafana/ui'; +import { Collapse, Field, Link, MultiSelect, Select, useStyles2 } from '@grafana/ui'; import { RouteWithID } from 'app/plugins/datasource/alertmanager/types'; import { FormAmRoute } from '../../types/amroutes'; @@ -41,125 +42,131 @@ export const AmRootRouteForm = ({ const [groupByOptions, setGroupByOptions] = useState(stringsToSelectableValues(route.group_by)); const defaultValues = amRouteToFormAmRoute(route); - + const { + handleSubmit, + register, + control, + formState: { errors }, + setValue, + getValues, + } = useForm({ + defaultValues: { + ...defaultValues, + overrideTimings: true, + overrideGrouping: true, + }, + }); return ( -
- {({ register, control, errors, setValue, getValues }) => ( + + <> - - <> -
- ( - - {/* @ts-ignore-check: react-hook-form made me do this */} - - {({ fields, append, remove }) => ( - <> - -
Matching labels
- {fields.length === 0 && ( - + + +
Matching labels
+ {fields.length === 0 && ( + + )} + {fields.length > 0 && ( +
+ {fields.map((field, index) => { + return ( + + + + + + ( + - - - ( - - - remove(index)}> - Remove - - - ); - })} -
- )} - + + + remove(index)}> + Remove +
- - )} -
- - ( - onChange(mapSelectValueToString(value))} + options={receiversWithOnCallOnTop} + isClearable + /> + )} + control={control} + name="receiver" + /> + + + + + + + + {watch().overrideGrouping && ( + + { + if (!value || value.length === 0) { + return 'At least one group by option is required.'; + } + return true; + }, + }} + render={({ field: { onChange, ref, ...field }, fieldState: { error } }) => ( + <> + onChange(mapSelectValueToString(value))} - options={receiversWithOnCallOnTop} - isClearable + onCreateOption={(opt: string) => { + setGroupByOptions((opts) => [...opts, stringToSelectableValue(opt)]); + setValue('groupBy', [...(field.value || []), opt]); + }} + onChange={(value) => onChange(mapMultiSelectValueToStrings(value))} + options={[...commonGroupByOptions, ...groupByOptions]} /> - )} - control={control} - name="receiver" + {error && {error.message}} + + )} + control={control} + name="groupBy" + /> + + )} + + + + {watch().overrideTimings && ( + <> + + - - - - - - - {watch().overrideGrouping && ( - - { - if (!value || value.length === 0) { - return 'At least one group by option is required.'; - } - return true; - }, - }} - render={({ field: { onChange, ref, ...field }, fieldState: { error } }) => ( - <> - { - setGroupByOptions((opts) => [...opts, stringToSelectableValue(opt)]); - - // @ts-ignore-check: react-hook-form made me do this - setValue('groupBy', [...field.value, opt]); - }} - onChange={(value) => onChange(mapMultiSelectValueToStrings(value))} - options={[...commonGroupByOptions, ...groupByOptions]} - /> - {error && {error.message}} - - )} - control={control} - name="groupBy" - /> - - )} - - + + - {watch().overrideTimings && ( - <> - - - - - - - - { - const groupInterval = getValues('groupIntervalValue'); - return repeatIntervalValidator(value, groupInterval); - }, - })} - aria-label={routeTimingsFields.repeatInterval.ariaLabel} - className={formStyles.promDurationInput} - /> - - - )} - ( - onChange(mapMultiSelectValueToStrings(value))} - options={muteTimingOptions} - /> - )} - control={control} - name="muteTimeIntervals" + { + const groupInterval = getValues('groupIntervalValue'); + return repeatIntervalValidator(value, groupInterval); + }, + })} + aria-label={routeTimingsFields.repeatInterval.ariaLabel} + className={formStyles.promDurationInput} /> - {actionButtons} )} - + + ( + onChange(mapMultiSelectValueToStrings(value))} + options={muteTimingOptions} + /> + )} + control={control} + name="muteTimeIntervals" + /> + + {actionButtons} + ); }; @@ -322,6 +324,7 @@ const getStyles = (theme: GrafanaTheme2) => { `, noMatchersWarning: css` padding: ${theme.spacing(1)} ${theme.spacing(2)}; + margin-bottom: ${theme.spacing(1)}; `, }; }; diff --git a/public/app/features/alerting/unified/components/notification-policies/Filters.tsx b/public/app/features/alerting/unified/components/notification-policies/Filters.tsx index 3a9e6cb41c5ea..66b2ee0cd3041 100644 --- a/public/app/features/alerting/unified/components/notification-policies/Filters.tsx +++ b/public/app/features/alerting/unified/components/notification-policies/Filters.tsx @@ -1,24 +1,27 @@ import { css } from '@emotion/css'; -import { debounce } from 'lodash'; +import { debounce, isEqual } from 'lodash'; import React, { useCallback, useEffect, useRef } from 'react'; import { SelectableValue } from '@grafana/data'; -import { Button, Field, Icon, Input, Label as LabelElement, Select, Tooltip, useStyles2, Stack } from '@grafana/ui'; +import { Button, Field, Icon, Input, Label, Select, Stack, Text, Tooltip, useStyles2 } from '@grafana/ui'; import { ObjectMatcher, Receiver, RouteWithID } from 'app/plugins/datasource/alertmanager/types'; import { useURLSearchParams } from '../../hooks/useURLSearchParams'; import { matcherToObjectMatcher, parseMatchers } from '../../utils/alertmanager'; +import { normalizeMatchers } from '../../utils/matchers'; interface NotificationPoliciesFilterProps { receivers: Receiver[]; onChangeMatchers: (labels: ObjectMatcher[]) => void; onChangeReceiver: (receiver: string | undefined) => void; + matchingCount: number; } const NotificationPoliciesFilter = ({ receivers, onChangeReceiver, onChangeMatchers, + matchingCount, }: NotificationPoliciesFilterProps) => { const [searchParams, setSearchParams] = useURLSearchParams(); const searchInputRef = useRef(null); @@ -50,11 +53,11 @@ const NotificationPoliciesFilter = ({ const inputInvalid = queryString && queryString.length > 3 ? parseMatchers(queryString).length === 0 : false; return ( - + + } invalid={inputInvalid} error={inputInvalid ? 'Query must use valid matcher syntax' : null} @@ -99,9 +102,16 @@ const NotificationPoliciesFilter = ({ /> {hasFilters && ( - + + + + {matchingCount === 0 && 'No policies matching filters.'} + {matchingCount === 1 && `${matchingCount} policy matches the filters.`} + {matchingCount > 1 && `${matchingCount} policies match the filters.`} + + )} ); @@ -112,19 +122,46 @@ const NotificationPoliciesFilter = ({ */ type FilterPredicate = (route: RouteWithID) => boolean; -export function findRoutesMatchingPredicate(routeTree: RouteWithID, predicateFn: FilterPredicate): RouteWithID[] { - const matches: RouteWithID[] = []; +/** + * Find routes int the tree that match the given predicate function + * @param routeTree the route tree to search + * @param predicateFn the predicate function to match routes + * @returns + * - matches: list of routes that match the predicate + * - matchingRouteIdsWithPath: map with routeids that are part of the path of a matching route + * key is the route id, value is an array of route ids that are part of its path + */ +export function findRoutesMatchingPredicate( + routeTree: RouteWithID, + predicateFn: FilterPredicate +): Map { + // map with routids that are part of the path of a matching route + // key is the route id, value is an array of route ids that are part of the path + const matchingRouteIdsWithPath = new Map(); + + function findMatch(route: RouteWithID, path: RouteWithID[]) { + const newPath = [...path, route]; - function findMatch(route: RouteWithID) { if (predicateFn(route)) { - matches.push(route); + // if the route matches the predicate, we need to add the path to the map of matching routes + const previousPath = matchingRouteIdsWithPath.get(route) ?? []; + // add the current route id to the map with its path + matchingRouteIdsWithPath.set(route, [...previousPath, ...newPath]); } - route.routes?.forEach(findMatch); + // if the route has subroutes, call findMatch recursively + route.routes?.forEach((route) => findMatch(route, newPath)); } - findMatch(routeTree); - return matches; + findMatch(routeTree, []); + + return matchingRouteIdsWithPath; +} + +export function findRoutesByMatchers(route: RouteWithID, labelMatchersFilter: ObjectMatcher[]): boolean { + const routeMatchers = normalizeMatchers(route); + + return labelMatchersFilter.every((filter) => routeMatchers.some((matcher) => isEqual(filter, matcher))); } const toOption = (receiver: Receiver) => ({ @@ -138,9 +175,9 @@ const getNotificationPoliciesFilters = (searchParams: URLSearchParams) => ({ }); const getStyles = () => ({ - noBottom: css` - margin-bottom: 0; - `, + noBottom: css({ + marginBottom: 0, + }), }); export { NotificationPoliciesFilter }; diff --git a/public/app/features/alerting/unified/components/notification-policies/Matchers.tsx b/public/app/features/alerting/unified/components/notification-policies/Matchers.tsx index f379658d2c799..458dc4a0258f0 100644 --- a/public/app/features/alerting/unified/components/notification-policies/Matchers.tsx +++ b/public/app/features/alerting/unified/components/notification-policies/Matchers.tsx @@ -6,12 +6,13 @@ import { GrafanaTheme2 } from '@grafana/data'; import { getTagColorsFromName, useStyles2, Stack } from '@grafana/ui'; import { ObjectMatcher } from 'app/plugins/datasource/alertmanager/types'; +import { MatcherFormatter, matcherFormatter } from '../../utils/matchers'; import { HoverCard } from '../HoverCard'; -type MatchersProps = { matchers: ObjectMatcher[] }; +type MatchersProps = { matchers: ObjectMatcher[]; formatter?: MatcherFormatter }; // renders the first N number of matchers -const Matchers: FC = ({ matchers }) => { +const Matchers: FC = ({ matchers, formatter = 'default' }) => { const styles = useStyles2(getStyles); const NUM_MATCHERS = 5; @@ -24,7 +25,7 @@ const Matchers: FC = ({ matchers }) => { {firstFew.map((matcher) => ( - + ))} {/* TODO hover state to show all matchers we're not showing */} {hasMoreMatchers && ( @@ -51,15 +52,16 @@ const Matchers: FC = ({ matchers }) => { interface MatcherBadgeProps { matcher: ObjectMatcher; + formatter?: MatcherFormatter; } -const MatcherBadge: FC = ({ matcher: [label, operator, value] }) => { +const MatcherBadge: FC = ({ matcher, formatter = 'default' }) => { const styles = useStyles2(getStyles); return ( -
+
- {label} {operator} {value} + {matcherFormatter[formatter](matcher)}
); diff --git a/public/app/features/alerting/unified/components/notification-policies/Modals.tsx b/public/app/features/alerting/unified/components/notification-policies/Modals.tsx index 099642f87d332..43338fdbdcf43 100644 --- a/public/app/features/alerting/unified/components/notification-policies/Modals.tsx +++ b/public/app/features/alerting/unified/components/notification-policies/Modals.tsx @@ -11,6 +11,8 @@ import { } from 'app/plugins/datasource/alertmanager/types'; import { FormAmRoute } from '../../types/amroutes'; +import { MatcherFormatter } from '../../utils/matchers'; +import { InsertPosition } from '../../utils/routeTree'; import { AlertGroup } from '../alert-groups/AlertGroup'; import { useGetAmRouteReceiverWithGrafanaAppTypes } from '../receivers/grafanaAppReceivers/grafanaApp'; @@ -20,24 +22,28 @@ import { AmRoutesExpandedForm } from './EditNotificationPolicyForm'; import { Matchers } from './Matchers'; type ModalHook = [JSX.Element, (item: T) => void, () => void]; +type AddModalHook = [JSX.Element, (item: T, position: InsertPosition) => void, () => void]; type EditModalHook = [JSX.Element, (item: RouteWithID, isDefaultRoute?: boolean) => void, () => void]; const useAddPolicyModal = ( receivers: Receiver[] = [], - handleAdd: (route: Partial, parentRoute: RouteWithID) => void, + handleAdd: (route: Partial, referenceRoute: RouteWithID, position: InsertPosition) => void, loading: boolean -): ModalHook => { +): AddModalHook => { const [showModal, setShowModal] = useState(false); - const [parentRoute, setParentRoute] = useState(); + const [insertPosition, setInsertPosition] = useState(undefined); + const [referenceRoute, setReferenceRoute] = useState(); const AmRouteReceivers = useGetAmRouteReceiverWithGrafanaAppTypes(receivers); const handleDismiss = useCallback(() => { - setParentRoute(undefined); + setReferenceRoute(undefined); + setInsertPosition(undefined); setShowModal(false); }, []); - const handleShow = useCallback((parentRoute: RouteWithID) => { - setParentRoute(parentRoute); + const handleShow = useCallback((referenceRoute: RouteWithID, position: InsertPosition) => { + setReferenceRoute(referenceRoute); + setInsertPosition(position); setShowModal(true); }, []); @@ -56,9 +62,13 @@ const useAddPolicyModal = ( { + if (referenceRoute && insertPosition) { + handleAdd(newRoute, referenceRoute, insertPosition); + } }} - onSubmit={(newRoute) => parentRoute && handleAdd(newRoute, parentRoute)} actionButtons={ + ) : ( + + onAddPolicy(currentRoute, 'above')} + /> + onAddPolicy(currentRoute, 'below')} + /> + + onAddPolicy(currentRoute, 'child')} + /> + + } + > + + + )} + + + )} + {dropdownMenuActions.length > 0 && ( + {dropdownMenuActions}}> +
+ + {/* Metadata row */} + +
+
+
+
+ {showPolicyChildren && ( + <> + {pageOfChildren.map((child) => { + const childInheritedProperties = getInheritedProperties(currentRoute, child, inheritedProperties); + // This child is autogenerated if it's the autogenerated root or if it's a child of an autogenerated policy. + const isThisChildAutoGenerated = isAutoGeneratedRootAndSimplifiedEnabled(child) || isAutoGenerated; + /* pass the "readOnly" prop from the parent, because for any child policy , if its parent it's not editable, + then the child policy should not be editable either */ + const isThisChildReadOnly = readOnly || provisioned || isAutoGenerated; + + return ( + + ); + })} + {showMore && ( + + )} + + )} +
+ {showExportDrawer && } + + + ); +}; + +interface MetadataRowProps { + matchingInstancesPreview: { groupsMap?: Map; enabled: boolean }; + numberOfAlertInstances?: number; + contactPoint?: string; + groupBy?: string[]; + muteTimings?: string[]; + timingOptions?: TimingOptions; + inheritedProperties?: Partial; + alertManagerSourceName: string; + receivers: Receiver[]; + matchingAlertGroups?: AlertmanagerGroup[]; + matchers?: ObjectMatcher[]; + isDefaultPolicy: boolean; + onShowAlertInstances: ( + alertGroups: AlertmanagerGroup[], + matchers?: ObjectMatcher[], + formatter?: MatcherFormatter + ) => void; +} + +function MetadataRow({ + numberOfAlertInstances, + isDefaultPolicy, + timingOptions, + groupBy, + muteTimings = [], + matchingInstancesPreview, + inheritedProperties, + matchingAlertGroups, + onShowAlertInstances, + matchers, + contactPoint, + alertManagerSourceName, + receivers, +}: MetadataRowProps) { + const styles = useStyles2(getStyles); - const childPolicies = currentRoute.routes ?? []; + const inheritedGrouping = inheritedProperties && inheritedProperties.group_by; + const hasInheritedProperties = inheritedProperties && Object.keys(inheritedProperties).length > 0; - const inheritedGrouping = hasInheritedProperties && inheritedProperties.group_by; const noGrouping = isArray(groupBy) && groupBy[0] === '...'; const customGrouping = !noGrouping && isArray(groupBy) && groupBy.length > 0; const singleGroup = isDefaultPolicy && isArray(groupBy) && groupBy.length === 0; - const matchingAlertGroups = matchingInstancesPreview?.groupsMap?.get(currentRoute.id); + const hasMuteTimings = Boolean(muteTimings.length); - // sum all alert instances for all groups we're handling - const numberOfAlertInstances = matchingAlertGroups - ? sumBy(matchingAlertGroups, (group) => group.alerts.length) - : undefined; + return ( +
+ + {matchingInstancesPreview.enabled && ( + { + matchingAlertGroups && + onShowAlertInstances(matchingAlertGroups, matchers, getAmMatcherFormatter(alertManagerSourceName)); + }} + data-testid="matching-instances" + > + {numberOfAlertInstances ?? '-'} + {pluralize('instance', numberOfAlertInstances)} + + )} + {contactPoint && ( + + Delivered to + + + )} + {!inheritedGrouping && ( + <> + {customGrouping && ( + + Grouped by + {groupBy.join(', ')} + + )} + {singleGroup && ( + + Single group + + )} + {noGrouping && ( + + Not grouping + + )} + + )} + {hasMuteTimings && ( + + Muted when + + + )} + {timingOptions && ( + // for the default policy we will also merge the default timings, that way a user can observe what the timing options would be + + )} + {hasInheritedProperties && ( + <> + + Inherited + + + + )} + +
+ ); +} - const [showExportDrawer, toggleShowExportDrawer] = useToggle(false); - const showExportAction = exportPoliciesAllowed && exportPoliciesSupported && isDefaultPolicy; +export const useCreateDropdownMenuActions = ( + isAutoGenerated: boolean, + isDefaultPolicy: boolean, + provisioned: boolean, + onEditPolicy: (route: RouteWithID, isDefault?: boolean, readOnly?: boolean) => void, + currentRoute: RouteWithID, + toggleShowExportDrawer: (nextValue?: any) => void, + onDeletePolicy: (route: RouteWithID) => void +) => { + const [ + [updatePoliciesSupported, updatePoliciesAllowed], + [deletePolicySupported, deletePolicyAllowed], + [exportPoliciesSupported, exportPoliciesAllowed], + ] = useAlertmanagerAbilities([ + AlertmanagerAction.UpdateNotificationPolicyTree, + AlertmanagerAction.DeleteNotificationPolicy, + AlertmanagerAction.ExportNotificationPolicies, + ]); + const dropdownMenuActions = []; + const showExportAction = exportPoliciesAllowed && exportPoliciesSupported && isDefaultPolicy && !isAutoGenerated; const showEditAction = updatePoliciesSupported && updatePoliciesAllowed; - const showDeleteAction = deletePolicySupported && deletePolicyAllowed && !isDefaultPolicy; - - // build the menu actions for our policy - const dropdownMenuActions: JSX.Element[] = []; + const showDeleteAction = deletePolicySupported && deletePolicyAllowed && !isDefaultPolicy && !isAutoGenerated; if (showEditAction) { dropdownMenuActions.push( @@ -150,7 +535,7 @@ const Policy: FC = ({ onEditPolicy(currentRoute, isDefaultPolicy)} /> @@ -173,7 +558,7 @@ const Policy: FC = ({ onDeletePolicy(currentRoute)} /> @@ -181,166 +566,30 @@ const Policy: FC = ({ ); } + return dropdownMenuActions; +}; - // TODO dead branch detection, warnings for all sort of configs that won't work or will never be activated - return ( - -
- {/* continueMatching and showMatchesAllLabelsWarning are mutually exclusive so the icons can't overlap */} - {continueMatching && } - {showMatchesAllLabelsWarning && } -
- - {/* Matchers and actions */} -
- - {isDefaultPolicy ? ( - - ) : hasMatchers ? ( - - ) : ( - No matchers - )} - - {/* TODO maybe we should move errors to the gutter instead? */} - {errors.length > 0 && } - {provisioned && } - {!readOnly && ( - - - - - - - {dropdownMenuActions.length > 0 && ( - {dropdownMenuActions}}> -
- - {/* Metadata row */} -
- - {matchingInstancesPreview.enabled && ( - { - matchingAlertGroups && onShowAlertInstances(matchingAlertGroups, matchers); - }} - data-testid="matching-instances" - > - {numberOfAlertInstances ?? '-'} - {pluralize('instance', numberOfAlertInstances)} - - )} - {contactPoint && ( - - Delivered to - - - )} - {!inheritedGrouping && ( - <> - {customGrouping && ( - - Grouped by - {groupBy.join(', ')} - - )} - {singleGroup && ( - - Single group - - )} - {noGrouping && ( - - Not grouping - - )} - - )} - {hasMuteTimings && ( - - Muted when - - - )} - {timingOptions && ( - // for the default policy we will also merge the default timings, that way a user can observe what the timing options would be - - )} - {hasInheritedProperties && ( - <> - - Inherited - - - - )} - -
-
-
-
-
- {/* pass the "readOnly" prop from the parent, because if you can't edit the parent you can't edit children */} - {childPolicies.map((child) => { - const childInheritedProperties = getInheritedProperties(currentRoute, child, inheritedProperties); +export const AUTOGENERATED_ROOT_LABEL_NAME = '__grafana_autogenerated__'; - return ( - - ); - })} -
- {showExportDrawer && } -
+export function isAutoGeneratedRootAndSimplifiedEnabled(route: RouteWithID) { + const simplifiedRoutingToggleEnabled = config.featureToggles.alertingSimplifiedRouting ?? false; + if (!simplifiedRoutingToggleEnabled) { + return false; + } + if (!route.object_matchers) { + return false; + } + return ( + route.object_matchers.some((objectMatcher) => { + return ( + objectMatcher[0] === AUTOGENERATED_ROOT_LABEL_NAME && + objectMatcher[1] === MatcherOperator.equal && + objectMatcher[2] === 'true' + ); + }) ?? false ); -}; + // return simplifiedRoutingToggleEnabled && route.receiver === 'contact_point_5'; +} const ProvisionedTooltip = (children: ReactNode) => ( @@ -388,7 +637,7 @@ const AllMatchesIndicator: FC = () => { ); }; -const DefaultPolicyIndicator: FC = () => { +function DefaultPolicyIndicator() { const styles = useStyles2(getStyles); return ( <> @@ -398,21 +647,31 @@ const DefaultPolicyIndicator: FC = () => { ); -}; +} -const InheritedProperties: FC<{ properties: InhertitableProperties }> = ({ properties }) => ( +function AutogeneratedRootIndicator() { + return Auto-generated policies; +} + +const InheritedProperties: FC<{ properties: InheritableProperties }> = ({ properties }) => ( - {Object.entries(properties).map(([key, value]) => ( -